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

634 lines
18 KiB

package matrixapi
import (
"appPlatform/models/modelAppPlatform"
"appPlatform/models/modelshr"
"appPlatform/overall"
"appPlatform/overall/publicmethod"
"sort"
"strconv"
"time"
"github.com/gin-gonic/gin"
)
/*
*
@ 作者: 秦东
@ 时间: 2023-07-04 13:05:25
@ 功能: 获取矩阵列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) MatrixList(c *gin.Context) {
var requestData SearchMatrix
c.ShouldBindJSON(&requestData)
if requestData.Page == 0 {
requestData.Page = 1
}
if requestData.PageSize == 0 {
requestData.PageSize = 10
}
var matrixInfoList []modelAppPlatform.MatrixContent
gormDb := overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.MatrixContent{}).Where("`state` = 1")
if requestData.KeyWords != "" {
gormDb = gormDb.Where("`name` like ?", "%"+requestData.KeyWords+"%")
}
if requestData.AdminOrg != 0 {
var sunOrg publicmethod.GetOrgAllParent
sunOrg.GetOrgSonAllId(requestData.AdminOrg)
sunOrg.Id = append(sunOrg.Id, requestData.AdminOrg)
gormDb = gormDb.Where("`org` IN ?", 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.Find(&matrixInfoList).Error
if err != nil {
publicmethod.Result(105, err, c)
return
}
var sendList []SendMatrix
for _, v := range matrixInfoList {
var sendCont SendMatrix
sendCont.Id = v.Id
sendCont.Name = v.Name
sendCont.Center = v.Center
sendCont.Org = v.Org
var orgCont modelshr.AdministrativeOrganization
orgCont.GetCont(map[string]interface{}{"`id`": v.Org}, "`name`")
sendCont.OrgName = orgCont.Name
sendCont.State = v.State
sendCont.Time = v.Time
sendList = append(sendList, sendCont)
}
publicmethod.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(sendList)), sendList, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-07-04 16:35:46
@ 功能: 添加权限矩阵
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) AddMatrixCont(c *gin.Context) {
var requestData AddMatrixCont
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Name == "" {
publicmethod.Result(1, requestData.Name, c, "请输入矩阵名称!")
return
}
if requestData.Org == 0 {
publicmethod.Result(1, requestData.Name, c, "请选择归属行政组织!")
return
}
var isd int64
gormDb := overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.MatrixContent{}).Select("Count(`id`)").Where("`name` = ?", requestData.Name)
var sunOrg publicmethod.GetOrgAllParent
sunOrg.GetOrgSonAllId(requestData.Org)
sunOrg.Id = append(sunOrg.Id, requestData.Org)
gormDb = gormDb.Where("`org` IN ?", sunOrg.Id)
err = gormDb.Find(&isd).Error
if err == nil && isd > 0 {
publicmethod.Result(1, isd, c, "该矩阵已经存在!请不要重复使用!")
return
}
var matrixCont modelAppPlatform.MatrixContent
matrixCont.Name = requestData.Name //名称"`
matrixCont.Center = requestData.Center //描述"`
matrixCont.Org = requestData.Org //归属行政组织"`
matrixCont.State = 1 //状态(1:启用;2:禁用;3:删除)"`
matrixCont.Time = time.Now().Unix() //创建时间"`
err = overall.CONSTANT_DB_AppPlatform.Create(&matrixCont).Error
if err != nil {
publicmethod.Result(104, err, c)
return
}
publicmethod.Result(0, err, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-07-05 07:46:56
@ 功能: 编辑权限矩阵
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) EditMatrixCont(c *gin.Context) {
var requestData EditMatrixCont
c.ShouldBindJSON(&requestData)
if requestData.Id == 0 {
publicmethod.Result(1, requestData.Name, c, "未知矩阵!")
return
}
where := publicmethod.MapOut[string]()
where["`id`"] = requestData.Id
var matrixInfo modelAppPlatform.MatrixContent
err := matrixInfo.GetCont(where)
if err != nil {
publicmethod.Result(107, err, c)
return
}
editInfo := publicmethod.MapOut[string]()
if requestData.Name != "" && requestData.Name != matrixInfo.Name {
var isd int64
gormDb := overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.MatrixContent{}).Select("Count(`id`)").Where("`name` = ?", requestData.Name)
var sunOrg publicmethod.GetOrgAllParent
sunOrg.GetOrgSonAllId(requestData.Org)
sunOrg.Id = append(sunOrg.Id, requestData.Org)
gormDb = gormDb.Where("`org` IN ?", sunOrg.Id)
err = gormDb.Find(&isd).Error
if err == nil && isd > 0 {
publicmethod.Result(1, requestData.Name, c, "该矩阵已经存在!请不要重复使用!")
return
} else {
editInfo["`name`"] = requestData.Name
}
}
if requestData.Center != "" && requestData.Center != matrixInfo.Center {
editInfo["`center`"] = requestData.Center
}
if requestData.Org != 0 && requestData.Org != matrixInfo.Org {
editInfo["`org`"] = requestData.Org
}
if len(editInfo) > 0 {
editInfo["`time`"] = time.Now().Unix()
err = matrixInfo.EiteCont(where, editInfo)
if err != nil {
publicmethod.Result(106, err, c)
return
}
}
publicmethod.Result(0, err, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-07-05 08:49:44
@ 功能: 编辑矩阵状态
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) EditStatusCont(c *gin.Context) {
var requestData EditState
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if len(requestData.Id) < 1 {
publicmethod.Result(1, requestData.Id, c, "未知矩阵!")
return
}
if requestData.Status != 3 {
saveData := publicmethod.MapOut[string]()
saveData["state"] = requestData.Status
saveData["time"] = time.Now().Unix()
err = overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.MatrixContent{}).Where("`id` IN ?", requestData.Id).Updates(saveData).Error
if err != nil {
publicmethod.Result(106, err, c)
return
}
} else { //判断是否强制删除
if requestData.IsTrue {
overall.CONSTANT_DB_AppPlatform.Where("`id` IN ?", requestData.Id).Delete(&modelAppPlatform.MatrixContent{})
overall.CONSTANT_DB_AppPlatform.Where("`mc_id` IN ?", requestData.Id).Delete(&modelAppPlatform.MatrixFrame{})
overall.CONSTANT_DB_AppPlatform.Where("`mc_id` IN ?", requestData.Id).Delete(&modelAppPlatform.MatrixHandler{})
} else {
saveData := publicmethod.MapOut[string]()
saveData["state"] = requestData.Status
saveData["time"] = time.Now().Unix()
err = overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.MatrixContent{}).Where("`id` IN ?", requestData.Id).Updates(saveData).Error
if err != nil {
publicmethod.Result(106, err, c)
return
}
}
}
publicmethod.Result(0, err, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-07-06 10:31:04
@ 功能: 设置矩阵字段
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) SetupMatrixField(c *gin.Context) {
var requestData HaveMatrixField
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == 0 {
publicmethod.Result(1, err, c, "未知矩阵!请检查提交数据")
return
}
if len(requestData.Factor) < 1 {
publicmethod.Result(1, err, c, "未知矩阵条件字段!请检查提交数据")
return
}
if len(requestData.Outcome) < 1 {
publicmethod.Result(1, err, c, "未知矩阵取值字段!请检查提交数据")
return
}
for _, v := range requestData.Factor {
AddOrEditMatrixField(requestData.Id, v)
}
for _, s := range requestData.Outcome {
AddOrEditMatrixField(requestData.Id, s)
}
publicmethod.Result(0, requestData, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-07-06 10:48:33
@ 功能: 新增或编辑权限矩阵基础字段
@ 参数
#matrixId 矩阵Id
#cont 矩阵内容
@ 返回值
#
@ 方法原型
#
*/
func AddOrEditMatrixField(matrixId int64, cont MatrixField) (err error) {
var matrixFramCont modelAppPlatform.MatrixFrame
err = matrixFramCont.GetCont(map[string]interface{}{"`mc_id`": matrixId, "`pinyin`": cont.PinYin})
if err != nil {
var newCont modelAppPlatform.MatrixFrame
newCont.Name = cont.Name //名称"`
newCont.Types = cont.Types //骨架类型(1:人力资源;2:行政组织;2:分部;)"`
newCont.Condition = cont.Condition //骨架取值类型(1:作为条件使用;2:作为取值使用)"`
newCont.State = 1 //状态(1:启用;2:禁用;3:删除)"`
newCont.McId = matrixId //矩阵ID"`
newCont.Time = time.Now().Unix() //创建时间"`
newCont.PinYin = cont.PinYin //拼音(标识使用)"`
err = overall.CONSTANT_DB_AppPlatform.Create(&newCont).Error
} else {
if matrixFramCont.Name != cont.Name {
var editCont modelAppPlatform.MatrixFrame
err = editCont.EiteCont(map[string]interface{}{"`id`": matrixFramCont.Id}, map[string]interface{}{"`name`": cont.Name, "`time`": time.Now().Unix()})
}
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2023-07-06 13:10:35
@ 功能: 获取矩阵字段
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) GetMatrixField(c *gin.Context) {
var requestData publicmethod.CommonId[int64]
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == 0 {
publicmethod.Result(1, err, c, "未知矩阵!请检查提交数据")
return
}
var contList []modelAppPlatform.MatrixFrame
err = overall.CONSTANT_DB_AppPlatform.Where("`state` = 1 AND `mc_id` = ?", requestData.Id).Find(&contList).Error
if err != nil {
publicmethod.Result(107, err, c)
return
}
var sendData HaveMatrixField
sendData.Id = requestData.Id
for _, v := range contList {
var contInfo MatrixField
contInfo.Id = v.Id
contInfo.Name = v.Name
contInfo.Types = v.Types //骨架类型(1:人力资源;2:行政组织;2:分部;)
contInfo.Condition = v.Condition //骨架取值类型(1:作为条件使用;2:作为取值使用)
contInfo.PinYin = v.PinYin
contInfo.IsEdit = false //是否可更改
contInfo.PyEdit = true //
if v.Condition == 1 {
sendData.Factor = append(sendData.Factor, contInfo)
} else {
sendData.Outcome = append(sendData.Outcome, contInfo)
}
}
publicmethod.Result(0, sendData, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-07-10 11:07:41
@ 功能:
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) SubmitMatrixData(c *gin.Context) {
var requestData []ReceiveMartix
c.ShouldBindJSON(&requestData)
if len(requestData) < 1 {
publicmethod.Result(1, requestData, c, "未知矩阵!请检查提交数据")
return
}
var matrixMainId int64 = 0
var matrixContList []modelAppPlatform.MatrixHandler
for _, v := range requestData {
if len(v.UserList) > 0 {
numberInt, _ := strconv.ParseInt(v.Number, 10, 64)
matrixMainId = v.McId
for _, w := range v.UserList {
var matrixCont modelAppPlatform.MatrixHandler
matrixCont.Number = numberInt //:批号"`
matrixCont.Name = w.Name //使用者名称"`
handIdInt, _ := strconv.ParseInt(w.Id, 10, 64)
matrixCont.HandId = handIdInt //使用者标识符"`
matrixCont.Types = v.Types //骨架类型(1:人力资源;2:行政组织;2:分部;)"`
matrixCont.McId = v.McId //矩阵ID"`
matrixCont.MhId = v.MhId //骨架ID"`
matrixCont.Time = time.Now().Unix() //创建时间"`
matrixContList = append(matrixContList, matrixCont)
}
}
}
if len(matrixContList) < 1 {
publicmethod.Result(1, requestData, c, "未知矩阵!请检查提交数据")
return
}
if matrixMainId != 0 {
var delMatrix modelAppPlatform.MatrixHandler
err := delMatrix.DelCont(map[string]interface{}{"`mc_id`": matrixMainId})
if err == nil {
overall.CONSTANT_DB_AppPlatform.Create(&matrixContList)
}
} else {
overall.CONSTANT_DB_AppPlatform.Create(&matrixContList)
}
publicmethod.Result(0, matrixContList, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-07-10 14:10:15
@ 功能: 获取矩阵取值
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) GainMatrixData(c *gin.Context) {
var requestData publicmethod.CommonId[int64]
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == 0 {
publicmethod.Result(1, err, c, "未知矩阵!请检查提交数据")
return
}
var matrixNumber []int64
err = overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.MatrixHandler{}).Distinct("`number`").Where("`mc_id` = ?", requestData.Id).Find(&matrixNumber).Error
if err != nil || len(matrixNumber) < 1 {
publicmethod.Result(107, err, c)
return
}
var matrixFramList []modelAppPlatform.MatrixFrame
err = overall.CONSTANT_DB_AppPlatform.Where("`state` = 1 AND `mc_id` = ?", requestData.Id).Find(&matrixFramList).Error
if err != nil || len(matrixFramList) < 1 {
publicmethod.Result(107, err, c)
return
}
matrixDataList := make([]interface{}, 0)
for _, v := range matrixNumber {
matrixHang := publicmethod.MapOut[string]()
for _, w := range matrixFramList {
//
var sendCont SendMatrixFieldVal
sendCont.Id = w.Id
sendCont.Types = w.Types
sendCont.IsEdit = false
sendCont.PinYin = w.PinYin
var handCont []modelAppPlatform.MatrixHandler
overall.CONSTANT_DB_AppPlatform.Where("`mc_id` = ? AND `mh_id` = ? AND `number` = ?", requestData.Id, w.Id, v).Find(&handCont)
if len(handCont) > 0 {
for _, j := range handCont {
sendCont.Number = strconv.FormatInt(j.Number, 10)
var userCont UserListCont
userCont.Id = strconv.FormatInt(j.HandId, 10)
if j.Types == 1 {
var orgCont modelshr.AdministrativeOrganization
orgCont.GetCont(map[string]interface{}{"`id`": j.HandId}, "`name`")
userCont.Name = orgCont.Name
} else {
var userContIng modelshr.PersonArchives
userContIng.GetCont(map[string]interface{}{"`key`": j.HandId}, "`name`", "`icon`", "`icon_photo`")
userCont.Name = userContIng.Name
userCont.Icons = userContIng.Icon
if userContIng.Icon == "" {
userCont.Icons = userContIng.IconPhoto
}
}
sendCont.UserList = append(sendCont.UserList, userCont)
}
}
matrixHang[sendCont.PinYin] = sendCont
}
// fmt.Printf("%v\n", matrixHang)
matrixDataList = append(matrixDataList, matrixHang)
}
publicmethod.Result(0, matrixDataList, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-07-11 08:28:27
@ 功能: 矩阵取值
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) MatrixValue(c *gin.Context) {
// requestData := publicmethod.MapOut[string]()
var requestData OneMatrixVal
err := c.ShouldBindJSON(&requestData)
var matrixContNumber []int64
gormDb := overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.MatrixHandler{}).Select("`number`")
for _, v := range requestData.Condition {
gormDb = gormDb.Or("`hand_id` = ? AND `mh_id` = ? AND `mc_id` = ?", v.Val, v.Id, requestData.Id)
}
err = gormDb.Find(&matrixContNumber).Error
wligibleMap := make(map[int64]int)
for _, v := range matrixContNumber {
if _, isOk := wligibleMap[v]; isOk {
wligibleMap[v]++
} else {
wligibleMap[v] = 1
}
}
var sicleEligible []Condition[int64]
for k, v := range wligibleMap {
var sicleCont Condition[int64]
sicleCont.Id = k
sicleCont.Val = int64(v)
sicleEligible = append(sicleEligible, sicleCont)
}
sort.Slice(sicleEligible, func(i, j int) bool {
return sicleEligible[i].Val < sicleEligible[j].Val
})
conditionCount := sicleEligible[len(sicleEligible)-1]
conditionLength := len(requestData.Condition)
if conditionCount.Val != int64(conditionLength) {
publicmethod.Result(0, err, c)
return
}
//获取最终结果
var finalResult []modelAppPlatform.MatrixHandler
err = overall.CONSTANT_DB_AppPlatform.Where("`number` = ? AND `mc_id` = ? AND `mh_id` IN ?", conditionCount.Id, requestData.Id, requestData.ValueField).Find(&finalResult).Error
if err != nil || len(finalResult) < 1 {
publicmethod.Result(1, finalResult, c, "没有操作人")
}
var sendList []SendMatrixVal
for _, v := range finalResult {
var sendCont SendMatrixVal
sendCont.Id = strconv.FormatInt(v.HandId, 10)
if v.Types == 1 {
var orgCont modelshr.AdministrativeOrganization
orgCont.GetCont(map[string]interface{}{"`id`": v.HandId}, "`name`", "`number`", "`superior`", "`wechat_organization_id`")
sendCont.Number = orgCont.Number
sendCont.Name = orgCont.Name
sendCont.WechatId = strconv.FormatInt(orgCont.WechatOrganizationId, 10) //微信相关参数
sendCont.Icon = "" //人物头像
sendCont.OrgId = strconv.FormatInt(orgCont.Superior, 10) //人员行政组织或行政组织上级
} else {
var userCont modelshr.PersonArchives
userCont.GetCont(map[string]interface{}{"`key`": v.HandId}, "`number`", "`name`", "`icon`", "`icon_photo`", "`wechat`", "`work_wechat`", "`admin_org`")
sendCont.Number = userCont.Number
sendCont.Name = userCont.Name
sendCont.WechatId = userCont.Wechat //微信相关参数
if userCont.WorkWechat != "" {
sendCont.WechatId = userCont.WorkWechat
}
sendCont.Icon = userCont.Icon
if userCont.IconPhoto != "" {
sendCont.Icon = userCont.IconPhoto
} //人物头像
sendCont.OrgId = strconv.FormatInt(userCont.AdminOrg, 10) //人员行政组织或行政组织上级
}
sendList = append(sendList, sendCont)
}
sendData := publicmethod.MapOut[string]()
sendData["err"] = err
sendData["requestData"] = requestData
sendData["matrixContList"] = matrixContNumber
sendData["wligibleMap"] = wligibleMap
sendData["sicleEligible"] = sicleEligible[len(sicleEligible)-1]
sendData["finalResult"] = finalResult
publicmethod.Result(0, sendList, c)
}