应用集成平台服务端
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.
 
 
 

479 lines
14 KiB

package taskmanagement
import (
"appPlatform/models/modelAppPlatform"
"appPlatform/models/modelshr"
"appPlatform/overall"
"appPlatform/overall/publicmethod"
"encoding/json"
"errors"
"fmt"
"strconv"
"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)
}
}
}
}
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) {
requestData := publicmethod.MapOut[string]()
err := c.ShouldBindQuery(&requestData)
sendData := publicmethod.MapOut[string]()
sendData["err"] = err
sendData["requestData"] = sendData
publicmethod.Result(0, sendData, 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`")
if err != nil {
publicmethod.Result(107, err, c)
return
}
masterFormCont := publicmethod.MapOut[string]()
err = overall.CONSTANT_DB_CustomerForm.Table(customerFormCont.TableKey).Where("`masters_key` = ?", requestData.Id).Find(&masterFormCont).Error
if customerFormCont.TableStructure != "" {
sunFormTable := publicmethod.MapOut[string]()
err = json.Unmarshal([]byte(customerFormCont.TableStructure), &sunFormTable)
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)
masterFormCont[tableName] = sunContList
}
}
}
}
sendData := publicmethod.MapOut[string]()
sendData["err"] = err
sendData["customerFormCont"] = customerFormCont
sendData["masterFormCont"] = masterFormCont
publicmethod.Result(0, masterFormCont, c)
}