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.
554 lines
14 KiB
554 lines
14 KiB
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
|
|
}
|
|
|