package taskmanagement import ( "appPlatform/api/version1/customerform" datacenter "appPlatform/api/version1/dataCenter" "appPlatform/api/version1/workWechat" "appPlatform/middleware/grocerystore" "appPlatform/models/customerForm" "appPlatform/models/modelAppPlatform" "appPlatform/models/modelshr" "appPlatform/overall" "appPlatform/overall/publicmethod" "encoding/json" "errors" "fmt" "regexp" "strconv" "strings" "time" "github.com/gin-gonic/gin" "gorm.io/gorm" ) /* * @ 作者: 秦东 @ 时间: 2023-09-27 14:21:08 @ 功能: 用户端自定义表单新增记录 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) AddFormAddData(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 } if _, ok := mapData["formId"]; !ok { publicmethod.Result(1, err, c, "非法表单!不能提交数据!") return } sendData := publicmethod.MapOut[string]() var formCont modelAppPlatform.CustomerFormView //获取指定版本的表单 err = formCont.GetCont(map[string]interface{}{"`id`": mapData["formId"]}) 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", "id"}) { masterField[k] = v } } else { sunFieldAry[k] = v } } context, _ := c.Get(overall.MyContJwt) var userCont modelshr.ManCont userCont.GetLoginCont(context) uuid := publicmethod.GetUUid(1) cureeTime := time.Now().Unix() master, sunTable, jsonerr := GainFormStruct(formCont.MastesFormJson) if jsonerr != nil { publicmethod.Result(104, err, c) return } // master, _, _ := GainFormStruct(formCont.MastesFormJson) masterWriteVal := MakeTableVal(uuid, userCont.Key, cureeTime, masterField, master) //任务列表 var taskCont modelAppPlatform.Task taskCont.MastersKey = uuid taskCont.Title = fmt.Sprintf("%v-%v(%v)-%v", formCont.Name, userCont.Name, userCont.Number, publicmethod.UnixTimeToDay(cureeTime, 14)) //标题"` taskCont.Creater = userCont.Key //创建人"` taskCont.CreaterTime = cureeTime //创建时间"` taskCont.EditTime = cureeTime //编辑时间"` taskCont.Types = 1 //类型(1:普通表单;2:流程表单)"` taskCont.VersionId = formCont.Id //来源于哪个表单"` taskCont.Status = 2 //判断是否 if len(sunFieldAry) > 0 { //有子表 err = WriteSunDatabase(uuid, userCont.Key, cureeTime, formCont.TableKey, masterWriteVal, sunFieldAry, sunTable) } else { //无子表 err = overall.CONSTANT_DB_CustomerForm.Table(formCont.TableKey).Create(masterWriteVal).Error } if err != nil { publicmethod.Result(104, err, c) return } overall.CONSTANT_DB_AppPlatform.Create(&taskCont) // sendData["err"] = err // sendData["data"] = data // sendData["mapData"] = mapData // sendData["formCont"] = formCont sendData["master"] = master sendData["sunTable"] = sunTable // sendData["jsonerr"] = jsonerr // sendData["jsondfg"] = jsondfg // sendData["formJsonCont"] = formJsonCont sendData["master_len"] = len(master) sendData["sunTable_len"] = len(sunTable) // sendData["masterWriteVal"] = masterWriteVal // sendData["sunFormName"] = sunFormName // sendData["sunFieldAry"] = sunFieldAry sendData["masterField"] = masterField publicmethod.Result(0, sendData, c) } /* * @ 作者: 秦东 @ 时间: 2023-09-28 09:37:49 @ 功能: 主表与子表数据写入 @ 参数 #uuid 唯一标识 #creater 创建人 #createrTime 创建时间 #masterTableName 主表标识 #masterDataCont 主表数据 #sunDataList 字表数据列表 @ 返回值 # @ 方法原型 # */ func WriteSunDatabase(uuid, creater, createrTime int64, masterTableName string, masterDataCont, sunDataList map[string]interface{}, sunTable map[string]map[string]customerform.MasterStruct) (err error) { if len(masterDataCont) > 0 { if len(sunDataList) > 0 { sunMasterMap := publicmethod.MapOut[string]() //子表存在时,执行主表和子表数据写入 for k, v := range sunDataList { // if k == "table1693811044212" { s, ok := v.([]interface{}) //获取值类型 if !ok { err = errors.New("表单数据错误!请验证后重新提交!") return } else { //判断是否有数据 if len(s) > 0 { var sunCont []map[string]interface{} for _, sv := range s { //拆分子表 if sdf, isOk := sv.(map[string]interface{}); isOk { if sunTableType, sunIsOk := sunTable[k]; sunIsOk { masterWriteVal := MakeFormMapData(uuid, creater, createrTime, sdf, sunTableType, 2) //转换数据表值 if len(masterWriteVal) > 0 { sunCont = append(sunCont, masterWriteVal) } } } } if len(sunCont) > 0 { sunMasterMap[k] = sunCont } } } } if len(sunMasterMap) > 0 { gormDb := overall.CONSTANT_DB_CustomerForm.Begin() masterErr := gormDb.Table(masterTableName).Create(masterDataCont).Error sunCreateIsOk := true for k, v := range sunMasterMap { sunErr := gormDb.Table(k).Create(v).Error if sunErr != nil { sunCreateIsOk = false break } } if masterErr == nil && sunCreateIsOk { err = gormDb.Commit().Error publicmethod.WriteLog("write", "写入自定义表单", err, masterDataCont, sunDataList) } else { gormDb.Rollback() err = errors.New("表单数据提交失败!请重新提交") publicmethod.WriteLog("e", "写入自定义表单", masterTableName, err) } } else { gormDb := overall.CONSTANT_DB_CustomerForm masterErr := gormDb.Table(masterTableName).Create(masterDataCont).Error if masterErr != nil { publicmethod.WriteLog("write", "写入自定义表单", masterTableName, masterErr) } } } else { //子表不存在时,写入主表数据 err = overall.CONSTANT_DB_CustomerForm.Table(masterTableName).Create(masterDataCont).Error publicmethod.WriteLog("write", "写入自定义表单", masterTableName, err) } } else { err = errors.New("表单数据提交失败!请重新提交") publicmethod.WriteLog("e", "写入自定义表单", masterTableName, err) } return } /* * @ 作者: 秦东 @ 时间: 2023-09-27 16:01:48 @ 功能: 组装数据表值 @ 参数 # @ 返回值 # @ 方法原型 # */ func MakeTableVal(uuid, userKey, cureeTime int64, fieldVal map[string]interface{}, subUnit map[string]customerform.MasterStruct) map[string]interface{} { keyAndVal := make(map[string]interface{}) keyAndVal["masters_key"] = uuid keyAndVal["creater"] = userKey keyAndVal["creater_time"] = cureeTime keyAndVal["edit_time"] = cureeTime for k, v := range fieldVal { if v != "" { if val, isOk := subUnit[k]; isOk { fielfInfoClass := customerform.AnalysisTable(val) // fmt.Printf("k--->%v\nv--->%T\nfielfInfoClass------>%v\n\n\n", k, v, fielfInfoClass) switch fielfInfoClass.Types { case "int", "bigint": //值类型是数组,并且需要分开存储 switch fielfInfoClass.ControlType { case "year", "month", "date", "datetime": if strVal, ok := v.(string); ok { localTime, _ := time.ParseInLocation(time.RFC3339, strVal, time.Local) keyAndVal[k] = localTime.Unix() } else { keyAndVal[k] = v } case "array": if fielfInfoClass.Signed { kEnd := fmt.Sprintf("%v_end", k) if strVal, ok := v.([]interface{}); ok { if len(strVal) >= 2 { if starTimeStr, tOk := strVal[0].(string); tOk { starTime, _ := time.ParseInLocation(time.RFC3339, starTimeStr, time.Local) keyAndVal[k] = starTime.Unix() } else { keyAndVal[k] = strVal[0] } if endTimeStr, tOk := strVal[len(strVal)-1].(string); tOk { endTime, _ := time.ParseInLocation(time.RFC3339, endTimeStr, time.Local) keyAndVal[kEnd] = endTime.Unix() } else { keyAndVal[kEnd] = strVal[len(strVal)-1] } } } } else { if strVal, ok := v.(string); ok { floatVal, _ := strconv.ParseInt(strVal, 10, 64) keyAndVal[k] = floatVal } else { keyAndVal[k] = v } } case "bigint": if strVal, ok := v.(string); ok { floatVal, _ := strconv.ParseInt(strVal, 10, 64) keyAndVal[k] = floatVal } else { keyAndVal[k] = v } case "int": if strVal, ok := v.(string); ok { floatVal, _ := strconv.Atoi(strVal) keyAndVal[k] = floatVal } else { keyAndVal[k] = v } case "booble": if strVal, ok := v.(string); ok { floatVal, _ := strconv.Atoi(strVal) keyAndVal[k] = floatVal } else if strVal, ok := v.(bool); ok { if strVal { keyAndVal[k] = fielfInfoClass.DefaultValue } else { keyAndVal[k] = fielfInfoClass.DefaultValuees } } else { keyAndVal[k] = v } default: } case "booble": if strVal, ok := v.(string); ok { floatVal, _ := strconv.Atoi(strVal) keyAndVal[k] = floatVal } else if strVal, ok := v.(bool); ok { if strVal { keyAndVal[k] = fielfInfoClass.DefaultValue } else { keyAndVal[k] = fielfInfoClass.DefaultValuees } } else { keyAndVal[k] = v } case "float": if strVal, ok := v.(string); ok { floatVal, _ := strconv.ParseFloat(strVal, 64) keyAndVal[k] = floatVal } else { keyAndVal[k] = v } case "decimal": if strVal, ok := v.(string); ok { floatVal, _ := strconv.ParseFloat(strVal, 64) keyAndVal[k] = floatVal } else { keyAndVal[k] = v } case "mediumtext", "longtext": if valAry, ok := v.([]interface{}); ok { if len(valAry) > 0 { valStrJson, _ := json.Marshal(valAry) keyAndVal[k] = string(valStrJson) } else { keyAndVal[k] = "" } } else { if fielfInfoClass.ControlType == "array" { if valStr, ok := v.(string); ok { valStrAry := strings.Split(valStr, ",") if len(valStrAry) > 0 { valStrJson, _ := json.Marshal(valStrAry) keyAndVal[k] = string(valStrJson) } else { keyAndVal[k] = "" } } else { keyAndVal[k] = v } } else { keyAndVal[k] = v } } default: if fielfInfoClass.Types != "" { if valAry, ok := v.([]interface{}); ok { if len(valAry) > 0 { valStrJson, _ := json.Marshal(valAry) keyAndVal[k] = string(valStrJson) } else { keyAndVal[k] = "" } } else { if fielfInfoClass.ControlType == "array" { if valStr, ok := v.(string); ok { valStrAry := strings.Split(valStr, ",") if len(valStrAry) > 0 { valStrJson, _ := json.Marshal(valStrAry) keyAndVal[k] = string(valStrJson) } else { keyAndVal[k] = "" } } else { keyAndVal[k] = v } } else { keyAndVal[k] = v } } } } } } // } else { // keyAndVal[k] = v // } } return keyAndVal } /* * @ 作者: 秦东 @ 时间: 2023-09-27 14:30:57 @ 功能: 获取组件结构体 @ 参数 # @ 返回值 # @ 方法原型 # */ func GainFormStruct(formTabelJson string) (master map[string]customerform.MasterStruct, sunTable map[string]map[string]customerform.MasterStruct, err error) { //将表格组件json数据转化成结构体 var formJsonCont customerform.CustomerFormMaster json.Unmarshal([]byte(formTabelJson), &formJsonCont) // fmt.Printf("将表格组件json数据转化成结构体---->%v---->%v\n", err, formTabelJson) // if err != nil { // return // } masterAry := make(map[string]customerform.MasterStruct) sunTableAry := make(map[string]map[string]customerform.MasterStruct) for _, v := range formJsonCont.List { switch v.Type { case "grid", "tabs": if len(v.Columns) > 0 { for _, cv := range v.Columns { for _, cvl := range cv.List { masterAry[cvl.Name] = cvl } } } case "card", "div": if len(v.List) > 0 { for _, cvl := range v.List { masterAry[cvl.Name] = cvl } } case "table", "flex": if len(v.List) > 0 { sunTableGd := make(map[string]customerform.MasterStruct) for _, vl := range v.List { sunTableGd[vl.Name] = vl } sunTableAry[v.Name] = sunTableGd } default: // fmt.Printf("获取组件结构体-->%v-->%v\n", v.Name, v) if v.Name != "" { masterAry[v.Name] = v } } } master = masterAry sunTable = sunTableAry return } /* * @ 作者: 秦东 @ 时间: 2023-10-07 13:18:35 @ 功能: 用户端自定义表单新增记录(新版) @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) AddFormAddNewData(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 } if _, ok := mapData["formId"]; !ok { publicmethod.Result(1, err, c, "非法表单!不能提交数据!") return } var formCont modelAppPlatform.CustomerFormView //获取指定版本的表单 err = formCont.GetCont(map[string]interface{}{"`id`": mapData["formId"]}) 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", "id"}) { masterField[k] = v } } else { sunFieldAry[k] = v } } context, _ := c.Get(overall.MyContJwt) var userCont modelshr.ManCont userCont.GetLoginCont(context) //当前操作人 uuid := publicmethod.GetUUid(1) //统一识别符 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 } masrWriteMap := MakeFormMapData(uuid, userCont.Key, cureeTime, masterField, masterUnitList, 1) masrWriteMap["flowIsOpen"] = formCont.FlowIsOpen //任务列表 var taskCont modelAppPlatform.Task taskCont.MastersKey = uuid taskCont.Title = fmt.Sprintf("%v-%v(%v)-%v", formCont.Name, userCont.Name, userCont.Number, publicmethod.UnixTimeToDay(cureeTime, 14)) //标题"` taskCont.Creater = userCont.Key //创建人"` taskCont.CreaterTime = cureeTime //创建时间"` taskCont.EditTime = cureeTime //编辑时间"` taskCont.Types = formCont.Classify //类型(1:普通表单;2:流程表单)"` taskCont.VersionId = formCont.Id //来源于哪个表单"` taskCont.Status = 2 if formCont.Classify == 2 { taskCont.Status = 3 taskCont.FlowKey = formCont.Flowkey var flowInfo modelAppPlatform.FlowVersion flowInfo.GetCont(map[string]interface{}{"`key`": formCont.Flowkey, "`state`": 1}, "`id`") taskCont.FlowRunSing = flowInfo.Id } //判断是否 if len(sunFieldAry) > 0 { //有子表 sunTypeAry := make(map[string]map[string]customerform.MasterStruct) for _, v := range formUnitCont.SunFormInfo { sunTypeAry[v.TableName] = v.UbitInfo } err = WriteSunDatabase(uuid, userCont.Key, cureeTime, formCont.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) } else { // //无子表 err = overall.CONSTANT_DB_CustomerForm.Table(formCont.TableKey).Create(masrWriteMap).Error } if err != nil { publicmethod.Result(104, err, c) return } taskCont.MastesForm = formCont.MastesForm taskCont.MastesFormJson = formCont.MastesFormJson err = overall.CONSTANT_DB_AppPlatform.Create(&taskCont).Error // for k, v := range masrWriteMap { // fmt.Printf("%v----> %T\n", k, v) // } sendData := publicmethod.MapOut[string]() sendData["uuid"] = strconv.FormatInt(uuid, 10) sendData["cureeTime"] = cureeTime sendData["formUnitCont"] = formUnitCont sendData["masterField"] = masterField sendData["sunFieldAry"] = sunFieldAry sendData["sunFieldAry_len"] = len(sunFieldAry) sendData["masrWriteMap"] = masrWriteMap sendData["sunFormName"] = sunFormName sendData["mapData"] = mapData publicmethod.Result(0, sendData, c) } /* * @ 作者: 秦东 @ 时间: 2023-10-07 15:35:07 @ 功能: 组装数据表新增数据 @ 参数 #uuid 统一识别符 #userKey 当前操作人 #cureeTime 操作时间 #fieldVal 提交数据得键值对 #subUnit 组件信息 #calss 1:新增;2:编辑 @ 返回值 # @ 方法原型 # */ func MakeFormMapData(uuid, userKey, cureeTime int64, fieldVal map[string]interface{}, subUnit map[string]customerform.MasterStruct, calss int) map[string]interface{} { keyAndVal := make(map[string]interface{}) if calss == 1 { keyAndVal["creater_time"] = cureeTime } keyAndVal["masters_key"] = uuid keyAndVal["creater"] = userKey keyAndVal["edit_time"] = cureeTime for k, v := range fieldVal { fmt.Printf("写入字段:%v->%v\n", k, v) if k == "id" { keyAndVal[k] = v } if v != "" { if val, isOk := subUnit[k]; isOk { fmt.Printf("写入字段--->:%v->%v\n", k, val) fielfInfoClass := customerform.AnalysisFormUnitClass(val) switch fielfInfoClass.FieldType { case "int": if strVal, ok := v.(string); ok { keyAndVal[k], _ = strconv.Atoi(strVal) } else { keyAndVal[k] = v } case "bigint": if fielfInfoClass.ValIsAry { //判断值是否为数组 endField := fmt.Sprintf("%v_end", k) if strVal, ok := v.([]interface{}); ok { if len(strVal) >= 2 { if starTimeStr, tOk := strVal[0].(string); tOk { keyAndVal[k], _ = strconv.ParseInt(starTimeStr, 10, 64) } else { keyAndVal[k] = strVal[0] } if endTimeStr, tOk := strVal[len(strVal)-1].(string); tOk { keyAndVal[endField], _ = strconv.ParseInt(endTimeStr, 10, 64) } else { keyAndVal[endField] = strVal[len(strVal)-1] } } } } else { if strVal, ok := v.(string); ok { fieldVal, _ := strconv.ParseInt(strVal, 10, 64) keyAndVal[k] = fieldVal } else { keyAndVal[k] = v } } case "float": if strVal, ok := v.(string); ok { floatVal, _ := strconv.ParseFloat(strVal, 64) keyAndVal[k] = floatVal } else { keyAndVal[k] = v } case "decimal": if strVal, ok := v.(string); ok { floatVal, _ := strconv.ParseFloat(strVal, 64) keyAndVal[k] = floatVal } else { keyAndVal[k] = v } case "mediumtext", "longtext": if valAry, ok := v.([]interface{}); ok { if len(valAry) > 0 { valStrJson, _ := json.Marshal(valAry) keyAndVal[k] = string(valStrJson) } else { keyAndVal[k] = "" } } else { if fielfInfoClass.ValIsAry && fielfInfoClass.UnitName != "upload" { if valStr, ok := v.(string); ok { valStrAry := strings.Split(valStr, ",") if len(valStrAry) > 0 { valStrJson, _ := json.Marshal(valStrAry) keyAndVal[k] = string(valStrJson) } else { keyAndVal[k] = "" } } else if valAry, ok := v.([]interface{}); ok { if len(valAry) > 0 { valStrJson, _ := json.Marshal(valAry) keyAndVal[k] = string(valStrJson) } else { keyAndVal[k] = "" } } else { keyAndVal[k] = v } } else { keyAndVal[k] = v } } case "varchar": if valAry, ok := v.([]interface{}); ok { if len(valAry) > 0 { valStrJson, _ := json.Marshal(valAry) keyAndVal[k] = string(valStrJson) } else { keyAndVal[k] = "" } } else { if fielfInfoClass.ValIsAry { if valStr, ok := v.(string); ok { valStrAry := strings.Split(valStr, ",") if len(valStrAry) > 0 { valStrJson, _ := json.Marshal(valStrAry) keyAndVal[k] = string(valStrJson) } else { keyAndVal[k] = "" } } else { keyAndVal[k] = v } } else { keyAndVal[k] = v } } default: } } } } return keyAndVal } /* * @ 作者: 秦东 @ 时间: 2024-04-03 09:40:31 @ 功能:用户端自定义表单新增记录(列表新版) @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) AddCustomerForm(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 } status := 2 if _, ok := mapData["formId"]; !ok { publicmethod.Result(1, err, c, "非法表单!不能提交数据!") return } var appKey int64 = 0 if appKeyVal, ok := mapData["appKey"]; ok { appKey, _ = publicmethod.StringToInt64(appKeyVal) } var tableKey int64 = 0 if tableVal, ok := mapData["versionId"]; ok { tableKey, _ = publicmethod.StringToInt64(tableVal) } if val, ok := mapData["status"]; !ok { if valInt, isTrue := val.(int); isTrue { status = valInt if valInt <= 0 { status = 2 } } } else { status = 2 } var formCont modelAppPlatform.CustomerFormView //获取指定版本的表单 err = formCont.GetCont(map[string]interface{}{"`id`": mapData["formId"]}) 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) } } } } var formJsonCont customerform.CustomerFormMaster json.Unmarshal([]byte(formCont.MastesFormJson), &formJsonCont) 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", "id"}) { masterField[k] = v } } else { sunFieldAry[k] = v } } context, _ := c.Get(overall.MyContJwt) var userCont modelshr.ManCont userCont.GetLoginCont(context) //当前操作人 uuid := publicmethod.GetUUid(1) //统一识别符 cureeTime := time.Now().Unix() //写入时间 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 } masrWriteMap := MakeFormMapData(uuid, userCont.Key, cureeTime, masterField, masterUnitList, 1) masrWriteMap["flowIsOpen"] = formCont.FlowIsOpen //任务列表 var taskCont customerForm.TaskRecord taskCont.MastersKey = uuid taskCont.Title = fmt.Sprintf("%v-%v(%v)-%v", formCont.Name, userCont.Name, userCont.Number, publicmethod.UnixTimeToDay(cureeTime, 14)) //标题"` taskCont.AppKey = appKey taskCont.TableKey = tableKey taskCont.Creater = userCont.Key //创建人"` taskCont.CreaterTime = cureeTime //创建时间"` taskCont.EditTime = cureeTime //编辑时间"` taskCont.Types = formCont.FlowIsOpen //类型(1:流程表单;2:普通表单)"` taskCont.VersionId = formCont.Id //来源于哪个表单"` taskCont.Status = status if formCont.FlowIsOpen == 1 { taskCont.Status = 3 taskCont.FlowKey = formCont.Flowkey var flowInfo modelAppPlatform.FlowVersion flowInfo.GetCont(map[string]interface{}{"`key`": formCont.Flowkey, "`state`": 1}, "`id`") taskCont.FlowRunSing = flowInfo.Id } if formJsonCont.Form.DataSource == "yes" { var sqlDb datacenter.DataBastType sqlDb.Type = formJsonCont.Form.DataSourceConfig.DSN.SqlType sqlDb.Ip = formJsonCont.Form.DataSourceConfig.DSN.Ip sqlDb.DataBaseName = formJsonCont.Form.DataSourceConfig.DSN.DataBaseName sqlDb.Port = formJsonCont.Form.DataSourceConfig.DSN.Port sqlDb.UserName = formJsonCont.Form.DataSourceConfig.DSN.UserName sqlDb.Pwd = formJsonCont.Form.DataSourceConfig.DSN.Password sqlDborm, err := sqlDb.StartDataBast() if err != nil { sqlDborm, err = datacenter.GainDataStorce(formJsonCont.Form.DataSourceConfig.Id) if err != nil { publicmethod.Result(0, sqlDb, c) return } } //判断是否 if len(sunFieldAry) > 0 { //有子表 sunTypeAry := make(map[string]map[string]customerform.MasterStruct) for _, v := range formUnitCont.SunFormInfo { sunTypeAry[v.TableName] = v.UbitInfo } err = WriteSunDatabaseSoucer(sqlDborm, uuid, userCont.Key, cureeTime, formJsonCont.Form.DataSourceConfig.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) } else { // //无子表 err = sqlDborm.Table(formJsonCont.Form.DataSourceConfig.TableKey).Create(masrWriteMap).Error publicmethod.WriteLog("write", "写入自定义表单", formJsonCont.Form.DataSourceConfig.TableKey, err) } } else { //判断是否 if len(sunFieldAry) > 0 { //有子表 sunTypeAry := make(map[string]map[string]customerform.MasterStruct) for _, v := range formUnitCont.SunFormInfo { sunTypeAry[v.TableName] = v.UbitInfo } err = WriteSunDatabase(uuid, userCont.Key, cureeTime, formCont.TableKey, masrWriteMap, sunFieldAry, sunTypeAry) } else { // //无子表 err = overall.CONSTANT_DB_CustomerForm.Table(formCont.TableKey).Create(masrWriteMap).Error publicmethod.WriteLog("write", "写入自定义表单", formCont.TableKey, err) } } if err != nil { publicmethod.Result(104, err, c) return } taskCont.MastesForm = formCont.MastesForm taskCont.MastesFormJson = formCont.MastesFormJson err = overall.CONSTANT_DB_CustomerForm.Create(&taskCont).Error // for k, v := range masrWriteMap { // fmt.Printf("%v----> %T\n", k, v) // } publicmethod.WriteLog("write", "写入任务", err, taskCont) sendData := publicmethod.MapOut[string]() sendData["uuid"] = strconv.FormatInt(uuid, 10) sendData["cureeTime"] = cureeTime sendData["formUnitCont"] = formUnitCont sendData["masterField"] = masterField sendData["masterUnitList"] = masterUnitList sendData["sunFieldAry"] = sunFieldAry sendData["sunFieldAry_len"] = len(sunFieldAry) sendData["masrWriteMap"] = masrWriteMap sendData["sunFormName"] = sunFormName sendData["mapData"] = mapData //判断是否要发送信息 if formCont.ListJson != "" { var sendMsgInterface FormListInfo json.Unmarshal([]byte(formCont.ListJson), &sendMsgInterface) var sendMsgInfo SendMsgInfo sendMsgInfo = sendMsgInterface.SendMsg msgid, _ := sendMsgInfo.SendMsg(userCont, taskCont.Title, uuid, cureeTime, masterField, masrWriteMap, masterUnitList) fmt.Printf("发送返回信息------------->%v\n\n\n", msgid) if msgid != "" { //设定redis Key名称 redisKey := fmt.Sprintf("SendMsg:Work_WeChat_%v", uuid) redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS3) redisClient.SetRedisTime(86400) redisClient.Set(redisKey, msgid) } // sendConfig := sendMsgInterface.SendMsg // if sendConfig.Open { // msgTitle := taskCont.Title // if len(sendConfig.Title) > 0 { // } // sendData["msgTitle"] = msgTitle // switch sendConfig.SendRange { // } // } } publicmethod.Result(0, sendData, c) } /* * @ 作者: 秦东 @ 时间: 2025-03-28 09:17:29 @ 功能: 发送企业微信消息 @ 参数 #sendConfig //发送消息配置信息 #msgTitle //消息标题 #cureeTime //创建时间 #fieldVal //提交得数据已表字段 #subUnit //表单组件属性 @ 返回值 #msgid 消息id,用于撤回应用消息 #err 信息 @ 方法原型 # */ func (s *SendMsgInfo) SendMsg(userCont modelshr.ManCont, msgTitle string, uuid, cureeTime int64, fieldVal, masrWriteMap map[string]interface{}, subUnit map[string]customerform.MasterStruct) (msgid string, err error) { if s.Open { //开启发送信息 var sendMsg workWechat.SendMessage sendUserCount := 0 var sendUserAll []string isSend := true //Step 1: 获取消息的发送范围 switch s.SendRange { case 1: //全集团 sendMsg.Touser = "@all" case 2: //本公司 var myCompany modelshr.AdministrativeOrganization myCompany.GetCont(map[string]interface{}{"id": userCont.Company}, "`wechat_organization_id`") if myCompany.WechatOrganizationId != 0 { sendMsg.Toparty = strconv.FormatInt(myCompany.WechatOrganizationId, 10) } else { if userCont.Company != 0 { //获取该组织得所以下级 sendUserAll = GainOrgManWechat(userCont.Company) sendUserCount = len(sendUserAll) if sendUserCount <= 1000 && sendUserCount > 0 { sendMsg.Touser = strings.Join(sendUserAll, "|") } else { if sendUserCount == 0 { isSend = false } } // sendMsg.Touser = } else { if userCont.WorkWechat != "" { sendMsg.Touser = userCont.WorkWechat } else if userCont.Wechat != "" { sendMsg.Touser = userCont.Wechat } else { sendMsg.Touser = "@all" } } } case 3: //本部门 if userCont.MainDeparment != 0 { var myCompany modelshr.AdministrativeOrganization myCompany.GetCont(map[string]interface{}{"id": userCont.MainDeparment}, "`wechat_organization_id`") if myCompany.WechatOrganizationId != 0 { sendMsg.Toparty = strconv.FormatInt(myCompany.WechatOrganizationId, 10) } else { //获取该组织得所以下级 sendUserAll = GainOrgManWechat(userCont.MainDeparment) sendUserCount = len(sendUserAll) if sendUserCount <= 1000 && sendUserCount > 0 { sendMsg.Touser = strings.Join(sendUserAll, "|") } else { if sendUserCount == 0 { isSend = false } } } } else { if userCont.Wechat == "" && userCont.WorkWechat == "" { isSend = false } else { if userCont.WorkWechat != "" { sendMsg.Touser = userCont.WorkWechat } else { sendMsg.Touser = userCont.Wechat } } } case 4: //本行政组织 if userCont.AdminOrg != 0 { var myCompany modelshr.AdministrativeOrganization myCompany.GetCont(map[string]interface{}{"id": userCont.AdminOrg}, "`wechat_organization_id`") if myCompany.WechatOrganizationId != 0 { sendMsg.Toparty = strconv.FormatInt(myCompany.WechatOrganizationId, 10) } else { //获取该组织得所以下级 sendUserAll = GainOrgManWechat(userCont.AdminOrg) sendUserCount = len(sendUserAll) if sendUserCount <= 1000 && sendUserCount > 0 { sendMsg.Touser = strings.Join(sendUserAll, "|") } else { if sendUserCount == 0 { isSend = false } } } } else { if userCont.Wechat == "" && userCont.WorkWechat == "" { isSend = false } else { if userCont.WorkWechat != "" { sendMsg.Touser = userCont.WorkWechat } else { sendMsg.Touser = userCont.Wechat } } } case 5: //表格中指定 sendUserAll = s.TableFieldsSendMsg(fieldVal, userCont) sendUserCount = len(sendUserAll) if sendUserCount <= 1000 && sendUserCount > 0 { sendMsg.Touser = strings.Join(sendUserAll, "|") } else { if sendUserCount == 0 { isSend = false } } case 6: //自定义 sendUserAll = s.CustomizeSendMsg() sendUserCount = len(sendUserAll) if sendUserCount <= 1000 && sendUserCount > 0 { sendMsg.Touser = strings.Join(sendUserAll, "|") } else { if sendUserCount == 0 { isSend = false } } default: isSend = false } if isSend { switch s.Types { case "textcard": sendMsg.Msgtype = "textcard" sendMsg.Textcard.Title = s.SendMsgInfo(s.Title, msgTitle, fieldVal, masrWriteMap, subUnit) sendMsg.Textcard.Description = fmt.Sprintf("