package taskflowing import ( "appPlatform/api/version1/customerform" "appPlatform/api/version1/taskplatform/taskmanagement" "appPlatform/models/customerForm" "appPlatform/models/modelAppPlatform" "appPlatform/models/modelshr" "appPlatform/overall" "appPlatform/overall/publicmethod" "encoding/json" "fmt" "strconv" "strings" "time" "github.com/gin-gonic/gin" ) /* * @ 作者: 秦东 @ 时间: 2024-06-06 16:37:39 @ 功能: 获取App任务(任务流版本) @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) GainAppTaskList(c *gin.Context) { var requestData AppTaskSearch c.ShouldBindJSON(&requestData) if requestData.Id == "" { publicmethod.Result(100, requestData, c) return } if requestData.Page == 0 { requestData.Page = 1 } if requestData.PageSize == 0 { requestData.PageSize = 10 } context, _ := c.Get(overall.MyContJwt) var userCont modelshr.ManCont userCont.GetLoginCont(context) //当前操作人 gormDb := overall.CONSTANT_DB_CustomerForm.Model(&customerForm.RunFlowTask{}).Select("`id`").Where("appKey = ?", requestData.Id) switch requestData.Class { case 2: //待办事宜 gormDb = gormDb.Where("`status` = 3 AND FIND_IN_SET(?,`next_executor`)", userCont.Key) case 3: //已办事宜 gormDb = gormDb.Where("`status` IN (2,3,4) AND FIND_IN_SET(?,`participants`) AND NOT FIND_IN_SET(?,`next_executor`) AND `creater` <> ?", userCont.Key, userCont.Key, userCont.Key) case 4: //草稿箱 gormDb = gormDb.Where("`status` = 1 AND `creater` = ?", userCont.Key) case 5: //抄送我的 gormDb = gormDb.Where("`status` IN (2,3,4) AND FIND_IN_SET(?,`makeCopy`)", userCont.Key) default: //我的请求 gormDb = gormDb.Where("`status` IN (1,2,3,4) AND `creater` = ?", userCont.Key) } if requestData.Title != "" { gormDb = gormDb.Where("`title` LIKE ?", "%"+requestData.Title+"%") } if requestData.State != 0 { gormDb = gormDb.Where("`status` = ?", requestData.State) } //获取总数 var total int64 totalErr := gormDb.Count(&total).Error if totalErr != nil { total = 0 } var idAry []int64 gormDb = publicmethod.PageTurningSettings(gormDb, requestData.Page, requestData.PageSize) err := gormDb.Order("`update_time` desc").Find(&idAry).Error var userList []SendAppTaskFlowInfo if err != nil || len(idAry) < 1 { publicmethod.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(userList)), userList, c) return } overall.CONSTANT_DB_CustomerForm.Model(&customerForm.RunFlowTask{}).Where("`id` IN ?", idAry).Order("`start_time` desc").Find(&userList) for i := 0; i < len(userList); i++ { userList[i].FormVersionId = strconv.FormatInt(userList[i].VersionId, 10) userList[i].IdStr = strconv.FormatInt(userList[i].Id, 10) userList[i].RunFlowIdStr = strconv.FormatInt(userList[i].Id, 10) userList[i].FlowKeys = strconv.FormatInt(userList[i].FlowKey, 10) userList[i].CreaterInfo = GainSmaillUserInfo[int64](userList[i].Creater) userList[i].MastersKeyStr = strconv.FormatInt(userList[i].MastersKey, 10) userList[i].AppKeyStr = strconv.FormatInt(userList[i].AppKey, 10) userList[i].TableKeyStr = strconv.FormatInt(userList[i].TableKey, 10) if userList[i].NextExecutor != "" { nextAry := strings.Split(userList[i].NextExecutor, ",") for _, v := range nextAry { userList[i].CurrentNodeUser = append(userList[i].CurrentNodeUser, GainSmaillUserInfo[string](v)) } } userList[i].StartDate = publicmethod.UnixTimeToDay(userList[i].StartTime, 27) if userList[i].NextStep != 0 { nodeCont, idTrue := GainCurreNode(userList[i].FlowCont, userList[i].CurrentStep, userList[i].NextStep, userList[i].Status) if idTrue { userList[i].CurrentNodeName = nodeCont.NodeName } } if userList[i].MastesForm == "" || userList[i].MastesFormJson == "" { userList[i].MastesForm, userList[i].MastesFormJson = GainTaskFormData(userList[i].FlowKey) } if userList[i].Status == 3 && userList[i].NextStep != 0 { if userList[i].CurrentStep == 1 { userList[i].IsRetract = true } } } publicmethod.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(userList)), userList, c) } /* * @ 作者: 秦东 @ 时间: 2024-06-07 11:06:14 @ 功能: 获取App任务(包含非流程表单) @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) GainAppAllTaskList(c *gin.Context) { var requestData AppAllTaskSearch c.ShouldBindJSON(&requestData) if requestData.Id == "" { publicmethod.Result(100, requestData, c) return } if requestData.Page == 0 { requestData.Page = 1 } if requestData.PageSize == 0 { requestData.PageSize = 10 } context, _ := c.Get(overall.MyContJwt) var userCont modelshr.ManCont userCont.GetLoginCont(context) //当前操作人 gormDb := overall.CONSTANT_DB_CustomerForm.Model(&customerForm.TaskRecord{}).Select("`id`").Where("appKey = ?", requestData.Id) switch requestData.Class { case 2: //草稿箱 gormDb = gormDb.Where("`status` = 1 AND `creater` = ?", userCont.Key) default: //我的请求 gormDb = gormDb.Where("`status` IN (1,2,3,4) AND `creater` = ?", userCont.Key) } if requestData.Title != "" { gormDb = gormDb.Where("`title` LIKE ?", "%"+requestData.Title+"%") } //获取总数 var total int64 totalErr := gormDb.Count(&total).Error if totalErr != nil { total = 0 } var idAry []int64 gormDb = publicmethod.PageTurningSettings(gormDb, requestData.Page, requestData.PageSize) err := gormDb.Order("`id` desc").Find(&idAry).Error var userList []SendTaskInfo if err != nil || len(idAry) < 1 { publicmethod.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(userList)), userList, c) return } overall.CONSTANT_DB_CustomerForm.Model(&customerForm.TaskRecord{}).Where("`id` IN ?", idAry).Order("`id` desc").Find(&userList) for i := 0; i < len(userList); i++ { userList[i].States = userList[i].Status userList[i].IdStr = strconv.FormatInt(userList[i].Id, 10) userList[i].CreaterTimeStr = publicmethod.UnixTimeToDay(userList[i].CreaterTime, 27) userList[i].RunFlowIdStr = strconv.FormatInt(userList[i].RunFlowId, 10) userList[i].VersionIdStr = strconv.FormatInt(userList[i].VersionId, 10) userList[i].MastersKeyStr = strconv.FormatInt(userList[i].MastersKey, 10) userList[i].FlowKeyStr = strconv.FormatInt(userList[i].FlowKey, 10) userList[i].FlowRunSingStr = strconv.FormatInt(userList[i].FlowRunSing, 10) userList[i].TableKeyStr = strconv.FormatInt(userList[i].TableKey, 10) userList[i].AppKeyStr = strconv.FormatInt(userList[i].AppKey, 10) userList[i].CreaterInfo = GainSmaillUserInfo[int64](userList[i].Creater) if userList[i].Types == 1 && userList[i].Status == 3 && userList[i].RunFlowId != 0 { var runFlowInfo customerForm.RunWorkflow runFlowInfo.GetCont(map[string]interface{}{"`id`": userList[i].RunFlowId}, "`current_step`", "`next_step`", "`creater`") if runFlowInfo.NextStep != 0 && runFlowInfo.CurrentStep == 1 { if runFlowInfo.Creater == userCont.Key { userList[i].IsRetract = true } } } } publicmethod.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(userList)), userList, c) } /* * @ 作者: 秦东 @ 时间: 2024-06-07 13:27:30 @ 功能: 启动流程 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) RunAppWorkFlow(c *gin.Context) { var requestData publicmethod.PublicId err := c.ShouldBindJSON(&requestData) if err != nil { publicmethod.Result(100, err, c) return } if requestData.Id == "" { publicmethod.Result(100, err, c) return } var taskInfo customerForm.TaskRecord err = taskInfo.GetCont(map[string]interface{}{"`id`": requestData.Id}) if err != nil { publicmethod.Result(107, err, c) return } context, _ := c.Get(overall.MyContJwt) var userCont modelshr.ManCont userCont.GetLoginCont(context) //当前操作人 creetTime := time.Now().Unix() //当前时间 //获取任务 var runFlowInfo customerForm.RunWorkflow err = runFlowInfo.GetCont(map[string]interface{}{"`flow_key`": taskInfo.MastersKey}) if err != nil { //不存在,则新建工作流 //获取流程详情 var flowVersionInfo modelAppPlatform.WorkFlowVersion flowVersionInfo.GetCont(map[string]interface{}{"`id`": taskInfo.FlowRunSing}, "`content`") uuid := publicmethod.GetUUid(1) runUuId := publicmethod.GetUUid(6) //执行工作流内容 var workFlowInfo customerForm.RunWorkflow workFlowInfo.Id = uuid workFlowInfo.FlowKey, _ = strconv.ParseInt(requestData.Id, 10, 64) //统一识别符(任务标识符) workFlowInfo.Version = strconv.FormatInt(taskInfo.FlowRunSing, 10) //工作流版本 workFlowInfo.VersionCont = flowVersionInfo.Content //当前工作流内容 workFlowInfo.Creater = userCont.Key //流程发起人 workFlowInfo.Status = 3 //状态:1、草稿;2:驳回;3:审批中;4:归档;5:删除 workFlowInfo.StartTime = creetTime //开始时间 workFlowInfo.UpdateTime = creetTime //更新时间 workFlowInfo.RunKey = runUuId //当前执行识别符 // startCreaterKey := strconv.FormatInt(userCont.Key, 10) //当前操作人 //执行流程 // var executeWorkflow RunWorkFlow // executeWorkflow.Step = 0 //执行第几部 // executeWorkflow.FlowList = requestData.FlowList // executeWorkflow.Participant = append(executeWorkflow.Participant, startCreaterKey) // executeWorkflow.TotalSteps = len(requestData.FlowList) //流程总长度 // executeWorkflow.Uuid = uuid //流程唯一识别符 // executeWorkflow.RunUid = runUuId //执行Uid } else { //存在,则发起工作流 } } /* * @ 作者: 秦东 @ 时间: 2024-06-07 16:05:33 @ 功能: 编辑任务内容 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) EditTaskAppInfo(c *gin.Context) { var requestData publicmethod.PublicId err := c.ShouldBindJSON(&requestData) if err != nil { publicmethod.Result(100, err, c) return } if requestData.Id == "" { publicmethod.Result(1, err, c, "未知表单参数!请核对1后重新提交!") return } //Step1:判断任务是处在什么状态 var taskInfo customerForm.TaskRecord err = taskInfo.GetCont(map[string]interface{}{"`masters_key`": requestData.Id}, "`version_id`", "`mastesformjson`", "`status`", "`types`", `flow_key`, "`masters_key`") if err != nil { publicmethod.Result(1, err, c, "流程不存在!不可进行下一步") return } if !publicmethod.IsInTrue[int](taskInfo.Status, []int{1, 2, 4}) { publicmethod.Result(1, err, c, "流程既不是草稿,也未发表、归档!不可进行下一步") return } //Step2:展开表单 var formJsonCont customerform.CustomerFormMaster json.Unmarshal([]byte(taskInfo.MastesFormJson), &formJsonCont) //Step3:获取流程使用得表单数据表 var customerFormInfo modelAppPlatform.CustomerFormVersion err = customerFormInfo.GetCont(map[string]interface{}{"`id`": taskInfo.VersionId}, "`tablekey`", "`table_structure`", "`dict`") if err != nil { publicmethod.Result(107, err, c) return } var formUnitCont customerform.FormUnitInfo formUnitCont.GainMasterAndSunFormUnit(customerFormInfo.TableKey, formJsonCont.List, true) masterUnitList := make(map[string]customerform.MasterStruct) for _, v := range formUnitCont.MasterInfo { masterUnitList[v.Name] = v } mastKeyName, sunKeyName := formUnitCont.GainMasterAndSunFormUnitNameKey() masterDataInfo := GainCurrendLogData(taskInfo.MastersKey, customerFormInfo, formUnitCont, masterUnitList) var logDataInfo FormDataLog logDataInfo.FlowKey = taskInfo.MastersKey logDataInfo.GainFlowFoemLog() fmt.Printf("主表的数据返回值--->%v\n--->%v\n", masterDataInfo, logDataInfo.NewData) if len(logDataInfo.NewData) > 0 { logTime := logDataInfo.NewData["logTime"] newDataInfo := publicmethod.MapOut[string]() for i, v := range masterDataInfo { fmt.Printf("logDataInfo.masterDataInfo---->%v:%v--------->%T\n", i, v, v) for j, jv := range logDataInfo.NewData { if i == j { if i == "masters_key" { if mastKey, ok := jv.(uint64); ok { newDataInfo[i] = strconv.FormatUint(mastKey, 10) } } else if i == "creater" { if createrKey, ok := jv.(int64); ok { newDataInfo[i] = strconv.FormatInt(createrKey, 10) } } else { newDataInfo[i] = jv } } if j == "explicate" { newDataInfo["explicate"] = jv } } } logDataInfo.NewData = masterDataInfo logDataInfo.NewData["logTime"] = logTime masterDataInfo = newDataInfo } else { isWrite := true for i, v := range masterDataInfo { fmt.Printf("logDataInfo.masterDataInfo--1-->%v:%v--------->%T\n", i, v, v) if i == "masters_key" { if mastKey, ok := v.(uint64); ok { masterDataInfo[i] = strconv.FormatUint(mastKey, 10) } } if i == "creater" { if createrKey, ok := v.(int64); ok { masterDataInfo[i] = strconv.FormatInt(createrKey, 10) } } if i == "explicate" { isWrite = false } } if isWrite { masterDataInfo["explicate"] = "" } } masterDataInfo["flowKey"] = strconv.FormatInt(taskInfo.FlowKey, 10) sendData := publicmethod.MapOut[string]() sendData["masterDataInfo"] = masterDataInfo publicmethod.Result(0, sendData, c) return sendNewData := publicmethod.MapOut[string]() sendSunNewData := publicmethod.MapOut[string]() for i, v := range logDataInfo.NewData { if val, isOk := v.([]map[string]interface{}); !isOk { for mi, mv := range mastKeyName { if mi == i { sendNewData[mv] = v } } } else { // fmt.Printf("获取数据类型:---4-->%v----->%v\n", val, sunKeyName[i]) var newSunData []map[string]interface{} for _, sv := range val { sunOld := publicmethod.MapOut[string]() for smi, smv := range sv { for sui, suv := range sunKeyName[i] { if sui == smi { sunOld[suv] = smv } if smi == "id" { sunOld[suv] = smv } } } newSunData = append(newSunData, sunOld) fmt.Printf("获取数据类型:---4-->%v----->%v\n", sv, newSunData) } sendSunNewData[i] = newSunData } } for i, v := range sendSunNewData { sendNewData[i] = v } if len(sendNewData) > 0 { sendNewData["logTime"] = logDataInfo.NewData["logTime"] } fmt.Printf("获取数据类型:----->%v\n", sendNewData) sendData["newData"] = sendNewData sendData["oldData"] = EditLogCont(logDataInfo.OldData, mastKeyName, sunKeyName) sendData["newDataLen"] = len(sendNewData) sendData["logistrue"] = false if len(sendNewData) > 0 || len(logDataInfo.OldData) > 0 { sendData["logistrue"] = true } publicmethod.Result(0, sendData, c) } /* * @ 作者: 秦东 @ 时间: 2024-06-10 11:27:13 @ 功能: 再次保存草稿箱内容 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) SaveDraftAgain(c *gin.Context) { data, err := c.GetRawData() //接收表单提交得数据 if err != nil { publicmethod.Result(100, err, c) return } mapData := publicmethod.MapOut[string]() //初始化MAP err = json.Unmarshal(data, &mapData) //将json字符串转换成Map if err != nil { publicmethod.Result(100, err, c) return } taskId := "" if taskIdVal, ok := mapData["masters_key"]; !ok { publicmethod.Result(1, err, c, "非法表单!不能提交数据!") return } else { if akValStr, ok := taskIdVal.(string); ok { taskId = akValStr } } var formCont modelAppPlatform.CustomerFormView err = formCont.GetCont(map[string]interface{}{"`id`": mapData["versionId"]}) if err != nil { publicmethod.Result(107, err, c) return } var sunFormName []string //子表名称集合 if formCont.TableStructure != "" { //拆解获取子表名称 var sunFormStruct map[string]string err = json.Unmarshal([]byte(formCont.TableStructure), &sunFormStruct) if err == nil { for _, v := range sunFormStruct { if !publicmethod.IsInTrue[string](v, sunFormName) { sunFormName = append(sunFormName, v) } } } } masterField := publicmethod.MapOut[string]() //主表数据 sunFieldAry := publicmethod.MapOut[string]() //子表数据 for k, v := range mapData { if !publicmethod.IsInTrue[string](k, sunFormName) { if !publicmethod.IsInTrue[string](k, []string{"formId"}) { masterField[k] = v } } else { sunFieldAry[k] = v } } context, _ := c.Get(overall.MyContJwt) var userCont modelshr.ManCont userCont.GetLoginCont(context) //当前操作人 cureeTime := time.Now().Unix() var formJsonCont customerform.CustomerFormMaster json.Unmarshal([]byte(formCont.MastesFormJson), &formJsonCont) //解析表单字符串 var formUnitCont customerform.FormUnitInfo formUnitCont.GainMasterAndSunFormUnit(formCont.TableKey, formJsonCont.List, true) //获取主表及子表相关组件 //主表组件 masterUnitList := make(map[string]customerform.MasterStruct) for _, v := range formUnitCont.MasterInfo { masterUnitList[v.Name] = v } sendInfo := publicmethod.MapOut[string]() masrWriteMap := taskmanagement.MakeFormMapData(formCont.Flowkey, userCont.Key, userCont.AdminOrg, cureeTime, masterField, masterUnitList, 2) if len(masrWriteMap) > 0 { oldMasterData, _ := taskmanagement.MasterTableHandle(formCont.TableKey, userCont.Key, cureeTime, masrWriteMap) sendInfo["oldMasterData"] = oldMasterData } //判断是否有子表 if len(sunFieldAry) > 0 { //有子表 sunTypeAry := make(map[string]map[string]customerform.MasterStruct) for _, v := range formUnitCont.SunFormInfo { sunTypeAry[v.TableName] = v.UbitInfo } sunTableData := EditSunDatabase(formCont.Flowkey, userCont.Key, userCont.AdminOrg, cureeTime, formCont.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) sendInfo["sunTableData"] = sunTableData if len(sunTableData) > 0 { sonList, _ := taskmanagement.SonTableHandle(taskId, userCont.Key, cureeTime, sunFieldAry) sendInfo["sonList"] = sonList } } sendInfo["taskId"] = taskId sendInfo["mapData"] = mapData sendInfo["masterField"] = masterField sendInfo["sunFieldAry"] = sunFieldAry sendInfo["masterUnitList"] = masterUnitList sendInfo["cureeTime"] = cureeTime sendInfo["masrWriteMap"] = masrWriteMap publicmethod.Result(0, sendInfo, c) } /* * @ 作者: 秦东 @ 时间: 2024-06-13 11:20:04 @ 功能: 重新提交(有流程就发动流程,无流程就正常发表) @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) AfreshAppSubmit(c *gin.Context) { data, err := c.GetRawData() //接收表单提交得数据 if err != nil { publicmethod.Result(100, err, c) return } mapData := publicmethod.MapOut[string]() //初始化MAP err = json.Unmarshal(data, &mapData) //将json字符串转换成Map if err != nil { publicmethod.Result(100, err, c) return } taskId := "" if taskIdVal, ok := mapData["masters_key"]; !ok { publicmethod.Result(1, err, c, "非法表单!不能提交数据!") return } else { if akValStr, ok := taskIdVal.(string); ok { taskId = akValStr } } var flowListAry []RunFlow if flowAry, ok := mapData["flowList"]; ok { if akFlowValStr, ok := flowAry.(string); ok { json.Unmarshal([]byte(akFlowValStr), &flowListAry) } } var formCont modelAppPlatform.CustomerFormView err = formCont.GetCont(map[string]interface{}{"`id`": mapData["versionId"]}) if err != nil { publicmethod.Result(107, err, c) return } var sunFormName []string //子表名称集合 if formCont.TableStructure != "" { //拆解获取子表名称 var sunFormStruct map[string]string err = json.Unmarshal([]byte(formCont.TableStructure), &sunFormStruct) if err == nil { for _, v := range sunFormStruct { if !publicmethod.IsInTrue[string](v, sunFormName) { sunFormName = append(sunFormName, v) } } } } masterField := publicmethod.MapOut[string]() //主表数据 sunFieldAry := publicmethod.MapOut[string]() //子表数据 for k, v := range mapData { if !publicmethod.IsInTrue[string](k, sunFormName) { if !publicmethod.IsInTrue[string](k, []string{"formId"}) { masterField[k] = v } } else { sunFieldAry[k] = v } } context, _ := c.Get(overall.MyContJwt) var userCont modelshr.ManCont userCont.GetLoginCont(context) //当前操作人 cureeTime := time.Now().Unix() var formJsonCont customerform.CustomerFormMaster json.Unmarshal([]byte(formCont.MastesFormJson), &formJsonCont) //解析表单字符串 var formUnitCont customerform.FormUnitInfo formUnitCont.GainMasterAndSunFormUnit(formCont.TableKey, formJsonCont.List, true) //获取主表及子表相关组件 //主表组件 masterUnitList := make(map[string]customerform.MasterStruct) for _, v := range formUnitCont.MasterInfo { masterUnitList[v.Name] = v } sendInfo := publicmethod.MapOut[string]() masrWriteMap := taskmanagement.MakeFormMapData(formCont.Flowkey, userCont.Key, userCont.AdminOrg, cureeTime, masterField, masterUnitList, 2) if len(masrWriteMap) > 0 { oldMasterData, _ := taskmanagement.MasterTableHandle(formCont.TableKey, userCont.Key, cureeTime, masrWriteMap) sendInfo["oldMasterData"] = oldMasterData } //判断是否有子表 if len(sunFieldAry) > 0 { //有子表 sunTypeAry := make(map[string]map[string]customerform.MasterStruct) for _, v := range formUnitCont.SunFormInfo { sunTypeAry[v.TableName] = v.UbitInfo } sunTableData := EditSunDatabase(formCont.Flowkey, userCont.Key, userCont.AdminOrg, cureeTime, formCont.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) sendInfo["sunTableData"] = sunTableData if len(sunTableData) > 0 { sonList, _ := taskmanagement.SonTableHandle(taskId, userCont.Key, cureeTime, sunFieldAry) sendInfo["sonList"] = sonList } } //开启流程的 if formCont.FlowIsOpen == 1 { var runFlowInfo customerForm.RunWorkflow err = runFlowInfo.GetCont(map[string]interface{}{"`flow_key`": taskId}, "`id`", "`next_executor`", "`current_step`", "`next_step`", "`participants`", "`flow_key`", "`flow_cont`", "`runKey`") saveTask := publicmethod.MapOut[string]() //修改任务 if err != nil { uuid := publicmethod.GetUUid(1) runUuId := publicmethod.GetUUid(6) var taskInfo customerForm.TaskRecord taskInfo.GetCont(map[string]interface{}{"`masters_key`": taskId}, "`flow_key`", "`flow_run_sing`") //获取流程详情 var flowVersionInfo modelAppPlatform.WorkFlowVersion flowVersionInfo.GetCont(map[string]interface{}{"`id`": taskInfo.FlowRunSing}, "`content`") //执行工作流内容 var workFlowInfo customerForm.RunWorkflow workFlowInfo.Id = uuid workFlowInfo.FlowKey = taskInfo.FlowKey //统一识别符(任务标识符) workFlowInfo.Version = strconv.FormatInt(taskInfo.FlowRunSing, 10) //工作流版本 workFlowInfo.VersionCont = flowVersionInfo.Content //当前工作流内容 workFlowInfo.Creater = userCont.Key //流程发起人 workFlowInfo.Status = 3 //状态:1、草稿;2:驳回;3:审批中;4:归档;5:删除 workFlowInfo.StartTime = cureeTime //开始时间 workFlowInfo.UpdateTime = cureeTime //更新时间 workFlowInfo.RunKey = runUuId //当前执行识别符 startCreaterKey := strconv.FormatInt(userCont.Key, 10) //当前操作人 //执行流程 var executeWorkflow RunWorkFlow executeWorkflow.Step = 0 //执行第几部 executeWorkflow.FlowList = flowListAry executeWorkflow.Participant = append(executeWorkflow.Participant, startCreaterKey) executeWorkflow.TotalSteps = len(flowListAry) //流程总长度 executeWorkflow.Uuid = uuid //流程唯一识别符 executeWorkflow.RunUid = runUuId //执行Uid executeWorkflow.GainRunNode(startCreaterKey, 2, "发起审批") flowJsonCont, _ := json.Marshal(executeWorkflow.FlowList) //将步进流转化成json流 workFlowInfo.FlowCont = string(flowJsonCont) //流程执行体 workFlowInfo.CurrentStep = executeWorkflow.Step workFlowInfo.NextStep = executeWorkflow.NextStep //参与人去重 var parUser []string for _, v := range executeWorkflow.Participant { if !publicmethod.IsInTrue[string](v, parUser) { parUser = append(parUser, v) } } workFlowInfo.Participants = strings.Join(parUser, ",") nextRunUser := executeWorkflow.NextRunNodeUser(1) workFlowInfo.NextExecutor = strings.Join(nextRunUser, ",") if executeWorkflow.NextStep <= 0 { workFlowInfo.Status = 4 } err = workFlowInfo.WriteCont() //写入执行工作流 if err != nil { var taskInfo customerForm.TaskRecord taskInfo.EiteCont(map[string]interface{}{"`masters_key`": taskId}, map[string]interface{}{"`status`": 1}) publicmethod.Result(10001, err, c, "流程写入失败!请重新发起") return } if executeWorkflow.NextStep <= 0 { var taskCont customerForm.TaskRecord taskCont.EiteCont(map[string]interface{}{"`masters_key`": taskId}, map[string]interface{}{"`status`": 4}) } else { var taskCont customerForm.TaskRecord taskCont.EiteCont(map[string]interface{}{"`masters_key`": taskId}, map[string]interface{}{"`status`": 3}) } // saveTask["`flow_key`"] = 2 } else { var flowList []taskmanagement.RunFlow err = json.Unmarshal([]byte(runFlowInfo.FlowCont), &flowList) if err != nil { publicmethod.Result(107, err, c) return } startUs := strconv.FormatInt(userCont.Key, 10) //当前操作人 runUuId := publicmethod.GetUUid(6) //执行流程 var runFlow taskmanagement.RunWorkFlow runFlow.Step = 0 //执行第几部 runFlow.FlowList = flowList runFlow.Participant = append(runFlow.Participant, startUs) runFlow.TotalSteps = len(flowList) //流程总长度 runFlow.Uuid = runFlowInfo.Id runFlow.RunUid = runUuId runFlow.GainRunNode(startUs, 2, "重新发起流程") flowJsonCont, _ := json.Marshal(runFlow.FlowList) //将步进流转化成json流 SaveFlowCont := publicmethod.MapOut[string]() SaveFlowCont["`flow_cont`"] = string(flowJsonCont) SaveFlowCont["`current_step`"] = runFlow.Step SaveFlowCont["`next_step`"] = runFlow.NextStep SaveFlowCont["`runKey`"] = runUuId //参与人去重 var parUser []string for _, v := range runFlow.Participant { if !publicmethod.IsInTrue[string](v, parUser) { parUser = append(parUser, v) } } SaveFlowCont["`participants`"] = strings.Join(parUser, ",") nextRunUser := runFlow.NextRunNodeUser(1) SaveFlowCont["`next_executor`"] = strings.Join(nextRunUser, ",") SaveFlowCont["`status`"] = 3 if runFlow.NextStep <= 0 { SaveFlowCont["`status`"] = 4 } SaveFlowCont["`update_time`"] = time.Now().Unix() err = runFlowInfo.EiteCont(map[string]interface{}{"`id`": runFlowInfo.Id}, SaveFlowCont) if err != nil { publicmethod.Result(106, err, c) return } } saveTask["`status`"] = 3 saveTask["`edit_time`"] = time.Now().Unix() var taskInfo customerForm.TaskRecord taskInfo.EiteCont(map[string]interface{}{"`masters_key`": taskId}, saveTask) } else { //未开启流程的表单 saveTask := publicmethod.MapOut[string]() //修改任务 saveTask["`status`"] = 2 saveTask["`edit_time`"] = time.Now().Unix() var taskInfo customerForm.TaskRecord taskInfo.EiteCont(map[string]interface{}{"`masters_key`": taskId}, saveTask) } // sendInfo["taskId"] = taskId // sendInfo["mapData"] = mapData // sendInfo["masterField"] = masterField // sendInfo["sunFieldAry"] = sunFieldAry // sendInfo["masterUnitList"] = masterUnitList // sendInfo["cureeTime"] = cureeTime // sendInfo["masrWriteMap"] = masrWriteMap publicmethod.Result(0, sendInfo, c) }