package authentication import ( "appPlatform/models/modelshr" "appPlatform/models/modelssystempermission" "appPlatform/overall" "appPlatform/overall/publicmethod" "fmt" "sort" "strconv" "time" "github.com/gin-gonic/gin" ) /* * @ 作者: 秦东 @ 时间: 2025-10-23 09:07:27 @ 功能: 获取角色树 */ func (a *RoleApiMethod) GiveRoleTree(c *gin.Context) { var roleList []modelssystempermission.SystemRole err := overall.CONSTANT_DB_System_Permission.Where("`state` IN (1,2)").Find(&roleList).Error var sendRoleList []RolePower if err != nil || len(roleList) < 1 { publicmethod.Result(0, sendRoleList, c) return } sort.Slice(roleList, func(i, j int) bool { return roleList[i].Sort < roleList[j].Sort }) sendRoleList = InfiniteRoleTree(0, roleList) publicmethod.Result(0, sendRoleList, c) } // 递归无线角色菜单 func InfiniteRoleTree(parentId int64, threeData []modelssystempermission.SystemRole) []RolePower { var roleTree []RolePower for _, v := range threeData { if v.Superior == parentId { var roleInfo RolePower roleInfo.Id = strconv.FormatInt(v.Id, 10) roleInfo.Label = v.Name roleInfo.Types = strconv.Itoa(v.Types) if v.State == 1 { roleInfo.Status = true } else { roleInfo.Status = false } roleInfo.Superior = strconv.FormatInt(v.Superior, 10) roleInfo.Sort = v.Sort roleInfo.Children = InfiniteRoleTree(v.Id, threeData) roleTree = append(roleTree, roleInfo) } } return roleTree } // 获取角色分组树 func (a *RoleApiMethod) GiveRoleGroupTree(c *gin.Context) { var roleList []modelssystempermission.SystemRole err := overall.CONSTANT_DB_System_Permission.Where("`state` IN (1,2) AND `types` = 2").Find(&roleList).Error var sendRoleList []RolePower if err != nil || len(roleList) < 1 { publicmethod.Result(0, sendRoleList, c) return } sort.Slice(roleList, func(i, j int) bool { return roleList[i].Sort < roleList[j].Sort }) sendRoleList = InfiniteRoleTree(0, roleList) publicmethod.Result(0, sendRoleList, c) } // 编辑角色组 func (a *RoleApiMethod) EditRoleCont(c *gin.Context) { var request EditInfoRole err := c.ShouldBindJSON(&request) if err != nil { publicmethod.Result(1, err, c) return } roleType := 2 if request.Types == "" { roleType = 2 } else { roleType, _ = strconv.Atoi(request.Types) } if request.Id == "" || request.Id == "0" { err = AddRoleCont(request) if err != nil { publicmethod.Result(1, err, c) return } publicmethod.Result(0, err, c) } else { var roleInfo modelssystempermission.SystemRole err = roleInfo.GetCont(map[string]interface{}{"`id`": request.Id}) if err != nil || roleInfo.Id == 0 { err = AddRoleCont(request) if err != nil { publicmethod.Result(1, err, c) return } publicmethod.Result(0, err, c) } else { saveData := publicmethod.MapOut[string]() if request.Name != "" && request.Name != roleInfo.Name { saveData["name"] = request.Name } if request.Sort != 0 && request.Sort != roleInfo.Sort { saveData["sort"] = request.Sort } var roleSuper int64 if request.Superior != "" { roleSuper, _ = strconv.ParseInt(request.Superior, 10, 64) } if roleSuper != roleInfo.Superior { saveData["superior"] = roleSuper } if roleType != roleInfo.Types { saveData["types"] = roleType } if len(saveData) > 0 { saveData["`time`"] = time.Now().Unix() var saveRoleInfo modelssystempermission.SystemRole err = saveRoleInfo.EiteCont(map[string]interface{}{"`id`": roleInfo.Id}, saveData) if err != nil { publicmethod.Result(1, err, c) return } } publicmethod.Result(0, err, c) } } } /* * @ 作者: 秦东 @ 时间: 2025-10-23 15:06:53 @ 功能: 新增角色 */ func AddRoleCont(saveData EditInfoRole) (err error) { roleType := 2 if saveData.Types == "" { roleType = 2 } else { roleType, _ = strconv.Atoi(saveData.Types) } var saveRoleInfo modelssystempermission.SystemRole saveRoleInfo.Name = saveData.Name //系统名称"` saveRoleInfo.State = 1 //状态(1:启用;2:禁用;3:删除)"` saveRoleInfo.Time = time.Now().Unix() //创建时间"` saveRoleInfo.Sort = saveData.Sort //排序"` saveRoleInfo.Types = roleType //类型"` saveRoleInfo.Superior, _ = strconv.ParseInt(saveData.Superior, 10, 64) //上级"` err = overall.CONSTANT_DB_System_Permission.Create(&saveRoleInfo).Error return } /* * @ 作者: 秦东 @ 时间: 2025-10-23 16:52:54 @ 功能: 修改角色状态 */ func (a *RoleApiMethod) EditRoleStatus(c *gin.Context) { var request EditRoleState err := c.ShouldBindJSON(&request) if err != nil { publicmethod.Result(1, err, c) return } if request.Id == "" { publicmethod.Result(1, err, c, "未知角色!") return } var roleInfo modelssystempermission.SystemRole err = roleInfo.GetCont(map[string]interface{}{"`id`": request.Id}) if err != nil || roleInfo.Id == 0 { publicmethod.Result(1, err, c) return } var allSunId GetAllSunId allSunId.GaveMySunAll(roleInfo.Id) allSunId.Id = append(allSunId.Id, roleInfo.Id) if request.Status == 0 { request.Status = 1 } saveData := publicmethod.MapOut[string]() saveData["`state`"] = request.Status saveData["`time`"] = time.Now().Unix() var saveRoleInfo modelssystempermission.SystemRole // err = saveRoleInfo.EiteCont(map[string]interface{}{"`id`": request.Id}, saveData) err = overall.CONSTANT_DB_System_Permission.Model(&saveRoleInfo).Where("`id` IN ?", allSunId.Id).Updates(saveData).Error if err != nil { publicmethod.Result(1, err, c) return } publicmethod.Result(0, err, c) } // 获取所有子集 func (g *GetAllSunId) GaveMySunAll(parentId int64) { var id []int64 overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.SystemRole{}).Select("`id`").Where("`superior` = ?", parentId).Find(&id) if len(id) > 0 { for _, v := range id { if v != 0 { if !publicmethod.IsInTrue[int64](v, g.Id) { g.Id = append(g.Id, v) } g.GaveMySunAll(v) } } } } // 获取行政组织加岗位树 func (a *RoleApiMethod) GetOrgPostTree(c *gin.Context) { var request publicmethod.PublicId c.ShouldBindJSON(&request) var orgId int64 var sunOrgList publicmethod.GetOrgAllParent if request.Id != "" { orgId, _ = strconv.ParseInt(request.Id, 10, 64) if orgId != 0 { sunOrgList.GetOrgSun(orgId) } if len(sunOrgList.Id) > 0 { sunOrgList.Id = append(sunOrgList.Id, orgId) } } else { orgId = 0 } var list []modelshr.OrgCont var postList []modelshr.Position if len(sunOrgList.Id) > 0 { overall.CONSTANT_DB_HR.Model(&modelshr.OrgCont{}).Where("`state` = 1 AND `id` IN ?", sunOrgList.Id).Find(&list) overall.CONSTANT_DB_HR.Model(&modelshr.Position{}).Where("`state` = 1 AND `administrative_organization` IN ?", sunOrgList.Id).Find(&postList) } else { if orgId > 0 { overall.CONSTANT_DB_HR.Model(&modelshr.OrgCont{}).Where("`state` = 1 AND `id` = ?", orgId).Find(&list) overall.CONSTANT_DB_HR.Model(&modelshr.Position{}).Where("`state` = 1 and `administrative_organization` = ?", orgId).Find(&postList) } else { overall.CONSTANT_DB_HR.Model(&modelshr.OrgCont{}).Where("`state` = 1").Find(&list) overall.CONSTANT_DB_HR.Model(&modelshr.Position{}).Where("`state` = 1").Find(&postList) } } var allList []OrgPostPower for _, v := range list { var orgInfo OrgPostPower orgInfo.Id = strconv.FormatInt(v.Id, 10) //string `json:"id"` orgInfo.Label = v.Name //string `json:"label"` orgInfo.Types = strconv.FormatInt(v.Level, 10) // string `json:"types"` orgInfo.TypeName = v.TypeName orgInfo.Status = false //bool `json:"status"` orgInfo.Superior = strconv.FormatInt(v.Superior, 10) //string `json:"superior"` orgInfo.Key = fmt.Sprintf("o_%v", v.Id) orgInfo.Sort = v.Sort //int `json:"sort"` allList = append(allList, orgInfo) } for i, v := range postList { var positInfo OrgPostPower positInfo.Id = strconv.FormatInt(v.Id, 10) //string `json:"id"` positInfo.Label = v.Name //string `json:"label"` positInfo.Types = "9" positInfo.TypeName = "岗位" // string `json:"types"` positInfo.Status = true //bool `json:"status"` positInfo.Superior = strconv.FormatInt(v.AdministrativeOrganization, 10) //string `json:"superior"` positInfo.Key = fmt.Sprintf("p_%v", v.Id) positInfo.Sort = i //int `json:"sort"` allList = append(allList, positInfo) } sort.Slice(allList, func(i, j int) bool { return allList[i].Types < allList[j].Types }) // publicmethod.Result(0, allList, c) orgIdStr := strconv.FormatInt(orgId, 10) var orgPostTree []OrgPostisTree orgPostTree = InfiniteOrgPostTree(orgIdStr, allList) publicmethod.Result(0, orgPostTree, c) } // 递归无线行政组织与岗位菜单 func InfiniteOrgPostTree(parentId string, threeData []OrgPostPower) []OrgPostisTree { var roleTree []OrgPostisTree for _, v := range threeData { if v.Superior == parentId { var roleInfo OrgPostisTree roleInfo.Id = v.Id //string `json:"id"` roleInfo.Label = v.Label //string `json:"label"` roleInfo.Types = v.Types // string `json:"types"` roleInfo.TypeName = v.TypeName roleInfo.Status = v.Status //bool `json:"status"` roleInfo.Superior = v.Superior //string `json:"superior"` roleInfo.Key = v.Key roleInfo.Sort = v.Sort //int `json:"sort"` if v.Types != "9" { roleInfo.Children = InfiniteOrgPostTree(v.Id, threeData) } roleTree = append(roleTree, roleInfo) } } return roleTree }