Browse Source

修改手动同步设置

v2_dev
超级管理员 3 years ago
parent
commit
8a2268f6ee
  1. 485
      api/version1/administrativeorganization/govcont.go
  2. 95
      api/version1/administrativeorganization/position.go
  3. 95
      api/version1/administrativeorganization/type.go
  4. 6
      api/version1/personnelapi/controll.go
  5. 57
      api/version1/personnelapi/kingdeenew.go
  6. 8
      api/version1/personnelapi/mancont.go
  7. 4
      api/version1/personnelapi/staffarchives.go
  8. 124
      api/version1/shiyan/shiyan.go
  9. 10
      apirouter/organization/organization_group.go
  10. 3
      apirouter/personnel/people.go
  11. 8
      apirouter/shiyanrouter/shiyan.go
  12. 10
      models/administrative_organization.go
  13. 39
      overall/overallhandle/overall_handle.go
  14. 5
      overall/overallhandle/type.go

485
api/version1/administrativeorganization/govcont.go

@ -1,6 +1,7 @@
package administrativeorganization
import (
"encoding/json"
"fmt"
"hr_server/models"
"hr_server/overall"
@ -404,14 +405,18 @@ func (o *OrganizationApi) GetOrgAllSun(c *gin.Context) {
*/
func (o *OrganizationApi) GetCompanyDeparment(c *gin.Context) {
var requestData overallhandle.GetId
c.ShouldBindJSON(&requestData)
errddd := c.ShouldBindJSON(&requestData)
sdfgg, _ := json.Marshal(requestData)
fmt.Printf("获取值------1----->%v----->%v----->%v\n", requestData, string(sdfgg), errddd)
if requestData.Id == 0 && requestData.IdStr == "" {
requestData.Id = 0
}
fmt.Printf("获取值----2------->%v\n", requestData)
if requestData.IdStr != "" {
idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64)
requestData.Id = idInt64
}
fmt.Printf("获取值----3------->%v\n", requestData)
orgId := getOrgIdList(requestData.Id)
if len(orgId) < 1 {
overallhandle.Result(101, orgId, c, "没有查询到信息!")
@ -560,7 +565,7 @@ func OrgAndMAnThree(parentId int64, govAry []OrgAndPeople) []OrgAndPeopleThree {
for _, v := range govAry {
// var zhucont govThree
parentIdInt, _ := strconv.ParseInt(v.ParentId, 10, 64)
// fmt.Printf("------------->%v---->%v\n", parentIdInt, parentId)
if parentIdInt == parentId {
orgIdInt, _ := strconv.ParseInt(v.OrgId, 10, 64)
child := OrgAndMAnThree(orgIdInt, govAry)
@ -787,3 +792,479 @@ func GetAllOrgName(id, level int64, name string) (allName string) {
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2023-01-19 10:41:34
@ 功能: 获取行政组织及相关人员
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (o *OrganizationApi) GetOrgAndEveryOnePeople(c *gin.Context) {
var requestData OrgAndMAnThreeType
c.ShouldBindJSON(&requestData)
//获取行政组织
var sunAry overallhandle.AllSunList[int64]
var orgIdList []int64
var origin int64
isNotIn := 0
if requestData.All == 0 {
if requestData.Id == "" {
origin = 0
isNotIn = 1
orgIdList = []int64{312, 293, 305, 306, 307}
} else {
idInt64, _ := strconv.ParseInt(requestData.Id, 10, 64)
origin = idInt64
sunAry.GetAllSunOrg(idInt64)
orgIdList = sunAry.SunList
}
} else {
if requestData.Id != "" {
idInt64, _ := strconv.ParseInt(requestData.Id, 10, 64)
origin = idInt64
sunAry.GetAllSunOrg(idInt64)
orgIdList = sunAry.SunList
}
}
var orgAndPeopleListCont empowerSync //启用协程结构体
synPro.Add(1)
go orgAndPeopleListCont.GetOrgList(isNotIn, orgIdList, requestData.Level) //获取行政组织
synPro.Add(1)
go orgAndPeopleListCont.GetPeopleList(isNotIn, orgIdList) //获取人员
synPro.Wait()
orgAndManList := orgAndPeopleListCont.readDataLock()
sendList := OrgAndManNewThree(origin, orgAndManList)
overallhandle.Result(0, sendList, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-01-19 11:18:39
@ 功能: 获取行政组织(协程)
@ 参数
#orgId 行政组织ID
#level 获取等级
@ 返回值
#
@ 方法原型
#func (e *empowerSync) GetOrgList(orgId []int64, level int)
*/
func (e *empowerSync) GetOrgList(isNotIn int, orgId []int64, level int) {
e.mutext.Lock()
defer e.mutext.Unlock()
var orgList []models.AdministrativeOrganization
gormDb := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`,`number`,`name`,`superior`").Where("`state` = ? ", 1)
if len(orgId) > 0 {
if isNotIn == 1 {
gormDb = gormDb.Where("`id` NOT IN ?", orgId)
} else {
gormDb = gormDb.Where("`id` IN ?", orgId)
}
}
if level != 0 {
gormDb = gormDb.Where("`level` <= ?", level)
}
err := gormDb.Find(&orgList).Error
if err == nil && len(orgList) > 0 {
for _, v := range orgList {
var orgCont OrgAndEveryOnePeople
orgCont.Id = strconv.FormatInt(v.Id, 10) //识别符
orgCont.OrgId = v.Id
orgCont.Number = v.Number //编号
orgCont.Name = v.Name //姓名
orgCont.Superior = strconv.FormatInt(v.Superior, 10) //上级
orgCont.Type = 1
orgCont.Key = fmt.Sprintf("A%v", v.Id)
e.orgAndPeopleList = append(e.orgAndPeopleList, orgCont)
}
}
synPro.Done()
}
/*
*
@ 作者: 秦东
@ 时间: 2023-01-19 11:24:44
@ 功能: 获取人员协程
@ 参数
#orgId 行政组织ID
@ 返回值
#
@ 方法原型
#
*/
func (e *empowerSync) GetPeopleList(isNotIn int, orgId []int64) {
e.mutext.Lock()
defer e.mutext.Unlock()
var peopleList []models.PersonArchives
gormDnMan := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`key`,`number`,`name`,`icon`,`icon_photo`,`admin_org`").Where("`state` = 1 AND `emp_type` BETWEEN ? AND ?", 1, 10)
if len(orgId) > 0 {
if isNotIn == 1 {
gormDnMan = gormDnMan.Where("`admin_org` NOT IN ?", orgId)
} else {
gormDnMan = gormDnMan.Where("`admin_org` IN ?", orgId)
}
}
err := gormDnMan.Find(&peopleList).Error
if err == nil && len(peopleList) > 0 {
for _, v := range peopleList {
var peopleCont OrgAndEveryOnePeople
peopleCont.Id = strconv.FormatInt(v.Key, 10) //识别符
peopleCont.OrgId = -1
peopleCont.Number = v.Number //编号
peopleCont.Name = v.Name //姓名
peopleCont.Superior = strconv.FormatInt(v.AdminOrg, 10) //上级
peopleCont.Icon = v.Icon
peopleCont.IconPhoto = v.IconPhoto
peopleCont.Type = 2
peopleCont.Key = fmt.Sprintf("U%v", v.Key)
e.orgAndPeopleList = append(e.orgAndPeopleList, peopleCont)
}
}
synPro.Done()
}
/*
*
@ 作者: 秦东
@ 时间: 2023-01-19 14:28:48
@ 功能: 新版人员与行政组织树
@ 参数
#parentId 上级ID
#govAry 数据
@ 返回值
#
@ 方法原型
#func OrgAndManNewThree(parentId int64, govAry []OrgAndEveryOnePeople) []OrgAndManThree
*/
func OrgAndManNewThree(parentId int64, govAry []OrgAndEveryOnePeople) []OrgAndManThree {
orgAndMAnMap := []OrgAndManThree{}
for _, v := range govAry {
// var zhucont govThree
parentIdInt, _ := strconv.ParseInt(v.Superior, 10, 64)
// fmt.Printf("------------->%v---->%v\n", parentIdInt, parentId)
if parentIdInt == parentId {
child := OrgAndManNewThree(v.OrgId, govAry)
var node OrgAndManThree
node.Id = v.Id //识别符
node.OrgId = v.OrgId
node.Number = v.Number //编号
node.Name = v.Name //姓名
node.Superior = v.Superior //上级
node.Icon = v.Icon
node.IconPhoto = v.IconPhoto
node.Type = v.Type
node.Key = v.Key
node.Child = child
orgAndMAnMap = append(orgAndMAnMap, node)
}
}
return orgAndMAnMap
}
/*
*
@ 作者: 秦东
@ 时间: 2023-01-29 09:26:04
@ 功能: 根据行政组织编号获取组织及人员
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (o *OrganizationApi) BasisOrgObtainSonOrgAndMan(c *gin.Context) {
var requestData overallhandle.ConstId
err := c.ShouldBindJSON(&requestData)
if err != nil {
overallhandle.Result(100, err, c)
return
}
//获取当前行政组织信息
var orgCont models.AdministrativeOrganization
isNotIn := 0
var idList []int64
var parenAry overallhandle.AllSunList[int64]
if requestData.Id != "" {
idInt, _ := strconv.ParseInt(requestData.Id, 10, 64)
idList = []int64{idInt}
if idInt != 309 {
err = orgCont.GetCont(map[string]interface{}{"id": idInt})
parenAry.SunList = append(parenAry.SunList, idInt)
parenAry.GetAllParentOrg(idInt, 3)
} else {
}
} else {
isNotIn = 1
idList = []int64{312, 293, 305, 306, 307}
err = fmt.Errorf("获取全部内容")
}
var sendData ShenPiXuanRen
// fmt.Printf("组织id列表------------》%v\n", parenAry.SunList)
if len(parenAry.SunList) > 0 {
var orgAndPeopleListTitleCont empowerSynces //启用协程结构体
synProes.Add(1)
go orgAndPeopleListTitleCont.BasisOrgDirectOrgIng(parenAry.SunList) //获取行政组织
synProes.Wait()
orgTitleList := orgAndPeopleListTitleCont.readDataLock()
sort.SliceStable(orgTitleList, func(i, j int) bool {
return orgTitleList[i].Sort < orgTitleList[j].Sort
})
for _, ov := range orgTitleList {
var titleDepartCont TitleDepartmentsCont
titleDepartCont.DepartmentId = ov.Id //行政组织ID
titleDepartCont.Id = ov.Id //行政组织ID
titleDepartCont.DepartmentKey = ov.Number //行政组织编码
titleDepartCont.DepartmentName = ov.Name //行政组织名称
titleDepartCont.ParentId = ov.Superior //上级ID
titleDepartCont.DepartmentNames = ov.Name //行政组织别名
sendData.TitleDepartments = append(sendData.TitleDepartments, titleDepartCont)
}
}
var orgAndPeopleListCont empowerSyncDepartMan //启用协程结构体
synPro.Add(1)
go orgAndPeopleListCont.BasisOrgDirectOrg(isNotIn, idList, 3) //获取行政组织
synPro.Add(1)
go orgAndPeopleListCont.GetPeopleListIng(isNotIn, idList) //获取人员
synPro.Wait()
orgList, manList := orgAndPeopleListCont.readDataLock()
if len(orgList) > 0 {
for _, org := range orgList {
var orgShenPi ChildDepartmentsCont
orgShenPi.Id = org.Id //行政组织ID
orgShenPi.DepartmentKey = org.Number //行政组织编码
orgShenPi.DepartmentName = org.Name //行政组织名称
orgShenPi.ParentId = org.Superior //上级ID
orgShenPi.DepartmentNames = org.Name //行政组织别名
sendData.ChildDepartments = append(sendData.ChildDepartments, orgShenPi)
}
}
if len(manList) > 0 {
for _, man := range manList {
var employess EmployeesCont
employess.Id = man.Id
employess.EmployeeName = man.Name //人员名称
employess.IsLeave = "0" //行政组织名称
employess.Open = "false" //上级ID
employess.Icon = man.Icon
employess.IconToBase64 = man.IconPhoto
sendData.Employees = append(sendData.Employees, employess)
}
}
// outMap := overallhandle.MapOut()
// outMap["sendData"] = sendData
// outMap["orgList"] = orgList
// outMap["manList"] = manList
overallhandle.Result(0, sendData, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-01-19 11:24:44
@ 功能: 获取人员协程
@ 参数
#orgId 行政组织ID
@ 返回值
#
@ 方法原型
#
*/
func (e *empowerSyncDepartMan) GetPeopleListIng(isNotIn int, orgId []int64) {
e.mutext.Lock()
defer e.mutext.Unlock()
var peopleList []models.PersonArchives
gormDnMan := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`key`,`number`,`name`,`icon`,`icon_photo`,`admin_org`").Where("`state` = 1 AND `emp_type` BETWEEN ? AND ?", 1, 10)
if len(orgId) > 0 {
if isNotIn == 1 {
gormDnMan = gormDnMan.Where("`admin_org` NOT IN ?", orgId)
} else {
gormDnMan = gormDnMan.Where("`admin_org` IN ?", orgId)
}
}
err := gormDnMan.Find(&peopleList).Error
if err == nil && len(peopleList) > 0 {
for _, v := range peopleList {
var peopleCont OrgAndEveryOnePeople
peopleCont.Id = strconv.FormatInt(v.Key, 10) //识别符
peopleCont.OrgId = -1
peopleCont.Number = v.Number //编号
peopleCont.Name = v.Name //姓名
peopleCont.Superior = strconv.FormatInt(v.AdminOrg, 10) //上级
peopleCont.Icon = v.Icon
peopleCont.IconPhoto = v.IconPhoto
peopleCont.Type = 2
peopleCont.Key = fmt.Sprintf("U%v", v.Key)
e.peopleList = append(e.peopleList, peopleCont)
}
}
synPro.Done()
}
/*
*
@ 作者: 秦东
@ 时间: 2023-01-29 09:54:05
@ 功能: 根据行政组织ID获取直接下级
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (e *empowerSyncDepartMan) BasisOrgDirectOrg(isNotIn int, orgId []int64, level int) {
e.mutext.Lock()
defer e.mutext.Unlock()
var orgList []models.OrgContType
gormDb := overall.CONSTANT_DB_HR.Model(&models.OrgContType{}).Select("`id`,`numbe`,`name`,`superior`").Where("`state` = ? ", 1)
if len(orgId) > 0 {
if isNotIn == 1 {
gormDb = gormDb.Where("`id` NOT IN ?", orgId)
} else {
gormDb = gormDb.Where("`superior` IN ?", orgId)
}
}
if level != 0 {
gormDb = gormDb.Where("`level` > ?", level)
}
err := gormDb.Find(&orgList).Error
listCount := len(orgList)
if err == nil && listCount > 0 {
for i, v := range orgList {
var orgCont OrgAndEveryOnePeople
orgCont.Id = strconv.FormatInt(v.Id, 10) //识别符
orgCont.OrgId = v.Id
orgCont.Number = v.Number //编号
orgCont.Name = v.Name //行政组织名称
orgCont.Superior = strconv.FormatInt(v.Superior, 10) //上级
orgCont.Type = 1
orgCont.Key = fmt.Sprintf("A%v", v.Id)
orgCont.Sort = listCount - i
e.orgList = append(e.orgList, orgCont)
}
}
synPro.Done()
}
func (e *empowerSynces) BasisOrgDirectOrgIng(orgId []int64) {
e.mutext.Lock()
defer e.mutext.Unlock()
listCount := len(orgId)
if listCount > 0 {
for i, v := range orgId {
var orgContOld models.AdministrativeOrganization
err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`,`number`,`name`,`superior`").Where("`id` = ? ", v).First(&orgContOld).Error
if err == nil {
var orgCont OrgAndEveryOnePeople
orgCont.Id = strconv.FormatInt(orgContOld.Id, 10) //识别符
orgCont.OrgId = orgContOld.Id
orgCont.Number = orgContOld.Number //编号
orgCont.Name = orgContOld.Name //行政组织名称
orgCont.Superior = strconv.FormatInt(orgContOld.Superior, 10) //上级
orgCont.Type = 1
orgCont.Key = fmt.Sprintf("A%v", orgContOld.Id)
orgCont.Sort = listCount - i
e.orgAndPeopleList = append(e.orgAndPeopleList, orgCont)
}
}
}
synProes.Done()
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-15 10:46:22
@ 功能: 获取指定行政组织列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (o *OrganizationApi) GetAppointOrg(c *gin.Context) {
var requestData OrgIdList
err := c.ShouldBindJSON(&requestData)
if err != nil {
overallhandle.Result(100, err, c)
return
}
if len(requestData.OrgId) < 1 {
overallhandle.Result(1, err, c, "请选择行政组织!")
return
}
var orgList []models.AdministrativeOrganization
err = overall.CONSTANT_DB_HR.Where("`id` IN ?", requestData.OrgId).Find(&orgList).Error
if err != nil || len(orgList) < 1 {
overallhandle.Result(107, err, c)
return
}
overallhandle.Result(0, orgList, c)
}

95
api/version1/administrativeorganization/position.go

@ -91,6 +91,101 @@ func (o *OrganizationApi) PositionList(c *gin.Context) {
}
}
/*
*
@ 作者: 秦东
@ 时间: 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

95
api/version1/administrativeorganization/type.go

@ -12,6 +12,7 @@ type OrganizationApi struct{}
// 协程
var synPro = sync.WaitGroup{}
var synProes = sync.WaitGroup{}
// 入口
func (o *OrganizationApi) Index(c *gin.Context) {
@ -268,3 +269,97 @@ type eitePositionInfoNes struct {
overallhandle.GetId
addPositionInfoNew
}
// 行政组织与个人列表
type OrgAndEveryOnePeople struct {
Id string `json:"id"` //识别符
OrgId int64 `json:"orgid"` //行政组织Id
Number string `json:"number"` //编号
Name string `json:"name"` //姓名
Superior string `json:"superior"` //上级
Icon string `json:"icon"` //头像
IconPhoto string `json:"icon_photo"` //头像
Type int `json:"type"` //类型 1:行政组织;2:人员
Key string `json:"key"` //列表识别
Sort int `json:"sort"` //排序
}
// 授权协程操作
type empowerSync struct {
orgAndPeopleList []OrgAndEveryOnePeople
mutext sync.RWMutex
}
// 读取行政组织与个人列表协程数据
func (d *empowerSync) readDataLock() []OrgAndEveryOnePeople {
d.mutext.RLock()
defer d.mutext.RUnlock()
return d.orgAndPeopleList
}
type empowerSynces struct {
orgAndPeopleList []OrgAndEveryOnePeople
mutext sync.RWMutex
}
func (d *empowerSynces) readDataLock() []OrgAndEveryOnePeople {
d.mutext.RLock()
defer d.mutext.RUnlock()
return d.orgAndPeopleList
}
// 工作流审批节点获取部门和人员
type empowerSyncDepartMan struct {
orgList []OrgAndEveryOnePeople
peopleList []OrgAndEveryOnePeople
mutext sync.RWMutex
}
func (d *empowerSyncDepartMan) readDataLock() ([]OrgAndEveryOnePeople, []OrgAndEveryOnePeople) {
d.mutext.RLock()
defer d.mutext.RUnlock()
return d.orgList, d.peopleList
}
// 输出行政组织与人员
type OrgAndManThree struct {
OrgAndEveryOnePeople
Child []OrgAndManThree `json:"child"` //子栏目
}
// 审批节点选人结构输出
type ShenPiXuanRen struct {
ChildDepartments []ChildDepartmentsCont `json:"childDepartments"` //行政组织列表
Employees []EmployeesCont `json:"employees"` //人员列表
TitleDepartments []TitleDepartmentsCont `json:"titleDepartments"` //选择面包屑
}
// 审批节点选人行政组织节点
type ChildDepartmentsCont struct {
Id string `json:"id"` //行政组织ID
DepartmentKey string `json:"departmentKey"` //行政组织编码
DepartmentName string `json:"departmentName"` //行政组织名称
ParentId string `json:"parentId"` //上级ID
DepartmentNames string `json:"departmentNames"` //行政组织别名
}
// 审批节点选人人员节点
type EmployeesCont struct {
Id string `json:"id"`
EmployeeName string `json:"employeeName"` //人员名称
IsLeave string `json:"isLeave"` //行政组织名称
Open string `json:"open"` //上级ID
Icon string `json:"icon"` //头像
IconToBase64 string `json:"iconToBase64"` //头像
}
// 审批节点选择面包屑
type TitleDepartmentsCont struct {
DepartmentId string `json:"departmentId"` //行政组织ID
ChildDepartmentsCont
}
// 获取指定行政组织列表
type OrgIdList struct {
OrgId []int64 `json:"orgid"`
}

6
api/version1/personnelapi/controll.go

@ -310,14 +310,20 @@ func ducationToInt(emp string) int {
return 5
case "函授专科":
return 6
case "专科":
return 7
case "大学专科":
return 7
case "函授本科":
return 8
case "本科":
return 9
case "大学本科":
return 9
case "硕士研究生":
return 10
case "研究生":
return 10
case "博士研究生":
return 11
case "专家、教授":

57
api/version1/personnelapi/kingdeenew.go

@ -40,14 +40,17 @@ func (s *StaffApi) NewKingdee(c *gin.Context) {
if manErr == nil {
//已经存在!进行变动操作
manErr = eidtAddManContJinDie(manContent, requestData)
overallhandle.WriteLog("i", "已经存在!进行变动操作!", saveKingDee)
} else {
//不存在!进行新增操作
var oldSchool models.WorkMan
oldSchool.GetCont(map[string]interface{}{"wm_number": requestData.Number})
manErr = newAddManContJinDie(oldSchool, requestData)
overallhandle.WriteLog("i", "不存在!进行新增操作!", manErr, saveKingDee)
}
if manErr != nil {
overallhandle.Result(104, manErr, c)
overallhandle.WriteLog("e", "数据处理失败!", manErr, saveKingDee)
return
}
overallhandle.WriteLog("t", "执行行人员信息对接对照结束!")
@ -303,7 +306,8 @@ func newAddManContJinDie(oldSchool models.WorkMan, manCont addKingdeePersonneles
var manMainCont models.PersonArchives
manMainCont.Number = manCont.Number
manMainCont.Name = manCont.Name
manMainCont.Icon = manCont.Icon
// manMainCont.Icon = manCont.Icon
manMainCont.IconPhoto = manCont.Icon
// hireTypesbd, hireTypesbdErr := overallhandle.StringToInt(manCont.HireType)
// if hireTypesbdErr != nil {
// hireTypesbd = 1
@ -602,14 +606,35 @@ func editManAuxiliaryDataNew(manKeyNum int64, manCont addKingdeePersonneles) {
}
}
if manCont.Iisdoubleworker != "" {
isdoulw, _ := overallhandle.StringToInt(manCont.Iisdoubleworker)
if manCont.Iisdoubleworker == "是" {
saveData["isdoubleworker"] = 1
eidtDoubleWorkerNew(manKeyNum, manCont, 1)
} else {
isdoulw, isdoulwErr := overallhandle.StringToInt(manCont.Iisdoubleworker)
if isdoulwErr == nil {
if isdoulw == 0 {
isdoulw = 1
} else {
isdoulw = 2
}
} else {
isdoulw = 2
}
if isdoulw != manInfo.Isdoubleworker {
saveData["isdoubleworker"] = isdoulw
}
eidtDoubleWorkerNew(manKeyNum, manCont, isdoulw)
}
if manCont.Isveterans != "" {
}
if manCont.Isveterans != "" && manCont.Isveterans != "0" {
isveters, _ := overallhandle.StringToInt(manCont.Isveterans)
if isveters == 2 {
isveters = 1
} else {
isveters = 2
}
if isveters != manInfo.Isveterans {
saveData["isveterans"] = isveters
}
@ -620,6 +645,11 @@ func editManAuxiliaryDataNew(manKeyNum int64, manCont addKingdeePersonneles) {
} else {
saveData["veteransnumber"] = ""
}
} else {
if manCont.Veteransnumber != "" {
saveData["isveterans"] = 1
saveData["veteransnumber"] = manCont.Veteransnumber
}
}
if manCont.WorkingDate != "" {
workInData, workInDataErr := overallhandle.DateToTimeStamp(manCont.WorkingDate)
@ -682,7 +712,7 @@ func editManAuxiliaryDataNew(manKeyNum int64, manCont addKingdeePersonneles) {
saveData["`time`"] = time.Now().Unix()
manInfo.EiteCont(map[string]interface{}{"`key`": manInfo.Key}, saveData)
}
fmt.Printf("editManAuxilia-----------1---------->%v\n", manErr)
fmt.Printf("editManAuxilia-----------1---------->%v\n", saveData)
} else {
fmt.Printf("editManAuxilia----------2----------->%v\n", manErr)
manInfo.Key = manKeyNum
@ -759,13 +789,15 @@ func editManAuxiliaryDataNew(manKeyNum int64, manCont addKingdeePersonneles) {
} else {
manInfo.Isdoubleworker = 2
}
if manCont.Isveterans != "" {
if manCont.Isveterans != "" && manCont.Isveterans != "0" {
issssveterans, _ := overallhandle.StringToInt(manCont.Isveterans)
manInfo.Isveterans = issssveterans
} else {
manInfo.Isveterans = 2
}
if manCont.Veteransnumber != "" {
manInfo.Isveterans = 1
}
manInfo.Veteransnumber = manCont.Veteransnumber
// workInData := time.Now().Unix()
var workInData int64 = 0
@ -808,10 +840,11 @@ func editManAuxiliaryDataNew(manKeyNum int64, manCont addKingdeePersonneles) {
manInfo.PoliticalOutlookCn = manCont.PoliticalOutlook
overall.CONSTANT_DB_HR.Create(&manInfo)
if manCont.Iisdoubleworker == "1" && manCont.Iisdoubleworker == "是" {
if manCont.Iisdoubleworker == "0" || manCont.Iisdoubleworker == "是" {
//编辑双职工
eidtDoubleWorkerNew(manKeyNum, manCont, 1)
}
}
}
@ -1147,6 +1180,7 @@ func educatExperKingdeeNew(manKeyNum int64, manCont addKingdeePersonneles) {
}
}
//第一学历
// fmt.Printf("第一学历------>%v\n", manCont.FirstGraduationSchool)
if manCont.FirstGraduationSchool != "" {
//第一学历
var perEduContFirst models.PersonnelEducation
@ -1227,13 +1261,16 @@ func educatExperKingdeeNew(manKeyNum int64, manCont addKingdeePersonneles) {
}
perEduContFirst.AdmissionTime = entranceTimeFirst // 入学时间"`
graduationTimef := time.Now().Unix()
if manCont.HighestGraduationTime != "" {
if manCont.FirstGraduationTime != "" {
graduationTimefErr := false
graduationTimef, _ = overallhandle.DateToTimeStamp(manCont.HighestGraduationTime)
graduationTimef, graduationTimefErr = overallhandle.DateToTimeStamp(manCont.FirstGraduationTime)
if graduationTimefErr == false {
graduationTimef, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.HighestGraduationTime))
graduationTimef, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.FirstGraduationTime))
}
}
// fmt.Printf("第一学历------>%v------>%v\n", graduationTimef, manCont.FirstGraduationTime)
perEduContFirst.GraduationTime = graduationTimef // 毕业时间"`
perEduContFirst.Time = time.Now().Unix() // 写入时间"`
// fitAcmicDgree, _ := overallhandle.StringToInt(manCont.FirstAcademicDegree)

8
api/version1/personnelapi/mancont.go

@ -114,12 +114,17 @@ func (s *StaffApi) EditManOrgCont(c *gin.Context) {
saveData["person_in_charge"] = requestData.PersonInCharge
}
if requestData.PersonInCharge == 1 {
if len(requestData.OrgresList) > 0 {
jsonCont, jsonErr := json.Marshal(requestData.OrgresList)
if jsonErr == nil {
saveData["responsible_department_json"] = string(jsonCont)
}
}
} else {
saveData["responsible_department_json"] = ""
}
if requestData.PersonInCharge == 1 {
if len(requestData.Resallorg) > 0 {
var orgResList []string
for i := 0; i < len(requestData.Resallorg); i++ {
@ -131,6 +136,9 @@ func (s *StaffApi) EditManOrgCont(c *gin.Context) {
orgResListStr := strings.Join(orgResList, ",")
saveData["responsible_department"] = orgResListStr
}
} else {
saveData["responsible_department"] = ""
}
// fmt.Printf("%v\n", saveData)
// return
if len(saveData) < 1 {

4
api/version1/personnelapi/staffarchives.go

@ -2175,9 +2175,11 @@ 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
if satffCont.ResponsibleDepartmentJson != "" {
jsonErr := json.Unmarshal([]byte(satffCont.ResponsibleDepartmentJson), &staffCenter.OrgresList)
fmt.Printf("satffCont---------->%v---------->%v---------->%v\n", satffCont.ResponsibleDepartmentJson, satffCont, jsonErr)
}
overallhandle.Result(0, staffCenter, c)
// return
}

124
api/version1/shiyan/shiyan.go

@ -2,6 +2,7 @@ package shiyan
import (
"fmt"
"hr_server/api/jindie_docking/dockingorganization"
"hr_server/api/version1/personnelapi"
"hr_server/middleware/snowflake"
"hr_server/models"
@ -39,7 +40,7 @@ func (s *ShiYan) ShiyanCont(c *gin.Context) {
overallhandle.Result(0, eiteErr, c)
}
//人员迁移
// 人员迁移
func (s *ShiYan) PersonnelMigration(c *gin.Context) {
var oldManCount int64
err := overall.CONSTANT_DB_Master.Model(&models.WorkMan{}).Where("wm_group = 3").Pluck("COALESCE(COUNT(wm_id), 0) as countid", &oldManCount).Error
@ -71,7 +72,7 @@ func (s *ShiYan) PersonnelMigration(c *gin.Context) {
overallhandle.Result(0, outMap, c)
}
//分片写入人员
// 分片写入人员
func (p *peopleQianyi) writeUser(page, pagesize int) {
// p.mutext.Lock()
// defer p.mutext.Unlock()
@ -169,7 +170,7 @@ func (p *peopleQianyi) writeUser(page, pagesize int) {
synPro.Done()
}
//获取企业微信对照表
// 获取企业微信对照表
func GetWorkWechatDuiZhao(openid string) (userInfoStruct models.WechatUsers, isTrue bool) {
isTrue = false
myErr := overall.CONSTANT_DB_Wechat.Where("userid = ?", openid).First(&userInfoStruct).Error
@ -179,7 +180,7 @@ func GetWorkWechatDuiZhao(openid string) (userInfoStruct models.WechatUsers, isT
return
}
//获取人员组织架构信息
// 获取人员组织架构信息
func getUserOrgSchool(group, depart, workid, position int64) (gro, org, positionId int64, department string) {
groupAry := map[int64]int64{3: 2}
for gi, gv := range groupAry {
@ -248,7 +249,7 @@ func getUserOrgSchool(group, depart, workid, position int64) (gro, org, position
return
}
//获取组织架构对照
// 获取组织架构对照
func getOrgSchool(id int64) (deparmentId, orgId int64) {
var orgInfo outOrgCont
err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("id,organization_type,superior").Where("schoole = ?", id).First(&orgInfo).Error
@ -270,7 +271,7 @@ func getOrgSchool(id int64) (deparmentId, orgId int64) {
return
}
//获取hr系统中的职务
// 获取hr系统中的职务
func getHrPosition(posId int64) int64 {
var id int64
err := overall.CONSTANT_DB_HR.Model(&models.Position{}).Select("id").Where("`school` = ?", posId).First(&id).Error
@ -280,7 +281,7 @@ func getHrPosition(posId int64) int64 {
return 0
}
//获取职务相关属性
// 获取职务相关属性
func getJobInfo(jobId int64) (cont jobAttber, err error) {
var positionInfo models.Position
// err = overall.CONSTANT_DB_HR.Table(fmt.Sprintf("%s p", positionInfo.TableName())).Select("p.id,p.number,p.name,p.person_in_charge,d.id as dutid,d.name as dutname,d.number as dutnumber,j.id as jobid,j.name as jobname").Joins("left join duties as d on d.id = p.duties").Joins("left join job_class as j on j.id = d.job_type").Where("`p`.`id` = ?", jobId).First(&cont).Error
@ -288,7 +289,7 @@ func getJobInfo(jobId int64) (cont jobAttber, err error) {
return
}
//视图操作
// 视图操作
func (s *ShiYan) Shitu(c *gin.Context) {
// var shituList []ShituType
// err := overall.CONSTANT_DB_HR.Limit(20).Offset(21).Find(&shituList)
@ -305,7 +306,7 @@ func (s *ShiYan) Shitu(c *gin.Context) {
overallhandle.Result(0, out, c)
}
//人员状态数据对正
// 人员状态数据对正
func (s *ShiYan) PeopleStatus(c *gin.Context) {
var manList []models.PersonArchives
err := overall.CONSTANT_DB_HR.Model(&manList).Select("`id`,`emp_type_name`").Find(&manList).Error
@ -319,3 +320,108 @@ func (s *ShiYan) PeopleStatus(c *gin.Context) {
}
overallhandle.Result(0, err, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-22 11:34:18
@ 功能: 手动同步行政组织类型
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (s *ShiYan) HandMovementType(c *gin.Context) {
dockingorganization.GetOrgType()
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-22 11:37:00
@ 功能: 手动同步职务类型
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (s *ShiYan) HandMovementJobType(c *gin.Context) {
dockingorganization.JobClass()
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-22 11:38:08
@ 功能: 手动同步职务
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (s *ShiYan) HandMovementJob(c *gin.Context) {
dockingorganization.DutiesContrast()
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-22 11:39:28
@ 功能: 手动同步行政组织
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (s *ShiYan) HandMovementOrgCont(c *gin.Context) {
dockingorganization.OrgAdmin()
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-22 11:39:28
@ 功能: 手动同步职位
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (s *ShiYan) HandMovementPostCont(c *gin.Context) {
dockingorganization.Position()
}

10
apirouter/organization/organization_group.go

@ -45,7 +45,13 @@ func (o *OrganizationRoute) InitRouterGroup(route *gin.RouterGroup) {
apiRouter.POST("govthreeaboutman", apiHandle.GovThreeAboutMan) //行政组织树及相关人员
apiRouter.POST("search_org_people", apiHandle.SearchOrgAndPeople) //角色组织与人员搜索列表
apiRouter.POST("get_org_everyone_people", apiHandle.GetOrgAndEveryOnePeople) //行政组织树及相关人员(新版)
apiRouter.POST("getcompanydeparment", apiHandle.GetCompanyDeparment) //获取当前行政组织的所有主行政部门
apiRouter.POST("basis_org_obtain_sonorg_and_man", apiHandle.BasisOrgObtainSonOrgAndMan) //根据行政组织编号获取组织及人员
apiRouter.POST("getappointorg", apiHandle.GetAppointOrg) //获取指定行政组织列表
//职位(岗位)
apiRouter.POST("positionlist", apiHandle.PositionList) //职位(岗位)列表
apiRouter.POST("getpositioncont", apiHandle.GetPositionCont) //获取职位(岗位)
@ -60,6 +66,8 @@ func (o *OrganizationRoute) InitRouterGroup(route *gin.RouterGroup) {
apiRouter.POST("addpositioncontnew", apiHandle.AddPositionContNew) //添加职位(岗位)新版
apiRouter.POST("get_my_posit_list", apiHandle.GetMyPositionList) //获取本岗位下的职位(岗位)列表不包含子行政组织
apiRouter.POST("positionpeoplelist", apiHandle.PositionPeopleList) //职位(岗位)列表及相关人员
//班组
apiRouter.POST("teamcontlist", apiHandle.TeamContList) //班组列表
apiRouter.POST("getteamcont", apiHandle.GetTeamCont) //获取班组
@ -111,6 +119,8 @@ func (o *OrganizationRouteOpen) InitRouterGroup(route *gin.RouterGroup) {
apiRouter.POST("search_org_people", apiHandle.SearchOrgAndPeople) //角色组织与人员搜索列表
apiRouter.POST("getcompanydeparment", apiHandle.GetCompanyDeparment) //获取当前行政组织的所有主行政部门
apiRouter.POST("basis_org_obtain_sonorg_and_man", apiHandle.BasisOrgObtainSonOrgAndMan) //根据行政组织编号获取组织及人员
//职位(岗位)
apiRouter.POST("positionlist", apiHandle.PositionList) //职位(岗位)列表
apiRouter.POST("getpositioncont", apiHandle.GetPositionCont) //获取职位(岗位)

3
apirouter/personnel/people.go

@ -16,7 +16,8 @@ func (p *PersonnelRoute) InitRouterGroup(route *gin.RouterGroup) {
apiRouter.POST("stafflist", apiHandle.StaffList) //人员列表
apiRouter.POST("addstaff", apiHandle.AddStaff) //添加人员档案
apiRouter.POST("allocationofrights", apiHandle.AllocationOfRights) //分配权限
apiRouter.POST("archiveslist", apiHandle.ArchivesList) //人员列表(新)
// apiRouter.POST("archiveslist", apiHandle.ArchivesList) //人员列表(新)
apiRouter.POST("archiveslist", apiHandle.ArchivesListWai) //人员列表(新)
apiRouter.POST("archivescont", apiHandle.ArchivesCon) //个人档案
apiRouter.POST("kingdeehr", apiHandle.NewKingdee) //对接金蝶HR系统
apiRouter.POST("editpassword", apiHandle.EditPassWord) //修改密码

8
apirouter/shiyanrouter/shiyan.go

@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin"
)
//组织架构
// 组织架构
func (p *ShiyanApiRouter) InitRouterGroup(route *gin.RouterGroup) {
apiRouter := route.Group("shiyan")
var apiHandle = version1.AppApiInlet.ShiyanApi
@ -17,5 +17,11 @@ func (p *ShiyanApiRouter) InitRouterGroup(route *gin.RouterGroup) {
apiRouter.POST("personnelmigration", apiHandle.PersonnelMigration) //人员迁移
apiRouter.POST("shitu", apiHandle.Shitu)
apiRouter.POST("peoplestatus", apiHandle.PeopleStatus) //人员状态数据对正
apiRouter.POST("hand_movement_orgtype", apiHandle.HandMovementType) //手动同步行政组织类型
apiRouter.POST("hand_movement_jobtype", apiHandle.HandMovementJobType) //手动同步职务类型
apiRouter.POST("hand_movement_job", apiHandle.HandMovementJob) //手动同步职务类型
apiRouter.POST("hand_movement_orgcont", apiHandle.HandMovementOrgCont) //手动同步行政组织
apiRouter.POST("hand_movement_postcont", apiHandle.HandMovementPostCont) //手动同步职位
}
}

10
models/administrative_organization.go

@ -5,7 +5,7 @@ import (
"strings"
)
//行政组织
// 行政组织
type AdministrativeOrganization 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:行政编码"`
@ -26,13 +26,13 @@ func (AdministrativeOrganization *AdministrativeOrganization) TableName() string
return "administrative_organization"
}
//编辑行政组织内容
// 编辑行政组织内容
func (cont *AdministrativeOrganization) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error
return
}
//获取行政组织内容
// 获取行政组织内容
func (cont *AdministrativeOrganization) GetCont(whereMap interface{}, field ...string) (err error) {
gormDb := overall.CONSTANT_DB_HR.Model(&cont)
if len(field) > 0 {
@ -44,13 +44,13 @@ func (cont *AdministrativeOrganization) GetCont(whereMap interface{}, field ...s
return
}
//根据条件获取总数
// 根据条件获取总数
func (cont *AdministrativeOrganization) CountCont(whereMap interface{}) (countId int64) {
overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId)
return
}
//读取全部信息
// 读取全部信息
func (cont *AdministrativeOrganization) ContMap(whereMap interface{}) (countAry []AdministrativeOrganization) {
overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Find(&countAry)
return

39
overall/overallhandle/overall_handle.go

@ -842,3 +842,42 @@ func GetYearOfMonthHaveDay(year, month int) (day int) {
}
return 28
}
/*
*
@ 作者: 秦东
@ 时间: 2023-01-29 11:37:59
@ 功能: 获取行政组织父级列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *AllSunList[int64]) GetAllParentOrg(superior int64, level int) (err error) {
var orgAry models.OrgContType
gormDb := overall.CONSTANT_DB_HR.Model(&models.OrgContType{}).Select("`id`,`superior`,`level`").Where("`state` = 1 AND `id` = ?", superior)
if level != 0 {
gormDb = gormDb.Where("`level` > ?", level)
}
err = gormDb.First(&orgAry).Error
if err != nil {
return
}
idInt := int64(orgAry.Superior)
var fatherCont models.OrgContType
fatherCont.GetCont(map[string]interface{}{"`id`": idInt}, "`level`")
if orgAry.Superior != 0 && int64(fatherCont.Level) > int64(level) {
if IsInTrue[int64](idInt, a.SunList) == false {
a.SunList = append(a.SunList, idInt)
}
}
a.GetAllParentOrg(idInt, level)
return
}

5
overall/overallhandle/type.go

@ -77,3 +77,8 @@ type EditState struct {
State int `json:"state"` //状态
Constrain int `json:"constrain"` //强制执行 1:是;2:否
}
//获取所有行政组织父级
type GetParentAllOrg struct {
OrgList []models.AdministrativeOrganization `json:"org_list` //行政组织列表
}

Loading…
Cancel
Save