作者 yangfu

模板修改

... ... @@ -3,6 +3,7 @@ package controllers
import (
"encoding/json"
"oppmg/common/log"
"oppmg/models"
"oppmg/protocol"
"oppmg/services/audit"
)
... ... @@ -42,6 +43,58 @@ func (this *TemplateController) TemplateAdd() {
msg = m
return
}
{
//审批人配置
v := request.AuditFlowConfig.NoApprover
if !(v == models.NoApproverPass || v == models.NoApproverToAdmin) {
msg = protocol.BadRequestParam("10068")
return
}
if len(request.AuditFlowConfig.ProcessConfig) == 0 {
msg = protocol.BadRequestParam("10069")
return
}
var count int
for i := range request.AuditFlowConfig.ProcessConfig {
config := request.AuditFlowConfig.ProcessConfig[i]
if !(config.ApproveType == models.AuditByDepartmentor || config.ApproveType == models.AuditByUser || config.ApproveType == models.AuditByRole) {
msg = protocol.BadRequestParam("10171")
return
}
if !(config.AcitonType == models.ActionTypeOr || config.AcitonType == models.ActionTypeAnd) {
msg = protocol.BadRequestParam("10172")
return
}
if config.ApproveType == models.AuditByUser {
if len(config.ToUser) == 0 {
msg = protocol.BadRequestParam("10170")
return
}
if len(config.ToUser) > 10 {
msg = protocol.BadRequestParam("10174")
return
}
}
if config.ApproveType == models.AuditByRole {
if len(config.ToRole) == 0 {
msg = protocol.BadRequestParam("10173")
return
}
if len(config.ToRole) > 1 {
msg = protocol.BadRequestParam("10175")
return
}
}
if config.ProcessType == models.FlowTypeNormal {
count++
if count > 1 {
msg = protocol.BadRequestParam("10176")
return
}
}
}
}
rsp, err := audit.TemplateAdd(uid, companyId, request)
msg = protocol.NewReturnResponse(rsp, err)
return
... ...
package models
import (
"fmt"
"time"
"github.com/astaxie/beego/orm"
)
type AuditFlowConfig struct {
Id int `orm:"column(id);auto" description:"唯一编号"`
AuditTemplateId int64 `orm:"column(audit_template_id)" description:"表audit_template.id 所属审批模板编号"`
AuditGroupId int64 `orm:"column(audit_group_id)" description:"审核组id (同一个审批批次)"`
Level int `orm:"column(level)" description:"审批层级顺序,审批步骤 第几步"`
AuditFlowType int `orm:"column(audit_flow_type)" description:"审核流类型 1.部门长 2.指定成员 3.指定角色"`
FromSpecialUser string `orm:"column(from_special_user);size(500)" description:"特殊指定的审批单发起人 json [ ]"`
ToRole string `orm:"column(to_role);null" description:"指定角色"`
ToUser string `orm:"column(to_user);null" description:"指定人"`
FlowType int `orm:"column(flow_type)" description:"审批类型 1:正常审核 2:特殊审核"`
ActionType int `orm:"column(action_type)" description:"审批执行方式【1:or】【2:and】"`
CreateAt time.Time `orm:"column(create_at);type(timestamp)" description:"创建时间"`
UpdateAt time.Time `orm:"column(update_at);type(timestamp)" description:"更新时间"`
ConfigData string `orm:"column(config_data);null" description:"配置数据-冗余"`
}
//审核对象
const (
AuditByDepartmentor = iota + 1 //部门长
AuditByUser //指定用户
AuditByRole //指定角色
//AuditBySpecailUser //特殊人员
)
//审核方式
const (
ActionTypeOr = 1
ActionTypeAnd = 2
)
//审核类型
const (
FlowTypeNormal = iota + 1 //正常审核流程
FlowTypeSpecail //特殊审核流程
)
//审核人为空
const (
NoApproverPass = 1 //自动通过
NoApproverToAdmin = 2 //转交给公司管理员
)
var (
DeleteAuditFlowConfigSql = "delete from audit_flow_config where audit_template_id=?"
)
func (t *AuditFlowConfig) TableName() string {
return "audit_flow_config"
}
func init() {
orm.RegisterModel(new(AuditFlowConfig))
}
// AddAuditFlowConfig insert a new AuditFlowConfig into database and returns
// last inserted Id on success.
func AddAuditFlowConfig(m *AuditFlowConfig) (id int64, err error) {
o := orm.NewOrm()
id, err = o.Insert(m)
return
}
// GetAuditFlowConfigById retrieves AuditFlowConfig by Id. Returns error if
// Id doesn't exist
func GetAuditFlowConfigById(id int) (v *AuditFlowConfig, err error) {
o := orm.NewOrm()
v = &AuditFlowConfig{Id: id}
if err = o.Read(v); err == nil {
return v, nil
}
return nil, err
}
// UpdateAuditFlowConfig updates AuditFlowConfig by Id and returns error if
// the record to be updated doesn't exist
func UpdateAuditFlowConfigById(m *AuditFlowConfig) (err error) {
o := orm.NewOrm()
v := AuditFlowConfig{Id: m.Id}
// ascertain id exists in the database
if err = o.Read(&v); err == nil {
var num int64
if num, err = o.Update(m); err == nil {
fmt.Println("Number of records updated in database:", num)
}
}
return
}
// DeleteAuditFlowConfig deletes AuditFlowConfig by Id and returns error if
// the record to be deleted doesn't exist
func DeleteAuditFlowConfig(id int) (err error) {
o := orm.NewOrm()
v := AuditFlowConfig{Id: id}
// ascertain id exists in the database
if err = o.Read(&v); err == nil {
var num int64
if num, err = o.Delete(&AuditFlowConfig{Id: id}); err == nil {
fmt.Println("Number of records deleted in database:", num)
}
}
return
}
func GetAuditFlowConfig(id int64) ([]*AuditFlowConfig, error) {
o := orm.NewOrm()
var (
err error
result []*AuditFlowConfig
)
_, err = o.QueryTable(&AuditFlowConfig{}).
Filter("audit_template_id", id).
All(&result)
return result, err
}
... ...
... ... @@ -79,8 +79,9 @@ func (input ValidateInputRedio) ValidateConfig() error {
/***********审核模板管理**********/
/*TemplateAdd */
type TemplateAddRequest struct {
Template Template `json:"template"`
Example string `json:"example"` //示例
Template Template `json:"template"`
Example string `json:"example"` //示例
AuditFlowConfig AuditFlowConfig `json:"audit_flow_config"`
}
type TemplateAddResponse struct {
}
... ... @@ -95,10 +96,25 @@ type Template struct {
InputList []*InputElement `json:"inputList" valid:"Required;"`
}
type AuditFlowConfig struct {
NoApprover int `json:"no_approver" valid:"Required;"`
ProcessConfig []ProcessConfig `json:"process_config"` //创建时 0
}
type ProcessConfig struct {
ApproveType int `json:"approve_type"` //1.部门长 2 指定成员 3.指定角色
ProcessType int `json:"process_type"`
AcitonType int `json:"aciton_type"`
GroupId int `json:"group_id"` //分组id
FromSpecialUser []VisibleObject `json:"from_special_user"`
ToRole []VisibleObject `json:"to_role"`
ToUser []VisibleObject `json:"to_user"`
}
/*TemplateUpdate */
type TemplateUpdateRequest struct {
Template Template `json:"template"`
Example string `json:"example"` //示例`
Template Template `json:"template"`
Example string `json:"example"` //示例`
AuditFlowConfig AuditFlowConfig `json:"audit_flow_config"`
}
type TemplateUpdateResponse struct {
}
... ... @@ -162,8 +178,9 @@ type TemplateGetRequest struct {
Id int `json:"id" valid:"Required"`
}
type TemplateGetResponse struct {
Template Template `json:"template"`
Example string `json:"example"` //示例`
Template Template `json:"template"`
Example string `json:"example"` //示例`
AuditFlowConfig AuditFlowConfig `json:"audit_flow_config"`
}
/*TemplateEditSort */
... ...
... ... @@ -64,6 +64,15 @@ var errmessge ErrorMap = map[string]string{
"10064": "编码已存在",
"10065": "编码长度最多6个字符",
"10067": "一级分类不存在",
"10068": "审核人为空参数有误",
"10069": "未设置审核人",
"10170": "请选择指定成员",
"10171": "请选择审批人类别",
"10172": "请选择审批方式",
"10173": "请选择指定角色",
"10174": "人数不能超过10个",
"10175": "请选择一个角色",
"10176": "至多添加一个审批人",
//公司相关
"12001": "未找到公司信息",
... ...
... ... @@ -45,7 +45,7 @@ func TemplateAdd(uid, companyId int64, request *protocol.TemplateAddRequest) (rs
Doc: request.Template.Doc,
Icon: request.Template.Icon,
Code: request.Template.Code,
NoApprover: 1, //TODO:配置
NoApprover: int8(request.AuditFlowConfig.NoApprover), //TODO:配置
SortNum: 0,
VisibleType: int8(0),
EnableStatus: 1,
... ... @@ -82,11 +82,61 @@ func TemplateAdd(uid, companyId int64, request *protocol.TemplateAddRequest) (rs
}
}
//审核配置
{
//删除旧的配置
if err = utils.ExecuteSQLWithOrmer(orm, models.DeleteAuditFlowConfigSql, template.Id); err != nil {
log.Error(err.Error())
orm.Rollback()
return
}
//插入新的审批配置
var normalLevel int = 1
for i := range request.AuditFlowConfig.ProcessConfig {
config := request.AuditFlowConfig.ProcessConfig[i]
flowConfig := &models.AuditFlowConfig{
AuditFlowType: config.ProcessType,
}
if config.ProcessType == models.FlowTypeNormal {
flowConfig.Level = normalLevel
normalLevel++
} else {
flowConfig.Level = 1
flowConfig.FromSpecialUser = jsonAssertMarsh(getIdsFrom(config.FromSpecialUser))
}
flowConfig.AuditTemplateId = templateId
flowConfig.ToRole = jsonAssertMarsh(getIdsFrom(config.ToRole))
flowConfig.ToUser = jsonAssertMarsh(getIdsFrom(config.ToUser))
flowConfig.ActionType = config.AcitonType
flowConfig.CreateAt = time.Now()
flowConfig.AuditGroupId = int64(config.GroupId)
flowConfig.ConfigData = jsonAssertMarsh(config)
if _, err = orm.Insert(flowConfig); err != nil {
log.Error(err.Error())
orm.Rollback()
return
}
}
}
orm.Commit()
rsp = &protocol.TemplateAddResponse{}
return
}
func jsonAssertMarsh(v interface{}) string {
if data, e := json.Marshal(v); e != nil {
log.Error(fmt.Sprintf("%v %v", e.Error(), v))
return ""
} else {
return string(data)
}
}
func getIdsFrom(v []protocol.VisibleObject) (ids []int) {
for i := range v {
ids = append(ids, v[i].Id)
}
return
}
//模板更新
func TemplateUpdate(uid, companyId int64, request *protocol.TemplateUpdateRequest) (rsp *protocol.TemplateUpdateResponse, err error) {
... ... @@ -144,6 +194,42 @@ func TemplateUpdate(uid, companyId int64, request *protocol.TemplateUpdateReques
}
}
//审核配置
//审核配置
{
//删除旧的配置
if err = utils.ExecuteSQLWithOrmer(orm, models.DeleteAuditFlowConfigSql, template.Id); err != nil {
log.Error(err.Error())
orm.Rollback()
return
}
//插入新的审批配置
var normalLevel int = 1
for i := range request.AuditFlowConfig.ProcessConfig {
config := request.AuditFlowConfig.ProcessConfig[i]
flowConfig := &models.AuditFlowConfig{
AuditFlowType: config.ProcessType,
}
if config.ProcessType == models.FlowTypeNormal {
flowConfig.Level = normalLevel
normalLevel++
} else {
flowConfig.Level = 1
flowConfig.FromSpecialUser = jsonAssertMarsh(getIdsFrom(config.FromSpecialUser))
}
flowConfig.AuditTemplateId = template.Id
flowConfig.ToRole = jsonAssertMarsh(getIdsFrom(config.ToRole))
flowConfig.ToUser = jsonAssertMarsh(getIdsFrom(config.ToUser))
flowConfig.ActionType = config.AcitonType
flowConfig.CreateAt = time.Now()
flowConfig.AuditGroupId = int64(config.GroupId)
flowConfig.ConfigData = jsonAssertMarsh(config)
if _, err = orm.Insert(flowConfig); err != nil {
log.Error(err.Error())
orm.Rollback()
return
}
}
}
orm.Commit()
rsp = &protocol.TemplateUpdateResponse{}
... ... @@ -323,6 +409,7 @@ func TemplateGet(uid, companyId int64, request *protocol.TemplateGetRequest) (rs
var (
template *models.AuditTemplate
auditForm []*models.AuditForm
configs []*models.AuditFlowConfig
)
rsp = &protocol.TemplateGetResponse{}
if template, err = models.GetAuditTemplateById(int64(request.Id)); err != nil {
... ... @@ -357,6 +444,23 @@ func TemplateGet(uid, companyId int64, request *protocol.TemplateGetRequest) (rs
SectionType: input.Section,
})
}
if configs, err = models.GetAuditFlowConfig(template.Id); err != nil {
log.Error("template:%v %v", template.Id, err.Error())
err = nil
return
}
rsp.AuditFlowConfig = protocol.AuditFlowConfig{
NoApprover: int(template.NoApprover),
}
for i := range configs {
config := configs[i]
var configItem protocol.ProcessConfig
if e := json.Unmarshal([]byte(config.ConfigData), &configItem); e != nil {
log.Error(e.Error())
continue
}
rsp.AuditFlowConfig.ProcessConfig = append(rsp.AuditFlowConfig.ProcessConfig, configItem)
}
}
return
}
... ...