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) sendCont.Number = strconv.FormatInt(v, 10) if len(handCont) > 0 { for _, j := range handCont { 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) }