应用集成平台服务端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

980 lines
27 KiB

package taskmanagement
import (
"appPlatform/api/version1/customerform"
"appPlatform/models/modelAppPlatform"
"appPlatform/models/modelshr"
"appPlatform/overall"
"appPlatform/overall/publicmethod"
"encoding/json"
"errors"
"fmt"
"strconv"
"strings"
"time"
"github.com/gin-gonic/gin"
)
/*
*
@ 作者: 秦东
@ 时间: 2023-09-21 15:19:03
@ 功能: 非流程表单提交数据记录
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) AppFormDataLog(c *gin.Context) {
var requestData AppFormDataLogStruct
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Page == 0 {
requestData.Page = 1
}
if requestData.PageSize == 0 {
requestData.Page = 15
}
context, _ := c.Get(overall.MyContJwt)
var userCont modelshr.ManCont
userCont.GetLoginCont(context)
var list []modelAppPlatform.Task
gormDb := overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.Task{}).Where("`status` BETWEEN ? AND ? AND `creater` = ?", 1, 4, userCont.Key)
if requestData.KeyWords != "" {
gormDb = gormDb.Where("`title` LIKE ?", "%"+requestData.KeyWords+"%")
}
var total int64
totalErr := gormDb.Count(&total).Error
if totalErr != nil {
total = 0
}
gormDb = publicmethod.PageTurningSettings(gormDb, requestData.Page, requestData.PageSize)
err = gormDb.Order("`id` DESC").Find(&list).Error
if err != nil && len(list) < 1 {
publicmethod.Result(0, err, c)
return
}
var sendList []SendAppFormDataLog
for _, v := range list {
var sendCont SendAppFormDataLog
sendCont.Id = v.Id //dex"`
sendCont.Title = v.Title //标题"`
sendCont.Creater = v.Creater //创建人"`
sendCont.CreaterTime = v.CreaterTime //创建时间"`
sendCont.EditTime = v.EditTime //编辑时间"`
sendCont.Types = v.Types //类型(1:普通表单;2:流程表单)"`
sendCont.VersionId = v.VersionId //来源于哪个表单"`
sendCont.Status = v.Status //
var myConst modelshr.PersonArchives
myConst.GetCont(map[string]interface{}{"`key`": v.Creater}, "`number`", "`name`")
sendCont.CreaterName = myConst.Name
sendCont.CreaterNumber = myConst.Number
sendCont.CreaterTimeStr = publicmethod.UnixTimeToDay(v.CreaterTime, 1)
sendCont.MastersKey = v.MastersKey
sendCont.MastersKeyStr = strconv.FormatInt(v.MastersKey, 10)
sendList = append(sendList, sendCont)
}
// publicmethod.Result(0, sendList, c)
publicmethod.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(sendList)), sendList, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-09-22 11:04:56
@ 功能: 获取可执行得任务列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) GainTaskList(c *gin.Context) {
var requestData GainTaskListStruct
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Page == 0 {
requestData.Page = 1
}
if requestData.PageSize == 0 {
requestData.Page = 15
}
if requestData.Status == 0 {
requestData.Status = 1
}
context, _ := c.Get(overall.MyContJwt)
var userCont modelshr.ManCont
userCont.GetLoginCont(context)
var list []modelAppPlatform.CustomerFormView
gormDb := overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.CustomerFormView{}).Where("`status` = 1")
//获取当前登录人得行政组织关系
var sunOrg publicmethod.GetOrgAllParent
sunOrg.GetOrgSun(userCont.AdminOrg)
sunOrg.GetOrgParentAllId(userCont.AdminOrg)
sunOrg.Id = append(sunOrg.Id, userCont.AdminOrg)
if len(sunOrg.Id) > 0 {
gormDb = gormDb.Where("ISNULL(permitstr) OR permitstr = ''")
var sqlStr string
for i, v := range sunOrg.Id {
if i < len(sunOrg.Id)-1 {
sqlStr = fmt.Sprintf("%v FIND_IN_SET(%v,`permitstr`) OR ", sqlStr, v)
} else {
sqlStr = fmt.Sprintf("%v FIND_IN_SET(%v,`permitstr`) ", sqlStr, v)
}
// gormDb = gormDb.Or("FIND_IN_SET(?,`permitstr`)", v)
}
gormDb = gormDb.Or(sqlStr)
} else {
gormDb = gormDb.Where("ISNULL(permitstr) OR permitstr = ''", sunOrg.Id)
}
var total int64
totalErr := gormDb.Count(&total).Error
if totalErr != nil {
total = 0
}
gormDb = publicmethod.PageTurningSettings(gormDb, requestData.Page, requestData.PageSize)
err = gormDb.Order("`time` DESC").Order("`id` DESC").Find(&list).Error
if err != nil && len(list) < 1 {
publicmethod.Result(0, err, c)
return
}
var sendList []SendTaskList
for _, v := range list {
var sendCont SendTaskList
sendCont.Id = strconv.FormatInt(v.Id, 10)
sendCont.Name = v.Name
var myInfo modelshr.PersonArchives
myInfo.GetCont(map[string]interface{}{"`key`": v.Creater}, "`number`", "`name`")
sendCont.CreaterName = myInfo.Name
sendCont.CreaterNumber = myInfo.Number
sendCont.CreaterTimeStr = publicmethod.UnixTimeToDay(v.CreaterTime, 1)
sendList = append(sendList, sendCont)
}
// publicmethod.Result(0, sendList, c)
publicmethod.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(sendList)), sendList, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-09-23 13:51:58
@ 功能: 根据版本获取表单内容
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) GianTaskVersionCont(c *gin.Context) {
var requestData publicmethod.CommonId[string]
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == "" {
publicmethod.Result(107, err, c)
return
}
var versionCont modelAppPlatform.CustomerFormView
err = versionCont.GetCont(map[string]interface{}{"`id`": requestData.Id})
if err != nil {
publicmethod.Result(107, err, c)
return
}
publicmethod.Result(0, versionCont, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-09-25 11:42:35
@ 功能: 自定义表单新增记录数据
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) CustomerFormAddData(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
sendData := publicmethod.MapOut[string]()
if _, ok := mapData["formId"]; !ok {
publicmethod.Result(1, err, c, "非法表单!不能提交数据!")
return
}
var formCont modelAppPlatform.CustomerFormView
err = formCont.GetCont(map[string]interface{}{"`id`": mapData["formId"]})
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)
context, _ := c.Get(overall.MyContJwt)
var userCont modelshr.ManCont
userCont.GetLoginCont(context)
uuid := publicmethod.GetUUid(1)
cureeTime := time.Now().Unix()
masterFrom := publicmethod.MapOut[string]()
masterFrom["masters_key"] = uuid
masterFrom["creater"] = userCont.Key
masterFrom["creater_time"] = cureeTime
masterFrom["edit_time"] = cureeTime
sunFormList := publicmethod.MapOut[string]()
for k, v := range mapData {
// fmt.Printf("key: %v, value: %v\n", k, v)
if !publicmethod.IsInTrue[string](k, sunFormName) {
if !publicmethod.IsInTrue[string](k, []string{"formId", "id"}) {
masterFrom[k] = v
}
} else {
sunFormList[k] = v
}
}
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 //状态(1:草稿,2:发表;3:审批中;4:归档;5:删除)"`
if len(sunFormList) > 0 {
WriteDatabase(uuid, userCont.Key, cureeTime, taskCont, formCont.TableKey, masterFrom, sunFormList)
} else {
err = overall.CONSTANT_DB_CustomerForm.Table(formCont.TableKey).Create(masterFrom).Error
overall.CONSTANT_DB_AppPlatform.Create(&taskCont)
}
sendData["err"] = err
sendData["data"] = data
sendData["mapData"] = mapData
sendData["formCont"] = formCont
sendData["masterFrom"] = masterFrom
sendData["sunFormList"] = sunFormList
publicmethod.Result(0, sendData, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-09-25 14:33:51
@ 功能: 写入数据库
@ 参数
#uuid 唯一标识
#creater 创建人
#createrTime 创建时间
#taskCont 主记录表
#masterTableName 主表标识
#masterDataCont 主表数据
#sunDataList 字表数据列表
@ 返回值
#err 返回信息
@ 方法原型
#func WriteDatabase(uuid, creater, createrTime int64, masterTableName string, masterDataCont, sunDataList map[string]interface{}) (err error)
*/
func WriteDatabase(uuid, creater, createrTime int64, taskCont modelAppPlatform.Task, masterTableName string, masterDataCont, sunDataList map[string]interface{}) (err error) {
if len(sunDataList) > 0 && len(masterDataCont) > 0 {
sunMasterMap := publicmethod.MapOut[string]()
for k, v := range sunDataList {
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 {
for sdk, sdv := range sdf {
if fieldVal, filedIsok := sdv.(bool); filedIsok {
if fieldVal {
sdf[sdk] = 1
} else {
sdf[sdk] = 2
}
}
}
sdf["masters_key"] = uuid
sdf["creater"] = creater
sdf["creater_time"] = createrTime
sdf["edit_time"] = createrTime
sunCont = append(sunCont, sdf)
}
}
sunMasterMap[k] = sunCont
}
}
}
if len(sunMasterMap) < 1 {
err = overall.CONSTANT_DB_CustomerForm.Table(masterTableName).Create(masterDataCont).Error
overall.CONSTANT_DB_AppPlatform.Create(&taskCont)
} else {
gormDb := overall.CONSTANT_DB_CustomerForm.Begin()
masterErr := gormDb.Table(masterTableName).Create(masterDataCont).Error
taskErr := overall.CONSTANT_DB_AppPlatform.Create(&taskCont).Error
sunCreateIsOk := true
for k, v := range sunMasterMap {
sunErr := gormDb.Table(k).Create(v).Error
if sunErr != nil {
sunCreateIsOk = false
break
}
// fmt.Printf("234----->%v----->%v\n", k, v)
}
if masterErr == nil && taskErr == nil && sunCreateIsOk {
err = gormDb.Commit().Error
} else {
gormDb.Rollback()
err = errors.New("表单数据提交失败!请重新提交")
}
}
} else {
err = errors.New("表单数据错误!请验证后重新提交!")
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2023-09-25 11:45:08
@ 功能: 自定义表单编辑记录数据
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) CustomerFormEditData(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
}
if _, ok := mapData["id"]; !ok {
publicmethod.Result(1, err, c, "非法表单!不能提交数据!")
return
}
var formCont modelAppPlatform.CustomerFormView //获取指定版本的表单
err = formCont.GetCont(map[string]interface{}{"`id`": mapData["id"]})
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) //当前操作人
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
}
uuid, _ := strconv.ParseInt(mapData["formId"].(string), 10, 64)
masrWriteMap := MakeFormMapData(uuid, userCont.Key, cureeTime, masterField, masterUnitList, 2)
//判断是否
if len(sunFieldAry) > 0 {
//有子表
sunTypeAry := make(map[string]map[string]customerform.MasterStruct)
for _, v := range formUnitCont.SunFormInfo {
sunTypeAry[v.TableName] = v.UbitInfo
}
err = EditWriteSunDatabase(uuid, userCont.Key, cureeTime, formCont.TableKey, masrWriteMap, sunFieldAry, sunTypeAry)
} else {
err = overall.CONSTANT_DB_CustomerForm.Table(formCont.TableKey).Where("`masters_key` = ?", uuid).Updates(masterUnitList).Error
}
if err != nil {
publicmethod.Result(104, err, c)
return
}
var taskCont modelAppPlatform.Task
// taskCont.Creater = userCont.Key
// taskCont.EditTime = cureeTime
saveData := publicmethod.MapOut[string]()
saveData["`edit_time`"] = time.Now().Unix()
saveData["`creater`"] = userCont.Key
err = taskCont.EiteCont(map[string]interface{}{"`masters_key`": uuid}, saveData)
sendData := publicmethod.MapOut[string]()
sendData["err"] = err
sendData["cureeTime"] = cureeTime
sendData["formJsonCont"] = formJsonCont
sendData["masterUnitList"] = masterUnitList
sendData["masrWriteMap"] = masrWriteMap
publicmethod.Result(0, err, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-09-25 11:45:08
@ 功能: 查看自定义表单记录数据
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) LookCustomerFormData(c *gin.Context) {
var requestData GainCustomerFormLogInfo
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == "" {
publicmethod.Result(1, err, c, "未知表单参数!请核对1后重新提交!")
return
}
if requestData.MastersKey == "" {
publicmethod.Result(1, err, c, "未知表单参数!请核对2后重新提交!")
return
}
var customerFormCont modelAppPlatform.CustomerFormView
err = customerFormCont.GetCont(map[string]interface{}{"`id`": requestData.MastersKey}, "`tablekey`", "`table_structure`", "`name`", "`classify`", "`mastesformjson`")
if err != nil {
publicmethod.Result(107, err, c)
return
}
var formJsonCont customerform.CustomerFormMaster
json.Unmarshal([]byte(customerFormCont.MastesFormJson), &formJsonCont)
var formUnitCont customerform.FormUnitInfo
formUnitCont.GainMasterAndSunFormUnit(customerFormCont.TableKey, formJsonCont.List, true)
masterUnitList := make(map[string]customerform.MasterStruct)
for _, v := range formUnitCont.MasterInfo {
masterUnitList[v.Name] = v
}
// fmt.Printf("formUnitCont--->%v\n", formUnitCont)
masterFormCont := publicmethod.MapOut[string]()
err = overall.CONSTANT_DB_CustomerForm.Table(customerFormCont.TableKey).Where("`masters_key` = ?", requestData.Id).Take(&masterFormCont).Error
if err != nil {
publicmethod.Result(107, err, c)
return
}
// CallBackVal(masterFormCont, masterUnitList)
masterFormCont = CustomerFormCallBackVal(masterFormCont, masterUnitList)
if customerFormCont.TableStructure != "" {
sunFormTable := publicmethod.MapOut[string]()
err = json.Unmarshal([]byte(customerFormCont.TableStructure), &sunFormTable)
sunTypeAry := make(map[string]map[string]customerform.MasterStruct)
for _, v := range formUnitCont.SunFormInfo {
sunTypeAry[v.TableName] = v.UbitInfo
}
if err == nil {
for _, v := range sunFormTable {
var sunContList []map[string]interface{}
if tableName, isOk := v.(string); isOk {
overall.CONSTANT_DB_CustomerForm.Table(tableName).Where("`masters_key` = ?", requestData.Id).Find(&sunContList)
var sunContListZhuanBian []map[string]interface{}
if len(sunContList) > 0 {
for _, sclv := range sunContList {
if sunTableType, sunIsOk := sunTypeAry[tableName]; sunIsOk {
masterFormCont := CustomerFormCallBackVal(sclv, sunTableType)
sunContListZhuanBian = append(sunContListZhuanBian, masterFormCont)
} else {
sunContListZhuanBian = append(sunContListZhuanBian, sclv)
}
}
}
masterFormCont[tableName] = sunContListZhuanBian
}
}
}
}
sendData := publicmethod.MapOut[string]()
sendData["err"] = err
sendData["customerFormCont"] = customerFormCont
sendData["masterFormCont"] = masterFormCont
sendData["formJsonCont"] = formJsonCont
sendData["customerFormCont.MastesFormJson"] = customerFormCont.MastesFormJson
publicmethod.Result(0, masterFormCont, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-09-28 11:22:08
@ 功能: 自定义表单返回值处理
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func CallBackVal(val map[string]interface{}, valClass map[string]customerform.MasterStruct) map[string]interface{} {
convertVal := publicmethod.MapOut[string]()
if len(val) > 0 {
for k, v := range val {
if val, isOk := valClass[k]; isOk {
fielfInfoClass := customerform.AnalysisTable(val)
switch fielfInfoClass.Types {
case "int", "bigint":
//值类型是数组,并且需要分开存储
switch fielfInfoClass.ControlType {
case "year":
convertVal[k] = publicmethod.TypeToClass(v, 16)
case "month":
convertVal[k] = publicmethod.TypeToClass(v, 15)
case "date":
convertVal[k] = publicmethod.TypeToClass(v, 14)
case "datetime":
convertVal[k] = publicmethod.TypeToClass(v, 11)
case "booble":
if v == fielfInfoClass.DefaultValue {
convertVal[k] = true
} else {
convertVal[k] = false
}
case "array":
var timeAry []string
sterTrime := convertVal[k]
timeAry = append(timeAry, publicmethod.TypeToClass(sterTrime, 14))
endKey := fmt.Sprintf("%v_end", k)
// var endTrime int64
if endVal, ok := convertVal[endKey]; ok {
// convertVal[endKey] = publicmethod.TypeToClass(endVal, 14)
timeAry = append(timeAry, publicmethod.TypeToClass(endVal, 14))
}
convertVal[k] = timeAry
default:
convertVal[k] = v
}
case "booble":
if v == fielfInfoClass.DefaultValue {
convertVal[k] = true
} else {
convertVal[k] = false
}
case "decimal", "float":
convertVal[k] = v
case "mediumtext", "longtext":
if fielfInfoClass.ControlType == "array" {
if v != "" {
if vStr, ok := v.(string); ok {
var vJson []string
json.Unmarshal([]byte(vStr), &vJson)
convertVal[k] = vJson
}
}
} else {
convertVal[k] = v
}
default:
if fielfInfoClass.ControlType == "array" {
if v != "" {
if vStr, ok := v.(string); ok {
var vJson []string
json.Unmarshal([]byte(vStr), &vJson)
convertVal[k] = vJson
}
}
} else {
convertVal[k] = v
}
}
} else {
convertVal[k] = v
}
}
}
return convertVal
}
/*
*
@ 作者: 秦东
@ 时间: 2023-10-08 13:32:06
@ 功能: 自定义表单返回值处理
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func CustomerFormCallBackVal(val map[string]interface{}, valClass map[string]customerform.MasterStruct) map[string]interface{} {
convertVal := publicmethod.MapOut[string]()
// fmt.Printf("fielfInfoClass---1-->%v: %v\n", val, valClass)
if len(val) > 0 {
for k, v := range val {
if vals, isOk := valClass[k]; isOk {
fielfInfoClass := customerform.AnalysisFormUnitClass(vals)
// fmt.Printf("fielfInfoClass----->%v: %v\n", k, fielfInfoClass.FieldType)
switch fielfInfoClass.FieldType {
case "int":
if strVal, ok := v.(string); ok {
convertVal[k], _ = strconv.Atoi(strVal)
} else {
convertVal[k] = v
}
case "bigint":
if fielfInfoClass.ValIsAry { //判断值是否为数组
endField := fmt.Sprintf("%v_end", k)
var sendVal []interface{}
if strVal, ok := v.(string); ok {
vInt64, _ := strconv.ParseInt(strVal, 10, 64)
sendVal = append(sendVal, vInt64)
} else {
sendVal = append(sendVal, v)
}
if endKeyVal, ok := val[endField]; ok {
if endVal, endOk := endKeyVal.(string); endOk {
endValInt64, _ := strconv.ParseInt(endVal, 10, 64)
sendVal = append(sendVal, endValInt64)
} else {
sendVal = append(sendVal, endVal)
}
}
convertVal[k] = sendVal
} else {
if strVal, ok := v.(string); ok {
fieldVal, _ := strconv.ParseInt(strVal, 10, 64)
convertVal[k] = fieldVal
} else {
convertVal[k] = v
}
}
case "float":
if strVal, ok := v.(string); ok {
floatVal, _ := strconv.ParseFloat(strVal, 64)
convertVal[k] = floatVal
} else {
convertVal[k] = v
}
case "decimal":
if strVal, ok := v.(string); ok {
floatVal, _ := strconv.ParseFloat(strVal, 64)
convertVal[k] = floatVal
} else {
convertVal[k] = v
}
case "mediumtext", "longtext":
if valAry, ok := v.([]interface{}); ok {
if len(valAry) > 0 {
valStrJson, _ := json.Marshal(valAry)
convertVal[k] = string(valStrJson)
} else {
convertVal[k] = ""
}
} else {
if fielfInfoClass.ValIsAry {
if valStr, ok := v.(string); ok {
valStrAry := strings.Split(valStr, ",")
if len(valStrAry) > 0 {
valStrJson, _ := json.Marshal(valStrAry)
convertVal[k] = string(valStrJson)
} else {
convertVal[k] = ""
}
} else {
convertVal[k] = v
}
} else {
convertVal[k] = v
}
}
case "varchar":
if valAry, ok := v.([]interface{}); ok {
if len(valAry) > 0 {
valStrJson, _ := json.Marshal(valAry)
convertVal[k] = string(valStrJson)
} else {
convertVal[k] = ""
}
} else {
if fielfInfoClass.ValIsAry {
if valStr, ok := v.(string); ok {
valStrAry := strings.Split(valStr, ",")
if len(valStrAry) > 0 {
valStrJson, _ := json.Marshal(valStrAry)
convertVal[k] = string(valStrJson)
} else {
convertVal[k] = ""
}
} else {
convertVal[k] = v
}
} else {
convertVal[k] = v
}
}
default:
}
} else {
convertVal[k] = v
}
}
}
return convertVal
}
/*
*
@ 作者: 秦东
@ 时间: 2023-10-08 16:44:58
@ 功能:
@ 参数
#uuid 唯一标识
#creater 创建人
#createrTime 创建时间
#masterTableName 主表标识
#masterDataCont 主表数据
#sunDataList 字表数据列表
@ 返回值
#
@ 方法原型
#
*/
func EditWriteSunDatabase(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).Where("`masters_key` = ?", uuid).Updates(masterDataCont).Error
sunCreateIsOk := true
for k, v := range sunMasterMap {
delSql := fmt.Sprintf("DELETE FROM %v WHERE `masters_key` = %v", k, uuid)
delErr := overall.CONSTANT_DB_CustomerForm.Exec(delSql).Error
if delErr == nil {
sunErr := gormDb.Table(k).Create(v).Error
if sunErr != nil {
sunCreateIsOk = false
break
}
} else {
sunCreateIsOk = false
}
}
if masterErr == nil && sunCreateIsOk {
err = gormDb.Commit().Error
} else {
gormDb.Rollback()
err = errors.New("表单数据提交失败!请重新提交")
}
}
} else {
//子表不存在时,写入主表数据
err = overall.CONSTANT_DB_CustomerForm.Table(masterTableName).Where("`masters_key` = ?", uuid).Updates(masterDataCont).Error
}
} else {
err = errors.New("表单数据提交失败!请重新提交")
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2023-10-09 08:37:50
@ 功能: 删除自定义表单记录数据
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) DelCustomerFormDataLog(c *gin.Context) {
var requestData publicmethod.CommonId[string]
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == "" {
publicmethod.Result(1, err, c, "未知数据")
return
}
var taskCont modelAppPlatform.Task
err = taskCont.GetCont(map[string]interface{}{"`id`": requestData.Id})
if err != nil {
publicmethod.Result(107, err, c)
return
}
saveData := publicmethod.MapOut[string]()
saveData["`edit_time`"] = time.Now().Unix()
saveData["`status`"] = 5
err = taskCont.EiteCont(map[string]interface{}{"`id`": requestData.Id}, saveData)
if err != nil {
publicmethod.Result(106, err, c)
return
}
publicmethod.Result(0, err, c)
}