From 330887f63db9df8ad5f58e60e15d2c7ab93bdfcb Mon Sep 17 00:00:00 2001 From: herenshan112 Date: Sat, 18 Mar 2023 09:30:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B1=8F=E8=94=BD=E4=BA=BA?= =?UTF-8?q?=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../administrativeorganization/govcont.go | 6 +- .../administrativeorganization/orgpost.go | 183 ++++++++++++++++++ .../administrativeorganization/type.go | 31 +++ api/version1/personnelapi/kingdeenew.go | 55 ++++-- api/version1/personnelapi/types.go | 2 + apirouter/organization/organization_group.go | 2 + models/administrative_organization.go | 1 + overall/overallhandle/overall_handle.go | 63 +++++- 8 files changed, 320 insertions(+), 23 deletions(-) create mode 100644 api/version1/administrativeorganization/orgpost.go diff --git a/api/version1/administrativeorganization/govcont.go b/api/version1/administrativeorganization/govcont.go index 4ea585c..4166454 100644 --- a/api/version1/administrativeorganization/govcont.go +++ b/api/version1/administrativeorganization/govcont.go @@ -411,12 +411,12 @@ func (o *OrganizationApi) GetCompanyDeparment(c *gin.Context) { if requestData.Id == 0 && requestData.IdStr == "" { requestData.Id = 0 } - fmt.Printf("获取值----2------->%v\n", requestData) + // 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) + // fmt.Printf("获取值----3------->%v\n", requestData) orgId := getOrgIdList(requestData.Id) if len(orgId) < 1 { overallhandle.Result(101, orgId, c, "没有查询到信息!") @@ -430,7 +430,7 @@ func (o *OrganizationApi) GetCompanyDeparment(c *gin.Context) { } } var orgList []models.AdministrativeOrganization - err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Where("`state` = 1 AND `id` IN ?", orgId).Find(&orgList).Error + 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 diff --git a/api/version1/administrativeorganization/orgpost.go b/api/version1/administrativeorganization/orgpost.go new file mode 100644 index 0000000..69e21b0 --- /dev/null +++ b/api/version1/administrativeorganization/orgpost.go @@ -0,0 +1,183 @@ +package administrativeorganization + +import ( + "hr_server/models" + "hr_server/overall" + "hr_server/overall/overallhandle" + "sort" + + "strconv" + + "github.com/gin-gonic/gin" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2023-02-24 09:36:28 +@ 功能: 获取行政组织与岗位树 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (o *OrganizationApi) GetOrgAndPostThree(c *gin.Context) { + var requestData OrgAndMAnThreeType + c.ShouldBindJSON(&requestData) + //获取行政组织 + var orgList []models.OrgContType + gormDb := overall.CONSTANT_DB_HR.Where("`state` = ? ", 1) + if requestData.All == 0 { + // requestData.Id = "309" + gormDb = gormDb.Where("`id` NOT IN ?", []int{312, 293, 305, 306, 307}) + } + if requestData.Level != 0 { + gormDb = gormDb.Where("`level` <= ?", requestData.Level) + } + // departmentId := overallhandle.RecursionOrgLeveEs(282, 282, 3) + // overallhandle.Result(2555646, departmentId, c) + // return + + 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 + } + var contList []OutPutOrgAndPost + var syncOrgToPost OrgAndPostSync + for i, v := range orgList { + var sendCont OutPutOrgAndPost + sendCont.Id = strconv.FormatInt(v.Id, 10) + sendCont.Number = v.Number + sendCont.Name = v.Name + sendCont.Superior = v.Superior + sendCont.Attribute = 1 + sendCont.Sort = 1 + sendCont.OrgId = strconv.FormatInt(v.Id, 10) + if (i+1)%pageSize == 0 { + contList = append(contList, sendCont) + synProes.Add(1) + go syncOrgToPost.GetPostInfoList(contList) + contList = []OutPutOrgAndPost{} + } else { + contList = append(contList, sendCont) + } + } + if len(contList) > 0 { //判断盈余分组数据 + synProes.Add(1) + go syncOrgToPost.GetPostInfoList(contList) + } + synProes.Wait() + allOrgAndPostContList := syncOrgToPost.readDataLock() + sort.Slice(allOrgAndPostContList, func(i, j int) bool { + return allOrgAndPostContList[i].Sort < allOrgAndPostContList[j].Sort + }) + sort.Slice(allOrgAndPostContList, func(i, j int) bool { + return allOrgAndPostContList[i].Superior < allOrgAndPostContList[j].Superior + }) + var allNumber []string + for _, v := range allOrgAndPostContList { + allNumber = append(allNumber, v.Number) + } + sendList := OrgAndPostThreeList(requestData.Id, allOrgAndPostContList) + outputDataAry := overallhandle.MapOut() + outputDataAry["count"] = len(allOrgAndPostContList) + outputDataAry["list"] = sendList + outputDataAry["allnumber"] = allNumber + overallhandle.Result(0, outputDataAry, c) +} + +// 合成树形结构 +func OrgAndPostThreeList(superiorId string, contList []OutPutOrgAndPost) *[]OutPutOrgAndPostLoop { + three := []OutPutOrgAndPostLoop{} + for _, v := range contList { + supIdStr := strconv.FormatInt(v.Superior, 10) + if superiorId == supIdStr { + child := OrgAndPostThreeList(v.OrgId, contList) + var node OutPutOrgAndPostLoop + node.Id = v.Id + node.Number = v.Number + node.Name = v.Name + node.Superior = v.Superior + node.Attribute = v.Attribute + node.Sort = v.Sort + node.OrgId = v.OrgId + node.OrgName = v.OrgName + node.DepartId = v.DepartId + node.DepartName = v.DepartName + node.Child = child + three = append(three, node) + } + } + return &three +} + +// 获取岗位列表 +func (o *OrgAndPostSync) GetPostInfoList(contList []OutPutOrgAndPost) { + o.mutext.Lock() + defer o.mutext.Unlock() + + var orgId []string + for _, v := range contList { + if overallhandle.IsInTrue[string](v.Id, orgId) == false { + orgId = append(orgId, v.Id) + o.orgAndPostList = append(o.orgAndPostList, v) + } + } + if len(orgId) > 0 { + var postContList []models.Position + err := overall.CONSTANT_DB_HR.Model(&models.Position{}).Select("`id`,`number`,`name`,`administrative_organization`,`superior`").Where("`state` = 1 AND `administrative_organization` IN ?", orgId).Find(&postContList).Error + if err == nil { + for _, v := range postContList { + + // _, _, departmentId, _, _ := overallhandle.GetOrgStructure(v.AdministrativeOrganization) + departmentId := overallhandle.RecursionOrgLeveEs(v.AdministrativeOrganization, v.AdministrativeOrganization, 3) + var departCont models.AdministrativeOrganization + departCont.GetCont(map[string]interface{}{"`id`": departmentId}, "`name`") + + var sendCont OutPutOrgAndPost + sendCont.Id = strconv.FormatInt(v.Id, 10) + sendCont.Number = v.Number + sendCont.Name = v.Name + sendCont.Superior = v.AdministrativeOrganization + sendCont.Attribute = 2 + sendCont.Sort = 2 + sendCont.OrgId = "-1" + sendCont.DepartId = strconv.FormatInt(departmentId, 10) + sendCont.DepartName = departCont.Name + if departmentId == v.AdministrativeOrganization { + sendCont.OrgName = departCont.Name + } else { + var orgCont models.AdministrativeOrganization + orgCont.GetCont(map[string]interface{}{"`id`": v.AdministrativeOrganization}, "`name`") + sendCont.OrgName = orgCont.Name + } + + o.orgAndPostList = append(o.orgAndPostList, sendCont) + } + } + } + synProes.Done() +} diff --git a/api/version1/administrativeorganization/type.go b/api/version1/administrativeorganization/type.go index f95f5c3..f4a66fd 100644 --- a/api/version1/administrativeorganization/type.go +++ b/api/version1/administrativeorganization/type.go @@ -363,3 +363,34 @@ type TitleDepartmentsCont struct { type OrgIdList struct { OrgId []int64 `json:"orgid"` } + +// 输出行政组织与岗位结构体 +type OutPutOrgAndPost struct { + Id string `json:"id"` //ID + Number string `json:"number"` //编号 + Name string `json:"name"` //名称 + Superior int64 `json:"superior"` //上级 + OrgId string `json:"orgid"` //行政组织Id + Attribute int `json:"attribute"` //属性 1:行政组织;2:岗位i + Sort int `json:"sort"` //排序 + OrgName string `json:"orgname"` //行政组织名称 + DepartId string `json:"departid"` //主责部门 + DepartName string `json:"departname"` //主责部门名称 +} + +// 循环输出 +type OutPutOrgAndPostLoop struct { + OutPutOrgAndPost + Child *[]OutPutOrgAndPostLoop `json:"child"` //下级 +} + +type OrgAndPostSync struct { + orgAndPostList []OutPutOrgAndPost + mutext sync.RWMutex +} + +func (o *OrgAndPostSync) readDataLock() []OutPutOrgAndPost { + o.mutext.RLock() + defer o.mutext.RUnlock() + return o.orgAndPostList +} diff --git a/api/version1/personnelapi/kingdeenew.go b/api/version1/personnelapi/kingdeenew.go index 9162369..26a2b35 100644 --- a/api/version1/personnelapi/kingdeenew.go +++ b/api/version1/personnelapi/kingdeenew.go @@ -35,26 +35,32 @@ func (s *StaffApi) NewKingdee(c *gin.Context) { overallhandle.WriteLog("i", "KingDee对接数据!", saveKingDee) // kingdeeErr := overall.CONSTANT_DB_HR.Create(&saveKingDee).Error // overallhandle.WriteLog("w", "KingDee写入数据库状态!", kingdeeErr) - var manContent models.PersonArchives - manErr := manContent.GetCont(map[string]interface{}{"`number`": requestData.Number}) - if manErr == nil { - //已经存在!进行变动操作 - manErr = eidtAddManContJinDie(manContent, requestData) - overallhandle.WriteLog("i", "已经存在!进行变动操作!", saveKingDee) + if requestData.Number != "200019" && requestData.Number != "200008" { + var manContent models.PersonArchives + manErr := manContent.GetCont(map[string]interface{}{"`number`": requestData.Number}) + if manErr == nil { + //已经存在!进行变动操作 + manErr = eidtAddManContJinDie(manContent, requestData) + overallhandle.WriteLog("i", "已经存在!进行变动操作!", saveKingDee) + } else { + //不存在!进行新增操作 + var oldSchool models.WorkMan + oldSchool.GetCont(map[string]interface{}{"wm_number": requestData.Number}) + manErr = newAddManContJinDie(oldSchool, requestData) + overallhandle.WriteLog("i", "不存在!进行新增操作!", manErr, saveKingDee) + } + if manErr != nil { + overallhandle.Result(104, manErr, c) + overallhandle.WriteLog("e", "数据处理失败!", manErr, saveKingDee) + return + } + overallhandle.WriteLog("t", "执行行人员信息对接对照结束!") + overallhandle.Result(0, manErr, c) } else { - //不存在!进行新增操作 - var oldSchool models.WorkMan - oldSchool.GetCont(map[string]interface{}{"wm_number": requestData.Number}) - manErr = newAddManContJinDie(oldSchool, requestData) - overallhandle.WriteLog("i", "不存在!进行新增操作!", manErr, saveKingDee) - } - if manErr != nil { - overallhandle.Result(104, manErr, c) - overallhandle.WriteLog("e", "数据处理失败!", manErr, saveKingDee) - return + overallhandle.WriteLog("t", "特殊人员信息对接对照结束!") + overallhandle.Result(0, nil, c) } - overallhandle.WriteLog("t", "执行行人员信息对接对照结束!") - overallhandle.Result(0, manErr, c) + } /* @@ -90,6 +96,14 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe } + if manCont.PersonInCharge == 0 { + manCont.PersonInCharge = 2 + } + + if manCont.PersonInCharge != perArcInfo.PersonInCharge && perArcInfo.PersonInCharge != 1 { + eidtManCont["`person_in_charge`"] = manCont.PersonInCharge + } + if manCont.HireType != "" { hireTypes, hireTypesErr := overallhandle.StringToInt(manCont.HireType) if hireTypesErr != nil { @@ -315,7 +329,10 @@ func newAddManContJinDie(oldSchool models.WorkMan, manCont addKingdeePersonneles // manMainCont.HireClass = hireTypesbd manMainCont.HireClass = hireTypeToInt(manCont.HireType) manMainCont.HireClassName = manCont.HireType - + if manCont.PersonInCharge == 0 { + manCont.PersonInCharge = 2 + } + manMainCont.PersonInCharge = manCont.PersonInCharge // empType, empTypeErr := overallhandle.StringToInt(manCont.EmpType) // if empTypeErr != nil { // empType = 1 diff --git a/api/version1/personnelapi/types.go b/api/version1/personnelapi/types.go index c6a6076..1638b45 100644 --- a/api/version1/personnelapi/types.go +++ b/api/version1/personnelapi/types.go @@ -86,6 +86,8 @@ type addKingdeePersonneles struct { WorkHistoryList []workHistoryAry `json:"workhistorylist"` //工作履历 //集团内工作履历 InsideWorkHistory []insideHistoryer `json:"insideworkhistory"` //工作履历 + + PersonInCharge int `json:"personInCharge"` //部门负责人(1:是;2:否) } //家庭成员 diff --git a/apirouter/organization/organization_group.go b/apirouter/organization/organization_group.go index 53df9fa..5e34924 100644 --- a/apirouter/organization/organization_group.go +++ b/apirouter/organization/organization_group.go @@ -45,6 +45,8 @@ func (o *OrganizationRoute) InitRouterGroup(route *gin.RouterGroup) { apiRouter.POST("govthreeaboutman", apiHandle.GovThreeAboutMan) //行政组织树及相关人员 apiRouter.POST("search_org_people", apiHandle.SearchOrgAndPeople) //角色组织与人员搜索列表 + apiRouter.POST("get_organdpost_three", apiHandle.GetOrgAndPostThree) //获取行政组织与岗位树 + apiRouter.POST("get_org_everyone_people", apiHandle.GetOrgAndEveryOnePeople) //行政组织树及相关人员(新版) apiRouter.POST("getcompanydeparment", apiHandle.GetCompanyDeparment) //获取当前行政组织的所有主行政部门 diff --git a/models/administrative_organization.go b/models/administrative_organization.go index a6eeb9f..9f053e9 100644 --- a/models/administrative_organization.go +++ b/models/administrative_organization.go @@ -20,6 +20,7 @@ type AdministrativeOrganization struct { Schoole int64 `json:"schoole" gorm:"column:schoole;type:bigint(20) unsigned;default:0;not null;comment:原知行学院对照码"` KingdeeId string `json:"kingdeeid" gorm:"column:kingdeeid;type:varchar(255) unsigned;default:'';comment:金蝶对照ID"` IsPower int `json:"ispower" gorm:"column:ispower;type:int(1) unsigned;default:2;not null;comment:是否为实权部门"` + Sort int `json:"sort" gorm:"column:sort;type:int(6) unsigned;default:100;not null;comment:是否为实权部门"` } func (AdministrativeOrganization *AdministrativeOrganization) TableName() string { diff --git a/overall/overallhandle/overall_handle.go b/overall/overallhandle/overall_handle.go index 6a91fd4..45d6795 100644 --- a/overall/overallhandle/overall_handle.go +++ b/overall/overallhandle/overall_handle.go @@ -288,6 +288,39 @@ func GetGroupOrDepartPower(parentId int64, departId ...int64) int64 { return orgCont.Id } +// 获取集团或第一实权部门 +func GetGroupOrDepartPoweres(parentId int64, departId ...int64) int64 { + var orgCont models.AdministrativeOrganization + err := orgCont.GetCont(map[string]interface{}{"id": parentId}, "id", "organization_type", "superior", "ispower") + if err != nil { + return parentId + } + // jsonCCC, _ := json.Marshal(orgCont) + // fmt.Printf("orgCont------->%v\n", string(jsonCCC)) + if len(departId) > 0 { + if orgCont.IsPower == 1 { + // fmt.Printf("orgCont---1---->%v---->%v\n", string(jsonCCC), orgCont.Id) + return orgCont.Id + } + return GetGroupOrDepartPoweres(orgCont.Superior, 1) + } else { + if orgCont.OrganizationType <= 3 { + // fmt.Printf("orgCont---2---->%v\n", string(jsonCCC)) + return orgCont.Id + } + return GetGroupOrDepartPoweres(orgCont.Superior) + } + // if len(departId) > 0 { + // fmt.Printf("orgCont----4--->%v\n", orgCont.Superior) + // GetGroupOrDepartPower(orgCont.Superior, 1) + // } else { + // fmt.Printf("orgCont----5--->%v\n", orgCont.Superior) + // GetGroupOrDepartPower(orgCont.Superior) + // } + // fmt.Printf("orgCont----3--->%v\n", string(jsonCCC)) + return orgCont.Id +} + // ZeroFillByStr // @Description: 字符串补零 // @param str :需要操作的字符串 @@ -699,7 +732,12 @@ func RecursionOrgLeve(superior int64, leve int64) (groupId int64) { return } if orgMap.Level <= leve { - groupId = orgMap.Id + if orgMap.Level == leve { + groupId = superior + } else { + groupId = orgMap.Id + } + return } else { groupId = RecursionOrgLeve(orgMap.Superior, leve) @@ -707,6 +745,29 @@ func RecursionOrgLeve(superior int64, leve int64) (groupId int64) { return } +func RecursionOrgLeveEs(oldId, superior, leve int64) (groupId int64) { + if leve == 0 { + leve = 1 + } + var orgMap models.OrgContType + err := orgMap.GetCont(map[string]interface{}{"`id`": superior, "`state`": 1}, "`id`", "`superior`", "`level`") + if err != nil { + return + } + if orgMap.Level <= leve { + if orgMap.Level == leve { + groupId = oldId + } else { + groupId = orgMap.Id + } + + return + } else { + groupId = RecursionOrgLeveEs(orgMap.Id, orgMap.Superior, leve) + } + return +} + // 获取集团、公司、部门、二级部门、工段 func GetOrgStructure(orgId int64) (groupId, companyId, departmentId, sunDepartId, workShopId int64) { var orgContTypeInfo models.OrgContType