package personnelapi import ( "hr_server/models" "hr_server/models/hrmodels" "hr_server/models/workgroup" "hr_server/overall" "hr_server/overall/overallhandle" "sort" "strconv" "strings" "github.com/gin-gonic/gin" ) /* * @ 作者: 秦东 @ 时间: 2024-05-24 13:55:03 @ 功能: 根据行政组织ID获取当前行政组织人员及子行政组织 @ 参数 # @ 返回值 # @ 方法原型 # */ func (s *StaffApi) GainSunOrgAndUser(c *gin.Context) { var requestData overallhandle.ConstId err := c.ShouldBindJSON(&requestData) if err != nil { requestData.Id = "313" } if requestData.Id == "" { requestData.Id = "313" } var sendInfo OrgGainPeopel orgIdInt, _ := strconv.ParseInt(requestData.Id, 10, 64) synPro.Add(1) go sendInfo.GainAllFatherOrg(orgIdInt) synPro.Add(1) go sendInfo.GainOrgPeopel(orgIdInt) synPro.Add(1) go sendInfo.GainOrgSunOrgList(orgIdInt) synPro.Wait() var sendData SendOrgGainPeopel sendData.OrgList = sendInfo.OrgList sendData.OrgUserList = append(sendData.OrgUserList, sendInfo.SunOrgList...) sendData.OrgUserList = append(sendData.OrgUserList, sendInfo.UserList...) overallhandle.Result(0, sendData, c) } /* * @ 作者: 秦东 @ 时间: 2024-05-24 14:33:28 @ 功能: 获取当前行政组织直接子级行政组织 @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrgGainPeopel) GainOrgSunOrgList(orgId int64) { defer synPro.Done() var orgList []models.AdministrativeOrganization overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`,`name`").Where("`state` = 1 AND `superior` = ?", orgId).Find(&orgList) if len(orgList) > 0 { for _, v := range orgList { var user UserOrgRole user.Id = strconv.FormatInt(v.Id, 10) user.Title = v.Name user.Img = "" user.IsPick = 2 user.Types = 2 o.SunOrgList = append(o.SunOrgList, user) } } } /* * @ 作者: 秦东 @ 时间: 2024-05-24 14:23:46 @ 功能: 获取当前行政组织下得人员信息 @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrgGainPeopel) GainOrgPeopel(orgId int64) { defer synPro.Done() var prople []models.PersonArchives err := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`key`,`number`,`name`,`icon`,`admin_org`,`icon_photo`").Where("`admin_org` = ? AND `emp_type` BETWEEN ? AND ? ", orgId, 1, 10).Find(&prople).Error if err == nil && len(prople) > 0 { for _, v := range prople { var user UserOrgRole user.Id = strconv.FormatInt(v.Key, 10) user.Title = v.Name user.Img = v.Icon if v.IconPhoto != "" { user.Img = v.IconPhoto } user.IsPick = 2 user.Types = 1 o.UserList = append(o.UserList, user) } } } /* * @ 作者: 秦东 @ 时间: 2024-05-24 14:04:20 @ 功能: 获取所有父级行政组织 @ 参数 #orgId 行政组织ID @ 返回值 # @ 方法原型 # */ func (o *OrgGainPeopel) GainAllFatherOrg(orgId int64) { defer synPro.Done() var sunAry overallhandle.AllSunList[int64] sunAry.GetAllParentOrg(orgId, 2) sunAry.SunList = append(sunAry.SunList, orgId) if len(sunAry.SunList) > 0 { var orgList []hrmodels.OrgCont err := overall.CONSTANT_DB_HR.Model(&hrmodels.OrgCont{}).Select("`id`,`name`,`level`").Where("`id` IN ?", sunAry.SunList).Find(&orgList).Error if err == nil { sort.Slice(orgList, func(i, j int) bool { return orgList[i].Level < orgList[j].Level }) for _, v := range orgList { var orgInfo OrgCrumb orgInfo.Id = strconv.FormatInt(v.Id, 10) orgInfo.Title = v.Name o.OrgList = append(o.OrgList, orgInfo) } } } } /* * @ 作者: 秦东 @ 时间: 2024-05-27 08:33:09 @ 功能: 搜索行政组织及人员 @ 参数 # @ 返回值 # @ 方法原型 # */ func (s *StaffApi) SearchOrgUser(c *gin.Context) { var requestData overallhandle.NameOverall err := c.ShouldBindJSON(&requestData) var sendData SendOrgGainPeopel if err != nil { overallhandle.Result(0, sendData, c) return } if requestData.Name == "" { overallhandle.Result(0, sendData, c) return } var sendInfo OrgGainPeopel synPro.Add(1) go sendInfo.SearchOrgCont(requestData.Name) synPro.Add(1) go sendInfo.SearchPeopleCont(requestData.Name) synPro.Wait() sendData.OrgUserList = append(sendData.OrgUserList, sendInfo.SunOrgList...) sendData.OrgUserList = append(sendData.OrgUserList, sendInfo.UserList...) overallhandle.Result(0, sendData, c) } /* * @ 作者: 秦东 @ 时间: 2024-05-27 08:51:49 @ 功能: 搜索人员 @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrgGainPeopel) SearchPeopleCont(name string) { defer synPro.Done() var prople []models.PersonArchives err := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`key`,`number`,`name`,`icon`,`admin_org`,`icon_photo`").Where("(`name` Like ? OR `number` Like ?) AND `emp_type` BETWEEN ? AND ? ", "%"+name+"%", "%"+name+"%", 1, 10).Find(&prople).Error if err == nil && len(prople) > 0 { for _, v := range prople { var user UserOrgRole user.Id = strconv.FormatInt(v.Key, 10) user.Title = v.Name user.Img = v.Icon if v.IconPhoto != "" { user.Img = v.IconPhoto } user.IsPick = 2 user.Types = 1 o.UserList = append(o.UserList, user) } } } /* * @ 作者: 秦东 @ 时间: 2024-05-27 08:40:51 @ 功能: 搜索行政组织名称 @ 参数 #name 行政组织名称 @ 返回值 # @ 方法原型 # */ func (o *OrgGainPeopel) SearchOrgCont(name string) { defer synPro.Done() var orgList []hrmodels.OrgCont overall.CONSTANT_DB_HR.Model(&hrmodels.OrgCont{}).Select("`id`,`name`").Where("`state` = 1 AND level > 3 AND `name` LIKE ?", "%"+name+"%").Find(&orgList) if len(orgList) > 0 { for _, v := range orgList { var user UserOrgRole user.Id = strconv.FormatInt(v.Id, 10) user.Title = v.Name user.Img = "" user.IsPick = 2 user.Types = 2 o.SunOrgList = append(o.SunOrgList, user) } } } /* * @ 作者: 秦东 @ 时间: 2025-04-03 10:36:25 @ 功能: 人员列表 @ 参数 # @ 返回值 # @ 方法原型 # */ func (s *StaffApi) PeopleList(c *gin.Context) { var requestData peopleList c.ShouldBindJSON(&requestData) if requestData.Page < 0 { requestData.Page = 1 } if requestData.PageSize < 0 { requestData.PageSize = 10 } gormDb := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`").Where("`number` NOT LIKE ?", "%W%") if requestData.Number != "" { //工号 gormDb = gormDb.Where("number LIKE ?", "%"+requestData.Number+"%") } if requestData.Name != "" { //姓名 gormDb = gormDb.Where("name LIKE ?", "%"+requestData.Name+"%") } if requestData.HireClass != 0 { //雇佣类型 gormDb = gormDb.Where("hire_class = ?", requestData.HireClass) } if requestData.Company != 0 { //所在公司 gormDb = gormDb.Where("company = ?", requestData.Company) } if requestData.Position != 0 { //职位 gormDb = gormDb.Where("position = ?", requestData.Position) } if len(requestData.EmpType) > 0 { //用工关系 gormDb = gormDb.Where("emp_type IN ?", requestData.EmpType) } if requestData.Role != "" { //角色 gormDb = gormDb.Where("FIND_IN_SET(?,`role`)", requestData.Role) } var banZu []workgroup.TeamsRules var ruleTypeId int64 var ruleTypeName string //查询行政组织 if requestData.AdminOrg != 0 { var sunAry overallhandle.AllSunList[int64] sunAry.GetAllSunOrg(requestData.AdminOrg) sunAry.SunList = append(sunAry.SunList, requestData.AdminOrg) //获取本行政组织及子行政组织 gormDb = gormDb.Where("admin_org IN ?", sunAry.SunList) //获取本组织下的数据 if requestData.Days != "" { //判断有无日期 menuCont, _, err := CureeRunRules(requestData.AdminOrg) //确定当前行政组织用哪一个轮询规则 if err != nil { overallhandle.Result(200, err, c, "此行政组织还未设定班组轮询规则!") return } banZu, err = menuCont.CountOrgTeamsIsDay(requestData.Days) //获取轮询班组 if err == nil { var dayTeamsId []int64 //获取当天有人员上班的班组 for _, v := range banZu { if v.CycleWorkTime != 0 && !overallhandle.IsInTrue(v.TeamsId, dayTeamsId) { dayTeamsId = append(dayTeamsId, v.TeamsId) } ruleTypeId = v.RuleTypeId ruleTypeName = v.RuleTypeName } //判断是否按班组查询 if requestData.Teamid != 0 { if overallhandle.IsInTrue(requestData.Teamid, dayTeamsId) { gormDb = gormDb.Where("teamid = ?", requestData.Teamid) } else { overallhandle.Result(200, err, c, "当天此行政组织内的此班组处于休息状态!") return } } else { if len(dayTeamsId) > 0 { gormDb = gormDb.Where("teamid IN ?", dayTeamsId) } } } else { if requestData.Teamid != 0 { gormDb = gormDb.Where("teamid = ?", requestData.Teamid) } } } else { if requestData.Teamid != 0 { gormDb = gormDb.Where("teamid = ?", requestData.Teamid) } } } else { if requestData.Teamid != 0 { //班组 gormDb = gormDb.Where("teamid = ?", requestData.Teamid) } } //查询共多少数据 var total int64 totalErr := gormDb.Count(&total).Error if totalErr != nil { total = 0 } var idAry []int64 gormDbs := overallhandle.PageTurningSettings(gormDb, requestData.Page, requestData.PageSize) err := gormDbs.Find(&idAry).Error var positionAry []peopleManOutList if err != nil || len(idAry) < 1 { overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c) return } var manContList []models.ManCont err = overall.CONSTANT_DB_HR.Where("`id` IN ?", idAry).Find(&manContList).Error if err != nil || len(manContList) < 1 { overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c) return } // fmt.Printf("banzu--->%v\n\n\n", banZu) // return //计算人员属性 var guoDuMan []models.ManCont var peopelList ManTableList for i, v := range manContList { if (i+1)%50 == 0 { synPro.Add(1) go peopelList.SnycChundSub(guoDuMan, requestData.AdminOrg, requestData.Days) guoDuMan = []models.ManCont{} } else { guoDuMan = append(guoDuMan, v) } } if len(guoDuMan) > 0 { synPro.Add(1) go peopelList.SnycChundSub(guoDuMan, requestData.AdminOrg, requestData.Days) guoDuMan = []models.ManCont{} } synPro.Wait() positionAry = peopelList.List sendExpand := overallhandle.MapOut() var sendRuleInfo DaysTeamsRuler if len(banZu) > 0 { sendRuleInfo.RuleTypeId = strconv.FormatInt(ruleTypeId, 10) sendRuleInfo.RuleTypeName = ruleTypeName // var workTimePer []workgroup.WorkingTimePeriod // overall.CONSTANT_DB_HR.Where("`type_id` = ?", ruleTypeId).Find(&workTimePer) // var teamRuleMap []DaysTeamsRulerInfo // if len(workTimePer) > 0 { // for _, v := range workTimePer { // for _, bv := range banZu { // if v.Id == bv.CycleWorkTime { // var teamRuleInfo DaysTeamsRulerInfo // teamRuleInfo.TeamsId = strconv.FormatInt(bv.TeamsId, 10) //生产班组ID // teamRuleInfo.TeamsName = bv.TeamsName //生产班组名称 // teamRuleInfo.RuleId = strconv.FormatInt(v.Id, 10) //规则ID // teamRuleInfo.RuleName = v.Name //规则名称 // teamRuleInfo.StartTime = v.StartTime //开始时间 // teamRuleInfo.EndTime = v.EndTime //结束时间 // teamRuleMap = append(teamRuleMap, teamRuleInfo) // } // } // } // } var teamRuleMap []DaysTeamsRulerInfo for _, bv := range banZu { ruleSetUp := GetRuleSetup(bv.CycleWorkTime) var teamRuleInfo DaysTeamsRulerInfo teamRuleInfo.TeamsId = strconv.FormatInt(bv.TeamsId, 10) //生产班组ID teamRuleInfo.TeamsName = bv.TeamsName //生产班组名称 teamRuleInfo.RuleId = strconv.FormatInt(ruleSetUp.Id, 10) //规则ID teamRuleInfo.RuleName = ruleSetUp.Name //规则名称 teamRuleInfo.StartTime = ruleSetUp.StartTime //开始时间 teamRuleInfo.EndTime = ruleSetUp.EndTime //结束时间 teamRuleInfo.List = CurrentTreamPeopel(bv.TeamsId, positionAry) teamRuleMap = append(teamRuleMap, teamRuleInfo) } sort.Slice(teamRuleMap, func(i, j int) bool { return teamRuleMap[i].StartTime < teamRuleMap[j].StartTime }) sendRuleInfo.List = teamRuleMap } sendExpand["ruler"] = sendRuleInfo overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c, sendExpand) } /* * @ 作者: 秦东 @ 时间: 2025-04-03 14:15:29 @ 功能: 协程处理事务 */ func (m *ManTableList) SnycChundSub(list []models.ManCont, orgId int64, days string) { defer synPro.Done() for _, v := range list { //计算调班人员数据 if days != "" { v = Shiftdjustment(days, v) // fmt.Printf("\n\n\n\n结果:%v\n\n\n\n", v) } var staffInfo peopleManOutList staffInfo.ManCont = v var getSpur models.Position getWhe := overallhandle.MapOut() if v.Position != 0 { getWhe["id"] = v.Position getSpur.GetCont(getWhe, "name", "person_in_charge") } staffInfo.PositionName = getSpur.Name staffInfo.KeyStr = strconv.FormatInt(v.Key, 10) //公司 if v.Company != 0 { staffInfo.CompanyName = OrgContOut(v.Company) } //主部门 if v.MainDeparment != 0 { staffInfo.MainDeparmentName = OrgContOut(v.MainDeparment) } //二级著部门 if v.SunMainDeparment != 0 { staffInfo.SunMainDeparmentName = OrgContOut(v.SunMainDeparment) } var orgContTypeCont models.OrgContType orgContTypeCont.GetCont(map[string]interface{}{"`id`": v.AdminOrg}, "`name`", "`level`") if orgContTypeCont.Level >= 6 { staffInfo.WorkPostName = orgContTypeCont.Name } staffInfo.PersonInCharge = 2 if v.PersonInCharge == 1 { orgResList := strings.Split(v.ResponsibleDepartment, ",") if len(orgResList) > 0 { orgIdStr := strconv.FormatInt(orgId, 10) if overallhandle.IsInTrue[string](orgIdStr, orgResList) == true { staffInfo.PersonInCharge = 1 } } } sendMap, _ := GetUesrOffice(v.Key) staffInfo.OfficeList = sendMap m.List = append(m.List, staffInfo) } } // 获取当前班组的人员 func CurrentTreamPeopel(teamsId int64, manList []peopleManOutList) (teamsManList []string) { for _, v := range manList { if v.TeamId == teamsId { teamsManList = append(teamsManList, v.Number) } } return } // 获取规则设定 func GetRuleSetup(id int64) (periodInfo workgroup.WorkingTimePeriod) { overall.CONSTANT_DB_HR.Where("`id` = ?", id).First(&periodInfo) return } // 输出行政组织信息 func OrgContOut(orgId int64) string { var getSpurDepart models.AdministrativeOrganization getWheDepart := overallhandle.MapOut() getWheDepart["id"] = orgId getSpurDepart.GetCont(getWheDepart, "name") return getSpurDepart.Name }