package administrativeorganization import ( "encoding/json" "fmt" "hr_server/grocerystore" "hr_server/models" "hr_server/models/hrmodels" "hr_server/overall" "hr_server/overall/overallhandle" "sort" "strconv" "time" "github.com/gin-gonic/gin" ) // 行政组织 func (o *OrganizationApi) GovList(c *gin.Context) { var requestData govListType c.ShouldBindJSON(&requestData) if requestData.Page < 0 { requestData.Page = 1 } if requestData.PageSize < 0 { requestData.PageSize = 10 } var govClassMap []outGovCont gormDb := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("administrative_organization.*,aot.name as classname,aot.level").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type") if requestData.State != 0 { gormDb = gormDb.Where("administrative_organization.state = ?", requestData.State) } else { gormDb = gormDb.Where("administrative_organization.state IN ?", []int{1, 2}) } if requestData.Name != "" { gormDb = gormDb.Where("(administrative_organization.name LIKE ? OR administrative_organization.abbreviation LIKE ?)", "%"+requestData.Name+"%", "%"+requestData.Name+"%") } if requestData.Number != "" { gormDb = gormDb.Where("administrative_organization.number LIKE ?", "%"+requestData.Number+"%") } if requestData.Level != 0 { gormDb = gormDb.Where("aot.level = ?", requestData.Level) } if requestData.GovClass != "" { gormDb = gormDb.Where("administrative_organization.organization_type = ?", requestData.GovClass) } if requestData.Superior != "" { // gormDb = gormDb.Where("administrative_organization.superior = ?", requestData.Superior) superiorInt, _ := strconv.ParseInt(requestData.Superior, 10, 64) var sunAry overallhandle.AllSunList[int64] sunAry.GetAllSunOrg(superiorInt) gormDb = gormDb.Where("administrative_organization.superior = ? OR administrative_organization.`id` IN ?", requestData.Superior, sunAry.SunList) } var total int64 totalErr := gormDb.Count(&total).Error if totalErr != nil { total = 0 } errGorm := gormDb.Limit(requestData.PageSize).Offset(overallhandle.LimitPage(requestData.Page, requestData.PageSize)).Find(&govClassMap).Error if errGorm != nil { overallhandle.Result(105, errGorm, c) } else { overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(govClassMap)), govClassMap, c) } } // 添加行政组织 func (o *OrganizationApi) AddGovCont(c *gin.Context) { var requestData addGovInfo err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Name == "" { overallhandle.Result(101, requestData.Name, c, "行政组织名称为空!") return } var superiorId int64 = 0 if requestData.Superior != "" { superiorInt, _ := strconv.ParseInt(requestData.Superior, 10, 64) superiorId = superiorInt } else { overallhandle.Result(101, requestData.Superior, c, "请指定归属上级!") return } var govClassId int64 = 0 if requestData.GovClass == "" { overallhandle.Result(101, requestData.GovClass, c, "请指定归属行政组织类型!") return } else { govClassIdInt, _ := strconv.ParseInt(requestData.GovClass, 10, 64) govClassId = govClassIdInt } // if requestData.WechatId == 0 { // requestData.WechatId = 1 // } var name string judgeErr := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`name`").Where("`organization_type` IN ? AND `name` = ?", []int{1, 2}, requestData.Name).First(&name).Error if judgeErr == nil { overallhandle.Result(103, name, c) return } var saveData models.AdministrativeOrganization saveData.Name = requestData.Name saveData.Superior = superiorId saveData.OrganizationType = govClassId saveData.Abbreviation = requestData.Abbreviation saveData.Time = time.Now().Unix() saveData.State = 1 saveData.WechatOrganizationId = int64(requestData.WechatId) if requestData.Number != "" { saveData.Number = requestData.Number } else { //获取首字母 govFirstWords := overallhandle.GetGovFirstWords(requestData.Name, requestData.Abbreviation, requestData.GovClass, requestData.Superior) saveData.Number = overallhandle.CreateNumber(govFirstWords, requestData.Superior) } saveErr := overall.CONSTANT_DB_HR.Create(&saveData).Error if saveErr == nil { overallhandle.Result(0, saveData, c) } else { overallhandle.Result(104, saveErr, c) } } // 获取行政组织详情 func (o *OrganizationApi) GetGovCont(c *gin.Context) { var requestData overallhandle.GetId err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Id == 0 && requestData.IdStr == "" { overallhandle.Result(101, err, c, "行政组织类别Id不能为空!") return } if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } whereAry := overallhandle.MapOut() whereAry["id"] = requestData.Id var Contents models.AdministrativeOrganization dbErr := Contents.GetCont(whereAry) // dbErr := overall.CONSTANT_DB_HR.Where("`id` = ?", requestData.Id).First(&Contents).Error if dbErr != nil { overallhandle.Result(105, dbErr, c) } else { overallhandle.Result(0, Contents, c) } } // 编辑行政组织 func (o *OrganizationApi) EiteGovCont(c *gin.Context) { var requestData eiteGovInfo err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Id == 0 && requestData.IdStr == "" { overallhandle.Result(101, err, c, "行政类别Id不能为空!") return } if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } whereAry := overallhandle.MapOut() whereAry["id"] = requestData.Id var govCont models.AdministrativeOrganization judgeErr := govCont.GetCont(whereAry) if judgeErr != nil { overallhandle.Result(107, judgeErr, c) return } saveData := overallhandle.MapOut() saveData["time"] = time.Now().Unix() if requestData.Name != "" && requestData.Name != govCont.Name { saveData["name"] = requestData.Name } if requestData.Superior != "" && requestData.Superior != strconv.FormatInt(govCont.Superior, 10) { saveData["superior"] = requestData.Superior } if requestData.GovClass != "" && requestData.GovClass != strconv.FormatInt(govCont.OrganizationType, 10) { saveData["organization_type"] = requestData.GovClass } if requestData.Abbreviation != "" && requestData.Abbreviation != govCont.Abbreviation { saveData["abbreviation"] = requestData.Abbreviation } if requestData.WechatId != 0 && int64(requestData.WechatId) != govCont.WechatOrganizationId { saveData["wechat_organization_id"] = requestData.WechatId } if requestData.Number != "" && requestData.Number != govCont.Number { if requestData.Superior != "" && requestData.Superior != strconv.FormatInt(govCont.Superior, 10) { //获取首字母 govFirstWords := overallhandle.GetGovFirstWords(requestData.Name, requestData.Abbreviation, requestData.GovClass, requestData.Superior) saveData["number"] = overallhandle.CreateNumber(govFirstWords, requestData.Superior) } else if requestData.Superior != "" { saveData["number"] = requestData.Number } } eiteErr := govCont.EiteCont(whereAry, saveData) if eiteErr != nil { overallhandle.Result(106, eiteErr, c) } else { overallhandle.Result(0, saveData, c) } } // 编辑行政组织状态或删除 func (o *OrganizationApi) EiteGovStateOrDel(c *gin.Context) { var requestData EiteJobStateDel err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Id == 0 && requestData.IdStr == "" { overallhandle.Result(101, err, c, "行政类别Id不能为空!") return } if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } if requestData.State == 0 { requestData.State = 1 } whereAry := overallhandle.MapOut() whereAry["id"] = requestData.Id var jobClassInfo models.AdministrativeOrganization //判断行政组织是否存在 judgeExist := jobClassInfo.GetCont(whereAry) if judgeExist != nil { overallhandle.Result(107, judgeExist, c) return } saveData := overallhandle.MapOut() saveData["time"] = time.Now().Unix() saveData["state"] = requestData.State if requestData.State != 3 { eiteErr := jobClassInfo.EiteCont(whereAry, saveData) if eiteErr != nil { overallhandle.Result(106, eiteErr, c) } else { overallhandle.Result(0, saveData, c) } } else { if requestData.IsTrue != 1 { //软删除 eiteErr := jobClassInfo.EiteCont(whereAry, saveData) if eiteErr != nil { overallhandle.Result(106, eiteErr, c) } else { overallhandle.Result(0, saveData, c) } } else { //硬删除 delErr := overall.CONSTANT_DB_HR.Where(whereAry).Delete(&jobClassInfo) if delErr == nil { overallhandle.Result(0, saveData, c) } else { overallhandle.Result(108, delErr, c) } } } } // 行政组织树 func (o *OrganizationApi) GovThree(c *gin.Context) { var requestData govThreeType c.ShouldBindJSON(&requestData) if requestData.Id == 0 && requestData.IdStr == "" { requestData.Id = 0 } if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } var govMap overallhandle.MenuList //API Token数据 redisFileKey := fmt.Sprintf("Org:OrgContList:%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, "orgcont") redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) orgList, orgErr := redisClient.SMEMBERS(redisFileKey) // fmt.Printf("requ---------------->%v--------------->%v\n", orgList, orgErr) if orgErr != nil || len(orgList) < 1 { // fmt.Printf("requestData---------------->%v\n", requestData) // gormDb := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("administrative_organization.*,aot.name as classname,aot.level").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type").Where("administrative_organization.`state` IN ?", []int{1, 2}).Where("administrative_organization.id NOT IN ?", []int{312, 293, 305, 306, 307}) gormDb := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("administrative_organization.*,aot.name as classname,aot.level").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type").Where("administrative_organization.`state` = ?", 1) if requestData.All == 0 { requestData.Id = 312 gormDb = gormDb.Where("administrative_organization.id NOT IN ?", []int{312, 293, 305, 306, 307}) } if requestData.Level != 0 { gormDb = gormDb.Where("aot.level <= ?", requestData.Level) } err := gormDb.Find(&govMap).Error if err != nil { overallhandle.Result(107, err, c) return } redisClient.SetRedisTime(86400) for _, v := range govMap { vJsonStr, jsonErr := json.Marshal(v) if jsonErr == nil { redisClient.Sadd(redisFileKey, string(vJsonStr)) } } } else { if requestData.All == 0 { requestData.Id = 312 } for _, v := range orgList { var redisCont overallhandle.OutGovCont jsonErr := json.Unmarshal([]byte(v), &redisCont) if jsonErr == nil { govMap = append(govMap, redisCont) } } } // fmt.Printf("id==========>%v", govMap) // govMap.GovRecursion(requestData.Id, 0) // fmt.Printf("govAry---------------->%v\n", govMap) govMapThree := overallhandle.GovThreeList(requestData.Id, govMap) overallhandle.Result(0, govMapThree, c) } /* * @ 作者: 秦东 @ 时间: 2022-11-21 08:59:34 @ 功能: 行政组织树(全) @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrganizationApi) GovThreeIng(c *gin.Context) { var requestData govThreeType c.ShouldBindJSON(&requestData) if requestData.Id == 0 && requestData.IdStr == "" { requestData.Id = 0 } if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } // fmt.Printf("requestData---------------->%v\n", requestData) var govMap overallhandle.MenuList // gormDb := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("administrative_organization.*,aot.name as classname,aot.level").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type").Where("administrative_organization.`state` IN ?", []int{1, 2}).Where("administrative_organization.id NOT IN ?", []int{312, 293, 305, 306, 307}) gormDb := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("administrative_organization.*,aot.name as classname,aot.level").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type").Where("administrative_organization.`state` BETWEEN ? AND ?", 1, 2) if requestData.All == 0 { requestData.Id = 312 gormDb = gormDb.Where("administrative_organization.id NOT IN ?", []int{312, 293, 305, 306, 307}) } if requestData.Level != 0 { gormDb = gormDb.Where("aot.level <= ?", requestData.Level) } err := gormDb.Find(&govMap).Error if err != nil { overallhandle.Result(107, err, c) return } // fmt.Printf("id==========>%v", govMap) // govMap.GovRecursion(requestData.Id, 0) // fmt.Printf("govAry---------------->%v\n", requestData.Id) govMapThree := overallhandle.GovThreeList(requestData.Id, govMap) overallhandle.Result(0, govMapThree, c) } // 获取当前行政组织的所有子类 func (o *OrganizationApi) GetOrgAllSun(c *gin.Context) { var requestData overallhandle.GetId c.ShouldBindJSON(&requestData) if requestData.Id == 0 && requestData.IdStr == "" { requestData.Id = 0 } if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } // fmt.Printf("\nrequestData---->%v\n", requestData) var idAry []int64 // idAry = overallhandle.GetDepartmentSun(requestData.Id, idAry) // idAry = append(idAry, requestData.Id) var sunAry overallhandle.AllSunList[int64] sunAry.GetAllSunOrg(requestData.Id) sunAry.SunList = append(sunAry.SunList, requestData.Id) idAry = sunAry.SunList //获取行政组织信息 var orgList []models.AdministrativeOrganization if len(idAry) < 1 { overallhandle.Result(101, orgList, c, "没有查询到信息!") return } err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Where("`state` = 1 AND `id` IN ?", idAry).Find(&orgList).Error if err != nil { overallhandle.Result(101, err, c, "没有查询到信息!") return } overallhandle.Result(0, orgList, c) } /* * @ 作者: 秦东 @ 时间: 2022-10-26 09:44:40 @ 功能: 获取公司下的所有主行政部门 @ 参数 # @ 返回值 # */ func (o *OrganizationApi) GetCompanyDeparment(c *gin.Context) { var requestData overallhandle.GetId errddd := c.ShouldBindJSON(&requestData) sdfgg, _ := json.Marshal(requestData) fmt.Printf("获取值------1----->%v----->%v----->%v\n", requestData, string(sdfgg), errddd) if requestData.Id == 0 && requestData.IdStr == "" { requestData.Id = 0 } // fmt.Printf("获取值----2------->%v\n", requestData) if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } // fmt.Printf("获取值----3------->%v\n", requestData) orgId := getOrgIdList(requestData.Id) if len(orgId) < 1 { overallhandle.Result(101, orgId, c, "没有查询到信息!") return } for i := 0; i < len(orgId); i++ { sunOrgId := getOrgIdList(orgId[i]) if len(sunOrgId) > 0 { orgId = overallhandle.HeBingArray(orgId, sunOrgId) } } var orgList []models.AdministrativeOrganization err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Where("`state` = 1 AND `id` IN ?", orgId).Order("sort").Find(&orgList).Error if err != nil { overallhandle.Result(101, err, c, "没有查询到信息!") return } overallhandle.Result(0, orgList, c) } // 获取行政组织ID func getOrgIdList(orgId int64) (orgIdList []int64) { err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`").Where("`state` = 1 AND `ispower` = 1 AND `organization_type` > 2 AND `superior` = ?", orgId).Find(&orgIdList).Error if err != nil { return } return } /* * @ 作者: 秦东 @ 时间: 2022-11-16 14:04:17 @ 功能: @ 参数 # @ 返回值 # */ func (o *OrganizationApi) GovThreeAboutMan(c *gin.Context) { var requestData OrgAndMAnThreeType c.ShouldBindJSON(&requestData) // if requestData.Id == "" { // overallhandle.Result(101, requestData, c, "行政类别Id不能为空!") // return // } redisFileKey := fmt.Sprintf("OrgPost:OrgAndPeople:%v_%v_%v%v%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, "OrgUserTree", requestData.Id, requestData.All, requestData.Level) redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) orgErr, orgUserList := redisClient.Get(redisFileKey) var jsonErr error if orgErr == true && orgUserList != "" { var orgManCont orgPeopleCont jsonErr = json.Unmarshal([]byte(orgUserList), &orgManCont) outputDataAry := overallhandle.MapOut() outputDataAry["three"] = orgManCont.Three outputDataAry["list"] = orgManCont.List overallhandle.Result(0, outputDataAry, c) } if jsonErr != nil || orgErr == false { //获取行政组织 var orgList []models.OrgContType gormDb := overall.CONSTANT_DB_HR.Model(&models.OrgContType{}).Select("`id`,`numbe`,`name`,`superior`,`state`,`typename`,`level`").Where("`state` = ? ", 1) if requestData.All == 0 { requestData.Id = "312" gormDb = gormDb.Where("`id` NOT IN ?", []int{312, 293, 305, 306, 307}) } if requestData.Level != 0 { gormDb = gormDb.Where("`level` <= ?", requestData.Level) } err := gormDb.Find(&orgList).Error if err != nil { overallhandle.Result(107, err, c) return } var total int64 totalErr := gormDb.Count(&total).Error if totalErr != nil { total = 0 } pageSize := 1 //计算分协程数据基数 switch { case total > 10 && total <= 10000: pageSize = 100 case total > 10000: pageSize = 1000 default: pageSize = 1 } // overallhandle.Result(0, pageSize, c) // return var sendDataList []OrgAndPeople //组装分组信息 var allOrgAndPeople synProReadData for i, v := range orgList { var sendDataCont OrgAndPeople sendDataCont.Id = strconv.FormatInt(v.Id, 10) //行政组织Id或人员Key sendDataCont.Name = v.Name //行政组织名称或人员名称 sendDataCont.Number = v.Number //行政组织编号或人员编号 sendDataCont.OrgId = strconv.FormatInt(v.Id, 10) //行政组织ID // sendDataCont.Icon = "" //行政组织头像或人员头像 sendDataCont.ParentId = strconv.FormatInt(v.Superior, 10) //上级 sendDataCont.IsMan = 1 //是部门还是个人(1:行政组织;2:人员) sendDataCont.Sort = 2 if (i+1)%pageSize == 0 { sendDataList = append(sendDataList, sendDataCont) synPro.Add(1) go allOrgAndPeople.GetOrgAboutPeople(sendDataList) //协程处理行政组织下的人员信息 sendDataList = []OrgAndPeople{} // fmt.Printf("执行一次---------->%v\n", i) } else { sendDataList = append(sendDataList, sendDataCont) } allOrgAndPeople.OrgAndPeopleList = append(allOrgAndPeople.OrgAndPeopleList, sendDataCont) } if len(sendDataList) > 0 { //判断盈余分组数据 synPro.Add(1) go allOrgAndPeople.GetOrgAboutPeople(sendDataList) } synPro.Wait() // fmt.Printf("%v\n", len(allOrgAndPeople.OrgAndPeopleList)) for oi, _ := range allOrgAndPeople.OrgAndPeopleList { allOrgAndPeople.OrgAndPeopleList[oi].Identify = oi + 1 } idInt, _ := strconv.ParseInt(requestData.Id, 10, 64) sort.Slice(allOrgAndPeople.OrgAndPeopleList, func(i, j int) bool { return allOrgAndPeople.OrgAndPeopleList[i].Sort < allOrgAndPeople.OrgAndPeopleList[j].Sort }) // var outputDataList []OrgAndPeople // fmt.Printf("idInt------------------>%v\n", idInt) govMapThree := OrgAndMAnThree(idInt, allOrgAndPeople.OrgAndPeopleList) outputDataAry := overallhandle.MapOut() outputDataAry["three"] = govMapThree outputDataAry["list"] = allOrgAndPeople.OrgAndPeopleList var orgManCont orgPeopleCont orgManCont.List = allOrgAndPeople.OrgAndPeopleList orgManCont.Three = govMapThree sendStr, _ := json.Marshal(orgManCont) redisClient.SetRedisTime(86400) redisClient.Set(redisFileKey, string(sendStr)) overallhandle.Result(0, outputDataAry, c) } } /* * @ 作者: 秦东 @ 时间: 2022-11-16 15:23:41 @ 功能: 递归人员行政树 @ 参数 # @ 返回值 # */ func OrgAndMAnThree(parentId int64, govAry []OrgAndPeople) []OrgAndPeopleThree { orgAndMAnMap := []OrgAndPeopleThree{} for _, v := range govAry { // var zhucont govThree parentIdInt, _ := strconv.ParseInt(v.ParentId, 10, 64) // fmt.Printf("------------->%v---->%v\n", parentIdInt, parentId) if parentIdInt == parentId { orgIdInt, _ := strconv.ParseInt(v.OrgId, 10, 64) child := OrgAndMAnThree(orgIdInt, govAry) var node OrgAndPeopleThree node.Id = v.Id //行政组织Id或人员Key node.Name = v.Name //行政组织名称或人员名称 node.Number = v.Number //行政组织编号或人员编号 node.Icon = v.Icon //行政组织头像或人员头像 node.ParentId = v.ParentId //上级 node.OrgId = v.OrgId //所属行政组织 node.IsMan = v.IsMan //是部门还是个人(1:行政组织;2:人员) node.Child = child node.Sort = v.Sort node.Identify = v.Identify orgAndMAnMap = append(orgAndMAnMap, node) } } return orgAndMAnMap } /* * @ 作者: 秦东 @ 时间: 2022-11-16 14:41:26 @ 功能: 获取行政组织相关人员 @ 参数 # @ 返回值 # */ func (s *synProReadData) GetOrgAboutPeople(orgList []OrgAndPeople) { defer synPro.Done() countList := len(orgList) if countList > 0 { var orgId []string for i := 0; i < countList; i++ { if overallhandle.IsInTrue[string](orgList[i].Id, orgId) == false { orgId = append(orgId, orgList[i].Id) } } var peopleList []models.PersonArchives err := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`key`,`number`,`name`,`icon`,`admin_org`,`icon_photo`").Where("`state` = ? AND `admin_org` IN ? AND `emp_type` BETWEEN ? AND ? ", 1, orgId, 1, 10).Find(&peopleList).Error if err == nil { if len(peopleList) > 0 { for _, v := range peopleList { s.MakePeopleToOrg(v, orgList) } } } } } /* * @ 作者: 秦东 @ 时间: 2022-11-16 15:05:40 @ 功能: 组装人员与行政组织的关联信息 @ 参数 # @ 返回值 # */ func (s *synProReadData) MakePeopleToOrg(manCont models.PersonArchives, orgList []OrgAndPeople) { for _, v := range orgList { orgIdStr := strconv.FormatInt(manCont.AdminOrg, 10) if v.Id == orgIdStr { var sendDataCont OrgAndPeople sendDataCont.Id = strconv.FormatInt(manCont.Key, 10) //行政组织Id或人员Key sendDataCont.Name = manCont.Name //行政组织名称或人员名称 sendDataCont.Number = manCont.Number //行政组织编号或人员编号 sendDataCont.OrgId = "-1" //行政组织ID sendDataCont.Icon = manCont.Icon //行政组织头像或人员头像 sendDataCont.ParentId = v.Id //上级 sendDataCont.IsMan = 2 //是部门还是个人(1:行政组织;2:人员) sendDataCont.Sort = 1 sendDataCont.IconBase64 = manCont.IconPhoto sendDataCont.AllName = fmt.Sprintf("%v(%v)", manCont.Name, manCont.Number) s.OrgAndPeopleList = append(s.OrgAndPeopleList, sendDataCont) } } } /* * @ 作者: 秦东 @ 时间: 2022-11-18 14:28:19 @ 功能: 角色组织与人员搜索列表 @ 参数 # @ 返回值 # */ func (o *OrganizationApi) SearchOrgAndPeople(c *gin.Context) { var requestData NameVal err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(107, err, c) return } if requestData.Name == "" { overallhandle.Result(107, err, c) return } var sendPeopleContList []OrgAndPeople var sendOrgContList []OrgAndPeople //搜索人 var peopleList []models.PersonArchives gormDbMan := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`key`,`number`,`name`,`icon`,`admin_org`").Where("`state` = ? AND `emp_type` BETWEEN ? AND ? ", 1, 1, 10) if requestData.Name != "" { gormDbMan = gormDbMan.Where("`name` LIKE ?", "%"+requestData.Name+"%") } Identify := 1 err = gormDbMan.Find(&peopleList).Error if err == nil { for _, v := range peopleList { var sendDataCont OrgAndPeople sendDataCont.Id = strconv.FormatInt(v.Key, 10) //行政组织Id或人员Key sendDataCont.Name = v.Name //行政组织名称或人员名称 sendDataCont.Number = v.Number //行政组织编号或人员编号 sendDataCont.OrgId = "-1" //行政组织ID sendDataCont.Icon = v.Icon //行政组织头像或人员头像 sendDataCont.ParentId = strconv.FormatInt(v.AdminOrg, 10) //上级 sendDataCont.IsMan = 2 //是部门还是个人(1:行政组织;2:人员) sendDataCont.Sort = 1 sendDataCont.Identify = Identify sendDataCont.AllName = fmt.Sprintf("%v(%v)", v.Name, v.Number) sendPeopleContList = append(sendPeopleContList, sendDataCont) Identify++ } } //搜索行政组织 var orgList []models.OrgContType gormDbOrg := overall.CONSTANT_DB_HR.Model(&models.OrgContType{}).Select("`id`,`numbe`,`name`,`superior`,`level`").Where("`state` = ?", 1) if requestData.Name != "" { gormDbOrg = gormDbOrg.Where("`name` LIKE ?", "%"+requestData.Name+"%") } err = gormDbOrg.Find(&orgList).Error if err == nil { for _, v := range orgList { sendName := GetAllOrgName(v.Id, v.Level, v.Name) var sendDataOrgCont OrgAndPeople sendDataOrgCont.Id = strconv.FormatInt(v.Id, 10) //行政组织Id或人员Key sendDataOrgCont.Name = v.Name //行政组织名称或人员名称 sendDataOrgCont.Number = v.Number //行政组织编号或人员编号 sendDataOrgCont.OrgId = strconv.FormatInt(v.Id, 10) //行政组织ID // sendDataOrgCont.Icon = "" //行政组织头像或人员头像 sendDataOrgCont.ParentId = strconv.FormatInt(v.Superior, 10) //上级 sendDataOrgCont.IsMan = 1 //是部门还是个人(1:行政组织;2:人员) sendDataOrgCont.Sort = 2 sendDataOrgCont.AllName = sendName sendDataOrgCont.Identify = Identify sendOrgContList = append(sendOrgContList, sendDataOrgCont) Identify++ } } outPutData := overallhandle.MapOut() outPutData["people"] = sendPeopleContList outPutData["org"] = sendOrgContList overallhandle.Result(0, outPutData, c) } /* * @ 作者: 秦东 @ 时间: 2022-11-18 15:07:18 @ 功能: 获取名称 @ 参数 #id 行政组织ID #level 等级 #name 名称 @ 返回值 # */ func GetAllOrgName(id, level int64, name string) (allName string) { if level <= 3 { allName = name } else { _, companyId, departmentId, sunDepartId, _ := overallhandle.GetOrgStructure(id) var comCont models.AdministrativeOrganization comCont.GetCont(map[string]interface{}{"`id`": companyId}, "`name`") switch level { case 4: allName = fmt.Sprintf("%v / %v", name, comCont.Name) case 5: var mainDepartCont models.AdministrativeOrganization mainDepartCont.GetCont(map[string]interface{}{"`id`": departmentId}, "`name`") allName = fmt.Sprintf("%v / %v / %v", name, mainDepartCont.Name, comCont.Name) case 6: if departmentId != sunDepartId { var mainDepartCont models.AdministrativeOrganization mainDepartCont.GetCont(map[string]interface{}{"`id`": departmentId}, "`name`") var sunDepartCont models.AdministrativeOrganization sunDepartCont.GetCont(map[string]interface{}{"`id`": sunDepartId}, "`name`") allName = fmt.Sprintf("%v / %v / %v / %v", name, sunDepartCont.Name, mainDepartCont.Name, comCont.Name) } else { if departmentId != companyId { var mainDepartCont models.AdministrativeOrganization mainDepartCont.GetCont(map[string]interface{}{"`id`": departmentId}, "`name`") allName = fmt.Sprintf("%v / %v / %v", name, mainDepartCont.Name, comCont.Name) } else { allName = fmt.Sprintf("%v / %v", name, comCont.Name) } } default: allName = name } } return } /* * @ 作者: 秦东 @ 时间: 2023-01-19 10:41:34 @ 功能: 获取行政组织及相关人员 @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrganizationApi) GetOrgAndEveryOnePeople(c *gin.Context) { var requestData OrgAndMAnThreeType c.ShouldBindJSON(&requestData) //获取行政组织 var sunAry overallhandle.AllSunList[int64] var orgIdList []int64 var origin int64 isNotIn := 0 if requestData.All == 0 { if requestData.Id == "" { origin = 0 isNotIn = 1 orgIdList = []int64{312, 293, 305, 306, 307} } else { idInt64, _ := strconv.ParseInt(requestData.Id, 10, 64) origin = idInt64 sunAry.GetAllSunOrg(idInt64) orgIdList = sunAry.SunList } } else { if requestData.Id != "" { idInt64, _ := strconv.ParseInt(requestData.Id, 10, 64) origin = idInt64 sunAry.GetAllSunOrg(idInt64) orgIdList = sunAry.SunList } } if !overallhandle.IsInTrue[int64](origin, orgIdList) { orgIdList = append(orgIdList, origin) } fmt.Printf("获取行政组织--->%v\n", orgIdList) var orgAndPeopleListCont empowerSync //启用协程结构体 synPro.Add(1) go orgAndPeopleListCont.GetOrgList(isNotIn, orgIdList, requestData.Level) //获取行政组织 synPro.Add(1) go orgAndPeopleListCont.GetPeopleList(isNotIn, orgIdList) //获取人员 synPro.Wait() orgAndManList := orgAndPeopleListCont.readDataLock() sort.Slice(orgAndManList, func(i, j int) bool { return orgAndManList[i].Type < orgAndManList[j].Type }) sendList := OrgAndManNewThree(origin, orgAndManList) overallhandle.Result(0, sendList, c) } /* * @ 作者: 秦东 @ 时间: 2023-01-19 11:18:39 @ 功能: 获取行政组织(协程) @ 参数 #orgId 行政组织ID #level 获取等级 @ 返回值 # @ 方法原型 #func (e *empowerSync) GetOrgList(orgId []int64, level int) */ func (e *empowerSync) GetOrgList(isNotIn int, orgId []int64, level int) { e.mutext.Lock() defer e.mutext.Unlock() var orgList []models.AdministrativeOrganization gormDb := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`,`number`,`name`,`superior`").Where("`state` = ? ", 1) if len(orgId) > 0 { if isNotIn == 1 { gormDb = gormDb.Where("`id` NOT IN ?", orgId) } else { gormDb = gormDb.Where("`id` IN ?", orgId) } } if level != 0 { gormDb = gormDb.Where("`level` <= ?", level) } err := gormDb.Find(&orgList).Error if err == nil && len(orgList) > 0 { for _, v := range orgList { var orgCont OrgAndEveryOnePeople orgCont.Id = strconv.FormatInt(v.Id, 10) //识别符 orgCont.OrgId = v.Id orgCont.Number = v.Number //编号 orgCont.Name = v.Name //姓名 orgCont.Superior = strconv.FormatInt(v.Superior, 10) //上级 orgCont.Type = 1 orgCont.Key = fmt.Sprintf("A%v", v.Id) e.orgAndPeopleList = append(e.orgAndPeopleList, orgCont) } } synPro.Done() } /* * @ 作者: 秦东 @ 时间: 2023-01-19 11:24:44 @ 功能: 获取人员(协程) @ 参数 #orgId 行政组织ID @ 返回值 # @ 方法原型 # */ func (e *empowerSync) GetPeopleList(isNotIn int, orgId []int64) { e.mutext.Lock() defer e.mutext.Unlock() var peopleList []models.PersonArchives gormDnMan := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`key`,`number`,`name`,`icon`,`icon_photo`,`admin_org`").Where("`state` = 1 AND `emp_type` BETWEEN ? AND ?", 1, 10) if len(orgId) > 0 { if isNotIn == 1 { gormDnMan = gormDnMan.Where("`admin_org` NOT IN ?", orgId) } else { gormDnMan = gormDnMan.Where("`admin_org` IN ?", orgId) } } err := gormDnMan.Find(&peopleList).Error if err == nil && len(peopleList) > 0 { for _, v := range peopleList { var peopleCont OrgAndEveryOnePeople peopleCont.Id = strconv.FormatInt(v.Key, 10) //识别符 peopleCont.OrgId = -1 peopleCont.Number = v.Number //编号 peopleCont.Name = v.Name //姓名 peopleCont.Superior = strconv.FormatInt(v.AdminOrg, 10) //上级 peopleCont.Icon = v.Icon peopleCont.IconPhoto = v.IconPhoto peopleCont.Type = 2 peopleCont.Key = fmt.Sprintf("U%v", v.Key) e.orgAndPeopleList = append(e.orgAndPeopleList, peopleCont) } } synPro.Done() } /* * @ 作者: 秦东 @ 时间: 2023-01-19 14:28:48 @ 功能: 新版人员与行政组织树 @ 参数 #parentId 上级ID #govAry 数据 @ 返回值 # @ 方法原型 #func OrgAndManNewThree(parentId int64, govAry []OrgAndEveryOnePeople) []OrgAndManThree */ func OrgAndManNewThree(parentId int64, govAry []OrgAndEveryOnePeople) []OrgAndManThree { orgAndMAnMap := []OrgAndManThree{} for _, v := range govAry { // var zhucont govThree parentIdInt, _ := strconv.ParseInt(v.Superior, 10, 64) // fmt.Printf("------------->%v---->%v\n", parentIdInt, parentId) if parentIdInt == parentId { child := OrgAndManNewThree(v.OrgId, govAry) var node OrgAndManThree node.Id = v.Id //识别符 node.OrgId = v.OrgId node.Number = v.Number //编号 node.Name = v.Name //姓名 node.Superior = v.Superior //上级 node.Icon = v.Icon node.IconPhoto = v.IconPhoto node.Type = v.Type node.Key = v.Key if len(child) > 0 { node.Child = child } orgAndMAnMap = append(orgAndMAnMap, node) } } return orgAndMAnMap } /* * @ 作者: 秦东 @ 时间: 2023-01-29 09:26:04 @ 功能: 根据行政组织编号获取组织及人员 @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrganizationApi) BasisOrgObtainSonOrgAndMan(c *gin.Context) { var requestData overallhandle.ConstId err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } //获取当前行政组织信息 var orgCont models.AdministrativeOrganization isNotIn := 0 var idList []int64 var parenAry overallhandle.AllSunList[int64] if requestData.Id != "" { idInt, _ := strconv.ParseInt(requestData.Id, 10, 64) idList = []int64{idInt} if idInt != 313 { err = orgCont.GetCont(map[string]interface{}{"id": idInt}) parenAry.SunList = append(parenAry.SunList, idInt) parenAry.GetAllParentOrg(idInt, 2) } else { } } else { isNotIn = 1 idList = []int64{312, 293, 305, 306, 307} err = fmt.Errorf("获取全部内容") } var sendData ShenPiXuanRen // fmt.Printf("组织id列表------------》%v\n", parenAry.SunList) if len(parenAry.SunList) > 0 { var orgAndPeopleListTitleCont empowerSynces //启用协程结构体 synProes.Add(1) go orgAndPeopleListTitleCont.BasisOrgDirectOrgIng(parenAry.SunList) //获取行政组织 synProes.Wait() orgTitleList := orgAndPeopleListTitleCont.readDataLock() sort.SliceStable(orgTitleList, func(i, j int) bool { return orgTitleList[i].Sort < orgTitleList[j].Sort }) for _, ov := range orgTitleList { var titleDepartCont TitleDepartmentsCont titleDepartCont.DepartmentId = ov.Id //行政组织ID titleDepartCont.Id = ov.Id //行政组织ID titleDepartCont.DepartmentKey = ov.Number //行政组织编码 titleDepartCont.DepartmentName = ov.Name //行政组织名称 titleDepartCont.ParentId = ov.Superior //上级ID titleDepartCont.DepartmentNames = ov.Name //行政组织别名 sendData.TitleDepartments = append(sendData.TitleDepartments, titleDepartCont) } } var orgAndPeopleListCont empowerSyncDepartMan //启用协程结构体 synPro.Add(1) go orgAndPeopleListCont.BasisOrgDirectOrg(isNotIn, idList, 2) //获取行政组织 synPro.Add(1) go orgAndPeopleListCont.GetPeopleListIng(isNotIn, idList) //获取人员 synPro.Wait() orgList, manList := orgAndPeopleListCont.readDataLock() if len(orgList) > 0 { for _, org := range orgList { var orgShenPi ChildDepartmentsCont orgShenPi.Id = org.Id //行政组织ID orgShenPi.DepartmentKey = org.Number //行政组织编码 orgShenPi.DepartmentName = org.Name //行政组织名称 orgShenPi.ParentId = org.Superior //上级ID orgShenPi.DepartmentNames = org.Name //行政组织别名 sendData.ChildDepartments = append(sendData.ChildDepartments, orgShenPi) } } if len(manList) > 0 { for _, man := range manList { var employess EmployeesCont employess.Id = man.Id employess.EmployeeName = man.Name //人员名称 employess.IsLeave = "0" //行政组织名称 employess.Open = "false" //上级ID employess.Icon = man.Icon employess.IconToBase64 = man.IconPhoto employess.Wechat = man.Wechat employess.Departmentid = man.DepartmentId //部门ID employess.DepartmentName = man.DepartmentName //部门名称 employess.Postid = man.PostId //岗位ID employess.PostName = man.PostName //岗位名称 employess.Tema = man.Tema //班组Id employess.TemaName = man.TemaName //班组名称 sendData.Employees = append(sendData.Employees, employess) } } // outMap := overallhandle.MapOut() // outMap["sendData"] = sendData // outMap["orgList"] = orgList // outMap["manList"] = manList overallhandle.Result(0, sendData, c) } /* * @ 作者: 秦东 @ 时间: 2023-01-19 11:24:44 @ 功能: 获取人员(协程) @ 参数 #orgId 行政组织ID @ 返回值 # @ 方法原型 # */ func (e *empowerSyncDepartMan) GetPeopleListIng(isNotIn int, orgId []int64) { e.mutext.Lock() defer e.mutext.Unlock() var peopleList []models.PersonArchives gormDnMan := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`key`,`number`,`name`,`icon`,`icon_photo`,`admin_org`,`wechat`,`work_wechat`,`position`,`teamid`").Where("`state` = 1 AND `emp_type` BETWEEN ? AND ?", 1, 10) if len(orgId) > 0 { if isNotIn == 1 { gormDnMan = gormDnMan.Where("`admin_org` NOT IN ?", orgId) } else { gormDnMan = gormDnMan.Where("`admin_org` IN ?", orgId) } } err := gormDnMan.Find(&peopleList).Error if err == nil && len(peopleList) > 0 { for _, v := range peopleList { var peopleCont OrgAndEveryOnePeople peopleCont.Id = strconv.FormatInt(v.Key, 10) //识别符 peopleCont.OrgId = -1 peopleCont.Number = v.Number //编号 peopleCont.Name = v.Name //姓名 peopleCont.Superior = strconv.FormatInt(v.AdminOrg, 10) //上级 peopleCont.Icon = v.Icon peopleCont.IconPhoto = v.IconPhoto peopleCont.Type = 2 peopleCont.Wechat = v.Wechat if v.WorkWechat != "" { peopleCont.Wechat = v.WorkWechat } peopleCont.Key = fmt.Sprintf("U%v", v.Key) _, _, companyId, _, _ := overallhandle.GetOrgStructure(v.AdminOrg) if companyId != 0 { var orgCont models.AdministrativeOrganization orgCont.GetCont(map[string]interface{}{"`id`": companyId}, "`name`") peopleCont.DepartmentId = companyId //分厂Id peopleCont.DepartmentName = orgCont.Name //分厂名称 } //获取岗位 if v.Position != 0 { var postCont models.Position postCont.GetCont(map[string]interface{}{"`id`": v.Position}, "`name`") peopleCont.PostId = v.Position //职务Id peopleCont.PostName = postCont.Name //职务名称 } if v.TeamId != 0 { var teamCont models.TeamGroup teamCont.GetCont(map[string]interface{}{"`id`": v.TeamId}, "`name`") peopleCont.Tema = v.TeamId //班组Id peopleCont.TemaName = teamCont.Name //班组名称 } e.peopleList = append(e.peopleList, peopleCont) } } synPro.Done() } /* * @ 作者: 秦东 @ 时间: 2023-01-29 09:54:05 @ 功能: 根据行政组织ID获取直接下级 @ 参数 # @ 返回值 # @ 方法原型 # */ func (e *empowerSyncDepartMan) BasisOrgDirectOrg(isNotIn int, orgId []int64, level int) { e.mutext.Lock() defer e.mutext.Unlock() var orgList []models.OrgContType gormDb := overall.CONSTANT_DB_HR.Model(&models.OrgContType{}).Select("`id`,`numbe`,`name`,`superior`").Where("`state` = ? ", 1) if len(orgId) > 0 { if isNotIn == 1 { gormDb = gormDb.Where("`id` NOT IN ?", orgId) } else { gormDb = gormDb.Where("`superior` IN ?", orgId) } } if level != 0 { gormDb = gormDb.Where("`level` > ?", level) } err := gormDb.Find(&orgList).Error listCount := len(orgList) if err == nil && listCount > 0 { for i, v := range orgList { var orgCont OrgAndEveryOnePeople orgCont.Id = strconv.FormatInt(v.Id, 10) //识别符 orgCont.OrgId = v.Id orgCont.Number = v.Number //编号 orgCont.Name = v.Name //行政组织名称 orgCont.Superior = strconv.FormatInt(v.Superior, 10) //上级 orgCont.Type = 1 orgCont.Key = fmt.Sprintf("A%v", v.Id) orgCont.Sort = listCount - i e.orgList = append(e.orgList, orgCont) } } synPro.Done() } func (e *empowerSynces) BasisOrgDirectOrgIng(orgId []int64) { e.mutext.Lock() defer e.mutext.Unlock() listCount := len(orgId) if listCount > 0 { for i, v := range orgId { var orgContOld models.AdministrativeOrganization err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`,`number`,`name`,`superior`").Where("`id` = ? ", v).First(&orgContOld).Error if err == nil { var orgCont OrgAndEveryOnePeople orgCont.Id = strconv.FormatInt(orgContOld.Id, 10) //识别符 orgCont.OrgId = orgContOld.Id orgCont.Number = orgContOld.Number //编号 orgCont.Name = orgContOld.Name //行政组织名称 orgCont.Superior = strconv.FormatInt(orgContOld.Superior, 10) //上级 orgCont.Type = 1 orgCont.Key = fmt.Sprintf("A%v", orgContOld.Id) orgCont.Sort = listCount - i e.orgAndPeopleList = append(e.orgAndPeopleList, orgCont) } } } synProes.Done() } /* * @ 作者: 秦东 @ 时间: 2023-02-15 10:46:22 @ 功能: 获取指定行政组织列表 @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrganizationApi) GetAppointOrg(c *gin.Context) { var requestData OrgIdList err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if len(requestData.OrgId) < 1 { overallhandle.Result(1, err, c, "请选择行政组织!") return } var orgList []models.AdministrativeOrganization err = overall.CONSTANT_DB_HR.Where("`id` IN ?", requestData.OrgId).Find(&orgList).Error if err != nil || len(orgList) < 1 { overallhandle.Result(107, err, c) return } overallhandle.Result(0, orgList, c) } /* * @ 作者: 秦东 @ 时间: 2023-04-22 15:56:42 @ 功能: @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrganizationApi) BasisOrgAllPeople(c *gin.Context) { var requestData overallhandle.ConstId err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Id == "" { overallhandle.Result(101, err, c) return } orgInt, _ := strconv.ParseInt(requestData.Id, 10, 64) var sunAry overallhandle.AllSunList[int64] sunAry.GetAllSunOrg(orgInt) sunAry.SunList = append(sunAry.SunList, orgInt) var userList []models.PersonArchives err = overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Where("emp_type BETWEEN 1 AND 10 AND admin_org IN ?", sunAry.SunList).Find(&userList).Error if err != nil { overallhandle.Result(105, err, c) return } var sendContList []OrgAllPeopleList for _, v := range userList { var sendCont OrgAllPeopleList sendCont.Id = strconv.FormatInt(v.Id, 10) //id"` sendCont.Number = v.Number //number"` sendCont.Name = v.Name //name"` sendCont.Icon = v.Icon //icon"` sendCont.Adminorg = strconv.FormatInt(v.AdminOrg, 10) //adminorg"` sendCont.Teamid = strconv.FormatInt(v.TeamId, 10) //teamid"` sendCont.Position = strconv.FormatInt(v.Position, 10) //position"` sendCont.Wechat = v.Wechat //wechat"` if v.WorkWechat != "" { sendCont.Wechat = v.WorkWechat } sendCont.Key = strconv.FormatInt(v.Key, 10) //key"` sendCont.Iconphoto = v.IconPhoto //iconphoto"` sendContList = append(sendContList, sendCont) } overallhandle.Result(0, sendContList, c) } /* * @ 作者: 秦东 @ 时间: 2023-06-05 11:53:21 @ 功能: @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrganizationApi) GovNewThreeIng(c *gin.Context) { var requestData SearchOrgCont c.ShouldBindJSON(&requestData) var orgContList []hrmodels.OrgCont gotmDb := overall.CONSTANT_DB_HR.Model(&hrmodels.OrgCont{}).Where("state IN ?", []int{1, 2}) if requestData.KeyWords != "" { gotmDb = gotmDb.Where("name LIKE ? OR number LIKE ?", "%"+requestData.KeyWords+"%", "%"+requestData.KeyWords+"%") } if requestData.Class != 0 { gotmDb = gotmDb.Where("organization_type = ?", requestData.Class) } err := gotmDb.Find(&orgContList).Error if err != nil && len(orgContList) < 1 { overallhandle.Result(107, err, c) return } if requestData.KeyWords != "" || requestData.Class != 0 { var govMap []SendOrgTreeList for i := 0; i < len(orgContList); i++ { var govCont SendOrgTreeList govCont.Id = orgContList[i].Id // govCont.Number = orgContList[i].Number //行政编码"` govCont.Name = orgContList[i].Name //组织名称"` govCont.Superior = orgContList[i].Superior //上级ID"` govCont.OrganizationType = orgContList[i].OrganizationType //行政组织类型"` govCont.Abbreviation = orgContList[i].Abbreviation //行政组织简称"` govCont.Time = orgContList[i].Time //创建时间"` govCont.State = orgContList[i].State //状态(1:启用;2:禁用;3:删除)"` govCont.WechatOrganizationId = orgContList[i].WechatOrganizationId //微信组织架构对照码"` govCont.SuperiorSun = orgContList[i].SuperiorSun //级联ID"` govCont.Schoole = orgContList[i].Schoole //原知行学院对照码"` govCont.KingdeeId = orgContList[i].KingdeeId //金蝶对照ID"` govCont.IsPower = orgContList[i].IsPower //是否为实权部门"` govCont.Sort = orgContList[i].Sort //排序"` govCont.TypeName = orgContList[i].TypeName //'类型名称"` govCont.Level = orgContList[i].Level //级别"` if orgContList[i].State == 1 { govCont.Status = true } else { govCont.Status = false } govMap = append(govMap, govCont) } overallhandle.Result(0, govMap, c) } else { if requestData.OrgId == 0 { requestData.OrgId = 313 } govMapThree := GovOrgTree(requestData.OrgId, orgContList) overallhandle.Result(0, govMapThree, c) } } /* * @ 作者: 秦东 @ 时间: 2023-06-05 13:24:19 @ 功能: 行政组织树 @ 参数 # @ 返回值 # @ 方法原型 # */ func GovOrgTree(parentId int64, govList []hrmodels.OrgCont) (govMap []SendOrgTreeList) { for i := 0; i < len(govList); i++ { if govList[i].Superior == parentId { var govCont SendOrgTreeList govCont.Id = govList[i].Id // govCont.Number = govList[i].Number //行政编码"` govCont.Name = govList[i].Name //组织名称"` govCont.Superior = govList[i].Superior //上级ID"` govCont.OrganizationType = govList[i].OrganizationType //行政组织类型"` govCont.Abbreviation = govList[i].Abbreviation //行政组织简称"` govCont.Time = govList[i].Time //创建时间"` govCont.State = govList[i].State //状态(1:启用;2:禁用;3:删除)"` govCont.WechatOrganizationId = govList[i].WechatOrganizationId //微信组织架构对照码"` govCont.SuperiorSun = govList[i].SuperiorSun //级联ID"` govCont.Schoole = govList[i].Schoole //原知行学院对照码"` govCont.KingdeeId = govList[i].KingdeeId //金蝶对照ID"` govCont.IsPower = govList[i].IsPower //是否为实权部门"` govCont.Sort = govList[i].Sort //排序"` govCont.TypeName = govList[i].TypeName //'类型名称"` govCont.Level = govList[i].Level //级别"` if govList[i].State == 1 { govCont.Status = true } else { govCont.Status = false } govCont.Child = GovOrgTree(govList[i].Id, govList) govMap = append(govMap, govCont) } } return } // 添加行政组织 func (o *OrganizationApi) NewAddGovCont(c *gin.Context) { var requestData addGovInfoNew err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Name == "" { overallhandle.Result(101, requestData.Name, c, "行政组织名称为空!") return } var superiorId int64 = 0 if requestData.Superior != "" { superiorInt, _ := strconv.ParseInt(requestData.Superior, 10, 64) superiorId = superiorInt } else { overallhandle.Result(101, requestData.Superior, c, "请指定归属上级!") return } var govClassId int64 = 0 if requestData.GovClass == "" { overallhandle.Result(101, requestData.GovClass, c, "请指定归属行政组织类型!") return } else { govClassIdInt, _ := strconv.ParseInt(requestData.GovClass, 10, 64) govClassId = govClassIdInt } var wechatIdVal int64 = 0 if requestData.WechatId != "" { wechatIdVal, _ = strconv.ParseInt(requestData.WechatId, 10, 64) // requestData.WechatId = 1 } var name string judgeErr := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`name`").Where("`organization_type` IN ? AND `name` = ?", []int{1, 2}, requestData.Name).First(&name).Error if judgeErr == nil { overallhandle.Result(103, name, c) return } var saveData models.AdministrativeOrganization saveData.Name = requestData.Name saveData.Superior = superiorId saveData.OrganizationType = govClassId saveData.Abbreviation = requestData.Abbreviation saveData.Time = time.Now().Unix() saveData.State = 1 // saveData.WechatOrganizationId = int64(requestData.WechatId) saveData.WechatOrganizationId = wechatIdVal if requestData.Number != "" { saveData.Number = requestData.Number } else { //获取首字母 govFirstWords := overallhandle.GetGovFirstWords(requestData.Name, requestData.Abbreviation, requestData.GovClass, requestData.Superior) saveData.Number = overallhandle.CreateNumber(govFirstWords, requestData.Superior) } saveErr := overall.CONSTANT_DB_HR.Create(&saveData).Error if saveErr == nil { overallhandle.Result(0, saveData, c) } else { overallhandle.Result(104, saveErr, c) } } // 编辑行政组织 func (o *OrganizationApi) NewEiteGovCont(c *gin.Context) { var requestData NewEiteGovInfo err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Id == 0 { overallhandle.Result(101, err, c, "行政类别Id不能为空!") return } whereAry := overallhandle.MapOut() whereAry["id"] = requestData.Id var govCont models.AdministrativeOrganization judgeErr := govCont.GetCont(whereAry) if judgeErr != nil { overallhandle.Result(107, judgeErr, c) return } saveData := overallhandle.MapOut() saveData["time"] = time.Now().Unix() if requestData.Name != "" && requestData.Name != govCont.Name { saveData["name"] = requestData.Name } if requestData.Superior != "" && requestData.Superior != strconv.FormatInt(govCont.Superior, 10) { saveData["superior"] = requestData.Superior } if requestData.GovClass != "" && requestData.GovClass != strconv.FormatInt(govCont.OrganizationType, 10) { saveData["organization_type"] = requestData.GovClass } if requestData.Abbreviation != "" && requestData.Abbreviation != govCont.Abbreviation { saveData["abbreviation"] = requestData.Abbreviation } if requestData.WechatId != "" { wechatIdInt, _ := strconv.ParseInt(requestData.WechatId, 10, 64) if wechatIdInt != govCont.WechatOrganizationId { saveData["wechat_organization_id"] = wechatIdInt } } else { saveData["wechat_organization_id"] = 0 } if requestData.Number != "" && requestData.Number != govCont.Number { if requestData.Superior != "" && requestData.Superior != strconv.FormatInt(govCont.Superior, 10) { //获取首字母 govFirstWords := overallhandle.GetGovFirstWords(requestData.Name, requestData.Abbreviation, requestData.GovClass, requestData.Superior) saveData["number"] = overallhandle.CreateNumber(govFirstWords, requestData.Superior) } else if requestData.Superior != "" { saveData["number"] = requestData.Number } } eiteErr := govCont.EiteCont(whereAry, saveData) if eiteErr != nil { overallhandle.Result(106, eiteErr, c) } else { overallhandle.Result(0, saveData, c) } } // 改变行政组织状态 func (o *OrganizationApi) NewEiteGovStateOrDel(c *gin.Context) { var requestData DelOrgStatus err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Id == 0 { overallhandle.Result(1, err, c, "未知行政组织!请检查!") return } if requestData.Status == 0 { requestData.Status = 1 } if requestData.IsTrue == 0 { requestData.IsTrue = 2 } where := overallhandle.MapOut() where["`id`"] = requestData.Id var orgCont models.AdministrativeOrganization err = orgCont.GetCont(where, "`id`", "`name`", "`superior`") if err != nil { overallhandle.Result(1, err, c, "未知行政组织!请检查!") return } editCont := overallhandle.MapOut() editCont["state"] = requestData.Status editCont["time"] = time.Now().Unix() if requestData.Status != 3 { if requestData.Status == 1 { //获取所有上级 var fatherOrg overallhandle.AllSunList[int64] fatherOrg.GetAllFatherOrg(orgCont.Superior) fatherOrg.SunList = append(fatherOrg.SunList, orgCont.Id) err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Where("`id` IN ? AND state BETWEEN ? AND ?", fatherOrg.SunList, 1, 2).Updates(editCont).Error if err != nil { overallhandle.Result(106, err, c) return } } else { //获取所有下级 var orgSun overallhandle.AllSunList[int64] orgSun.GetAllSunOrg(orgCont.Id) orgSun.SunList = append(orgSun.SunList, orgCont.Id) err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Where("`id` IN ? AND state BETWEEN ? AND ?", orgSun.SunList, 1, 2).Updates(editCont).Error if err != nil { overallhandle.Result(106, err, c) return } } } else { if requestData.IsTrue == 1 { //获取所有下级 var orgSun overallhandle.AllSunList[int64] orgSun.GetAllSunOrg(orgCont.Id) orgSun.SunList = append(orgSun.SunList, orgCont.Id) var curryMan int64 overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`").Where("admin_org IN ?", orgSun.SunList).Count(&curryMan) if curryMan > 0 { if requestData.Status == 1 { var fatherOrg overallhandle.AllSunList[int64] fatherOrg.GetAllFatherOrg(orgCont.Superior) fatherOrg.SunList = append(fatherOrg.SunList, orgCont.Id) err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Where("`id` IN ? AND state BETWEEN ? AND ?", fatherOrg.SunList, 1, 2).Updates(editCont).Error if err != nil { overallhandle.Result(106, err, c) return } } else { err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Where("`id` IN ? AND state BETWEEN ? AND ?", orgSun.SunList, 1, 2).Updates(editCont).Error if err != nil { overallhandle.Result(106, err, c) return } } } else { err = overall.CONSTANT_DB_HR.Where("`id` IN ?", orgSun.SunList).Delete(&models.AdministrativeOrganization{}).Error if err != nil { overallhandle.Result(106, err, c) return } } } else { if requestData.Status == 1 { var fatherOrg overallhandle.AllSunList[int64] fatherOrg.GetAllFatherOrg(orgCont.Superior) fatherOrg.SunList = append(fatherOrg.SunList, orgCont.Id) err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Where("`id` IN ? AND state BETWEEN ? AND ?", fatherOrg.SunList, 1, 2).Updates(editCont).Error if err != nil { overallhandle.Result(106, err, c) return } } else { //获取所有下级 var orgSun overallhandle.AllSunList[int64] orgSun.GetAllSunOrg(orgCont.Id) orgSun.SunList = append(orgSun.SunList, orgCont.Id) err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Where("`id` IN ? AND state BETWEEN ? AND ?", orgSun.SunList, 1, 2).Updates(editCont).Error if err != nil { overallhandle.Result(106, err, c) return } } } } overallhandle.Result(0, err, c) } /* * @ 作者: 秦东 @ 时间: 2023-07-01 09:13:10 @ 功能: 获取行政组织直接下属 @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrganizationApi) GetOrgChiled(c *gin.Context) { var requestData overallhandle.PublicId[int64] err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Id == 0 { overallhandle.Result(1, err, c, "请提交行政组织ID") return } var orgList []models.AdministrativeOrganization err = overall.CONSTANT_DB_HR.Where("`state` = 1 AND `superior` = ?", requestData.Id).Find(&orgList).Error if err != nil { overallhandle.Result(107, err, c) return } var sendList []AdminOrgSend for _, v := range orgList { var sendCont AdminOrgSend sendCont.Id = v.Id // sendCont.Number = v.Number //行政编码"` sendCont.Name = v.Name //组织名称"` sendCont.Superior = v.Superior //上级ID"` sendCont.OrganizationType = v.OrganizationType //行政组织类型"` sendCont.Abbreviation = v.Abbreviation //行政组织简称"` sendCont.Time = v.Time //创建时间"` sendCont.State = v.State //状态(1:启用;2:禁用;3:删除)"` sendCont.WechatOrganizationId = v.WechatOrganizationId //20微信组织架构对照码"` sendCont.SuperiorSun = v.SuperiorSun //级联ID"` sendCont.Schoole = v.Schoole //原知行学院对照码"` sendCont.KingdeeId = v.KingdeeId //金蝶对照ID"` sendCont.IsPower = v.IsPower // 是否为实权部门"` sendCont.Sort = v.Sort //是否为实权部门"` sendCont.IsChild = judgeIsChild(v.Id) sendList = append(sendList, sendCont) } sendOrgList := overallhandle.MapOut() sendOrgList["list"] = sendList userKey := c.Request.Header.Get("user-key") myCont, myErr := overallhandle.GetCreetUserCont(userKey) if myErr == nil { sendOrgList["current"] = myCont.Company } else { sendOrgList["current"] = 309 } var parenAry overallhandle.AllSunList[int64] parenAry.SunList = append(parenAry.SunList, requestData.Id) parenAry.GetAllParentOrg(requestData.Id, 2) fmt.Printf("父级--->%v\n", parenAry.SunList) var orgAndPeopleListTitleCont empowerSynces //启用协程结构体 synProes.Add(1) go orgAndPeopleListTitleCont.BasisOrgDirectOrgIng(parenAry.SunList) //获取行政组织 synProes.Wait() orgTitleList := orgAndPeopleListTitleCont.readDataLock() sort.SliceStable(orgTitleList, func(i, j int) bool { return orgTitleList[i].Sort < orgTitleList[j].Sort }) var tabval []TitleDepartmentsCont if len(parenAry.SunList) > 0 && requestData.Id != 313 { for _, ov := range orgTitleList { var titleDepartCont TitleDepartmentsCont titleDepartCont.DepartmentId = ov.Id //行政组织ID titleDepartCont.Id = ov.Id //行政组织ID titleDepartCont.DepartmentKey = ov.Number //行政组织编码 titleDepartCont.DepartmentName = ov.Name //行政组织名称 titleDepartCont.ParentId = ov.Superior //上级ID titleDepartCont.DepartmentNames = ov.Name //行政组织别名 tabval = append(tabval, titleDepartCont) } } sendOrgList["tabval"] = tabval overallhandle.Result(0, sendOrgList, c) } // 判断是否有子集 func judgeIsChild(orgId int64) (isTrue bool) { isTrue = false var countid int64 err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Where("`state` = 1 AND `superior` = ?", orgId).Count(&countid).Error if err != nil { return } if countid > 0 { isTrue = true } return }