package administrativeorganization import ( "encoding/json" "fmt" "hr_server/models" "hr_server/overall" "hr_server/overall/overallhandle" "strconv" "time" "github.com/gin-gonic/gin" ) // 职位(岗位)列表 func (o *OrganizationApi) PositionList(c *gin.Context) { var requestData lookPositionList c.ShouldBindJSON(&requestData) if requestData.Page < 0 { requestData.Page = 1 } if requestData.PageSize < 0 { requestData.PageSize = 10 } // gormDb := overall.CONSTANT_DB_HR.Model(&models.JobClass{}).Select("").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type") var positionType models.Position gormDb := overall.CONSTANT_DB_HR.Table(fmt.Sprintf("%s p", positionType.TableName())).Select("p.*,d.name as dutiesname,d.number as dutiesnumber,ao.name as aoname,ao.number as aonumber,j.name as jobname").Joins("left join duties as d on d.id = p.duties").Joins("left join administrative_organization as ao on ao.id = p.administrative_organization").Joins("left join job_class as j on j.id = d.job_type") if requestData.Name != "" { gormDb = gormDb.Where("p.name LIKE ?", "%"+requestData.Name+"%") } if requestData.Number != "" { gormDb = gormDb.Where("p.number LIKE ?", "%"+requestData.Number+"%") } if requestData.Duties != "" { gormDb = gormDb.Where("p.duties = ?", requestData.Duties) } if requestData.Organization != "" { orgIdInt, _ := strconv.ParseInt(requestData.Organization, 10, 64) // orgIdList := overallhandle.GetDepartmentSun(orgIdInt, []int64{}) // orgIdList = append(orgIdList, orgIdInt) // gormDb = gormDb.Where("p.administrative_organization IN ?", orgIdList) // fmt.Printf("所有子集--->%v\n", orgIdList) var sunAry overallhandle.AllSunList[int64] sunAry.GetAllSunOrg(orgIdInt) sunAry.SunList = append(sunAry.SunList, orgIdInt) gormDb = gormDb.Where("p.administrative_organization IN ?", sunAry.SunList) } if requestData.InCharge != 0 { gormDb = gormDb.Where("p.person_in_charge = ?", requestData.InCharge) } if requestData.Department != "" { gormDb = gormDb.Where("p.department = ?", requestData.Department) } if requestData.State == 0 { gormDb = gormDb.Where("p.state IN ?", []int{1, 2}) } else { gormDb = gormDb.Where("p.state = ?", requestData.State) } var total int64 totalErr := gormDb.Count(&total).Error if totalErr != nil { total = 0 } var positionAry []positionOutInfo // errGorm := gormDb.Order("p.department DESC,p.duties DESC,p.duties ASC").Limit(requestData.PageSize).Offset(overallhandle.LimitPage(requestData.Page, requestData.PageSize)).Find(&positionAry).Error errGorm := gormDb.Order("p.id DESC").Limit(requestData.PageSize).Offset(overallhandle.LimitPage(requestData.Page, requestData.PageSize)).Find(&positionAry).Error for i, v := range positionAry { var getSpur models.Position getWhe := overallhandle.MapOut() getWhe["id"] = v.Superior // fmt.Printf("%v\n", v.Superior) getSpur.GetCont(getWhe, "number", "name") positionAry[i].SuperiorNumber = getSpur.Number positionAry[i].SuperiorName = getSpur.Name var getSpurDepart models.AdministrativeOrganization getWheDepart := overallhandle.MapOut() getWheDepart["id"] = v.Department getSpurDepart.GetCont(getWheDepart, "name") 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 { overallhandle.Result(105, errGorm, c) } else { overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c) } } /* * @ 作者: 秦东 @ 时间: 2023-01-06 11:14:43 @ 功能: 职位(岗位)列表及相关人员 @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrganizationApi) PositionPeopleList(c *gin.Context) { var requestData lookPositionList c.ShouldBindJSON(&requestData) if requestData.Page < 0 { requestData.Page = 1 } if requestData.PageSize < 0 { requestData.PageSize = 10 } // gormDb := overall.CONSTANT_DB_HR.Model(&models.JobClass{}).Select("").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type") var positionType models.Position gormDb := overall.CONSTANT_DB_HR.Table(fmt.Sprintf("%s p", positionType.TableName())).Select("p.*,d.name as dutiesname,d.number as dutiesnumber,ao.name as aoname,ao.number as aonumber,j.name as jobname").Joins("left join duties as d on d.id = p.duties").Joins("left join administrative_organization as ao on ao.id = p.administrative_organization").Joins("left join job_class as j on j.id = d.job_type") if requestData.Name != "" { gormDb = gormDb.Where("p.name LIKE ?", "%"+requestData.Name+"%") } if requestData.Number != "" { gormDb = gormDb.Where("p.number LIKE ?", "%"+requestData.Number+"%") } if requestData.Duties != "" { gormDb = gormDb.Where("p.duties = ?", requestData.Duties) } if requestData.Organization != "" { orgIdInt, _ := strconv.ParseInt(requestData.Organization, 10, 64) // orgIdList := overallhandle.GetDepartmentSun(orgIdInt, []int64{}) // orgIdList = append(orgIdList, orgIdInt) // gormDb = gormDb.Where("p.administrative_organization IN ?", orgIdList) // fmt.Printf("所有子集--->%v\n", orgIdList) var sunAry overallhandle.AllSunList[int64] sunAry.GetAllSunOrg(orgIdInt) sunAry.SunList = append(sunAry.SunList, orgIdInt) gormDb = gormDb.Where("p.administrative_organization IN ?", sunAry.SunList) } if requestData.InCharge != 0 { gormDb = gormDb.Where("p.person_in_charge = ?", requestData.InCharge) } if requestData.Department != "" { gormDb = gormDb.Where("p.department = ?", requestData.Department) } if requestData.State == 0 { gormDb = gormDb.Where("p.state IN ?", []int{1, 2}) } else { gormDb = gormDb.Where("p.state = ?", requestData.State) } var total int64 totalErr := gormDb.Count(&total).Error if totalErr != nil { total = 0 } var positionAry []positionOutInfo // errGorm := gormDb.Order("p.department DESC,p.duties DESC,p.duties ASC").Limit(requestData.PageSize).Offset(overallhandle.LimitPage(requestData.Page, requestData.PageSize)).Find(&positionAry).Error errGorm := gormDb.Order("p.id DESC").Limit(requestData.PageSize).Offset(overallhandle.LimitPage(requestData.Page, requestData.PageSize)).Find(&positionAry).Error for i, v := range positionAry { var getSpur models.Position getWhe := overallhandle.MapOut() getWhe["id"] = v.Superior // fmt.Printf("%v\n", v.Superior) getSpur.GetCont(getWhe, "number", "name") positionAry[i].SuperiorNumber = getSpur.Number positionAry[i].SuperiorName = getSpur.Name var getSpurDepart models.AdministrativeOrganization getWheDepart := overallhandle.MapOut() getWheDepart["id"] = v.Department getSpurDepart.GetCont(getWheDepart, "name") positionAry[i].DepartmentName = getSpurDepart.Name positionAry[i].IdStr = strconv.FormatInt(v.Id, 10) } if errGorm != nil { overallhandle.Result(105, errGorm, c) } else { overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c) } } // 添加职位(岗位) func (o *OrganizationApi) AddPositionCont(c *gin.Context) { var requestData addPositionInfo err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Number == "" { overallhandle.Result(101, requestData.Number, c, "职位编码不能为空!") return } if requestData.Name == "" { overallhandle.Result(101, requestData.Name, c, "职位名称不能为空!") return } var dutiesId int64 = 0 if requestData.Duties == "" { overallhandle.Result(101, requestData.Duties, c, "请指定该职位的职务!") return } else { dutiesId, _ = strconv.ParseInt(requestData.Duties, 10, 64) } var organizationId int64 = 0 if requestData.Organization == "" { overallhandle.Result(101, requestData.Organization, c, "请指定该职位归属的行政组织!") return } else { organizationId, _ = strconv.ParseInt(requestData.Organization, 10, 64) } var superiorInt int64 = 0 if requestData.Superior != "" { superiorInt, _ = strconv.ParseInt(requestData.Superior, 10, 64) } if requestData.InCharge == 0 { requestData.InCharge = 2 } var departmentId int64 = 0 if requestData.Department == "" { overallhandle.Result(101, requestData.Organization, c, "请指定该职位归属的部门!") return } else { departmentId, _ = strconv.ParseInt(requestData.Department, 10, 64) } var positionCont models.Position //判断编号是否已经存在 isNumExit := overallhandle.MapOut() isNumExit["number"] = requestData.Number judgeNumErr := positionCont.GetCont(isNumExit) if judgeNumErr == nil { overallhandle.Result(101, isNumExit, c, "该编号已经存在!请不要重复使用!") return } //判断岗位名称是否已经存在 isExit := overallhandle.MapOut() isExit["department"] = departmentId isExit["name"] = requestData.Name isExit["administrative_organization"] = organizationId judgeErr := positionCont.GetCont(isExit) if judgeErr == nil { overallhandle.Result(101, isExit, c, "该职位在本部门下已经存在!请不要重复添加") return } positionCont.Number = requestData.Number positionCont.Name = requestData.Name positionCont.Duties = dutiesId positionCont.AdministrativeOrganization = organizationId positionCont.Superior = superiorInt positionCont.PersonInCharge = requestData.InCharge positionCont.Department = departmentId positionCont.State = 1 positionCont.Time = time.Now().Unix() addDataErr := overall.CONSTANT_DB_HR.Create(&positionCont).Error if addDataErr != nil { overallhandle.Result(104, addDataErr, c) } else { overallhandle.Result(0, positionCont, c) } } // 获取职位(岗位)详情 func (o *OrganizationApi) GetPositionCont(c *gin.Context) { var requestData overallhandle.GetId err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Id == 0 && requestData.IdStr == "" { overallhandle.Result(101, err, c, "职务分类Id不能为空!") return } if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } var positionType models.Position var postCont positionOutInfo dbErr := overall.CONSTANT_DB_HR.Model(&positionType).Select("position.*,d.name as dutiesname,d.number as dutiesnumber,ao.name as aoname,ao.number as aonumber,j.name as jobname").Joins("left join duties as d on d.id = position.duties").Joins("left join administrative_organization as ao on ao.id = position.administrative_organization").Joins("left join job_class as j on j.id = d.job_type").Where("position.id = ?", requestData.Id).First(&postCont).Error if dbErr != nil { overallhandle.Result(105, dbErr, c) } else { var getSpur models.Position getWhe := overallhandle.MapOut() getWhe["id"] = postCont.Superior fmt.Printf("%v\n", postCont.Superior) getSpur.GetCont(getWhe, "number", "name") postCont.SuperiorNumber = getSpur.Number postCont.SuperiorName = getSpur.Name if postCont.OrgList != "" { json.Unmarshal([]byte(postCont.OrgList), postCont.OrgListAry) } else { groupId, companyId, departmentId, sunDepartId, workShopId := overallhandle.GetOrgStructure(postCont.AdministrativeOrganization) if groupId != 0 && overallhandle.IsInTrue[int64](groupId, postCont.OrgListAry) == false { postCont.OrgListAry = append(postCont.OrgListAry, groupId) } if companyId != 0 && overallhandle.IsInTrue[int64](companyId, postCont.OrgListAry) == false { postCont.OrgListAry = append(postCont.OrgListAry, companyId) } if departmentId != 0 && overallhandle.IsInTrue[int64](departmentId, postCont.OrgListAry) == false { postCont.OrgListAry = append(postCont.OrgListAry, departmentId) } if sunDepartId != 0 && overallhandle.IsInTrue[int64](sunDepartId, postCont.OrgListAry) == false { postCont.OrgListAry = append(postCont.OrgListAry, sunDepartId) } if workShopId != 0 && overallhandle.IsInTrue[int64](workShopId, postCont.OrgListAry) == false { postCont.OrgListAry = append(postCont.OrgListAry, workShopId) } } overallhandle.Result(0, postCont, c) } } // 编辑职位(岗位) func (o *OrganizationApi) EitePositionCont(c *gin.Context) { var requestData eitePositionInfo err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Id == 0 && requestData.IdStr == "" { overallhandle.Result(101, err, c, "行政类别Id不能为空!") return } if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } whereAry := overallhandle.MapOut() whereAry["id"] = requestData.Id var govCont models.Position judgeErr := govCont.GetCont(whereAry) if judgeErr != nil { overallhandle.Result(107, judgeErr, c) return } saveData := overallhandle.MapOut() saveData["time"] = time.Now().Unix() 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 } departIsTrue := false if requestData.Department != "" && requestData.Department != strconv.FormatInt(govCont.Department, 10) { departIsTrue = true saveData["department"] = requestData.Department } if requestData.Name != "" && requestData.Name != govCont.Name { if departIsTrue == true { //判断岗位名称是否已经存在 departmentId, _ := strconv.ParseInt(requestData.Department, 10, 64) 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 != "" && requestData.Duties != strconv.FormatInt(govCont.Duties, 10) { saveData["duties"] = requestData.Duties } if requestData.Organization != "" && requestData.Organization != strconv.FormatInt(govCont.AdministrativeOrganization, 10) { saveData["administrative_organization"] = requestData.Organization } if requestData.Superior != "" && requestData.Superior != strconv.FormatInt(govCont.Superior, 10) { saveData["superior"] = requestData.Superior } if requestData.InCharge != 0 { saveData["person_in_charge"] = requestData.InCharge } eiteErr := govCont.EiteCont(whereAry, saveData) if eiteErr != nil { overallhandle.Result(106, eiteErr, c) } else { overallhandle.Result(0, saveData, c) } } // 编辑职位(岗位)状态或删除 func (o *OrganizationApi) EitePositionStateOrDel(c *gin.Context) { var requestData EiteJobStateDel err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Id == 0 && requestData.IdStr == "" { overallhandle.Result(101, err, c, "行政类别Id不能为空!") return } if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } if requestData.State == 0 { requestData.State = 1 } whereAry := overallhandle.MapOut() whereAry["id"] = requestData.Id var jobClassInfo models.Position //判断行政组织是否存在 judgeExist := jobClassInfo.GetCont(whereAry) if judgeExist != nil { overallhandle.Result(107, judgeExist, c) return } saveData := overallhandle.MapOut() saveData["time"] = time.Now().Unix() saveData["state"] = requestData.State if requestData.State != 3 { eiteErr := jobClassInfo.EiteCont(whereAry, saveData) if eiteErr != nil { overallhandle.Result(106, eiteErr, c) } else { overallhandle.Result(0, saveData, c) } } else { if requestData.IsTrue != 1 { //软删除 eiteErr := jobClassInfo.EiteCont(whereAry, saveData) if eiteErr != nil { overallhandle.Result(106, eiteErr, c) } else { overallhandle.Result(0, saveData, c) } } else { //硬删除 delErr := overall.CONSTANT_DB_HR.Where(whereAry).Delete(&jobClassInfo) if delErr == nil { overallhandle.Result(0, saveData, c) } else { overallhandle.Result(108, delErr, c) } } } } // 获取职位权限配置清单 func (o *OrganizationApi) GetPositionRole(c *gin.Context) { var requestData overallhandle.GetId err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, requestData, c) return } if requestData.Id == 0 && requestData.IdStr == "" { overallhandle.Result(101, requestData, c) return } if requestData.IdStr != "" { idInt, inIntErr := strconv.ParseInt(requestData.IdStr, 10, 64) if inIntErr == nil { requestData.Id = idInt } } where := overallhandle.MapOut() var positionRole models.Position where["id"] = requestData.Id inFoErr := positionRole.GetCont(where, "menu_permit", "button_permit") if inFoErr != nil { overallhandle.Result(105, requestData, c) return } _, datahhh := GetMenuOperation(positionRole.MenuPermit, positionRole.ButtonPermit) overallhandle.Result(0, datahhh, c) } // 遍历确权 func GetMenuOperation(menuStr, menuOperStr string) (isTrue bool, sendData []powerConfigList) { isTrue = false var menuStrMap []int64 var menuOperStrMap []int64 json.Unmarshal([]byte(menuStr), &menuStrMap) json.Unmarshal([]byte(menuOperStr), &menuOperStrMap) var systemMenuList []models.SystemMenu menuOperErr := overall.CONSTANT_DB_Master.Where("`m_steat` IN ?", []int{1, 2}).Order("m_sort asc").Order("m_id desc").Find(&systemMenuList).Error if menuOperErr != nil { return } fmt.Printf("menuStr------>%v--------------->%v\n", menuStr, menuStrMap) sendData = GetMenuPowerThree(1, 0, systemMenuList, menuStrMap, menuOperStrMap) return } // 递归无限树 func GetMenuPowerThree(jurisd int, parentId int64, threeData []models.SystemMenu, menuStrMap, menuOperStrMap []int64) []powerConfigList { // treeList := []SystemMenuThree{} treeListPower := []powerConfigList{} for _, v := range threeData { if v.ParentId == parentId { var powerConfigCont powerConfigList powerConfigCont.Id = v.Id powerConfigCont.Title = v.Title powerConfigCont.IsTrue = overallhandle.JudgeInMap(v.Id, menuStrMap) child := GetMenuPowerThree(jurisd, v.Id, threeData, menuStrMap, menuOperStrMap) powerConfigCont.Child = child isTrue, menuOper := MenuOperation(jurisd, v.Id) if isTrue == true { var operList []powerCont for _, oper_val := range menuOper { var operCont powerCont operCont.Id = oper_val.OperId operCont.Title = oper_val.OperTitle operCont.IsTrue = overallhandle.JudgeInMap(oper_val.OperId, menuOperStrMap) operList = append(operList, operCont) } powerConfigCont.MenuOperation = operList } treeListPower = append(treeListPower, powerConfigCont) } } return treeListPower } // 获取菜单操作项目 func MenuOperation(jurisd int, menuId int64) (isTrue bool, operation []models.MenuOperation) { isTrue = false // if jurisd != 1 { // operErr := overall.CONSTANT_DB_Master.Where("`menu_id` = ? AND oper_id IN ?", menuId, global.Gva_Authority_Authentication).Order("oper_id desc").Find(&operation).Error // if operErr == nil { // isTrue = true // } // } else { // operErr := overall.CONSTANT_DB_Master.Where("`menu_id` = ?", menuId).Order("oper_id desc").Find(&operation).Error // if operErr == nil { // isTrue = true // } // } operErr := overall.CONSTANT_DB_Master.Where("`menu_id` = ?", menuId).Order("oper_id desc").Find(&operation).Error if operErr == nil { isTrue = true } return } /* * @ 作者: 秦东 @ 时间: 2022-11-22 08:40:38 @ 功能: 根据行政组织获取岗位 @ 参数 #requestData 行政组织数组 @ 返回值 # @ 方法原型 #func (o *OrganizationApi) BasisOrgGetPostList(c *gin.Context) */ func (o *OrganizationApi) BasisOrgGetPostList(c *gin.Context) { var requestData OrgGivePost err := c.ShouldBindJSON(&requestData) if err != nil || len(requestData.Id) < 1 { overallhandle.Result(100, requestData, c) return } orgList := []int64{312, 313} groupId, companyId, departmentId, _, _ := overallhandle.GetOrgStructure(requestData.Id[len(requestData.Id)-1]) fmt.Printf("空间看到----->%v----->%v----->%v\n", groupId, companyId, departmentId) if overallhandle.IsInTrue[int64](groupId, orgList) == false { orgList = append(orgList, groupId) } if overallhandle.IsInTrue[int64](companyId, orgList) == false { orgList = append(orgList, companyId) } var postList []models.Position err = overall.CONSTANT_DB_HR.Model(&models.Position{}).Where("`state` = 1 AND `administrative_organization` IN ?", orgList).Or("`department` = ?", departmentId).Order("person_in_charge ASC").Find(&postList).Error if err != nil { overallhandle.Result(107, err, c) return } overallhandle.Result(0, postList, c) } /** @ 作者: 秦东 @ 时间: 2022-11-22 10:04:48 @ 功能: 添加职位(岗位)新版 @ 参数 # @ 返回值 # @ 方法原型 # */ // func (o *OrganizationApi) AddPositionContNew(c *gin.Context) { var requestData addPositionInfoNew err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, 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 len(requestData.Organization) < 1 { overallhandle.Result(101, requestData.Organization, c, "请指定该职位归属的行政组织!") return } orgListJson, _ := json.Marshal(requestData.Organization) if requestData.InCharge == 0 { requestData.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 } organizationId := requestData.Organization[len(requestData.Organization)-1] _, companyId, departmentId, _, _ := overallhandle.GetOrgStructure(organizationId) if departmentId == 0 { departmentId = companyId } //判断岗位名称是否已经存在 isExit := overallhandle.MapOut() isExit["department"] = departmentId isExit["name"] = requestData.Name isExit["administrative_organization"] = organizationId 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 = organizationId positionCont.Superior = requestData.Superior positionCont.PersonInCharge = requestData.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) } } /* * @ 作者: 秦东 @ 时间: 2022-11-23 08:44:11 @ 功能: 编辑职位(岗位) @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrganizationApi) EitePositionContNew(c *gin.Context) { var requestData eitePositionInfoNes err := c.ShouldBindJSON(&requestData) if err != nil { overallhandle.Result(100, err, c) return } if requestData.Id == 0 && requestData.IdStr == "" { overallhandle.Result(101, err, c, "行政类别Id不能为空!") return } if len(requestData.Organization) < 1 { overallhandle.Result(101, requestData.Organization, c, "请指定该职位归属的行政组织!") return } if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } 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[len(requestData.Organization)-1] _, companyId, departmentId, _, _ := overallhandle.GetOrgStructure(organizationId) 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 } 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 organizationId != 0 && organizationId != govCont.AdministrativeOrganization { saveData["administrative_organization"] = organizationId } if requestData.Superior != 0 && requestData.Superior != govCont.Superior { saveData["superior"] = requestData.Superior } if requestData.InCharge != 0 { saveData["person_in_charge"] = requestData.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) } } /* * @ 作者: 秦东 @ 时间: 2022-11-26 09:29:38 @ 功能: 获取本行政组织下的岗位 @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrganizationApi) GetMyPositionList(c *gin.Context) { var requestData lookPositionList c.ShouldBindJSON(&requestData) if requestData.Page < 0 { requestData.Page = 1 } if requestData.PageSize < 0 { requestData.PageSize = 10 } // gormDb := overall.CONSTANT_DB_HR.Model(&models.JobClass{}).Select("").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type") var positionType models.Position gormDb := overall.CONSTANT_DB_HR.Table(fmt.Sprintf("%s p", positionType.TableName())).Select("p.*,d.name as dutiesname,d.number as dutiesnumber,ao.name as aoname,ao.number as aonumber,j.name as jobname").Joins("left join duties as d on d.id = p.duties").Joins("left join administrative_organization as ao on ao.id = p.administrative_organization").Joins("left join job_class as j on j.id = d.job_type") if requestData.Name != "" { gormDb = gormDb.Where("p.name LIKE ?", "%"+requestData.Name+"%") } if requestData.Number != "" { gormDb = gormDb.Where("p.number LIKE ?", "%"+requestData.Number+"%") } if requestData.Duties != "" { gormDb = gormDb.Where("p.duties = ?", requestData.Duties) } if requestData.Organization != "" { // orgIdInt, _ := strconv.ParseInt(requestData.Organization, 10, 64) // orgIdList := overallhandle.GetDepartmentSun(orgIdInt, []int64{}) // orgIdList = append(orgIdList, orgIdInt) gormDb = gormDb.Where("p.administrative_organization = ?", requestData.Organization) // fmt.Printf("所有子集--->%v\n", orgIdList) // var sunAry overallhandle.AllSunList[int64] // sunAry.GetAllSunOrg(orgIdInt) // sunAry.SunList = append(sunAry.SunList, orgIdInt) // gormDb = gormDb.Where("p.administrative_organization IN ?", sunAry.SunList) } if requestData.InCharge != 0 { gormDb = gormDb.Where("p.person_in_charge = ?", requestData.InCharge) } if requestData.Department != "" { gormDb = gormDb.Where("p.department = ?", requestData.Department) } gormDb = gormDb.Where("p.state = ?", 1) var total int64 totalErr := gormDb.Count(&total).Error if totalErr != nil { total = 0 } var positionAry []positionOutInfo // errGorm := gormDb.Order("p.department DESC,p.duties DESC,p.duties ASC").Limit(requestData.PageSize).Offset(overallhandle.LimitPage(requestData.Page, requestData.PageSize)).Find(&positionAry).Error errGorm := gormDb.Order("p.id DESC").Limit(requestData.PageSize).Offset(overallhandle.LimitPage(requestData.Page, requestData.PageSize)).Find(&positionAry).Error for i, v := range positionAry { var getSpur models.Position getWhe := overallhandle.MapOut() getWhe["id"] = v.Superior // fmt.Printf("%v\n", v.Superior) getSpur.GetCont(getWhe, "number", "name") positionAry[i].SuperiorNumber = getSpur.Number positionAry[i].SuperiorName = getSpur.Name var getSpurDepart models.AdministrativeOrganization getWheDepart := overallhandle.MapOut() getWheDepart["id"] = v.Department getSpurDepart.GetCont(getWheDepart, "name") 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 { overallhandle.Result(105, errGorm, c) } else { overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c) } } /* * @ 作者: 秦东 @ 时间: 2023-03-28 10:37:04 @ 功能: @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrganizationApi) PositionUnify(c *gin.Context) { var nameList []string err := overall.CONSTANT_DB_HR.Model(&models.Position{}).Distinct("`name`").Find(&nameList).Error if err != nil { overallhandle.Result(105, err, c) return } // var saveDataList []models.PositionUnify var positisonUnify PositionUnifySync for _, v := range nameList { synPro.Add(1) go positisonUnify.UnifyDataPosition(v) } synPro.Wait() pounifyList := positisonUnify.readDataLock() overallhandle.Result(0, pounifyList, c) } // 组装数据 func (p *PositionUnifySync) UnifyDataPosition(fieldName string) { p.mutext.Lock() defer p.mutext.Unlock() var positionIdList []int64 err := overall.CONSTANT_DB_HR.Model(&models.Position{}).Select("`id`").Where("`name` = ?", fieldName).Find(&positionIdList).Error // overall.CONSTANT_DB_HR.Model(&models.Position{}).Select("`id`").Where("`name` = ?", fieldName).Find(&positionIdList) var orlUnifyCont models.PositionUnify oldErr := orlUnifyCont.GetCont(map[string]interface{}{"`name`": fieldName}) if oldErr != nil { var positionUnifyCont models.PositionUnify positionUnifyCont.Name = fieldName //职位名称"` positionUnifyCont.Time = time.Now().Unix() //创建时间"` positionUnifyCont.State = 1 //(1:启用;2:禁用;3:删除)"` if err == nil && len(positionIdList) > 0 { idByte, jsonErr := json.Marshal(positionIdList) if jsonErr == nil { positionUnifyCont.Content = string(idByte) //关联具体岗位ID"` } } p.PositionList = append(p.PositionList, positionUnifyCont) overall.CONSTANT_DB_HR.Create(&positionUnifyCont) } else { saveNewData := overallhandle.MapOut() if err == nil && len(positionIdList) > 0 { idByte, jsonErr := json.Marshal(positionIdList) if jsonErr == nil { saveNewData["`content`"] = string(idByte) //关联具体岗位ID"` } } saveNewData["`time`"] = time.Now().Unix() var orlEditUnifyCont models.PositionUnify orlEditUnifyCont.EiteCont(map[string]interface{}{"`id`": orlUnifyCont.Id}, saveNewData) } synPro.Done() } /* * @ 作者: 秦东 @ 时间: 2023-03-28 11:15:49 @ 功能: 职位(岗位)去重反写岗位关联 @ 参数 # @ 返回值 # @ 方法原型 # */ func (o *OrganizationApi) PositionUnifyForPosition(c *gin.Context) { var positionUnifyList []models.PositionUnify err := overall.CONSTANT_DB_HR.Where("state = ?", 1).Find(&positionUnifyList).Error if err != nil || len(positionUnifyList) < 1 { overallhandle.Result(105, err, c) return } for _, v := range positionUnifyList { synPro.Add(1) go excudePosition(v) } synPro.Wait() overallhandle.Result(0, err, c) } /* * @ 作者: 秦东 @ 时间: 2023-03-28 11:19:54 @ 功能: 处理职位(岗位)去重反写岗位关联数据 @ 参数 #unifyCont 去重数据 @ 返回值 # @ 方法原型 # */ func excudePosition(unifyCont models.PositionUnify) { defer synPro.Done() if unifyCont.Content != "" { var poisitonId []int64 jsonErr := json.Unmarshal([]byte(unifyCont.Content), &poisitonId) if jsonErr == nil { saveData := overallhandle.MapOut() saveData["`unify_id`"] = unifyCont.Id saveData["`time`"] = time.Now().Unix() overall.CONSTANT_DB_HR.Model(&models.Position{}).Where("`id` IN ?", poisitonId).Updates(&saveData) } } } /* * @ 作者: 秦东 @ 时间: 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) }