diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/hr_server.iml b/.idea/hr_server.iml new file mode 100644 index 0000000..5e764c4 --- /dev/null +++ b/.idea/hr_server.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..d8e9538 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/api/version1/administrativeorganization/duties.go b/api/version1/administrativeorganization/duties.go index 73020a1..496db78 100644 --- a/api/version1/administrativeorganization/duties.go +++ b/api/version1/administrativeorganization/duties.go @@ -45,10 +45,17 @@ func (o *OrganizationApi) DutiesList(c *gin.Context) { if totalErr != nil { total = 0 } - errGorm := gormDb.Order("`weight` ASC").Limit(requestData.PageSize).Offset(overallhandle.LimitPage(requestData.Page, requestData.PageSize)).Find(&dutiesList).Error + errGorm := gormDb.Order("`weight` ASC").Order("`id` DESC").Limit(requestData.PageSize).Offset(overallhandle.LimitPage(requestData.Page, requestData.PageSize)).Find(&dutiesList).Error if errGorm != nil { overallhandle.Result(105, errGorm, c) } else { + for i, v := range dutiesList { + if v.State == 1 { + dutiesList[i].Status = true + } else { + dutiesList[i].Status = false + } + } overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(dutiesList)), dutiesList, c) } } @@ -157,14 +164,11 @@ func (o *OrganizationApi) EiteDutiesInfo(c *gin.Context) { overallhandle.Result(100, err, c) return } - if requestData.Id == 0 && requestData.IdStr == "" { + if requestData.Id == 0 { overallhandle.Result(101, err, c, "职务分类Id不能为空!") return } - if requestData.IdStr != "" { - idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) - requestData.Id = idInt64 - } + whereData := overallhandle.MapOut() whereData["id"] = requestData.Id //判断职务是否存在 @@ -259,3 +263,66 @@ func (o *OrganizationApi) EiteDutiesStatOrDel(c *gin.Context) { } } } + +/* +* +@ 作者: 秦东 +@ 时间: 2023-06-09 09:04:32 +@ 功能: 编辑状态或删除职务信息 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (o *OrganizationApi) EditOrDelDutiesStatus(c *gin.Context) { + var requestData DutiesEditOrDel + err := c.ShouldBindJSON(&requestData) + if err != nil { + overallhandle.Result(100, err, c) + return + } + if len(requestData.Id) < 1 { + overallhandle.Result(101, err, c) + return + } + if requestData.Status == 0 { + requestData.Status = 1 + } + if requestData.IsTrue == 0 { + requestData.IsTrue = 2 + } + var inUseCont int64 + overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`").Where("`job_id` IN ?", requestData.Id).Count(&inUseCont) + editDutiesInfo := overallhandle.MapOut() + editDutiesInfo["`time`"] = time.Now().Unix() + editDutiesInfo["`state`"] = requestData.Status + if inUseCont > 0 { + err = overall.CONSTANT_DB_HR.Model(&models.Duties{}).Where("`id` IN ?", requestData.Id).Updates(editDutiesInfo).Error + if err != nil { + overallhandle.Result(106, err, c) + return + } + } else { + if requestData.IsTrue == 1 { + err = overall.CONSTANT_DB_HR.Where("`id` IN ?", requestData.Id).Delete(&models.Duties{}).Error + if err != nil { + overallhandle.Result(106, err, c) + return + } + } else { + err = overall.CONSTANT_DB_HR.Model(&models.Duties{}).Where("`id` IN ?", requestData.Id).Updates(editDutiesInfo).Error + if err != nil { + overallhandle.Result(106, err, c) + return + } + } + } + overallhandle.Result(0, err, c) +} diff --git a/api/version1/administrativeorganization/gov_class.go b/api/version1/administrativeorganization/gov_class.go index 3427d23..ed5df79 100644 --- a/api/version1/administrativeorganization/gov_class.go +++ b/api/version1/administrativeorganization/gov_class.go @@ -10,7 +10,56 @@ import ( "github.com/gin-gonic/gin" ) -//行政类型 +/* +* +@ 作者: 秦东 +@ 时间: 2023-06-05 15:26:31 +@ 功能: 获取所有行政组织类型 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (o *OrganizationApi) GovClassAllList(c *gin.Context) { + var requestData overallhandle.NameOverall + c.ShouldBindJSON(&requestData) + var govClassMap []models.AdministrativeOrganizationType + gormDb := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganizationType{}).Where("state IN ?", []int{1, 2}) + if requestData.Name != "" { + gormDb = gormDb.Where("name LIKE ?", "%"+requestData.Name+"%") + } + err := gormDb.Find(&govClassMap).Error + if err != nil { + overallhandle.Result(107, err, c) + return + } + var sendOrgTypesList []SendOrgTypes + for _, v := range govClassMap { + var sendOrgTypesCont SendOrgTypes + sendOrgTypesCont.Id = v.Id // + sendOrgTypesCont.Name = v.Name //类型名称"` + sendOrgTypesCont.Time = v.Time //创建时间"` + sendOrgTypesCont.State = v.State //状态(1:启用;2:禁用;3:删除)"` + sendOrgTypesCont.Level = v.Level //级别"` + sendOrgTypesCont.KingdeeId = v.KingdeeId //金蝶对照ID"` + if v.State == 1 { + sendOrgTypesCont.Status = true + } else { + sendOrgTypesCont.Status = false + } + sendOrgTypesList = append(sendOrgTypesList, sendOrgTypesCont) + } + overallhandle.Result(0, sendOrgTypesList, c) +} + +// 行政类型 func (o *OrganizationApi) GovClassList(c *gin.Context) { var requestData selectNameOrState c.ShouldBindJSON(&requestData) @@ -42,11 +91,27 @@ func (o *OrganizationApi) GovClassList(c *gin.Context) { if errGorm != nil { overallhandle.Result(105, errGorm, c) } else { - overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(govClassMap)), govClassMap, c) + var sendOrgTypesList []SendOrgTypes + for _, v := range govClassMap { + var sendOrgTypesCont SendOrgTypes + sendOrgTypesCont.Id = v.Id // + sendOrgTypesCont.Name = v.Name //类型名称"` + sendOrgTypesCont.Time = v.Time //创建时间"` + sendOrgTypesCont.State = v.State //状态(1:启用;2:禁用;3:删除)"` + sendOrgTypesCont.Level = v.Level //级别"` + sendOrgTypesCont.KingdeeId = v.KingdeeId //金蝶对照ID"` + if v.State == 1 { + sendOrgTypesCont.Status = true + } else { + sendOrgTypesCont.Status = false + } + sendOrgTypesList = append(sendOrgTypesList, sendOrgTypesCont) + } + overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(sendOrgTypesList)), sendOrgTypesList, c) } } -//添加行政组织类别 +// 添加行政组织类别 func (o *OrganizationApi) AddGovClass(c *gin.Context) { var requestData addGovClassInfo err := c.ShouldBindJSON(&requestData) @@ -80,7 +145,7 @@ func (o *OrganizationApi) AddGovClass(c *gin.Context) { } } -//获取行政组织类别详情 +// 获取行政组织类别详情 func (o *OrganizationApi) GetGovClassCont(c *gin.Context) { var requestData overallhandle.GetId err := c.ShouldBindJSON(&requestData) @@ -105,7 +170,7 @@ func (o *OrganizationApi) GetGovClassCont(c *gin.Context) { } } -//修改行政组织类别详情 +// 修改行政组织类别详情 func (o *OrganizationApi) EiteGovClassCont(c *gin.Context) { var requestData eiteGovClassInfo err := c.ShouldBindJSON(&requestData) @@ -157,7 +222,7 @@ func (o *OrganizationApi) EiteGovClassCont(c *gin.Context) { } } -//修改行政类别状态或删除 +// 修改行政类别状态或删除 func (o *OrganizationApi) EiteGovClassStateOrDel(c *gin.Context) { var requestData EiteJobStateDel err := c.ShouldBindJSON(&requestData) @@ -215,3 +280,90 @@ func (o *OrganizationApi) EiteGovClassStateOrDel(c *gin.Context) { } } } + +/* +* +@ 作者: 秦东 +@ 时间: 2023-06-05 10:37:05 +@ 功能: 批量编辑组织分类状态或删除 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (o *OrganizationApi) BaseEditOrgClassStatus(c *gin.Context) { + var requestData BaseOrgTypesState + err := c.ShouldBindJSON(&requestData) + if err != nil { + overallhandle.Result(100, err, c) + return + } + if len(requestData.Id) < 1 { + overallhandle.Result(1, err, c, "未知操作项!") + return + } + if requestData.Status == 0 { + requestData.Status = 1 + } + if requestData.IsTrue == 0 { + requestData.IsTrue = 2 + } + saveData := overallhandle.MapOut() + saveData["time"] = time.Now().Unix() + saveData["state"] = requestData.Status + if requestData.Status != 3 { + err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganizationType{}).Where("`id` IN ?", requestData.Id).Updates(saveData).Error + if err != nil { + overallhandle.Result(106, err, c) + return + } else { + overallhandle.Result(0, err, c) + } + } else { + if requestData.Status != 3 { + err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganizationType{}).Where("`id` IN ?", requestData.Id).Updates(saveData).Error + if err != nil { + overallhandle.Result(106, err, c) + return + } + } else { + var useOrgCalssCount int64 + err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`").Where("`organization_type` IN ?", requestData.Id).Count(&useOrgCalssCount).Error + if err == nil && useOrgCalssCount > 0 { + err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganizationType{}).Where("`id` IN ?", requestData.Id).Updates(saveData).Error + if err != nil { + overallhandle.Result(106, err, c) + return + } else { + overallhandle.Result(0, err, c) + } + } else { + if requestData.IsTrue == 1 { + //硬删除 + err = overall.CONSTANT_DB_HR.Where("`id` IN ?", requestData.Id).Delete(&models.AdministrativeOrganizationType{}).Error + if err == nil { + overallhandle.Result(0, err, c) + } else { + overallhandle.Result(108, err, c) + } + } else { + err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganizationType{}).Where("`id` IN ?", requestData.Id).Updates(saveData).Error + if err != nil { + overallhandle.Result(106, err, c) + return + } else { + overallhandle.Result(0, err, c) + } + } + + } + } + } +} diff --git a/api/version1/administrativeorganization/govcont.go b/api/version1/administrativeorganization/govcont.go index 0ca362c..8d1e24a 100644 --- a/api/version1/administrativeorganization/govcont.go +++ b/api/version1/administrativeorganization/govcont.go @@ -5,6 +5,7 @@ import ( "fmt" "hr_server/grocerystore" "hr_server/models" + "hr_server/models/hrmodels" "hr_server/overall" "hr_server/overall/overallhandle" "sort" @@ -91,9 +92,9 @@ func (o *OrganizationApi) AddGovCont(c *gin.Context) { govClassIdInt, _ := strconv.ParseInt(requestData.GovClass, 10, 64) govClassId = govClassIdInt } - if requestData.WechatId == 0 { - requestData.WechatId = 1 - } + // 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 { @@ -495,84 +496,104 @@ func (o *OrganizationApi) GovThreeAboutMan(c *gin.Context) { // 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) + } - //获取行政组织 - var orgList []models.OrgContType - gormDb := overall.CONSTANT_DB_HR.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) + 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) //协程处理行政组织下的人员信息 - sendDataList = []OrgAndPeople{} - // fmt.Printf("执行一次---------->%v\n", i) - } else { - sendDataList = append(sendDataList, sendDataCont) + go allOrgAndPeople.GetOrgAboutPeople(sendDataList) } - 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 + 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) } - 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 - overallhandle.Result(0, outputDataAry, c) } /* @@ -641,7 +662,7 @@ func (s *synProReadData) GetOrgAboutPeople(orgList []OrgAndPeople) { } } var peopleList []models.PersonArchives - err := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`key`,`number`,`name`,`icon`,`admin_org`").Where("`state` = ? AND `admin_org` IN ? AND `emp_type` BETWEEN ? AND ? ", 1, orgId, 1, 10).Find(&peopleList).Error + 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 { @@ -678,6 +699,7 @@ func (s *synProReadData) MakePeopleToOrg(manCont models.PersonArchives, orgList 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) } @@ -1339,3 +1361,418 @@ func (o *OrganizationApi) GetAppointOrg(c *gin.Context) { } 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) +} diff --git a/api/version1/administrativeorganization/job_class.go b/api/version1/administrativeorganization/job_class.go index 74c4045..c021e60 100644 --- a/api/version1/administrativeorganization/job_class.go +++ b/api/version1/administrativeorganization/job_class.go @@ -10,7 +10,7 @@ import ( "github.com/gin-gonic/gin" ) -//职务分类列表 +// 职务分类列表 func (o *OrganizationApi) DutiesClassList(c *gin.Context) { var requestData JobClassPageSelect c.ShouldBindJSON(&requestData) @@ -21,7 +21,7 @@ func (o *OrganizationApi) DutiesClassList(c *gin.Context) { requestData.PageSize = 10 } var jobClassList []models.JobClass - gormDb := overall.CONSTANT_DB_HR.Model(&models.JobClass{}).Select("`id`", "`name`", "`state`") + gormDb := overall.CONSTANT_DB_HR.Model(&models.JobClass{}).Select("`id`", "`name`", "`state`,`kingdeeid`") if requestData.Name != "" { // nameFactor := fmt.Sprintf("%%v%") gormDb = gormDb.Where("`name` LIKE ?", "%"+requestData.Name+"%") @@ -42,6 +42,12 @@ func (o *OrganizationApi) DutiesClassList(c *gin.Context) { jobClassCont.Id = strconv.FormatInt(v.Id, 10) jobClassCont.Name = v.Name jobClassCont.State = v.State + jobClassCont.KingDeeId = v.KingdeeId + if v.State == 1 { + jobClassCont.Status = true + } else { + jobClassCont.Status = false + } jobClassAry = append(jobClassAry, jobClassCont) } // overallhandle.Result(0, jobClassList, c) @@ -49,7 +55,7 @@ func (o *OrganizationApi) DutiesClassList(c *gin.Context) { } } -//添加职务分类 +// 添加职务分类 func (o *OrganizationApi) AddDutiesClass(c *gin.Context) { var requestData NameVal err := c.ShouldBindJSON(&requestData) @@ -80,7 +86,7 @@ func (o *OrganizationApi) AddDutiesClass(c *gin.Context) { } } -//查看职务分类详情 +// 查看职务分类详情 func (o *OrganizationApi) GetDutiesClassInfo(c *gin.Context) { var requestData overallhandle.GetId err := c.ShouldBindJSON(&requestData) @@ -105,7 +111,7 @@ func (o *OrganizationApi) GetDutiesClassInfo(c *gin.Context) { } } -//修改职务分类详情 +// 修改职务分类详情 func (o *OrganizationApi) EiteDutiesClassInfo(c *gin.Context) { var requestData EiteJobClassInfo err := c.ShouldBindJSON(&requestData) @@ -157,7 +163,7 @@ func (o *OrganizationApi) EiteDutiesClassInfo(c *gin.Context) { } } -//删除职务分类 +// 删除职务分类 func (o *OrganizationApi) DelDutiesClassInfo(c *gin.Context) { var requestData EiteJobStateDel err := c.ShouldBindJSON(&requestData) @@ -215,3 +221,111 @@ func (o *OrganizationApi) DelDutiesClassInfo(c *gin.Context) { } } } + +// 修改职务分类详情 +func (o *OrganizationApi) NewEiteDutiesClassInfo(c *gin.Context) { + var requestData EiteJobClassInfoNew + err := c.ShouldBindJSON(&requestData) + if err != nil { + overallhandle.Result(100, err, c) + return + } + if requestData.Id == 0 { + overallhandle.Result(101, err, c, "职务分类Id不能为空!") + return + } + + gormDb := overall.CONSTANT_DB_HR + var jobClassInfo models.JobClass + //判断职务类型是否存在 + judgeExist := gormDb.Where("`id` = ?", requestData.Id).First(&jobClassInfo).Error + if judgeExist != nil { + overallhandle.Result(107, judgeExist, c) + return + } + + saveData := overallhandle.MapOut() + saveData["time"] = time.Now().Unix() + if requestData.Name != "" { + if requestData.Name != jobClassInfo.Name { + //查询一下修改的职务名称是否已经存在 + var name string + judgeErr := overall.CONSTANT_DB_HR.Model(&models.JobClass{}).Select("`name`").Where("`name` = ?", requestData.Name).First(&name).Error + if judgeErr == nil { + overallhandle.Result(103, name, c) + return + } + saveData["name"] = requestData.Name + } + } + + whereMap := overallhandle.MapOut() + whereMap["id"] = requestData.Id + eiteErr := jobClassInfo.EiteJobClassCont(whereMap, saveData) + if eiteErr != nil { + overallhandle.Result(106, eiteErr, c) + } else { + overallhandle.Result(0, saveData, c) + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-06-07 15:09:48 +@ 功能: 编辑职务分类状态或删除 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (o *OrganizationApi) EditDutiesClassStatus(c *gin.Context) { + var requestData DutiesEditOrDel + err := c.ShouldBindJSON(&requestData) + if err != nil { + overallhandle.Result(100, err, c) + return + } + if len(requestData.Id) < 1 { + overallhandle.Result(101, err, c, "职务分类Id不能为空!") + return + } + if requestData.Status == 0 { + requestData.Status = 1 + } + if requestData.IsTrue == 0 { + requestData.IsTrue = 2 + } + editCont := overallhandle.MapOut() + editCont["`state`"] = requestData.Status + editCont["`time`"] = time.Now().Unix() + if requestData.Status != 3 { + err = overall.CONSTANT_DB_HR.Model(&models.JobClass{}).Where("`id` IN ?", requestData.Id).Updates(editCont).Error + if err != nil { + overallhandle.Result(101, err, c, "数据更新失败!") + return + } + } else { + if requestData.IsTrue == 1 { + err = overall.CONSTANT_DB_HR.Where("`id` IN ?", requestData.Id).Delete(&models.JobClass{}).Error + if err != nil { + overallhandle.Result(101, err, c, "数据更新失败!") + return + } + } else { + err = overall.CONSTANT_DB_HR.Model(&models.JobClass{}).Where("`id` IN ?", requestData.Id).Updates(editCont).Error + if err != nil { + overallhandle.Result(101, err, c, "数据更新失败!") + return + } + } + } + overallhandle.Result(0, err, c) +} diff --git a/api/version1/administrativeorganization/orgpost.go b/api/version1/administrativeorganization/orgpost.go index 789748e..aa57ec2 100644 --- a/api/version1/administrativeorganization/orgpost.go +++ b/api/version1/administrativeorganization/orgpost.go @@ -131,7 +131,7 @@ func (o *OrganizationApi) GetOrgAndPostThree(c *gin.Context) { for _, v := range orgList { var redisCont OutPutOrgAndPost jsonErr := json.Unmarshal([]byte(v), &redisCont) - fmt.Printf("jsonErr=========>%v\n", jsonErr) + // fmt.Printf("jsonErr=========>%v\n", jsonErr) if jsonErr == nil { sendListCont = append(sendListCont, redisCont) allNumber = append(allNumber, redisCont.Number) @@ -166,6 +166,7 @@ func OrgAndPostThreeList(superiorId string, contList []OutPutOrgAndPost) []OutPu node.OrgName = v.OrgName node.DepartId = v.DepartId node.DepartName = v.DepartName + node.AdminOrg = v.AdminOrg if len(child) > 0 { node.Child = child } @@ -209,6 +210,7 @@ func (o *OrgAndPostSync) GetPostInfoList(contList []OutPutOrgAndPost) { sendCont.OrgId = "-1" sendCont.DepartId = strconv.FormatInt(departmentId, 10) sendCont.DepartName = departCont.Name + sendCont.AdminOrg = strconv.FormatInt(v.AdministrativeOrganization, 10) if departmentId == v.AdministrativeOrganization { sendCont.OrgName = departCont.Name } else { diff --git a/api/version1/administrativeorganization/position.go b/api/version1/administrativeorganization/position.go index 4f0ce6d..d4afcb8 100644 --- a/api/version1/administrativeorganization/position.go +++ b/api/version1/administrativeorganization/position.go @@ -82,6 +82,11 @@ func (o *OrganizationApi) PositionList(c *gin.Context) { positionAry[i].DepartmentName = getSpurDepart.Name positionAry[i].IdStr = strconv.FormatInt(v.Id, 10) + if positionAry[i].State == 1 { + positionAry[i].Status = true + } else { + positionAry[i].Status = false + } } if errGorm != nil { @@ -880,6 +885,11 @@ func (o *OrganizationApi) GetMyPositionList(c *gin.Context) { positionAry[i].DepartmentName = getSpurDepart.Name positionAry[i].IdStr = strconv.FormatInt(v.Id, 10) + if positionAry[i].State == 1 { + positionAry[i].Status = true + } else { + positionAry[i].Status = false + } } if errGorm != nil { @@ -1024,3 +1034,353 @@ func excudePosition(unifyCont models.PositionUnify) { } } } + +/* +* +@ 作者: 秦东 +@ 时间: 2023-06-14 09:00:13 +@ 功能: 添加岗位平台通用 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (o *OrganizationApi) AddPositionContPublic(c *gin.Context) { + var requestData PublicAddPostCont + c.ShouldBindJSON(&requestData) + if requestData.Number == "" { + overallhandle.Result(101, requestData.Number, c, "岗位编码不能为空!") + return + } + if requestData.Name == "" { + overallhandle.Result(101, requestData.Name, c, "岗位名称不能为空!") + return + } + if requestData.Duties == 0 { + overallhandle.Result(101, requestData.Duties, c, "请指定该岗位的职务!") + return + } + if requestData.Organization == 0 { + overallhandle.Result(101, requestData.Duties, c, "请指定该岗位的归属行政组织!") + return + } + incharge := 2 + if requestData.Incharge != "" { + var incErr error + incharge, incErr = strconv.Atoi(requestData.Incharge) + if incErr != nil { + incharge = 2 + } + } else { + incharge = 2 + } + var positionCont models.Position + //判断编号是否已经存在 + isNumExit := overallhandle.MapOut() + isNumExit["number"] = requestData.Number + judgeNumErr := positionCont.GetCont(isNumExit) + if judgeNumErr == nil { + overallhandle.Result(101, isNumExit, c, "该编号已经存在!请不要重复使用!") + return + } + + groupId, companyId, departmentId, sunDepartId, workShopId := overallhandle.GetOrgStructure(requestData.Organization) + + if departmentId == 0 { + departmentId = companyId + } + var orgList []int64 + if groupId != 0 { + // groupIdStr := strconv.FormatInt(groupId, 10) + if !overallhandle.IsInTrue[int64](groupId, orgList) { + orgList = append(orgList, groupId) + } + } + if companyId != 0 { + // companyIdStr := strconv.FormatInt(companyId, 10) + if !overallhandle.IsInTrue[int64](companyId, orgList) { + orgList = append(orgList, companyId) + } + } + if departmentId != 0 { + // departmentIdStr := strconv.FormatInt(departmentId, 10) + if !overallhandle.IsInTrue[int64](departmentId, orgList) { + orgList = append(orgList, departmentId) + } + } + if sunDepartId != 0 { + // sunDepartIdStr := strconv.FormatInt(sunDepartId, 10) + if !overallhandle.IsInTrue[int64](sunDepartId, orgList) { + orgList = append(orgList, sunDepartId) + } + } + if workShopId != 0 { + // workShopIdStr := strconv.FormatInt(workShopId, 10) + if !overallhandle.IsInTrue[int64](workShopId, orgList) { + orgList = append(orgList, workShopId) + } + } + orgListJson, _ := json.Marshal(orgList) + //判断岗位名称是否已经存在 + isExit := overallhandle.MapOut() + isExit["department"] = departmentId + isExit["name"] = requestData.Name + isExit["administrative_organization"] = requestData.Organization + judgeErr := positionCont.GetCont(isExit) + if judgeErr == nil { + overallhandle.Result(101, isExit, c, "该职位在本行政组织下已经存在!请不要重复添加") + return + } + positionCont.Number = requestData.Number + positionCont.Name = requestData.Name + positionCont.Duties = requestData.Duties + positionCont.AdministrativeOrganization = requestData.Organization + positionCont.Superior = requestData.Superior + positionCont.PersonInCharge = incharge + positionCont.Department = departmentId + positionCont.State = 1 + positionCont.Time = time.Now().Unix() + positionCont.OrgList = string(orgListJson) + addDataErr := overall.CONSTANT_DB_HR.Create(&positionCont).Error + if addDataErr != nil { + overallhandle.Result(104, addDataErr, c) + } else { + overallhandle.Result(0, addDataErr, c) + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-06-14 10:01:34 +@ 功能: 编辑岗位平台通用 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (o *OrganizationApi) EditPositionContPublic(c *gin.Context) { + var requestData PublicAddPostCont + c.ShouldBindJSON(&requestData) + if requestData.Id == 0 { + overallhandle.Result(101, requestData.Id, c, "未知岗位!不能进行编辑!") + return + } + if requestData.Number == "" { + overallhandle.Result(101, requestData.Number, c, "岗位编码不能为空!") + return + } + if requestData.Name == "" { + overallhandle.Result(101, requestData.Name, c, "岗位名称不能为空!") + return + } + if requestData.Duties == 0 { + overallhandle.Result(101, requestData.Duties, c, "请指定该岗位的职务!") + return + } + if requestData.Organization == 0 { + overallhandle.Result(101, requestData.Duties, c, "请指定该岗位的归属行政组织!") + return + } + incharge := 2 + if requestData.Incharge != "" { + var incErr error + incharge, incErr = strconv.Atoi(requestData.Incharge) + if incErr != nil { + incharge = 2 + } + } else { + incharge = 2 + } + whereAry := overallhandle.MapOut() + whereAry["id"] = requestData.Id + var govCont models.Position + judgeErr := govCont.GetCont(whereAry) + if judgeErr != nil { + overallhandle.Result(107, judgeErr, c) + return + } + saveData := overallhandle.MapOut() + + if requestData.Number != "" && requestData.Number != govCont.Number { + isNumExit := overallhandle.MapOut() + isNumExit["number"] = requestData.Number + var govContNum models.Position + judgeNumErr := govContNum.GetCont(isNumExit, "id", "number") + if judgeNumErr == nil { + overallhandle.Result(101, isNumExit, c, "该编号已经存在!请不要重复使用!") + return + } + saveData["number"] = requestData.Number + } + + // organizationId :=requestData.Organization + // _, companyId, departmentId, _, _ := overallhandle.GetOrgStructure(requestData.Organization) + // if departmentId == 0 { + // departmentId = companyId + // } + // departIsTrue := false + // if departmentId != 0 && departmentId != govCont.Department { + // departIsTrue = true + // orgListJson, _ := json.Marshal(requestData.Organization) + // saveData["department"] = departmentId + // saveData["orglist"] = orgListJson + // } + groupId, companyId, departmentId, sunDepartId, workShopId := overallhandle.GetOrgStructure(requestData.Organization) + + if departmentId == 0 { + departmentId = companyId + } + var orgList []int64 + if groupId != 0 { + // groupIdStr := strconv.FormatInt(groupId, 10) + if !overallhandle.IsInTrue[int64](groupId, orgList) { + orgList = append(orgList, groupId) + } + } + if companyId != 0 { + // companyIdStr := strconv.FormatInt(companyId, 10) + if !overallhandle.IsInTrue[int64](companyId, orgList) { + orgList = append(orgList, companyId) + } + } + if departmentId != 0 { + // departmentIdStr := strconv.FormatInt(departmentId, 10) + if !overallhandle.IsInTrue[int64](departmentId, orgList) { + orgList = append(orgList, departmentId) + } + } + if sunDepartId != 0 { + // sunDepartIdStr := strconv.FormatInt(sunDepartId, 10) + if !overallhandle.IsInTrue[int64](sunDepartId, orgList) { + orgList = append(orgList, sunDepartId) + } + } + if workShopId != 0 { + // workShopIdStr := strconv.FormatInt(workShopId, 10) + if !overallhandle.IsInTrue[int64](workShopId, orgList) { + orgList = append(orgList, workShopId) + } + } + orgListJson, _ := json.Marshal(orgList) + departIsTrue := false + if departmentId != 0 && departmentId != govCont.Department { + departIsTrue = true + saveData["department"] = departmentId + saveData["orglist"] = string(orgListJson) + } + + if requestData.Name != "" && requestData.Name != govCont.Name { + if departIsTrue == true { + //判断岗位名称是否已经存在 + isExit := overallhandle.MapOut() + isExit["department"] = departmentId + isExit["name"] = requestData.Name + var govContName models.Position + judgeErr := govContName.GetCont(isExit, "id", "department", "name") + if judgeErr == nil { + overallhandle.Result(101, isExit, c, "该职位在本部门下已经存在!请不要重复添加") + return + } + } + saveData["name"] = requestData.Name + } + if requestData.Duties != 0 && requestData.Duties != govCont.Duties { + saveData["duties"] = requestData.Duties + } + if requestData.Organization != 0 && requestData.Organization != govCont.AdministrativeOrganization { + saveData["administrative_organization"] = requestData.Organization + } + if requestData.Superior != 0 && requestData.Superior != govCont.Superior { + saveData["superior"] = requestData.Superior + } + if incharge != 0 && incharge != govCont.PersonInCharge { + saveData["person_in_charge"] = incharge + } + if len(saveData) < 1 { + overallhandle.Result(0, saveData, c) + return + } + saveData["time"] = time.Now().Unix() + eiteErr := govCont.EiteCont(whereAry, saveData) + if eiteErr != nil { + overallhandle.Result(106, eiteErr, c) + } else { + overallhandle.Result(0, saveData, c) + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-06-14 10:45:26 +@ 功能: 批量删除 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (o *OrganizationApi) BaseDelPostCont(c *gin.Context) { + var requestData DutiesEditOrDel + err := c.ShouldBindJSON(&requestData) + if err != nil { + overallhandle.Result(100, err, c) + return + } + if len(requestData.Id) < 1 { + overallhandle.Result(101, err, c, "岗位Id不能为空!") + return + } + if requestData.Status == 0 { + requestData.Status = 1 + } + if requestData.IsTrue == 0 { + requestData.IsTrue = 2 + } + editCont := overallhandle.MapOut() + editCont["`state`"] = requestData.Status + editCont["`time`"] = time.Now().Unix() + if requestData.Status != 3 { + err = overall.CONSTANT_DB_HR.Model(&models.Position{}).Where("`id` IN ?", requestData.Id).Updates(editCont).Error + if err != nil { + overallhandle.Result(101, err, c, "数据更新失败!") + return + } + } else { + if requestData.IsTrue == 1 { + err = overall.CONSTANT_DB_HR.Where("`id` IN ?", requestData.Id).Delete(&models.Position{}).Error + if err != nil { + overallhandle.Result(101, err, c, "数据更新失败!") + return + } + } else { + err = overall.CONSTANT_DB_HR.Model(&models.Position{}).Where("`id` IN ?", requestData.Id).Updates(editCont).Error + if err != nil { + overallhandle.Result(101, err, c, "数据更新失败!") + return + } + } + } + overallhandle.Result(0, err, c) +} diff --git a/api/version1/administrativeorganization/type.go b/api/version1/administrativeorganization/type.go index 2a8c68a..aec7357 100644 --- a/api/version1/administrativeorganization/type.go +++ b/api/version1/administrativeorganization/type.go @@ -2,6 +2,7 @@ package administrativeorganization import ( "hr_server/models" + "hr_server/models/hrmodels" "hr_server/overall/overallhandle" "sync" @@ -57,6 +58,7 @@ type dutiesListType struct { type dutiesOutCont struct { models.Duties DutiesClassName string `json:"dutiesclassname" gorm:"column:classname;type:varchar(255) unsigned;default:'';not null;comment:职务分类名称"` + Status bool `json:"status"` } // 添加职务 @@ -74,7 +76,7 @@ type getDutiesInfo struct { // 修改职务详情 type eiteDutiesCont struct { - overallhandle.GetId + Id int64 `json:"id"` NameVal JobType string `json:"jobtype"` //归属职务类型 Weight int64 `json:weight` //权重 @@ -126,6 +128,15 @@ type addGovInfo struct { WechatId int `json:"wechatid"` } +type addGovInfoNew struct { + NameVal + Number string `json:"number"` + Superior string `json:"superior"` + GovClass string `json:"govclass"` + Abbreviation string `json:"abbreviation"` + WechatId string `json:"wechatid"` +} + // 修改行政组织 type eiteGovInfo struct { overallhandle.GetId @@ -173,6 +184,7 @@ type positionOutInfo struct { DepartmentName string `json:"departmentname"` IdStr string `json:"idstr"` OrgListAry []int64 `json:"orglistary"` + Status bool `json:"status"` } // 行政组织树查询 @@ -201,9 +213,11 @@ type powerConfigList struct { // 输出职务分类列表 type outJobClassList struct { - Id string `json:"id"` - Name string `json:"name"` - State int `json:"state"` + Id string `json:"id"` + Name string `json:"name"` + State int `json:"state"` + Status bool `json:"status"` + KingDeeId string `json:"kingdeeid"` } // 修改班组 @@ -219,16 +233,17 @@ type synProReadData struct { // 输出行政组织加人员 type OrgAndPeople struct { - Id string `json:"id"` //行政组织Id或人员Key - Name string `json:"name"` //行政组织名称或人员名称 - Number string `json:"number"` //行政组织编号或人员编号 - Icon string `json:"icon"` //行政组织头像或人员头像 - ParentId string `json:"parentId"` //上级 - OrgId string `json:"orgId"` //所属行政组织 - IsMan int `json:"isman"` //是部门还是个人(1:行政组织;2:人员) - Sort int `json:"sort"` //排序 - Identify int `json:"identify"` //身份识别 - AllName string `json:"all_name"` //全部名 + Id string `json:"id"` //行政组织Id或人员Key + Name string `json:"name"` //行政组织名称或人员名称 + Number string `json:"number"` //行政组织编号或人员编号 + Icon string `json:"icon"` //行政组织头像或人员头像 + IconBase64 string `json:"iconbase64"` //行政组织头像或人员头像 + ParentId string `json:"parentId"` //上级 + OrgId string `json:"orgId"` //所属行政组织 + IsMan int `json:"isman"` //是部门还是个人(1:行政组织;2:人员) + Sort int `json:"sort"` //排序 + Identify int `json:"identify"` //身份识别 + AllName string `json:"all_name"` //全部名 // Child []OrgAndPeople `json:"child"` //子栏目 } @@ -390,6 +405,7 @@ type OutPutOrgAndPost struct { OrgName string `json:"orgname"` //行政组织名称 DepartId string `json:"departid"` //主责部门 DepartName string `json:"departname"` //主责部门名称 + AdminOrg string `json:"adminorg"` //归属行政组织 } // 循环输出 @@ -420,3 +436,95 @@ func (p *PositionUnifySync) readDataLock() []models.PositionUnify { defer p.mutext.RUnlock() return p.PositionList } + +// 输出行政组织下的所有人员 +type OrgAllPeopleList struct { + Id string `json:"id"` + Number string `json:"number"` + Name string `json:"name"` + Icon string `json:"icon"` + Adminorg string `json:"adminorg"` + Teamid string `json:"teamid"` + Position string `json:"position"` + Wechat string `json:"wechat"` + Key string `json:"key"` + Iconphoto string `json:"iconphoto"` +} + +// 行政组织与人 +type orgPeopleCont struct { + Three []OrgAndPeopleThree `json:"three"` + List []OrgAndPeople `json:"list"` +} + +// 输出组织分类 +type SendOrgTypes struct { + models.AdministrativeOrganizationType + Status bool `json:"status"` +} + +// 批量编辑组织分类状态 +type BaseOrgTypesState struct { + Id []string `json:"id"` //状态ID + Status int `json:"status"` //状态值(1:启用;2:禁用;3:删除) + IsTrue int `json:"istrue"` //当status 为 3 时是否强制删除(1:强制删除;2:不强制) +} + +// 搜索行政组织相关参数 +type SearchOrgCont struct { + OrgId int64 `json:"orgid"` //行政组织ID + KeyWords string `json:"keywords"` //关键字 + Class int `json:"class"` //类别 +} + +// 输出行政组织树 +type SendOrgTreeList struct { + SendOrgTreeCont + Child []SendOrgTreeList `json:"child"` +} +type SendOrgTreeCont struct { + hrmodels.OrgCont + Status bool `json:"status"` +} + +type NewEiteGovInfo struct { + Id int64 `json:"id"` + addGovInfoNew +} + +/* +* +编辑行政组织状态 +*/ +type DelOrgStatus struct { + Id int64 `json:"id"` + Status int `json:"status"` + IsTrue int `json:"istrue"` //1:应删除;非1:软删除 +} + +// 修改职务类型信息 +type EiteJobClassInfoNew struct { + Id int64 `json:"id"` + NameVal +} + +/* + */ +type DutiesEditOrDel struct { + Id []string `json:"id"` + Status int `json:"status"` + IsTrue int `json:"istrue"` //1:应删除;非1:软删除 +} + +/* +添加岗位通用 +*/ +type PublicAddPostCont struct { + Id int64 `json:"id"` //岗位ID + NameVal //岗位名称 + Number string `json:"number"` //岗位编号 + Duties int64 `json:"duties"` //岗位职务 + Organization int64 `json:"organization"` //归属行政组织 + Superior int64 `json:"superior"` //上级岗位 + Incharge string `json:"incharge"` // 1:责任岗;2:非责任岗 +} diff --git a/api/version1/personnelapi/kingdeecont.go b/api/version1/personnelapi/kingdeecont.go new file mode 100644 index 0000000..ebb7fb0 --- /dev/null +++ b/api/version1/personnelapi/kingdeecont.go @@ -0,0 +1,251 @@ +package personnelapi + +import ( + "fmt" + "hr_server/models" + "hr_server/overall" + "hr_server/overall/overallhandle" + "strings" + "time" + + "github.com/gin-gonic/gin" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2023-06-16 09:00:47 +@ 功能: 集团内部工作经历 +@ 参数 + + #manKeyNum 员工Key + #contList 工作经历 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func EditWithinGroupWorkLog(manKeyNum int64, contList []insideHistoryer) { + defer synPro.Done() + if len(contList) > 0 && manKeyNum > 0 { + var topGroup int64 = 0 // 集团ID + var groupTopCont models.AdministrativeOrganization + groupTopCont.GetCont(map[string]interface{}{"superior": 0}, "id") + topGroup = groupTopCont.Id + //获取个人信息 + var myCont models.PersonArchives + myCont.GetCont(map[string]interface{}{"key": manKeyNum}, "`company`", "`maindeparment`", "`admin_org`", "`sun_main_deparment`", "`position`", "`teamid`") + //1、判断是否存在集团工作经历 + var oldLogId int64 + overall.CONSTANT_DB_HR.Model(&models.InsideWorkHistory{}).Select("`id`").Where("`key` = ?", manKeyNum).Count(&oldLogId) + if oldLogId > 0 { + overall.CONSTANT_DB_HR.Where("`key` = ?", manKeyNum).Delete(&models.InsideWorkHistory{}) + } + //批量写入 + var creadContList []models.InsideWorkHistory + for _, v := range contList { + WorkShop := myCont.SunMainDeparment + if v.Workshop != "" { + var workShopCont models.AdministrativeOrganization + workShopErr := workShopCont.GetCont(map[string]interface{}{"kingdeeid": v.Workshop}, "id") + if workShopErr == nil { + WorkShop = workShopCont.Id //部室"` + } + } + WorkshopSection := myCont.AdminOrg + if v.WorkshopSection != "" { + var workShopSecCont models.AdministrativeOrganization + workShopSecErr := workShopSecCont.GetCont(map[string]interface{}{"kingdeeid": v.WorkshopSection}, "id") + if workShopSecErr == nil { + WorkshopSection = workShopSecCont.Id //工段"` + } + } + var wssCont models.AdministrativeOrganization + wssCont.GetCont(map[string]interface{}{"kingdeeid": v.WorkshopSection}, "id") //工段信息 + if wssCont.Id == 0 { + wssCont.Id = myCont.AdminOrg + } + //集团 + var groupContes models.AdministrativeOrganization + if v.Group != "" { + groupContes.GetCont(map[string]interface{}{"kingdeeid": v.Group}, "id") + if groupContes.Id == 0 { + groupContes.Id = topGroup + } + } else { + groupContes.Id = topGroup + } + //部门 + var dempCont models.AdministrativeOrganization + dempCont.GetCont(map[string]interface{}{"kingdeeid": v.Department}, "id") + if dempCont.Id == groupContes.Id { + if wssCont.Id != 0 { + dempCont.Id = overallhandle.RecursionOrgLeve(wssCont.Id, 4) + } + } + if dempCont.Id == 0 { + dempCont.Id = myCont.MainDeparment + } + //公司 + var compayCont models.AdministrativeOrganization + compayCont.GetCont(map[string]interface{}{"kingdeeid": v.Company}, "id") + if compayCont.Id == 0 { + compayCont.Id = myCont.Company + } + //职务 + var postCont models.Position + postCont.GetCont(map[string]interface{}{"kingdeeid": v.Position}, "id") + if postCont.Id == 0 { + postCont.Id = myCont.Position + } + var creadCont models.InsideWorkHistory + creadCont.Key = manKeyNum //员工识别符"` + creadCont.Group = groupContes.Id //集团"` + creadCont.Company = compayCont.Id //公司"` + creadCont.Department = dempCont.Id // 部室"` + creadCont.WorkShop = WorkShop //二级部门或车间"` + creadCont.WorkshopSection = WorkshopSection //工段"` + creadCont.Position = postCont.Id //职位"` + creadCont.GradePositions = v.GradePositions //职等"` + startTime := time.Now().Unix() + if v.StartTime != "" { + var startTimeErr bool + startTime, startTimeErr = overallhandle.DateToTimeStamp(v.StartTime) + if !startTimeErr { + startTime, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", v.StartTime)) + } + } + creadCont.StartTime = startTime //开始日期"` + state := 1 + var endTime int64 + if v.EndTime != "" { + if v.EndTime != "至今" && v.EndTime != "2199-12-31 00:00:00" && v.EndTime != "2199-12-31" && v.EndTime != "7258003200" { + var endTimeErr bool + endTime, endTimeErr = overallhandle.DateToTimeStamp(v.EndTime) + if !endTimeErr { + endTime, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", v.EndTime)) + } + state = 2 //状态(1:启用;2:休眠;3:删除)"` + } + } + achangeTypeInted := changeTypeToInt(v.ChangeType) + if achangeTypeInted > 12 && achangeTypeInted <= 14 { + endTime = time.Now().Unix() + } + creadCont.EndTime = endTime //结束日期"` + creadCont.Team = myCont.TeamId //(1:长白;2:甲;3:乙;4:丙;5:丁)"` + creadCont.ChangeType = changeTypeToInt(v.ChangeType) // 变动类型(1:预入职;2:雇佣入职;3:转正;4:晋升;5:降级;6:职等调整;7:调动调入;8:跨公司调动调入;9:借调;10:平调;11:兼职;12:预离职;13:离职;14:退休;15:返聘;16:员工初始化;)"` + creadCont.Time = time.Now().Unix() //创建时间"` + creadCont.State = state //状态(1:启用;2:禁用;3:删除)"` + creadCont.AssignType = assignTypeToInt(v.AssignType) // 1、主职;2:兼职"` + creadContList = append(creadContList, creadCont) + } + if len(creadContList) > 0 { + overall.CONSTANT_DB_HR.Create(&creadContList) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2023-06-16 09:40:31 +@ 功能: 行政组织关系 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) UserAboutOrgList(c *gin.Context) { + var requestData overallhandle.ConstId + err := c.ShouldBindJSON(&requestData) + if err != nil { + overallhandle.Result(100, err, c) + return + } + var workHistory []models.InsideWorkHistory + err = overall.CONSTANT_DB_HR.Where("`state` = 1 AND `end_time` = 0 AND `key` = ?", requestData.Id).Order("`assign_type` ASC").Order("`start_time` DESC").Find(&workHistory).Error + if err != nil { + overallhandle.Result(107, err, c) + return + } + var sendList []SendOrgAboutPeople + for i := 0; i < len(workHistory); i++ { + var orgList []int64 + var orgNameList []string + if !overallhandle.IsInTrue[int64](workHistory[i].Company, orgList) { + orgList = append(orgList, workHistory[i].Company) + var orgOne models.AdministrativeOrganization + orgOne.GetCont(map[string]interface{}{"`id`": workHistory[i].Company}, "`name`") + orgNameList = append(orgNameList, orgOne.Name) + } + if !overallhandle.IsInTrue[int64](workHistory[i].Department, orgList) { + orgList = append(orgList, workHistory[i].Department) + var orgTwo models.AdministrativeOrganization + orgTwo.GetCont(map[string]interface{}{"`id`": workHistory[i].Department}, "`name`") + orgNameList = append(orgNameList, orgTwo.Name) + } + if !overallhandle.IsInTrue[int64](workHistory[i].WorkShop, orgList) { + orgList = append(orgList, workHistory[i].WorkShop) + var orgTree models.AdministrativeOrganization + orgTree.GetCont(map[string]interface{}{"`id`": workHistory[i].WorkShop}, "`name`") + orgNameList = append(orgNameList, orgTree.Name) + } + if !overallhandle.IsInTrue[int64](workHistory[i].WorkshopSection, orgList) { + orgList = append(orgList, workHistory[i].WorkshopSection) + var orgTree models.AdministrativeOrganization + orgTree.GetCont(map[string]interface{}{"`id`": workHistory[i].WorkshopSection}, "`name`") + orgNameList = append(orgNameList, orgTree.Name) + } + var sendCont SendOrgAboutPeople + sendCont.Id = workHistory[i].Id // + sendCont.Key = workHistory[i].Key //员工识别符"` + sendCont.Group = workHistory[i].Group //集团 + sendCont.Company = workHistory[i].Company //公司"` + sendCont.Department = workHistory[i].Department //部室"` + sendCont.WorkShop = workHistory[i].WorkShop //:二级部门或车间"` + sendCont.WorkshopSection = workHistory[i].WorkshopSection //工段"` + sendCont.Position = workHistory[i].Position //职位"` + sendCont.GradePositions = workHistory[i].GradePositions //职等"` + sendCont.StartTime = workHistory[i].StartTime //开始日期"` + sendCont.EndTime = workHistory[i].EndTime //结束日期"` + sendCont.Team = workHistory[i].Team //班组(1:长白;2:甲;3:乙;4:丙;5:丁)"` + sendCont.ChangeType = workHistory[i].ChangeType //变动类型(1:预入职;2:雇佣入职;3:转正;4:晋升;5:降级;6:职等调整;7:调动调入;8:跨公司调动调入;9:借调;10:平调;11:兼职;12:预离职;13:离职;14:退休;15:返聘;16:员工初始化;)"` + sendCont.Time = workHistory[i].Time //创建时间"` + sendCont.State = workHistory[i].State //状态(1:启用;2:禁用;3:删除)"` + sendCont.AssignType = workHistory[i].AssignType //1、主职;2:兼职"` + sendCont.JobId = workHistory[i].JobId //职务"` + if workHistory[i].Position != 0 { + var postCont models.Position + postCont.GetCont(map[string]interface{}{"`id`": workHistory[i].Position}, "`name`") + if workHistory[i].GradePositions != 0 { + sendCont.PostName = fmt.Sprintf("%v级%v", workHistory[i].GradePositions, postCont.Name) + } else { + sendCont.PostName = postCont.Name + } + } + if len(orgNameList) > 0 { + sendCont.OrgAllName = strings.Join(orgNameList, " / ") + } + sendCont.StartTimeStr = overallhandle.UnixTimeToDay(workHistory[i].StartTime, 4) + if workHistory[i].EndTime == 0 { + sendCont.EndTimeStr = "至今" + } else { + sendCont.EndTimeStr = overallhandle.UnixTimeToDay(workHistory[i].EndTime, 4) + } + + sendList = append(sendList, sendCont) + } + overallhandle.Result(0, sendList, c) +} diff --git a/api/version1/personnelapi/kingdeenew.go b/api/version1/personnelapi/kingdeenew.go index 26a2b35..66fff54 100644 --- a/api/version1/personnelapi/kingdeenew.go +++ b/api/version1/personnelapi/kingdeenew.go @@ -297,7 +297,8 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe //编辑集团内工作履历 synPro.Add(1) // go editInsideWorkHistoryMan(perArcInfo.Key, manCont.InsideWorkHistory) - go editInsideWorkHistoryManNew(perArcInfo.Key, manCont.InsideWorkHistory) + // go editInsideWorkHistoryManNew(perArcInfo.Key, manCont.InsideWorkHistory) + go EditWithinGroupWorkLog(perArcInfo.Key, manCont.InsideWorkHistory) synPro.Wait() return nil @@ -500,7 +501,8 @@ func newAddManContJinDie(oldSchool models.WorkMan, manCont addKingdeePersonneles //编辑集团内工作履历 synPro.Add(1) // go editInsideWorkHistoryMan(manKeyNum, manCont.InsideWorkHistory) - go editInsideWorkHistoryManNew(manKeyNum, manCont.InsideWorkHistory) + // go editInsideWorkHistoryManNew(manKeyNum, manCont.InsideWorkHistory) + go EditWithinGroupWorkLog(manKeyNum, manCont.InsideWorkHistory) synPro.Wait() } return nil @@ -1135,6 +1137,8 @@ func educatExperKingdeeNew(manKeyNum int64, manCont addKingdeePersonneles) { if entranceTime != perEduContHig.AdmissionTime { eitdCont["admission_time"] = entranceTime } + } else { + eitdCont["admission_time"] = 0 } if manCont.HighestGraduationTime != "" { graduationTime, graduationTimeErr := overallhandle.DateToTimeStamp(manCont.HighestGraduationTime) @@ -1144,6 +1148,8 @@ func educatExperKingdeeNew(manKeyNum int64, manCont addKingdeePersonneles) { if graduationTime != perEduContHig.GraduationTime { eitdCont["graduation_time"] = graduationTime } + } else { + eitdCont["graduation_time"] = 0 } if len(eitdCont) > 0 { eitdCont["Time"] = time.Now().Unix() @@ -1176,8 +1182,11 @@ func educatExperKingdeeNew(manKeyNum int64, manCont addKingdeePersonneles) { if entranceTimeErr == false { entranceTime, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.HighestAdmissionTime)) } + perEduContHig.AdmissionTime = entranceTime // 入学时间"` + } else { + perEduContHig.AdmissionTime = 0 // 入学时间"` } - perEduContHig.AdmissionTime = entranceTime // 入学时间"` + graduationTime := time.Now().Unix() if manCont.HighestGraduationTime != "" { graduationTimeErr := false @@ -1185,9 +1194,12 @@ func educatExperKingdeeNew(manKeyNum int64, manCont addKingdeePersonneles) { if graduationTimeErr == false { graduationTime, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.HighestGraduationTime)) } + perEduContHig.GraduationTime = graduationTime // 毕业时间"` + } else { + perEduContHig.GraduationTime = 0 // 毕业时间"` } - perEduContHig.GraduationTime = graduationTime // 毕业时间"` - perEduContHig.Time = time.Now().Unix() // 写入时间"` + + perEduContHig.Time = time.Now().Unix() // 写入时间"` // highgree, _ := overallhandle.StringToInt(manCont.HighestAcademicDegree) highgree := hestacademicdegreeToInt(manCont.HighestAcademicDegree) perEduContHig.AcademicDegree = highgree @@ -1234,6 +1246,8 @@ func educatExperKingdeeNew(manKeyNum int64, manCont addKingdeePersonneles) { if entranceTimeFirst != perEduContFirst.AdmissionTime { eitdContFirst["admission_time"] = entranceTimeFirst } + } else { + eitdContFirst["admission_time"] = 0 } if manCont.FirstGraduationTime != "" { graduationTimeFirst, graduationTimeFirstErr := overallhandle.DateToTimeStamp(manCont.FirstGraduationTime) @@ -1243,6 +1257,8 @@ func educatExperKingdeeNew(manKeyNum int64, manCont addKingdeePersonneles) { if graduationTimeFirst != perEduContFirst.GraduationTime { eitdContFirst["graduation_time"] = graduationTimeFirst } + } else { + eitdContFirst["graduation_time"] = 0 } if len(eitdContFirst) > 0 { eitdContFirst["Time"] = time.Now().Unix() @@ -1275,8 +1291,11 @@ func educatExperKingdeeNew(manKeyNum int64, manCont addKingdeePersonneles) { if entranceTimeFirstErr == false { entranceTimeFirst, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.HighestAdmissionTime)) } + perEduContFirst.AdmissionTime = entranceTimeFirst // 入学时间"` + } else { + perEduContFirst.AdmissionTime = 0 // 入学时间"` } - perEduContFirst.AdmissionTime = entranceTimeFirst // 入学时间"` + graduationTimef := time.Now().Unix() if manCont.FirstGraduationTime != "" { graduationTimefErr := false @@ -1284,12 +1303,14 @@ func educatExperKingdeeNew(manKeyNum int64, manCont addKingdeePersonneles) { if graduationTimefErr == false { graduationTimef, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.FirstGraduationTime)) } + perEduContFirst.GraduationTime = graduationTimef // 毕业时间"` + } else { + perEduContFirst.GraduationTime = 0 // 毕业时间"` } // fmt.Printf("第一学历------>%v------>%v\n", graduationTimef, manCont.FirstGraduationTime) - perEduContFirst.GraduationTime = graduationTimef // 毕业时间"` - perEduContFirst.Time = time.Now().Unix() // 写入时间"` + perEduContFirst.Time = time.Now().Unix() // 写入时间"` // fitAcmicDgree, _ := overallhandle.StringToInt(manCont.FirstAcademicDegree) fitAcmicDgree := hestacademicdegreeToInt(manCont.FirstAcademicDegree) perEduContFirst.AcademicDegree = fitAcmicDgree diff --git a/api/version1/personnelapi/mancont.go b/api/version1/personnelapi/mancont.go index e125e9c..2906fb2 100644 --- a/api/version1/personnelapi/mancont.go +++ b/api/version1/personnelapi/mancont.go @@ -241,11 +241,13 @@ func (s *StaffApi) EditManMainCont(c *gin.Context) { if requestData.Isveterans == 0 { requestData.Isveterans = 2 } - + /* + 查询主信息 + */ wheAry := overallhandle.MapOut() wheAry["`id`"] = requestData.Id var myCont models.PersonArchives - err := myCont.GetCont(wheAry, "`key`", "`number`") + err := myCont.GetCont(wheAry, "`key`", "`number`", "`wechat`", "`work_wechat`", "`hire_class`", "`emp_type`") if err != nil { overallhandle.Result(1, err, c, "该人员不存在!请核对后再提交!") return @@ -270,6 +272,7 @@ func (s *StaffApi) EditManMainCont(c *gin.Context) { } wheAryEs := overallhandle.MapOut() wheAryEs["`key`"] = myCont.Key + var myInfo models.PersonnelContent err = myInfo.GetCont(wheAryEs) if err != nil { diff --git a/api/version1/personnelapi/staff.go b/api/version1/personnelapi/staff.go index f100724..b0c4ac4 100644 --- a/api/version1/personnelapi/staff.go +++ b/api/version1/personnelapi/staff.go @@ -1453,8 +1453,8 @@ func (s *StaffApi) EditPassWord(c *gin.Context) { //判断工号是存在 whereAry := overallhandle.MapOut() whereAry["`key`"] = requestData.Id - if judgeNoErr := staffInfo.GetCont(whereAry, "`key`"); judgeNoErr == nil { - overallhandle.Result(1, requestData, c, "该工号已经被使用!请不要重复使用!") + if judgeNoErr := staffInfo.GetCont(whereAry, "`key`"); judgeNoErr != nil { + overallhandle.Result(107, requestData, c) return } //密码加密 diff --git a/api/version1/personnelapi/staffarchives.go b/api/version1/personnelapi/staffarchives.go index 945ad5d..7735de9 100644 --- a/api/version1/personnelapi/staffarchives.go +++ b/api/version1/personnelapi/staffarchives.go @@ -909,6 +909,7 @@ func (s *StaffApi) AddEducationalExperience(c *gin.Context) { eduCation = 1 } emerContCont.Education = eduCation + emerContCont.EducationCn = overallhandle.DucationToInt(eduCation) emerContCont.GraduationSchool = v.GraduationSchool emerContCont.Subject = v.Subject entranceTimeFirst := time.Now().Unix() @@ -927,6 +928,18 @@ func (s *StaffApi) AddEducationalExperience(c *gin.Context) { acaLeve = 1 } emerContCont.AcademicDegree = acaLeve + switch acaLeve { + case 2: + emerContCont.AcademicDegreeCn = "学士" + case 3: + emerContCont.AcademicDegreeCn = "硕士" + case 4: + emerContCont.AcademicDegreeCn = "博士" + case 5: + emerContCont.AcademicDegreeCn = "教育学学位" + default: + emerContCont.AcademicDegreeCn = "无" + } emerContCont.Time = time.Now().Unix() //创建时间"` emerContCont.State = 1 //状态(1:启用;2:禁用;3:删除)"` emerContCont.Key = keyInt // @@ -986,6 +999,7 @@ func (s *StaffApi) EditEducationalExperience(c *gin.Context) { } if requestData.Education != 0 && requestData.Education != enerCont.Education { saveData["education"] = requestData.Education + saveData["education_cn"] = overallhandle.DucationToInt(requestData.Education) } if requestData.AdmissionTime != "" { @@ -1006,6 +1020,19 @@ func (s *StaffApi) EditEducationalExperience(c *gin.Context) { acaLeve, _ := strconv.Atoi(requestData.AcademicDegree) if acaLeve != enerCont.AcademicDegree { saveData["academic_degree"] = acaLeve + switch acaLeve { + case 2: + saveData["academic_degree_cn"] = "学士" + case 3: + saveData["academic_degree_cn"] = "硕士" + case 4: + saveData["academic_degree_cn"] = "博士" + case 5: + saveData["academic_degree_cn"] = "教育学学位" + default: + saveData["academic_degree_cn"] = "无" + } + } } @@ -1368,7 +1395,7 @@ func (s *StaffApi) AddInsideHistory(c *gin.Context) { if requestData.EndTime != "" && requestData.EndTime != "0" && requestData.EndTime != "至今" { endTime, endErr := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", requestData.EndTime)) if endErr == true { - insiderHistoryWork.StartTime = endTime + insiderHistoryWork.EndTime = endTime } } teamIdInt, _ := strconv.ParseInt(requestData.Team, 10, 64) @@ -1377,6 +1404,8 @@ func (s *StaffApi) AddInsideHistory(c *gin.Context) { insiderHistoryWork.Time = time.Now().Unix() insiderHistoryWork.State = 1 insiderHistoryWork.AssignType = requestData.AssignType + jobIdInt, _ := strconv.ParseInt(requestData.JobId, 10, 64) + insiderHistoryWork.JobId = jobIdInt addErr := overall.CONSTANT_DB_HR.Create(&insiderHistoryWork).Error if addErr != nil { overallhandle.Result(104, addErr, c) @@ -1627,8 +1656,15 @@ func (s *StaffApi) PersonnelEducationList(c *gin.Context) { cont.State = v.State // 状态(1:启用;2:禁用;3:删除)"` cont.AcademicDegreeCn = v.AcademicDegreeCn //学位中文说明"` cont.EducationCn = v.EducationCn //学历中文说明"` - cont.AdmissionTimeStr = overallhandle.UnixTimeToDay(v.AdmissionTime, 14) - cont.GraduationTimeStr = overallhandle.UnixTimeToDay(v.GraduationTime, 14) + if v.AdmissionTime != 0 { + cont.AdmissionTimeStr = overallhandle.UnixTimeToDay(v.AdmissionTime, 14) + } + if v.GraduationTime != 0 { + cont.GraduationTimeStr = overallhandle.UnixTimeToDay(v.GraduationTime, 14) + } else { + cont.GraduationTimeStr = "至今" + } + list = append(list, cont) } overallhandle.Result(0, list, c) @@ -1772,18 +1808,30 @@ func (s *StaffApi) WeChatGiveUsCont(c *gin.Context) { redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS5) redisClient.SetRedisTime(10800) redisClient.HashMsetAdd(redisFileKey, writeRedisData) + + groupId, companyId, departmentId, sunDepartId, workShopId := overallhandle.GetOrgStructure(userCont.AdminOrg) + fmt.Printf("groupId----->%v\ncompanyId----->%v\ndepartmentId----->%v\nsunDepartId----->%v\nworkShopId----->%v\n", groupId, companyId, departmentId, sunDepartId, workShopId) + var sunmaindeparment int64 + + if companyId != sunDepartId { + sunmaindeparment = sunDepartId + } + //缓存写入个人信息 redisMyContKey := fmt.Sprintf("ScanCode:Authentication:UserCont_%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, userCont.Number) myCont := overallhandle.MapOut() myCont["id"] = userCont.Id - myCont["number"] = userCont.Number //员工工号 - myCont["name"] = userCont.Name //姓名 - myCont["icon"] = userCont.Icon //头像 - myCont["hireclass"] = userCont.HireClass //雇佣类型(1:雇佣入职;2:再入职;) - myCont["emptype"] = userCont.EmpType //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职) - myCont["company"] = userCont.Company //入职公司 - myCont["maindeparment"] = userCont.MainDeparment //主部门 - myCont["sunmaindeparment"] = userCont.SunMainDeparment //二级主部门 + myCont["number"] = userCont.Number //员工工号 + myCont["name"] = userCont.Name //姓名 + myCont["icon"] = userCont.Icon //头像 + myCont["hireclass"] = userCont.HireClass //雇佣类型(1:雇佣入职;2:再入职;) + myCont["emptype"] = userCont.EmpType //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职) + myCont["company"] = userCont.Company //入职公司 + // myCont["maindeparment"] = userCont.MainDeparment //主部门 + // myCont["sunmaindeparment"] = userCont.SunMainDeparment //二级主部门 + myCont["maindeparment"] = companyId //主部门 + myCont["sunmaindeparment"] = sunmaindeparment //二级主部门 + myCont["deparment"] = userCont.Deparment //部门 myCont["adminorg"] = userCont.AdminOrg //所属行政组织 myCont["teamid"] = userCont.TeamId //班组 @@ -1826,7 +1874,16 @@ func (s *StaffApi) WeChatGiveUsCont(c *gin.Context) { myCont["political_outlook"] = userCont.PoliticalOutlook //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员) redisClient.HashMsetAdd(redisMyContKey, myCont) - // fmt.Printf("redisMyContKey------Login----->%v\n", redisMyContKey) + var sendKpiCont WriteIderCont + sendKpiCont.Openid = requestData.OpenId + sendKpiCont.Key = userKeyCode + sendKpiCont.Token = sha1Token + sendKpiCont.UserInfo.Key = strconv.FormatInt(userCont.Key, 10) + sendKpiCont.UserInfo.Number = userCont.Number + sendKpiCont.UserInfo.Password = userCont.Password + sendDate, _ := json.Marshal(sendKpiCont) + sdff := overallhandle.CurlPostJosn("http://kpi.hxgk.group/kpiapi/empower/write_token", sendDate) + fmt.Printf("redisMyContKey------Login----->%v----->%v\n", string(sdff), string(sendDate)) overallhandle.Result(0, saveData, c) // return @@ -2175,6 +2232,7 @@ func (s *StaffApi) GetArchivesCon(c *gin.Context) { ruleCont.GetCont(map[string]interface{}{"`id`": satffCont.Ruleid}, "`name`") staffCenter.RuleId = strconv.FormatInt(satffCont.Ruleid, 10) staffCenter.RuleName = ruleCont.Name + staffCenter.KeyStr = strconv.FormatInt(satffCont.Key, 10) if satffCont.ResponsibleDepartmentJson != "" { jsonErr := json.Unmarshal([]byte(satffCont.ResponsibleDepartmentJson), &staffCenter.OrgresList) fmt.Printf("satffCont---------->%v---------->%v---------->%v\n", satffCont.ResponsibleDepartmentJson, satffCont, jsonErr) @@ -2717,10 +2775,13 @@ func (s *StaffApi) ArchivesListWai(c *gin.Context) { if requestData.Position != 0 { gormDb = gormDb.Where("position = ?", requestData.Position) } + // if requestData.EmpType != 0 { + // gormDb = gormDb.Where("emp_type = ?", requestData.EmpType) + // } else { + // gormDb = gormDb.Where("emp_type BETWEEN ? AND ?", 1, 10) + // } if requestData.EmpType != 0 { gormDb = gormDb.Where("emp_type = ?", requestData.EmpType) - } else { - gormDb = gormDb.Where("emp_type BETWEEN ? AND ?", 1, 10) } if requestData.Role != "" { gormDb = gormDb.Where("FIND_IN_SET(?,`role`)", requestData.Role) @@ -2813,3 +2874,129 @@ func (s *StaffApi) ArchivesListWai(c *gin.Context) { overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c) } } + +/* +* +@ 作者: 秦东 +@ 时间: 2023-06-14 13:34:27 +@ 功能: 人员档案列表 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) ArchivesListCont(c *gin.Context) { + var requestData ArchivesSearch + c.ShouldBindJSON(&requestData) + if requestData.Page < 0 { + requestData.Page = 1 + } + if requestData.PageSize < 0 { + requestData.PageSize = 10 + } + if requestData.Right == 0 { + requestData.Right = 1 + } + + gormDb := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`").Where("`number` NOT LIKE ?", "%W%") + if requestData.KeyWords != "" { + gormDb = gormDb.Where("number LIKE ? OR name LIKE ?", "%"+requestData.KeyWords+"%", "%"+requestData.KeyWords+"%") + } + + 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 len(requestData.Emptype) > 0 { + gormDb = gormDb.Where("emp_type IN ?", requestData.Emptype) + } else { + if requestData.Right != 1 { + gormDb = gormDb.Where("emp_type BETWEEN ? AND ?", 11, 14) + } else { + gormDb = gormDb.Where("emp_type BETWEEN ? AND ?", 1, 10) + } + } + + var total int64 + totalErr := gormDb.Count(&total).Error + if totalErr != nil { + total = 0 + } + var idAry []int64 + err := gormDb.Order("company ASC,maindeparment ASC,admin_org ASC,position ASC").Limit(requestData.PageSize).Offset(overallhandle.LimitPage(requestData.Page, requestData.PageSize)).Find(&idAry).Error + var positionAry []peopleManOutList + if err != nil { + 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 { + overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c) + return + } + for _, v := range manContList { + var staffInfo peopleManOutList + staffInfo.ManCont = v + var getSpur models.Position + getWhe := overallhandle.MapOut() + getWhe["id"] = v.Position + getSpur.GetCont(getWhe, "name", "person_in_charge") + staffInfo.PositionName = getSpur.Name + // staffInfo.PersonInCharge = getSpur.PersonInCharge + staffInfo.KeyStr = strconv.FormatInt(v.Key, 10) + //公司 + if v.Company != 0 { + var getSpurDepart models.AdministrativeOrganization + getWheDepart := overallhandle.MapOut() + getWheDepart["id"] = v.Company + getSpurDepart.GetCont(getWheDepart, "name") + staffInfo.CompanyName = getSpurDepart.Name + } + //主部门 + if v.MainDeparment != 0 { + var getSpurDepartMain models.AdministrativeOrganization + getWheDepartMain := overallhandle.MapOut() + getWheDepartMain["id"] = v.MainDeparment + getSpurDepartMain.GetCont(getWheDepartMain, "name") + staffInfo.MainDeparmentName = getSpurDepartMain.Name + } + //二级著部门 + if v.SunMainDeparment != 0 { + var sunMainDepart models.AdministrativeOrganization + sunMainDepart.GetCont(map[string]interface{}{"`id`": v.SunMainDeparment}, "`name`") + staffInfo.SunMainDeparmentName = sunMainDepart.Name + } + + 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(requestData.AdminOrg, 10) + if overallhandle.IsInTrue[string](orgIdStr, orgResList) == true { + staffInfo.PersonInCharge = 1 + } + } + } + + positionAry = append(positionAry, staffInfo) + + } + overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c) +} diff --git a/api/version1/personnelapi/type.go b/api/version1/personnelapi/type.go index 73f86c1..14bd5ab 100644 --- a/api/version1/personnelapi/type.go +++ b/api/version1/personnelapi/type.go @@ -288,6 +288,7 @@ type addKingdeePersonnel struct { // 人员档案详情 type staffArchivesCont struct { models.ManCont + KeyStr string `json:"keystr"` //唯一标识符 BirthdayTime string `json:"birthdaytime"` //生日 IdCardStartTimeData string `json:"idcardstarttimedata"` //身份证有效期开始时间 IdCardEndTimeData string `json:"idcardendtimedata"` //身份证有效期结束时间 @@ -541,3 +542,36 @@ type passwordCont struct { Password string `json:"password"` //密码1 v ConfirmPassword string `json:"confirmPassword"` // v } + +// 写入身份认证 +type WriteIderCont struct { + Openid string `json:"openid"` + Key string `json:"key"` + Token string `json:"token"` + UserInfo UserInfoCont `json:"userinfo"` +} + +// 人员信息 +type UserInfoCont struct { + Number string `json:"number"` + Password string `json:"password"` + Key string `json:"key"` +} + +// 档案列表参数 +type ArchivesSearch struct { + overallhandle.PageTurning + KeyWords string `json:"keywords"` //关键字 + AdminOrg int64 `json:"adminorg"` //行政组织 + Emptype []int `json:"emptype"` //用工关系 + Right int `json:"right"` //显示正常 +} + +// 输出行政组织关系 +type SendOrgAboutPeople struct { + models.InsideWorkHistory + OrgAllName string `json:"orgallname"` // + PostName string `json:"postname"` // + StartTimeStr string `json:"starttimeing"` // + EndTimeStr string `json:"endtimeing"` // +} diff --git a/api/version1/personnelapi/types.go b/api/version1/personnelapi/types.go index 1638b45..480ff0b 100644 --- a/api/version1/personnelapi/types.go +++ b/api/version1/personnelapi/types.go @@ -202,6 +202,7 @@ type EditOrgPeople struct { //编辑人员主体信息 type EditContData struct { Id string `json:"id"` + Name string `json:"name"` //姓名 Mobilephone string `json:"mobilephone"` //手机号码 Idcardno string `json:"idcardno"` //身份证号 Entrydatetime string `json:"entrydatetime"` //入职日期 diff --git a/api/version1/shiyan/shiyan.go b/api/version1/shiyan/shiyan.go index 509b2d1..9c9de5f 100644 --- a/api/version1/shiyan/shiyan.go +++ b/api/version1/shiyan/shiyan.go @@ -4,7 +4,7 @@ import ( "fmt" "hr_server/api/jindie_docking/dockingorganization" "hr_server/api/version1/personnelapi" - "hr_server/middleware/snowflake" + "hr_server/grocerystore" "hr_server/models" "hr_server/overall" "hr_server/overall/overallhandle" @@ -294,14 +294,23 @@ func (s *ShiYan) Shitu(c *gin.Context) { // var shituList []ShituType // err := overall.CONSTANT_DB_HR.Limit(20).Offset(21).Find(&shituList) // fmt.Printf("%v-----------%v\n", err, shituList) - + var req Sdfg + c.ShouldBindJSON(&req) out := overallhandle.MapOut() - node, err := snowflake.NewWorker(1) - fmt.Printf("node--------->%v\n", err) + groupId, companyId, departmentId, sunDepartId, workShopId := overallhandle.GetOrgStructure(req.Id) + sdee := overallhandle.RecursionOrgLeve(req.Id, 3) + // node, err := snowflake.NewWorker(1) + // fmt.Printf("node--------->%v\n", err) - out["node"] = node.GetId() - out["err "] = err + // out["node"] = node.GetId() + // out["err "] = err + out["groupId "] = groupId + out["companyId "] = companyId + out["departmentId "] = departmentId + out["sunDepartId "] = sunDepartId + out["workShopId "] = workShopId + out["sdee "] = sdee overallhandle.Result(0, out, c) } @@ -425,3 +434,148 @@ func (s *ShiYan) HandMovementOrgCont(c *gin.Context) { func (s *ShiYan) HandMovementPostCont(c *gin.Context) { dockingorganization.Position() } + +// 写入令牌 +func (a *ShiYan) WriteToken(c *gin.Context) { + var requestData WriteIderCont + err := c.ShouldBindJSON(&requestData) + fmt.Printf("err--->%v\n", err) + if err != nil { + overallhandle.Result(100, err, c) + return + } + fmt.Printf("requestData--->%v--->%v--->%v\n", requestData.Openid, requestData.Key, requestData.Token) + if requestData.Key == "" || requestData.Token == "" { + overallhandle.Result(101, err, c) + return + } + fmt.Printf("UserInfo--->%v--->%v--->%v\n", requestData.UserInfo.Number, requestData.UserInfo.Password, requestData.UserInfo.Key) + if requestData.UserInfo.Number == "" || requestData.UserInfo.Password == "" || requestData.UserInfo.Key == "" { + overallhandle.Result(101, err, c) + return + } + var userCont models.ManCont + err = userCont.GetCont(map[string]interface{}{"`number`": requestData.UserInfo.Number, "`key`": requestData.UserInfo.Key, "`password`": requestData.UserInfo.Password}) + fmt.Printf("err--1->%v\n", err) + if err != nil { + overallhandle.Result(105, err, c) + return + } + // if requestData.Openid != userCont.Wechat && requestData.Openid != userCont.WorkWechat { + // fmt.Printf("err--2->%v\n", err) + // overallhandle.Result(105, err, c) + // return + // } + + // _, pointId, operation, _ := overallhandle.GetNewAccredit("cangchu", userCont.Role, userCont.Key, userCont.AdminOrg, userCont.Position) + + saveData := overallhandle.MapOut() + saveData["key"] = requestData.Key + saveData["token"] = requestData.Token + saveData["userinfo"] = userCont + writeRedisData := map[string]interface{}{ + "userkey": requestData.Key, + "key": userCont.Key, + "usernumber": userCont.Number, + "userpwd": userCont.Password, + "usertoken": requestData.Token, + "jurisdiction": "", + "menuOper": "", + "wand": 118, + } + // var surisdictionStr []string + // var surisdictionInt []int64 + // jsonErr := json.Unmarshal([]byte(operation), &surisdictionStr) + // if jsonErr == nil { + // for _, jurVal := range surisdictionStr { + // jurValInt, jurValErr := strconv.ParseInt(jurVal, 10, 64) + // if jurValErr == nil { + // surisdictionInt = append(surisdictionInt, jurValInt) + // } + + // } + // } + // var menuOperStr []string + // var menuOperInts []int64 + // menuOperStr = strings.Split(pointId, ",") + // for _, menuOperVal := range menuOperStr { + // menuOperInt, menuOperErr := strconv.ParseInt(menuOperVal, 10, 64) + // if menuOperErr == nil { + // menuOperInts = append(menuOperInts, menuOperInt) + // } + + // } + // redisFileKey := "ScanCode:Authentication:LoginApi_" + global.GVA_CONFIG.RedisPrefix.Alias + "_" + userKeyCode + redisFileKey := fmt.Sprintf("ScanCode:Authentication:LoginApi_%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, requestData.Key) + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS5) + redisClient.SetRedisTime(10800) + redisClient.HashMsetAdd(redisFileKey, writeRedisData) + + //缓存写入个人信息 + redisMyContKey := fmt.Sprintf("ScanCode:Authentication:UserCont_%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, userCont.Number) + myCont := overallhandle.MapOut() + myCont["id"] = userCont.Id + myCont["number"] = userCont.Number //员工工号 + myCont["name"] = userCont.Name //姓名 + myCont["icon"] = userCont.Icon //头像 + myCont["hireclass"] = userCont.HireClass //雇佣类型(1:雇佣入职;2:再入职;) + myCont["emptype"] = userCont.EmpType //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职) + myCont["company"] = userCont.Company //入职公司 + myCont["maindeparment"] = userCont.MainDeparment //主部门 + myCont["sunmaindeparment"] = userCont.SunMainDeparment //二级主部门 + myCont["deparment"] = userCont.Deparment //部门 + myCont["adminorg"] = userCont.AdminOrg //所属行政组织 + myCont["teamid"] = userCont.TeamId //班组 + myCont["position"] = userCont.Position //职位 + myCont["jobclass"] = userCont.JobClass //职务分类 + myCont["jobid"] = userCont.JobId //职务 + myCont["jobleve"] = userCont.JobLeve //职务等级 + myCont["wechat"] = userCont.Wechat //微信UserId + myCont["workwechat"] = userCont.WorkWechat //企业微信UserId + myCont["state"] = userCont.State //状态(1:启用;2:禁用;3:删除) + myCont["key"] = userCont.Key //key + myCont["isadmin"] = userCont.IsAdmin //是否为管理员(1:不是;2:分公司;3:集团管理员;4:超级管 + myCont["password"] = userCont.Password //密码 + myCont["role"] = userCont.Role //角色 + myCont["idcardno"] = userCont.Idcardno //身份证号 + myCont["passportno"] = userCont.Passportno //护照号码 + myCont["globalroaming"] = userCont.Globalroaming //国际区号 + myCont["mobilephone"] = userCont.Mobilephone //手机号码 + myCont["email"] = userCont.Email //电子邮件 + myCont["gender"] = userCont.Gender //性别(1:男性;2:女性;3:中性) + myCont["birthday"] = userCont.Birthday //birthday + myCont["myfolk"] = userCont.Myfolk //民族 + myCont["nativeplace"] = userCont.Nativeplace //籍贯 + myCont["idcardstartdate"] = userCont.Idcardstartdate //身份证有效期开始 + myCont["idcardenddate"] = userCont.Idcardenddate //身份证有效期结束 + myCont["idcardaddress"] = userCont.Idcardaddress //身份证地址 + myCont["idcardIssued"] = userCont.IdcardIssued //身份证签发机关 + myCont["health"] = userCont.Health //健康状况(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废) + myCont["maritalstatus"] = userCont.Maritalstatus //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异) + myCont["internaltelephone"] = userCont.Internaltelephone //内线电话 + myCont["currentresidence"] = userCont.Currentresidence //现居住地址 + myCont["constellationing"] = userCont.Constellation //星座(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座) + myCont["isdoubleworker"] = userCont.Isdoubleworker //是否双职工(1:是;2:否) + myCont["isveterans"] = userCont.Isveterans //是否为退役军人(1:是;2:否) + myCont["veteransnumber"] = userCont.Veteransnumber //退役证编号 + myCont["jobstartdate"] = userCont.Jobstartdate //参加工作日期 + myCont["entrydate"] = userCont.Entrydate //入职日期 + myCont["probationperiod"] = userCont.Probationperiod //试用期 + myCont["planformaldate"] = userCont.Planformaldate //预计转正日期 + myCont["political_outlook"] = userCont.PoliticalOutlook //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员) + + var companyCont models.AdministrativeOrganization + companyCont.GetCont(map[string]interface{}{"`id`": userCont.Company}, "`name`") + myCont["companyname"] = companyCont.Name + var departmentCont models.AdministrativeOrganization + departmentCont.GetCont(map[string]interface{}{"`id`": userCont.MainDeparment}, "`name`") + myCont["maindeparmentname"] = departmentCont.Name + var postInfo models.Position + postInfo.GetCont(map[string]interface{}{"`id`": userCont.Position}, "`name`") + myCont["positionname"] = postInfo.Name + shjd := redisClient.HashMsetAdd(redisMyContKey, myCont) + + saveData["usercont"] = myCont + fmt.Printf("redisMyContKey------Login----->%v----->%v\n", redisMyContKey, shjd) + overallhandle.Result(0, saveData, c) +} diff --git a/api/version1/shiyan/type.go b/api/version1/shiyan/type.go index e94b763..55658c3 100644 --- a/api/version1/shiyan/type.go +++ b/api/version1/shiyan/type.go @@ -10,10 +10,10 @@ import ( var synPro = sync.WaitGroup{} -//人员API +// 人员API type ShiYan struct{} -//入口 +// 入口 func (s *ShiYan) Index(c *gin.Context) { outputCont := overallhandle.MapOut() outputCont["index"] = "实验API" @@ -25,12 +25,12 @@ type Jieshou struct { ProbationPeriod int `json:"probationperiod"` //试用期(月) } -//输出知行学院的人员信息 +// 输出知行学院的人员信息 type schoolUser struct { models.WorkMan } -//输出迁移组织架构 +// 输出迁移组织架构 type outOrgCont struct { Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` Superior int64 `json:"superior" gorm:"column:superior;type:bigint(20) unsigned;default:0;not null;comment:上级ID"` @@ -43,14 +43,14 @@ type peopleQianyi struct { mutext sync.RWMutex } -//读取锁数据 +// 读取锁数据 func (d *peopleQianyi) readMyDayData() ([]models.Personnel, []models.PersonnelContent) { d.mutext.RLock() defer d.mutext.RUnlock() return d.dataMap, d.userAll } -//职务相关 +// 职务相关 type jobAttber struct { Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` Number string `json:"number" gorm:"column:number;type:varchar(255) unsigned;default:'';not null;comment:编号"` @@ -76,3 +76,22 @@ type ShituType struct { func (ShituType *ShituType) TableName() string { return "orglist" } + +// 写入身份认证 +type WriteIderCont struct { + Openid string `json:"openid"` + Key string `json:"key"` + Token string `json:"token"` + UserInfo UserInfoCont `json:"userinfo"` +} + +// 人员信息 +type UserInfoCont struct { + Number string `json:"number"` + Password string `json:"password"` + Key string `json:"key"` +} + +type Sdfg struct { + Id int64 `json:"id"` +} diff --git a/apirouter/organization/organization_group.go b/apirouter/organization/organization_group.go index 5713f05..415a068 100644 --- a/apirouter/organization/organization_group.go +++ b/apirouter/organization/organization_group.go @@ -14,34 +14,45 @@ func (o *OrganizationRoute) InitRouterGroup(route *gin.RouterGroup) { apiRouter.GET("", apiHandle.Index) //入口 apiRouter.POST("", apiHandle.Index) //入口 //职务分类路由 - apiRouter.POST("adddutiesclass", apiHandle.AddDutiesClass) //添加职务分类 - apiRouter.POST("utiesclasslist", apiHandle.DutiesClassList) //职务分类列表 - apiRouter.POST("getutiesclassinfo", apiHandle.GetDutiesClassInfo) //获取职务分类详情 - apiRouter.POST("eiteutiesclassinfo", apiHandle.EiteDutiesClassInfo) //修改职务分类详情 - apiRouter.POST("delutiesclassinfo", apiHandle.DelDutiesClassInfo) //删除职务分类 + apiRouter.POST("adddutiesclass", apiHandle.AddDutiesClass) //添加职务分类 + apiRouter.POST("utiesclasslist", apiHandle.DutiesClassList) //职务分类列表 + apiRouter.POST("getutiesclassinfo", apiHandle.GetDutiesClassInfo) //获取职务分类详情 + apiRouter.POST("eiteutiesclassinfo", apiHandle.EiteDutiesClassInfo) //修改职务分类详情 + apiRouter.POST("neweiteutiesclassinfo", apiHandle.NewEiteDutiesClassInfo) //修改职务分类详情(新) + apiRouter.POST("delutiesclassinfo", apiHandle.DelDutiesClassInfo) //删除职务分类 + apiRouter.POST("editdutiesclassstatus", apiHandle.EditDutiesClassStatus) //编辑职务分类状态或删除 //职务路由 - apiRouter.POST("dutieslist", apiHandle.DutiesList) //职务列表 - apiRouter.POST("getdutiescont", apiHandle.GetDutiesCont) //获取职务详情 - apiRouter.POST("adddutiescont", apiHandle.AddDutiesCont) //添加职务 - apiRouter.POST("eitedutiescont", apiHandle.EiteDutiesInfo) //编辑职务 - apiRouter.POST("eitedutiesstatordel", apiHandle.EiteDutiesStatOrDel) //编辑职务状态或删除 + apiRouter.POST("dutieslist", apiHandle.DutiesList) //职务列表 + apiRouter.POST("getdutiescont", apiHandle.GetDutiesCont) //获取职务详情 + apiRouter.POST("adddutiescont", apiHandle.AddDutiesCont) //添加职务 + apiRouter.POST("eitedutiescont", apiHandle.EiteDutiesInfo) //编辑职务 + apiRouter.POST("eitedutiesstatordel", apiHandle.EiteDutiesStatOrDel) //编辑职务状态或删除 + apiRouter.POST("editordeldutiesstatus", apiHandle.EditOrDelDutiesStatus) //编辑状态或删除职务信息 //行政组织类型 - apiRouter.POST("govclasslist", apiHandle.GovClassList) //行政组织类型列表 - apiRouter.POST("getgovclasscont", apiHandle.GetGovClassCont) //获取行政组织类型 - apiRouter.POST("addgovclass", apiHandle.AddGovClass) //添加行政组织类型 - apiRouter.POST("eitegovclasscont", apiHandle.EiteGovClassCont) //编辑行政组织类型 - apiRouter.POST("eitegovclassstateordel", apiHandle.EiteGovClassStateOrDel) //编辑行政组织类型状态或删除 + apiRouter.POST("govclasslist", apiHandle.GovClassList) //行政组织类型列表 + apiRouter.POST("govclassalllist", apiHandle.GovClassAllList) //行政组织类型列表(全) + apiRouter.POST("getgovclasscont", apiHandle.GetGovClassCont) //获取行政组织类型 + apiRouter.POST("addgovclass", apiHandle.AddGovClass) //添加行政组织类型 + apiRouter.POST("eitegovclasscont", apiHandle.EiteGovClassCont) //编辑行政组织类型 + apiRouter.POST("eitegovclassstateordel", apiHandle.EiteGovClassStateOrDel) //编辑行政组织类型状态或删除 + apiRouter.POST("base_edit_orgclass_status", apiHandle.BaseEditOrgClassStatus) //批量编辑组织分类状态或删除 //行政组织 - apiRouter.POST("govlist", apiHandle.GovList) //行政组织列表 - apiRouter.POST("getgovcont", apiHandle.GetGovCont) //获取行政组织 - apiRouter.POST("addgovcont", apiHandle.AddGovCont) //添加行政组织 - apiRouter.POST("eitegovcont", apiHandle.EiteGovCont) //编辑行政组织 - apiRouter.POST("eitegovstateordel", apiHandle.EiteGovStateOrDel) //编辑行政组织状态或删除 + apiRouter.POST("govlist", apiHandle.GovList) //行政组织列表 + apiRouter.POST("getgovcont", apiHandle.GetGovCont) //获取行政组织 + apiRouter.POST("addgovcont", apiHandle.AddGovCont) //添加行政组织 + apiRouter.POST("eitegovcont", apiHandle.EiteGovCont) //编辑行政组织 + apiRouter.POST("neweitegovcont", apiHandle.NewEiteGovCont) //编辑行政组织(新) + apiRouter.POST("eitegovstateordel", apiHandle.EiteGovStateOrDel) //编辑行政组织状态或删除 + apiRouter.POST("neweitegovstateordel", apiHandle.NewEiteGovStateOrDel) //编辑行政组织状态或删除(新) + + apiRouter.POST("newaddgovcont", apiHandle.NewAddGovCont) //添加行政组织 apiRouter.POST("govthree", apiHandle.GovThree) //行政组织树 apiRouter.POST("govthreeing", apiHandle.GovThreeIng) //行政组织树(副本) apiRouter.POST("getorgallsun", apiHandle.GetOrgAllSun) //获取当前行政组织的所有子类 + apiRouter.POST("govnewthreeing", apiHandle.GovNewThreeIng) //行政组织树(新副本) + apiRouter.POST("govthreeaboutman", apiHandle.GovThreeAboutMan) //行政组织树及相关人员 apiRouter.POST("search_org_people", apiHandle.SearchOrgAndPeople) //角色组织与人员搜索列表 @@ -52,6 +63,7 @@ func (o *OrganizationRoute) InitRouterGroup(route *gin.RouterGroup) { apiRouter.POST("getcompanydeparment", apiHandle.GetCompanyDeparment) //获取当前行政组织的所有主行政部门 apiRouter.POST("basis_org_obtain_sonorg_and_man", apiHandle.BasisOrgObtainSonOrgAndMan) //根据行政组织编号获取组织及人员 + apiRouter.POST("basis_org_all_people", apiHandle.BasisOrgAllPeople) //根据行政组织编号获取全部人员 apiRouter.POST("getappointorg", apiHandle.GetAppointOrg) //获取指定行政组织列表 //职位(岗位) @@ -64,9 +76,12 @@ func (o *OrganizationRoute) InitRouterGroup(route *gin.RouterGroup) { apiRouter.POST("eitepositionstateordel", apiHandle.EitePositionStateOrDel) //编辑职位(岗位)状态或删除 apiRouter.POST("getpositionrole", apiHandle.GetPositionRole) //岗位(职位)配权 GetPositionRole - apiRouter.POST("basis_org_postList", apiHandle.BasisOrgGetPostList) //根据行政组织获取岗位 - apiRouter.POST("addpositioncontnew", apiHandle.AddPositionContNew) //添加职位(岗位)新版 - apiRouter.POST("get_my_posit_list", apiHandle.GetMyPositionList) //获取本岗位下的职位(岗位)列表不包含子行政组织 + apiRouter.POST("basis_org_postList", apiHandle.BasisOrgGetPostList) //根据行政组织获取岗位 + apiRouter.POST("addpositioncontnew", apiHandle.AddPositionContNew) //添加职位(岗位)新版 + apiRouter.POST("get_my_posit_list", apiHandle.GetMyPositionList) //获取本岗位下的职位(岗位)列表不包含子行政组织 + apiRouter.POST("addpositioncontpublic", apiHandle.AddPositionContPublic) //添加岗位平台通用 + apiRouter.POST("editpositioncontpublic", apiHandle.EditPositionContPublic) //编辑岗位平台通用 + apiRouter.POST("basedelpostcont", apiHandle.BaseDelPostCont) //批量删除岗位 apiRouter.POST("positionpeoplelist", apiHandle.PositionPeopleList) //职位(岗位)列表及相关人员 @@ -115,6 +130,10 @@ func (o *OrganizationRouteOpen) InitRouterGroup(route *gin.RouterGroup) { apiRouter.POST("eitegovcont", apiHandle.EiteGovCont) //编辑行政组织 apiRouter.POST("eitegovstateordel", apiHandle.EiteGovStateOrDel) //编辑行政组织状态或删除 + apiRouter.POST("neweitegovstateordel", apiHandle.NewEiteGovStateOrDel) //编辑行政组织状态或删除(新) + + apiRouter.POST("newaddgovcont", apiHandle.NewAddGovCont) //添加行政组织 + apiRouter.POST("govthree", apiHandle.GovThree) //行政组织树 apiRouter.POST("getorgallsun", apiHandle.GetOrgAllSun) //获取当前行政组织的所有子类 diff --git a/apirouter/personnel/people.go b/apirouter/personnel/people.go index e94e663..225a650 100644 --- a/apirouter/personnel/people.go +++ b/apirouter/personnel/people.go @@ -18,11 +18,14 @@ func (p *PersonnelRoute) InitRouterGroup(route *gin.RouterGroup) { apiRouter.POST("allocationofrights", apiHandle.AllocationOfRights) //分配权限 // apiRouter.POST("archiveslist", apiHandle.ArchivesList) //人员列表(新) apiRouter.POST("archiveslist", apiHandle.ArchivesListWai) //人员列表(新) + apiRouter.POST("archiveslistcont", apiHandle.ArchivesListCont) //人员档案列表(平台用) apiRouter.POST("archivescont", apiHandle.ArchivesCon) //个人档案 apiRouter.POST("kingdeehr", apiHandle.NewKingdee) //对接金蝶HR系统 apiRouter.POST("editpassword", apiHandle.EditPassWord) //修改密码 apiRouter.POST("wechat_give_uscont", apiHandle.WeChatGiveUsCont) //根据微信OpenId获取个人档案 apiRouter.POST("edit_us_wechat_openid", apiHandle.EditUsWechatOpenId) //修改员工微信或企业微信UserId + + apiRouter.POST("useraboutorglist", apiHandle.UserAboutOrgList) //行政组织关系 //双职工 apiRouter.POST("doubleworkerlist", apiHandle.DoubleWorkerList) //双职工列表 apiRouter.POST("adddoubleworker", apiHandle.AddDoubleWorkerApi) //添加双职工 diff --git a/apirouter/shiyanrouter/shiyan.go b/apirouter/shiyanrouter/shiyan.go index 14f8c8e..2683e57 100644 --- a/apirouter/shiyanrouter/shiyan.go +++ b/apirouter/shiyanrouter/shiyan.go @@ -23,5 +23,7 @@ func (p *ShiyanApiRouter) InitRouterGroup(route *gin.RouterGroup) { apiRouter.POST("hand_movement_job", apiHandle.HandMovementJob) //手动同步职务类型 apiRouter.POST("hand_movement_orgcont", apiHandle.HandMovementOrgCont) //手动同步行政组织 apiRouter.POST("hand_movement_postcont", apiHandle.HandMovementPostCont) //手动同步职位 + + apiRouter.POST("write_token", apiHandle.WriteToken) //写入令牌 } } diff --git a/hr_server.exe b/hr_server.exe index 0cf5221..68838db 100644 Binary files a/hr_server.exe and b/hr_server.exe differ diff --git a/models/hrmodels/orgcont.go b/models/hrmodels/orgcont.go new file mode 100644 index 0000000..0f172f2 --- /dev/null +++ b/models/hrmodels/orgcont.go @@ -0,0 +1,71 @@ +package hrmodels + +import ( + "hr_server/overall" + "strings" +) + +// 行政组织内哦他那个 +type OrgCont struct { + Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` + Number string `json:"number" gorm:"column:number;type:varchar(50) unsigned;default:'';not null;comment:行政编码"` + Name string `json:"name" gorm:"column:name;type:varchar(255) unsigned;default:'';not null;comment:组织名称"` + Superior int64 `json:"superior" gorm:"column:superior;type:bigint(20) unsigned;default:0;not null;comment:上级ID"` + OrganizationType int64 `json:"organizationtype" gorm:"column:organization_type;type:bigint(20) unsigned;default:0;not null;comment:行政组织类型"` + Abbreviation string `json:"abbreviation" gorm:"column:abbreviation;type:varchar(255) unsigned;default:'';not null;comment:行政组织简称"` + Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` + State int `json:"state" gorm:"column:state;type:int(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)"` + WechatOrganizationId int64 `json:"wechatorganizationid" gorm:"column:wechat_organization_id;type:bigint(20) unsigned;default:0;not null;comment:微信组织架构对照码"` + SuperiorSun string `json:"superiorsun" gorm:"column:superior_sun;type:mediumtext;comment:级联ID"` + 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:排序"` + TypeName string `json:"typeName" gorm:"column:type_name;type:varchar(255) unsigned;default:'';not null;comment:类型名称"` + Level int64 `json:"level" gorm:"column:level;type:int(5) unsigned;default:1;not null;comment:级别"` +} + +func (OrgCont *OrgCont) TableName() string { + return "org_cont" +} + +// 编辑内容 +func (cont *OrgCont) EiteCont(whereMap interface{}, saveData interface{}) (err error) { + err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error + return +} + +// 获取内容 +func (cont *OrgCont) GetCont(whereMap interface{}, field ...string) (err error) { + gormDb := overall.CONSTANT_DB_HR.Model(&cont) + if len(field) > 0 { + fieldStr := strings.Join(field, ",") + gormDb = gormDb.Select(fieldStr) + } + gormDb = gormDb.Where(whereMap) + err = gormDb.First(&cont).Error + return +} + +// 根据条件获取总数 +func (cont *OrgCont) CountCont(whereMap interface{}) (countId int64) { + overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId) + return +} + +// 读取全部信息 +func (cont *OrgCont) ContMap(whereMap interface{}, field ...string) (countAry []OrgCont, err error) { + gormDb := overall.CONSTANT_DB_HR.Model(&cont) + if len(field) > 0 { + fieldStr := strings.Join(field, ",") + gormDb = gormDb.Select(fieldStr) + } + err = gormDb.Where(whereMap).Find(&countAry).Error + return +} + +// 删除内容 +func (cont *OrgCont) DelCont(whereMap interface{}) (err error) { + err = overall.CONSTANT_DB_HR.Where(whereMap).Delete(&cont).Error + return +} diff --git a/overall/app_constant.go b/overall/app_constant.go index 5f9e820..5a02c5c 100644 --- a/overall/app_constant.go +++ b/overall/app_constant.go @@ -7,5 +7,6 @@ var ( ConfigRedisConstant = "./config/configNosql/redis.yaml" EmployeeStatusIng = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职) EmployeeStatusOld = []int{11, 12, 13, 14} //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职) - DockingKingdeeUrl = "http://36.134.44.40:18888" + // DockingKingdeeUrl = "http://36.134.44.40:18888" + DockingKingdeeUrl = "http://36.133.124.113:18888" ) diff --git a/overall/overallhandle/overall_handle.go b/overall/overallhandle/overall_handle.go index 45d6795..c133ee7 100644 --- a/overall/overallhandle/overall_handle.go +++ b/overall/overallhandle/overall_handle.go @@ -10,8 +10,10 @@ import ( "hr_server/middleware/snowflake" "hr_server/models" "hr_server/overall" + "io/ioutil" "math" "math/big" + "net/http" "strconv" "time" @@ -726,12 +728,15 @@ func RecursionOrgLeve(superior int64, leve int64) (groupId int64) { if leve == 0 { leve = 1 } + if superior == 0 { + return + } 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 || (orgMap.Level == 5 && leve == 4 && (orgMap.Id == 282 || orgMap.Id == 115)) { if orgMap.Level == leve { groupId = superior } else { @@ -749,6 +754,9 @@ func RecursionOrgLeveEs(oldId, superior, leve int64) (groupId int64) { if leve == 0 { leve = 1 } + if superior == 0 { + return + } var orgMap models.OrgContType err := orgMap.GetCont(map[string]interface{}{"`id`": superior, "`state`": 1}, "`id`", "`superior`", "`level`") if err != nil { @@ -775,6 +783,7 @@ func GetOrgStructure(orgId int64) (groupId, companyId, departmentId, sunDepartId if err != nil { return } + fmt.Printf("获取集团属性--->%v\n", orgContTypeInfo.Level) switch orgContTypeInfo.Level { case 1: groupId = orgContTypeInfo.Id @@ -794,7 +803,7 @@ func GetOrgStructure(orgId int64) (groupId, companyId, departmentId, sunDepartId departmentId = RecursionOrgLeve(orgContTypeInfo.Superior, 4) sunDepartId = orgContTypeInfo.Id case 6: - groupId = RecursionOrgLeve(orgContTypeInfo.Superior, 2) + groupId = RecursionOrgLeve(orgContTypeInfo.Superior, 1) companyId = RecursionOrgLeve(orgContTypeInfo.Superior, 3) departmentId = RecursionOrgLeve(orgContTypeInfo.Superior, 4) sunDepartId = RecursionOrgLeve(orgContTypeInfo.Superior, 5) @@ -846,6 +855,28 @@ func (a *AllSunList[int64]) GetAllSunOrg(superior int64) (err error) { return } +// 获取行政组织所有上级 +func (a *AllSunList[int64]) GetAllFatherOrg(superior int64) (err error) { + var orgAry []models.AdministrativeOrganization + err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`,`superior`").Where("`id` = ?", superior).Find(&orgAry).Error + if err != nil { + if IsInTrue[int64](superior, a.SunList) == false { + a.SunList = append(a.SunList, superior) + } + return + } + for _, v := range orgAry { + // var idInt int64 + idInt := int64(v.Id) + if IsInTrue[int64](idInt, a.SunList) == false { + a.SunList = append(a.SunList, idInt) + } + supId := int64(v.Superior) + a.GetAllSunOrg(supId) + } + return +} + //浮点数保留小数 /* @value 浮点数值 @@ -942,3 +973,87 @@ func (a *AllSunList[int64]) GetAllParentOrg(superior int64, level int) (err erro a.GetAllParentOrg(idInt, level) return } + +// Post请求 json +func CurlPostJosn(postUrl string, jsonData []byte) []byte { + req, err := http.NewRequest("POST", postUrl, bytes.NewBuffer(jsonData)) + if err != nil { + var kkl []byte + return kkl + } + req.Header.Set("Content-Type", "application/json;charset=utf-8") + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + panic(err) + } + defer resp.Body.Close() + body, _ := ioutil.ReadAll(resp.Body) + return body +} + +func NewGovThreeList(parentId int64, govAry []OutGovCont) []govThree { + var govMap []govThree + // fmt.Printf("govAry---------------->%v\n", govAry) + for _, v := range govAry { + // var zhucont govThree + + if v.Superior == parentId { + + child := GovThreeList(v.Id, govAry) + govMap = append(govMap, govThree{v, child}) + } + + } + return govMap +} +func DucationToInt(emp int) string { + switch emp { + case 1: + return "初中及以下" + case 2: + return "中专" + case 3: + return "高中" + case 4: + return "中技" + case 5: + return "高技" + case 6: + return "函授专科" + case 7: + return "专科" + case 8: + return "函授本科" + case 9: + return "本科" + case 10: + return "硕士" + case 11: + return "博士" + case 12: + return "专家、教授" + default: + return "初中及以下" + } +} + +// 学位(0:无;1:学士;2:硕士;3:博士;4:工学学士;5:教育学学位)int +func HestacademicdegreeToInt(hir string) int { + switch hir { + case "学士": + return 1 + case "硕士": + return 2 + case "博士": + return 3 + case "学士学位": + return 1 + case "工学学士": + return 4 + case "教育学学位": + return 5 + default: + return 0 + } +} diff --git a/overall/overallhandle/type.go b/overall/overallhandle/type.go index 72c9bb6..2d444a7 100644 --- a/overall/overallhandle/type.go +++ b/overall/overallhandle/type.go @@ -29,6 +29,10 @@ type StateOverall struct { State int `json:"state"` //状态 } +type NameOverall struct { + Name string `json:"name"` //编码 +} + //状态 type NmuberOverall struct { Number string `json:"number"` //编码 @@ -47,6 +51,7 @@ type OutGovCont struct { ClassName string `json:"classname" gorm:"column:classname;type:varchar(255) unsigned;default:'';not null;comment:行政组织分类名称"` Level int64 `json:"level" gorm:"column:level;type:int(5) unsigned;default:1;not null;comment:级别"` IsMan int `json:"isman"` //1:行政组织;2:人 + Status bool `json:"status"` } //组织架构树