diff --git a/README_ZHAH.md b/README_ZHAH.md deleted file mode 100644 index 5ccccb6..0000000 --- a/README_ZHAH.md +++ /dev/null @@ -1,154 +0,0 @@ -## Hr Server项目结构 1 - -```Project -|—— api - └── version1 - └── empower -|—— router -|—— initialization - └── database - └── nosql - └── app - └── route -|identification -|—— config - └── database - └── nosql - └── app -|—— models -|—— overall -|—— middleware -``` - -## Hr 文件结构说明 - -| 文件夹 | 说明 | 描述 | -| ------------------ | ---------------- | ---------------------------------- | -| `api` | api相关业务 | api业务实现 | -| `--version1` | 业务版本文件夹 | 版本界定 | -| `--empower` | OAuth 2.0 授权 | 授权Token | -| `router` | 路由器 | 业务路由设定 | -| `initialization` | 初始化相关业务 | 系统初始化方面的实现 | -| `--database` | 数据库业务 | 数据库业务初始化实现 | -| `--nosql` | nosql数据库业务 | nosql业务初始化实现(例:Redis) | -| `--app` | app数据库业务 | app业务初始化实现 | -| `--route` | 路由初始化 | 路由初始化 | -| `identification` | 授权验证器 | 授权验证器 | -| `config` | 系统配置相关业务 | 系统系统配置方面的实现 | -| `--database` | 数据库业务 | 数据库业务系统配置实现 | -| `--nosql` | nosql数据库业务 | nosql业务系统配置实现(例:Redis) | -| `--app` | app数据库业务 | app业务系统配置实现 | -| `models` | 数据模型 | 数据库方面的配置 | -| `overall` | 全局对象 | 全局对象 | -| `middleware` | 中间件 | 中间件 | - -## 加密规则 - -``` - 1、分解步骤 - one = md5(CodeString)+md5(AppKey) - two = md5(one)+AppKey - therr = md5(two) - 2、合并 - md5(md5(md5(CodeString)+md5(AppKey))+AppKey) -``` - -## 接口访问规则 - -1、以POST方式访问 http://xxxx/empower/gaintoken - -#### 参数 - -```json - { - "username":"jindie", - "password":"jindie123" - } -``` - -| 参数 | 说明 | -| -------- | ---- | -| username | 账号 | -| password | 密码 | - -#### 返回值 - -```json - { - "code": 0, - "msg": "成功", - "data": { - "token": "6235a9de7109ba50852f3f9d3b3052ae", - "number": "16534571868477" - } - } -``` - -| 参数 | 说明 | | -| ---- | ------ | -------------------------- | -| code | | 状态码 | -| msg | | 信息 | -| data | | 附加值 | -| | token | Token(有效时间为180分钟) | -| | number | 随机数 | - -1、以POST方式访问 http://xxxx/接口 - -#### Header参数 - -| 参数 | 说明 | -| ------------ | ------------------------------ | -| token | 获取到得参数 | -| number | 加密后得随机数(参考加密规则) | -| Content-Type | 内容类型 | -| Origin | 站点信息 | -| User-Agent | 用户代理 | - -#### Body参数 (接口需要得添加参数) - -```json - { - "page":"1", - "pagesize":"20" - } -``` - -| 参数 | 说明 | -| -------- | -------------- | -| page | 页码 | -| pagesize | 每页显示多少条 | - -#### 返回值 - -```json - { - "code": 0, - "msg": "成功", - "data": { - "count": 20, - "page": 1, - "pageSize": 20, - "total": 1147, - "list": [] - } - } -``` - -| 参数 | 说明 | | -| ---- | -------- | -------------- | -| code | | 状态码 | -| msg | | 信息 | -| data | | 附加值 | -| | count | 本页共多少数据 | -| | page | 当前页码 | -| | pageSize | 每页显示多少条 | -| | .... | .... | - -#### 认证信息 - -| 参数 | 说明 | -| ---------------- | ------------------------ | -| UserKey | SdRxjt@zhah001 | -| Password | Rx@Zhi$Hui%AnHuan | -| VerificationCode | rxjt_zhan | -| 访问地址 | http://120.224.6.6:39168 | diff --git a/README_luruan.md b/README_luruan.md new file mode 100644 index 0000000..cd3c331 --- /dev/null +++ b/README_luruan.md @@ -0,0 +1,110 @@ +## 加密规则 + +``` + 1、分解步骤 + one = md5(CodeString)+md5(AppKey) + two = md5(one)+AppKey + therr = md5(two) + 2、合并 + md5(md5(md5(CodeString)+md5(AppKey))+AppKey) +``` + +## 接口访问规则 + +1、以POST方式访问 http://xxxx/empower/gaintoken + +#### 参数 + +```json + { + "username":"luruankeji", + "password":"lu@ruan#ke$ji" + } +``` + +| 参数 | 说明 | +| -------- | ---- | +| username | 账号 | +| password | 密码 | + +#### 返回值 + +```json + { + "code": 0, + "msg": "成功", + "data": { + "token": "e869bb125d2ef2cd099f7f0bfc413eec", + "number": "17115918338182" + } + } +``` + +| 参数 | 说明 | | +| ---- | ------ | -------------------------- | +| code | | 状态码 | +| msg | | 信息 | +| data | | 附加值 | +| | token | Token(有效时间为180分钟) | +| | number | 随机数 | + +1、以POST方式访问 http://xxxx/接口 + +#### Header参数 + +| 参数 | 说明 | +| ------------ | ------------------------------ | +| token | 获取到得参数 | +| number | 加密后得随机数(参考加密规则) | +| Content-Type | 内容类型 | +| Origin | 站点信息 | +| User-Agent | 用户代理 | + +#### Body参数 (接口需要得添加参数) + +```json + { + "page":"1", + "pagesize":"20" + } +``` + +| 参数 | 说明 | +| -------- | -------------- | +| page | 页码 | +| pagesize | 每页显示多少条 | + +#### 返回值 + +```json + { + "code": 0, + "msg": "成功", + "data": { + "count": 20, + "page": 1, + "pageSize": 20, + "total": 1147, + "list": [] + } + } +``` + +| 参数 | 说明 | | +| ---- | -------- | -------------- | +| code | | 状态码 | +| msg | | 信息 | +| data | | 附加值 | +| | count | 本页共多少数据 | +| | page | 当前页码 | +| | pageSize | 每页显示多少条 | +| | .... | .... | + +#### 认证信息 + +| 参数 | 说明 | +| ---------------- | ---------------------------------------------------------------------- | +| UserKey | luruankeji | +| Password | lu@ruan#ke$ji | +| VerificationCode | luquan_hr | +| 访问地址 | 外网--->http://120.224.6.6:39168
内网--->http://172.20.2.87:39168 | diff --git a/README_yikatong.md b/README_yikatong.md new file mode 100644 index 0000000..5c16bc3 --- /dev/null +++ b/README_yikatong.md @@ -0,0 +1,110 @@ +## 加密规则 + +``` + 1、分解步骤 + one = md5(CodeString)+md5(AppKey) + two = md5(one)+AppKey + therr = md5(two) + 2、合并 + md5(md5(md5(CodeString)+md5(AppKey))+AppKey) +``` + +## 接口访问规则 + +1、以POST方式访问 http://xxxx/empower/gaintoken + +#### 参数 + +```json + { + "username":"luruankeji", + "password":"lu@ruan#ke$ji" + } +``` + +| 参数 | 说明 | +| -------- | ---- | +| username | 账号 | +| password | 密码 | + +#### 返回值 + +```json + { + "code": 0, + "msg": "成功", + "data": { + "token": "e869bb125d2ef2cd099f7f0bfc413eec", + "number": "17115918338182" + } + } +``` + +| 参数 | 说明 | | +| ---- | ------ | -------------------------- | +| code | | 状态码 | +| msg | | 信息 | +| data | | 附加值 | +| | token | Token(有效时间为180分钟) | +| | number | 随机数 | + +1、以POST方式访问 http://xxxx/接口 + +#### Header参数 + +| 参数 | 说明 | +| ------------ | ------------------------------ | +| token | 获取到得参数 | +| number | 加密后得随机数(参考加密规则) | +| Content-Type | 内容类型 | +| Origin | 站点信息 | +| User-Agent | 用户代理 | + +#### Body参数 (接口需要得添加参数) + +```json + { + "page":"1", + "pagesize":"20" + } +``` + +| 参数 | 说明 | +| -------- | -------------- | +| page | 页码 | +| pagesize | 每页显示多少条 | + +#### 返回值 + +```json + { + "code": 0, + "msg": "成功", + "data": { + "count": 20, + "page": 1, + "pageSize": 20, + "total": 1147, + "list": [] + } + } +``` + +| 参数 | 说明 | | +| ---- | -------- | -------------- | +| code | | 状态码 | +| msg | | 信息 | +| data | | 附加值 | +| | count | 本页共多少数据 | +| | page | 当前页码 | +| | pageSize | 每页显示多少条 | +| | .... | .... | + +#### 认证信息 + +| 参数 | 说明 | +| ---------------- | ---------------------------------------------------------------------- | +| UserKey | yikatong | +| Password | yi@ka#tong$app | +| VerificationCode | yiKaTong_hr | +| 访问地址 | 外网--->http://120.224.6.6:39168
内网--->http://172.20.2.87:39168 | diff --git a/api/jindie_docking/dockingorganization/controller.go b/api/jindie_docking/dockingorganization/controller.go index d9e6933..5e17c33 100644 --- a/api/jindie_docking/dockingorganization/controller.go +++ b/api/jindie_docking/dockingorganization/controller.go @@ -104,7 +104,7 @@ func GetOrgType() { } var orgAll []models.AdministrativeOrganizationType allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&orgAll).Error - if allErr == nil { + if allErr == nil && len(orgAll) > 0 { var eidtId []string for _, av := range orgAll { if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false { @@ -113,7 +113,7 @@ func GetOrgType() { } } } - if len(eidtId) > 0 { + if len(eidtId) > 0 && len(orgAll) > len(eidtId) { orgContEditErr := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganizationType{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error if orgContEditErr == nil { overallhandle.WriteLog("edit", "禁用已不使用得行政组织类型成功!", orgContEditErr, eidtId) @@ -190,7 +190,7 @@ func JobClass() { var jobClassAll []models.JobClass allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&jobClassAll).Error - if allErr == nil { + if allErr == nil && len(jobClassAll) > 0 { var eidtId []string for _, av := range jobClassAll { if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false { @@ -199,7 +199,7 @@ func JobClass() { } } } - if len(eidtId) > 0 { + if len(eidtId) > 0 && len(jobClassAll) > len(eidtId) { jobClassContEditErr := overall.CONSTANT_DB_HR.Model(&models.JobClass{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error if jobClassContEditErr == nil { overallhandle.WriteLog("edit", "禁用已不使用得职务类型成功!", jobClassContEditErr, eidtId) @@ -229,6 +229,7 @@ func DutiesContrast() { overallhandle.WriteLog("e", "未能获取到职务!", jobInfo) return } + // fmt.Printf("jobInfo:%v\n", jobInfo) var kingDeeIdAry []string //进行职务对照 for _, v := range jobInfo { @@ -237,7 +238,7 @@ func DutiesContrast() { } //判断该项是否存在 var dutiesCont models.Duties - dutiesErr := dutiesCont.GetCont(map[string]interface{}{"kingdeeid": v.Id}, "`id`", "`name`", `state`, `job_type`) + dutiesErr := dutiesCont.GetCont(map[string]interface{}{"kingdeeid": v.Id}, "`id`", "`name`", "`number`", "`state`", "`job_type`") if dutiesErr == nil { //存在,进行更新 //获取职务Id @@ -247,23 +248,27 @@ func DutiesContrast() { isCaoZuo := false if v.Name != dutiesCont.Name { if dutiesCont.JobType != jobClassInfo.Id { - editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"name": v.Name, "state": 1, "job_type": jobClassInfo.Id}) + editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"name": v.Name, "state": 1, "job_type": jobClassInfo.Id, "`number`": v.Fnumber}) isCaoZuo = true } else { - editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"name": v.Name, "state": 1}) + editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"name": v.Name, "state": 1, "`number`": v.Fnumber}) isCaoZuo = true } } else { if dutiesCont.State != 1 { if dutiesCont.JobType != jobClassInfo.Id { - editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"state": 1, "job_type": jobClassInfo.Id}) + editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"state": 1, "job_type": jobClassInfo.Id, "`number`": v.Fnumber}) isCaoZuo = true } else { - editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"state": 1}) + editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"state": 1, "`number`": v.Fnumber}) isCaoZuo = true } } } + if v.Fnumber != dutiesCont.Number { + editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"`number`": v.Fnumber}) + isCaoZuo = true + } if isCaoZuo == true { if editOrgErr == nil { overallhandle.WriteLog("edit", "职务更新成功!", editOrgErr, v) @@ -287,6 +292,9 @@ func DutiesContrast() { if oldDutErr == nil { dutiesInfo.Weight = oldDutiesInfo.Weight dutiesInfo.Number = oldDutiesInfo.Number + } else { + dutiesInfo.Weight = 0 + dutiesInfo.Number = "" } dutiesInfo.Time = time.Now().Unix() dutiesInfo.State = 1 @@ -303,7 +311,7 @@ func DutiesContrast() { var dutiesAll []models.Duties allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&dutiesAll).Error - if allErr == nil { + if allErr == nil && len(dutiesAll) > 0 { var eidtId []string for _, av := range dutiesAll { if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false { @@ -312,7 +320,7 @@ func DutiesContrast() { } } } - if len(eidtId) > 0 { + if len(eidtId) > 0 && len(dutiesAll) > len(eidtId) { dutiesContEditErr := overall.CONSTANT_DB_HR.Model(&models.Duties{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error if dutiesContEditErr == nil { overallhandle.WriteLog("edit", "禁用已不使用得职务成功!", dutiesContEditErr, eidtId) @@ -378,7 +386,7 @@ func OrgAdmin() { if judgeOrgTypeErr == nil { if v.GovClass != judgeOrgType.KingdeeId { var orgTypeNewType models.AdministrativeOrganizationType - orgTypeNewTypeErr := orgTypeNewType.GetCont(map[string]interface{}{"kingdeeid": v.Superior}, "id") + orgTypeNewTypeErr := orgTypeNewType.GetCont(map[string]interface{}{"kingdeeid": v.GovClass}, "id") if orgTypeNewTypeErr == nil { saveData["organization_type"] = orgTypeNewType.Id isEdit = true @@ -453,7 +461,7 @@ func OrgAdmin() { //关闭已经弃用得行政组织 var orgAdminAll []models.AdministrativeOrganization allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&orgAdminAll).Error - if allErr == nil { + if allErr == nil && len(orgAdminAll) > 0 { var eidtId []string for _, av := range orgAdminAll { if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false { @@ -462,7 +470,7 @@ func OrgAdmin() { } } } - if len(eidtId) > 0 { + if len(eidtId) > 0 && len(orgAdminAll) > len(eidtId) { orgAdminEditErr := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error if orgAdminEditErr == nil { overallhandle.WriteLog("edit", "禁用已不使用得行政组织成功!", orgAdminEditErr, eidtId) @@ -579,7 +587,28 @@ func Position() { positCont.School = orgOldCont.School } positCont.Duties = zhiwuCont.Id - batchPosition = append(batchPosition, positCont) + + //判断该部门下此职位是否已经存在 + var posistInfo models.Position + overall.CONSTANT_DB_HR.Where("`name` = ? AND `department` = ?", v.Name, orgCont.Superior).First(&posistInfo) + if posistInfo.Id != 0 { + saveData := overallhandle.MapOut() + saveData["`number`"] = v.Fnumber + saveData["`duties`"] = zhiwuCont.Id + saveData["`time`"] = time.Now().Unix() + saveData["`administrative_organization`"] = orgCont.Id + // saveData["`superior`"] = orgCont.Superior + saveData["`person_in_charge`"] = positCont.PersonInCharge + saveData["`department`"] = orgCont.Superior + saveData["`kingdeeid`"] = v.FAdminOrgUnitID + + var savePostInfo models.Position + savePostInfo.EiteCont(map[string]interface{}{"`id`": posistInfo.Id}, saveData) + + } else { + batchPosition = append(batchPosition, positCont) + } + // if v.Id == "QBsfJ1fbSKW+3q6eOJltjHSuYS4=" { // fmt.Printf("positCont---->%v\n", positCont) // return @@ -629,7 +658,7 @@ func Position() { //关闭已经弃用得行政组织 var orgAdminAll []models.Position allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&orgAdminAll).Error - if allErr == nil { + if allErr == nil && len(orgAdminAll) > 0 { var eidtId []string for _, av := range orgAdminAll { if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false { @@ -638,7 +667,7 @@ func Position() { } } } - if len(eidtId) > 0 { + if len(eidtId) > 0 && len(orgAdminAll) > len(eidtId) { orgAdminEditErr := overall.CONSTANT_DB_HR.Model(&models.Position{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error if orgAdminEditErr == nil { overallhandle.WriteLog("edit", "禁用已不使用得职位成功!", orgAdminEditErr, eidtId) diff --git a/api/version1/administrativeorganization/govcont.go b/api/version1/administrativeorganization/govcont.go index f746a92..4636410 100644 --- a/api/version1/administrativeorganization/govcont.go +++ b/api/version1/administrativeorganization/govcont.go @@ -1155,6 +1155,7 @@ func (o *OrganizationApi) BasisOrgObtainSonOrgAndMan(c *gin.Context) { employess.EmployeeName = man.Name //人员名称 employess.IsLeave = "0" //行政组织名称 employess.Open = "false" //上级ID + employess.Number = man.Number // employess.Icon = man.Icon employess.IconToBase64 = man.IconPhoto employess.Wechat = man.Wechat diff --git a/api/version1/administrativeorganization/orgpost.go b/api/version1/administrativeorganization/orgpost.go index aa57ec2..18e0635 100644 --- a/api/version1/administrativeorganization/orgpost.go +++ b/api/version1/administrativeorganization/orgpost.go @@ -34,8 +34,10 @@ import ( func (o *OrganizationApi) GetOrgAndPostThree(c *gin.Context) { var requestData OrgAndMAnThreeType c.ShouldBindJSON(&requestData) - - redisFileKey := fmt.Sprintf("OrgPost:OrgPostContList:%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, "orgpostcont") + if requestData.Id == "" { + requestData.Id = "0" + } + redisFileKey := fmt.Sprintf("OrgPost:OrgPostContList:%v_%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, "orgpostcont", requestData.Id) redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) orgList, orgErr := redisClient.SMEMBERS(redisFileKey) @@ -85,6 +87,7 @@ func (o *OrganizationApi) GetOrgAndPostThree(c *gin.Context) { sendCont.Attribute = 1 sendCont.Sort = 1 sendCont.OrgId = strconv.FormatInt(v.Id, 10) + sendCont.Disabled = true if (i+1)%pageSize == 0 { contList = append(contList, sendCont) synProes.Add(1) @@ -167,6 +170,12 @@ func OrgAndPostThreeList(superiorId string, contList []OutPutOrgAndPost) []OutPu node.DepartId = v.DepartId node.DepartName = v.DepartName node.AdminOrg = v.AdminOrg + if v.OrgId != "-1" { + node.Disabled = true + } else { + node.Disabled = false + } + if len(child) > 0 { node.Child = child } @@ -208,6 +217,7 @@ func (o *OrgAndPostSync) GetPostInfoList(contList []OutPutOrgAndPost) { sendCont.Attribute = 2 sendCont.Sort = 2 sendCont.OrgId = "-1" + sendCont.Disabled = false sendCont.DepartId = strconv.FormatInt(departmentId, 10) sendCont.DepartName = departCont.Name sendCont.AdminOrg = strconv.FormatInt(v.AdministrativeOrganization, 10) diff --git a/api/version1/administrativeorganization/team.go b/api/version1/administrativeorganization/team.go index e10a935..23186fd 100644 --- a/api/version1/administrativeorganization/team.go +++ b/api/version1/administrativeorganization/team.go @@ -183,8 +183,13 @@ func (o *OrganizationApi) TeamContList(c *gin.Context) { if totalErr != nil { total = 0 } - var teamList []models.TeamGroup + var teamList []SendTimeAry err := gormDb.Limit(requestData.PageSize).Offset(overallhandle.LimitPage(requestData.Page, requestData.PageSize)).Find(&teamList).Error + for i, v := range teamList { + if v.State == 1 { + teamList[i].Status = true + } + } if err != nil { overallhandle.Result(105, err, c) } else { diff --git a/api/version1/administrativeorganization/type.go b/api/version1/administrativeorganization/type.go index 5e3bcf2..0ea2ec9 100644 --- a/api/version1/administrativeorganization/type.go +++ b/api/version1/administrativeorganization/type.go @@ -179,12 +179,12 @@ type positionOutInfo struct { AoName string `json:"aoname" gorm:"column:aoname;type:varchar(255) unsigned;default:'';not null;comment:组织名称"` AoNumber string `json:"aonumber" gorm:"column:aonumber;type:varchar(50) unsigned;default:'';not null;comment:行政编码"` JobName string `json:"jobname" gorm:"column:jobname;type:varchar(255) unsigned;default:'';not null;comment:职务类型"` - SuperiorName string `json:"superiorname"` //上级名称 - SuperiorNumber string `json:"superiornumber"` //上级编号 - DepartmentName string `json:"departmentname"` - IdStr string `json:"idstr"` - OrgListAry []int64 `json:"orglistary"` - Status bool `json:"status"` + SuperiorName string `json:"superiorname" gorm:"-"` //上级名称 + SuperiorNumber string `json:"superiornumber" gorm:"-"` //上级编号 + DepartmentName string `json:"departmentname" gorm:"-"` + IdStr string `json:"idstr" gorm:"-"` + OrgListAry []int64 `json:"orglistary" gorm:"-"` + Status bool `json:"status" gorm:"-"` } // 行政组织树查询 @@ -369,6 +369,7 @@ type ChildDepartmentsCont struct { type EmployeesCont struct { Id string `json:"id"` EmployeeName string `json:"employeeName"` //人员名称 + Number string `json:"number"` //人员工号 IsLeave string `json:"isLeave"` //行政组织名称 Open string `json:"open"` //上级ID Icon string `json:"icon"` //头像 @@ -406,6 +407,7 @@ type OutPutOrgAndPost struct { DepartId string `json:"departid"` //主责部门 DepartName string `json:"departname"` //主责部门名称 AdminOrg string `json:"adminorg"` //归属行政组织 + Disabled bool `json:"disabled"` // } // 循环输出 @@ -590,3 +592,9 @@ type CustomerFormUser struct { AdminOrgName string `json:"adminorgname"` Tel string `json:"tel"` } + +// 输出班组列表 +type SendTimeAry struct { + models.TeamGroup + Status bool `json:"status" gorm:"-"` +} diff --git a/api/version1/dataCenter/databastHanld.go b/api/version1/dataCenter/databastHanld.go new file mode 100644 index 0000000..4590a00 --- /dev/null +++ b/api/version1/dataCenter/databastHanld.go @@ -0,0 +1,389 @@ +package datacenter + +import ( + "encoding/json" + "errors" + "fmt" + "hr_server/overall" + "hr_server/overall/overallhandle" + "strings" + "time" + + "gorm.io/driver/mysql" + "gorm.io/driver/postgres" + "gorm.io/driver/sqlite" + "gorm.io/driver/sqlserver" + "gorm.io/gorm" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2024-12-24 11:28:46 +@ 功能: 建立SqlServer +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (c *DatabaseConfig) ConnectToSqlServer() (*gorm.DB, error) { + // connStr := "provider=SQLOLEDB;data source=你的服务器名;initial catalog=你的数据库名;user id=你的用户名;password=你的密码;" + // db, err := sql.Open("adodb", connStr) + // connStr := fmt.Sprintf("server=%v;user id=<%v>;password=<%v>;port=<%v>;database=<%v>;", c.Host, + // c.User, c.Password, c.Port, c.Name) + // db, err := sql.Open("mssql", connStr) + dsn := fmt.Sprintf("sqlserver://gorm:LoremIpsum86@%v:%v?database=%v", c.Host, c.Port, c.Name) + db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{}) + if err != nil { + return nil, err + } + sqlDb, _ := db.DB() + sqlDb.SetMaxIdleConns(5) + sqlDb.SetMaxOpenConns(2) + sqlDb.SetConnMaxLifetime(time.Minute) + return db, nil +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-12-24 09:59:12 +@ 功能: 建立PostgreSQL +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (c *DatabaseConfig) ConnectToPostgreSQL() (*gorm.DB, error) { + connStr := fmt.Sprintf("user=%s password=%s dbname=%s host=%s port=%d sslmode=disable", + c.User, c.Password, c.Name, c.Host, c.Port) + // db, err := sql.Open("postgres", connStr) + db, err := gorm.Open(postgres.Open(connStr), &gorm.Config{}) + if err != nil { + return nil, err + } + sqlDb, _ := db.DB() + sqlDb.SetMaxIdleConns(5) + sqlDb.SetMaxOpenConns(2) + sqlDb.SetConnMaxLifetime(time.Minute) + return db, nil +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-12-24 09:59:12 +@ 功能: 建立MySQL +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (c *DatabaseConfig) ConnectToMySQL() (*gorm.DB, error) { + connStr := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=utf8mb4", c.User, c.Password, c.Host, c.Port, c.Name) + // db, err := sql.Open("mysql", connStr) + fmt.Printf("sqlOpen: %v\n", connStr) + + sqlConfig := mysql.Config{ + DSN: connStr, // DSN + DefaultStringSize: 255, // string 类型字段的默认长度 + DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持 + DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引 + DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列 + SkipInitializeWithVersion: false, // 根据版本自动配置 + } + + db, err := gorm.Open(mysql.New(sqlConfig)) + if err != nil { + return nil, err + } + sqlDb, _ := db.DB() + sqlDb.SetMaxIdleConns(5) + sqlDb.SetMaxOpenConns(2) + sqlDb.SetConnMaxLifetime(time.Minute) + + return db, nil +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-12-24 09:59:12 +@ 功能: 建立SQLite +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (c *DatabaseConfig) ConnectToSQLite() (*gorm.DB, error) { + // db, err := sql.Open("sqlite3", c.Name) + db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{}) + if err != nil { + return nil, err + } + sqlDb, _ := db.DB() + sqlDb.SetMaxIdleConns(5) + sqlDb.SetMaxOpenConns(2) + sqlDb.SetConnMaxLifetime(time.Minute) + return db, nil +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-12-24 16:25:17 +@ 功能: Tidb +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (c *DatabaseConfig) ConnectToTiDb() (*gorm.DB, error) { + sql := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v", c.User, c.Password, c.Host, c.Port, c.Name) + db, err := gorm.Open(mysql.Open(sql), &gorm.Config{}) + if err != nil { + return nil, err + } + sqlDb, _ := db.DB() + sqlDb.SetMaxIdleConns(5) + sqlDb.SetMaxOpenConns(2) + sqlDb.SetConnMaxLifetime(time.Minute) + return db, nil +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-12-24 10:04:00 +@ 功能: 启动数据库 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (d *DataBastType) StartDataBast() (openDb *gorm.DB, err error) { + var configInfo DatabaseConfig + + if d.Ip == overall.CONSTANT_CONFIG.Appsetup.DefaultIP { + d.Ip = "127.0.0.1" + } + // fmt.Printf("对不起!当前不支持'%v'数据库。", d.Ip, overall.CONSTANT_CONFIG.Appsetup.DefaultIP) + configInfo.Name = d.DataBaseName + configInfo.Host = d.Ip + configInfo.Port = d.Port + configInfo.User = d.UserName + configInfo.Password = d.Pwd + switch strings.ToLower(d.Type) { + case "PostgreSQL", "postgresql", "postgre sql": + openDb, err = configInfo.ConnectToPostgreSQL() + case "MySQL", "mysql": + openDb, err = configInfo.ConnectToMySQL() + case "SQLite", "sqlite": + openDb, err = configInfo.ConnectToSQLite() + case "SqlServer", "sql server", "sqlserver": + openDb, err = configInfo.ConnectToSqlServer() + case "Tidb", "tidb", "TiDb", "TIDB": + openDb, err = configInfo.ConnectToMySQL() + default: + msg := fmt.Sprintf("对不起!当前不支持'%v'数据库。", d.DataBaseName) + err = errors.New(msg) + } + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-12-24 13:07:56 +@ 功能: 获取数据库中说有表 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + #获取数据库表comment +*/ +func (d *DataBastType) ObtainDataBaseAllTableMysql() (tableKeyValue []DataBaseTableInfo, err error) { + // tableKeyValue := overallhandle.MapOut[string]() + sqlDb, err := d.StartDataBast() + if err != nil { + return + } + + var valData []string + // // sql := fmt.Sprintf("SHOW %v", d.DataBaseName) + sqlDb.Raw("SHOW TABLES").Scan(&valData) + // if err != nil { + // return tableKeyValue, err + // } + // fmt.Println(rows) + fmt.Printf("%T----->%v\n", valData, valData) + // var + for _, v := range valData { + fmt.Printf("%T----->%v\n", v, v) + // sqlStr := fmt.Sprintf("SHOW `%v`", v) + + // sql := "SELECT TABLE_NAME AS `Table`, TABLE_COMMENT AS `Table Comment` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ?" + + // var list []Result + // err = sqlDb.Raw(sqlStr).Scan(&list).Error + // tableKeyValue[v] = list + var tableName string + sql := fmt.Sprintf("SELECT TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = \"%v\" AND TABLE_NAME = \"%v\";", d.DataBaseName, v) + err = sqlDb.Raw(sql).Scan(&tableName).Error + // tableKeyValue[v] = tableInfo + var tableInfo DataBaseTableInfo + tableInfo.TableName = tableName + tableInfo.TableKey = v + sqlStr := fmt.Sprintf("SHOW FULL COLUMNS FROM `%v`", v) + err = sqlDb.Raw(sqlStr).Scan(&tableInfo.Fields).Error + tableKeyValue = append(tableKeyValue, tableInfo) + } + // defer rows.Close() + // var tableName []string + // for rows.Next() { + // var table string + // err = rows.Scan(&table) + // if err == nil { + // tableName = append(tableName, table) + // } + // } + // if len(tableName) > 0 { + + // rows, err = sqlDb.Query("SHOW TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA IS NOT NULL") + // for _,v := range tableName{ + // sql := fmt.Sprintf("SHOW TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = %v AND TABLE_NAME = %v",d.DataBaseName,v) + // rows, err = sqlDb.Query("SHOW TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA IS NOT NULL") + // } + // if err != nil { + // return tableKeyValue, err + // } + // defer rows.Close() + + // var tableComments = make(map[string]string) + // for rows.Next() { + // var table, comment string + // if err := rows.Scan(&table, &comment); err != nil { + // // log.Fatal(err) + // fmt.Printf("rows----err---->:%v\n", err) + // } + // tableComments[table] = comment + // } + // fmt.Printf("rows-------->:%v\n", tableComments) + // } + + return tableKeyValue, err +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-12-30 16:49:14 +@ 功能: 获取数据源 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func GainDataStorce(dataId string) (openDb *gorm.DB, err error) { + sendUrl := fmt.Sprintf("http://120.224.6.6:29911/prod-api/database/app/datasource/page?pageNum=1&pageSize=%v&databaseName=&dataType=", 100000) + // fmt.Printf("1获取数据源===>%v\n", sendUrl) + getData := overallhandle.CurlGet(sendUrl) + // fmt.Printf("2获取数据源===>%v\n", getData) + var sendMap map[string]interface{} + json.Unmarshal(getData, &sendMap) + var sqlDb DataBastType + // fmt.Printf("3获取数据源===>%v\n", sendMap) + if code, ok := sendMap["code"]; ok { + // fmt.Printf("4获取数据源===>%v\n", code) + + codeInt, _ := overallhandle.StringToInt64(code) + if codeInt == 200 { + // jsonval, _ := json.Marshal(sendMap) + // fmt.Printf("\n\n\n6获取数据源===>%v\n\n\n", string(jsonval)) + if dataval, isOk := sendMap["data"]; isOk { + if dataMap, ok := dataval.(map[string]interface{}); ok { + if records, isOk := dataMap["records"]; isOk { + if recordAry, isOk := records.([]interface{}); isOk { + for _, v := range recordAry { + if vMAp, ok := v.(map[string]interface{}); ok { + // fmt.Printf("5获取数据源===>%T\n===>%v\n\n\n", vMAp, vMAp["id"]) + idStr := overallhandle.TypeToInterface(vMAp["id"]) + if idStr == dataId { + typeVal, _ := overallhandle.StringToInt64(vMAp["datasourceType"]) + sqlDb.Type = overallhandle.DatabaseIntToString(typeVal) + sqlDb.Ip = overallhandle.TypeToInterface(vMAp["ipAddress"]) + sqlDb.DataBaseName = overallhandle.TypeToInterface(vMAp["databaseName"]) + sqlDb.Port, _ = overallhandle.StringToInt64(vMAp["port"]) + sqlDb.UserName = overallhandle.TypeToInterface(vMAp["account"]) + sqlDb.Pwd = overallhandle.TypeToInterface(vMAp["password"]) + } + + } + // fmt.Printf("5获取数据源===>%T\n===>%v\n\n\n", v, v) + } + } + } + } + + } + } + } + // fmt.Printf("7获取数据源===>%T\n===>%v\n\n\n", sqlDb, sqlDb) + openDb, err = sqlDb.StartDataBast() + return +} diff --git a/api/version1/dataCenter/hander.go b/api/version1/dataCenter/hander.go new file mode 100644 index 0000000..b2361ba --- /dev/null +++ b/api/version1/dataCenter/hander.go @@ -0,0 +1,202 @@ +package datacenter + +import ( + "encoding/json" + "fmt" + "hr_server/overall/overallhandle" + "net/url" + "strings" + + "github.com/gin-gonic/gin" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2024-04-18 15:37:05 +@ 功能: 通用地址 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) GaindataCenter(c *gin.Context) { + var requestData DataInfo + c.ShouldBindJSON(&requestData) + if requestData.Url == "" { + overallhandle.Result(1, requestData, c, "未知访问地址") + return + } + // overallhandle.Result(1, requestData, c, "未知访问地址") + // return + if requestData.Where != "" { + if requestData.Method == "GET" { + var whereAry []string + whyOne := strings.Split(requestData.Where, "&") + if len(whyOne) > 0 { + for _, v := range whyOne { + whyTwo := strings.Split(v, "=") + if len(whyTwo) == 2 { + whereAry = append(whereAry, fmt.Sprintf("%v=%v", whyTwo[0], url.QueryEscape(whyTwo[1]))) + } else { + whereAry = append(whereAry, v) + } + } + } + getUrl := requestData.Url + if len(whereAry) > 0 { + getUrl = fmt.Sprintf("%v?%v", requestData.Url, strings.Join(whereAry, "&")) + } + + // getUrl = url.QueryEscape(getUrl) + // fmt.Printf("%T--------->%v\n", getUrl, getUrl) + getData := overallhandle.CurlGet(getUrl) + var sendMap map[string]interface{} + json.Unmarshal(getData, &sendMap) + // fmt.Printf("%T--------->%v--------->%v\n", sendMap, sendMap, getUrl) + // overallhandle.Result(0, sendMap, c) + shenData := overallhandle.MapOut() + if code, ok := sendMap["code"]; ok { + + if codeIn, ok := code.(float64); ok { + if codeIn == 200 { + shenData["code"] = 0 + } else { + shenData["code"] = codeIn + } + } + + } + if msg, ok := sendMap["msg"]; ok { + shenData["msg"] = msg + } + if data, ok := sendMap["data"]; ok { + shenData["data"] = data + } + overallhandle.ResultInterface(sendMap, c) + return + } else { + getData := overallhandle.CurlPostJosn(requestData.Url, []byte(requestData.Where)) + var sendMap map[string]interface{} + json.Unmarshal(getData, &sendMap) + overallhandle.ResultInterface(sendMap, c) + return + } + } else { + if requestData.Method == "GET" { + getUrl := fmt.Sprintf("%v", requestData.Url) + getData := overallhandle.CurlGet(getUrl) + var sendMap map[string]interface{} + json.Unmarshal(getData, &sendMap) + // overallhandle.Result(0, sendMap, c) + shenData := overallhandle.MapOut() + if code, ok := sendMap["code"]; ok { + if codeIn, ok := code.(float64); ok { + if codeIn == 200 { + shenData["code"] = 0 + } else { + shenData["code"] = codeIn + } + } + + } + if msg, ok := sendMap["msg"]; ok { + shenData["msg"] = msg + } + if data, ok := sendMap["data"]; ok { + shenData["data"] = data + } + overallhandle.ResultInterface(sendMap, c) + return + } else { + getData := overallhandle.CurlPostJosn(requestData.Url, []byte("")) + var sendMap map[string]interface{} + json.Unmarshal(getData, &sendMap) + shenData := overallhandle.MapOut() + if code, ok := sendMap["code"]; ok { + if codeIn, ok := code.(float64); ok { + if codeIn == 200 { + shenData["code"] = 0 + } else { + shenData["code"] = codeIn + } + } + + } + if msg, ok := sendMap["msg"]; ok { + shenData["msg"] = msg + } + overallhandle.ResultInterface(sendMap, c) + return + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-04-19 14:05:46 +@ 功能: 数据中台POST提交数据 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) PostSaveData(c *gin.Context) { + var requestData DataInfoPost + c.ShouldBindJSON(&requestData) + if requestData.Url == "" { + overallhandle.Result(1, requestData, c, "未知访问地址") + return + } + dataJson, err := json.Marshal(requestData.DataInfo) + shenData := overallhandle.MapOut() + if err != nil { + shenData["code"] = 10001 + shenData["msg"] = err + overallhandle.ResultInterface(shenData, c) + return + } + callBackBtye := overallhandle.CurlPostJosn(requestData.Url, dataJson) + var sendMap map[string]interface{} + err = json.Unmarshal(callBackBtye, &sendMap) + if err != nil { + shenData["code"] = 10001 + shenData["msg"] = err + overallhandle.ResultInterface(shenData, c) + return + } + if code, ok := sendMap["code"]; ok { + + if codeIn, ok := code.(float64); ok { + if codeIn == 200 { + shenData["code"] = 0 + } else { + shenData["code"] = codeIn + } + + } + + } + if msg, ok := sendMap["msg"]; ok { + shenData["msg"] = msg + } + if data, ok := sendMap["data"]; ok { + shenData["data"] = data + } + overallhandle.ResultInterface(shenData, c) +} diff --git a/api/version1/dataCenter/runDataBase.go b/api/version1/dataCenter/runDataBase.go new file mode 100644 index 0000000..f6d301a --- /dev/null +++ b/api/version1/dataCenter/runDataBase.go @@ -0,0 +1,58 @@ +package datacenter + +import ( + "fmt" + "hr_server/overall/overallhandle" + + "github.com/gin-gonic/gin" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2024-12-24 11:43:02 +@ 功能: 获取数据表 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) GainDataTable(c *gin.Context) { + var requestData DataBastType + err := c.ShouldBindJSON(&requestData) + if err != nil { + overallhandle.Result(100, err, c) + return + } + if requestData.Type == "" { + overallhandle.Result(1, err, c, "未知数据库类型!请先确实是什么数据库类型!") + return + } + if requestData.DataBaseName == "" { + overallhandle.Result(1, err, c, "请输入数据库名称!") + return + } + if requestData.Ip == "" { + overallhandle.Result(1, err, c, "请输入数据库地址!") + return + } + + if requestData.UserName == "" { + overallhandle.Result(1, err, c, "请输入用户名!") + return + } + if requestData.Pwd == "" { + overallhandle.Result(1, err, c, "请输入密码!") + return + } + tableInfo, err := requestData.ObtainDataBaseAllTableMysql() + fmt.Printf("tableInfo:%v\n", tableInfo) + overallhandle.Result(0, tableInfo, c) +} diff --git a/api/version1/dataCenter/type.go b/api/version1/dataCenter/type.go new file mode 100644 index 0000000..79ebd9b --- /dev/null +++ b/api/version1/dataCenter/type.go @@ -0,0 +1,90 @@ +package datacenter + +import ( + "hr_server/overall/overallhandle" + "sync" + + "github.com/gin-gonic/gin" +) + +// 协程设置 +var syncSeting = sync.WaitGroup{} + +type ApiMethod struct{} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-04-18 15:28:20 +@ 功能: 数据中台入口 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *ApiMethod) Index(c *gin.Context) { + outputCont := overallhandle.MapOut() + outputCont["index"] = "数据中台入口" + overallhandle.Result(0, outputCont, c) +} + +// 接收参数 +type DataInfo struct { + Url string `json:"url"` + Method string `json:"methodType"` + Where string `json:"where"` +} + +// 接收POST请求 +type DataInfoPost struct { + Url string `json:"url"` + DataInfo interface{} `json:"dataInfo"` +} + +// 数据库链接参数 +type DataBastType struct { + Type string `json:"type"` //数据库类型 + DataBaseName string `json:"dataBaseName"` //数据库名称 + Ip string `json:"ip"` //数据库地址 + Port int64 `json:"port"` //数据库端口 + UserName string `json:"userName"` //数据库帐号 + Pwd string `json:"password"` //数据库密码 +} +type DatabaseConfig struct { + Name string + Host string + Port int64 + User string + Password string +} + +// 数据库表结构 +type Result struct { + Field string `json:"fieldes"` + Type string `json:"types"` + Attribute string `json:"attribute"` + Collation string `json:"collation"` + Null string `json:"nullVal"` + Key string `json:"key"` + Default string `json:"defaultVal"` + Extra string `json:"extra"` + Privileges string `json:"privileges"` + Comment string `json:"comment"` + Pattern string `json:"pattern"` + Classify string `json:"classify"` + Auxiliary string `json:"auxiliary"` +} + +// 输出数据表数据 +type DataBaseTableInfo struct { + TableName string `json:"tableName"` //数据表名称 + TableKey string `json:"tableKey"` //数据表标识 + Fields []Result `json:"fields"` //表字段 +} diff --git a/api/version1/personnelapi/analysExelect.go b/api/version1/personnelapi/analysExelect.go new file mode 100644 index 0000000..e1281a2 --- /dev/null +++ b/api/version1/personnelapi/analysExelect.go @@ -0,0 +1,1838 @@ +package personnelapi + +import ( + "encoding/json" + "fmt" + "hr_server/grocerystore" + "hr_server/models" + "hr_server/overall" + "hr_server/overall/overallhandle" + "strconv" + "strings" + "time" + + "github.com/360EntSecGroup-Skylar/excelize" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-26 14:51:29 +@ 功能: 解析考核年份及奖惩年份 +@ 参数 + + #xlsx 电子表单数据 + #redisKey 保存Redis数据得键值 + #orgId 当前的行政组织 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) AnalysAssessYears(xlsx *excelize.File, redisKey, orgId string) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) { + rows := xlsx.GetRows(xlsx.GetSheetName(xlsx.GetActiveSheetIndex())) + isDateYear := time.Now().Year() + switch orgId { + case "296": + // totalNums, meritsYearIngs, isDateYears := RongXinKeYears(rows, redisKey, isDateYear) + totalNums, meritsYearIngs, isDateYears := RongXinKeYearsNew(rows, redisKey, isDateYear) + totalNum = totalNums + meritsYearIng = meritsYearIngs + rewPunYearsIng = isDateYears + default: + totalNums, meritsYearIngs, isDateYears := GaoKeYears(rows, redisKey, isDateYear) + totalNum = totalNums + meritsYearIng = meritsYearIngs + rewPunYearsIng = isDateYears + } + + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-26 15:06:53 +@ 功能: 荣信绩效及考核 +@ 参数 + + #rows 表格信息 + #redisKey Redis 键 + #isDateYear 当前年 + +@ 返回值 + + #totalNum 总记录数 + #meritsYearIng 考核年限 + #rewPunYearsIng 奖惩年限 + +@ 方法原型 + + # +*/ +func RongXinKeYears(rows [][]string, redisKey string, isDateYear int) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) { + + // fmt.Printf("rows[0][292]:%v\n", rows[0][305]) + // fmt.Printf("rows[1][292]:%v\n", rows[1][305]) + // fmt.Printf("rows[2][292]:%v\n", rows[2][305]) + // fmt.Printf("rows[3][292]:%v\n", rows[3][305]) + // fmt.Printf("rows[4][292]:%v\n", rows[4][305]) + // fmt.Printf("rows[5][292]:%v\n", rows[5][305]) + + //获取绩效年度 + meritsYear := make(map[int]int) + if rows[1][292] != "" { + yearAry := strings.Split(rows[1][292], "年") + if len(yearAry) > 0 { + + yearVal, _ := strconv.Atoi(yearAry[0]) + meritsYear[0] = yearVal + } + } else { + meritsYear[0] = isDateYear - 3 + } + + if rows[1][294] != "" { + yearAry := strings.Split(rows[1][294], "年") + if len(yearAry) > 0 { + yearVal, _ := strconv.Atoi(yearAry[0]) + meritsYear[1] = yearVal + } + } else { + meritsYear[1] = isDateYear - 2 + } + + meritsYearIng = meritsYear + //获取奖惩年度 + rewPunYears := make(map[int]int) + // fmt.Printf("rows[2][305]---1--->:%v\n", rows[2][305]) + if rows[2][305] != "" { + jcYearAry := strings.Split(rows[2][305], "年") + // jcYearAry := strings.Split(rows[2][305], "奖惩") + // fmt.Printf("rows[2][305]---2--->:%v--->%v\n", len(jcYearAry), jcYearAry) + if len(jcYearAry) > 0 { + // fmt.Printf("rows[2][305]---3--->:%v\n", jcYearAry[0]) + jcYearVal, _ := strconv.Atoi(jcYearAry[0]) + // fmt.Printf("rows[2][305]---4--->:%v\n", jcYearVal) + rewPunYears[0] = jcYearVal + } + } else { + rewPunYears[0] = isDateYear - 4 + } + + if rows[2][311] != "" { + jcYearAry := strings.Split(rows[2][311], "奖惩") + if len(jcYearAry) > 0 { + + jcYearVal, _ := strconv.Atoi(jcYearAry[0]) + rewPunYears[1] = jcYearVal + } + } else { + rewPunYears[1] = isDateYear - 3 + } + if rows[2][317] != "" { + jcYearAry := strings.Split(rows[2][317], "奖惩") + if len(jcYearAry) > 0 { + + jcYearVal, _ := strconv.Atoi(jcYearAry[0]) + rewPunYears[2] = jcYearVal + } + } else { + rewPunYears[2] = isDateYear - 2 + } + if rows[2][323] != "" { + jcYearAry := strings.Split(rows[2][323], "奖惩") + if len(jcYearAry) > 0 { + + jcYearVal, _ := strconv.Atoi(jcYearAry[0]) + rewPunYears[3] = jcYearVal + } + } else { + rewPunYears[3] = isDateYear - 1 + } + rewPunYearsIng = rewPunYears + + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) + redisClient.SetRedisTime(86400) + totalNum = 0 + for i, row := range rows { + if i < 4 { + continue + } + // jsonStr, _ := json.Marshal(row) + // fmt.Printf("%v出生日期:%v\n", row[1], string(jsonStr)) + if row[1] != "" { + jsonStr, _ := json.Marshal(row) + // fmt.Printf("%v出生日期:%v\n", row[1], string(jsonStr)) + redisClient.Lpush(redisKey, jsonStr) + totalNum++ + } + } + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-20 08:16:16 +@ 功能: +@ 参数 + + #rows 表格信息 + #redisKey Redis 键 + #isDateYear 当前年 + +@ 返回值 + + #totalNum 总记录数 + #meritsYearIng 考核年限 + #rewPunYearsIng 奖惩年限 + +@ 方法原型 + + # +*/ +func RongXinKeYearsNew(rows [][]string, redisKey string, isDateYear int) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) { + //获取绩效年度 + meritsYear := make(map[int]int) + if rows[1][293] != "" { + yearAry := strings.Split(rows[1][292], "年") + if len(yearAry) > 0 { + + yearVal, _ := strconv.Atoi(yearAry[0]) + meritsYear[0] = yearVal + } + } else { + meritsYear[0] = isDateYear - 3 + } + + if rows[1][295] != "" { + yearAry := strings.Split(rows[1][295], "年") + if len(yearAry) > 0 { + yearVal, _ := strconv.Atoi(yearAry[0]) + meritsYear[1] = yearVal + } + } else { + meritsYear[1] = isDateYear - 2 + } + if rows[1][297] != "" { + yearAry := strings.Split(rows[1][297], "年") + if len(yearAry) > 0 { + yearVal, _ := strconv.Atoi(yearAry[0]) + meritsYear[2] = yearVal + } + } else { + meritsYear[2] = isDateYear - 1 + } + + meritsYearIng = meritsYear + //获取奖惩年度 + rewPunYears := make(map[int]int) + if rows[2][304] != "" { + jcYearAry := strings.Split(rows[2][304], "年") + if len(jcYearAry) > 0 { + jcYearVal, _ := strconv.Atoi(jcYearAry[0]) + rewPunYears[0] = jcYearVal + } + } else { + rewPunYears[0] = isDateYear - 4 + } + + if rows[2][310] != "" { + jcYearAry := strings.Split(rows[2][310], "奖惩") + if len(jcYearAry) > 0 { + + jcYearVal, _ := strconv.Atoi(jcYearAry[0]) + rewPunYears[1] = jcYearVal + } + } else { + rewPunYears[1] = isDateYear - 3 + } + if rows[2][316] != "" { + jcYearAry := strings.Split(rows[2][316], "奖惩") + if len(jcYearAry) > 0 { + + jcYearVal, _ := strconv.Atoi(jcYearAry[0]) + rewPunYears[2] = jcYearVal + } + } else { + rewPunYears[2] = isDateYear - 2 + } + // if rows[2][325] != "" { + // jcYearAry := strings.Split(rows[2][325], "奖惩") + // if len(jcYearAry) > 0 { + + // jcYearVal, _ := strconv.Atoi(jcYearAry[0]) + // rewPunYears[3] = jcYearVal + // } + // } else { + // rewPunYears[3] = isDateYear - 1 + // } + rewPunYearsIng = rewPunYears + + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) + redisClient.SetRedisTime(86400) + totalNum = 0 + for i, row := range rows { + if i < 4 { + continue + } + if row[1] != "" { + jsonStr, _ := json.Marshal(row) + redisClient.Lpush(redisKey, jsonStr) + totalNum++ + } + } + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-26 14:57:03 +@ 功能: 高科绩效及考核 +@ 参数 + + #rows 表格信息 + #redisKey Redis 键 + #isDateYear 当前年 + +@ 返回值 + + #totalNum 总记录数 + #meritsYearIng 考核年限 + #rewPunYearsIng 奖惩年限 + +@ 方法原型 + + # +*/ +func GaoKeYears(rows [][]string, redisKey string, isDateYear int) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) { + //获取绩效年度 + meritsYear := make(map[int]int) + if rows[1][288] != "" { + yearAry := strings.Split(rows[1][288], "年") + if len(yearAry) > 0 { + + yearVal, _ := strconv.Atoi(yearAry[0]) + meritsYear[0] = yearVal + } + } else { + meritsYear[0] = isDateYear - 3 + } + + if rows[1][289] != "" { + yearAry := strings.Split(rows[1][289], "年") + if len(yearAry) > 0 { + yearVal, _ := strconv.Atoi(yearAry[0]) + meritsYear[1] = yearVal + } + } else { + meritsYear[1] = isDateYear - 2 + } + if rows[1][290] != "" { + yearAry := strings.Split(rows[1][290], "年") + if len(yearAry) > 0 { + yearVal, _ := strconv.Atoi(yearAry[0]) + meritsYear[2] = yearVal + } + } else { + meritsYear[2] = isDateYear - 1 + } + meritsYearIng = meritsYear + //获取奖惩年度 + rewPunYears := make(map[int]int) + if rows[2][298] != "" { + jcYearAry := strings.Split(rows[2][298], "奖惩") + if len(jcYearAry) > 0 { + + jcYearVal, _ := strconv.Atoi(jcYearAry[0]) + rewPunYears[0] = jcYearVal + } + } else { + rewPunYears[0] = isDateYear - 3 + } + + if rows[2][303] != "" { + jcYearAry := strings.Split(rows[2][303], "奖惩") + if len(jcYearAry) > 0 { + + jcYearVal, _ := strconv.Atoi(jcYearAry[0]) + rewPunYears[1] = jcYearVal + } + } else { + rewPunYears[1] = isDateYear - 2 + } + if rows[2][308] != "" { + jcYearAry := strings.Split(rows[2][308], "奖惩") + if len(jcYearAry) > 0 { + + jcYearVal, _ := strconv.Atoi(jcYearAry[0]) + rewPunYears[2] = jcYearVal + } + } else { + rewPunYears[2] = isDateYear - 1 + } + rewPunYearsIng = rewPunYears + + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) + redisClient.SetRedisTime(86400) + totalNum = 0 + for i, row := range rows { + if i < 4 { + continue + } + if row[1] != "" { + jsonStr, _ := json.Marshal(row) + // fmt.Printf("%v出生日期:%v\n", row[1], string(jsonStr)) + redisClient.Lpush(redisKey, jsonStr) + totalNum++ + } + } + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-26 16:05:27 +@ 功能: 解析电子表格人员信息 +@ 参数 + + #info //人员信息 + #meritsYear 绩效年度 + #rewPunYearsmap 奖惩年度 + #orgId 行政组织 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) ParsingUserInfoOfExcel(list map[int]string, meritsYear, rewPunYearsmap map[int]int, orgId string) { + g.IsOk = false + switch orgId { + case "296": //荣信模版 + // fmt.Printf("分成的段:%v\n%v\n", list[0], list[2]) + + // isRxTemplate := strings.Contains(list[2], list[1]) + + // fmt.Printf("分成的段:%v\n%v\n%v\n", isRxTemplate, list[2], list[1]) + // if isRxTemplate { + if list[2] != "" { + g.UserNum = list[2] + var myCont models.PersonArchives + err := myCont.RedisCont(list[2], 1) + if err != nil { + g.IsOk = true + } else { + g.UserKey = myCont.Key + } + // g.ProcessMainTableRongXin(list, meritsYear, rewPunYearsmap, orgId) + g.ProcessMainTableRongXinNew(list, meritsYear, rewPunYearsmap, orgId) + } else { + g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[3], time.Now().Unix())) + g.MsgStr = fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[3], overallhandle.UnixTimeToDay(time.Now().Unix(), 11)) + } + // } else { + // g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v(%v):模板与选择的公司不匹配!无法录入--->%v", list[0], list[3], list[2], time.Now().Unix())) + // g.MsgStr = fmt.Sprintf("序号:%v--->%v:模板与选择的公司不匹配!无法录入--->%v", list[0], list[3], overallhandle.UnixTimeToDay(time.Now().Unix(), 11)) + // } + + default: //高科模版解析 + + isRxTemplate := strings.Contains(list[2], list[1]) + + if !isRxTemplate { + if list[1] != "" { + g.UserNum = list[1] + var myCont models.PersonArchives + err := myCont.RedisCont(list[1], 1) + if err != nil { + g.IsOk = true + } else { + g.UserKey = myCont.Key + } + g.ProcessMainTable(list, meritsYear, rewPunYearsmap, orgId) + } else { + g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[2], time.Now().Unix())) + g.MsgStr = fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[2], overallhandle.UnixTimeToDay(time.Now().Unix(), 11)) + } + } else { + g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v(%v):模板与选择的公司不匹配!无法录入--->%v", list[0], list[2], list[1], time.Now().Unix())) + g.MsgStr = fmt.Sprintf("序号:%v--->%v(%v):模板与选择的公司不匹配!无法录入--->%v", list[0], list[2], list[1], overallhandle.UnixTimeToDay(time.Now().Unix(), 11)) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-26 16:28:32 +@ 功能: 主表数据处理(荣信表格模版) +@ 参数 + + #info 人员信息 + #meritsYear 绩效年度 + #rewPunYearsmap 奖惩年度 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) ProcessMainTableRongXin(info map[int]string, meritsYear, rewPunYearsmap map[int]int, orgId string) { + if g.UserKey == 0 { + g.UserKey = overallhandle.OnlyOneNumber(2) + } + curryTime := time.Now().Unix() + if g.IsOk { //新增员工信息 + var userInfo models.PersonArchives + userInfo.Key = g.UserKey //唯一编号 + userInfo.Name = info[3] //姓名"` + userInfo.Number = info[2] //工号 + userInfo.HireClass = 1 //雇佣类型(1:雇佣入职;2:再入职;)"` + userInfo.EmpType = 4 //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)"` + orgIdInt, _ := strconv.ParseInt(orgId, 10, 64) + userInfo.ExcelTemplate = orgIdInt + var adminOrg int64 + var allOrgId []int64 + //公司 + if info[4] != "" { + var comOrg models.AdministrativeOrganization + comOrg.GetCont(map[string]interface{}{"`name`": info[4]}, "`id`") + if comOrg.Id != 0 { + userInfo.Company = comOrg.Id //入职公司"` + adminOrg = comOrg.Id + var sunOrg overallhandle.GetOrgAllParent + sunOrg.GetGCSOrgSonAllId(comOrg.Id) + sunOrg.Id = append(sunOrg.Id, comOrg.Id) + allOrgId = sunOrg.Id + } + + } + fmt.Printf("下属所有子部门-->%v\n", allOrgId) + if info[5] != "" { + if len(allOrgId) > 0 { + mastOrg := GetMyOrgSunId(info[5], allOrgId) + if mastOrg != 0 { + userInfo.MainDeparment = mastOrg //主部门"` + adminOrg = mastOrg + } + } + + } + if info[6] != "" { + if len(allOrgId) > 0 { + suntOrg := GetMyOrgSunId(info[6], allOrgId) + if suntOrg != 0 { + userInfo.SunMainDeparment = suntOrg //二级主部门"` + adminOrg = suntOrg + } + } + } + if info[7] != "" { + if len(allOrgId) > 0 { + postOrg := GetMyOrgSunId(info[7], allOrgId) + if postOrg != 0 { + userInfo.WorkSection = postOrg //二级主部门"` + adminOrg = postOrg + } + } + } + if adminOrg != 0 { + userInfo.AdminOrg = adminOrg //所属行政组织"` + + position, jobId, PersonInCharge := GetMyPositisName(info[8], adminOrg) + if position != 0 { + userInfo.Position = position + } + if jobId != 0 { + userInfo.JobId = jobId + } + if PersonInCharge != 0 { + userInfo.PersonInCharge = PersonInCharge + } + } + switch info[9] { + case "一级": + userInfo.JobLeve = 1 // 职务等级"` + case "二级": + userInfo.JobLeve = 2 // 职务等级"` + case "三级": + userInfo.JobLeve = 3 // 职务等级"` + case "四级": + userInfo.JobLeve = 4 // 职务等级"` + case "五级": + userInfo.JobLeve = 5 // 职务等级"` + case "协议": + userInfo.JobLeve = 6 // 协议"` + default: + } + if info[10] != "" { + var jobInfo models.JobClass + jobInfo.GetCont(map[string]interface{}{"`name`": info[10]}, "`id`") + if jobInfo.Id != 0 { + userInfo.JobClass = jobInfo.Id //管理类别"` + } + } + userInfo.Time = curryTime //写入时间"` + userInfo.EiteTime = curryTime //编辑时间"` + userInfo.State = 1 //状态(1:启用;2:禁用;3:删除)` + userInfo.Key = g.UserKey //key"` + var md5JiaMi overallhandle.Md5Encryption + md5JiaMi.Md5EncryptionInit(overall.CONSTANT_CONFIG.Appsetup.DefaultPassword) + md5Token := md5JiaMi.Md5EncryptionAlgorithm() + userInfo.Password = md5Token //密码"` + userInfo.IsShowTrue = 1 + if info[32] != "" { + userInfo.Wechat = info[32] + } + err := overall.CONSTANT_DB_HR.Create(&userInfo).Error + if err != nil { + g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err)) + g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err) + } else { + g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11))) + g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11)) + } + } else { //修改员工信息 + editInfo := overallhandle.MapOut() + editInfo["`name`"] = info[3] + var adminOrg int64 + var allOrgId []int64 + if info[4] != "" { + var comOrg models.AdministrativeOrganization + comOrg.GetCont(map[string]interface{}{"`name`": info[4]}, "`id`") + if comOrg.Id != 0 { + editInfo["`company`"] = comOrg.Id //入职公司"` + + adminOrg = comOrg.Id + + var sunOrg overallhandle.GetOrgAllParent + sunOrg.GetGCSOrgSonAllId(comOrg.Id) + sunOrg.Id = append(sunOrg.Id, comOrg.Id) + allOrgId = sunOrg.Id + } + + } + fmt.Printf("下属所有子部门-->%v\n", allOrgId) + if info[5] != "" { + if len(allOrgId) > 0 { + mastOrg := GetMyOrgSunId(info[5], allOrgId) + if mastOrg != 0 { + editInfo["`maindeparment`"] = mastOrg //主部门"` + adminOrg = mastOrg + } + } + + } + if info[6] != "" { + if len(allOrgId) > 0 { + suntOrg := GetMyOrgSunId(info[6], allOrgId) + if suntOrg != 0 { + editInfo["`sun_main_deparment`"] = suntOrg //二级主部门"` + adminOrg = suntOrg + } + } + } + if info[7] != "" { + if len(allOrgId) > 0 { + postOrg := GetMyOrgSunId(info[7], allOrgId) + if postOrg != 0 { + editInfo["`work_section`"] = postOrg //二级主部门"` + adminOrg = postOrg + } + } + } + if adminOrg != 0 { + editInfo["`admin_org`"] = adminOrg //所属行政组织"` + + position, jobId, PersonInCharge := GetMyPositisName(info[8], adminOrg) + if position != 0 { + editInfo["`position`"] = position + } + if jobId != 0 { + editInfo["`job_id`"] = jobId + } + if PersonInCharge != 0 { + editInfo["`person_in_charge`"] = PersonInCharge + } + } + + switch info[9] { + case "一级": + editInfo["`job_leve`"] = 1 // 职务等级"` + case "二级": + editInfo["`job_leve`"] = 2 // 职务等级"` + case "三级": + editInfo["`job_leve`"] = 3 // 职务等级"` + case "四级": + editInfo["`job_leve`"] = 4 // 职务等级"` + case "五级": + editInfo["`job_leve`"] = 5 // 职务等级"` + case "协议": + editInfo["`job_leve`"] = 6 // 协议"` + default: + } + if info[10] != "" { + var jobInfo models.JobClass + jobInfo.GetCont(map[string]interface{}{"`name`": info[10]}, "`id`") + if jobInfo.Id != 0 { + editInfo["`job_class`"] = jobInfo.Id //管理类别"` + } + + } + editInfo["`eite_time`"] = curryTime + editInfo["`is_show_true`"] = 1 + if info[32] != "" { + editInfo["`wechat`"] = info[32] + } + // orgIdInt, _ := strconv.ParseInt(orgId, 10, 64) + editInfo["`excel_template`"] = orgId + var userInfo models.PersonArchives + err := userInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editInfo) + // fmt.Printf("编辑信息:%v\n", err) + if err != nil { + g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err)) + g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err) + } else { + g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11))) + g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11)) + } + } + //协程处理附属信息 + synPros.Add(1) + go g.OrgChannelInfo(info[4], info[5], info[6], info[7], "电子表格导入数据") //行政组织变更 + synPros.Add(1) + go g.AuxiliaryTableUserRongXin(info) + synPros.Add(1) + go g.PoliticalOutlookEditRongXin(info) //政治面貌 + synPros.Add(1) + go g.EditEducationInfoRongXin(info) //学历信息 + synPros.Add(1) + go g.FamilyMembersRongXin(info) //家庭成员 + synPros.Add(1) + go g.GrowthExpWitTheGroupRongXin(info, orgId) //集团内成长经历 + synPros.Add(1) + go g.ExtWorkExpOfTheGroupRongXin(info) //集团外部工作经历 + synPros.Add(1) + go g.EditExamLevelRongXin(info, meritsYear) //绩效考核成绩 + synPros.Add(1) + go g.EditRewPunRongXin(info, rewPunYearsmap) //奖惩记录 + synPros.Add(1) + go g.EditAcademicTitleRongXin(info) //编辑职称 + synPros.Add(1) + go g.EditCertificateRongXin(info) //编辑证书 + synPros.Add(1) + go g.TalentInventory(info, orgId) //人才盘点 + //监听所有协程都完成 + synPros.Wait() + +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-05 09:50:36 +@ 功能: 行政组织变动 +@ 参数 + + #company 公司 + #firstDepartment 第一部门 + #secondaryDepartment 第二部门 + #workshop 工段 + #notes 备注 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) OrgChannelInfo(company, firstDepartment, secondaryDepartment, workshop, notes string) { + defer synPros.Done() + var orgChangeInfo []models.OrgChangeRecord + overall.CONSTANT_DB_HR.Model(&models.OrgChangeRecord{}).Where("`userKey` = ?", g.UserKey).Find(&orgChangeInfo) + if len(orgChangeInfo) > 0 { + var comId int64 + var firstDepId int64 + var secDepId int64 + var workspId int64 + var allOrgId []int64 + //公司 + if company != "" { + var comOrg models.AdministrativeOrganization + comOrg.GetCont(map[string]interface{}{"`name`": company}, "`id`") + if comOrg.Id != 0 { + comId = comOrg.Id //入职公司"` + var sunOrg overallhandle.GetOrgAllParent + sunOrg.GetGCSOrgSonAllId(comOrg.Id) + sunOrg.Id = append(sunOrg.Id, comOrg.Id) + allOrgId = sunOrg.Id + } + + } + if firstDepartment != "" { + if len(allOrgId) > 0 { + mastOrg := GetMyOrgSunId(firstDepartment, allOrgId) + if mastOrg != 0 { + firstDepId = mastOrg //主部门"` + } + } + + } + if secondaryDepartment != "" { + if len(allOrgId) > 0 { + suntOrg := GetMyOrgSunId(secondaryDepartment, allOrgId) + if suntOrg != 0 { + secDepId = suntOrg //二级主部门"` + } + } + } + if workshop != "" { + if len(allOrgId) > 0 { + postOrg := GetMyOrgSunId(workshop, allOrgId) + if postOrg != 0 { + workspId = postOrg //二级主部门"` + } + } + } + isEdit := true + for _, v := range orgChangeInfo { + if v.CompanyCn == company { + if v.FirstDepartment != firstDepartment { + if v.SecondaryDepartment != secondaryDepartment { + if v.WorkShop != workshop { + isEdit = false + break + } + } + } + } + } + if isEdit { + var inSetInfo models.OrgChangeRecord + inSetInfo.Userkey = g.UserKey + inSetInfo.CompanyCn = company + inSetInfo.FirstDepartment = firstDepartment + inSetInfo.SecondaryDepartment = secondaryDepartment + inSetInfo.WorkShop = workshop + inSetInfo.CompanyId = comId //入职公司"` + inSetInfo.FirstDepartmentId = firstDepId //主部门"` + inSetInfo.SecondaryDepartmentId = secDepId //二级主部门"` + inSetInfo.WorkShopid = workspId //二级主部门"` + inSetInfo.Time = time.Now().Unix() + inSetInfo.Notes = "表格导入信息行政组织调动" + overall.CONSTANT_DB_HR.Create(&inSetInfo) + } + } else { + var inSetInfo models.OrgChangeRecord + inSetInfo.Userkey = g.UserKey + inSetInfo.CompanyCn = company + inSetInfo.FirstDepartment = firstDepartment + inSetInfo.SecondaryDepartment = secondaryDepartment + inSetInfo.WorkShop = workshop + + var allOrgId []int64 + //公司 + if company != "" { + var comOrg models.AdministrativeOrganization + comOrg.GetCont(map[string]interface{}{"`name`": company}, "`id`") + if comOrg.Id != 0 { + inSetInfo.CompanyId = comOrg.Id //入职公司"` + var sunOrg overallhandle.GetOrgAllParent + sunOrg.GetGCSOrgSonAllId(comOrg.Id) + sunOrg.Id = append(sunOrg.Id, comOrg.Id) + allOrgId = sunOrg.Id + } + + } + if firstDepartment != "" { + if len(allOrgId) > 0 { + mastOrg := GetMyOrgSunId(firstDepartment, allOrgId) + if mastOrg != 0 { + inSetInfo.FirstDepartmentId = mastOrg //主部门"` + } + } + + } + if secondaryDepartment != "" { + if len(allOrgId) > 0 { + suntOrg := GetMyOrgSunId(secondaryDepartment, allOrgId) + if suntOrg != 0 { + inSetInfo.SecondaryDepartmentId = suntOrg //二级主部门"` + } + } + } + if workshop != "" { + if len(allOrgId) > 0 { + postOrg := GetMyOrgSunId(workshop, allOrgId) + if postOrg != 0 { + inSetInfo.WorkShopid = postOrg //二级主部门"` + } + } + } + inSetInfo.Time = time.Now().Unix() + inSetInfo.Notes = "初始化表格导入信息" + overall.CONSTANT_DB_HR.Create(&inSetInfo) + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-28 09:28:07 +@ 功能: 人才盘点 +@ 参数 + + #info 表格数据 + #orgId 行政组织 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) TalentInventory(info map[int]string, orgId string) { + defer synPros.Done() + currentYear := overallhandle.UnixTimeToDay(time.Now().Unix(), 16) + switch orgId { + case "296": + EditTalentInventory(g.UserKey, currentYear, info[297], info[299], info[298], info[296]) + default: + EditTalentInventory(g.UserKey, currentYear, info[291], info[292], "", "") + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-28 09:32:57 +@ 功能: +@ 参数 + + #userKey 当前人员 + #currentYear 当前年 + #careerPlanning 职业生涯规划 + #personalAssistance 个人期望从组织获得的帮助 + #lastYearAssessmentLevel 上一年绩效成绩 + #userTypes 人员类型 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func EditTalentInventory(userKey int64, currentYear, careerPlanning, personalAssistance, lastYearAssessmentLevel, userTypes string) { + var talInvCont models.TalentInventory + err := overall.CONSTANT_DB_HR.Model(&talInvCont).Where("`userKey` = ? AND `years` = ?", userKey, currentYear).Find(&talInvCont).Error + if err == nil && talInvCont.Id != 0 { + + saveInfo := overallhandle.MapOut() + if careerPlanning != "" && careerPlanning != talInvCont.CareerPlanning { + saveInfo["careerPlanning"] = careerPlanning + } + if personalAssistance != "" && personalAssistance != talInvCont.PersonalAssistance { + saveInfo["personalAssistance"] = personalAssistance + } + if lastYearAssessmentLevel != "" && lastYearAssessmentLevel != talInvCont.LastYearAssessmentLevel { + saveInfo["lastYearAssessmentLevel"] = lastYearAssessmentLevel + } + if userTypes != "" && userTypes != talInvCont.UserTypes { + saveInfo["userTypes"] = userTypes + } + if len(saveInfo) > 0 { + saveInfo["times"] = time.Now().Unix() + var EdittalInvCont models.TalentInventory + EdittalInvCont.EiteTalentInventoryCont(map[string]interface{}{"`id`": talInvCont.Id}, saveInfo) + } + + } else { + //不存在此项,那么新增 + var newTalInvInfo models.TalentInventory + newTalInvInfo.UserKey = userKey //归属人员key"` + newTalInvInfo.UserTypes = userTypes //人员类型"` + newTalInvInfo.CareerPlanning = careerPlanning //职业生涯规划"` + newTalInvInfo.PersonalAssistance = personalAssistance //个人期望从组织获得的帮助"` + newTalInvInfo.LastYearAssessmentLevel = lastYearAssessmentLevel //上一年绩效成绩"` + currentYearInt, _ := strconv.Atoi(currentYear) + newTalInvInfo.Years = currentYearInt //年份"` + newTalInvInfo.Times = time.Now().Unix() + overall.CONSTANT_DB_HR.Create(&newTalInvInfo) + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 14:03:14 +@ 功能: 编辑证书(荣信) +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) EditCertificateRongXin(info map[int]string) { + defer synPros.Done() + var cerHonList []models.CertificateHonors + err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&cerHonList).Error + if err != nil || len(cerHonList) < 1 { + if info[344] != "" { + g.EditCertificateCont(info[343], info[344], info[345], info[346], info[347], info[348], "是") + } + if info[350] != "" { + g.EditCertificateCont(info[349], info[350], info[351], info[352], info[353], info[354], "是") + } + if info[356] != "" { + g.EditCertificateCont(info[355], info[356], info[357], info[358], info[359], info[360], "是") + } + } else { + jsonInfo, _ := json.Marshal(cerHonList) + overallhandle.WriteLog("del", "删除旧证书数据!", string(jsonInfo)) + var workGroupLogCont models.CertificateHonors + workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey}) + if info[344] != "" { + g.EditCertificateCont(info[343], info[344], info[345], info[346], info[347], info[348], "是") + } + if info[350] != "" { + g.EditCertificateCont(info[349], info[350], info[351], info[352], info[353], info[354], "是") + } + if info[356] != "" { + g.EditCertificateCont(info[355], info[356], info[357], info[358], info[359], info[360], "是") + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 13:58:10 +@ 功能: 编辑职称 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) EditAcademicTitleRongXin(info map[int]string) { + defer synPros.Done() + var acaList []models.AcademicTitle + err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&acaList).Error + if err != nil || len(acaList) < 1 { + //新增职称 + if info[333] != "" { + g.InsetAcaInfo(info[333], info[334], info[335], info[336], info[337]) + } + if info[338] != "" { + g.InsetAcaInfo(info[338], info[339], info[340], info[341], info[342]) + } + } else { + //原先有数据 + jsonInfo, _ := json.Marshal(acaList) + overallhandle.WriteLog("del", "删除旧职称数据!", string(jsonInfo)) + var workGroupLogCont models.AcademicTitle + workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey}) + if info[333] != "" { + g.InsetAcaInfo(info[333], info[334], info[335], info[336], info[337]) + } + if info[338] != "" { + g.InsetAcaInfo(info[338], info[339], info[340], info[341], info[342]) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 13:44:40 +@ 功能: 编辑奖惩记录 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) EditRewPunRongXin(info map[int]string, rewPunYearsmap map[int]int) { + defer synPros.Done() + if val, isOk := rewPunYearsmap[0]; isOk { + g.EditRewPunInfoRongXin(val, info[305], info[306], info[307], info[308], info[309], info[310]) + } + if val, isOk := rewPunYearsmap[1]; isOk { + g.EditRewPunInfoRongXin(val, info[311], info[312], info[313], info[314], info[315], info[316]) + } + if val, isOk := rewPunYearsmap[2]; isOk { + g.EditRewPunInfoRongXin(val, info[317], info[318], info[319], info[320], info[321], info[322]) + } + if val, isOk := rewPunYearsmap[3]; isOk { + g.EditRewPunInfoRongXin(val, info[323], info[324], info[325], info[326], info[327], info[328]) + } +} + +// 写入奖惩记录 +func (g *GroupParsingData) EditRewPunInfoRongXin(years int, level, rewPunClass, title, timeData, issuingUnit, prePunNum string) { + + jiangCeng := RewPunLevelClassStr(rewPunClass) + var rewPunYearCont models.RewardsPenalties + err := rewPunYearCont.GetCont(map[string]interface{}{"`userkey`": g.UserKey, "`years`": years, "`months`": 0}) + timeVal := time.Now().Unix() + if err == nil { + overall.CONSTANT_DB_HR.Where("`id` = ? ", rewPunYearCont.Id).Delete(&rewPunYearCont) + } + if timeData != "" { + timeVal = overallhandle.ExcelDateToDate(timeData).Unix() + // fmt.Printf("奖惩记录3: %v\n", timeVal) + } + if level != "" { + rewPunYearCont.Title = title //奖励/处分项目"` + rewPunYearCont.UserKey = g.UserKey //获得人员"` + if jiangCeng <= 6 { + rewPunYearCont.Types = 1 //类型(1:奖励;2:处分;)` + } else { + rewPunYearCont.Types = 2 //类型(1:奖励;2:处分;)` + } + rewPunYearCont.State = 1 //状态(1:启用;2:禁用;3:删除)` + rewPunYearCont.IssuingUnit = issuingUnit //颁发单位"` + + rewPunYearCont.TimeData = timeVal //获得时间"` + + rewPunYearCont.Years = years //年"` + rewPunYearCont.Months = 0 //月"` + rewPunYearCont.Level = RewPunLevelStr(level) //奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)"` + rewPunYearCont.RewPunClass = jiangCeng //奖惩类型(1:年终评优;2:表扬;3:嘉奖;4:记功;5:记大功;6:特别奖励;7:批评;8:警告;9:记过;10:记大过;11:降级;12:留用察看;13:开除)"` + rewPunYearCont.RewPunNumber = prePunNum + overall.CONSTANT_DB_HR.Create(&rewPunYearCont) + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 13:25:00 +@ 功能: 编辑考核成绩(荣信) +@ 参数 + + #info 表单内容 + #meritsYear 年份 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) EditExamLevelRongXin(info map[int]string, meritsYear map[int]int) { + defer synPros.Done() + if val, isOk := meritsYear[0]; isOk { + g.EditExamLevelInfoRongXin(info[292], info[293], val) + } + if val, isOk := meritsYear[1]; isOk { + g.EditExamLevelInfoRongXin(info[294], info[295], val) + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 13:40:34 +@ 功能: 编辑绩效考核内容 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) EditExamLevelInfoRongXin(level, notes string, years int) { + var merInfo models.Meritslog + err := merInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey, "`years`": years, "`months`": 0}, "`id`", "`level`", "`notes`") + if err != nil { //新增 + merInfo.Score = 0 //绩效分数*10000保存"` + merInfo.UserKey = g.UserKey //获得人员"` + merInfo.Status = 1 //(1:启用;2:禁用;3:删除)` + merInfo.TimeData = time.Now().Unix() //获得时间"` + merInfo.Years = years //年"` + merInfo.Months = 0 //月"` + merInfo.Level = level //考核等级"` + merInfo.Notes = notes //备注 + overall.CONSTANT_DB_HR.Create(&merInfo) + } else { + editCont := overallhandle.MapOut() + if merInfo.Level != level { + editCont["`level`"] = level + editCont["`notes`"] = notes + editCont["`status`"] = 1 + editCont["`timedata`"] = time.Now().Unix() + var merNewInfo models.Meritslog + merNewInfo.EiteCont(map[string]interface{}{"`id`": merInfo.Id}, editCont) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 11:43:54 +@ 功能: 集团外部工作经历(荣信) +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) ExtWorkExpOfTheGroupRongXin(info map[int]string) { + defer synPros.Done() + var workList []models.WorkHistory + err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&workList).Error + if err != nil || len(workList) < 1 { //没有记录进行新增 + if info[226] != "" { //集团外工作经历1 + g.ExternalWorkGroupLog(info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235], info[236], info[237], info[238]) + } + if info[239] != "" { //集团外工作经历2 + g.ExternalWorkGroupLog(info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248], info[249], info[250], info[251]) + } + if info[252] != "" { //集团外工作经历3 + g.ExternalWorkGroupLog(info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261], info[262], info[263], info[264]) + } + if info[265] != "" { //集团外工作经历4 + g.ExternalWorkGroupLog(info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274], info[275], info[276], info[277]) + } + if info[278] != "" { //集团外工作经历5 + g.ExternalWorkGroupLog(info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287], info[288], info[289], info[290]) + } + } else { //已经存在历史记录了 + jsonInfo, _ := json.Marshal(workList) + overallhandle.WriteLog("del", "删除旧集团外部工作经历数据!", string(jsonInfo)) + var workGroupLogCont models.WorkHistory + workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey}) + if info[226] != "" { //集团外工作经历1 + g.ExternalWorkGroupLog(info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235], info[236], info[237], info[238]) + } + if info[239] != "" { //集团外工作经历2 + g.ExternalWorkGroupLog(info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248], info[249], info[250], info[251]) + } + if info[252] != "" { //集团外工作经历3 + g.ExternalWorkGroupLog(info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261], info[262], info[263], info[264]) + } + if info[265] != "" { //集团外工作经历4 + g.ExternalWorkGroupLog(info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274], info[275], info[276], info[277]) + } + if info[278] != "" { //集团外工作经历5 + g.ExternalWorkGroupLog(info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287], info[288], info[289], info[290]) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 11:17:42 +@ 功能: 集团内成长经历 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) GrowthExpWitTheGroupRongXin(info map[int]string, orgId string) { + defer synPros.Done() + var growInGroup []models.InsideWorkHistory + err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&growInGroup).Error + if err != nil || len(growInGroup) < 1 { + //没有集团经历,那么进行新增 + if info[95] != "" { //集团内工作经历1 + g.EditGroupInWorkLog(info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104], info[105], info[106], info[107], orgId) + } + if info[108] != "" { //集团内工作经历2 + g.EditGroupInWorkLog(info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117], info[118], info[119], info[120], orgId) + } + if info[121] != "" { //集团内工作经历3 + g.EditGroupInWorkLog(info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130], info[131], info[132], info[133], orgId) + } + if info[134] != "" { //集团内工作经历4 + g.EditGroupInWorkLog(info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143], info[144], info[145], info[146], orgId) + } + if info[147] != "" { //集团内工作经历5 + g.EditGroupInWorkLog(info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156], info[157], info[158], info[159], orgId) + } + if info[160] != "" { //集团内工作经历6 + g.EditGroupInWorkLog(info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169], info[170], info[171], info[172], orgId) + } + if info[173] != "" { //集团内工作经历7 + g.EditGroupInWorkLog(info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], info[183], info[184], info[185], orgId) + } + if info[186] != "" { //集团内工作经历8 + g.EditGroupInWorkLog(info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], info[196], info[197], info[198], orgId) + } + if info[199] != "" { //集团内工作经历9 + g.EditGroupInWorkLog(info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], info[209], info[210], info[211], orgId) + } + if info[212] != "" { //集团内工作经历10 + g.EditGroupInWorkLog(info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], info[222], info[223], info[224], orgId) + } + } else { + //有集团经历,那么删除旧的经历再新增 + jsonInfo, _ := json.Marshal(growInGroup) + overallhandle.WriteLog("del", "删除旧集团内部经历数据!", string(jsonInfo)) + var workGroupLogCont models.InsideWorkHistory + workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey}) + if info[95] != "" { //集团内工作经历1 + g.EditGroupInWorkLog(info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104], info[105], info[106], info[107], orgId) + } + if info[108] != "" { //集团内工作经历2 + g.EditGroupInWorkLog(info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117], info[118], info[119], info[120], orgId) + } + if info[121] != "" { //集团内工作经历3 + g.EditGroupInWorkLog(info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130], info[131], info[132], info[133], orgId) + } + if info[134] != "" { //集团内工作经历4 + g.EditGroupInWorkLog(info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143], info[144], info[145], info[146], orgId) + } + if info[147] != "" { //集团内工作经历5 + g.EditGroupInWorkLog(info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156], info[157], info[158], info[159], orgId) + } + if info[160] != "" { //集团内工作经历6 + g.EditGroupInWorkLog(info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169], info[170], info[171], info[172], orgId) + } + if info[173] != "" { //集团内工作经历7 + g.EditGroupInWorkLog(info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], info[183], info[184], info[185], orgId) + } + if info[186] != "" { //集团内工作经历8 + g.EditGroupInWorkLog(info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], info[196], info[197], info[198], orgId) + } + if info[199] != "" { //集团内工作经历9 + g.EditGroupInWorkLog(info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], info[209], info[210], info[211], orgId) + } + if info[212] != "" { //集团内工作经历10 + g.EditGroupInWorkLog(info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], info[222], info[223], info[224], orgId) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 10:54:53 +@ 功能: 家庭成员(荣信模版) +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) FamilyMembersRongXin(info map[int]string) { + defer synPros.Done() + var familyAry []models.FamilyMembers + err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&familyAry).Error + // var emergencyFamily []models.EmergencyContact //紧急联系人 + // creeTime := time.Now().Unix() + if err != nil || len(familyAry) < 1 { + if info[62] != "" && info[63] != "" { + g.EditFamilyInfo(info[62], info[63], info[64], info[65], info[66], "否") + } + if info[67] != "" && info[68] != "" { + g.EditFamilyInfo(info[67], info[68], info[69], info[70], info[71], "否") + } + if info[72] != "" && info[73] != "" { + g.EditFamilyInfo(info[72], info[73], info[74], info[75], info[76], "否") + } + if info[77] != "" && info[78] != "" { + g.EditFamilyInfo(info[77], info[78], info[79], info[80], info[81], "否") + } + if info[82] != "" && info[83] != "" { + g.EditFamilyInfo(info[82], info[83], info[84], info[85], info[86], "否") + } + } else { + jsonInfo, _ := json.Marshal(familyAry) + overallhandle.WriteLog("del", "删除旧家庭成员数据!", string(jsonInfo)) + var familyCont models.FamilyMembers + familyCont.DelCont(map[string]interface{}{"`key`": g.UserKey}) + if info[62] != "" && info[63] != "" { + g.EditFamilyInfo(info[62], info[63], info[64], info[65], info[66], "否") + } + if info[67] != "" && info[68] != "" { + g.EditFamilyInfo(info[67], info[68], info[69], info[70], info[71], "否") + } + if info[72] != "" && info[73] != "" { + g.EditFamilyInfo(info[72], info[73], info[74], info[75], info[76], "否") + } + if info[77] != "" && info[78] != "" { + g.EditFamilyInfo(info[77], info[78], info[79], info[80], info[81], "否") + } + if info[82] != "" && info[83] != "" { + g.EditFamilyInfo(info[82], info[83], info[84], info[85], info[86], "否") + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 10:28:10 +@ 功能: +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) EditEducationInfoRongXin(info map[int]string) { + defer synPros.Done() + var mySchoolLog []models.PersonnelEducation + err := overall.CONSTANT_DB_HR.Model(&models.PersonnelEducation{}).Where("`key` = ?", g.UserKey).Find(&mySchoolLog).Error + fmt.Printf("教育经历--->%v\n", len(mySchoolLog)) + if err != nil || len(mySchoolLog) < 1 { + if info[34] != "" || info[37] != "" { //第一学历 + g.AddOneSchollLog(info[34], info[35], info[36], info[37], info[38], info[39], info[40], info[41], info[42], 2) + } + if info[43] != "" || info[46] != "" { //最高学历 + g.AddOneSchollLog(info[43], info[44], info[45], info[46], info[47], info[48], info[49], info[50], info[51], 3) + } + if info[52] != "" || info[55] != "" { //其他学历 + g.AddOneSchollLog(info[52], info[53], info[54], info[55], info[56], info[57], info[58], info[59], info[60], 1) + } + } else { + jsonInfo, _ := json.Marshal(mySchoolLog) + overallhandle.WriteLog("del", "删除旧集团外部工作经历数据!", string(jsonInfo)) + var delScho models.PersonnelEducation + delScho.DelCont(map[string]interface{}{"`key`": g.UserKey}) + if info[34] != "" || info[37] != "" { //第一学历 + g.AddOneSchollLog(info[34], info[35], info[36], info[37], info[38], info[39], info[40], info[41], info[42], 2) + } + if info[43] != "" || info[46] != "" { //最高学历 + g.AddOneSchollLog(info[43], info[44], info[45], info[46], info[47], info[48], info[49], info[50], info[51], 3) + } + if info[52] != "" || info[55] != "" { //其他学历 + g.AddOneSchollLog(info[52], info[53], info[54], info[55], info[56], info[57], info[58], info[59], info[60], 1) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 10:12:33 +@ 功能: +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) PoliticalOutlookEditRongXin(info map[int]string) { + defer synPros.Done() + if info[329] != "" { + var polOutInfo models.PoliticalIdentity + err := polOutInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey}) + if err != nil { //不存在,新增 + polOutInfo.Userkey = g.UserKey //员工唯一识别符;"` + polOutInfo.PoliticalOutlook = politiToInt(info[329]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"` + if info[330] != "" { + polOutInfo.JoinTime = overallhandle.ExcelDateToDate(info[330]).Unix() //加入时间"` + } + polOutInfo.Branch = info[331] //所在党支部"` + polOutInfo.Bosition = info[332] //党内职务"` + // polOutInfo.JoiningParty = info[317] //入党时所在单位"` + // if info[318] == "是" { + // polOutInfo.SwitchToClass = 1 //组织关系是否转入(1:是;2:否)"` + // } else { + // polOutInfo.SwitchToClass = 2 //组织关系是否转入(1:是;2:否)"` + // } + // if info[319] != "" { + // polOutInfo.SwitchToTime = overallhandle.ExcelDateToDate(info[319]).Unix() //组织关系转入时间"` + // } + polOutInfo.Time = time.Now().Unix() //创建时间"` + overall.CONSTANT_DB_HR.Create(&polOutInfo) + } else { + editCont := overallhandle.MapOut() + if info[329] != "" { + poloutName := politiToInt(info[329]) + if poloutName != polOutInfo.PoliticalOutlook { + editCont["`political_outlook`"] = poloutName + } + } + if info[330] != "" { + joinTimeVal := overallhandle.ExcelDateToDate(info[330]).Unix() + if joinTimeVal != polOutInfo.JoinTime { + editCont["`joinTime`"] = joinTimeVal + } + } + if info[331] != "" && info[331] != polOutInfo.Branch { + editCont["`branch`"] = info[331] + } + if info[332] != "" && info[332] != polOutInfo.Bosition { + editCont["`position`"] = info[332] + } + // if info[317] != "" && info[317] != polOutInfo.JoiningParty { + // editCont["`joiningParty`"] = info[317] + // } + // zhuan := 2 + // if info[318] == "是" { + // zhuan = 1 + // } + // if zhuan != polOutInfo.SwitchToClass { + // editCont["`switchToClass`"] = zhuan + // } + // if info[319] != "" { + // switchTimeVal := overallhandle.ExcelDateToDate(info[319]).Unix() + // if switchTimeVal != polOutInfo.SwitchToTime { + // editCont["`switchToTime`"] = switchTimeVal + // } + // } + if len(editCont) > 0 { + editCont["`time`"] = time.Now().Unix() + polOutInfo.EiteCont(map[string]interface{}{"`userkey`": g.UserKey}, editCont) + } + } + } else { + var polOutInfo models.PoliticalIdentity + polOutInfo.DelCont(map[string]interface{}{"`userkey`": g.UserKey}) + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 08:29:46 +@ 功能: 人员信息副本(荣信) +@ 参数 + + #info 电子表格信息 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) AuxiliaryTableUserRongXin(info map[int]string) { + defer synPros.Done() + var myInfo models.PersonnelContent + err := myInfo.GetCont(map[string]interface{}{"`key`": g.UserKey}, "`number`") + if err != nil { //附属内容不存在,进行新增。 + myInfo.Key = g.UserKey //Key"` + myInfo.Number = g.UserNum //员工工号;index"` + myInfo.Idcardno = info[24] //身份证号"` + // myInfo. Passportno = //护照号码"` + // myInfo. Globalroaming = //国际区号"` + myInfo.Mobilephone = info[29] //手机号码"` + myInfo.Email = info[33] //电子邮件"` + myInfo.Gender = genderToInt(info[11]) //性别(1:男性;2:女性;3:中性)"` + if info[12] != "" { + myInfo.Birthday = overallhandle.ExcelDateToDate(info[12]).Unix() //birthday"` + } + myInfo.Myfolk = info[14] //民族"` + myInfo.Nativeplace = info[20] //籍贯"` + if info[25] != "" { + myInfo.Idcardstartdate = overallhandle.ExcelDateToDate(info[25]).Unix() //身份证有效期开始"` + } + if info[26] != "" { + myInfo.Idcardenddate = overallhandle.ExcelDateToDate(info[26]).Unix() //身份证有效期结束"` + } + + myInfo.Idcardaddress = info[28] //身份证地址"` + // myInfo. IdcardIssued = //身份证签发机关"` + myInfo.Health = healthToInt(info[16]) //健康状况(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废)"` + myInfo.Maritalstatus = maritalstatusToInt(info[15]) //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异)"` + // myInfo. Internaltelephone = //内线电话"` + myInfo.Currentresidence = info[19] //现居住地址"` + myInfo.Time = time.Now().Unix() //创建时间"` + myInfo.Constellation = consteToInt(info[22]) //星座(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座)"` + if info[87] == "是" { + myInfo.Isdoubleworker = 1 //是否双职工(1:是;2:否)"` + g.WorkingCoupleRongXin(info, true) + } else { + myInfo.Isdoubleworker = 2 //是否双职工(1:是;2:否)"` + g.WorkingCoupleRongXin(info, false) + } + // if info[320] == "是" { + // myInfo.Isveterans = 1 //是否为退役军人(1:是;2:否)"` + // g.EditVeterans(info, true) + // } else { + // myInfo.Isveterans = 2 + // g.EditVeterans(info, false) + // } + // myInfo.Veteransnumber = info[321] + if info[301] != "" { + myInfo.Jobstartdate = overallhandle.ExcelDateToDate(info[301]).Unix() //参加工作日期"` + } + if info[303] != "" { + myInfo.Entrydate = overallhandle.ExcelDateToDate(info[303]).Unix() //入职日期"` + } + // myInfo. Probationperiod = //试用期"` + // myInfo. Planformaldate = //预计转正日期"` + if info[17] != "" { + myInfo.PoliticalOutlook = politiToInt(info[17]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"` + } + if info[329] != "" { + myInfo.PoliticalOutlook = politiToInt(info[329]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"` + } + myInfo.MaritalstatusCn = info[15] //婚姻状况汉字说明"` + myInfo.ConstellationingCn = info[22] //星座汉字说明"` + myInfo.PoliticalOutlookCn = info[17] //政治面貌汉字说明"` + myInfo.HealthCn = info[16] //健康状况中文说明"` + // myInfo.NameUsedBefore = //曾用名"` + myInfo.CareerPlanning = info[297] //职业生涯规划"` + myInfo.HelpObtained = info[299] //个人期望从组织获得的帮助"` + myInfo.Hobby = info[23] //爱好"` + + myInfo.DomicileType = info[18] //户籍类型 + if info[27] == "是" { + myInfo.IdCardnoLongTerm = 1 //身份证是否长期有效(1:是;2:否) + + } else { + myInfo.IdCardnoLongTerm = 2 //身份证是否长期有效(1:是;2:否) + + } + myInfo.MobileShortNumber = info[30] //手机小号 + myInfo.Channel = JoinJobChanel(info[300]) //入职渠道(1:社会招聘;2:校园招聘;3:内部推荐) + myInfo.BloodType = info[21] //血型 + overall.CONSTANT_DB_HR.Create(&myInfo) + } else { //附属内容存在,进行编辑。 + editCont := overallhandle.MapOut() + editCont["`idcardno`"] = info[24] + editCont["`mobilephone`"] = info[29] + editCont["`email`"] = info[33] + editCont["`gender`"] = genderToInt(info[11]) + if info[12] != "" { + editCont["`birthday`"] = overallhandle.ExcelDateToDate(info[12]).Unix() + } + editCont["`myfolk`"] = info[14] + editCont["`nativeplace`"] = info[20] + if info[25] != "" { + editCont["`idcardstartdate`"] = overallhandle.ExcelDateToDate(info[25]).Unix() + } + if info[26] != "" { + editCont["`idcardenddate`"] = overallhandle.ExcelDateToDate(info[26]).Unix() + } + editCont["`idcardaddress`"] = info[28] + editCont["`health`"] = healthToInt(info[16]) + editCont["`maritalstatus`"] = maritalstatusToInt(info[15]) + editCont["`currentresidence`"] = info[19] + editCont["`constellationing`"] = consteToInt(info[22]) + if info[87] == "是" { + editCont["`isdoubleworker`"] = 1 //是否双职工(1:是;2:否)"` + g.WorkingCoupleRongXin(info, true) + } else { + editCont["`isdoubleworker`"] = 2 //是否双职工(1:是;2:否)"` + g.WorkingCoupleRongXin(info, false) + } + // if info[320] == "是" { + // editCont["`isveterans`"] = 1 //是否为退役军人(1:是;2:否)"` + // g.EditVeterans(info, true) + // } else { + // editCont["`isveterans`"] = 2 + // g.EditVeterans(info, false) + // } + // editCont["`veteransnumber`"] = info[321] + if info[301] != "" { + editCont["`jobstartdate`"] = overallhandle.ExcelDateToDate(info[301]).Unix() + } + if info[303] != "" { + editCont["`entrydate`"] = overallhandle.ExcelDateToDate(info[303]).Unix() + } + if info[17] != "" { + editCont["`political_outlook`"] = politiToInt(info[17]) + } + if info[329] != "" { + editCont["`political_outlook`"] = politiToInt(info[329]) + } + editCont["`maritalstatus_cn`"] = info[15] + editCont["`constellationing_cn`"] = info[22] + editCont["`political_outlook_cn`"] = info[17] + editCont["`health_cn`"] = info[16] + editCont["`career_planning`"] = info[297] + editCont["`help_obtained`"] = info[299] + editCont["`hobby`"] = info[23] + editCont["`domicile_type`"] = info[18] + if info[27] == "是" { + editCont["`idCardnoLongTerm`"] = 1 //身份证是否长期有效(1:是;2:否) + // g.WorkingCouple(info, true) + } else { + editCont["`idCardnoLongTerm`"] = 2 //身份证是否长期有效(1:是;2:否) + // g.WorkingCouple(info, false) + } + editCont["`mobileShortNumber`"] = info[30] + editCont["`channel`"] = JoinJobChanel(info[300]) + editCont["`bloodType`"] = info[21] + editCont["`time`"] = time.Now().Unix() + myInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editCont) + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 08:47:04 +@ 功能: 双职工处理 +@ 参数 + + #info 表单内容 + #isTrue 是否为双职工 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) WorkingCoupleRongXin(info map[int]string, isTrue bool) { + var doubleWorkMan []models.DoubleWorker + overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&doubleWorkMan) //获取旧数据 + if isTrue { + if len(doubleWorkMan) < 1 { //无记录,新增 + NewAddDoubleWorkRongXin(g.UserKey, g.UserNum, info) + } else { + oldId := int64(0) + for _, v := range doubleWorkMan { + if v.Name == info[88] { + oldId = v.Id + } + } + if oldId != 0 { //存在,数据编辑 + editInfo := overallhandle.MapOut() + editInfo["`name`"] = info[88] + editInfo["`company`"] = info[89] + editInfo["`department`"] = info[90] + editInfo["`position`"] = info[92] + editInfo["`workPosit`"] = info[92] + editInfo["`workUnit`"] = info[91] + // editInfo["`levele`"] = info[89] + if info[93] != "" { + editInfo["`joinTime`"] = overallhandle.ExcelDateToDate(info[93]).Unix() + } + + editInfo["`tel`"] = info[94] + editInfo["`time`"] = time.Now().Unix() + editInfo["`state`"] = 1 + var editCont models.DoubleWorker + editCont.EiteCont(map[string]interface{}{"`id`": oldId}, editInfo) + } else { + NewAddDoubleWorkRongXin(g.UserKey, g.UserNum, info) + } + } + } else { //不是双职工,软删除老数据 + if len(doubleWorkMan) > 0 { + var delDoubleWork models.DoubleWorker + delDoubleWork.EiteCont(map[string]interface{}{"`key`": g.UserKey}, map[string]interface{}{"`state`": 3}) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 09:25:01 +@ 功能: 新增双职工(荣信模版) +@ 参数 + + #userKey 人员KEY + #userNum 人员工号 + #info 电子表格信息 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func NewAddDoubleWorkRongXin(userKey int64, userNum string, info map[int]string) { + var inSetInfo models.DoubleWorker + inSetInfo.Key = userKey // + inSetInfo.Number = userNum //"` + inSetInfo.Name = info[88] //姓名"` + inSetInfo.Company = info[89] //所在公司"` + inSetInfo.Department = info[90] //所在部门"` + inSetInfo.Position = info[92] //所在岗位"` + inSetInfo.WorkUnit = info[91] + inSetInfo.WorkPosit = info[92] + + // inSetInfo.Levele = info[89] + if info[93] != "" { + inSetInfo.JoinTime = overallhandle.ExcelDateToDate(info[93]).Unix() + } + inSetInfo.Tel = info[94] //联系方式"` + inSetInfo.Time = time.Now().Unix() //创建时间"` + inSetInfo.State = 1 //状态(1:启用;2:禁用;3:删除)` + overall.CONSTANT_DB_HR.Create(&inSetInfo) +} diff --git a/api/version1/personnelapi/analysRxExelect.go b/api/version1/personnelapi/analysRxExelect.go new file mode 100644 index 0000000..8402fd1 --- /dev/null +++ b/api/version1/personnelapi/analysRxExelect.go @@ -0,0 +1,1383 @@ +package personnelapi + +import ( + "encoding/json" + "fmt" + "hr_server/models" + "hr_server/overall" + "hr_server/overall/overallhandle" + "strconv" + "strings" + "time" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-20 08:27:51 +@ 功能: 主表数据处理(荣信表格模版) +@ 参数 + + #info 人员信息 + #meritsYear 绩效年度 + #rewPunYearsmap 奖惩年度 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) ProcessMainTableRongXinNew(info map[int]string, meritsYear, rewPunYearsmap map[int]int, orgId string) { + if g.UserKey == 0 { //判断是否有唯一标识符 + g.UserKey = overallhandle.OnlyOneNumber(2) + } + curryTime := time.Now().Unix() + if g.IsOk { //新增员工信息 + var userInfo models.PersonArchives + userInfo.Key = g.UserKey //唯一编号 + userInfo.Name = info[3] //姓名"` + userInfo.Number = info[2] //工号 + userInfo.HireClass = 1 //雇佣类型(1:雇佣入职;2:再入职;)"` + userInfo.EmpType = 4 //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)"` + orgIdInt, _ := strconv.ParseInt(orgId, 10, 64) + userInfo.ExcelTemplate = orgIdInt //信息来源于哪个模板 + userInfo.Time = curryTime //写入时间"` + userInfo.EiteTime = curryTime //编辑时间"` + userInfo.State = 1 //状态(1:启用;2:禁用;3:删除)` + userInfo.Key = g.UserKey //key"` + var md5JiaMi overallhandle.Md5Encryption + md5JiaMi.Md5EncryptionInit(overall.CONSTANT_CONFIG.Appsetup.DefaultPassword) + md5Token := md5JiaMi.Md5EncryptionAlgorithm() + userInfo.Password = md5Token //密码"` + userInfo.IsShowTrue = 1 //信息锁定 + + var adminOrg int64 //最终行政组织 + var allOrgId []int64 //行政范围 + + //判定公司 + if info[4] != "" { //判断主公司 + var comOrg models.AdministrativeOrganization + comOrg.GetCont(map[string]interface{}{"`name`": info[4]}, "`id`") + if comOrg.Id != 0 { + var sunOrg overallhandle.GetOrgAllParent //获取当前公司下的所有子行政组织 + if info[5] != "" { //判断子公司 + var sunComOrg models.AdministrativeOrganization + sunComOrg.GetCont(map[string]interface{}{"`name`": info[5], "`superior`": comOrg.Id}, "`id`") + if sunComOrg.Id != 0 { + userInfo.Company = sunComOrg.Id //入职公司"` + adminOrg = sunComOrg.Id + } else { + userInfo.Company = comOrg.Id //入职公司"` + adminOrg = comOrg.Id + } + } else { + userInfo.Company = comOrg.Id //入职公司"` + adminOrg = comOrg.Id + } + sunOrg.GetGCSOrgSonAllId(adminOrg) + sunOrg.Id = append(sunOrg.Id, adminOrg) + allOrgId = sunOrg.Id + } + } + if len(allOrgId) > 0 { + //主部门 + if info[6] != "" { + mastOrg := GetMyOrgSunId(info[6], allOrgId) + if mastOrg != 0 { + userInfo.MainDeparment = mastOrg //主部门"` + adminOrg = mastOrg + } + } + //二级部门 + if info[7] != "" { + suntOrg := GetMyOrgSunId(info[7], allOrgId) + if suntOrg != 0 { + userInfo.SunMainDeparment = suntOrg //主部门"` + adminOrg = suntOrg + } + } + //工段 + if info[8] != "" { + postOrg := GetMyOrgSunId(info[87], allOrgId) + if postOrg != 0 { + userInfo.WorkSection = postOrg //主部门"` + adminOrg = postOrg + } + } + } + //根据最终行政组织获取职务等信息 + if adminOrg != 0 { + userInfo.AdminOrg = adminOrg //所属行政组织"` + userInfo.Position, userInfo.JobId, userInfo.PersonInCharge = GetMyPositisName(info[9], adminOrg) + } + switch info[10] { + case "一级": + userInfo.JobLeve = 1 // 职务等级"` + case "二级": + userInfo.JobLeve = 2 // 职务等级"` + case "三级": + userInfo.JobLeve = 3 // 职务等级"` + case "四级": + userInfo.JobLeve = 4 // 职务等级"` + case "五级": + userInfo.JobLeve = 5 // 职务等级"` + case "协议": + userInfo.JobLeve = 6 // 协议"` + default: + } + if info[11] != "" { //管理类型 + var jobInfo models.JobClass + jobInfo.GetCont(map[string]interface{}{"`name`": info[11]}, "`id`") + if jobInfo.Id != 0 { + userInfo.JobClass = jobInfo.Id //管理类别"` + } + } + if info[33] != "" { //微信号 + userInfo.Wechat = info[33] + } + err := overall.CONSTANT_DB_HR.Create(&userInfo).Error + if err != nil { + g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err)) + g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err) + } else { + g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11))) + g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11)) + } + } else { //修改员工信息 + editInfo := overallhandle.MapOut() + if info[3] != "" { + editInfo["`name`"] = info[3] + } + var adminOrg int64 + var allOrgId []int64 + //判定公司 + if info[4] != "" { //判断主公司 + var comOrg models.AdministrativeOrganization + comOrg.GetCont(map[string]interface{}{"`name`": info[4]}, "`id`") + if comOrg.Id != 0 { + var sunOrg overallhandle.GetOrgAllParent //获取当前公司下的所有子行政组织 + if info[5] != "" { //判断子公司 + var sunComOrg models.AdministrativeOrganization + sunComOrg.GetCont(map[string]interface{}{"`name`": info[5], "`superior`": comOrg.Id}, "`id`") + if sunComOrg.Id != 0 { + editInfo["`company`"] = sunComOrg.Id //入职公司"` + adminOrg = sunComOrg.Id + } else { + editInfo["`company`"] = comOrg.Id //入职公司"` + adminOrg = comOrg.Id + } + } else { + editInfo["`company`"] = comOrg.Id //入职公司"` + adminOrg = comOrg.Id + } + sunOrg.GetGCSOrgSonAllId(adminOrg) + sunOrg.Id = append(sunOrg.Id, adminOrg) + allOrgId = sunOrg.Id + } + } + if len(allOrgId) > 0 { + //主部门 + if info[6] != "" { + mastOrg := GetMyOrgSunId(info[6], allOrgId) + if mastOrg != 0 { + editInfo["`maindeparment`"] = mastOrg //主部门"` + adminOrg = mastOrg + } + } + //二级部门 + if info[7] != "" { + suntOrg := GetMyOrgSunId(info[7], allOrgId) + if suntOrg != 0 { + editInfo["`sun_main_deparment`"] = suntOrg //主部门"` + adminOrg = suntOrg + } + } + //工段 + if info[8] != "" { + postOrg := GetMyOrgSunId(info[87], allOrgId) + if postOrg != 0 { + editInfo["`work_section`"] = postOrg //主部门"` + adminOrg = postOrg + } + } + } + //根据最终行政组织获取职务等信息 + if adminOrg != 0 { + editInfo["`admin_org`"] = adminOrg //所属行政组织"` + position, jobId, PersonInCharge := GetMyPositisName(info[9], adminOrg) + if position != 0 { + editInfo["`position`"] = position + } + if jobId != 0 { + editInfo["`job_id`"] = jobId + } + if PersonInCharge != 0 { + editInfo["`person_in_charge`"] = PersonInCharge + } + } + switch info[10] { + case "一级": + editInfo["`job_leve`"] = 1 // 职务等级"` + case "二级": + editInfo["`job_leve`"] = 2 // 职务等级"` + case "三级": + editInfo["`job_leve`"] = 3 // 职务等级"` + case "四级": + editInfo["`job_leve`"] = 4 // 职务等级"` + case "五级": + editInfo["`job_leve`"] = 5 // 职务等级"` + case "协议": + editInfo["`job_leve`"] = 6 // 协议"` + default: + } + if info[11] != "" { //管理类型 + var jobInfo models.JobClass + jobInfo.GetCont(map[string]interface{}{"`name`": info[11]}, "`id`") + if jobInfo.Id != 0 { + editInfo["`job_class`"] = jobInfo.Id //管理类别"` + } + } + if info[33] != "" { //微信号 + editInfo["`wechat`"] = info[33] + } + editInfo["`eite_time`"] = curryTime + editInfo["`is_show_true`"] = 1 + editInfo["`excel_template`"] = orgId + var userInfo models.PersonArchives + err := userInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editInfo) + // fmt.Printf("编辑信息:%v\n", err) + if err != nil { + g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err)) + g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err) + } else { + g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11))) + g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11)) + } + } + //协程处理附属信息 + synPros.Add(1) + go g.OrgChannelInfoRx(info[4], info[5], info[6], info[7], info[8], "电子表格导入数据") //行政组织变更 + synPros.Add(1) + go g.AuxiliaryTableUserRx(info) //人员信息副本(荣信) + // synPros.Add(1) + // go g.PoliticalOutlookEditRx(info) //政治面貌 + synPros.Add(1) + go g.EditEducationInfoRx(info) //学历信息 + synPros.Add(1) + go g.FamilyMembersRx(info) //家庭成员 + synPros.Add(1) + go g.GrowthExpWitTheGroupRx(info, orgId) //集团内成长经历 + synPros.Add(1) + go g.ExtWorkExpOfTheGroupRx(info) //集团外部工作经历 + synPros.Add(1) + go g.EditExamLevelRx(info, meritsYear) //绩效考核成绩 + synPros.Add(1) + go g.EditRewPunRx(info, rewPunYearsmap) //奖惩记录 + synPros.Add(1) + go g.EditAcaTitleRx(info) //编辑职称 + synPros.Add(1) + go g.EditCerFicRx(info) //编辑证书 + synPros.Add(1) + go g.TalentInventoryNew(info, orgId) //人才盘点 + //监听所有协程都完成 + synPros.Wait() +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-24 16:05:30 +@ 功能: 荣信专供证书 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) EditCerFicRx(info map[int]string) { + defer synPros.Done() + var cerHonList []models.CertificateHonors + err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&cerHonList).Error + if err != nil || len(cerHonList) < 1 { + if info[325] != "" { + titleAry := strings.Split(info[325], ";") + fmt.Printf("证书--%v---%v---%T-->%v\n", g.UserNum, info[325], titleAry, titleAry) + for i, v := range titleAry { + fmt.Printf("证书-%v-->%v\n", i, v) + if v != "" { + g.EditCertificateCont(v, "", "", "", "", "", "是") + } + } + + } + + } else { + jsonInfo, _ := json.Marshal(cerHonList) + overallhandle.WriteLog("del", "删除旧证书数据!", string(jsonInfo)) + var workGroupLogCont models.CertificateHonors + workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey}) + if info[325] != "" { + titleAry := strings.Split(info[325], ";") + fmt.Printf("证书--%v---%v---%T-->%v\n", g.UserNum, info[325], titleAry, titleAry) + for i, v := range titleAry { + fmt.Printf("证书-%v-->%v\n", i, v) + if v != "" { + g.EditCertificateCont(v, "", "", "", "", "", "是") + } + } + + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-24 15:58:32 +@ 功能: 荣信职称信息 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) EditAcaTitleRx(info map[int]string) { + defer synPros.Done() + var acaList []models.AcademicTitle + err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&acaList).Error + if err != nil || len(acaList) < 1 { + //新增职称 + if info[322] != "" { + g.InsetAcaInfoRx(info[322], info[323], info[324], "", "") + } + + } else { + //原先有数据 + jsonInfo, _ := json.Marshal(acaList) + overallhandle.WriteLog("del", "删除旧职称数据!", string(jsonInfo)) + var workGroupLogCont models.AcademicTitle + workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey}) + //新增职称 + if info[322] != "" { + g.InsetAcaInfoRx(info[322], info[323], info[324], "", "") + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-02-04 13:39:42 +@ 功能: 写入职称 +*/ +func (g *GroupParsingData) InsetAcaInfoRx(types, series, speciality, number, timeVal string) { + titleAry := strings.Split(types, ";") + // fmt.Printf("职称-%v-->%v\n", g.UserNum, titleAry) + for _, v := range titleAry { + if v != "" { + // fmt.Printf("职称-%v-%v-->%v\n", g.UserNum, i, v) + g.InsetAcaInfo(v, series, speciality, number, timeVal) + } + } + +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-28 09:28:07 +@ 功能: 人才盘点 +@ 参数 + + #info 表格数据 + #orgId 行政组织 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) TalentInventoryNew(info map[int]string, orgId string) { + defer synPros.Done() + currentYear := overallhandle.UnixTimeToDay(time.Now().Unix(), 16) + switch orgId { + case "296": + EditTalentInventory(g.UserKey, currentYear, info[297], info[298], "", info[296]) + default: + EditTalentInventory(g.UserKey, currentYear, info[291], info[292], "", "") + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 14:03:14 +@ 功能: 编辑证书(荣信) +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) EditCertificateRx(info map[int]string) { + defer synPros.Done() + var cerHonList []models.CertificateHonors + err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&cerHonList).Error + if err != nil || len(cerHonList) < 1 { + if info[346] != "" { + g.EditCertificateCont(info[345], info[346], info[347], info[348], info[349], info[350], "是") + } + if info[352] != "" { + g.EditCertificateCont(info[351], info[352], info[353], info[354], info[355], info[356], "是") + } + if info[358] != "" { + g.EditCertificateCont(info[357], info[358], info[359], info[360], info[361], info[362], "是") + } + } else { + jsonInfo, _ := json.Marshal(cerHonList) + overallhandle.WriteLog("del", "删除旧证书数据!", string(jsonInfo)) + var workGroupLogCont models.CertificateHonors + workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey}) + if info[346] != "" { + g.EditCertificateCont(info[345], info[346], info[347], info[348], info[349], info[350], "是") + } + if info[352] != "" { + g.EditCertificateCont(info[351], info[352], info[353], info[354], info[355], info[356], "是") + } + if info[358] != "" { + g.EditCertificateCont(info[357], info[358], info[359], info[360], info[361], info[362], "是") + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 13:58:10 +@ 功能: 编辑职称 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) EditAcademicTitleRx(info map[int]string) { + defer synPros.Done() + var acaList []models.AcademicTitle + err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&acaList).Error + if err != nil || len(acaList) < 1 { + //新增职称 + if info[335] != "" { + g.InsetAcaInfo(info[335], info[336], info[337], info[338], info[339]) + } + if info[340] != "" { + g.InsetAcaInfo(info[340], info[341], info[342], info[343], info[344]) + } + } else { + //原先有数据 + jsonInfo, _ := json.Marshal(acaList) + overallhandle.WriteLog("del", "删除旧职称数据!", string(jsonInfo)) + var workGroupLogCont models.AcademicTitle + workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey}) + if info[335] != "" { + g.InsetAcaInfo(info[335], info[336], info[337], info[338], info[339]) + } + if info[340] != "" { + g.InsetAcaInfo(info[340], info[341], info[342], info[343], info[344]) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 13:44:40 +@ 功能: 编辑奖惩记录 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) EditRewPunRx(info map[int]string, rewPunYearsmap map[int]int) { + defer synPros.Done() + if val, isOk := rewPunYearsmap[0]; isOk { + g.EditRewPunInfoRx(val, info[304], info[305], info[306], info[307], info[308], info[309]) + } + if val, isOk := rewPunYearsmap[1]; isOk { + g.EditRewPunInfoRx(val, info[310], info[311], info[312], info[313], info[314], info[315]) + } + if val, isOk := rewPunYearsmap[2]; isOk { + g.EditRewPunInfoRx(val, info[316], info[317], info[318], info[319], info[320], info[321]) + } + // if val, isOk := rewPunYearsmap[3]; isOk { + // g.EditRewPunInfoRx(val, info[325], info[326], info[327], info[328], info[329], info[330]) + // } +} + +// 写入奖惩记录 +func (g *GroupParsingData) EditRewPunInfoRx(years int, level, rewPunClass, title, timeData, issuingUnit, prePunNum string) { + var oldId []int64 + err := overall.CONSTANT_DB_HR.Model(&models.RewardsPenalties{}).Select("`id`").Where("`months` = 0 AND `userkey` = ? AND `years` = ?", g.UserKey, years).Find(&oldId).Error + + // var rewPunYearCont models.RewardsPenalties + // err := rewPunYearCont.GetCont(map[string]interface{}{"`userkey`": g.UserKey, "`years`": years, "`months`": 0}) + + if err == nil { + if len(oldId) > 0 { + overall.CONSTANT_DB_HR.Where("`id` IN ? ", oldId).Delete(&models.RewardsPenalties{}) + } + + } + + timeVal := time.Now().Unix() + if timeData != "" { + timeVal = overallhandle.ExcelDateToDate(timeData).Unix() + // fmt.Printf("奖惩记录3: %v\n", timeVal) + } + if title != "" { + titleAry := strings.Split(title, ";") + for _, v := range titleAry { + if v != "" { + var rewPunYearCont models.RewardsPenalties + jiangCeng := RewPunLevelClassStr(rewPunClass) + rewPunYearCont.Title = v //奖励/处分项目"` + rewPunYearCont.UserKey = g.UserKey //获得人员"` + if jiangCeng <= 6 { + rewPunYearCont.Types = 1 //类型(1:奖励;2:处分;)` + } else { + rewPunYearCont.Types = 2 //类型(1:奖励;2:处分;)` + } + rewPunYearCont.State = 1 //状态(1:启用;2:禁用;3:删除)` + rewPunYearCont.IssuingUnit = issuingUnit //颁发单位"` + + rewPunYearCont.TimeData = timeVal //获得时间"` + + rewPunYearCont.Years = years //年"` + rewPunYearCont.Months = 0 //月"` + rewPunYearCont.Level = RewPunLevelStr(level) //奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)"` + rewPunYearCont.RewPunClass = jiangCeng //奖惩类型(1:年终评优;2:表扬;3:嘉奖;4:记功;5:记大功;6:特别奖励;7:批评;8:警告;9:记过;10:记大过;11:降级;12:留用察看;13:开除)"` + rewPunYearCont.RewPunNumber = prePunNum + overall.CONSTANT_DB_HR.Create(&rewPunYearCont) + } + + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 13:25:00 +@ 功能: 编辑考核成绩(荣信) +@ 参数 + + #info 表单内容 + #meritsYear 年份 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) EditExamLevelRx(info map[int]string, meritsYear map[int]int) { + defer synPros.Done() + if val, isOk := meritsYear[0]; isOk { + g.EditExamLevelInfoRongXin(info[290], info[291], val) + } + if val, isOk := meritsYear[1]; isOk { + g.EditExamLevelInfoRongXin(info[292], info[293], val) + } + if val, isOk := meritsYear[2]; isOk { + g.EditExamLevelInfoRongXin(info[294], info[299], val) + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-20 11:32:26 +@ 功能: 集团外部工作经历 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) ExtWorkExpOfTheGroupRx(info map[int]string) { + defer synPros.Done() + var workList []models.WorkHistory + err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&workList).Error + if err != nil || len(workList) < 1 { //没有记录进行新增 + if info[224] != "" { //集团外工作经历1 + g.ExternalWorkGroupLog(info[224], info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235], info[236]) + } + if info[237] != "" { //集团外工作经历2 + g.ExternalWorkGroupLog(info[237], info[238], info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248], info[249]) + } + if info[250] != "" { //集团外工作经历3 + g.ExternalWorkGroupLog(info[250], info[251], info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261], info[262]) + } + if info[263] != "" { //集团外工作经历4 + g.ExternalWorkGroupLog(info[263], info[264], info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274], info[275]) + } + if info[276] != "" { //集团外工作经历5 + g.ExternalWorkGroupLog(info[276], info[277], info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287], info[288]) + } + } else { //已经存在历史记录了 + jsonInfo, _ := json.Marshal(workList) + overallhandle.WriteLog("del", "删除旧集团外部工作经历数据!", string(jsonInfo)) + var workGroupLogCont models.WorkHistory + workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey}) + if info[224] != "" { //集团外工作经历1 + g.ExternalWorkGroupLog(info[224], info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235], info[236]) + } + if info[237] != "" { //集团外工作经历2 + g.ExternalWorkGroupLog(info[237], info[238], info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248], info[249]) + } + if info[250] != "" { //集团外工作经历3 + g.ExternalWorkGroupLog(info[250], info[251], info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261], info[262]) + } + if info[263] != "" { //集团外工作经历4 + g.ExternalWorkGroupLog(info[263], info[264], info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274], info[275]) + } + if info[276] != "" { //集团外工作经历5 + g.ExternalWorkGroupLog(info[276], info[277], info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287], info[288]) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-20 11:23:58 +@ 功能: 集团内成长经历 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) GrowthExpWitTheGroupRx(info map[int]string, orgId string) { + defer synPros.Done() + var growInGroup []models.InsideWorkHistory + err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&growInGroup).Error + if err != nil || len(growInGroup) < 1 { + //没有集团经历,那么进行新增 + if info[93] != "" { //集团内工作经历1 + g.EditGroupInWorkLog(info[93], info[94], info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104], info[105], orgId) + } + if info[106] != "" { //集团内工作经历2 + g.EditGroupInWorkLog(info[106], info[107], info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117], info[118], orgId) + } + if info[119] != "" { //集团内工作经历3 + g.EditGroupInWorkLog(info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130], info[131], orgId) + } + if info[132] != "" { //集团内工作经历4 + g.EditGroupInWorkLog(info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143], info[144], orgId) + } + if info[145] != "" { //集团内工作经历5 + g.EditGroupInWorkLog(info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156], info[157], orgId) + } + if info[158] != "" { //集团内工作经历6 + g.EditGroupInWorkLog(info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169], info[170], orgId) + } + if info[171] != "" { //集团内工作经历7 + g.EditGroupInWorkLog(info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], info[183], orgId) + } + if info[184] != "" { //集团内工作经历8 + g.EditGroupInWorkLog(info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], info[196], orgId) + } + if info[197] != "" { //集团内工作经历9 + g.EditGroupInWorkLog(info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], info[209], orgId) + } + if info[210] != "" { //集团内工作经历10 + g.EditGroupInWorkLog(info[210], info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], info[222], orgId) + } + } else { + //有集团经历,那么删除旧的经历再新增 + jsonInfo, _ := json.Marshal(growInGroup) + overallhandle.WriteLog("del", "删除旧集团内部经历数据!", string(jsonInfo)) + var workGroupLogCont models.InsideWorkHistory + workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey}) + if info[93] != "" { //集团内工作经历1 + g.EditGroupInWorkLog(info[93], info[94], info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104], info[105], orgId) + } + if info[106] != "" { //集团内工作经历2 + g.EditGroupInWorkLog(info[106], info[107], info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117], info[118], orgId) + } + if info[119] != "" { //集团内工作经历3 + g.EditGroupInWorkLog(info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130], info[131], orgId) + } + if info[132] != "" { //集团内工作经历4 + g.EditGroupInWorkLog(info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143], info[144], orgId) + } + if info[145] != "" { //集团内工作经历5 + g.EditGroupInWorkLog(info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156], info[157], orgId) + } + if info[158] != "" { //集团内工作经历6 + g.EditGroupInWorkLog(info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169], info[170], orgId) + } + if info[171] != "" { //集团内工作经历7 + g.EditGroupInWorkLog(info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], info[183], orgId) + } + if info[184] != "" { //集团内工作经历8 + g.EditGroupInWorkLog(info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], info[196], orgId) + } + if info[197] != "" { //集团内工作经历9 + g.EditGroupInWorkLog(info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], info[209], orgId) + } + if info[210] != "" { //集团内工作经历10 + g.EditGroupInWorkLog(info[210], info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], info[222], orgId) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-20 11:13:08 +@ 功能: 家庭成员 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) FamilyMembersRx(info map[int]string) { + defer synPros.Done() + var familyAry []models.FamilyMembers + err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&familyAry).Error + if err != nil || len(familyAry) < 1 { //不存在,新增 + if info[60] != "" && info[61] != "" { + g.EditFamilyInfo(info[60], info[61], info[62], info[63], info[64], "否") + } + if info[65] != "" && info[66] != "" { + g.EditFamilyInfo(info[65], info[66], info[67], info[68], info[69], "否") + } + if info[70] != "" && info[71] != "" { + g.EditFamilyInfo(info[70], info[71], info[72], info[73], info[74], "否") + } + if info[75] != "" && info[76] != "" { + g.EditFamilyInfo(info[75], info[76], info[77], info[78], info[79], "否") + } + if info[80] != "" && info[81] != "" { + g.EditFamilyInfo(info[80], info[81], info[82], info[83], info[84], "否") + } + } else { //存在,删除旧数据后,再新增 + jsonInfo, _ := json.Marshal(familyAry) + overallhandle.WriteLog("del", "删除旧家庭成员数据!", string(jsonInfo)) + var familyCont models.FamilyMembers + familyCont.DelCont(map[string]interface{}{"`key`": g.UserKey}) + if info[60] != "" && info[61] != "" { + g.EditFamilyInfo(info[60], info[61], info[62], info[63], info[64], "否") + } + if info[65] != "" && info[66] != "" { + g.EditFamilyInfo(info[65], info[66], info[67], info[68], info[69], "否") + } + if info[70] != "" && info[71] != "" { + g.EditFamilyInfo(info[70], info[71], info[72], info[73], info[74], "否") + } + if info[75] != "" && info[76] != "" { + g.EditFamilyInfo(info[75], info[76], info[77], info[78], info[79], "否") + } + if info[80] != "" && info[81] != "" { + g.EditFamilyInfo(info[80], info[81], info[82], info[83], info[84], "否") + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-20 11:05:13 +@ 功能: +@ 参数 + + #info 电子表格信息 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) EditEducationInfoRx(info map[int]string) { + defer synPros.Done() + var mySchoolLog []models.PersonnelEducation + err := overall.CONSTANT_DB_HR.Model(&models.PersonnelEducation{}).Where("`key` = ?", g.UserKey).Find(&mySchoolLog).Error + if err != nil || len(mySchoolLog) < 1 { //不存在,新增 + if info[35] != "" || info[37] != "" { //第一学历 + g.AddOneSchollLog(info[35], info[36], "", info[37], "", "", info[38], info[39], info[40], 2) + } + if info[41] != "" || info[43] != "" { //最高学历 + g.AddOneSchollLog(info[41], info[42], "", info[43], "", "", info[44], info[45], info[46], 3) + } + if info[47] != "" || info[49] != "" { //其他学历 + g.AddOneSchollLog(info[47], info[48], "", info[49], "", "", info[50], info[51], info[52], 1) + } + if info[53] != "" || info[55] != "" { //其他学历 + g.AddOneSchollLog(info[53], info[54], "", info[55], "", "", info[56], info[57], info[58], 1) + } + } else { + //存在,删除旧的,再新增 + jsonInfo, _ := json.Marshal(mySchoolLog) + overallhandle.WriteLog("del", "删除旧集团外部工作经历数据!", string(jsonInfo)) + var delScho models.PersonnelEducation + delScho.DelCont(map[string]interface{}{"`key`": g.UserKey}) + if info[35] != "" || info[37] != "" { //第一学历 + g.AddOneSchollLog(info[35], info[36], "", info[37], "", "", info[38], info[39], info[40], 2) + } + if info[41] != "" || info[43] != "" { //最高学历 + g.AddOneSchollLog(info[41], info[42], "", info[43], "", "", info[44], info[45], info[46], 3) + } + if info[47] != "" || info[49] != "" { //其他学历 + g.AddOneSchollLog(info[47], info[48], "", info[49], "", "", info[50], info[51], info[52], 1) + } + if info[53] != "" || info[55] != "" { //其他学历 + g.AddOneSchollLog(info[53], info[54], "", info[55], "", "", info[56], info[57], info[58], 1) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-20 10:39:34 +@ 功能: 政治面貌 +@ 参数 + + #info 电子表格信息 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) PoliticalOutlookEditRx(info map[int]string) { + defer synPros.Done() + if info[331] != "" { + var polOutInfo models.PoliticalIdentity + err := polOutInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey}) + if err != nil { //不存在,新增 + polOutInfo.Userkey = g.UserKey //员工唯一识别符;"` + polOutInfo.PoliticalOutlook = politiToInt(info[331]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"` + if info[332] != "" { + polOutInfo.JoinTime = overallhandle.ExcelDateToDate(info[332]).Unix() //加入时间"` + } + polOutInfo.Branch = info[333] //所在党支部"` + polOutInfo.Bosition = info[334] //党内职务"` + polOutInfo.Time = time.Now().Unix() //创建时间"` + overall.CONSTANT_DB_HR.Create(&polOutInfo) + } else { + //存在,编辑内容 + editCont := overallhandle.MapOut() + if info[331] != "" { + poloutName := politiToInt(info[331]) + if poloutName != polOutInfo.PoliticalOutlook { + editCont["`political_outlook`"] = poloutName + } + } + if info[332] != "" { + joinTimeVal := overallhandle.ExcelDateToDate(info[332]).Unix() + if joinTimeVal != polOutInfo.JoinTime { + editCont["`joinTime`"] = joinTimeVal + } + } + if info[333] != "" && info[333] != polOutInfo.Branch { + editCont["`branch`"] = info[333] + } + if info[334] != "" && info[334] != polOutInfo.Bosition { + editCont["`position`"] = info[334] + } + if len(editCont) > 0 { + editCont["`time`"] = time.Now().Unix() + polOutInfo.EiteCont(map[string]interface{}{"`userkey`": g.UserKey}, editCont) + } + } + } else { + var polOutInfo models.PoliticalIdentity + polOutInfo.DelCont(map[string]interface{}{"`userkey`": g.UserKey}) + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-20 09:13:44 +@ 功能:人员信息副本(荣信) +@ 参数 + + #info 电子表格信息 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) AuxiliaryTableUserRx(info map[int]string) { + defer synPros.Done() + var myInfo models.PersonnelContent + err := myInfo.GetCont(map[string]interface{}{"`key`": g.UserKey}, "`number`") + if err != nil { //附属内容不存在,进行新增。 + myInfo.Key = g.UserKey //Key"` + myInfo.Number = g.UserNum //员工工号;index"` + myInfo.Idcardno = info[25] //身份证号 + myInfo.Mobilephone = info[30] //手机号码"` + myInfo.Email = info[34] //电子邮件"` + myInfo.Gender = genderToInt(info[12]) //性别(1:男性;2:女性;3:中性)"` + if info[13] != "" { + myInfo.Birthday = overallhandle.ExcelDateToDate(info[13]).Unix() //生日"` + } + myInfo.Myfolk = info[15] //民族"` + myInfo.Nativeplace = info[21] //籍贯"` + if info[26] != "" { + myInfo.Idcardstartdate = overallhandle.ExcelDateToDate(info[26]).Unix() //身份证有效期开始"` + } + if info[27] != "" { + myInfo.Idcardenddate = overallhandle.ExcelDateToDate(info[27]).Unix() //身份证有效期结束"` + } + myInfo.Idcardaddress = info[29] //身份证地址"` + myInfo.Health = healthToInt(info[17]) //健康状况(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废)"` + myInfo.Maritalstatus = maritalstatusToInt(info[16]) //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异)"` + myInfo.Currentresidence = info[20] //现居住地址"` + myInfo.Time = time.Now().Unix() //创建时间"` + myInfo.Constellation = consteToInt(info[23]) //星座(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座)"` + if info[85] == "是" { + myInfo.Isdoubleworker = 1 //是否双职工(1:是;2:否)"` + g.WorkingCoupleRx(info, true) + } else { + myInfo.Isdoubleworker = 2 //是否双职工(1:是;2:否)"` + g.WorkingCoupleRx(info, false) + } + if info[300] != "" { + myInfo.Jobstartdate = overallhandle.ExcelDateToDate(info[300]).Unix() //参加工作日期"` + } + if info[302] != "" { + myInfo.Entrydate = overallhandle.ExcelDateToDate(info[302]).Unix() //入职日期"` + } + if info[18] != "" { + myInfo.PoliticalOutlook = politiToInt(info[18]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"` + } + // if info[18] != "" { + // myInfo.PoliticalOutlook = politiToInt(info[18]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"` + // } + myInfo.MaritalstatusCn = info[16] //婚姻状况汉字说明"` + myInfo.ConstellationingCn = info[23] //星座汉字说明"` + myInfo.PoliticalOutlookCn = info[18] //政治面貌汉字说明"` + myInfo.HealthCn = info[17] //健康状况中文说明"` + myInfo.CareerPlanning = info[297] //职业生涯规划"` + myInfo.HelpObtained = info[298] //个人期望从组织获得的帮助"` + myInfo.Hobby = info[24] //爱好"` + myInfo.DomicileType = info[19] //户籍类型 + if info[28] == "是" { + myInfo.IdCardnoLongTerm = 1 //身份证是否长期有效(1:是;2:否) + + } else { + myInfo.IdCardnoLongTerm = 2 //身份证是否长期有效(1:是;2:否) + + } + myInfo.MobileShortNumber = info[31] //手机小号 + myInfo.Channel = JoinJobChanel(info[299]) //入职渠道(1:社会招聘;2:校园招聘;3:内部推荐) + myInfo.BloodType = info[22] //血型 + overall.CONSTANT_DB_HR.Create(&myInfo) + } else { //附属内容存在,进行编辑。 + editCont := overallhandle.MapOut() + editCont["`idcardno`"] = info[25] //身份证号 + editCont["`mobilephone`"] = info[30] //电话号码 + editCont["`email`"] = info[34] //邮箱 + editCont["`gender`"] = genderToInt(info[12]) //性别 + if info[13] != "" { + editCont["`birthday`"] = overallhandle.ExcelDateToDate(info[13]).Unix() + } + editCont["`myfolk`"] = info[15] + editCont["`nativeplace`"] = info[21] //籍贯 + if info[26] != "" { + editCont["`idcardstartdate`"] = overallhandle.ExcelDateToDate(info[26]).Unix() + } + if info[27] != "" { + editCont["`idcardenddate`"] = overallhandle.ExcelDateToDate(info[27]).Unix() + } + editCont["`idcardaddress`"] = info[29] //身份证地址 + editCont["`health`"] = healthToInt(info[17]) //健康状况 + editCont["`maritalstatus`"] = maritalstatusToInt(info[16]) //婚姻 + editCont["`currentresidence`"] = info[20] //现居住地址 + editCont["`constellationing`"] = consteToInt(info[23]) //星座 + if info[85] == "是" { + editCont["`isdoubleworker`"] = 1 //是否双职工(1:是;2:否)"` + g.WorkingCoupleRx(info, true) + } else { + editCont["`isdoubleworker`"] = 2 //是否双职工(1:是;2:否)"` + g.WorkingCoupleRx(info, false) + } + if info[300] != "" { + editCont["`jobstartdate`"] = overallhandle.ExcelDateToDate(info[303]).Unix() + } + if info[302] != "" { + editCont["`entrydate`"] = overallhandle.ExcelDateToDate(info[305]).Unix() + } + if info[18] != "" { + editCont["`political_outlook`"] = politiToInt(info[18]) + } + editCont["`maritalstatus_cn`"] = info[16] + editCont["`constellationing_cn`"] = info[23] + editCont["`political_outlook_cn`"] = info[18] + editCont["`health_cn`"] = info[17] + editCont["`career_planning`"] = info[297] + editCont["`help_obtained`"] = info[298] + editCont["`hobby`"] = info[24] + editCont["`domicile_type`"] = info[19] + if info[28] == "是" { + editCont["`idCardnoLongTerm`"] = 1 //身份证是否长期有效(1:是;2:否) + } else { + editCont["`idCardnoLongTerm`"] = 2 //身份证是否长期有效(1:是;2:否) + } + editCont["`mobileShortNumber`"] = info[31] + editCont["`channel`"] = JoinJobChanel(info[299]) + editCont["`bloodType`"] = info[22] + editCont["`time`"] = time.Now().Unix() + myInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editCont) + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 08:47:04 +@ 功能: 双职工处理 +@ 参数 + + #info 表单内容 + #isTrue 是否为双职工 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) WorkingCoupleRx(info map[int]string, isTrue bool) { + var doubleWorkMan []models.DoubleWorker + overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&doubleWorkMan) //获取旧数据 + if isTrue { + if len(doubleWorkMan) < 1 { //无记录,新增 + NewAddDoubleWorkRx(g.UserKey, g.UserNum, info) + } else { + oldId := int64(0) + for _, v := range doubleWorkMan { + if v.Name == info[86] { + oldId = v.Id + } + } + if oldId != 0 { //存在,数据编辑 + editInfo := overallhandle.MapOut() + editInfo["`name`"] = info[86] + editInfo["`company`"] = info[87] + editInfo["`department`"] = info[88] + editInfo["`position`"] = info[90] + editInfo["`workPosit`"] = info[90] + editInfo["`workUnit`"] = info[89] + // editInfo["`levele`"] = info[89] + if info[91] != "" { + editInfo["`joinTime`"] = overallhandle.ExcelDateToDate(info[94]).Unix() + } + + editInfo["`tel`"] = info[92] + editInfo["`time`"] = time.Now().Unix() + editInfo["`state`"] = 1 + var editCont models.DoubleWorker + editCont.EiteCont(map[string]interface{}{"`id`": oldId}, editInfo) + } else { + NewAddDoubleWorkRx(g.UserKey, g.UserNum, info) + } + } + } else { //不是双职工,软删除老数据 + if len(doubleWorkMan) > 0 { + var delDoubleWork models.DoubleWorker + delDoubleWork.EiteCont(map[string]interface{}{"`key`": g.UserKey}, map[string]interface{}{"`state`": 3}) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-27 09:25:01 +@ 功能: 新增双职工(荣信模版) +@ 参数 + + #userKey 人员KEY + #userNum 人员工号 + #info 电子表格信息 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func NewAddDoubleWorkRx(userKey int64, userNum string, info map[int]string) { + var inSetInfo models.DoubleWorker + inSetInfo.Key = userKey // + inSetInfo.Number = userNum //"` + inSetInfo.Name = info[86] //姓名"` + inSetInfo.Company = info[87] //所在公司"` + inSetInfo.Department = info[88] //所在部门"` + inSetInfo.Position = info[90] //所在岗位"` + inSetInfo.WorkUnit = info[89] + inSetInfo.WorkPosit = info[90] + + // inSetInfo.Levele = info[89] + if info[91] != "" { + inSetInfo.JoinTime = overallhandle.ExcelDateToDate(info[94]).Unix() + } + inSetInfo.Tel = info[92] //联系方式"` + inSetInfo.Time = time.Now().Unix() //创建时间"` + inSetInfo.State = 1 //状态(1:启用;2:禁用;3:删除)` + overall.CONSTANT_DB_HR.Create(&inSetInfo) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-05 09:50:36 +@ 功能: 行政组织变动 +@ 参数 + + #company 公司 + #firstDepartment 第一部门 + #secondaryDepartment 第二部门 + #workshop 工段 + #notes 备注 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GroupParsingData) OrgChannelInfoRx(company, sunCompany, firstDepartment, secondaryDepartment, workshop, notes string) { + defer synPros.Done() + var orgChangeInfo []models.OrgChangeRecord + overall.CONSTANT_DB_HR.Model(&models.OrgChangeRecord{}).Where("`userKey` = ?", g.UserKey).Find(&orgChangeInfo) + if len(orgChangeInfo) > 0 { + var comId int64 + var firstDepId int64 + var secDepId int64 + var workspId int64 + var allOrgId []int64 + //公司 + if company != "" { + var comOrg models.AdministrativeOrganization + comOrg.GetCont(map[string]interface{}{"`name`": company}, "`id`") + if comOrg.Id != 0 { + if sunCompany != "" { //判断子公司 + var sunComOrg models.AdministrativeOrganization + sunComOrg.GetCont(map[string]interface{}{"`name`": sunCompany, "`superior`": comOrg.Id}, "`id`") + if sunComOrg.Id != 0 { + comId = sunComOrg.Id //入职公司"` + } else { + comId = comOrg.Id //入职公司"` + } + } else { + comId = comOrg.Id //入职公司"` + } + var sunOrg overallhandle.GetOrgAllParent + sunOrg.GetGCSOrgSonAllId(comId) + sunOrg.Id = append(sunOrg.Id, comId) + allOrgId = sunOrg.Id + } + + } + if firstDepartment != "" { + if len(allOrgId) > 0 { + mastOrg := GetMyOrgSunId(firstDepartment, allOrgId) + if mastOrg != 0 { + firstDepId = mastOrg //主部门"` + } + } + + } + if secondaryDepartment != "" { + if len(allOrgId) > 0 { + suntOrg := GetMyOrgSunId(secondaryDepartment, allOrgId) + if suntOrg != 0 { + secDepId = suntOrg //二级主部门"` + } + } + } + if workshop != "" { + if len(allOrgId) > 0 { + postOrg := GetMyOrgSunId(workshop, allOrgId) + if postOrg != 0 { + workspId = postOrg //二级主部门"` + } + } + } + isEdit := true + for _, v := range orgChangeInfo { + if v.CompanyCn == company { + if v.FirstDepartment != firstDepartment { + if v.SecondaryDepartment != secondaryDepartment { + if v.WorkShop != workshop { + isEdit = false + break + } + } + } + } + } + if isEdit { + var inSetInfo models.OrgChangeRecord + inSetInfo.Userkey = g.UserKey + inSetInfo.CompanyCn = company + inSetInfo.FirstDepartment = firstDepartment + inSetInfo.SecondaryDepartment = secondaryDepartment + inSetInfo.WorkShop = workshop + inSetInfo.CompanyId = comId //入职公司"` + inSetInfo.FirstDepartmentId = firstDepId //主部门"` + inSetInfo.SecondaryDepartmentId = secDepId //二级主部门"` + inSetInfo.WorkShopid = workspId //二级主部门"` + inSetInfo.Time = time.Now().Unix() + inSetInfo.Notes = "表格导入信息行政组织调动" + overall.CONSTANT_DB_HR.Create(&inSetInfo) + } + } else { + var inSetInfo models.OrgChangeRecord + inSetInfo.Userkey = g.UserKey + inSetInfo.CompanyCn = company + inSetInfo.FirstDepartment = firstDepartment + inSetInfo.SecondaryDepartment = secondaryDepartment + inSetInfo.WorkShop = workshop + + var allOrgId []int64 + //公司 + if company != "" { + var comOrg models.AdministrativeOrganization + comOrg.GetCont(map[string]interface{}{"`name`": company}, "`id`") + if comOrg.Id != 0 { + + var sunOrg overallhandle.GetOrgAllParent + + if sunCompany != "" { //判断子公司 + var sunComOrg models.AdministrativeOrganization + sunComOrg.GetCont(map[string]interface{}{"`name`": sunCompany, "`superior`": comOrg.Id}, "`id`") + if sunComOrg.Id != 0 { + inSetInfo.CompanyId = sunComOrg.Id //入职公司"` + sunOrg.GetGCSOrgSonAllId(sunComOrg.Id) + sunOrg.Id = append(sunOrg.Id, sunComOrg.Id) + } else { + inSetInfo.CompanyId = comOrg.Id //入职公司"` + sunOrg.GetGCSOrgSonAllId(comOrg.Id) + sunOrg.Id = append(sunOrg.Id, comOrg.Id) + } + } else { + inSetInfo.CompanyId = comOrg.Id //入职公司"` + sunOrg.GetGCSOrgSonAllId(comOrg.Id) + sunOrg.Id = append(sunOrg.Id, comOrg.Id) + } + allOrgId = sunOrg.Id + } + + } + if firstDepartment != "" { + if len(allOrgId) > 0 { + mastOrg := GetMyOrgSunId(firstDepartment, allOrgId) + if mastOrg != 0 { + inSetInfo.FirstDepartmentId = mastOrg //主部门"` + } + } + + } + if secondaryDepartment != "" { + if len(allOrgId) > 0 { + suntOrg := GetMyOrgSunId(secondaryDepartment, allOrgId) + if suntOrg != 0 { + inSetInfo.SecondaryDepartmentId = suntOrg //二级主部门"` + } + } + } + if workshop != "" { + if len(allOrgId) > 0 { + postOrg := GetMyOrgSunId(workshop, allOrgId) + if postOrg != 0 { + inSetInfo.WorkShopid = postOrg //二级主部门"` + } + } + } + inSetInfo.Time = time.Now().Unix() + inSetInfo.Notes = "初始化表格导入信息" + overall.CONSTANT_DB_HR.Create(&inSetInfo) + } +} diff --git a/api/version1/personnelapi/controll.go b/api/version1/personnelapi/controll.go index 35bca08..56db45d 100644 --- a/api/version1/personnelapi/controll.go +++ b/api/version1/personnelapi/controll.go @@ -1,5 +1,16 @@ package personnelapi +import ( + "encoding/json" + "errors" + "fmt" + "hr_server/models" + "hr_server/models/workgroup" + "hr_server/overall" + "hr_server/overall/overallhandle" + "strconv" +) + //用工关系转换 //1:实习生;2:待分配;3:试用员工;4:正式员工;5:停薪留职;6:退休;7:辞退;8:离职 @@ -44,8 +55,8 @@ func EmptypeToInt(emp string) int { } } -//雇佣类型转换 -//雇佣类型(1:雇佣入职;2:再入职;3:返聘) +// 雇佣类型转换 +// 雇佣类型(1:雇佣入职;2:再入职;3:返聘) func hireTypeToInt(hir string) int { switch hir { case "雇佣入职": @@ -101,6 +112,8 @@ func consteToInt(emp string) int { return 6 case "天枰座": return 7 + case "天秤座": + return 7 case "天蝎座": return 8 case "射手座": @@ -375,11 +388,11 @@ func ducationToInt(emp string) int { case "专家、教授": return 12 default: - return 1 + return 0 } } -//学位(0:无;1:学士;2:硕士;3:博士;4:工学学士;5:教育学学位)int +// 学位(0:无;1:学士;2:硕士;3:博士;4:工学学士;5:教育学学位)int func hestacademicdegreeToInt(hir string) int { switch hir { case "学士": @@ -434,7 +447,7 @@ func EmptypeToStr(emp int) string { } } -//雇佣类型(1:社会招聘;2:校园招聘;3:内部推荐) +// 雇佣类型(1:社会招聘;2:校园招聘;3:内部推荐) func JoinJobChanel(hir string) int { switch hir { case "校园招聘": @@ -461,6 +474,28 @@ func EducationTypeStr(level string) int { return 5 case "函授学历": return 6 + case "双一流院校": + return 7 + case "“985”工程院校": + return 9 + case "“211”工程院校": + return 8 + case "公办本科院校": + return 10 + case "民办本科院校": + return 11 + case "公办专科院校": + return 12 + case "民办专科院校": + return 13 + case "高职院校": + return 14 + case "中职院校": + return 15 + case "公立中学": + return 16 + case "私立中学": + return 17 default: return 0 } @@ -550,8 +585,12 @@ func SchoolTypeStr(level string) int { typeName = 7 case "”211“工程院校": typeName = 8 - case "”985“工程院校": + case "“211“工程院校": typeName = 8 + case "”985“工程院校": + typeName = 9 + case "“985”工程院校": + typeName = 9 case "双一流院校": typeName = 10 default: @@ -559,3 +598,204 @@ func SchoolTypeStr(level string) int { } return typeName } + +/* +* +@ 作者: 秦东 +@ 时间: 2025-01-16 16:26:39 +@ 功能: 确定当前行政组织用哪一个轮询规则 +*/ +func CureeRunRules(orgId int64) (rules GenesInfo, cureeOrgId int64, err error) { + + if orgId != 0 { + err = rules.GetCont(map[string]interface{}{"`orgId`": orgId}) + if err != nil || rules.TypeId == 0 { + var supaerOrgId models.AdministrativeOrganization + supaerOrgId.GetCont(map[string]interface{}{"`id`": orgId}, "`superior`") + if supaerOrgId.Superior != 0 { + return CureeRunRules(supaerOrgId.Superior) + } + } else { + cureeOrgId = orgId + } + } else { + err = errors.New("没有相关设定") + } + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-01-30 13:38:44 +@ 功能: 计算行政组织某一天执行得班组 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (g *GenesInfo) CountOrgTeamsIsDay(dats string) (teamIsDay []workgroup.TeamsRules, err error) { + //获取源点起始工作时间段 + g.BegainTime = overallhandle.UnixTimeToDay(g.StartTime, 14) + g.TypeIdStr = strconv.FormatInt(g.TypeId, 10) + //获取倒班规则 + var paiBanType workgroup.WorkTimeType + paiBanType.GetCont(map[string]interface{}{"`id`": g.TypeId}, " `name`") + g.TypeName = paiBanType.Name + //作息时间 + var zuoXiTime []workgroup.WorkingTimePeriod + overall.CONSTANT_DB_HR.Where("`state` = 1 AND `type_id` = ?", g.TypeId).Order("`sort` ASC").Find(&zuoXiTime) + //轮询规则 + + var lunXunShiXu []workgroup.TeamsRules + overall.CONSTANT_DB_HR.Where("`ruleTypeId` = ?", g.TypeId).Find(&lunXunShiXu) + if len(zuoXiTime) < 1 || len(lunXunShiXu) < 1 { + return teamIsDay, errors.New("此行政组织还未设定班组轮询规则! *struct类型,却传入*") + } + var canyuTeams []int64 + cycle := 1 + for _, v := range lunXunShiXu { + cycle = v.Cycle + if !overallhandle.IsInTrue(v.TeamsId, canyuTeams) { + canyuTeams = append(canyuTeams, v.TeamsId) + } + } + teamsMap := make(map[int64][]workgroup.TeamsRules) + for _, v := range canyuTeams { + var teamRuleAry []workgroup.TeamsRules + for _, mv := range lunXunShiXu { + if v == mv.TeamsId { + teamRuleAry = append(teamRuleAry, mv) + } + } + teamsMap[v] = teamRuleAry + } + + var wvTimeAll overallhandle.DateTimeTotimes + wvTimeAll.BaisStrToTime(dats) + + fmt.Printf("daysApart------------->:%v\n%v\n%v\n", dats, wvTimeAll.AllTime, wvTimeAll) + + var qiyuanTime overallhandle.DateTimeTotimes + qiyuanTime.BaisStrToTime(g.BegainTime) + + // yearIntQy, _ := strconv.Atoi(qiyuanTime.Years) + // monthIntQy, _ := strconv.Atoi(qiyuanTime.Months) + // daysIntQy, _ := strconv.Atoi(qiyuanTime.Days) + // zhouJiQiyuan := overallhandle.ZellerFunction2Week(yearIntQy, monthIntQy, daysIntQy) + + switch cycle { + case 2: //按周 + yearInt, _ := strconv.Atoi(wvTimeAll.Years) + monthInt, _ := strconv.Atoi(wvTimeAll.Months) + daysInt, _ := strconv.Atoi(wvTimeAll.Days) + zhouJi := overallhandle.ZellerFunction2Week(yearInt, monthInt, daysInt) + key := 0 + if zhouJi-1 > 0 { + if zhouJi-1 > len(lunXunShiXu) { + key = len(lunXunShiXu) - 1 + } else { + key = zhouJi - 1 + } + + } else { + key = 0 + } + banZuAry := lunXunShiXu[key] + teamIsDay = append(teamIsDay, banZuAry) + default: + daysApart := ((wvTimeAll.AllTime - qiyuanTime.AllTime) / 86400) + 1 + // jsontime, _ := json.Marshal(g) + fmt.Printf("daysApart:%v\n%v\n%v\n%v\n", dats, daysApart, wvTimeAll.AllTime, qiyuanTime.AllTime) + if daysApart >= 0 { + for i, v := range teamsMap { + ruleLen := len(v) + var ruleStep int64 = 1 + if daysApart > int64(ruleLen) { + + ruleStep = int64(daysApart) % int64(ruleLen) + if ruleStep == 0 { + ruleStep = int64(ruleLen) + } + } else { + ruleStep = int64(daysApart) + } + + for _, lv := range lunXunShiXu { + + if lv.CycleSort == ruleStep && lv.TeamsId == i && lv.CycleWorkTime != 0 { + // cycleInfo = v + lvJson, _ := json.Marshal(lv) + fmt.Printf("\n\nlv---------i:%v----ruleStep:%v-------->%v\n\n", i, ruleStep, string(lvJson)) + teamIsDay = append(teamIsDay, lv) + } + + } + } + } + + // daysApart, _ := overallhandle.CalculateYearDifference(g.StartTime, wvTimeAll.AllTime, 1) + // sjc := ((wvTimeAll.AllTime - g.StartTime) / 86400) + 1 + // fmt.Printf("\n\n\n\n相差几天%v------------------->%v\n\n\n\n", daysApart, sjc) + // xiangcha := (7 - zhouJiQiyuan) + // daysApart = daysApart + float64(xiangcha) + // fmt.Printf("\n\n\n\n相差几天%v------------------->%v----------------->%v------------------->%v\n\n\n\n", daysApart, sjc, xiangcha, daysApart) + // daysApartInt64, _ := strconv.ParseInt(strconv.FormatFloat(daysApart, 'f', 0, 64), 10, 64) + // if daysApart >= 0 { + // for _, v := range teamsMap { + // ruleLen := len(v) + // var ruleStep int64 = 1 + // if sjc > int64(ruleLen) { + + // ruleStep = int64(sjc) % int64(ruleLen) + // if ruleStep == 0 { + // ruleStep = int64(ruleLen) + // } + // } else { + // ruleStep = int64(sjc) + // } + + // guoDuVal := daysApartInt64 % int64(ruleLen) + // // dingwei, _ := strconv.ParseInt(strconv.FormatFloat(math.Ceil(guoDuVal), 'f', 0, 64), 10, 64) + // // fmt.Printf("\n\n\n\n相差几天------------>%v\n\n\n\n", dingwei) + // val, _ := json.Marshal(v) + + // sort.Slice(v, func(i, j int) bool { + // return v[i].CycleSort < v[j].CycleSort + // }) + // fmt.Printf("\n\n\n\n相差几天-----guoDuVal------->%v\n\n------->%v\n\n------->%v\n\n", ruleStep, guoDuVal, string(val)) + // // keyVal := dingwei + 1 + // keyVal := guoDuVal + // if keyVal < 0 { + // keyVal = 0 + // } + // // if v.CycleSort == ruleStep{ + + // // } + // teamIsDay = append(teamIsDay, v[guoDuVal]) + // } + // } else { + // daysApartInt64 = -daysApartInt64 + // for _, v := range teamsMap { + // ruleLen := len(v) + // if ruleLen <= 0 { + // ruleLen = 1 + // } + // guoDuVal := daysApartInt64 / int64(ruleLen) + // // dingwei, _ := strconv.ParseInt(strconv.FormatFloat(math.Ceil(guoDuVal), 'f', 0, 64), 10, 64) + // sort.Slice(v, func(i, j int) bool { + // return v[i].CycleSort > v[j].CycleSort + // }) + // teamIsDay = append(teamIsDay, v[guoDuVal]) + // } + // } + } + return teamIsDay, nil +} diff --git a/api/version1/personnelapi/export_type.go b/api/version1/personnelapi/export_type.go index fe8783c..b098414 100644 --- a/api/version1/personnelapi/export_type.go +++ b/api/version1/personnelapi/export_type.go @@ -1,12 +1,16 @@ package personnelapi -import "github.com/gin-gonic/gin" +import ( + "hr_server/models" + + "github.com/gin-gonic/gin" +) type ExportServer struct { engine *gin.Engine } -//导出人员信息 +// 导出人员信息 type ExportPeopleCont struct { Number string `json:"number"` Name string `json:"name"` @@ -17,3 +21,13 @@ type ExportPeopleCont struct { Team string `json:"team"` EmpTypeNAme string `json:"emptype"` } + +type UserOfOrgInfo struct { + models.UserOrg + Orgallname string `json:"orgallname" gorm:"-"` + Postname string `json:"postname" gorm:"-"` + Starttimeing string `json:"starttimeing" gorm:"-"` +} +type OrgFullName struct { + Name string `json:"name"` +} diff --git a/api/version1/personnelapi/kingdeecont.go b/api/version1/personnelapi/kingdeecont.go index 317695e..dfa7308 100644 --- a/api/version1/personnelapi/kingdeecont.go +++ b/api/version1/personnelapi/kingdeecont.go @@ -5,6 +5,7 @@ import ( "hr_server/models" "hr_server/overall" "hr_server/overall/overallhandle" + "strconv" "strings" "time" @@ -55,21 +56,23 @@ func EditWithinGroupWorkLog(manKeyNum int64, contList []insideHistoryer) { } //写入员工入职离职时间 EmployeeOnboardingAndResignation(manKeyNum, v.ChangeType, v.StartTime, weiYi) - + var creadCont models.InsideWorkHistory WorkShop := myCont.SunMainDeparment if v.Workshop != "" { var workShopCont models.AdministrativeOrganization - workShopErr := workShopCont.GetCont(map[string]interface{}{"kingdeeid": v.Workshop}, "id") + workShopErr := workShopCont.GetCont(map[string]interface{}{"kingdeeid": v.Workshop}, "`id`", "`name`") if workShopErr == nil { WorkShop = workShopCont.Id //部室"` + creadCont.Ejbm = workShopCont.Name } } WorkshopSection := myCont.AdminOrg if v.WorkshopSection != "" { var workShopSecCont models.AdministrativeOrganization - workShopSecErr := workShopSecCont.GetCont(map[string]interface{}{"kingdeeid": v.WorkshopSection}, "id") + workShopSecErr := workShopSecCont.GetCont(map[string]interface{}{"kingdeeid": v.WorkshopSection}, "`id`", "`name`") if workShopSecErr == nil { WorkshopSection = workShopSecCont.Id //工段"` + creadCont.Gongduan = workShopSecCont.Name } } var wssCont models.AdministrativeOrganization @@ -97,20 +100,26 @@ func EditWithinGroupWorkLog(manKeyNum int64, contList []insideHistoryer) { } if dempCont.Id == 0 { dempCont.Id = myCont.MainDeparment + } else { + creadCont.Yjbm = dempCont.Name } //公司 var compayCont models.AdministrativeOrganization - compayCont.GetCont(map[string]interface{}{"kingdeeid": v.Company}, "id") + compayCont.GetCont(map[string]interface{}{"kingdeeid": v.Company}, "`id`", "`name`") if compayCont.Id == 0 { compayCont.Id = myCont.Company + } else { + creadCont.Gsmc = compayCont.Name } //职务 var postCont models.Position - postCont.GetCont(map[string]interface{}{"kingdeeid": v.Position}, "id") + postCont.GetCont(map[string]interface{}{"kingdeeid": v.Position}, "`id`", "`name`") if postCont.Id == 0 { postCont.Id = myCont.Position + } else { + creadCont.Zhiwei = postCont.Name } - var creadCont models.InsideWorkHistory + creadCont.Key = manKeyNum //员工识别符"` creadCont.Group = groupContes.Id //集团"` creadCont.Company = compayCont.Id //公司"` @@ -119,6 +128,7 @@ func EditWithinGroupWorkLog(manKeyNum int64, contList []insideHistoryer) { creadCont.WorkshopSection = WorkshopSection //工段"` creadCont.Position = postCont.Id //职位"` creadCont.GradePositions = v.GradePositions //职等"` + creadCont.Dengji = strconv.FormatInt(v.GradePositions, 10) startTime := time.Now().Unix() if v.StartTime != "" { var startTimeErr bool diff --git a/api/version1/personnelapi/kingdeeempty.go b/api/version1/personnelapi/kingdeeempty.go index 6c9b631..bcaa63d 100644 --- a/api/version1/personnelapi/kingdeeempty.go +++ b/api/version1/personnelapi/kingdeeempty.go @@ -1,11 +1,15 @@ package personnelapi import ( + "fmt" "hr_server/models" "hr_server/models/hrmodels" "hr_server/overall" "hr_server/overall/overallhandle" + "strconv" "time" + + "github.com/gin-gonic/gin" ) /* @@ -194,3 +198,207 @@ func GetInsetCommpyTime(userKey int64) (workTime int64) { overall.CONSTANT_DB_HR.Model(&models.InsideWorkHistory{}).Select("COALESCE(MIN(start_time), 0) AS beginTime").Where("`key` = ?", userKey).Find(&workTime) return } + +/* +* +@ 作者: 秦东 +@ 时间: 2025-02-11 13:10:16 +@ 功能: 编辑个人行政组织关系 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func SaveUserOfOrg(manKeyNum int64, contList []insideHistoryer) { + defer synPro.Done() + if len(contList) > 0 && manKeyNum > 0 { + //获取个人信息 + var myCont models.PersonArchives + myCont.GetCont(map[string]interface{}{"key": manKeyNum}, "`company`", "`maindeparment`", "`admin_org`", "`sun_main_deparment`", "`position`", "`teamid`") + + creatTime := time.Now().Unix() + //批量写入 + var creadContList []models.UserOrg + for _, v := range contList { + var timeCont overallhandle.DateTimeTotimes + timeCont.BaisStrToTime(v.EndTime) + + if creatTime <= timeCont.AllTime { + var adminOrg OrgAndLevel + var creadCont models.UserOrg + creadCont.Userkey = manKeyNum //mment:员工唯一识别符;"` + if v.Company != "" { + var orgOne hrmodels.OrgCont + orgOne.GetCont(map[string]interface{}{"`kingdeeid`": v.Company}, "`id`", "`level`") + creadCont.Company = orgOne.Id //mment:所属公司;"` + if adminOrg.Level <= orgOne.Level { + adminOrg.Level = orgOne.Level + adminOrg.AdminOrg = orgOne.Id + } + } + if v.Department != "" { + var orgOneDerp hrmodels.OrgCont + orgOneDerp.GetCont(map[string]interface{}{"`kingdeeid`": v.Department}, "`id`", "`level`") + if adminOrg.Level <= orgOneDerp.Level { + adminOrg.Level = orgOneDerp.Level + adminOrg.AdminOrg = orgOneDerp.Id + } + } + if v.Workshop != "" { + var orgOneWorks hrmodels.OrgCont + orgOneWorks.GetCont(map[string]interface{}{"`kingdeeid`": v.Workshop}, "`id`", "`level`") + if adminOrg.Level <= orgOneWorks.Level { + adminOrg.Level = orgOneWorks.Level + adminOrg.AdminOrg = orgOneWorks.Id + } + } + if v.Group != "" { + var orgOneGrop hrmodels.OrgCont + orgOneGrop.GetCont(map[string]interface{}{"`kingdeeid`": v.Group}, "`id`", "`level`") + if adminOrg.Level <= orgOneGrop.Level { + adminOrg.Level = orgOneGrop.Level + adminOrg.AdminOrg = orgOneGrop.Id + } + } + creadCont.Orgid = adminOrg.AdminOrg //t:行政组织ID;"` + if v.Position != "" { + var postInfo models.Position + postInfo.GetCont(map[string]interface{}{"`kingdeeid`": v.Position}, "`id`", "`name`") + creadCont.Position = postInfo.Id //comment:职位;"` + } + // creadCont.TeamsId = //mment:班组Id;"` + if v.StartTime != "" { + var timeCont overallhandle.DateTimeTotimes + timeCont.BaisStrToTime(v.StartTime) + creadCont.StartTime = timeCont.AllTime + } + if v.AssignType == "主职" { + creadCont.AssignType = 1 //comment:1:主职;2:兼职"` + } else { + creadCont.AssignType = 2 //comment:1:主职;2:兼职"` + } + creadCont.Time = creatTime //编辑时间;"` + creadContList = append(creadContList, creadCont) + } + + } + if len(creadContList) > 0 { + //1、清空任职记录 + overall.CONSTANT_DB_HR.Where("`userKey` = ?", manKeyNum).Delete(&models.UserOrg{}) + overall.CONSTANT_HRSERVER_DATABASE.Where("`userKey` = ?", manKeyNum).Delete(&models.UserOrg{}) + for _, v := range creadContList { + var nId int64 + overall.CONSTANT_DB_HR.Model(&models.UserOrg{}).Select("`id`").Where("`userKey` = ? AND `company` = ? AND `orgid` = ? AND `position` = ?", manKeyNum, v.Company, v.Orgid, v.Position).First(&nId) + if nId == 0 { + overall.CONSTANT_DB_HR.Create(&v) + } + var wId int64 + overall.CONSTANT_HRSERVER_DATABASE.Model(&models.UserOrg{}).Select("`id`").Where("`userKey` = ? AND `company` = ? AND `orgid` = ? AND `position` = ?", manKeyNum, v.Company, v.Orgid, v.Position).First(&wId) + if wId == 0 { + overall.CONSTANT_HRSERVER_DATABASE.Create(&v) + } + + } + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-02-11 14:28:37 +@ 功能: 员工行政组织关系 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) UserAboutOrgListNew(c *gin.Context) { + var requestData overallhandle.ConstId + err := c.ShouldBindJSON(&requestData) + if err != nil { + overallhandle.Result(100, err, c) + return + } + sendMap, _ := GetUesrOffice(requestData.Id) + overallhandle.Result(0, sendMap, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-02-11 15:02:59 +@ 功能:获取任职列表 +*/ +func GetUesrOffice(userKey interface{}) (sendMap []map[string]interface{}, err error) { + var workHistory []UserOfOrgInfo + err = overall.CONSTANT_DB_HR.Where("`userKey` = ?", userKey).Order("`assignType` ASC").Order("`startTime` DESC").Find(&workHistory).Error + if err != nil { + + return + } + // var sendMap []map[string]interface{} + for _, v := range workHistory { + sendInfo := overallhandle.MapOut() + sendInfo["id"] = strconv.FormatInt(v.Id, 10) + sendInfo["userKey"] = strconv.FormatInt(v.Userkey, 10) + sendInfo["company"] = strconv.FormatInt(v.Company, 10) + sendInfo["orgid"] = strconv.FormatInt(v.Orgid, 10) + sendInfo["position"] = strconv.FormatInt(v.Position, 10) + sendInfo["teamsId"] = strconv.FormatInt(v.TeamsId, 10) + sendInfo["startTime"] = strconv.FormatInt(v.StartTime, 10) + sendInfo["assigntype"] = v.AssignType + if v.Position != 0 { + var postInfo models.Position + postInfo.GetCont(map[string]interface{}{"`id`": v.Position}, "`name`") + sendInfo["postname"] = postInfo.Name + } + if v.Orgid != 0 { + var fullOegName OrgFullName + fullOegName.DiGuiOrgName(v.Orgid) + sendInfo["orgallname"] = fullOegName.Name + } + sendInfo["starttimeing"] = overallhandle.UnixTimeToDay(v.StartTime, 4) + sendInfo["time"] = overallhandle.UnixTimeToDay(v.Time, 4) + sendMap = append(sendMap, sendInfo) + } + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-02-11 14:45:11 +@ 功能: 递归获取行政组织名称 +@ 行政组织Id orgId +*/ +func (o *OrgFullName) DiGuiOrgName(orgId int64) { + var orgOneGrop hrmodels.OrgCont + orgOneGrop.GetCont(map[string]interface{}{"`id`": orgId}, "`name`", "`superior`", "`level`") + if orgOneGrop.Name != "" { + if o.Name != "" { + o.Name = fmt.Sprintf("%v/%v", orgOneGrop.Name, o.Name) + } else { + o.Name = fmt.Sprintf(" %v", orgOneGrop.Name) + } + } + if orgOneGrop.Level > 3 { + if orgOneGrop.Superior != 0 { + o.DiGuiOrgName(orgOneGrop.Superior) + } + } +} diff --git a/api/version1/personnelapi/kingdeenew.go b/api/version1/personnelapi/kingdeenew.go index 7bebf88..d6076f1 100644 --- a/api/version1/personnelapi/kingdeenew.go +++ b/api/version1/personnelapi/kingdeenew.go @@ -44,17 +44,18 @@ func (s *StaffApi) NewKingdee(c *gin.Context) { // manJson, _ := json.Marshal(manContent) // fmt.Printf("编辑操作---》%v\n---》%v\n", requestData.Number, string(manJson)) if manErr == nil { - + overallhandle.WriteLog("i", "已经存在!进行变动操作!", string(saveKingDeeJson)) //已经存在!进行变动操作 manErr = eidtAddManContJinDie(manContent, requestData) - overallhandle.WriteLog("i", "已经存在!进行变动操作!", string(saveKingDeeJson)) + overallhandle.WriteLog("i", "变动操作完成!", manErr) } else { // fmt.Printf("新增操作---》%v\n", manContent.IsShowTrue) //不存在!进行新增操作 + overallhandle.WriteLog("i", "不存在!进行新增操作!", manErr, string(saveKingDeeJson)) var oldSchool models.WorkMan oldSchool.GetCont(map[string]interface{}{"wm_number": requestData.Number}) manErr = newAddManContJinDie(oldSchool, requestData) - overallhandle.WriteLog("i", "不存在!进行新增操作!", manErr, string(saveKingDeeJson)) + overallhandle.WriteLog("i", "新增操作完成!", manErr, string(saveKingDeeJson)) } if manErr != nil { overallhandle.Result(104, manErr, c) @@ -97,7 +98,7 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe } if manCont.Icon != "" { newIcon := fmt.Sprintf("data:image/jpeg;base64,%v", strings.Replace(manCont.Icon, "\r\n", "", -1)) - if newIcon != perArcInfo.Icon { + if newIcon != perArcInfo.IconPhoto { eidtManCont["`icon_photo`"] = newIcon } @@ -144,7 +145,7 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe if manCont.Company != "" { var orgCompany models.AdministrativeOrganization orgErr := orgCompany.GetCont(map[string]interface{}{"kingdeeid": manCont.Company}, "`id`") - if orgErr == nil { + if orgErr == nil && orgCompany.Id != 0 { if orgCompany.Id != perArcInfo.Company { eidtManCont["`company`"] = orgCompany.Id changeRecordTrue = true @@ -168,16 +169,34 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe // manMainCont.AdminOrg = orgMainDepart.Id if departmentId != perArcInfo.MainDeparment { - eidtManCont["`company`"] = companyId - eidtManCont["`maindeparment`"] = departmentId - eidtManCont["`sun_main_deparment`"] = sunDepartId + if companyId != 0 { + eidtManCont["`company`"] = companyId + } + if departmentId != 0 { + eidtManCont["`maindeparment`"] = departmentId + } + if sunDepartId != 0 { + eidtManCont["`sun_main_deparment`"] = sunDepartId + } + if companyId != 0 || departmentId != 0 || sunDepartId != 0 { + changeRecordTrue = true + } + } + if orgMainDepart.Id != 0 && orgMainDepart.Id != perArcInfo.AdminOrg { eidtManCont["`admin_org`"] = orgMainDepart.Id changeRecordTrue = true } - manChangeRecord.Company = companyId - manChangeRecord.MainDepartment = departmentId + if companyId != 0 { + manChangeRecord.Company = companyId + } + if departmentId != 0 { + manChangeRecord.MainDepartment = departmentId + } // manChangeRecord.SunMainDeparment = sunDepartId - manChangeRecord.Adminorg = orgMainDepart.Id + if orgMainDepart.Id != 0 { + manChangeRecord.Adminorg = orgMainDepart.Id + } + } } //部门 @@ -191,14 +210,17 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe } for _, dv := range manCont.Department { - var orgMainDepartAry models.AdministrativeOrganization - orgErr := orgMainDepartAry.GetCont(map[string]interface{}{"kingdeeid": dv}, "`id`") - if orgErr == nil { - orgIdStr := strconv.FormatInt(orgMainDepartAry.Id, 10) - if overallhandle.StringIsInMap(orgIdStr, departId) == false { - departId = append(departId, orgIdStr) + if dv != "" || dv != "0" { + var orgMainDepartAry models.AdministrativeOrganization + orgErr := orgMainDepartAry.GetCont(map[string]interface{}{"kingdeeid": dv}, "`id`") + if orgErr == nil && orgMainDepartAry.Id != 0 { + orgIdStr := strconv.FormatInt(orgMainDepartAry.Id, 10) + if overallhandle.StringIsInMap(orgIdStr, departId) == false { + departId = append(departId, orgIdStr) + } } } + } oldDepart := strings.Split(perArcInfo.Deparment, ",") chaJiDepart := overallhandle.DifferenceSet[string](departId, oldDepart) @@ -226,7 +248,7 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe if manCont.Position != "" { var positionCont models.Position positErr := positionCont.GetCont(map[string]interface{}{`kingdeeid`: manCont.Position}, "`id`") - if positErr == nil { + if positErr == nil && positionCont.Id != 0 { if positionCont.Id != perArcInfo.Position { eidtManCont["`position`"] = positionCont.Id changeRecordTrue = true @@ -238,7 +260,7 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe if manCont.JobName != "" { var dutiesCont models.DutiesClassLeve dutiesErr := dutiesCont.GetCont(map[string]interface{}{"`d_king`": manCont.JobName}, "d_id") - if dutiesErr == nil { + if dutiesErr == nil && dutiesCont.Id != 0 { if dutiesCont.Id != perArcInfo.Position { eidtManCont["`job_id`"] = dutiesCont.Id @@ -261,6 +283,154 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe manChangeRecord.JobLevel = positionGrade changeRecordTrue = true } + } else { + + if perArcInfo.ExcelTemplate != 296 { + //公司 + if manCont.Company != "" { + var orgCompany models.AdministrativeOrganization + orgErr := orgCompany.GetCont(map[string]interface{}{"kingdeeid": manCont.Company}, "`id`") + if orgErr == nil && orgCompany.Id != 0 { + if orgCompany.Id != perArcInfo.Company { + eidtManCont["`company`"] = orgCompany.Id + changeRecordTrue = true + } + manChangeRecord.Company = orgCompany.Id + } + } + //主部门 + if manCont.MainDepartment != "" { + var orgMainDepart models.AdministrativeOrganization + orgErr := orgMainDepart.GetCont(map[string]interface{}{"kingdeeid": manCont.MainDepartment}, "`id`") + if orgErr == nil { + + _, companyId, departmentId, sunDepartId, _ := overallhandle.GetOrgStructure(orgMainDepart.Id) + // if manMainCont.Company == 0 { + // manMainCont.Company = companyId + // } + + // manMainCont.MainDeparment = departmentId + // manMainCont.SunMainDeparment = sunDepartId + // manMainCont.AdminOrg = orgMainDepart.Id + + if departmentId != perArcInfo.MainDeparment { + if companyId != 0 { + eidtManCont["`company`"] = companyId + } + if departmentId != 0 { + eidtManCont["`maindeparment`"] = departmentId + } + if sunDepartId != 0 { + eidtManCont["`sun_main_deparment`"] = sunDepartId + } + if companyId != 0 || departmentId != 0 || sunDepartId != 0 { + changeRecordTrue = true + } + } + if orgMainDepart.Id != 0 && orgMainDepart.Id != perArcInfo.AdminOrg { + eidtManCont["`admin_org`"] = orgMainDepart.Id + changeRecordTrue = true + } + if companyId != 0 { + manChangeRecord.Company = companyId + } + if departmentId != 0 { + manChangeRecord.MainDepartment = departmentId + } + // manChangeRecord.SunMainDeparment = sunDepartId + if orgMainDepart.Id != 0 { + manChangeRecord.Adminorg = orgMainDepart.Id + } + + } + } + //部门 + if len(manCont.Department) > 0 { + var departId []string + + if manCont.MainDepartment != "" { + if overallhandle.IsInTrue[string](manCont.MainDepartment, manCont.Department) == false { + manCont.Department = append(manCont.Department, manCont.MainDepartment) + } + } + + for _, dv := range manCont.Department { + if dv != "" || dv != "0" { + var orgMainDepartAry models.AdministrativeOrganization + orgErr := orgMainDepartAry.GetCont(map[string]interface{}{"kingdeeid": dv}, "`id`") + if orgErr == nil && orgMainDepartAry.Id != 0 { + orgIdStr := strconv.FormatInt(orgMainDepartAry.Id, 10) + if overallhandle.StringIsInMap(orgIdStr, departId) == false { + departId = append(departId, orgIdStr) + } + } + } + + } + oldDepart := strings.Split(perArcInfo.Deparment, ",") + chaJiDepart := overallhandle.DifferenceSet[string](departId, oldDepart) + if len(chaJiDepart) > 0 { + departIdStr := strings.Join(departId, ",") + eidtManCont["`deparment`"] = departIdStr + manChangeRecord.Department = departIdStr + changeRecordTrue = true + } + + } + //行政组织 + // if manCont.AdminOrg != "" { + // var orgMainDepartAdmin models.AdministrativeOrganization + // orgErr := orgMainDepartAdmin.GetCont(map[string]interface{}{"kingdeeid": manCont.AdminOrg}, "`id`") + // if orgErr == nil { + // if orgMainDepartAdmin.Id != perArcInfo.AdminOrg { + // eidtManCont["`admin_org`"] = orgMainDepartAdmin.Id + // changeRecordTrue = true + // } + // manChangeRecord.Adminorg = orgMainDepartAdmin.Id + // } + // } + //职位 + if manCont.Position != "" { + var positionCont models.Position + positErr := positionCont.GetCont(map[string]interface{}{`kingdeeid`: manCont.Position}, "`id`") + if positErr == nil && positionCont.Id != 0 { + if positionCont.Id != perArcInfo.Position { + eidtManCont["`position`"] = positionCont.Id + changeRecordTrue = true + } + manChangeRecord.Position = positionCont.Id + } + } + //职务 + if manCont.JobName != "" { + var dutiesCont models.DutiesClassLeve + dutiesErr := dutiesCont.GetCont(map[string]interface{}{"`d_king`": manCont.JobName}, "d_id") + if dutiesErr == nil && dutiesCont.Id != 0 { + + if dutiesCont.Id != perArcInfo.Position { + eidtManCont["`job_id`"] = dutiesCont.Id + changeRecordTrue = true + } + + if dutiesCont.ClassId != perArcInfo.JobClass { + eidtManCont["`job_class`"] = dutiesCont.ClassId + changeRecordTrue = true + } + manChangeRecord.JobId = dutiesCont.Id + manChangeRecord.JobClass = dutiesCont.ClassId + } + } + if manCont.PositionGrade != "" { + positionGrade, _ := overallhandle.StringToInt64(manCont.PositionGrade) + if positionGrade != perArcInfo.JobLeve { + eidtManCont["`job_leve`"] = positionGrade + } + manChangeRecord.JobLevel = positionGrade + changeRecordTrue = true + } + } else { + overallhandle.WriteLog("write", "信息已通过电子表格导入!") + } } // fmt.Printf("第一学历--->%v--->%v\n", changeRecordTrue, manChangeRecord) if len(eidtManCont) > 0 { @@ -311,9 +481,15 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe // go editInsideWorkHistoryMan(perArcInfo.Key, manCont.InsideWorkHistory) // go editInsideWorkHistoryManNew(perArcInfo.Key, manCont.InsideWorkHistory) go EditWithinGroupWorkLog(perArcInfo.Key, manCont.InsideWorkHistory) - synPro.Wait() + + } + //编辑员工任职关系 + if len(manCont.InsideWorkHistory) > 0 { + synPro.Add(1) + go SaveUserOfOrg(perArcInfo.Key, manCont.InsideWorkHistory) } + synPro.Wait() return nil } @@ -519,6 +695,11 @@ func newAddManContJinDie(oldSchool models.WorkMan, manCont addKingdeePersonneles // go editInsideWorkHistoryMan(manKeyNum, manCont.InsideWorkHistory) // go editInsideWorkHistoryManNew(manKeyNum, manCont.InsideWorkHistory) go EditWithinGroupWorkLog(manKeyNum, manCont.InsideWorkHistory) + //编辑员工任职关系 + if len(manCont.InsideWorkHistory) > 0 { + synPro.Add(1) + go SaveUserOfOrg(manKeyNum, manCont.InsideWorkHistory) + } synPro.Wait() } return nil diff --git a/api/version1/personnelapi/mancont.go b/api/version1/personnelapi/mancont.go index 2906fb2..57dd398 100644 --- a/api/version1/personnelapi/mancont.go +++ b/api/version1/personnelapi/mancont.go @@ -125,17 +125,31 @@ func (s *StaffApi) EditManOrgCont(c *gin.Context) { saveData["responsible_department_json"] = "" } if requestData.PersonInCharge == 1 { - if len(requestData.Resallorg) > 0 { - var orgResList []string - for i := 0; i < len(requestData.Resallorg); i++ { - resAllOrgIdStr := strconv.Itoa(requestData.Resallorg[i]) - if overallhandle.IsInTrue[string](resAllOrgIdStr, orgResList) == false { - orgResList = append(orgResList, resAllOrgIdStr) + // if len(requestData.Resallorg) > 0 { + // var orgResList []string + // for i := 0; i < len(requestData.Resallorg); i++ { + // resAllOrgIdStr := strconv.Itoa(requestData.Resallorg[i]) + // if overallhandle.IsInTrue[string](resAllOrgIdStr, orgResList) == false { + // orgResList = append(orgResList, resAllOrgIdStr) + // } + // } + // orgResListStr := strings.Join(orgResList, ",") + // saveData["responsible_department"] = orgResListStr + // } + var orgAry []string + if len(requestData.OrgresList) > 0 { + for _, v := range requestData.OrgresList { + for _, ov := range v { + resOrgIdVStr := strconv.Itoa(ov) + if overallhandle.IsInTrue[string](resOrgIdVStr, orgAry) == false { + orgAry = append(orgAry, resOrgIdVStr) + } } } - orgResListStr := strings.Join(orgResList, ",") + orgResListStr := strings.Join(orgAry, ",") saveData["responsible_department"] = orgResListStr } + } else { saveData["responsible_department"] = "" } @@ -254,6 +268,9 @@ func (s *StaffApi) EditManMainCont(c *gin.Context) { } editTime := time.Now().Unix() saveMainDate := overallhandle.MapOut() + if requestData.Name != "" && requestData.Name != myCont.Name { + saveMainDate["`name`"] = requestData.Name + } //绑定微信 if requestData.Wechat != "" && requestData.Wechat != myCont.Wechat { saveMainDate["`wechat`"] = requestData.Wechat } //绑定微信 @@ -402,3 +419,205 @@ func (s *StaffApi) EditManMainCont(c *gin.Context) { overallhandle.Result(0, err, c) } + +/* +* +@ 作者: 秦东 +@ 时间: 2024-03-28 09:03:52 +@ 功能: 人员定位信息(简略) +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) PersonnelPositioning(c *gin.Context) { + var requestData overallhandle.ConstId + c.ShouldBindJSON(&requestData) + + peopleUrl := "http://172.20.2.156:8084/HXGK/open/information/getRealGps.do" + postString := overallhandle.CurlPostJosn(peopleUrl, []byte("")) + var postCallBack DingWeiData + json.Unmarshal(postString, &postCallBack) + postCallBack.Total = len(postCallBack.Data) + noSend := []string{"300010", "300043", "202471", "302535", "200001", "200005", "200009", "200003", "200010", "201542", "200008", "200019", "200012"} + + var sendPeopleList []DingWeiInfo + + if len(postCallBack.Data) > 0 { + for i, v := range postCallBack.Data { + if !overallhandle.IsInTrue[string](v.EmpNo, noSend) { + postCallBack.Data[i].UserName = v.EmpName + if v.EmpNo != "" && v.EmpNo != "null" { + var manErr error + var manInfo models.ManCont + switch requestData.Id { + case "224": + manErr = manInfo.GetCont(map[string]interface{}{"`number`": v.EmpNo, "`company`": requestData.Id}, "`name`", "`key`", "`mobilephone`") + postCallBack.Data[i].UserOrgName = "恒信中碳氢能源科技(山东)有限公司" + if manErr == nil { + var sendPeople DingWeiInfo + sendPeople.DateTime = v.DateTime //dateTime"` + sendPeople.Area = v.Area //area"` + sendPeople.FactoryId = v.FactoryId //factoryId"` + sendPeople.Latitude = v.Latitude //latitude"` + sendPeople.FactoryName = v.FactoryName //factoryName"` + sendPeople.DeviceNo = v.DeviceNo //deviceNo"` + sendPeople.EmpNo = v.EmpNo //empNo"` + sendPeople.IsOffLine = v.IsOffLine //isOffLine"` + sendPeople.Layer = v.Layer //layer"` + sendPeople.CrossX = v.CrossX //crossX"` + sendPeople.CrossY = v.CrossY //crossY"` + sendPeople.Specifictype = v.Specifictype //specifictype"` + sendPeople.EmpName = v.EmpName //empName"` + sendPeople.Longitude = v.Longitude //longitude"` + + sendPeople.UserCode = strconv.FormatInt(manInfo.Key, 10) + sendPeople.UserName = manInfo.Name + if manInfo.Mobilephone != "" { + sendPeople.UserPhone = overallhandle.MaskPhone(manInfo.Mobilephone) + } + + switch v.Specifictype { //人员类型 + case "1": + sendPeople.UserType = "临时访客" + case "2": + sendPeople.UserType = "承包商员工" + case "3": + sendPeople.UserType = "临时访客" + case "4": + sendPeople.UserType = "临时访客" + case "5": + sendPeople.UserType = "临时访客" + default: + sendPeople.UserType = "在职职工" + } + sendPeople.UserOrgCode = "91370921MA94AF5H3N" //userOrgCode"` //所属单位唯一标志 + sendPeople.UserOrgName = "恒信中碳氢能源科技(山东)有限公司" //userOrgName"` //所属单位名称 + sendPeople.Cardld = v.DeviceNo //cardld"` //绑定设备唯一编码 + sendPeopleList = append(sendPeopleList, sendPeople) + } + case "309": + manErr = manInfo.GetCont(map[string]interface{}{"`number`": v.EmpNo, "`company`": requestData.Id}, "`name`", "`key`", "`mobilephone`") + postCallBack.Data[i].UserOrgName = "恒信中碳氢能源科技(山东)有限公司" + if manErr == nil { + var sendPeople DingWeiInfo + sendPeople.DateTime = v.DateTime //dateTime"` + sendPeople.Area = v.Area //area"` + sendPeople.FactoryId = v.FactoryId //factoryId"` + sendPeople.Latitude = v.Latitude //latitude"` + sendPeople.FactoryName = v.FactoryName //factoryName"` + sendPeople.DeviceNo = v.DeviceNo //deviceNo"` + sendPeople.EmpNo = v.EmpNo //empNo"` + sendPeople.IsOffLine = v.IsOffLine //isOffLine"` + sendPeople.Layer = v.Layer //layer"` + sendPeople.CrossX = v.CrossX //crossX"` + sendPeople.CrossY = v.CrossY //crossY"` + sendPeople.Specifictype = v.Specifictype //specifictype"` + sendPeople.EmpName = v.EmpName //empName"` + sendPeople.Longitude = v.Longitude //longitude"` + + sendPeople.UserCode = strconv.FormatInt(manInfo.Key, 10) + sendPeople.UserName = manInfo.Name + if manInfo.Mobilephone != "" { + sendPeople.UserPhone = overallhandle.MaskPhone(manInfo.Mobilephone) + } + + switch v.Specifictype { //人员类型 + case "1": + sendPeople.UserType = "临时访客" + case "2": + sendPeople.UserType = "承包商员工" + case "3": + sendPeople.UserType = "临时访客" + case "4": + sendPeople.UserType = "临时访客" + case "5": + sendPeople.UserType = "临时访客" + default: + sendPeople.UserType = "在职职工" + } + sendPeople.UserOrgCode = "91370921MA94AF5H3N" //userOrgCode"` //所属单位唯一标志 + sendPeople.UserOrgName = "恒信中碳氢能源科技(山东)有限公司" //userOrgName"` //所属单位名称 + sendPeople.Cardld = v.DeviceNo //cardld"` //绑定设备唯一编码 + sendPeopleList = append(sendPeopleList, sendPeople) + } + default: + manErr = manInfo.GetCont(map[string]interface{}{"`number`": v.EmpNo}, "`name`", "`key`", "`mobilephone`") + postCallBack.Data[i].UserOrgName = "山东恒信高科能源有限公司" + if manErr == nil { + var sendPeople DingWeiInfo + sendPeople.DateTime = v.DateTime //dateTime"` + sendPeople.Area = v.Area //area"` + sendPeople.FactoryId = v.FactoryId //factoryId"` + sendPeople.Latitude = v.Latitude //latitude"` + sendPeople.FactoryName = v.FactoryName //factoryName"` + sendPeople.DeviceNo = v.DeviceNo //deviceNo"` + sendPeople.EmpNo = v.EmpNo //empNo"` + sendPeople.IsOffLine = v.IsOffLine //isOffLine"` + sendPeople.Layer = v.Layer //layer"` + sendPeople.CrossX = v.CrossX //crossX"` + sendPeople.CrossY = v.CrossY //crossY"` + sendPeople.Specifictype = v.Specifictype //specifictype"` + sendPeople.EmpName = v.EmpName //empName"` + sendPeople.Longitude = v.Longitude //longitude"` + + sendPeople.UserCode = strconv.FormatInt(manInfo.Key, 10) + sendPeople.UserName = manInfo.Name + if manInfo.Mobilephone != "" { + sendPeople.UserPhone = overallhandle.MaskPhone(manInfo.Mobilephone) + } + + switch v.Specifictype { //人员类型 + case "1": + sendPeople.UserType = "临时访客" + case "2": + sendPeople.UserType = "承包商员工" + case "3": + sendPeople.UserType = "临时访客" + case "4": + sendPeople.UserType = "临时访客" + case "5": + sendPeople.UserType = "临时访客" + default: + sendPeople.UserType = "在职职工" + } + sendPeople.UserOrgCode = "91370921328482832M" //userOrgCode"` //所属单位唯一标志 + sendPeople.UserOrgName = "山东恒信高科能源有限公司" //userOrgName"` //所属单位名称 + sendPeople.Cardld = v.DeviceNo //cardld"` //绑定设备唯一编码 + sendPeopleList = append(sendPeopleList, sendPeople) + } + } + + } else { + postCallBack.Data[i].UserCode = v.DeviceNo + } + switch v.Specifictype { + case "1": + postCallBack.Data[i].UserType = "临时访客" + case "2": + postCallBack.Data[i].UserType = "承包商员工" + case "3": + postCallBack.Data[i].UserType = "临时访客" + case "4": + postCallBack.Data[i].UserType = "临时访客" + case "5": + postCallBack.Data[i].UserType = "临时访客" + default: + postCallBack.Data[i].UserType = "在职职工" + } + postCallBack.Data[i].UserOrgCode = "91370921328482832M" + + postCallBack.Data[i].Cardld = v.DeviceNo + } + } + } + overallhandle.Result(0, sendPeopleList, c) + // overallhandle.Result(0, postCallBack.Data, c) +} diff --git a/api/version1/personnelapi/orgUserRole.go b/api/version1/personnelapi/orgUserRole.go new file mode 100644 index 0000000..58dfc5e --- /dev/null +++ b/api/version1/personnelapi/orgUserRole.go @@ -0,0 +1,275 @@ +package personnelapi + +import ( + "hr_server/models" + "hr_server/models/hrmodels" + "hr_server/overall" + "hr_server/overall/overallhandle" + "sort" + "strconv" + + "github.com/gin-gonic/gin" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2024-05-24 13:55:03 +@ 功能: 根据行政组织ID获取当前行政组织人员及子行政组织 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) GainSunOrgAndUser(c *gin.Context) { + var requestData overallhandle.ConstId + err := c.ShouldBindJSON(&requestData) + if err != nil { + requestData.Id = "309" + } + if requestData.Id == "" { + requestData.Id = "309" + } + var sendInfo OrgGainPeopel + orgIdInt, _ := strconv.ParseInt(requestData.Id, 10, 64) + synPro.Add(1) + go sendInfo.GainAllFatherOrg(orgIdInt) + synPro.Add(1) + go sendInfo.GainOrgPeopel(orgIdInt) + synPro.Add(1) + go sendInfo.GainOrgSunOrgList(orgIdInt) + synPro.Wait() + var sendData SendOrgGainPeopel + sendData.OrgList = sendInfo.OrgList + sendData.OrgUserList = append(sendData.OrgUserList, sendInfo.SunOrgList...) + sendData.OrgUserList = append(sendData.OrgUserList, sendInfo.UserList...) + overallhandle.Result(0, sendData, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-05-24 14:33:28 +@ 功能: 获取当前行政组织直接子级行政组织 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (o *OrgGainPeopel) GainOrgSunOrgList(orgId int64) { + defer synPro.Done() + var orgList []models.AdministrativeOrganization + overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`,`name`").Where("`state` = 1 AND `superior` = ?", orgId).Find(&orgList) + if len(orgList) > 0 { + for _, v := range orgList { + var user UserOrgRole + user.Id = strconv.FormatInt(v.Id, 10) + user.Title = v.Name + user.Img = "" + user.IsPick = 2 + user.Types = 2 + o.SunOrgList = append(o.SunOrgList, user) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-05-24 14:23:46 +@ 功能: 获取当前行政组织下得人员信息 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (o *OrgGainPeopel) GainOrgPeopel(orgId int64) { + defer synPro.Done() + var prople []models.PersonArchives + err := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`key`,`number`,`name`,`icon`,`admin_org`,`icon_photo`").Where("`admin_org` = ? AND `emp_type` BETWEEN ? AND ? ", orgId, 1, 10).Find(&prople).Error + if err == nil && len(prople) > 0 { + for _, v := range prople { + var user UserOrgRole + user.Id = strconv.FormatInt(v.Key, 10) + user.Title = v.Name + user.Img = v.Icon + if v.IconPhoto != "" { + user.Img = v.IconPhoto + } + user.IsPick = 2 + user.Types = 1 + o.UserList = append(o.UserList, user) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-05-24 14:04:20 +@ 功能: 获取所有父级行政组织 +@ 参数 + + #orgId 行政组织ID + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (o *OrgGainPeopel) GainAllFatherOrg(orgId int64) { + defer synPro.Done() + var sunAry overallhandle.AllSunList[int64] + sunAry.GetAllParentOrg(orgId, 2) + sunAry.SunList = append(sunAry.SunList, orgId) + if len(sunAry.SunList) > 0 { + var orgList []hrmodels.OrgCont + err := overall.CONSTANT_DB_HR.Model(&hrmodels.OrgCont{}).Select("`id`,`name`,`level`").Where("`id` IN ?", sunAry.SunList).Find(&orgList).Error + if err == nil { + sort.Slice(orgList, func(i, j int) bool { + return orgList[i].Level < orgList[j].Level + }) + for _, v := range orgList { + var orgInfo OrgCrumb + orgInfo.Id = strconv.FormatInt(v.Id, 10) + orgInfo.Title = v.Name + o.OrgList = append(o.OrgList, orgInfo) + } + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-05-27 08:33:09 +@ 功能: 搜索行政组织及人员 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) SearchOrgUser(c *gin.Context) { + var requestData overallhandle.NameOverall + err := c.ShouldBindJSON(&requestData) + var sendData SendOrgGainPeopel + if err != nil { + overallhandle.Result(0, sendData, c) + return + } + if requestData.Name == "" { + overallhandle.Result(0, sendData, c) + return + } + var sendInfo OrgGainPeopel + synPro.Add(1) + go sendInfo.SearchOrgCont(requestData.Name) + synPro.Add(1) + go sendInfo.SearchPeopleCont(requestData.Name) + synPro.Wait() + sendData.OrgUserList = append(sendData.OrgUserList, sendInfo.SunOrgList...) + sendData.OrgUserList = append(sendData.OrgUserList, sendInfo.UserList...) + overallhandle.Result(0, sendData, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-05-27 08:51:49 +@ 功能: 搜索人员 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (o *OrgGainPeopel) SearchPeopleCont(name string) { + defer synPro.Done() + var prople []models.PersonArchives + err := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`key`,`number`,`name`,`icon`,`admin_org`,`icon_photo`").Where("(`name` Like ? OR `number` Like ?) AND `emp_type` BETWEEN ? AND ? ", "%"+name+"%", "%"+name+"%", 1, 10).Find(&prople).Error + if err == nil && len(prople) > 0 { + for _, v := range prople { + var user UserOrgRole + user.Id = strconv.FormatInt(v.Key, 10) + user.Title = v.Name + user.Img = v.Icon + if v.IconPhoto != "" { + user.Img = v.IconPhoto + } + user.IsPick = 2 + user.Types = 1 + o.UserList = append(o.UserList, user) + } + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-05-27 08:40:51 +@ 功能: 搜索行政组织名称 +@ 参数 + + #name 行政组织名称 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (o *OrgGainPeopel) SearchOrgCont(name string) { + defer synPro.Done() + var orgList []hrmodels.OrgCont + overall.CONSTANT_DB_HR.Model(&hrmodels.OrgCont{}).Select("`id`,`name`").Where("`state` = 1 AND level > 3 AND `name` LIKE ?", "%"+name+"%").Find(&orgList) + if len(orgList) > 0 { + for _, v := range orgList { + var user UserOrgRole + user.Id = strconv.FormatInt(v.Id, 10) + user.Title = v.Name + user.Img = "" + user.IsPick = 2 + user.Types = 2 + o.SunOrgList = append(o.SunOrgList, user) + } + } +} diff --git a/api/version1/personnelapi/rewardsPunishments.go b/api/version1/personnelapi/rewardsPunishments.go new file mode 100644 index 0000000..3d7aaad --- /dev/null +++ b/api/version1/personnelapi/rewardsPunishments.go @@ -0,0 +1,279 @@ +package personnelapi + +import ( + "hr_server/models" + "hr_server/overall" + "hr_server/overall/overallhandle" + "time" + + "github.com/gin-gonic/gin" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-04 08:43:33 +@ 功能: 奖惩记录 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) RewPunList(c *gin.Context) { + var requestData RewPunType + c.ShouldBindJSON(&requestData) + // err := c.ShouldBindJSON(&requestData) + // if err != nil { + // overallhandle.Result(100, requestData.Id, c) + // return + // } + if requestData.Id == "" { + overallhandle.Result(101, requestData.Id, c) + return + } + if requestData.Page < 0 { + requestData.Page = 1 + } + if requestData.PageSize < 0 { + requestData.PageSize = 10 + } + var list []SendRewPunInfo + gormDb := overall.CONSTANT_DB_HR.Model(&models.RewardsPenalties{}).Where("`state` = 1 AND `userkey` = ?", requestData.Id) + if requestData.State != 0 { + if requestData.State == 1 { + gormDb = gormDb.Where("`types` = ?", 1) + } else { + gormDb = gormDb.Where("`types` = ?", 2) + } + } + var total int64 + totalErr := gormDb.Count(&total).Error + if totalErr != nil { + total = 0 + } + gormDb = overallhandle.PageTurningSettings(gormDb, requestData.Page, requestData.PageSize) + err := gormDb.Order("`years` DESC").Order("`months` ASC").Order("`id` DESC").Find(&list).Error + if err != nil { + overallhandle.Result(107, requestData.Id, c) + return + } + for i, v := range list { + list[i].TimedataStr = overallhandle.UnixTimeToDay(v.TimeData, 14) + list[i].LevelName = overallhandle.RewPunLevel(v.Level) + list[i].RewPunClassName = overallhandle.RewPunLevelClass(v.RewPunClass) + } + overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(list)), list, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-04 09:24:59 +@ 功能: 绩效考核成绩 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) AssessmentRecords(c *gin.Context) { + var requestData RewPunType + c.ShouldBindJSON(&requestData) + if requestData.Id == "" { + overallhandle.Result(101, requestData.Id, c) + return + } + if requestData.Page < 0 { + requestData.Page = 1 + } + if requestData.PageSize < 0 { + requestData.PageSize = 10 + } + var list []SendMeritslog + gormDb := overall.CONSTANT_DB_HR.Model(&models.Meritslog{}).Where("`userkey` = ?", requestData.Id) + if requestData.State != 0 { + if requestData.State == 1 { + gormDb = gormDb.Where("`status` = ?", 1) + } else { + gormDb = gormDb.Where("`status` = ?", 2) + } + } + var total int64 + totalErr := gormDb.Count(&total).Error + if totalErr != nil { + total = 0 + } + gormDb = overallhandle.PageTurningSettings(gormDb, requestData.Page, requestData.PageSize) + err := gormDb.Order("`years` DESC").Order("`months` ASC").Order("`id` DESC").Find(&list).Error + if err != nil { + overallhandle.Result(107, requestData.Id, c) + return + } + for i, v := range list { + list[i].TimedataStr = overallhandle.UnixTimeToDay(v.TimeData, 14) + } + overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(list)), list, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-04 13:18:47 +@ 功能: 员工关系 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) PeopleEmploymentRelationship(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 + } + var myInfo models.PersonnelContent + err = myInfo.GetCont(map[string]interface{}{"`key`": requestData.Id}, "`channel`", "`entrydate`", "`jobstartdate`") + if err != nil { + overallhandle.Result(107, err, c) + return + } + + var sendInfo SendSheHuiGuanxi + sendInfo.Channel = overallhandle.JoinJobChanelStr(myInfo.Channel) + sendInfo.Jobstartdate = overallhandle.UnixTimeToDay(myInfo.Jobstartdate, 14) + sendInfo.Entrydate = overallhandle.UnixTimeToDay(myInfo.Entrydate, 14) + + cruTime := time.Now().Unix() + sendInfo.SheHuiGongli, _ = overallhandle.CalculateYearDifference(myInfo.Jobstartdate, cruTime, 0) + sendInfo.JiTuanGongli, _ = overallhandle.CalculateYearDifference(myInfo.Entrydate, cruTime, 0) + overallhandle.Result(0, sendInfo, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-04 15:20:34 +@ 功能: 职称列表 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) PeopleTitle(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 + } + var list []SendAcademicTitle + err = overall.CONSTANT_DB_HR.Model(&models.AcademicTitle{}).Where("`userKey` = ?", requestData.Id).Order("`time` DESC").Order("`id` DESC").Find(&list).Error + if err != nil { + overallhandle.Result(107, err, c) + return + } + for i, v := range list { + list[i].TimeStr = overallhandle.UnixTimeToDay(v.Time, 14) + } + overallhandle.Result(0, list, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-04 15:27:05 +@ 功能: 荣誉 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) PeopleHonor(c *gin.Context) { + var requestData HonorsType + c.ShouldBindJSON(&requestData) + if requestData.Id == "" { + overallhandle.Result(101, requestData.Id, c) + return + } + if requestData.Page < 0 { + requestData.Page = 1 + } + if requestData.PageSize < 0 { + requestData.PageSize = 10 + } + var list []SendCertificateHonors + gormDb := overall.CONSTANT_DB_HR.Model(&models.CertificateHonors{}).Where("`userkey` = ?", requestData.Id) + if requestData.State != 0 { + if requestData.State == 1 { + gormDb = gormDb.Where("`state` = ?", 1) + } else { + gormDb = gormDb.Where("`state` = ?", 2) + } + } + if requestData.Types != 0 { + gormDb = gormDb.Where("`types` = ?", requestData.Types) + } + var total int64 + totalErr := gormDb.Count(&total).Error + if totalErr != nil { + total = 0 + } + gormDb = overallhandle.PageTurningSettings(gormDb, requestData.Page, requestData.PageSize) + err := gormDb.Order("`years` DESC").Order("`months` ASC").Order("`id` DESC").Find(&list).Error + if err != nil { + overallhandle.Result(107, requestData.Id, c) + return + } + for i, v := range list { + if v.TimeData != 0 { + list[i].TimeDataStr = overallhandle.UnixTimeToDay(v.TimeData, 14) + } + if v.EndTime != 0 { + list[i].EndTimeStr = overallhandle.UnixTimeToDay(v.EndTime, 14) + } + } + overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(list)), list, c) +} diff --git a/api/version1/personnelapi/staff.go b/api/version1/personnelapi/staff.go index 6897790..3898852 100644 --- a/api/version1/personnelapi/staff.go +++ b/api/version1/personnelapi/staff.go @@ -63,9 +63,9 @@ func (s *StaffApi) StaffList(c *gin.Context) { gormDb = gormDb.Where("`position` = ?", requestData.Position) sqlStr = fmt.Sprintf("%v AND `position` = %v", sqlStr, requestData.Position) } - if requestData.EmpType != 0 { - gormDb = gormDb.Where("`emp_type` = ?", requestData.EmpType) - sqlStr = fmt.Sprintf("%v AND `emp_type` = %v", sqlStr, requestData.EmpType) + if len(requestData.EmpType) > 0 { + gormDb = gormDb.Where("`emp_type` IN ?", requestData.EmpType) + sqlStr = fmt.Sprintf("%v AND `emp_type` IN %v", sqlStr, requestData.EmpType) } else { // gormDb = gormDb.Where("`emp_type` IN ?", overall.EmployeeStatusIng) gormDb = gormDb.Where("`emp_type` BETWEEN ? AND ?", 1, 10) @@ -85,6 +85,10 @@ func (s *StaffApi) StaffList(c *gin.Context) { gormDb = gormDb.Where("FIND_IN_SET(?,`role`)", requestData.Role) sqlStr = fmt.Sprintf("%v AND FIND_IN_SET(%v,`role`)", sqlStr, requestData.Role) } + if requestData.Teamid != 0 { + gormDb = gormDb.Where("`teamid` = ?", requestData.Teamid) + sqlStr = fmt.Sprintf("%v AND `teamid` = ?", sqlStr, requestData.Teamid) + } gormDb = gormDb.Where("`state` = 1") var total int64 totalErr := gormDb.Count(&total).Error @@ -1469,6 +1473,15 @@ func (s *StaffApi) EditPassWord(c *gin.Context) { overallhandle.Result(1, err, c, "修改失败!") return } + var waiHr models.PersonArchives + err = overall.CONSTANT_HRSERVER_DATABASE.Where("`key` = ?", requestData.Id).Find(&waiHr).Error + if err != nil { + var neiHr models.PersonArchives + neiHr.GetCont(whereAry) + overall.CONSTANT_HRSERVER_DATABASE.Create(&neiHr) + } else { + overall.CONSTANT_HRSERVER_DATABASE.Model(&waiHr).Where(whereAry).Updates(saveDate) + } overallhandle.Result(0, err, c, "修改成功!") } diff --git a/api/version1/personnelapi/staffarchives.go b/api/version1/personnelapi/staffarchives.go index bbd471f..7f6219b 100644 --- a/api/version1/personnelapi/staffarchives.go +++ b/api/version1/personnelapi/staffarchives.go @@ -3,11 +3,16 @@ package personnelapi import ( "encoding/json" "fmt" + datacenter "hr_server/api/version1/dataCenter" "hr_server/grocerystore" "hr_server/models" + "hr_server/models/customerForm" + personalitycolor "hr_server/models/personalityColor" "hr_server/models/workgroup" "hr_server/overall" "hr_server/overall/overallhandle" + "regexp" + "sort" "strconv" "strings" "time" @@ -58,15 +63,17 @@ func (s *StaffApi) ArchivesList(c *gin.Context) { if requestData.Position != 0 { gormDb = gormDb.Where("position = ?", requestData.Position) } - if requestData.EmpType != 0 { - gormDb = gormDb.Where("emp_type = ?", requestData.EmpType) + if len(requestData.EmpType) > 0 { + gormDb = gormDb.Where("emp_type IN ?", requestData.EmpType) } else { gormDb = gormDb.Where("emp_type BETWEEN ? AND ?", 1, 10) } if requestData.Role != "" { gormDb = gormDb.Where("FIND_IN_SET(?,`role`)", requestData.Role) } - + if requestData.Teamid != 0 { + gormDb = gormDb.Where("`teamid` = ?", requestData.Teamid) + } var total int64 totalErr := gormDb.Count(&total).Error if totalErr != nil { @@ -1315,6 +1322,13 @@ func getGroupWorkHistoryList(key int64) (workHisList []insideHistory) { if workHisContListErr == nil { for _, v := range workHisContList { var workCont insideHistory + workCont.Bdlx = v.Bdlx + workCont.Gsmc = v.Gsmc + workCont.Yjbm = v.Yjbm + workCont.Ejbm = v.Ejbm + workCont.Gongduan = v.Gongduan + workCont.Dengji = v.Dengji + workCont.Zhiwei = v.Zhiwei if v.Group != 0 { var groupInfo models.AdministrativeOrganization groupInfo.GetCont(map[string]interface{}{"`id`": v.Group}, "`name`") @@ -1732,7 +1746,18 @@ func (s *StaffApi) PersonnelEducationList(c *gin.Context) { } else { cont.GraduationTimeStr = "至今" } - + // xueXiaoType := overallhandle.EducationTypeAll(int64(v.SchoolType)) + if v.YuanXiaoLeiXing != "" { + cont.YuanXiaoLeiXing = v.YuanXiaoLeiXing + } else { + cont.YuanXiaoLeiXing = overallhandle.EducationTypeAll(int64(v.SchoolType)) + } + cont.CollegeFaction = v.CollegeFaction + if v.XueLiLeixing != "" { + cont.XueLiLeixing = v.XueLiLeixing + } else { + cont.XueLiLeixing = overallhandle.EducationTypeAll(int64(v.EducationType)) + } list = append(list, cont) } overallhandle.Result(0, list, c) @@ -2060,15 +2085,17 @@ func (s *StaffApi) ArchivesListExporCsv(c *gin.Context) { if requestData.Position != 0 { gormDb = gormDb.Where("position = ?", requestData.Position) } - if requestData.EmpType != 0 { - gormDb = gormDb.Where("emp_type = ?", requestData.EmpType) + if len(requestData.EmpType) > 0 { + gormDb = gormDb.Where("emp_type IN ?", requestData.EmpType) } else { gormDb = gormDb.Where("emp_type BETWEEN ? AND ?", 1, 10) } if requestData.Role != "" { gormDb = gormDb.Where("FIND_IN_SET(?,`role`)", requestData.Role) } - + if requestData.Teamid != 0 { + gormDb = gormDb.Where("`teamid` = ?", requestData.Teamid) + } var total int64 totalErr := gormDb.Count(&total).Error if totalErr != nil { @@ -2296,14 +2323,62 @@ func (s *StaffApi) GetArchivesCon(c *gin.Context) { } staffCenter.PoliticalOutlookName = overallhandle.PolitiToString(satffCont.PoliticalOutlook) - var ruleCont workgroup.WorkTimeType - ruleCont.GetCont(map[string]interface{}{"`id`": satffCont.Ruleid}, "`name`") - staffCenter.RuleId = strconv.FormatInt(satffCont.Ruleid, 10) - staffCenter.RuleName = ruleCont.Name + if satffCont.Ruleid != 0 { + var ruleCont workgroup.WorkTimeType + 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) + json.Unmarshal([]byte(satffCont.ResponsibleDepartmentJson), &staffCenter.OrgresList) + // jsonErr := json.Unmarshal([]byte(satffCont.ResponsibleDepartmentJson), &staffCenter.OrgresList) + // fmt.Printf("satffCont---------->%v---------->%v---------->%v\n", satffCont.ResponsibleDepartmentJson, satffCont, jsonErr) + } + + var personalityTest []personalitycolor.Charcolortest + overall.CONSTANT_Personality_Color.Where("`c_states` = 1 AND `c_number` = ?", satffCont.Number).Find(&personalityTest) + + if len(personalityTest) > 0 { + rongXin := false + gaoKe := false + for _, v := range personalityTest { + if v.Class == 10000002 { + rongXin = true + } + if v.Class == 10000001 { + gaoKe = true + } + } + if rongXin && gaoKe { + staffCenter.IsColorTrue = 4 + } else if rongXin { + staffCenter.IsColorTrue = 3 + } else { + staffCenter.IsColorTrue = 1 + } + } else { + + if satffCont.ExcelTemplate == 296 { + var rcpdInfo models.TalentInventory + err := rcpdInfo.GetCont(map[string]interface{}{"`userKey`": satffCont.Key}, "`userTypes`") + fmt.Printf("获取聪哥---------->%v\n", rcpdInfo) + if err != nil { + staffCenter.IsColorTrue = 2 + } else { + if rcpdInfo.UserTypes != "" { + staffCenter.IsColorTrue = 5 + staffCenter.UserTypes = rcpdInfo.UserTypes + } else { + staffCenter.IsColorTrue = 2 + } + } + + } else { + staffCenter.IsColorTrue = 2 + } + } overallhandle.Result(0, staffCenter, c) @@ -2418,10 +2493,13 @@ func (s *StaffApi) GetPeopleMainCont(c *gin.Context) { var manContEs models.PersonnelContent manContEs.GetCont(map[string]interface{}{"`key`": myCont.Key}, "`mobilephone`") myInfo.Tel = manContEs.Mobilephone - var ruleCont workgroup.WorkTimeType - ruleCont.GetCont(map[string]interface{}{"`id`": myCont.Ruleid}, "`name`") - myInfo.RuleId = strconv.FormatInt(myCont.Ruleid, 10) - myInfo.RuleName = ruleCont.Name + if myCont.Ruleid != 0 { + var ruleCont workgroup.WorkTimeType + ruleCont.GetCont(map[string]interface{}{"`id`": myCont.Ruleid}, "`name`") + myInfo.RuleId = strconv.FormatInt(myCont.Ruleid, 10) + myInfo.RuleName = ruleCont.Name + } + overallhandle.Result(0, myInfo, c) } @@ -2544,6 +2622,19 @@ func (s *StaffApi) GetInsideWorkHistoryList(c *gin.Context) { // snedCont.SuperiorPostName string //上级职务名称 // snedCont.SuperiorManName []string //上级人员 // snedCont.SubordinatesCount int //下属熟练 + snedCont.ChangeReason = v.ChangeReason + snedCont.SuperiorPostName = v.SuperiorPosition + snedCont.SuperiorManName = v.SuperiorName + snedCont.SubordinatesCount = v.Subordinates + + snedCont.Bdlx = v.Bdlx + snedCont.Gsmc = v.Gsmc + snedCont.Yjbm = v.Yjbm + snedCont.Ejbm = v.Ejbm + snedCont.Gongduan = v.Gongduan + snedCont.Dengji = v.Dengji + snedCont.Zhiwei = v.Zhiwei + sendData = append(sendData, snedCont) } overallhandle.Result(0, sendData, c) @@ -2810,9 +2901,12 @@ func (s *StaffApi) ArchivesListWai(c *gin.Context) { if requestData.PageSize < 0 { requestData.PageSize = 10 } + // overallhandle.Result(0, requestData, c) + // return // var staffList []models.ManCont // var staffList []models.PersonArchives - gormDb := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`").Where("state = 1 AND `number` NOT LIKE ?", "%W%") + // gormDb := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`").Where("state = 1 AND `number` NOT LIKE ?", "%W%") + gormDb := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`").Where("`number` NOT LIKE ?", "%W%") if requestData.Number != "" { gormDb = gormDb.Where("number LIKE ?", "%"+requestData.Number+"%") @@ -2829,16 +2923,70 @@ func (s *StaffApi) ArchivesListWai(c *gin.Context) { // if requestData.Deparment != "" { // gormDb = gormDb.Where("FIND_IN_SET(?,`deparment`)", requestData.Deparment) // } + var banZu []workgroup.TeamsRules + var ruleTypeId int64 + var ruleTypeName string if requestData.AdminOrg != 0 { // var idAry []int64 // idAry = overallhandle.GetDepartmentSun(requestData.AdminOrg, idAry) // idAry = append(idAry, requestData.AdminOrg) // gormDb = gormDb.Where("admin_org IN ?", idAry) + + //duo'yuan'h var sunAry overallhandle.AllSunList[int64] sunAry.GetAllSunOrg(requestData.AdminOrg) sunAry.SunList = append(sunAry.SunList, requestData.AdminOrg) gormDb = gormDb.Where("admin_org IN ?", sunAry.SunList) + if requestData.Days != "" { + menuCont, _, err := CureeRunRules(requestData.AdminOrg) + if err != nil { + overallhandle.Result(200, err, c, "此行政组织还未设定班组轮询规则!") + return + } + banZu, err = menuCont.CountOrgTeamsIsDay(requestData.Days) + // jsonVal, _ := json.Marshal(banZu) + // fmt.Printf("\n\n\n\n\n规则列表:\n %v\n\n\n\n", string(jsonVal)) + if err == nil { + var dayTeamsId []int64 + for _, v := range banZu { + if v.CycleWorkTime != 0 && !overallhandle.IsInTrue(v.TeamsId, dayTeamsId) { + dayTeamsId = append(dayTeamsId, v.TeamsId) + } + ruleTypeId = v.RuleTypeId + ruleTypeName = v.RuleTypeName + } + if requestData.Teamid != 0 { + if overallhandle.IsInTrue(requestData.Teamid, dayTeamsId) { + gormDb = gormDb.Where("teamid = ?", requestData.Teamid) + } else { + overallhandle.Result(200, err, c, "当天此行政组织内的此班组处于休息状态!") + return + } + + } else { + if len(dayTeamsId) > 0 { + dayTeamsId = append(dayTeamsId, 6) + gormDb = gormDb.Where("teamid IN ?", dayTeamsId) + } + + } + } else { + if requestData.Teamid != 0 { + gormDb = gormDb.Where("teamid = ?", requestData.Teamid) + } + } + + } else { + if requestData.Teamid != 0 { + gormDb = gormDb.Where("teamid = ?", requestData.Teamid) + } + } + + } else { + if requestData.Teamid != 0 { + gormDb = gormDb.Where("teamid = ?", requestData.Teamid) + } } if requestData.Position != 0 { gormDb = gormDb.Where("position = ?", requestData.Position) @@ -2848,13 +2996,15 @@ func (s *StaffApi) ArchivesListWai(c *gin.Context) { // } else { // gormDb = gormDb.Where("emp_type BETWEEN ? AND ?", 1, 10) // } - if requestData.EmpType != 0 { - gormDb = gormDb.Where("emp_type = ?", requestData.EmpType) + if len(requestData.EmpType) > 0 { + gormDb = gormDb.Where("emp_type IN ?", requestData.EmpType) } if requestData.Role != "" { gormDb = gormDb.Where("FIND_IN_SET(?,`role`)", requestData.Role) } - + // if requestData.Teamid != 0 { + // gormDb = gormDb.Where("teamid = ?", requestData.Teamid) + // } var total int64 totalErr := gormDb.Count(&total).Error if totalErr != nil { @@ -2869,12 +3019,21 @@ func (s *StaffApi) ArchivesListWai(c *gin.Context) { errGorm = overall.CONSTANT_DB_HR.Where("`id` IN ?", idAry).Find(&manContList).Error for _, v := range manContList { + + if requestData.Days != "" { + v = Shiftdjustment(requestData.Days, v) + // fmt.Printf("\n\n\n\n结果:%v\n\n\n\n", v) + } + var staffInfo peopleManOutList staffInfo.ManCont = v var getSpur models.Position getWhe := overallhandle.MapOut() - getWhe["id"] = v.Position - getSpur.GetCont(getWhe, "name", "person_in_charge") + if v.Position != 0 { + 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) @@ -2933,16 +3092,193 @@ func (s *StaffApi) ArchivesListWai(c *gin.Context) { } } + sendMap, _ := GetUesrOffice(v.Key) + staffInfo.OfficeList = sendMap positionAry = append(positionAry, staffInfo) } if errGorm != nil { overallhandle.Result(105, errGorm, c) } else { - overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c) + sendExpand := overallhandle.MapOut() + var sendRuleInfo DaysTeamsRuler + if len(banZu) > 0 { + sendRuleInfo.RuleTypeId = strconv.FormatInt(ruleTypeId, 10) + sendRuleInfo.RuleTypeName = ruleTypeName + + var workTimePer []workgroup.WorkingTimePeriod + overall.CONSTANT_DB_HR.Where("`type_id` = ?", ruleTypeId).Find(&workTimePer) + var teamRuleMap []DaysTeamsRulerInfo + if len(workTimePer) > 0 { + for _, v := range workTimePer { + for _, bv := range banZu { + if v.Id == bv.CycleWorkTime { + var teamRuleInfo DaysTeamsRulerInfo + teamRuleInfo.TeamsId = strconv.FormatInt(bv.TeamsId, 10) //生产班组ID + teamRuleInfo.TeamsName = bv.TeamsName //生产班组名称 + teamRuleInfo.RuleId = strconv.FormatInt(v.Id, 10) //规则ID + teamRuleInfo.RuleName = v.Name //规则名称 + teamRuleInfo.StartTime = v.StartTime //开始时间 + teamRuleInfo.EndTime = v.EndTime //结束时间 + teamRuleMap = append(teamRuleMap, teamRuleInfo) + } + } + } + } + sort.Slice(teamRuleMap, func(i, j int) bool { + return teamRuleMap[i].StartTime < teamRuleMap[j].StartTime + }) + sendRuleInfo.List = teamRuleMap + + } + sendExpand["ruler"] = sendRuleInfo + + overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c, sendExpand) } } +/* +* +@ 作者: 秦东 +@ 时间: 2025-02-17 14:18:25 +@ 功能: 调班计算 +@ 参数 + + #查询时间 + #当前人 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func Shiftdjustment(day string, use models.ManCont) (pick models.ManCont) { + if day == "" || use.Id == 0 { + return + } + var diaoIno customerForm.DiaoBanSetup + overall.CONSTANT_DB_AppPlatform.First(&diaoIno) + var wvTimeAll overallhandle.DateTimeTotimes + wvTimeAll.BaisStrToTimeLing(day) + taDay := wvTimeAll.AllTime * 1000 + // fmt.Printf("当前时间戳:%v\n:%v\n", wvTimeAll.AllTime, taDay) + + redisSqKey := fmt.Sprintf("%v_%v", use.Key, taDay) + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS5) + isTrue, tokenInfo := redisClient.Get(redisSqKey) + if isTrue { + json.Unmarshal([]byte(tokenInfo), &pick) + } else { + var hbsqCont customerForm.HuanBanShenQing + if diaoIno.Id != 0 && diaoIno.Source == "yes" { + var sqlDb datacenter.DataBastType + sqlDb.Type = diaoIno.SqlType + sqlDb.Ip = diaoIno.Ip + sqlDb.DataBaseName = diaoIno.DataBaseName + sqlDb.Port = int64(diaoIno.Port) + sqlDb.UserName = diaoIno.UserName + sqlDb.Pwd = diaoIno.Pwd + sqlDborm, err := sqlDb.StartDataBast() + if err != nil { + sqlDborm, err = datacenter.GainDataStorce(diaoIno.SourceId) + if err != nil { + + return + } + } + gormDb := sqlDborm.Table(diaoIno.TableKey) + gormDb.Where("`states` = 1 AND `creater` = ? AND `dang1zhi2ri4qi1` = ?", use.Key, taDay).First(&hbsqCont) + // sqlDB, _ := gormDb.DB() + // sqlDB.Close() + } else { + fmt.Printf("xuan") + hbsqCont.GetCont(map[string]interface{}{"`states`": 1, "`creater`": use.Key, "dang1zhi2ri4qi1": taDay}) //当值日期 + } + + // overall.CONSTANT_DB_CustomerForm.Model(&customerForm.HuanBanShenQing{}).Where("`states` = 1 AND `creater` = ? AND `dang1zhi2ri4qi1` = ?", use.Key).Find(&hbsqCont) + if hbsqCont.MastersKey != 0 { + var starTask customerForm.TaskRecord + starTask.GetCont(map[string]interface{}{"`masters_key`": hbsqCont.MastersKey}) + + // fmt.Printf("\n\nstarTask:%v\n\n\n\n", starTask) + + if starTask.Status == 4 { + reg1 := regexp.MustCompile(`\(([^)]+)\)`) + userAry := reg1.FindAllStringSubmatch(hbsqCont.Diao4huan4ren229452110, -1) //按照正则规则提取数据 + // fmt.Printf("\n\n按照正则规则提取数据:Diao4huan4ren229452110:%v\n\n userAry:%v\n\n", hbsqCont.Diao4huan4ren229452110, userAry) + for _, u := range userAry { + vLen := len(u) + if len(u) > 0 { + pick.GetCont(map[string]interface{}{"`number`": u[vLen-1]}) + err := overall.CONSTANT_DB_HR.Where("`number` = ? AND `emp_type` BETWEEN ? AND ? ", u[vLen-1], 1, 10).First(&pick).Error + if err == nil { + pickJson, _ := json.Marshal(pick) + redisClient.SetRedisTime(86400) + redisClient.Set(redisSqKey, string(pickJson)) + return + } + } + } + // + } + } + } + redisSqKeySq := fmt.Sprintf("%v_%v", use.Key, taDay) + redisClientSq := grocerystore.RunRedis(overall.CONSTANT_REDIS5) + isTrueSq, tokenInfoSq := redisClientSq.Get(redisSqKeySq) + if isTrueSq { + json.Unmarshal([]byte(tokenInfoSq), &pick) + } else { + var hbsqContDh customerForm.HuanBanShenQing + // hbsqContDh.GetCont(map[string]interface{}{"`states`": 1, "`creater`": use.Key, "`diao4huan4ri4qi1`": taDay}, "`masters_key`", "`creater` ") //调换日期 + // fmt.Printf("用户信息:use.Number------->%v\n------->%v\n------->%v\n", use.Number, diaoIno.Id, diaoIno.Source) + if diaoIno.Id != 0 && diaoIno.Source == "yes" { + var sqlDbes datacenter.DataBastType + sqlDbes.Type = diaoIno.SqlType + sqlDbes.Ip = diaoIno.Ip + sqlDbes.DataBaseName = diaoIno.DataBaseName + sqlDbes.Port = int64(diaoIno.Port) + sqlDbes.UserName = diaoIno.UserName + sqlDbes.Pwd = diaoIno.Pwd + sqlDbesorm, err := sqlDbes.StartDataBast() + // fmt.Printf("用户信息:err----1--->%v\n", err) + if err != nil { + sqlDbesorm, err = datacenter.GainDataStorce(diaoIno.SourceId) + if err != nil { + + return + } + } + gormDb := sqlDbesorm.Table(diaoIno.TableKey) + err = gormDb.Where("`diao4huan4ren229452110` REGEXP ? AND `diao4huan4ri4qi1` = ? AND `states` = 1 ", use.Number, taDay).First(&hbsqContDh).Error + // fmt.Printf("用户信息:err----3--->%v--->%v\n", err, hbsqContDh) + // sqlDB, _ := gormDb.DB() + // sqlDB.Close() + } else { + overall.CONSTANT_DB_CustomerForm.Where("`diao4huan4ren229452110` REGEXP ? AND `diao4huan4ri4qi1` = ? AND `states` = 1 ", use.Number, taDay).First(&hbsqContDh) + } + + if hbsqContDh.MastersKey != 0 { + var starTaskDh customerForm.TaskRecord + starTaskDh.GetCont(map[string]interface{}{"`masters_key`": hbsqContDh.MastersKey}) + if starTaskDh.Status == 4 { + // pick.GetCont(map[string]interface{}{"`key`": hbsqContDh.Creater}) + err := overall.CONSTANT_DB_HR.Where("`key` = ? AND `emp_type` BETWEEN ? AND ? ", hbsqContDh.Creater, 1, 10).First(&pick).Error + if err == nil { + pickJsonSq, _ := json.Marshal(pick) + redisClientSq.SetRedisTime(86400) + redisClientSq.Set(redisSqKeySq, string(pickJsonSq)) + return + } + } + } + } + return use +} + /* * @ 作者: 秦东 @@ -2977,13 +3313,57 @@ func (s *StaffApi) ArchivesListCont(c *gin.Context) { if requestData.KeyWords != "" { gormDb = gormDb.Where("number LIKE ? OR name LIKE ?", "%"+requestData.KeyWords+"%", "%"+requestData.KeyWords+"%") } - + var banZu []workgroup.TeamsRules + var ruleTypeId int64 + var ruleTypeName string if requestData.AdminOrg != 0 { var sunAry overallhandle.AllSunList[int64] sunAry.GetAllSunOrg(requestData.AdminOrg) sunAry.SunList = append(sunAry.SunList, requestData.AdminOrg) gormDb = gormDb.Where("admin_org IN ?", sunAry.SunList) + if requestData.Days != "" { + menuCont, _, err := CureeRunRules(requestData.AdminOrg) + if err != nil { + overallhandle.Result(200, err, c, "此行政组织还未设定班组轮询规则!") + return + } + banZu, err = menuCont.CountOrgTeamsIsDay(requestData.Days) + if err == nil { + var dayTeamsId []int64 + for _, v := range banZu { + if v.CycleWorkTime != 0 && !overallhandle.IsInTrue(v.TeamsId, dayTeamsId) { + dayTeamsId = append(dayTeamsId, v.TeamsId) + } + ruleTypeId = v.RuleTypeId + ruleTypeName = v.RuleTypeName + } + if requestData.Teamid != 0 { + if overallhandle.IsInTrue(requestData.Teamid, dayTeamsId) { + gormDb = gormDb.Where("teamid = ?", requestData.Teamid) + } else { + overallhandle.Result(200, err, c, "当天此行政组织内的此班组处于休息状态!") + return + } + + } else { + gormDb = gormDb.Where("teamid IN ?", dayTeamsId) + } + } else { + if requestData.Teamid != 0 { + gormDb = gormDb.Where("teamid = ?", requestData.Teamid) + } + } + + } else { + if requestData.Teamid != 0 { + gormDb = gormDb.Where("teamid = ?", requestData.Teamid) + } + } + } else { + if requestData.Teamid != 0 { + gormDb = gormDb.Where("teamid = ?", requestData.Teamid) + } } if len(requestData.Emptype) > 0 { gormDb = gormDb.Where("emp_type IN ?", requestData.Emptype) @@ -3014,12 +3394,19 @@ func (s *StaffApi) ArchivesListCont(c *gin.Context) { return } for _, v := range manContList { + if requestData.Days != "" { + v = Shiftdjustment(requestData.Days, v) + + } var staffInfo peopleManOutList staffInfo.ManCont = v var getSpur models.Position getWhe := overallhandle.MapOut() - getWhe["id"] = v.Position - getSpur.GetCont(getWhe, "name", "person_in_charge") + if v.Position != 0 { + 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) @@ -3066,5 +3453,37 @@ func (s *StaffApi) ArchivesListCont(c *gin.Context) { positionAry = append(positionAry, staffInfo) } - overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c) + sendExpand := overallhandle.MapOut() + var sendRuleInfo DaysTeamsRuler + if len(banZu) > 0 { + sendRuleInfo.RuleTypeId = strconv.FormatInt(ruleTypeId, 10) + sendRuleInfo.RuleTypeName = ruleTypeName + + var workTimePer []workgroup.WorkingTimePeriod + overall.CONSTANT_DB_HR.Where("`type_id` = ?", ruleTypeId).Find(&workTimePer) + var teamRuleMap []DaysTeamsRulerInfo + if len(workTimePer) > 0 { + for _, v := range workTimePer { + for _, bv := range banZu { + if v.Id == bv.CycleWorkTime { + var teamRuleInfo DaysTeamsRulerInfo + teamRuleInfo.TeamsId = strconv.FormatInt(bv.TeamsId, 10) //生产班组ID + teamRuleInfo.TeamsName = bv.TeamsName //生产班组名称 + teamRuleInfo.RuleId = strconv.FormatInt(v.Id, 10) //规则ID + teamRuleInfo.RuleName = v.Name //规则名称 + teamRuleInfo.StartTime = v.StartTime //开始时间 + teamRuleInfo.EndTime = v.EndTime //结束时间 + teamRuleMap = append(teamRuleMap, teamRuleInfo) + } + } + } + } + sort.Slice(teamRuleMap, func(i, j int) bool { + return teamRuleMap[i].StartTime < teamRuleMap[j].StartTime + }) + sendRuleInfo.List = teamRuleMap + + } + sendExpand["ruler"] = sendRuleInfo + overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c, sendExpand) } diff --git a/api/version1/personnelapi/type.go b/api/version1/personnelapi/type.go index 9ed8dce..0d5d5e4 100644 --- a/api/version1/personnelapi/type.go +++ b/api/version1/personnelapi/type.go @@ -32,8 +32,10 @@ type peopleList struct { Deparment string `json:"deparment"` //部门 AdminOrg int64 `json:"adminorg"` //所属行政组织 Position int64 `json:"position"` //职位 - EmpType int `json:"emptype"` //用工关系(1:实习生;2:待分配;3:试用员工;4:正式员工;5:停薪留职;6:退休;7:辞退;8:离职) - Role string `json:"role"` + EmpType []int `json:"emptype"` //用工关系(1:实习生;2:待分配;3:试用员工;4:正式员工;5:停薪留职;6:退休;7:辞退;8:离职) + Role string `json:"role"` //角色 + Teamid int64 `json:"teamid"` //班组 + Days string `json:"days"` //按给定日期获取班组人员 } // 人员列表输出 @@ -60,11 +62,12 @@ type peopleManOutList struct { MainDeparmentName string `json:"maindeparmentname"` //主部门 SunMainDeparmentName string `json:"sunmaindeparmentname"` //二级主部门 // DeparmentName string `json:"deparmentname"` //部门名称 - WorkPostName string `json:"workpostname"` //工段名称 - PositionName string `json:"positionname"` //职位 - KeyStr string `json:"keystr"` //身份认证 - TeamName string `json:"teamname"` //班组 - PersonInCharge int `json:"personincharge"` //负责人 + WorkPostName string `json:"workpostname"` //工段名称 + PositionName string `json:"positionname"` //职位 + KeyStr string `json:"keystr"` //身份认证 + TeamName string `json:"teamname"` //班组 + PersonInCharge int `json:"personincharge"` //负责人 + OfficeList []map[string]interface{} `json:"officelist"` // } // 获取部门细腻些 @@ -319,7 +322,9 @@ type staffArchivesCont struct { RuleId string `json:"ruleid"` //轮询规则ID RuleName string `json:"rulename"` //轮询规则名称 // PersonInCharge int `json:"personincharge"` //负责人(1:是;2:否) - OrgresList [][]int `json:"orgreslist"` //负责部门列表json + OrgresList [][]int `json:"orgreslist"` //负责部门列表json + IsColorTrue int `json:"isColorTrue"` + UserTypes string `json:"userTypes"` // } // 双职工 @@ -477,6 +482,14 @@ type insideHistory struct { WorkCont string `json:"workcont"` //工作内容 SuperiorPosition string `json:"superior_position"` //上级职务 MinionNumber string `json:"minion_number"` //下属人数 + + Bdlx string `json:"bdlx"` + Gsmc string `json:"gsmc"` + Yjbm string `json:"yjbm"` + Ejbm string `json:"ejbm"` + Gongduan string `json:"gongduan"` + Dengji string `json:"dengji"` + Zhiwei string `json:"zhiwei"` } // 编辑集团工作履历 @@ -574,6 +587,8 @@ type ArchivesSearch struct { AdminOrg int64 `json:"adminorg"` //行政组织 Emptype []int `json:"emptype"` //用工关系 Right int `json:"right"` //显示正常 + Teamid int64 `json:"teamid"` // + Days string `json:"days"` //按给定日期获取班组人员 } // 输出行政组织关系 @@ -652,3 +667,50 @@ type GroupParsingData struct { Msg []string `json:"msg"` MsgStr string `json:"msgstr"` } + +// 行政组织面包屑 +type OrgCrumb struct { + overallhandle.ConstId + Title string `json:"title"` +} + +// 行政组织、人员、角色通用面包屑 +type UserOrgRole struct { + OrgCrumb + Img string `json:"img"` + IsPick int `json:"isPick"` + Types int `json:"types"` +} + +// 行政组织获取人员 +type OrgGainPeopel struct { + OrgList []OrgCrumb `json:"orgList"` + SunOrgList []UserOrgRole `json:"sunOrgList"` + UserList []UserOrgRole `json:"userList"` +} + +// 输出行政组织获取人员 +type SendOrgGainPeopel struct { + OrgList []OrgCrumb `json:"orgList"` + OrgUserList []UserOrgRole `json:"orgUserList"` +} + +// 输出当天班组及时间 +type DaysTeamsRuler struct { + RuleTypeId string `json:"ruleTypeId"` //倒班规则 + RuleTypeName string `json:"ruleTypeName"` //倒班名称 + List []DaysTeamsRulerInfo `json:"list"` +} + +type DaysTeamsRulerInfo struct { + TeamsId string `json:"teamsId"` //生产班组ID + TeamsName string `json:"teamsName"` //生产班组名称 + RuleId string `json:"ruleId"` //规则ID + RuleName string `json:"ruleName"` //规则名称 + StartTime string `json:"startTime"` //开始时间 + EndTime string `json:"endTime"` //结束时间 +} +type OrgAndLevel struct { + AdminOrg int64 + Level int64 +} diff --git a/api/version1/personnelapi/types.go b/api/version1/personnelapi/types.go index f95e447..ebd2ec9 100644 --- a/api/version1/personnelapi/types.go +++ b/api/version1/personnelapi/types.go @@ -1,8 +1,12 @@ package personnelapi -import "hr_server/models" +import ( + "hr_server/models" + "hr_server/models/workgroup" + "hr_server/overall/overallhandle" +) -//添加员工参数 +// 添加员工参数 type addKingdeePersonneles struct { Number string `json:"fnumber"` //工号1 Name string `json:"name"` //姓名1 @@ -90,7 +94,7 @@ type addKingdeePersonneles struct { PersonInCharge int `json:"personInCharge"` //部门负责人(1:是;2:否) } -//家庭成员 +// 家庭成员 type memberOfFamilyes struct { emergencyContact Company string `json:"company"` //公司 @@ -100,7 +104,7 @@ type memberOfFamilyes struct { IdStr string `json:"idstr"` } -//集团内部工作履历 +// 集团内部工作履历 type insideHistoryer struct { Group string `json:"group"` //集团 Company string `json:"company"` //公司 @@ -116,7 +120,7 @@ type insideHistoryer struct { // Grop string `json:"grop"` //工段 } -//人员主档案信息 +// 人员主档案信息 type MyMainCont struct { Id string `json:"id"` Key string `json:"key"` //员工key @@ -145,36 +149,45 @@ type MyMainCont struct { RuleName string `json:"rulename"` //轮询规则名称 } -//输出学历 +// 输出学历 type OutpersonCont struct { models.PersonnelEducation AdmissionTimeStr string `json:"admissiontimestr"` //入学时间 GraduationTimeStr string `json:"graduationtimestr"` //毕业时间 } -//输出集团内部工作经历 +// 输出集团内部工作经历 type outInsetWork struct { - Id string `json:"id"` // - StartTime string `json:"starttimg"` //开始时间 - EndTime string `json:"endtimg"` //结束时间 - AllOrgName string `json:"allorgname"` //性质组织全称 - OrgId int64 `json:"orgid"` //行政组织ID - PostId int64 `json:"postid"` //职务ID - PostName string `json:"postname"` //职务名称 - PostLevel int64 `json:"postnlevel"` //职务等级 - TeamId int64 `json:"teamid"` //班组ID - TeamName string `json:"teamname"` //班组名称 - ChangeType int `json:"changetype"` //调动类型 - ChangeTypeName string `json:"changetypename"` //调动类型 - AssignType int `json:"assigntype"` //1、主职;2:兼职 - SuperiorPostName string `json:"superiorpostname"` //上级职务名称 - SuperiorManName []string `json:"superiormanname"` //上级人员 - SubordinatesCount int `json:"subordinatescount"` //下属熟练 - JobId int64 `json:"jobid"` //职务 - JobName string `json:"jobname"` //职务名称 -} - -//输出集团内部工作经历 + Id string `json:"id"` // + StartTime string `json:"starttimg"` //开始时间 + EndTime string `json:"endtimg"` //结束时间 + AllOrgName string `json:"allorgname"` //性质组织全称 + OrgId int64 `json:"orgid"` //行政组织ID + PostId int64 `json:"postid"` //职务ID + PostName string `json:"postname"` //职务名称 + PostLevel int64 `json:"postnlevel"` //职务等级 + TeamId int64 `json:"teamid"` //班组ID + TeamName string `json:"teamname"` //班组名称 + ChangeType int `json:"changetype"` //调动类型 + ChangeTypeName string `json:"changetypename"` //调动类型 + AssignType int `json:"assigntype"` //1、主职;2:兼职 + SuperiorPostName string `json:"superiorpostname"` //上级职务名称 + SuperiorManName string `json:"superiormanname"` //上级人员 + SubordinatesCount int `json:"subordinatescount"` //下属熟练 + JobId int64 `json:"jobid"` //职务 + JobName string `json:"jobname"` //职务名称 + ChangeReason string `json:"changeReason"` //变动原因 + + Bdlx string `json:"bdlx"` + Gsmc string `json:"gsmc"` + Yjbm string `json:"yjbm"` + Ejbm string `json:"ejbm"` + Gongduan string `json:"gongduan"` + Dengji string `json:"dengji"` + Zhiwei string `json:"zhiwei"` +} + +// 输出集团内部工作经历 type outWorkHistory struct { models.WorkHistory StartTime string `json:"starttimg"` //开始时间 @@ -182,7 +195,7 @@ type outWorkHistory struct { } -//编辑人员行政组织关系 +// 编辑人员行政组织关系 type EditOrgPeople struct { Id string `json:"id"` OrgId int64 `json:"orgid"` //行政组织 @@ -196,10 +209,11 @@ type EditOrgPeople struct { Resallorg []int `json:"resallorg"` //负责部门列表 } -// type OrgresListStruct struct{ -// []int -// } -//编辑人员主体信息 +// type OrgresListStruct struct{ +// []int +// } +// +// 编辑人员主体信息 type EditContData struct { Id string `json:"id"` Name string `json:"name"` //姓名 @@ -235,14 +249,14 @@ type EditContData struct { Maritalstatus int `json:"maritalstatus"` //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异) int } -//判断主职 +// 判断主职 type judgeMainPost struct { UserKey string `json:"userkey"` // // OrgId string `json:"orgid"` //行政组织 // PostId string `json:"postid"` //岗位 } -//性格色彩试题格式 +// 性格色彩试题格式 type TestPageColor struct { TestNumber int `json:"testnumber"` //题号 CheckedVal int `json:"checkedval"` //选项 @@ -252,14 +266,14 @@ type TestPageColorStr struct { CheckedVal string `json:"checkedval"` //选项 } -//性格色彩结果 +// 性格色彩结果 type TestPageColorVal struct { Strval int `json:"strval"` //题号 Name string `json:"name"` //选项 Setval int `json:"setval"` //选项 } -//性格结果 +// 性格结果 type TestPageColorResult struct { TestNumber []string `json:"testnumber"` //题号 CheckedVal []int `json:"checkedval"` //选项 @@ -272,10 +286,151 @@ type ExcelInfo struct { ProductSlaveTitle string `json:"ProductSlaveTitle"` } -//解析上传到redis中的数据 +// 解析上传到redis中的数据 type AnaRedisKB struct { Number int `json:"number"` RedisListKey string `json:"redisListKey"` MeritsYearIng map[string]int `json:"meritsYearIng"` RewPunYearsIng map[string]int `json:"rewPunYearsIng"` } + +type DingWeiInfo struct { + DateTime string `json:"dateTime"` + Area int `json:"area"` + FactoryId string `json:"factoryId"` + Latitude float64 `json:"latitude"` + FactoryName string `json:"factoryName"` + DeviceNo string `json:"deviceNo"` + EmpNo string `json:"empNo"` + IsOffLine string `json:"isOffLine"` + Layer string `json:"layer"` + CrossX float64 `json:"crossX"` + CrossY float64 `json:"crossY"` + Specifictype string `json:"specifictype"` + EmpName string `json:"empName"` + Longitude float64 `json:"longitude"` + UserCode string `json:"userCode"` //人员唯一标识 + UserName string `json:"userName"` //人员姓名 + UserPhone string `json:"userPhone"` //联系电话 + UserType string `json:"userType"` //人员类型 + UserOrgCode string `json:"userOrgCode"` //所属单位唯一标志 + UserOrgName string `json:"userOrgName"` //所属单位名称 + Cardld string `json:"cardld"` //绑定设备唯一编码 +} + +type DingWeiData struct { + Data []DingWeiInfo `json:"data"` + Msginfo string `json:"msginfo"` + Status int `json:"status"` + Total int `json:"total"` +} + +type RewPunType struct { + overallhandle.PublicId[string] + overallhandle.PageTurning + overallhandle.StateOverall +} + +type SendRewPunInfo struct { + models.RewardsPenalties + TimedataStr string `json:"timedataStr" gorm:"-"` + LevelName string `json:"levelName" gorm:"-"` + RewPunClassName string `json:"rewPunClassName" gorm:"-"` +} + +type SendMeritslog struct { + models.Meritslog + TimedataStr string `json:"timedataStr" gorm:"-"` +} + +type SendSheHuiGuanxi struct { + Channel string `json:"channel"` + Jobstartdate string `json:"jobstartdate"` + Entrydate string `json:"entrydate"` + SheHuiGongli float64 `json:"shehuiGongli"` + JiTuanGongli float64 `json:"jiTuanGongli"` +} + +type SendAcademicTitle struct { + models.AcademicTitle + TimeStr string `json:"timeStr" gorm:"-"` +} +type SendCertificateHonors struct { + models.CertificateHonors + TypeStr string `json:"typeStr" gorm:"-"` + TimeDataStr string `json:"timeDataStr" gorm:"-"` + EndTimeStr string `json:"endTimeStr" gorm:"-"` +} +type HonorsType struct { + overallhandle.PublicId[string] + overallhandle.PageTurning + overallhandle.StateOverall + Types int `json:"types"` +} + +// 按行政组织解析数据 +type AnaRedisKBOrg struct { + OrgId string `json:"orgId"` + AnaRedisKB +} + +// 职务对应等级 +type PositionlrInfo struct { + Id int64 `json:"id" ` + DutId int64 `json:"dutId"` + Weight int64 `json:"weight" ` +} + +// 员工考评 +type StaffAppraisal struct { + Total int64 `json:"total"` + Years int64 `json:"years"` + Levels int `json:"levels"` + errMsg []string `json:"errMsg"` +} + +// 员工考评成绩 +type StaffAppLevel struct { + OrgId string `json:"orgId"` + RedisListKey string `json:"redisListKey"` + Total int64 `json:"total"` + Years int64 `json:"years"` + Levels int `json:"levels"` + Number int `json:"number"` +} + +// 查看绩效成绩详情 +type JiXiaoChengji struct { + UserKey string `json:"userKey"` + Years string `json:"years"` + Levels int `json:"levels"` +} + +// 输出绩效成绩详情 +type SendStaffInfo struct { + Comment []string `json:"comment"` + EvaluationItems map[int]float64 `json:"evaluationItems"` + Average float64 `json:"average"` + Levels string `json:"levels"` +} + +//获取班组信息 + +type TimeSetupPeople struct { + TimeId string `json:"timeId"` + RedisListKey string `json:"redisListKey"` + Number int64 `json:"number"` +} + +type GenesInfo struct { + workgroup.Genesis + TypeIdStr string `json:"typeIdStr" gorm:"-"` //排班类型 + TypeName string `json:"typeName" gorm:"-"` //排班类型 + PeriodName string `json:"periodName" gorm:"-"` //工作时段 + RulesTime string `json:"rulesTime" gorm:"-"` //轮询起点 + RulesName string `json:"rulesName" gorm:"-"` //轮询起点名称 + RulesSort int `json:"rulesSort" gorm:"-"` //轮询起点排序 + BegainTime string `json:"begainTime" gorm:"-"` //源点时间 + StartTimeStr string `json:"startTime" gorm:"-"` // + EndTimeStr string `json:"endTime" gorm:"-"` // +} diff --git a/api/version1/personnelapi/uploadFileredis.go b/api/version1/personnelapi/uploadFileredis.go index 6b82af3..930ad5d 100644 --- a/api/version1/personnelapi/uploadFileredis.go +++ b/api/version1/personnelapi/uploadFileredis.go @@ -35,13 +35,14 @@ import ( # */ func (s *StaffApi) UploadUserFilesRedis(c *gin.Context) { + orgId := c.Request.FormValue("orgId") fileInfo, fileHeader, fileErr := c.Request.FormFile("file") if fileErr != nil { overallhandle.Result(1, fileErr, c) return } tageExt := path.Ext(fileHeader.Filename) - fmt.Printf("tageExt:%v\n", tageExt) + // fmt.Printf("tageExt:%v\n", tageExt) fileType := overallhandle.JudgeUpFileType(tageExt) if fileType != 5 { overallhandle.Result(1, fileType, c, "您上传的不是电子表格!请上传正确的文件!") @@ -55,23 +56,28 @@ func (s *StaffApi) UploadUserFilesRedis(c *gin.Context) { } redisListKey := fmt.Sprintf("ExcelImport:PeopleList:%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, overallhandle.OnlyOneNumber(1)) var userInfoData GroupParsingData - totalNum, meritsYearIng, rewPunYearsIng := userInfoData.ReadExcelRedis(xlsx, redisListKey) + totalNum, meritsYearIng, rewPunYearsIng := userInfoData.AnalysAssessYears(xlsx, redisListKey, orgId) sendData := overallhandle.MapOut() sendData["redisListKey"] = redisListKey sendData["totalNum"] = totalNum sendData["meritsYearIng"] = meritsYearIng sendData["rewPunYearsIng"] = rewPunYearsIng + sendData["orgId"] = orgId + // sendData["orgHeader"] = orgHeader + // sendData["orgErr"] = orgErr + overallhandle.Result(0, sendData, c) } -// ReadExcel .读取excel 转成切片 -func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) { +// ReadExcel .读取excel 转成切片 orgId : 当前行政组织 +func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey, orgId string) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) { rows := xlsx.GetRows(xlsx.GetSheetName(xlsx.GetActiveSheetIndex())) isDateYear := time.Now().Year() + //获取绩效年度 meritsYear := make(map[int]int) - if rows[1][289] != "" { - yearAry := strings.Split(rows[1][289], "年") + if rows[1][288] != "" { + yearAry := strings.Split(rows[1][288], "年") if len(yearAry) > 0 { yearVal, _ := strconv.Atoi(yearAry[0]) @@ -80,8 +86,9 @@ func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string) } else { meritsYear[0] = isDateYear - 3 } - if rows[1][290] != "" { - yearAry := strings.Split(rows[1][290], "年") + + if rows[1][289] != "" { + yearAry := strings.Split(rows[1][289], "年") if len(yearAry) > 0 { yearVal, _ := strconv.Atoi(yearAry[0]) meritsYear[1] = yearVal @@ -89,8 +96,8 @@ func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string) } else { meritsYear[1] = isDateYear - 2 } - if rows[1][291] != "" { - yearAry := strings.Split(rows[1][291], "年") + if rows[1][290] != "" { + yearAry := strings.Split(rows[1][290], "年") if len(yearAry) > 0 { yearVal, _ := strconv.Atoi(yearAry[0]) meritsYear[2] = yearVal @@ -101,8 +108,8 @@ func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string) meritsYearIng = meritsYear //获取奖惩年度 rewPunYears := make(map[int]int) - if rows[2][299] != "" { - jcYearAry := strings.Split(rows[2][299], "奖惩") + if rows[2][298] != "" { + jcYearAry := strings.Split(rows[2][298], "奖惩") if len(jcYearAry) > 0 { jcYearVal, _ := strconv.Atoi(jcYearAry[0]) @@ -111,8 +118,9 @@ func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string) } else { rewPunYears[0] = isDateYear - 3 } - if rows[2][304] != "" { - jcYearAry := strings.Split(rows[2][304], "奖惩") + + if rows[2][303] != "" { + jcYearAry := strings.Split(rows[2][303], "奖惩") if len(jcYearAry) > 0 { jcYearVal, _ := strconv.Atoi(jcYearAry[0]) @@ -121,8 +129,8 @@ func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string) } else { rewPunYears[1] = isDateYear - 2 } - if rows[2][309] != "" { - jcYearAry := strings.Split(rows[2][309], "奖惩") + if rows[2][308] != "" { + jcYearAry := strings.Split(rows[2][308], "奖惩") if len(jcYearAry) > 0 { jcYearVal, _ := strconv.Atoi(jcYearAry[0]) @@ -132,7 +140,6 @@ func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string) rewPunYears[2] = isDateYear - 1 } rewPunYearsIng = rewPunYears - redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) redisClient.SetRedisTime(86400) totalNum = 0 @@ -179,7 +186,7 @@ func (s *StaffApi) AnalysisRedisExelect(c *gin.Context) { redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) redisListLenght, err := redisClient.Llen(requestData.RedisListKey) if err != nil { - overallhandle.Result(1, err, c, "数据获取识别!没有找到数据!") + overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ") return } @@ -209,14 +216,24 @@ func (s *StaffApi) AnalysisRedisExelect(c *gin.Context) { } var groupManCont GroupParsingData groupManCont.GroupParsingDataInfoRedis(manCont, meritsYear, rewPunYears) - // fmt.Printf("执行完222毕删除列表键%v-%v-%v\n", redisListLenght, requestData.Number, redisListLenght-1 == int64(requestData.Number)) + // groupManCont.ParsingUserInfoOfExcel(manCont, meritsYear, rewPunYears,requestData.) + // // fmt.Printf("执行完222毕删除列表键%v-%v-%v\n", redisListLenght, requestData.Number, redisListLenght-1 == int64(requestData.Number)) if redisListLenght-1 == int64(requestData.Number) { - //执行完毕删除列表键 - redisClient.Lrange(requestData.RedisListKey, 0, -1) + // 执行完毕删除列表键 + redisClient.Ltrim(requestData.RedisListKey, 1, 0) redisClient.DelKey(requestData.RedisListKey) - // fmt.Printf("执行完毕删除列表键%v\n", requestData.RedisListKey) + // fmt.Printf("执行完毕删除列表键RedisListKey:%v------>lAry:%v------>lerr:%v------>dErr:%v\n", requestData.RedisListKey, lAry, lerr, dErr) + + // fmt.Printf("redisListLenght:%v------>Number:%v\n", redisListLenght-1, requestData.Number) } - overallhandle.Result(0, groupManCont, c) + + sendData := make(map[string]interface{}) + sendData["redisListLenght"] = redisListLenght + sendData["Number"] = requestData.Number + sendData["RedisListKey"] = requestData.RedisListKey + sendData["meritsYear"] = meritsYear + sendData["rewPunYears"] = rewPunYears + overallhandle.Result(0, sendData, c) } /* @@ -241,16 +258,532 @@ func (s *StaffApi) AnalysisRedisExelect(c *gin.Context) { func (g *GroupParsingData) GroupParsingDataInfoRedis(list map[int]string, meritsYear, rewPunYearsmap map[int]int) { g.IsOk = false g.UserNum = list[1] + // listJson, err := json.Marshal(list) + // fmt.Printf("list: %v\n%v\n", err, string(listJson)) if list[1] != "" { var myCont models.PersonArchives - err := myCont.GetCont(map[string]interface{}{"`number`": list[1]}, "`key`") + err := myCont.RedisCont(list[2], 1) if err != nil { g.IsOk = true } else { g.UserKey = myCont.Key } - g.ProcessMainTable(list, meritsYear, rewPunYearsmap) + g.ProcessMainTable(list, meritsYear, rewPunYearsmap, "309") } else { g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[2], time.Now().Unix())) } } + +/* +* +@ 作者: 秦东 +@ 时间: 2024-08-26 13:52:56 +@ 功能: 按行政组织解析人员信息 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) AnalysisRedisOrgExelect(c *gin.Context) { + var requestData AnaRedisKBOrg + err := c.ShouldBindJSON(&requestData) + if err != nil { + overallhandle.Result(100, err, c) + return + } + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) + redisListLenght, err := redisClient.Llen(requestData.RedisListKey) + if err != nil { + overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ") + return + } + + redisVal, err := redisClient.Lindex(requestData.RedisListKey, int64(requestData.Number)) + if err != nil { + overallhandle.Result(1, err, c, "数据获取识别!没有找到数据!") + return + } + var jieguo []string + err = json.Unmarshal([]byte(redisVal), &jieguo) + if err != nil { + overallhandle.Result(1, err, c, "数据格式不正取!") + } + manCont := make(map[int]string) + for i, v := range jieguo { + manCont[i] = v + } + meritsYear := make(map[int]int) + for i, v := range requestData.MeritsYearIng { + iInt, _ := strconv.Atoi(i) + meritsYear[iInt] = v + } + rewPunYears := make(map[int]int) + for i, v := range requestData.RewPunYearsIng { + iInt, _ := strconv.Atoi(i) + rewPunYears[iInt] = v + } + var groupManCont GroupParsingData + // groupManCont.GroupParsingDataInfoRedis(manCont, meritsYear, rewPunYears) + groupManCont.ParsingUserInfoOfExcel(manCont, meritsYear, rewPunYears, requestData.OrgId) + // // fmt.Printf("执行完222毕删除列表键%v-%v-%v\n", redisListLenght, requestData.Number, redisListLenght-1 == int64(requestData.Number)) + if redisListLenght-1 == int64(requestData.Number) { + // 执行完毕删除列表键 + redisClient.Ltrim(requestData.RedisListKey, 1, 0) + redisClient.DelKey(requestData.RedisListKey) + // fmt.Printf("执行完毕删除列表键RedisListKey:%v------>lAry:%v------>lerr:%v------>dErr:%v\n", requestData.RedisListKey, lAry, lerr, dErr) + + // fmt.Printf("redisListLenght:%v------>Number:%v\n", redisListLenght-1, requestData.Number) + } + + sendData := make(map[string]interface{}) + sendData["redisListLenght"] = redisListLenght + sendData["Number"] = requestData.Number + sendData["RedisListKey"] = requestData.RedisListKey + sendData["meritsYear"] = meritsYear + sendData["rewPunYears"] = rewPunYears + sendData["msg"] = groupManCont.Msg + sendData["msgStr"] = groupManCont.MsgStr + overallhandle.Result(0, sendData, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-01-08 08:18:47 +@ 功能: 解析考评人员成绩统计表 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (a *StaffApi) UpLoadPeopelMerits(c *gin.Context) { + orgId := c.Request.FormValue("orgId") + fileInfo, fileHeader, fileErr := c.Request.FormFile("file") + if fileErr != nil { + overallhandle.Result(1, fileErr, c) + return + } + tageExt := path.Ext(fileHeader.Filename) + // fmt.Printf("tageExt:%v\n", tageExt) + fileType := overallhandle.JudgeUpFileType(tageExt) + if fileType != 5 { + overallhandle.Result(1, fileType, c, "您上传的不是电子表格!请上传正确的文件!") + return + } + + xlsx, err := excelize.OpenReader(fileInfo) + if err != nil { + overallhandle.Result(2, err, c) + return + } + redisListKey := fmt.Sprintf("ExcelImport:StaffEvaluation:%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, overallhandle.OnlyOneNumber(2)) + + rows := xlsx.GetRows(xlsx.GetSheetName(xlsx.GetActiveSheetIndex())) + var listCont StaffAppraisal + switch orgId { + case "309": //高科 + listCont.AnalysisExcel(rows, redisListKey) + default: + } + sendData := overallhandle.MapOut() + sendData["orgId"] = orgId + sendData["redisListKey"] = redisListKey + sendData["total"] = listCont.Total + sendData["years"] = listCont.Years + sendData["levels"] = listCont.Levels + sendData["errMsg"] = listCont.errMsg + overallhandle.Result(0, sendData, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-01-08 13:03:16 +@ 功能: 考评人员成绩统计表 数据写入Redis +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffAppraisal) AnalysisExcel(list [][]string, redisKey string) { + // fmt.Printf("list[0][2]---->%v\n\nlist[1][2]---->%v\n", list[2][0], list[2][1]) + s.Years, _ = strconv.ParseInt(list[2][0], 10, 64) + s.Levels = overallhandle.OutPutAnalysisExcelType(list[2][1]) + + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) + redisClient.SetRedisTime(86400) + // fmt.Printf("list=====>%v\n", len(list)) + var listAllNumber int64 + for i, v := range list { + if i > 3 { + jsonStr, _ := json.Marshal(v) + fmt.Printf("jsonStr=====>%vr=====>%v\n", v[0], string(jsonStr)) + if v[0] != "" { + redisClient.Lpush(redisKey, string(jsonStr)) + listAllNumber++ + } else { + errMsg := fmt.Sprintf("%v没有工号!无法识别!不可录入数据为:", v[1], string(jsonStr)) + s.errMsg = append(s.errMsg, errMsg) + } + + } + } + s.Total = listAllNumber +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-01-08 15:55:27 +@ 功能: 解析人员绩效成绩 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) AnalysisRedisOrgStaffExelect(c *gin.Context) { + var requestData StaffAppLevel + err := c.ShouldBindJSON(&requestData) + if err != nil { + overallhandle.Result(100, err, c) + return + } + if requestData.RedisListKey == "" { + overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ") + return + } + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) + redisListLenght, err := redisClient.Llen(requestData.RedisListKey) + if err != nil { + overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ") + return + } + + redisVal, err := redisClient.Lindex(requestData.RedisListKey, int64(requestData.Number)) + if err != nil { + overallhandle.Result(1, err, c, "数据获取识别!没有找到数据!") + return + } + var jieguo []string + err = json.Unmarshal([]byte(redisVal), &jieguo) + if err != nil { + overallhandle.Result(1, err, c, "数据格式不正取!") + } + var errMsg []string + var msgStr string + // manCont := make(map[int]string) + var fenzhi []string + var pingyu string + var myCode string + var myName string + for i, v := range jieguo { + // manCont[i] = v + fmt.Printf("jieguo====>%v---------------->%T-------->%v\n", i, v, v) + if i >= 2 && i <= 11 { + fenzhi = append(fenzhi, v) + } + if i == 0 { + myCode = v + } + if i == 1 { + myName = v + } + if i == 12 { + // pingyu = strings.Split(v, "#A#") + pingyu = v + } + } + if redisListLenght-1 == int64(requestData.Number) { + // 执行完毕删除列表键 + redisClient.Ltrim(requestData.RedisListKey, 1, 0) + redisClient.DelKey(requestData.RedisListKey) + } + + if myCode != "" { + var myInfo models.PersonArchives + err = myInfo.GetCont(map[string]interface{}{"`number`": myCode}) + fmt.Printf("%v\n%v\n", myInfo.Name, myInfo.Key) + if err != nil { + msgStr = fmt.Sprintf("序号:%v--->%v:没有此人信息--->%v", requestData.Number, myName, time.Now().Unix()) + errMsg = append(errMsg, msgStr) + } else { + var staffKaoPing models.PerstatiSticsevaluators + err = staffKaoPing.GetCont(map[string]interface{}{"`userKey`": myInfo.Key, "`timeYear`": requestData.Years}) + + fenzhiAry := strings.Join(fenzhi, ",") + if err != nil { + staffKaoPing.Userkey = myInfo.Key + staffKaoPing.TimeYear = requestData.Years + staffKaoPing.Levels = int64(requestData.Levels) + staffKaoPing.EvaluationItems = fenzhiAry + staffKaoPing.Comment = pingyu + staffKaoPing.Time = time.Now().Unix() + err = overall.CONSTANT_DB_HR.Create(&staffKaoPing).Error + if err != nil { + msgStr = fmt.Sprintf("%v[%v]数据处理失败!--->%v", myName, myCode, time.Now().Unix()) + } else { + msgStr = fmt.Sprintf("%v[%v]数据处理完成!--->%v", myName, myCode, time.Now().Unix()) + } + errMsg = append(errMsg, msgStr) + } else { + editCont := overallhandle.MapOut() + if int64(requestData.Levels) != staffKaoPing.Levels { + editCont["`levels`"] = requestData.Levels + } + if fenzhiAry != staffKaoPing.EvaluationItems { + editCont["`evaluationItems`"] = fenzhiAry + } + if pingyu != staffKaoPing.Comment { + editCont["`comment`"] = pingyu + } + if len(editCont) > 0 { + editCont["`time`"] = time.Now().Unix() + err = staffKaoPing.EiteCont(map[string]interface{}{"`id`": staffKaoPing.Id}, editCont) + if err != nil { + msgStr = fmt.Sprintf("%v[%v]数据处理失败!--->%v", myName, myCode, time.Now().Unix()) + } else { + msgStr = fmt.Sprintf("%v[%v]数据处理完成!--->%v", myName, myCode, time.Now().Unix()) + } + errMsg = append(errMsg, msgStr) + } else { + msgStr = fmt.Sprintf("%v[%v]数据处理完成!--->%v", myName, myCode, time.Now().Unix()) + errMsg = append(errMsg, msgStr) + } + } + } + } else { + msgStr = fmt.Sprintf("序号:%v--->%v:没有工号--->%v", requestData.Number, myName, time.Now().Unix()) + errMsg = append(errMsg, msgStr) + + } + + sendData := make(map[string]interface{}) + sendData["redisListLenght"] = redisListLenght + sendData["Number"] = requestData.Number + sendData["RedisListKey"] = requestData.RedisListKey + + sendData["fenzhi"] = fenzhi + sendData["pingyu"] = pingyu + + sendData["msg"] = errMsg + sendData["msgStr"] = msgStr + overallhandle.Result(0, sendData, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-01-09 08:48:09 +@ 功能: 获取个人年份评估成绩详情 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) GainMyChengjiYears(c *gin.Context) { + var requestData JiXiaoChengji + err := c.ShouldBindJSON(&requestData) + if err != nil { + overallhandle.Result(100, err, c) + return + } + if requestData.UserKey == "" { + overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ") + return + } + if requestData.Years == "" { + requestData.Years = overallhandle.UnixTimeToDay(time.Now().Unix(), 16) + } + var staffKaoPing models.PerstatiSticsevaluators + err = staffKaoPing.GetCont(map[string]interface{}{"`userKey`": requestData.UserKey, "`timeYear`": requestData.Years}) + if err != nil { + overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ") + return + } + var sendData SendStaffInfo + sendData.Comment = strings.Split(staffKaoPing.Comment, "#A#") + scoreAry := strings.Split(staffKaoPing.EvaluationItems, ",") + var sunScore float64 = 0 + scoreMap := make(map[int]float64) + for i, v := range scoreAry { + vInt, _ := strconv.ParseFloat(v, 64) + scoreMap[i], _ = strconv.ParseFloat(strconv.FormatFloat(vInt, 'f', 1, 64), 64) + sunScore = sunScore + vInt + // vFloat, _ := strconv.ParseFloat(strconv.FormatFloat(vInt, 'f', 1, 64), 64) + // scoreMap[i] = vFloat + // sunScore = sunScore + vFloat + } + sendData.EvaluationItems = scoreMap + sumNum := len(scoreAry) + if sumNum == 0 { + sumNum = 1 + } + sendData.Levels = overallhandle.OutPutAnalysisExcelTypeStr(staffKaoPing.Levels) + // sendData.Average = float64(sunScore) / float64(sumNum) + sendData.Average, _ = strconv.ParseFloat(strconv.FormatFloat(float64(sunScore), 'f', 1, 64), 64) + + // sendData.Average, _ = strconv.ParseFloat(strconv.FormatFloat(float64(sunScore)/float64(sumNum), 'f', 1, 64), 64) + overallhandle.Result(0, sendData, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-01-14 09:02:57 +@ 功能: 上传班组设定人员 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) UploadTiemsManFiles(c *gin.Context) { + timeId := c.Request.FormValue("timeId") + fileInfo, fileHeader, fileErr := c.Request.FormFile("file") + if fileErr != nil { + overallhandle.Result(1, fileErr, c) + return + } + tageExt := path.Ext(fileHeader.Filename) + fileType := overallhandle.JudgeUpFileType(tageExt) + if fileType != 5 { + overallhandle.Result(1, fileType, c, "您上传的不是电子表格!请上传正确的文件!") + return + } + xlsx, err := excelize.OpenReader(fileInfo) + if err != nil { + overallhandle.Result(2, err, c) + return + } + redisListKey := fmt.Sprintf("ExcelImport:TimesList:%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, overallhandle.OnlyOneNumber(1)) + rows := xlsx.GetRows(xlsx.GetSheetName(xlsx.GetActiveSheetIndex())) + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) + redisClient.SetRedisTime(86400) + totalNum := 0 + for i, row := range rows { + if i > 0 { + jsonStr, _ := json.Marshal(row) + redisClient.Lpush(redisListKey, jsonStr) + totalNum++ + } + } + sendData := overallhandle.MapOut() + sendData["redisListKey"] = redisListKey + sendData["totalNum"] = totalNum + sendData["timeId"] = timeId + overallhandle.Result(0, sendData, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2025-01-14 09:39:24 +@ 功能: 解析人员信息!并写入数据库 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) AnalysisRedisTimesExelect(c *gin.Context) { + var requestData TimeSetupPeople + err := c.ShouldBindJSON(&requestData) + if err != nil { + overallhandle.Result(100, err, c) + return + } + if requestData.RedisListKey == "" { + overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ") + return + } + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) + redisListLenght, err := redisClient.Llen(requestData.RedisListKey) + if err != nil { + overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ") + return + } + redisVal, err := redisClient.Lindex(requestData.RedisListKey, requestData.Number) + if err != nil { + overallhandle.Result(1, err, c, "数据获取识别!没有找到数据!") + return + } + var jieguo []string + err = json.Unmarshal([]byte(redisVal), &jieguo) + if err != nil { + overallhandle.Result(1, err, c, "数据格式不正取!") + } + curryTime := time.Now().Unix() + msgStr := "" + if jieguo[0] != "" { + var myInfo models.PersonArchives + err = myInfo.GetCont(map[string]interface{}{"`number`": jieguo[0]}, "`key`") + if err != nil { + msgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", jieguo[0], jieguo[1], overallhandle.UnixTimeToDay(curryTime, 11), err) + } else { + err = myInfo.EiteCont(map[string]interface{}{"`key`": myInfo.Key}, map[string]interface{}{"`teamid`": requestData.TimeId, "`eite_time`": curryTime}) + if err != nil { + msgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", jieguo[0], jieguo[1], overallhandle.UnixTimeToDay(curryTime, 11), err) + } else { + msgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", jieguo[0], jieguo[1], overallhandle.UnixTimeToDay(curryTime, 11)) + } + } + } else { + msgStr = fmt.Sprintf("序号:%v--->%v:没有工号,无法确定启组织关系!不可写入数据--->%v", requestData.Number, jieguo[2], time.Now().Unix()) + } + + if redisListLenght-1 == int64(requestData.Number) { + // 执行完毕删除列表键 + redisClient.Ltrim(requestData.RedisListKey, 1, 0) + redisClient.DelKey(requestData.RedisListKey) + } + sendData := make(map[string]interface{}) + sendData["msgStr"] = msgStr + overallhandle.Result(0, sendData, c) +} diff --git a/api/version1/personnelapi/uploadfile.go b/api/version1/personnelapi/uploadfile.go index c704b15..0f16ee7 100644 --- a/api/version1/personnelapi/uploadfile.go +++ b/api/version1/personnelapi/uploadfile.go @@ -7,6 +7,7 @@ import ( "hr_server/overall" "hr_server/overall/overallhandle" "path" + "sort" "strconv" "strings" "time" @@ -227,7 +228,7 @@ func (g *GroupParsingData) GroupParsingDataInfo(list []interface{}, meritsYear, } else { g.UserKey = myCont.Key } - g.ProcessMainTable(val, meritsYear, rewPunYearsmap) + g.ProcessMainTable(val, meritsYear, rewPunYearsmap, "309") } else { g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v:没有工号", val[0], val[2])) } @@ -254,7 +255,7 @@ func (g *GroupParsingData) GroupParsingDataInfo(list []interface{}, meritsYear, # */ -func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rewPunYearsmap map[int]int) { +func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rewPunYearsmap map[int]int, orgId string) { // fmt.Printf("分成的段:%v\n%v\n%v\n", g.UserNum, g.UserKey, g.IsOk) if g.UserKey == 0 { g.UserKey = overallhandle.OnlyOneNumber(2) @@ -263,39 +264,68 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew if g.IsOk { var userInfo models.PersonArchives - userInfo.Key = g.UserKey //唯一编号 - userInfo.Name = info[2] //姓名"` - userInfo.HireClass = 1 //雇佣类型(1:雇佣入职;2:再入职;)"` - userInfo.EmpType = 4 //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)"` + userInfo.Key = g.UserKey //唯一编号 + userInfo.Name = info[2] //姓名"` + userInfo.Number = info[1] //工号 + userInfo.HireClass = 1 //雇佣类型(1:雇佣入职;2:再入职;)"` + userInfo.EmpType = 8 //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)"` + orgIdInt, _ := strconv.ParseInt(orgId, 10, 64) + userInfo.ExcelTemplate = orgIdInt var adminOrg int64 var allOrgId []int64 if info[3] != "" { var comOrg models.AdministrativeOrganization comOrg.GetCont(map[string]interface{}{"`name`": info[3]}, "`id`") - userInfo.Company = comOrg.Id //入职公司"` - adminOrg = comOrg.Id - var sunOrg overallhandle.GetOrgAllParent - sunOrg.GetOrgSonAllId(comOrg.Id) - sunOrg.Id = append(sunOrg.Id, comOrg.Id) - allOrgId = sunOrg.Id + if comOrg.Id != 0 { + userInfo.Company = comOrg.Id //入职公司"` + adminOrg = comOrg.Id + var sunOrg overallhandle.GetOrgAllParent + sunOrg.GetOrgSonAllId(comOrg.Id) + sunOrg.Id = append(sunOrg.Id, comOrg.Id) + allOrgId = sunOrg.Id + } } if info[4] != "" { - mastOrg := GetMyOrgSunId(info[4], allOrgId) - userInfo.MainDeparment = mastOrg //主部门"` - adminOrg = mastOrg + if len(allOrgId) > 0 { + mastOrg := GetMyOrgSunId(info[4], allOrgId) + if mastOrg != 0 { + userInfo.MainDeparment = mastOrg //主部门"` + adminOrg = mastOrg + } + } } if info[5] != "" { - suntOrg := GetMyOrgSunId(info[5], allOrgId) - userInfo.SunMainDeparment = suntOrg //二级主部门"` - adminOrg = suntOrg + if len(allOrgId) > 0 { + suntOrg := GetMyOrgSunId(info[5], allOrgId) + if suntOrg != 0 { + userInfo.SunMainDeparment = suntOrg //二级主部门"` + adminOrg = suntOrg + } + } } if info[6] != "" { - postOrg := GetMyOrgSunId(info[6], allOrgId) - userInfo.WorkSection = postOrg //二级主部门"` - adminOrg = postOrg + if len(allOrgId) > 0 { + postOrg := GetMyOrgSunId(info[6], allOrgId) + if postOrg != 0 { + userInfo.WorkSection = postOrg //二级主部门"` + adminOrg = postOrg + } + } + } + if adminOrg != 0 { + userInfo.AdminOrg = adminOrg //所属行政组织"` + // userInfo.Position, userInfo.JobId, userInfo.PersonInCharge = GetMyPositisName(info[7], adminOrg) + position, jobId, PersonInCharge := GetMyPositisName(info[7], adminOrg) + if position != 0 { + userInfo.Position = position + } + if jobId != 0 { + userInfo.JobId = jobId + } + if PersonInCharge != 0 { + userInfo.PersonInCharge = PersonInCharge + } } - userInfo.AdminOrg = adminOrg //所属行政组织"` - userInfo.Position, userInfo.JobId, userInfo.PersonInCharge = GetMyPositisName(info[7], adminOrg) switch info[8] { case "一级": userInfo.JobLeve = 1 // 职务等级"` @@ -312,7 +342,9 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew if info[9] != "" { var jobInfo models.JobClass jobInfo.GetCont(map[string]interface{}{"`name`": info[9]}, "`id`") - userInfo.JobClass = jobInfo.Id //管理类别"` + if jobInfo.Id != 0 { + userInfo.JobClass = jobInfo.Id //管理类别"` + } } userInfo.Time = curryTime //写入时间"` userInfo.EiteTime = curryTime //编辑时间"` @@ -328,8 +360,8 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew } err := overall.CONSTANT_DB_HR.Create(&userInfo).Error if err != nil { - g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11))) - g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11)) + g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11), err)) + g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11), err) } else { g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11))) g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11)) @@ -342,40 +374,60 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew if info[3] != "" { var comOrg models.AdministrativeOrganization comOrg.GetCont(map[string]interface{}{"`name`": info[3]}, "`id`") - editInfo["`company`"] = comOrg.Id //入职公司"` if comOrg.Id != 0 { + editInfo["`company`"] = comOrg.Id //入职公司"` + adminOrg = comOrg.Id - } - var sunOrg overallhandle.GetOrgAllParent - sunOrg.GetOrgSonAllId(comOrg.Id) - sunOrg.Id = append(sunOrg.Id, comOrg.Id) - allOrgId = sunOrg.Id + var sunOrg overallhandle.GetOrgAllParent + sunOrg.GetOrgSonAllId(comOrg.Id) + sunOrg.Id = append(sunOrg.Id, comOrg.Id) + allOrgId = sunOrg.Id + } } if info[4] != "" { - mastOrg := GetMyOrgSunId(info[4], allOrgId) - editInfo["`maindeparment`"] = mastOrg //主部门"` - if mastOrg != 0 { - adminOrg = mastOrg + if len(allOrgId) > 0 { + mastOrg := GetMyOrgSunId(info[4], allOrgId) + + if mastOrg != 0 { + editInfo["`maindeparment`"] = mastOrg //主部门"` + adminOrg = mastOrg + } } } if info[5] != "" { - suntOrg := GetMyOrgSunId(info[5], allOrgId) - editInfo["`sun_main_deparment`"] = suntOrg //二级主部门"` - if suntOrg != 0 { - adminOrg = suntOrg + if len(allOrgId) > 0 { + suntOrg := GetMyOrgSunId(info[5], allOrgId) + + if suntOrg != 0 { + editInfo["`sun_main_deparment`"] = suntOrg //二级主部门"` + adminOrg = suntOrg + } } } if info[6] != "" { - postOrg := GetMyOrgSunId(info[6], allOrgId) - editInfo["`work_section`"] = postOrg //二级主部门"` - if postOrg != 0 { - adminOrg = postOrg - } + if len(allOrgId) > 0 { + postOrg := GetMyOrgSunId(info[6], allOrgId) + if postOrg != 0 { + editInfo["`work_section`"] = postOrg //二级主部门"` + adminOrg = postOrg + } + } + } + if adminOrg != 0 { + editInfo["`admin_org`"] = adminOrg //所属行政组织"` + position, jobId, PersonInCharge := GetMyPositisName(info[7], adminOrg) + if position != 0 { + editInfo["`position`"] = position + } + if jobId != 0 { + editInfo["`job_id`"] = jobId + } + if PersonInCharge != 0 { + editInfo["`person_in_charge`"] = PersonInCharge + } } - editInfo["`admin_org`"] = adminOrg //所属行政组织"` - editInfo["`position`"], editInfo["`job_id`"], editInfo["`person_in_charge`"] = GetMyPositisName(info[7], adminOrg) switch info[8] { case "一级": editInfo["`job_leve`"] = 1 // 职务等级"` @@ -392,19 +444,23 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew if info[9] != "" { var jobInfo models.JobClass jobInfo.GetCont(map[string]interface{}{"`name`": info[9]}, "`id`") - editInfo["`job_class`"] = jobInfo.Id //管理类别"` + if jobInfo.Id != 0 { + editInfo["`job_class`"] = jobInfo.Id //管理类别"` + } } editInfo["`eite_time`"] = curryTime editInfo["`is_show_true`"] = 1 if info[30] != "" { editInfo["`wechat`"] = info[30] } + orgIdInt, _ := strconv.ParseInt(orgId, 10, 64) + editInfo["`excel_template`"] = orgIdInt var userInfo models.PersonArchives err := userInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editInfo) // fmt.Printf("编辑信息:%v\n", err) if err != nil { - g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11))) - g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11)) + g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11), err)) + g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11), err) } else { g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11))) g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11)) @@ -420,7 +476,7 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew synPros.Add(1) go g.FamilyMembers(info) //家庭成员 synPros.Add(1) - go g.GrowthExperienceWithinTheGroup(info) //集团内成长经历 + go g.GrowthExperienceWithinTheGroup(info, orgId) //集团内成长经历 synPros.Add(1) go g.ExternalWorkExperienceOfTheGroup(info) //集团外部工作经历 synPros.Add(1) @@ -431,7 +487,9 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew go g.EditAcademicTitle(info) //编辑职称 synPros.Add(1) go g.EditCertificate(info) //编辑证书 - synPros.Wait() + synPros.Add(1) + go g.TalentInventory(info, orgId) //人才盘点 + // synPros.Wait() // g.SecondaryTableUser(info) //人员信息副本 // g.PoliticalOutlookEdit(info) //政治面貌 @@ -469,46 +527,46 @@ func (g *GroupParsingData) EditCertificate(info map[int]string) { var cerHonList []models.CertificateHonors err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&cerHonList).Error if err != nil || len(cerHonList) < 1 { - if info[339] != "" { - g.EditCertificateCont(info[338], info[339], info[340], info[341], info[342], info[343], info[344]) + if info[338] != "" { + g.EditCertificateCont(info[337], info[338], info[339], info[340], info[341], info[342], info[343]) } - if info[346] != "" { - g.EditCertificateCont(info[345], info[346], info[347], info[348], info[349], info[350], info[351]) + if info[345] != "" { + g.EditCertificateCont(info[344], info[345], info[346], info[347], info[348], info[349], info[350]) } - if info[353] != "" { - g.EditCertificateCont(info[352], info[353], info[354], info[355], info[356], info[357], info[358]) + if info[352] != "" { + g.EditCertificateCont(info[351], info[352], info[353], info[354], info[355], info[356], info[357]) } - if info[360] != "" { - g.EditCertificateCont(info[359], info[360], info[361], info[362], info[363], info[364], info[365]) + if info[359] != "" { + g.EditCertificateCont(info[358], info[359], info[360], info[361], info[362], info[363], info[364]) } - if info[367] != "" { - g.EditCertificateCont(info[366], info[367], info[368], info[369], info[370], info[371], info[372]) + if info[366] != "" { + g.EditCertificateCont(info[365], info[366], info[367], info[368], info[369], info[370], info[371]) } - if info[374] != "" { - g.EditCertificateCont(info[373], info[374], info[375], info[376], info[377], info[378], info[379]) + if info[373] != "" { + g.EditCertificateCont(info[372], info[373], info[374], info[375], info[376], info[377], info[378]) } } else { jsonInfo, _ := json.Marshal(cerHonList) overallhandle.WriteLog("del", "删除旧证书数据!", string(jsonInfo)) var workGroupLogCont models.CertificateHonors workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey}) - if info[339] != "" { - g.EditCertificateCont(info[338], info[339], info[340], info[341], info[342], info[343], info[344]) + if info[338] != "" { + g.EditCertificateCont(info[337], info[338], info[339], info[340], info[341], info[342], info[343]) } - if info[346] != "" { - g.EditCertificateCont(info[345], info[346], info[347], info[348], info[349], info[350], info[351]) + if info[345] != "" { + g.EditCertificateCont(info[344], info[345], info[346], info[347], info[348], info[349], info[350]) } - if info[353] != "" { - g.EditCertificateCont(info[352], info[353], info[354], info[355], info[356], info[357], info[358]) + if info[352] != "" { + g.EditCertificateCont(info[351], info[352], info[353], info[354], info[355], info[356], info[357]) } - if info[360] != "" { - g.EditCertificateCont(info[359], info[360], info[361], info[362], info[363], info[364], info[365]) + if info[359] != "" { + g.EditCertificateCont(info[358], info[359], info[360], info[361], info[362], info[363], info[364]) } - if info[367] != "" { - g.EditCertificateCont(info[366], info[367], info[368], info[369], info[370], info[371], info[372]) + if info[366] != "" { + g.EditCertificateCont(info[365], info[366], info[367], info[368], info[369], info[370], info[371]) } - if info[374] != "" { - g.EditCertificateCont(info[373], info[374], info[375], info[376], info[377], info[378], info[379]) + if info[373] != "" { + g.EditCertificateCont(info[372], info[373], info[374], info[375], info[376], info[377], info[378]) } } } @@ -545,7 +603,7 @@ func (g *GroupParsingData) EditCertificateCont(Title, Number, IssuingUnit, TimeD monthsInt, _ := strconv.Atoi(overallhandle.UnixTimeToDay(cureeTime, 17)) cerInfo.Months = monthsInt //月"` cerInfo.Number = Number //证书编号"` - if EndTime != "" { + if EndTime != "" && EndTime != "无" { cerInfo.EndTime = overallhandle.ExcelDateToDate(EndTime).Unix() //截止时间"` } cerInfo.ValidPeriod = ValidPeriod //有效期限"` @@ -603,22 +661,22 @@ func (g *GroupParsingData) EditAcademicTitle(info map[int]string) { var acaList []models.AcademicTitle err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&acaList).Error if err != nil || len(acaList) < 1 { - if info[331] != "" { - g.InsetAcaInfo(info[328], info[329], info[330], info[331], info[332]) + if info[330] != "" { + g.InsetAcaInfo(info[327], info[328], info[329], info[330], info[331]) } - if info[336] != "" { - g.InsetAcaInfo(info[333], info[334], info[335], info[336], info[337]) + if info[335] != "" { + g.InsetAcaInfo(info[332], info[333], info[334], info[335], info[336]) } } else { jsonInfo, _ := json.Marshal(acaList) overallhandle.WriteLog("del", "删除旧职称数据!", string(jsonInfo)) var workGroupLogCont models.AcademicTitle workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey}) - if info[331] != "" { - g.InsetAcaInfo(info[328], info[329], info[330], info[331], info[332]) + if info[330] != "" { + g.InsetAcaInfo(info[327], info[328], info[329], info[330], info[331]) } - if info[336] != "" { - g.InsetAcaInfo(info[333], info[334], info[335], info[336], info[337]) + if info[335] != "" { + g.InsetAcaInfo(info[332], info[333], info[334], info[335], info[336]) } } } @@ -723,36 +781,41 @@ func (g *GroupParsingData) EditRewardsPunishments(info map[int]string, rewPunYea // fmt.Printf("奖惩记录1: %v\n", rewPunYearsmap) // fmt.Printf("奖惩记录: %v\n %v\n %v\n", info[299], info[304], info[309]) if val, isOk := rewPunYearsmap[0]; isOk { - if info[299] != "" { - g.EditRewPunInfo(val, info[299], info[300], info[301], info[302], info[303]) - } + // if info[298] != "" { + g.EditRewPunInfo(val, info[298], info[299], info[300], info[301], info[302]) + // } } if val, isOk := rewPunYearsmap[1]; isOk { - if info[304] != "" { - g.EditRewPunInfo(val, info[304], info[305], info[306], info[307], info[308]) - } + // if info[303] != "" { + g.EditRewPunInfo(val, info[303], info[304], info[305], info[306], info[307]) + // } } if val, isOk := rewPunYearsmap[2]; isOk { - if info[309] != "" { - g.EditRewPunInfo(val, info[309], info[310], info[311], info[312], info[313]) - } + // if info[308] != "" { + g.EditRewPunInfo(val, info[308], info[309], info[310], info[311], info[312]) + // } } } func (g *GroupParsingData) EditRewPunInfo(years int, level, rewPunClass, title, timeData, issuingUnit string) { - // fmt.Printf("奖惩记录2: %v\n", timeData) + fmt.Printf("奖惩记录2: %v----> %v\n", level, timeData) jiangCeng := RewPunLevelClassStr(rewPunClass) var rewPunYearCont models.RewardsPenalties err := rewPunYearCont.GetCont(map[string]interface{}{"`userkey`": g.UserKey, "`years`": years, "`months`": 0}) timeVal := time.Now().Unix() // yserInt, _ := strconv.Atoi(overallhandle.UnixTimeToDay(timeVal, 16)) - + if err == nil { + overall.CONSTANT_DB_HR.Where("`id` = ? ", rewPunYearCont.Id).Delete(&rewPunYearCont) + // overall.CONSTANT_DB_HR.Where("`userkey` = ? AND `years` = ? AND `months` = ?", g.UserKey, years, 0).Delete(&rewPunYearCont) + } if timeData != "" { timeVal = overallhandle.ExcelDateToDate(timeData).Unix() fmt.Printf("奖惩记录3: %v\n", timeVal) } - if err != nil { //新增 + if level != "" { + + // if err != nil { //新增 rewPunYearCont.Title = title //奖励/处分项目"` rewPunYearCont.UserKey = g.UserKey //获得人员"` if jiangCeng <= 6 { @@ -770,24 +833,25 @@ func (g *GroupParsingData) EditRewPunInfo(years int, level, rewPunClass, title, rewPunYearCont.Level = RewPunLevelStr(level) //奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)"` rewPunYearCont.RewPunClass = jiangCeng //奖惩类型(1:年终评优;2:表扬;3:嘉奖;4:记功;5:记大功;6:特别奖励;7:批评;8:警告;9:记过;10:记大过;11:降级;12:留用察看;13:开除)"` overall.CONSTANT_DB_HR.Create(&rewPunYearCont) - } else { //编辑 - editCont := overallhandle.MapOut() - editCont["`title`"] = title - if jiangCeng <= 6 { - editCont["`types`"] = 1 //类型(1:奖励;2:处分;)` - } else { - editCont["`types`"] = 2 //类型(1:奖励;2:处分;)` - } - editCont["`state`"] = 1 - editCont["`issuing_unit`"] = issuingUnit - editCont["`timedata`"] = timeVal - editCont["`years`"] = years - editCont["`months`"] = 0 - editCont["`level`"] = RewPunLevelStr(level) - editCont["`rewPunClass`"] = jiangCeng - var rewPunYearEditCont models.RewardsPenalties - rewPunYearEditCont.EiteCont(map[string]interface{}{"`id`": rewPunYearCont.Id}, editCont) } + // } else { //编辑 + // editCont := overallhandle.MapOut() + // editCont["`title`"] = title + // if jiangCeng <= 6 { + // editCont["`types`"] = 1 //类型(1:奖励;2:处分;)` + // } else { + // editCont["`types`"] = 2 //类型(1:奖励;2:处分;)` + // } + // editCont["`state`"] = 1 + // editCont["`issuing_unit`"] = issuingUnit + // editCont["`timedata`"] = timeVal + // editCont["`years`"] = years + // editCont["`months`"] = 0 + // editCont["`level`"] = RewPunLevelStr(level) + // editCont["`rewPunClass`"] = jiangCeng + // var rewPunYearEditCont models.RewardsPenalties + // rewPunYearEditCont.EiteCont(map[string]interface{}{"`id`": rewPunYearCont.Id}, editCont) + // } } /* @@ -812,13 +876,13 @@ func (g *GroupParsingData) EditExamineLevel(info map[int]string, meritsYear map[ // if info[289] == "" { // } if val, isOk := meritsYear[0]; isOk { - g.EditExamineLevelInfo(info[289], val) + g.EditExamineLevelInfo(info[288], val) } if val, isOk := meritsYear[1]; isOk { - g.EditExamineLevelInfo(info[290], val) + g.EditExamineLevelInfo(info[289], val) } if val, isOk := meritsYear[2]; isOk { - g.EditExamineLevelInfo(info[291], val) + g.EditExamineLevelInfo(info[290], val) } } @@ -829,9 +893,9 @@ func (g *GroupParsingData) EditExamineLevel(info map[int]string, meritsYear map[ @ 功能: 编辑绩效考核内容 */ func (g *GroupParsingData) EditExamineLevelInfo(level string, years int) { - if level == "" { - return - } + // if level == "" { + // return + // } var merInfo models.Meritslog err := merInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey, "`years`": years, "`months`": 0}, "`id`", "`level`") if err != nil { //新增 @@ -877,40 +941,40 @@ func (g *GroupParsingData) ExternalWorkExperienceOfTheGroup(info map[int]string) var workList []models.WorkHistory err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&workList).Error if err != nil || len(workList) < 1 { - if info[223] != "" { - g.ExternalWorkGroupLog(info[223], info[224], info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235]) + if info[222] != "" { + g.ExternalWorkGroupLog(info[222], info[223], info[224], info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234]) } - if info[236] != "" { - g.ExternalWorkGroupLog(info[236], info[237], info[238], info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248]) + if info[235] != "" { + g.ExternalWorkGroupLog(info[235], info[236], info[237], info[238], info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247]) } - if info[249] != "" { - g.ExternalWorkGroupLog(info[249], info[250], info[251], info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261]) + if info[248] != "" { + g.ExternalWorkGroupLog(info[248], info[249], info[250], info[251], info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260]) } - if info[262] != "" { - g.ExternalWorkGroupLog(info[262], info[263], info[264], info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274]) + if info[261] != "" { + g.ExternalWorkGroupLog(info[261], info[262], info[263], info[264], info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273]) } - if info[275] != "" { - g.ExternalWorkGroupLog(info[275], info[276], info[277], info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287]) + if info[274] != "" { + g.ExternalWorkGroupLog(info[274], info[275], info[276], info[277], info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286]) } } else { //已经存在历史记录了 jsonInfo, _ := json.Marshal(workList) overallhandle.WriteLog("del", "删除旧集团外部工作经历数据!", string(jsonInfo)) var workGroupLogCont models.WorkHistory workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey}) - if info[223] != "" { - g.ExternalWorkGroupLog(info[223], info[224], info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235]) + if info[222] != "" { + g.ExternalWorkGroupLog(info[222], info[223], info[224], info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234]) } - if info[236] != "" { - g.ExternalWorkGroupLog(info[236], info[237], info[238], info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248]) + if info[235] != "" { + g.ExternalWorkGroupLog(info[235], info[236], info[237], info[238], info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247]) } - if info[249] != "" { - g.ExternalWorkGroupLog(info[249], info[250], info[251], info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261]) + if info[248] != "" { + g.ExternalWorkGroupLog(info[248], info[249], info[250], info[251], info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260]) } - if info[262] != "" { - g.ExternalWorkGroupLog(info[262], info[263], info[264], info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274]) + if info[261] != "" { + g.ExternalWorkGroupLog(info[261], info[262], info[263], info[264], info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273]) } - if info[275] != "" { - g.ExternalWorkGroupLog(info[275], info[276], info[277], info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287]) + if info[274] != "" { + g.ExternalWorkGroupLog(info[274], info[275], info[276], info[277], info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286]) } } } @@ -966,6 +1030,8 @@ func (g *GroupParsingData) ExternalWorkGroupLog(EntryTime, Leavedate, Company, C if MinionNumber != "" { manNum, _ := strconv.Atoi(MinionNumber) myWorkLog.MinionNumber = manNum //下属人数"` + } else { + myWorkLog.MinionNumber = 0 } myWorkLog.CompanyNature = CompanyNature //公司性质 myWorkLog.Industry = Industry //所属行业 @@ -989,40 +1055,40 @@ func (g *GroupParsingData) ExternalWorkGroupLog(EntryTime, Leavedate, Company, C # */ -func (g *GroupParsingData) GrowthExperienceWithinTheGroup(info map[int]string) { +func (g *GroupParsingData) GrowthExperienceWithinTheGroup(info map[int]string, orgId string) { defer synPros.Done() var growInGroup []models.InsideWorkHistory err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&growInGroup).Error if err != nil || len(growInGroup) < 1 { if info[92] != "" { - g.EditGroupInWorkLog(info[92], info[93], info[94], info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104]) + g.EditGroupInWorkLog(info[92], info[93], info[94], info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104], orgId) } if info[105] != "" { - g.EditGroupInWorkLog(info[105], info[106], info[107], info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117]) + g.EditGroupInWorkLog(info[105], info[106], info[107], info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117], orgId) } if info[118] != "" { - g.EditGroupInWorkLog(info[118], info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130]) + g.EditGroupInWorkLog(info[118], info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130], orgId) } if info[131] != "" { - g.EditGroupInWorkLog(info[131], info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143]) + g.EditGroupInWorkLog(info[131], info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143], orgId) } if info[144] != "" { - g.EditGroupInWorkLog(info[144], info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156]) + g.EditGroupInWorkLog(info[144], info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156], orgId) } if info[157] != "" { - g.EditGroupInWorkLog(info[157], info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169]) + g.EditGroupInWorkLog(info[157], info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169], orgId) } if info[170] != "" { - g.EditGroupInWorkLog(info[170], info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182]) + g.EditGroupInWorkLog(info[170], info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], orgId) } if info[183] != "" { - g.EditGroupInWorkLog(info[183], info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195]) + g.EditGroupInWorkLog(info[183], info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], orgId) } if info[196] != "" { - g.EditGroupInWorkLog(info[196], info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208]) + g.EditGroupInWorkLog(info[196], info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], orgId) } if info[209] != "" { - g.EditGroupInWorkLog(info[209], info[210], info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221]) + g.EditGroupInWorkLog(info[209], info[210], info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], orgId) } } else { jsonInfo, _ := json.Marshal(growInGroup) @@ -1030,34 +1096,34 @@ func (g *GroupParsingData) GrowthExperienceWithinTheGroup(info map[int]string) { var workGroupLogCont models.InsideWorkHistory workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey}) if info[92] != "" { - g.EditGroupInWorkLog(info[92], info[93], info[94], info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104]) + g.EditGroupInWorkLog(info[92], info[93], info[94], info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104], orgId) } if info[105] != "" { - g.EditGroupInWorkLog(info[105], info[106], info[107], info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117]) + g.EditGroupInWorkLog(info[105], info[106], info[107], info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117], orgId) } if info[118] != "" { - g.EditGroupInWorkLog(info[118], info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130]) + g.EditGroupInWorkLog(info[118], info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130], orgId) } if info[131] != "" { - g.EditGroupInWorkLog(info[131], info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143]) + g.EditGroupInWorkLog(info[131], info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143], orgId) } if info[144] != "" { - g.EditGroupInWorkLog(info[144], info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156]) + g.EditGroupInWorkLog(info[144], info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156], orgId) } if info[157] != "" { - g.EditGroupInWorkLog(info[157], info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169]) + g.EditGroupInWorkLog(info[157], info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169], orgId) } if info[170] != "" { - g.EditGroupInWorkLog(info[170], info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182]) + g.EditGroupInWorkLog(info[170], info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], orgId) } if info[183] != "" { - g.EditGroupInWorkLog(info[183], info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195]) + g.EditGroupInWorkLog(info[183], info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], orgId) } if info[196] != "" { - g.EditGroupInWorkLog(info[196], info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208]) + g.EditGroupInWorkLog(info[196], info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], orgId) } if info[209] != "" { - g.EditGroupInWorkLog(info[209], info[210], info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221]) + g.EditGroupInWorkLog(info[209], info[210], info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], orgId) } } } @@ -1081,37 +1147,70 @@ superiorPosition 上级职位 superiorName 上级名称 subordinates 下属人数 */ -func (g *GroupParsingData) EditGroupInWorkLog(startTime, endTime, changeType, changeReason, company, department, workShop, workshopSection, position, gradePositions, superiorPosition, superiorName, subordinates string) { +func (g *GroupParsingData) EditGroupInWorkLog(startTime, endTime, changeType, changeReason, company, department, workShop, workshopSection, position, gradePositions, superiorPosition, superiorName, subordinates string, org string) { var adminOrg int64 var sunOrg overallhandle.GetOrgAllParent var inWorkGroupInfo models.InsideWorkHistory inWorkGroupInfo.Key = g.UserKey //员工识别符"` + + inWorkGroupInfo.Bdlx = changeType + inWorkGroupInfo.Gsmc = company + inWorkGroupInfo.Yjbm = department + inWorkGroupInfo.Ejbm = workShop + inWorkGroupInfo.Gongduan = workshopSection + + inWorkGroupInfo.Zhiwei = position + if company != "" { var comOrg models.AdministrativeOrganization comOrg.GetCont(map[string]interface{}{"`name`": company}, "`id`") - inWorkGroupInfo.Company = comOrg.Id //公司"` - sunOrg.GetOrgSonAllId(comOrg.Id) - sunOrg.Id = append(sunOrg.Id, comOrg.Id) - adminOrg = comOrg.Id + if comOrg.Id != 0 { + inWorkGroupInfo.Company = comOrg.Id //公司"` + sunOrg.GetOrgSonAllId(comOrg.Id) + sunOrg.Id = append(sunOrg.Id, comOrg.Id) + adminOrg = comOrg.Id + } + } - // fmt.Printf("所有子级--->%v--->%v--->%v\n", sunOrg.Id, department, adminOrg) + if department != "" { - mastOrg := GetMyOrgSunId(department, sunOrg.Id) - inWorkGroupInfo.Department = mastOrg //一级部室"` - adminOrg = mastOrg + if len(sunOrg.Id) > 0 { + mastOrg := GetMyOrgSunId(department, sunOrg.Id) + if mastOrg != 0 { + inWorkGroupInfo.Department = mastOrg //一级部室"` + adminOrg = mastOrg + } + } + } if workShop != "" { - suntOrg := GetMyOrgSunId(workShop, sunOrg.Id) - inWorkGroupInfo.WorkShop = suntOrg //二级部门或车间"` - adminOrg = suntOrg + if len(sunOrg.Id) > 0 { + suntOrg := GetMyOrgSunId(workShop, sunOrg.Id) + if suntOrg != 0 { + inWorkGroupInfo.WorkShop = suntOrg //二级部门或车间"` + adminOrg = suntOrg + } + + } } if workshopSection != "" { - workOrg := GetMyOrgSunId(workshopSection, sunOrg.Id) - inWorkGroupInfo.WorkshopSection = workOrg //工段"` - adminOrg = workOrg + if len(sunOrg.Id) > 0 { + workOrg := GetMyOrgSunId(workshopSection, sunOrg.Id) + if workOrg != 0 { + inWorkGroupInfo.WorkshopSection = workOrg //工段"` + adminOrg = workOrg + } + + } + } + if adminOrg != 0 { + positions, jobIds, _ := GetMyPositisName(position, adminOrg) //职位"` + inWorkGroupInfo.Position = positions + inWorkGroupInfo.JobId = jobIds + + // inWorkGroupInfo.Position, inWorkGroupInfo.JobId, _ = GetMyPositisName(position, adminOrg) //职位"` } - inWorkGroupInfo.Position, inWorkGroupInfo.JobId, _ = GetMyPositisName(position, adminOrg) //职位"` switch gradePositions { case "一级": inWorkGroupInfo.GradePositions = 1 // 职务等级"` @@ -1123,6 +1222,8 @@ func (g *GroupParsingData) EditGroupInWorkLog(startTime, endTime, changeType, ch inWorkGroupInfo.GradePositions = 4 // 职务等级"` case "五级": inWorkGroupInfo.GradePositions = 5 // 职务等级"` + case "协议": + inWorkGroupInfo.GradePositions = 6 // 职务等级"` default: } if startTime != "" { @@ -1145,6 +1246,13 @@ func (g *GroupParsingData) EditGroupInWorkLog(startTime, endTime, changeType, ch inWorkGroupInfo.State = 1 //状态(1:启用;2:禁用;3:删除)"` // inWorkGroupInfo.AssignType = //1、主职;2:兼职"` // inWorkGroupInfo.JobId = //职务"` + fmt.Printf("行政职务--->%v\n", org) + switch org { + case "296": + inWorkGroupInfo.Dengji = gradePositions + default: + inWorkGroupInfo.WorkCont = gradePositions + } // inWorkGroupInfo.WorkCont = //工作内容"` inWorkGroupInfo.ChangeReason = changeReason //变动原因"` inWorkGroupInfo.SuperiorPosition = superiorPosition //上级职位"` @@ -1152,6 +1260,8 @@ func (g *GroupParsingData) EditGroupInWorkLog(startTime, endTime, changeType, ch if subordinates != "" { subNum, _ := strconv.Atoi(subordinates) inWorkGroupInfo.Subordinates = subNum //下属人数"` + } else { + inWorkGroupInfo.Subordinates = 0 } overall.CONSTANT_DB_HR.Create(&inWorkGroupInfo) } @@ -1488,7 +1598,8 @@ func (g *GroupParsingData) EditSchollLog(Education, EducationType, AcademicDegre */ func (g *GroupParsingData) AddOneSchollLog(Education, EducationType, AcademicDegree, GraduationSchool, SchoolType, CollegeFaction, Subject, AdmissionTime, GraduationTime string, level int) { var firstLog models.PersonnelEducation - firstLog.Number = g.UserNum //员工工号"` + firstLog.Number = g.UserNum //员工工号"` + firstLog.XueLi = Education firstLog.Education = ducationToInt(Education) //学历(1:初中及以下;2:中专;3:高中;4:中技;5:高技;6:函数专科;7:大学专科;8:函数本科;9:大学本科;10:硕士研究生;11:博士研究生;12:专家、教授)"` firstLog.GraduationSchool = GraduationSchool //毕业学校"` firstLog.Subject = Subject //专业"` @@ -1509,6 +1620,8 @@ func (g *GroupParsingData) AddOneSchollLog(Education, EducationType, AcademicDeg firstLog.EducationType = EducationTypeStr(EducationType) //学历类型(1、统招;2、函授)"` firstLog.CollegeFaction = CollegeFaction //所属院系"` firstLog.SchoolType = SchoolTypeStr(SchoolType) //学历类型(院校类型(1、私立中学;2:公立中学;3:高职院校;4:民办专科院校;5:公办专科院校;6:民办本科院校;7:公办本科院校;8:”211“工程院校;9:”985“工程院校;10:双一流院校))"` + firstLog.XueLiLeixing = EducationType + firstLog.YuanXiaoLeiXing = SchoolType overall.CONSTANT_DB_HR.Create(&firstLog) } @@ -1571,35 +1684,35 @@ func (g *GroupParsingData) SecondaryTableUser(info map[int]string) { myInfo.Isdoubleworker = 2 //是否双职工(1:是;2:否)"` g.WorkingCouple(info, false) } - if info[321] == "是" { + if info[320] == "是" { myInfo.Isveterans = 1 //是否为退役军人(1:是;2:否)"` g.EditVeterans(info, true) } else { myInfo.Isveterans = 2 g.EditVeterans(info, false) } - myInfo.Veteransnumber = info[322] - if info[295] != "" { - myInfo.Jobstartdate = overallhandle.ExcelDateToDate(info[295]).Unix() //参加工作日期"` + myInfo.Veteransnumber = info[321] + if info[294] != "" { + myInfo.Jobstartdate = overallhandle.ExcelDateToDate(info[294]).Unix() //参加工作日期"` } //退役证编号"` - if info[297] != "" { - myInfo.Entrydate = overallhandle.ExcelDateToDate(info[297]).Unix() //入职日期"` + if info[296] != "" { + myInfo.Entrydate = overallhandle.ExcelDateToDate(info[296]).Unix() //入职日期"` } // myInfo. Probationperiod = //试用期"` // myInfo. Planformaldate = //预计转正日期"` if info[16] != "" { myInfo.PoliticalOutlook = politiToInt(info[16]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"` } - if info[314] != "" { - myInfo.PoliticalOutlook = politiToInt(info[314]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"` + if info[313] != "" { + myInfo.PoliticalOutlook = politiToInt(info[313]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"` } myInfo.MaritalstatusCn = info[14] //婚姻状况汉字说明"` myInfo.ConstellationingCn = info[21] //星座汉字说明"` myInfo.PoliticalOutlookCn = info[16] //政治面貌汉字说明"` myInfo.HealthCn = info[15] //健康状况中文说明"` // myInfo.NameUsedBefore = //曾用名"` - myInfo.CareerPlanning = info[292] //职业生涯规划"` - myInfo.HelpObtained = info[293] //个人期望从组织获得的帮助"` + myInfo.CareerPlanning = info[291] //职业生涯规划"` + myInfo.HelpObtained = info[292] //个人期望从组织获得的帮助"` myInfo.Hobby = info[22] //爱好"` myInfo.DomicileType = info[17] //户籍类型 @@ -1611,8 +1724,10 @@ func (g *GroupParsingData) SecondaryTableUser(info map[int]string) { } myInfo.MobileShortNumber = info[29] //手机小号 - myInfo.Channel = JoinJobChanel(info[294]) //入职渠道(1:社会招聘;2:校园招聘;3:内部推荐) + myInfo.Channel = JoinJobChanel(info[293]) //入职渠道(1:社会招聘;2:校园招聘;3:内部推荐) myInfo.BloodType = info[20] //血型 + // myInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, myInfo) + overall.CONSTANT_DB_HR.Create(&myInfo) } else { //附属内容存在,进行编辑。 editCont := overallhandle.MapOut() @@ -1643,32 +1758,32 @@ func (g *GroupParsingData) SecondaryTableUser(info map[int]string) { editCont["`isdoubleworker`"] = 2 //是否双职工(1:是;2:否)"` g.WorkingCouple(info, false) } - if info[321] == "是" { + if info[320] == "是" { editCont["`isveterans`"] = 1 //是否为退役军人(1:是;2:否)"` g.EditVeterans(info, true) } else { editCont["`isveterans`"] = 2 g.EditVeterans(info, false) } - editCont["`veteransnumber`"] = info[322] - if info[295] != "" { - editCont["`jobstartdate`"] = overallhandle.ExcelDateToDate(info[295]).Unix() + editCont["`veteransnumber`"] = info[321] + if info[294] != "" { + editCont["`jobstartdate`"] = overallhandle.ExcelDateToDate(info[294]).Unix() } - if info[297] != "" { - editCont["`entrydate`"] = overallhandle.ExcelDateToDate(info[297]).Unix() + if info[296] != "" { + editCont["`entrydate`"] = overallhandle.ExcelDateToDate(info[296]).Unix() } if info[16] != "" { editCont["`political_outlook`"] = politiToInt(info[16]) } - if info[314] != "" { - editCont["`political_outlook`"] = politiToInt(info[314]) + if info[313] != "" { + editCont["`political_outlook`"] = politiToInt(info[313]) } editCont["`maritalstatus_cn`"] = info[14] editCont["`constellationing_cn`"] = info[21] editCont["`political_outlook_cn`"] = info[16] editCont["`health_cn`"] = info[15] - editCont["`career_planning`"] = info[292] - editCont["`help_obtained`"] = info[293] + editCont["`career_planning`"] = info[291] + editCont["`help_obtained`"] = info[292] editCont["`hobby`"] = info[22] editCont["`domicile_type`"] = info[17] if info[26] == "是" { @@ -1679,7 +1794,7 @@ func (g *GroupParsingData) SecondaryTableUser(info map[int]string) { // g.WorkingCouple(info, false) } editCont["`mobileShortNumber`"] = info[29] - editCont["`channel`"] = JoinJobChanel(info[294]) + editCont["`channel`"] = JoinJobChanel(info[293]) editCont["`bloodType`"] = info[20] editCont["`time`"] = time.Now().Unix() myInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editCont) @@ -1705,7 +1820,7 @@ func (g *GroupParsingData) SecondaryTableUser(info map[int]string) { # */ func (g *GroupParsingData) EditVeterans(info map[int]string, isTrue bool) { - if info[322] != "" { + if info[321] != "" { var veteransInfo models.Veterans err := veteransInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey}) // fmt.Printf("退役军人:%v\n%v\n", err, veteransInfo) @@ -1718,15 +1833,15 @@ func (g *GroupParsingData) EditVeterans(info map[int]string, isTrue bool) { veteransInfo.IsRetire = 2 //5是否为退役军人(1:是;2:否)"` } - veteransInfo.RetireNumber = info[322] //mment:退役证编号"` - if info[323] != "" { - veteransInfo.JoinTime = overallhandle.ExcelDateToDate(info[323]).Unix() //ult:入伍时间"` + veteransInfo.RetireNumber = info[321] //mment:退役证编号"` + if info[322] != "" { + veteransInfo.JoinTime = overallhandle.ExcelDateToDate(info[322]).Unix() //ult:入伍时间"` } - if info[324] != "" { - veteransInfo.RetireTime = overallhandle.ExcelDateToDate(info[324]).Unix() //default:退伍时间"` + if info[323] != "" { + veteransInfo.RetireTime = overallhandle.ExcelDateToDate(info[323]).Unix() //default:退伍时间"` } - veteransInfo.ArmyUnits = info[326] //参军单位"` - veteransInfo.TypesOfSoldiers = info[327] //5) ;comment:兵种"` + veteransInfo.ArmyUnits = info[325] //参军单位"` + veteransInfo.TypesOfSoldiers = info[326] //5) ;comment:兵种"` veteransInfo.Time = time.Now().Unix() //t null;comment:创建时间"` overall.CONSTANT_DB_HR.Create(&veteransInfo) @@ -1737,15 +1852,15 @@ func (g *GroupParsingData) EditVeterans(info map[int]string, isTrue bool) { } else { editCont["isRetire"] = 2 } - editCont["retireNumber"] = info[322] - if info[323] != "" { - editCont["joinTime"] = overallhandle.ExcelDateToDate(info[323]).Unix() //ult:入伍时间"` + editCont["retireNumber"] = info[312] + if info[322] != "" { + editCont["joinTime"] = overallhandle.ExcelDateToDate(info[322]).Unix() //ult:入伍时间"` } - if info[324] != "" { - editCont["retireTime"] = overallhandle.ExcelDateToDate(info[324]).Unix() //default:退伍时间"` + if info[323] != "" { + editCont["retireTime"] = overallhandle.ExcelDateToDate(info[323]).Unix() //default:退伍时间"` } - editCont["armyUnits"] = info[326] - editCont["typesOfSoldiers"] = info[327] + editCont["armyUnits"] = info[325] + editCont["typesOfSoldiers"] = info[326] editCont["time"] = time.Now().Unix() veteransInfo.EiteCont(map[string]interface{}{"`userkey`": g.UserKey}, editCont) } @@ -1771,62 +1886,62 @@ func (g *GroupParsingData) EditVeterans(info map[int]string, isTrue bool) { */ func (g *GroupParsingData) PoliticalOutlookEdit(info map[int]string) { defer synPros.Done() - if info[314] != "" { + if info[313] != "" { var polOutInfo models.PoliticalIdentity err := polOutInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey}) if err != nil { //不存在,新增 - if info[315] != "" || info[316] != "" { - polOutInfo.Userkey = g.UserKey //员工唯一识别符;"` - polOutInfo.PoliticalOutlook = politiToInt(info[314]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"` - if info[315] != "" { - polOutInfo.JoinTime = overallhandle.ExcelDateToDate(info[315]).Unix() //加入时间"` - } - polOutInfo.Branch = info[316] //所在党支部"` - polOutInfo.Bosition = info[317] //党内职务"` - polOutInfo.JoiningParty = info[318] //入党时所在单位"` - if info[319] == "是" { - polOutInfo.SwitchToClass = 1 //组织关系是否转入(1:是;2:否)"` - } else { - polOutInfo.SwitchToClass = 2 //组织关系是否转入(1:是;2:否)"` - } - if info[320] != "" { - polOutInfo.SwitchToTime = overallhandle.ExcelDateToDate(info[320]).Unix() //组织关系转入时间"` - } - polOutInfo.Time = time.Now().Unix() //创建时间"` - overall.CONSTANT_DB_HR.Create(&polOutInfo) + // if info[315] != "" || info[316] != "" { + polOutInfo.Userkey = g.UserKey //员工唯一识别符;"` + polOutInfo.PoliticalOutlook = politiToInt(info[313]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"` + if info[314] != "" { + polOutInfo.JoinTime = overallhandle.ExcelDateToDate(info[314]).Unix() //加入时间"` } + polOutInfo.Branch = info[315] //所在党支部"` + polOutInfo.Bosition = info[316] //党内职务"` + polOutInfo.JoiningParty = info[317] //入党时所在单位"` + if info[318] == "是" { + polOutInfo.SwitchToClass = 1 //组织关系是否转入(1:是;2:否)"` + } else { + polOutInfo.SwitchToClass = 2 //组织关系是否转入(1:是;2:否)"` + } + if info[319] != "" { + polOutInfo.SwitchToTime = overallhandle.ExcelDateToDate(info[319]).Unix() //组织关系转入时间"` + } + polOutInfo.Time = time.Now().Unix() //创建时间"` + overall.CONSTANT_DB_HR.Create(&polOutInfo) + // } } else { editCont := overallhandle.MapOut() - if info[314] != "" { - poloutName := politiToInt(info[314]) + if info[313] != "" { + poloutName := politiToInt(info[313]) if poloutName != polOutInfo.PoliticalOutlook { editCont["`political_outlook`"] = poloutName } } - if info[315] != "" { - joinTimeVal := overallhandle.ExcelDateToDate(info[315]).Unix() + if info[314] != "" { + joinTimeVal := overallhandle.ExcelDateToDate(info[314]).Unix() if joinTimeVal != polOutInfo.JoinTime { editCont["`joinTime`"] = joinTimeVal } } - if info[316] != "" && info[316] != polOutInfo.Branch { - editCont["`branch`"] = info[316] + if info[315] != "" && info[315] != polOutInfo.Branch { + editCont["`branch`"] = info[315] } - if info[317] != "" && info[317] != polOutInfo.Bosition { - editCont["`position`"] = info[317] + if info[316] != "" && info[316] != polOutInfo.Bosition { + editCont["`position`"] = info[316] } - if info[318] != "" && info[318] != polOutInfo.JoiningParty { - editCont["`joiningParty`"] = info[318] + if info[317] != "" && info[317] != polOutInfo.JoiningParty { + editCont["`joiningParty`"] = info[317] } zhuan := 2 - if info[319] == "是" { + if info[318] == "是" { zhuan = 1 } if zhuan != polOutInfo.SwitchToClass { editCont["`switchToClass`"] = zhuan } - if info[320] != "" { - switchTimeVal := overallhandle.ExcelDateToDate(info[320]).Unix() + if info[319] != "" { + switchTimeVal := overallhandle.ExcelDateToDate(info[319]).Unix() if switchTimeVal != polOutInfo.SwitchToTime { editCont["`switchToTime`"] = switchTimeVal } @@ -1986,7 +2101,15 @@ func GetMyPositisName(name string, orgId int64) (posistId, dutiesId int64, isTru sunOrg.Id = append(sunOrg.Id, orgId) var posistInfo models.Position err := overall.CONSTANT_DB_HR.Model(&models.Position{}).Select("`id`,`person_in_charge`,`duties`").Where("`name` LIKE ? AND `administrative_organization` IN ?", "%"+name+"%", sunOrg.Id).Find(&posistInfo).Error - if err != nil { + // fmt.Printf("职务---》%v---》%v\n", err, posistInfo) + if err != nil || posistInfo.Id == 0 { + newPoster := WriteNewPost(name, orgId) + posistId = newPoster.Id + dutiesId = newPoster.Duties + isTrue = newPoster.PersonInCharge + if newPoster.PersonInCharge == 0 { + isTrue = 2 + } return } posistId = posistInfo.Id @@ -1997,3 +2120,124 @@ func GetMyPositisName(name string, orgId int64) (posistId, dutiesId int64, isTru } return } + +/* +* +@ 作者: 秦东 +@ 时间: 2024-10-30 10:21:28 +@ 功能: 写入新的岗位 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func WriteNewPost(name string, orgId int64) models.Position { + + supId, _ := GetFasterPostId(orgId) + _, _, departmentId, _, _ := overallhandle.GetOrgStructure(orgId) + var posistInfo models.Position + posistInfo.Number = overallhandle.StringToPinYin(8, name, "", "") //职位编码"` + posistInfo.Name = name //职位名称"` + posistInfo.Duties = GetDuties(departmentId) //职务"` + posistInfo.Time = time.Now().Unix() //创建时间"` + posistInfo.State = 1 //状态(1:启用;2:禁用;3:删除)"` + posistInfo.AdministrativeOrganization = orgId //归属行政组织"` + posistInfo.Superior = supId //上级ID"` + posistInfo.PersonInCharge = 2 //是否为本部门负责人(1:是;2:否)"` + posistInfo.Department = departmentId //部门"` + posistInfo.MenuPermit = "" //菜单许可证"` + posistInfo.ButtonPermit = "" //按钮许可"` + posistInfo.School = 0 //部门"` + posistInfo.KingdeeId = "" //金蝶对照ID"` + posistInfo.OrgList = "" // + posistInfo.UnifyId = 0 //统一名称"` + overall.CONSTANT_DB_HR.Create(&posistInfo) + return posistInfo +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-10-30 13:19:35 +@ 功能: 获取职务 +*/ +func GetDuties(departId int64) (dutisId int64) { + dutisId = 3 + var dutisIdAry []int64 + overall.CONSTANT_DB_HR.Model(&models.Position{}).Select("`duties`").Where(" `department` = ?", departId).Find(&dutisIdAry) + if len(dutisIdAry) > 0 { + var dutAry []models.Duties + overall.CONSTANT_DB_HR.Model(&models.Duties{}).Select("`id`,`weight`").Where(" `id` IN ?", dutisIdAry).Order("`id` DESC").Find(&dutAry) + if len(dutAry) > 0 { + sort.Slice(dutAry, func(i, j int) bool { + return dutAry[i].Weight < dutAry[j].Weight + }) + dutisId = dutAry[0].Id + } + + } + return dutisId +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-10-29 16:00:05 +@ 功能: 获取上级职务 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func GetFasterPostId(orgId int64) (isSuperiorId, dutiesId int64) { + //查询平级职务 + var pingJiPost []models.Position + overall.CONSTANT_DB_HR.Model(&models.Position{}).Select("`id`,`superior`,`person_in_charge`,`duties`").Where("`state` = 1 AND `administrative_organization` = ?", orgId).Find(&pingJiPost) + if len(pingJiPost) < 1 { + //获取上级行政组织 + var superiorId int64 + err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`superior`").Where("`id` = ?", orgId).First(&superiorId).Error + if err != nil { + superiorId = 313 + } + GetFasterPostId(superiorId) + } + isTrue := true + var allPostList []PositionlrInfo + for _, v := range pingJiPost { + if v.PersonInCharge == 1 { + isTrue = false + isSuperiorId = v.Id + } + var postCont PositionlrInfo + postCont.Id = v.Id + var dutisInfor models.Duties + dutisInfor.GetCont(map[string]interface{}{"`id`": v.Duties}, "`weight`") + postCont.DutId = v.Duties + postCont.Weight = dutisInfor.Weight + allPostList = append(allPostList, postCont) + } + if isTrue { + if len(allPostList) > 0 { + sort.Slice(allPostList, func(i, j int) bool { + return allPostList[i].Weight < allPostList[j].Weight + }) + isSuperiorId = allPostList[0].Id + } + } + return +} diff --git a/api/version1/personnelapi/userarchives.go b/api/version1/personnelapi/userarchives.go index 0c69150..7b88916 100644 --- a/api/version1/personnelapi/userarchives.go +++ b/api/version1/personnelapi/userarchives.go @@ -15,6 +15,149 @@ import ( "github.com/gin-gonic/gin" ) +/* +* +@ 作者: 秦东 +@ 时间: 2024-06-21 14:27:27 +@ 功能: 根据Key获取个人档案 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *StaffApi) GetPeopleKey(c *gin.Context) { + var requestData overallhandle.ConstId + err := c.ShouldBindJSON(&requestData) + if err != nil { + overallhandle.Result(10001, requestData, c) + return + } + if requestData.Id == "" { + overallhandle.Result(10001, requestData, c, "未知人员!不可查询信息") + return + } + var myInfo models.ManCont + err = myInfo.GetCont(map[string]interface{}{"`key`": requestData.Id}) + if err != nil { + overallhandle.Result(10001, err, c) + return + } + saveInfo := overallhandle.MapOut() + structValue := reflect.ValueOf(myInfo) + structType := structValue.Type() + for i := 0; i < structValue.NumField(); i++ { + fieldValue := structValue.Field(i) + fieldType := structType.Field(i) + saveInfo[fieldType.Name] = fieldValue.Interface() + } + if myInfo.Birthday != 0 { + saveInfo["birthdayTime"] = overallhandle.UnixTimeToDay(myInfo.Birthday, 14) //生日 + } + if myInfo.Entrydate != 0 { + saveInfo["EntrydateTime"] = overallhandle.UnixTimeToDay(myInfo.Entrydate, 14) //入职日期 + } + //部门 + if myInfo.MainDeparment != 0 { + var demperMainInfos models.AdministrativeOrganization + demperMainInfos.GetCont(map[string]interface{}{"`id`": myInfo.MainDeparment}, "`name`") + saveInfo["MainDeparmentName"] = demperMainInfos.Name + } + //岗位 + if myInfo.AdminOrg != 0 { + var adminOrg models.AdministrativeOrganization + adminOrg.GetCont(map[string]interface{}{"`id`": myInfo.AdminOrg}, "`name`") + saveInfo["AdminOrgName"] = adminOrg.Name + } + //职务 + if myInfo.Position != 0 { + var postisInfo models.Position + postisInfo.GetCont(map[string]interface{}{"`id`": myInfo.Position}, "`name`", "`person_in_charge`") + saveInfo["PositionName"] = postisInfo.Name + saveInfo["PersonInCharge"] = postisInfo.PersonInCharge + } + if myInfo.Isdoubleworker == 1 { + var doubleWorkerInfo models.DoubleWorker + doubleWorkerInfo.GetCont(map[string]interface{}{"`number`": myInfo.Number, "`state`": 1}, "`name`", "`company`", "`department`", "`position`") + saveInfo["WorkCompany"] = fmt.Sprintf("%v%v%v%v", doubleWorkerInfo.Name, doubleWorkerInfo.Company, doubleWorkerInfo.Department, doubleWorkerInfo.Position) + } else { + saveInfo["WorkCompany"] = "" + } + saveInfo["GenderName"] = overallhandle.GenderStatus(int64(myInfo.Gender)) + saveInfo["ConstellationName"] = overallhandle.StarSign(int64(myInfo.Constellation)) + saveInfo["PolitOutlook"] = overallhandle.PoliticalIdentity(int64(myInfo.PoliticalOutlook)) + saveInfo["Maristatus"] = overallhandle.MaritalStatus(int64(myInfo.Maritalstatus)) + //教育经历 + synPro.Add(1) + go func() { + saveInfo["EducationalExperience"] = UserEducationalExperience(myInfo.Key) + }() + //工作履历 + synPro.Add(1) + go func() { + saveInfo["ExternalWork"] = getWorkHistoryList(myInfo.Key) //工作履历 + }() + //集团内工作履历 + synPro.Add(1) + go func() { + saveInfo["InternalWork"] = getGroupWorkHistoryList(myInfo.Key) //工作履历 + }() + //职称证书 + synPro.Add(1) + go func() { + AcademicTitle := GainCertificateHonors(myInfo.Key, 4) + saveInfo["AcademicTitle"] = strings.Join(AcademicTitle, ",") //工作履历 + }() + //资格证书 + synPro.Add(1) + go func() { + Diploma := GainCertificateHonorsBook(myInfo.Key, 4) + saveInfo["Diploma"] = strings.Join(Diploma, ",") //工作履历 + }() + + currentTime := time.Now() + years := currentTime.Year() - 2 + //绩效成绩 Performance score + synPro.Add(1) + go func() { + saveInfo["Meritslog"] = GainTimeLangMeritslog(myInfo.Key, years, 2) //工作履历 + }() + //获奖情况 + synPro.Add(1) + go func() { + saveInfo["Rewards"] = GainRewardsPenalties(myInfo.Key, years, 2, 1) //工作履历 + }() + //惩罚情况 + synPro.Add(1) + go func() { + saveInfo["Penalties"] = GainRewardsPenalties(myInfo.Key, years, 2, 2) //工作履历 + }() + //性格社彩 + var myColor personalitycolor.Charcolortest + errColor := myColor.GetCont(map[string]interface{}{"`c_states`": 1, "`c_number`": myInfo.Number}, "`c_id`") + if errColor != nil { + saveInfo["isColorTrue"] = 2 + } else { + saveInfo["isColorTrue"] = 1 + } + // synPro.Add(1) + // go func() { + // xgsc := GainCharacterColor(myInfo.Number) + // // fmt.Printf("xgsc:%v\n", xgsc) + // saveInfo["CharacterColour"] = strings.Join(xgsc.TestNumber, "、") //工作履历 + // saveInfo["ColourNameList"] = xgsc.TestNumber //工作履历 + // saveInfo["RadarColour"] = xgsc.ColorMap + // }() + synPro.Wait() + overallhandle.Result(0, saveInfo, c) +} + /* * @ 作者: 秦东 @@ -52,13 +195,23 @@ func (s *StaffApi) PersonnelFiles(c *gin.Context) { saveInfo := overallhandle.MapOut() structValue := reflect.ValueOf(myInfo) structType := structValue.Type() + saveInfo["excel_template"] = myInfo.ExcelTemplate for i := 0; i < structValue.NumField(); i++ { fieldValue := structValue.Field(i) fieldType := structType.Field(i) saveInfo[fieldType.Name] = fieldValue.Interface() } if myInfo.Birthday != 0 { - saveInfo["birthdayTime"] = overallhandle.UnixTimeToDay(myInfo.Birthday, 14) //生日 + birthday := overallhandle.UnixTimeToDay(myInfo.Birthday, 14) //生日 + saveInfo["birthdayTime"] = birthday + saveInfo["age"] = overallhandle.GetAgeByBirthday(birthday, 1) + + } else { + if myInfo.Idcardno != "" { + birthday := overallhandle.GetBirthday(myInfo.Idcardno) + saveInfo["birthdayTime"] = birthday + saveInfo["age"] = overallhandle.GetAgeByBirthday(birthday) + } } if myInfo.Entrydate != 0 { saveInfo["EntrydateTime"] = overallhandle.UnixTimeToDay(myInfo.Entrydate, 14) //入职日期 @@ -93,6 +246,7 @@ func (s *StaffApi) PersonnelFiles(c *gin.Context) { saveInfo["ConstellationName"] = overallhandle.StarSign(int64(myInfo.Constellation)) saveInfo["PolitOutlook"] = overallhandle.PoliticalIdentity(int64(myInfo.PoliticalOutlook)) saveInfo["Maristatus"] = overallhandle.MaritalStatus(int64(myInfo.Maritalstatus)) + saveInfo["KeyStr"] = strconv.FormatInt(myInfo.Key, 10) //教育经历 synPro.Add(1) go func() { @@ -122,7 +276,7 @@ func (s *StaffApi) PersonnelFiles(c *gin.Context) { }() currentTime := time.Now() - years := currentTime.Year() - 2 + years := currentTime.Year() - 1 //绩效成绩 Performance score synPro.Add(1) go func() { @@ -138,14 +292,65 @@ func (s *StaffApi) PersonnelFiles(c *gin.Context) { go func() { saveInfo["Penalties"] = GainRewardsPenalties(myInfo.Key, years, 2, 2) //工作履历 }() + //家庭成员 + synPro.Add(1) + go func() { + saveInfo["familyMembers"] = FamilyMembers(myInfo.Key) //工作履历 + }() //性格社彩 - var myColor personalitycolor.Charcolortest - errColor := myColor.GetCont(map[string]interface{}{"`c_states`": 1, "`c_number`": requestData.Number}, "`c_id`") - if errColor != nil { - saveInfo["isColorTrue"] = 2 + // var myColor personalitycolor.Charcolortest + // errColor := myColor.GetCont(map[string]interface{}{"`c_states`": 1, "`c_number`": requestData.Number}, "`c_id`", "`c_class`") + // if errColor != nil { + // saveInfo["isColorTrue"] = 2 + // } else { + // if myColor.Class == 10000002 { + // saveInfo["isColorTrue"] = 3 + // } else { + // saveInfo["isColorTrue"] = 1 + // } + // } + + var personalityTest []personalitycolor.Charcolortest + overall.CONSTANT_Personality_Color.Where("`c_states` = 1 AND `c_number` = ?", requestData.Number).Find(&personalityTest) + if len(personalityTest) > 0 { + rongXin := false + gaoKe := false + for _, v := range personalityTest { + if v.Class == 10000002 { + rongXin = true + } + if v.Class == 10000001 { + gaoKe = true + } + } + if rongXin && gaoKe { + saveInfo["isColorTrue"] = 4 + } else if rongXin { + saveInfo["isColorTrue"] = 3 + } else { + saveInfo["isColorTrue"] = 1 + } } else { - saveInfo["isColorTrue"] = 1 + if myInfo.ExcelTemplate == 296 { + var rcpdInfo models.TalentInventory + err = rcpdInfo.GetCont(map[string]interface{}{"`userKey`": myInfo.Key}, "`userTypes`") + if err != nil { + saveInfo["isColorTrue"] = 2 + } else { + if rcpdInfo.UserTypes != "" { + saveInfo["isColorTrue"] = 5 + saveInfo["userTypes"] = rcpdInfo.UserTypes + } else { + saveInfo["isColorTrue"] = 2 + } + } + + } else { + saveInfo["isColorTrue"] = 2 + } + } + // synPro.Add(1) // go func() { // xgsc := GainCharacterColor(myInfo.Number) @@ -158,6 +363,29 @@ func (s *StaffApi) PersonnelFiles(c *gin.Context) { overallhandle.Result(0, saveInfo, c) } +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-09 10:12:01 +@ 功能: 家庭成员 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func FamilyMembers(userKey int64) (list []models.FamilyMembers) { + defer synPro.Done() + overall.CONSTANT_DB_HR.Model(&models.FamilyMembers{}).Where("`state` = 1 AND `key` = ?", userKey).Find(&list) + return +} + /* * @ 作者: 秦东 @@ -436,6 +664,7 @@ func GainRewardsPenalties(userKey int64, years, duration, class int) map[string] timeValStr := strconv.Itoa(years) sendData[timeValStr] = allScore } + fmt.Printf("奖惩记录55555: %v\n", sendData) return sendData } @@ -489,6 +718,7 @@ func GainTimeLangMeritslog(userKey int64, years, duration int) map[string]interf overall.CONSTANT_DB_HR.Model(&models.Meritslog{}).Select("SUM(`score`) as `scoresum`").Where("`status` = 1 AND `userkey` = ? AND `years` = ?", userKey, years).Find(&allScore) sendData[timeValStr] = allScore } + fmt.Printf("绩效成绩%v\n", sendData) return sendData } @@ -569,7 +799,12 @@ func UserEducationalExperience(num int64) (eduExper []educatExp) { dwManCont.GraduationSchool = v.GraduationSchool //毕业学校 dwManCont.Subject = v.Subject //专业 dwManCont.Education = v.Education //学历 - dwManCont.EducationName = overallhandle.EducationLevel(int64(v.Education)) + if v.XueLi != "" { + dwManCont.EducationName = v.XueLi + } else { + dwManCont.EducationName = overallhandle.EducationLevel(int64(v.Education)) + } + if v.AdmissionTime != 0 { dwManCont.AdmissionTime = overallhandle.UnixTimeToDay(v.AdmissionTime, 14) //入学时间 } diff --git a/api/version1/shiyan/shiyan.go b/api/version1/shiyan/shiyan.go index f308d1f..2943ac5 100644 --- a/api/version1/shiyan/shiyan.go +++ b/api/version1/shiyan/shiyan.go @@ -4,10 +4,12 @@ import ( "fmt" "hr_server/api/jindie_docking/dockingorganization" "hr_server/api/version1/personnelapi" + "hr_server/api/version1/workWechat" "hr_server/grocerystore" "hr_server/models" "hr_server/overall" "hr_server/overall/overallhandle" + "strconv" "time" "github.com/gin-gonic/gin" @@ -580,3 +582,92 @@ func (a *ShiYan) WriteToken(c *gin.Context) { fmt.Printf("redisMyContKey------Login----->%v----->%v\n", redisMyContKey, shjd) overallhandle.Result(0, saveData, c) } + +func (s *ShiYan) WorkWechat(c *gin.Context) { + var requestData overallhandle.ConstId + err := c.ShouldBindJSON(&requestData) + fmt.Printf("err--1->%v\n", err) + if err != nil { + overallhandle.Result(100, err, c) + return + } + // token := workWechat.GainWechatTokenUnify() + // // md5Token := "WorkWechatUpdatePeopleInfo" + // // // errWechat := workWechat.UpdateWechatOrgPeople(51, "txl", md5Token, 1) + // var orgMap workWechat.WechatOrg + // orgMap.OrgId = 51 + // orgMap.Token = token + // // orgList, err := workWechat.GainWechatDepartment(51, "txl", md5Token, 1) + // orgMap.GainWechatOrgList() + // if orgMap.NewToekn { + // token = orgMap.Token + // } + // orgMap.GainOrgPeopleList() + // sendMap := make(map[string]interface{}) + // sendMap["token"] = token + // sendMap["orgMap"] = orgMap + // sendMap["jiegou"] = jiegou + // sendMap["newToken"] = newToken + + // if err != nil { + // overallhandle.Result(0, sendMap, c) + // return + // } + //获取行政组织下的人员信息 + // var orgPeople workWechat.WechatOrgPeole + // for _, v := range orgMap.OrgList { + // synPro.Add(1) + // // go GainOrgManAry(int64(v.Id), "txl", md5Token, 1) + // go orgPeople.GainOrgPeopleList(v) + // } + // synPro.Wait() + // overallhandle.Result(0, sendMap, c) + idInt, err := strconv.ParseInt(requestData.Id, 10, 64) + fmt.Printf("err--2->%v\n", err) + workWechat.NewTimedTasksForOrgWechat(idInt) + overallhandle.Result(100, err, c) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-02 10:57:08 +@ 功能: 获取去行政组织下的人员信息 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func GainOrgManAry(orgId int64, systemApp, key string, isAgain int) { + defer synPro.Done() + +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-10-30 08:34:40 +@ 功能: 测试获取职务 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (s *ShiYan) GetTestPost(c *gin.Context) { + postId, _ := personnelapi.GetFasterPostId(12) + overallhandle.Result(0, postId, c) +} diff --git a/api/version1/shiyan/全部企业微信行政组织.ini b/api/version1/shiyan/全部企业微信行政组织.ini new file mode 100644 index 0000000..3c7cd3c --- /dev/null +++ b/api/version1/shiyan/全部企业微信行政组织.ini @@ -0,0 +1,12 @@ +{"errcode":0,"errmsg":"ok","department":[{"id":1,"name":"山东恒信集团","parentid":0,"order":100000000,"department_leader":[]},{"id":2,"name":"荣信集团","parentid":1,"order":100000000,"department_leader":[]},{"id":3,"name":"恒信高科","parentid":1,"order":99999000,"department_leader":[]},{"id":4,"name":"恒信生物","parentid":1,"order":99998000,"department_leader":[]},{"id":5,"name":"恒信置业","parentid":1,"order":99997000,"department_leader":[]},{"id":6,"name":"高管","parentid":2,"order":100000000,"department_leader":[]},{"id":7,"name":"办公室","parentid":2,"order":99999000,"department_leader":[]},{"id":8,"name":"人才发展中心","parentid":2,"order":99998000,"department_leader":[]},{"id":9,"name":"企管部","parentid":2,"order":99997000,"department_leader":["WangBin"]},{"id":10,"name":"审计部","parentid":2,"order":99996000,"department_leader":[]},{"id":11,"name":"法律事务部","parentid":2,"order":99995000,"department_leader":["RenYingBin"]},{"id":12,"name":"财务部","parentid":2,"order":99994000,"department_leader":[]},{"id":13,"name":"供应部","parentid":2,"order":99993000,"department_leader":["TianYingQiu"]},{"id":14,"name":"销售部","parentid":2,"order":99992000,"department_leader":[]},{"id":15,"name":"生产计划部","parentid":2,"order":99991000,"department_leader":["YueYang"]},{"id":16,"name":"工程技术 +部","parentid":2,"order":99990000,"department_leader":[]},{"id":17,"name":"基建部","parentid":2,"order":99989000,"department_leader":[]},{"id":18,"name":"安环部","parentid":2,"order":99988000,"department_leader":[]},{"id":19,"name":"保卫部","parentid":2,"order":99987000,"department_leader":[]},{"id":20,"name":"备煤车间","parentid":144,"order":100001000,"department_leader":[]},{"id":21,"name":"化产分厂","parentid":2,"order":99985000,"department_leader":[]},{"id":22,"name":"机焦车间","parentid":144,"order":100000000,"department_leader":[]},{"id":23,"name":"动力分厂","parentid":2,"order":99983000,"department_leader":[]},{"id":24,"name":"甲醇分厂","parentid":2,"order":99982000,"department_leader":[]},{"id":25,"name":"仓储中心","parentid":2,"order":99981000,"department_leader":[]},{"id":26,"name":"物流中心","parentid":2,"order":99980000,"department_leader":[]},{"id":27,"name":"恒信科技","parentid":2,"order":99979000,"department_leader":[]},{"id":28,"name":"恒信新材料","parentid":2,"order":99977000,"department_leader":[]},{"id":29,"name":"高管","parentid":4,"order":100000000,"department_leader":[]},{"id":30,"name":"综合部","parentid":4,"order":99999000,"department_leader":[]},{"id":33,"name":"营销部","parentid":4,"order":99996000,"department_leader":[]},{"id":34,"name":"生产部","parentid":4,"order":99995000,"department_leader":[]},{"id":35,"name":"技术部","parentid":4,"order":99994000,"department_leader":[]},{"id":42,"name":"高管","parentid":5,"order":100000000,"department_leader":[]},{"id":43,"name":"恒信公馆项目部","parentid":5,"order":99999000,"department_leader":[]},{"id":44,"name":"集团高管","parentid":1,"order":100004000,"department_leader":[]},{"id":45,"name":"集团办公室","parentid":1,"order":100003000,"department_leader":[]},{"id":46,"name":"集团财务部","parentid":1,"order":100002000,"department_leader":[]},{"id":47,"name":"集团营销部","parentid":1,"order":100001000,"department_leader":[]},{"id":48,"name":"高管","parentid":3,"order":100000000,"department_leader":[]},{"id":49,"name":"综合办","parentid":3,"order":99999000,"department_leader":["JingXueWan"]},{"id":50,"name":"人资部","parentid":3,"order":99998000,"department_leader":["FanYueSheng"]},{"id":51,"name":"企管部","parentid":3,"order":99997000,"department_leader":["WoBenShanLiang_3"]},{"id":52,"name":"财务部","parentid":3,"order":99996000,"department_leader":["DongWenFang"]},{"id":53,"name":"营销部","parentid":3,"order":99995000,"department_leader":["TianYingQiu"]},{"id":54,"name":"生产部","parentid":3,"order":99994000,"department_leader":["JinHao"]},{"id":55,"name":"质检中心","parentid":3,"order":99986000,"department_leader":["ZhangJinSong"]},{"id":56,"name":"安环部","parentid":3,"order":99992000,"department_leader":["HuYuanFang"]},{"id":57,"name":"保卫部","parentid":3,"order":99995500,"department_leader":["DaAi"]},{"id":59,"name":"化产分厂 +","parentid":3,"order":99989000,"department_leader":["LuoHua"]},{"id":60,"name":"动力分厂","parentid":3,"order":99986500,"department_leader":["XuChao_1"]},{"id":61,"name":"甲醇分厂","parentid":3,"order":99987000,"department_leader":[]},{"id":73,"name":"仓储中心","parentid":3,"order":99985000,"department_leader":["XinPing"]},{"id":76,"name":"物流中心","parentid":3,"order":99984000,"department_leader":["GuoCheng","WanMeiShengHuo"]},{"id":77,"name":"食堂","parentid":49,"order":100000000,"department_leader":["YiQieKaoZiJi"]},{"id":78,"name":"车班","parentid":49,"order":99999000,"department_leader":[]},{"id":79,"name":"办公室","parentid":49,"order":100001000,"department_leader":[]},{"id":81,"name":"IT","parentid":51,"order":99999000,"department_leader":[]},{"id":82,"name":"1号餐厅(创新中心)","parentid":77,"order":100000000,"department_leader":[]},{"id":83,"name":"2号餐厅(厂区)","parentid":77,"order":99999000,"department_leader":[]},{"id":85,"name":"鼓冷工段","parentid":59,"order":100000000,"department_leader":[]},{"id":86,"name":"HPF脱硫工段","parentid":59,"order":99999000,"department_leader":[]},{"id":87,"name":"硫铵工段","parentid":59,"order":99998000,"department_leader":["WangHongFei--HuaChan--ZhongKong"]},{"id":88,"name":"粗苯工段","parentid":59,"order":99997000,"department_leader":[]},{"id":89,"name":"循 +环水工段","parentid":59,"order":99996000,"department_leader":["MaGuoHua"]},{"id":90,"name":"电气工段","parentid":181,"order":100000000,"department_leader":[]},{"id":92,"name":"中控室","parentid":59,"order":100001000,"department_leader":[]},{"id":91,"name":"锅炉工段","parentid":60,"order":99999000,"department_leader":[]},{"id":93,"name":"污水工段","parentid":60,"order":99998000,"department_leader":[]},{"id":94,"name":"中水工段","parentid":60,"order":99997000,"department_leader":[]},{"id":95,"name":"高科厂区","parentid":201,"order":100000000,"department_leader":[]},{"id":96,"name":"仪表工段","parentid":181,"order":99999000,"department_leader":[]},{"id":97,"name":"油库工段","parentid":59,"order":99996500,"department_leader":[]},{"id":98,"name":"煤焦","parentid":55,"order":100000000,"department_leader":[]},{"id":99,"name":"化产品","parentid":55,"order":99999000,"department_leader":[]},{"id":100,"name":"计量中心","parentid":54,"order":99998000,"department_leader":["XinPing"]},{"id":101,"name":"设备专业","parentid":54,"order":100000000,"department_leader":["HeXieZhongGuo"]},{"id":103,"name":"生产调度","parentid":54,"order":100001000,"department_leader":[]},{"id":118,"name":"恒信荟荃","parentid":2,"order":99976000,"department_leader":[]},{"id":121,"name":"主装置工段","parentid":61,"order":99998000,"department_leader":[]},{"id":122,"name":"压缩工段","parentid":61,"order":99997000,"department_leader":[]},{"id":123,"name":"空分工段","parentid":61,"order":99996000,"department_leader":[]},{"id":124,"name":"装卸站","parentid":61,"order":99995000,"department_leader":[]},{"id":125,"name":"甲醇办公室","parentid":61,"order":99994000,"department_leader":[]},{"id":134,"name":"品保部","parentid":4,"order":99987000,"department_leader":[]},{"id":135,"name":"安环部","parentid":4,"order":99986000,"department_leader":[]},{"id":138,"name":"桃园物业","parentid":5,"order":99998000,"department_leader":[]},{"id":139,"name":"车班","parentid":7,"order":100000000,"department_leader":[]},{"id":140,"name":"纪检部","parentid":2,"order":99986500,"department_leader":[]},{"id":143,"name":"人 +力资源部","parentid":4,"order":99984000,"department_leader":[]},{"id":144,"name":"煤焦分厂","parentid":2,"order":99986000,"department_leader":[]},{"id":145,"name":"技术部","parentid":3,"order":99993500,"department_leader":["Jin"]},{"id":146,"name":"销售","parentid":53,"order":100000000,"department_leader":[]},{"id":147,"name":"供应","parentid":53,"order":99999000,"department_leader":["LiuHui"]},{"id":149,"name":"土建","parentid":145,"order":99999000,"department_leader":[]},{"id":151,"name":"机动队","parentid":57,"order":100000000,"department_leader":[]},{"id":156,"name":"甲班","parentid":76,"order":100000000,"department_leader":[]},{"id":157,"name":"乙班","parentid":76,"order":99999000,"department_leader":[]},{"id":159,"name":"甲班","parentid":57,"order":99999000,"department_leader":[]},{"id":160,"name":"乙班","parentid":57,"order":99998000,"department_leader":[]},{"id":161,"name":"丙班","parentid":57,"order":99997000,"department_leader":[]},{"id":162,"name":"丁班","parentid":57,"order":99996000,"department_leader":[]},{"id":163,"name":"货场","parentid":57,"order":99995000,"department_leader":[]},{"id":166,"name":"接待中心 +","parentid":2,"order":99974000,"department_leader":[]},{"id":167,"name":"质检中心","parentid":2,"order":99973000,"department_leader":[]},{"id":168,"name":"新入职人员待分配","parentid":1,"order":99994000,"department_leader":[]},{"id":169,"name":"二","parentid":19,"order":100000000,"department_leader":[]},{"id":171,"name":"三","parentid":19,"order":99998000,"department_leader":[]},{"id":172,"name":"一","parentid":19,"order":100001000,"department_leader":[]},{"id":173,"name":"四","parentid":19,"order":99996000,"department_leader":[]},{"id":174,"name":"码头","parentid":19,"order":99995000,"department_leader":[]},{"id":175,"name":"六","parentid":19,"order":99995625,"department_leader":[]},{"id":176,"name":"五","parentid":19,"order":99995750,"department_leader":[]},{"id":177,"name":"机动队","parentid":19,"order":99995312,"department_leader":[]},{"id":180,"name":"清洁","parentid":49,"order":99998000,"department_leader":[]},{"id":181,"name":" +电仪分厂","parentid":3,"order":99986250,"department_leader":["SunHeShun"]},{"id":182,"name":"安全部","parentid":56,"order":100000000,"department_leader":[]},{"id":183,"name":"环保部","parentid":56,"order":99999000,"department_leader":[]},{"id":191,"name":"恒信金服","parentid":1,"order":99994500,"department_leader":[]},{"id":192,"name":"业务发展部","parentid":191,"order":100000000,"department_leader":[]},{"id":193,"name":"风险控制部","parentid":191,"order":99999000,"department_leader":[]},{"id":194,"name":"财务部","parentid":191,"order":99998000,"department_leader":[]},{"id":195,"name":"综合管理部","parentid":191,"order":99997000,"department_leader":[]},{"id":196,"name":"高管","parentid":191,"order":100001000,"department_leader":[]},{"id":197,"name":"提盐工段","parentid":60,"order":99992000,"department_leader":[]},{"id":198,"name":"发电运行","parentid":60,"order":99991000,"department_leader":[]},{"id":199,"name":"办公室","parentid":60,"order":99990000,"department_leader":[]},{"id":200,"name":"3号餐厅(铁路货场)","parentid":77,"order":99998000,"department_leader":[]},{"id":201,"name":"玖安工程","parentid":1,"order":99994250,"department_leader":["WangHaiTing"]},{"id":202,"name":"长白","parentid":76,"order":99998000,"department_leader":[]},{"id":203,"name":"荣信厂区","parentid":201,"order":99999000,"department_leader":[]},{"id":204,"name":"综合管理","parentid":9,"order":100000000,"department_leader":[]},{"id":205,"name":"信息化中心","parentid":9,"order":99999000,"department_leader":[]},{"id":206,"name":"生产部装瓶","parentid":34,"order":100000000,"department_leader":["HuaiHuai"]},{"id":207,"name":"生产办公室","parentid":34,"order":99999000,"department_leader":[]},{"id":209,"name":"生 +产部包装","parentid":34,"order":99998000,"department_leader":["XuanLv"]},{"id":210,"name":"生产部生育","parentid":34,"order":99997000,"department_leader":["BaXinAoChengTie"]},{"id":211,"name":"生产部培养","parentid":34,"order":99996000,"department_leader":["keepwatch"]},{"id":212,"name":"生产部接种","parentid":34,"order":99995000,"department_leader":["ZhengZaiShanChu"]},{"id":213,"name":"生产部公用工程","parentid":34,"order":99994000,"department_leader":["JiaYouSanBao"]},{"id":214,"name":"生产部设备","parentid":34,"order":99993000,"department_leader":["HouBuBin"]},{"id":215,"name":"企业宣传","parentid":9,"order":99998000,"department_leader":[]},{"id":216,"name":"仪表","parentid":15,"order":100000000,"department_leader":["WangJingLei"]},{"id":217,"name":"生产工艺","parentid":15,"order":100001000,"department_leader":["YueYang","ZhangMeiRong"]},{"id":218,"name":"备煤甲班","parentid":20,"order":100000000,"department_leader":[]},{"id":219,"name":"备煤乙班","parentid":20,"order":99999000,"department_leader":[]},{"id":220,"name":"备煤丙班","parentid":20,"order":99998000,"department_leader":[]},{"id":221,"name":"备煤丁班","parentid":20,"order":99997000,"department_leader":[]},{"id":227,"name":"厨师","parentid":166,"order":100000000,"department_leader":["ZhangFaXun"]},{"id":228,"name":"面点师","parentid":166,"order":99999000,"department_leader":["PingFanDeShiJie_1"]},{"id":229,"name":"服务","parentid":166,"order":99998000,"department_leader":["fdfed41136abbc4171742dfc9989f666"]},{"id":230,"name":"办公室","parentid":30,"order":100000000,"department_leader":[]},{"id":231,"name":"食堂","parentid":30,"order":99999000,"department_leader":[]},{"id":232,"name":"保洁","parentid":30,"order":99998000,"department_leader":[]},{"id":233,"name":"调控","parentid":35,"order":100000000,"department_leader":[]},{"id":234,"name":"菌种","parentid":35,"order":99999000,"department_leader":[]},{"id":235,"name":"办公室","parentid":19,"order":100002000,"department_leader":[]},{"id":236,"name":"煤料","parentid":20,"order":99996000,"department_leader":[]},{"id":237,"name":"焦场","parentid":20,"order":99995000,"department_leader":[]},{"id":238,"name":"车队","parentid":20,"order":99994000,"department_leader":[]},{"id":239,"name":"电工","parentid":20,"order":99993000,"department_leader":[]},{"id":241,"name":"荟荃生产部","parentid":118,"order":100000000,"department_leader":[]},{"id":242,"name":"荟荃综合办","parentid":118,"order":99999000,"department_leader":[]},{"id":244,"name":"(荣信)干熄焦工段","parentid":22,"order":99999000,"department_leader":["QingHuaDian"]},{"id":245,"name":"电修工段","parentid":22,"order":99998000,"department_leader":["LiuShouBo"]},{"id":246,"name":"余热工段","parentid":22,"order":99997000,"department_leader":["YuCheng"]},{"id":247,"name":"地面站班组","parentid":22,"order":99996000,"department_leader":["HuaLuoQianNianQingKeGu"]},{"id":248,"name":"一期工段","parentid":22,"order":99999500,"department_leader":["skl"]},{"id":249,"name":"二期工段","parentid":22,"order":99999250,"department_leader":["FengYun"]},{"id":250,"name":"焦油车间","parentid":28,"order":100000000,"department_leader":[]},{"id":251,"name":"动力车间","parentid":28,"order":99999000,"department_leader":[]},{"id":252,"name":"针状焦车间","parentid":28,"order":99998000,"department_leader":[]},{"id":253,"name":"机动班组","parentid":20,"order":99991000,"department_leader":[]},{"id":254,"name":"煤焦办公室","parentid":144,"order":100002000,"department_leader":["JieJiaoDeLan"]},{"id":255,"name":"工艺组","parentid":16,"order":99999000,"department_leader":[]},{"id":256,"name":"设备组","parentid":16,"order":99998000,"department_leader":[]},{"id":257,"name":"电仪组","parentid":16,"order":99997000,"department_leader":[]},{"id":258,"name":"保卫部","parentid":4,"order":99983000,"department_leader":[]},{"id":259,"name":"综合办","parentid":28,"order":99997000,"department_leader":[]},{"id":260,"name":"动力锅炉工段","parentid":23,"order":100000000,"department_leader":[]},{"id":261,"name":"安全科","parentid":28,"order":99996000,"department_leader":[]},{"id":262,"name":"动力电气工段","parentid":23,"order":99999000,"department_leader":[]},{"id":263,"name":"动力余热发电工段","parentid":23,"order":99998000,"department_leader":[]},{"id":264,"name":"动力污水工段","parentid":23,"order":99997000,"department_leader":[]},{"id":265,"name":"动力除盐水工段","parentid":23,"order":99996000,"department_leader":[]},{"id":266,"name":"动力中水工段","parentid":23,"order":99995000,"department_leader":[]},{"id":267,"name":"鼓冷工段","parentid":21,"order":100000000,"department_leader":[]},{"id":268,"name":"脱硫工段","parentid":21,"order":99999000,"department_leader":[]},{"id":269,"name":"硫铵工段","parentid":21,"order":99998000,"department_leader":[]},{"id":270,"name":"粗苯工段","parentid":21,"order":99997000,"department_leader":[]},{"id":271,"name":"精脱硫工段","parentid":21,"order":99996000,"department_leader":[]},{"id":272,"name":"副盐工段 +","parentid":21,"order":99995000,"department_leader":[]},{"id":273,"name":"中控室","parentid":21,"order":100001000,"department_leader":[]},{"id":275,"name":"动力循环水站","parentid":23,"order":99993000,"department_leader":[]},{"id":276,"name":"动力办公室","parentid":23,"order":99992000,"department_leader":[]},{"id":278,"name":"电气维修","parentid":21,"order":99993000,"department_leader":[]},{"id":279,"name":"分厂办公室","parentid":21,"order":100002000,"department_leader":[]},{"id":281,"name":"科技质检","parentid":167,"order":99999000,"department_leader":["GaoJingJing","XianXiaSuiFeng"]},{"id":282,"name":"新材料质检","parentid":167,"order":99998000,"department_leader":["LiuYuanYuan"]},{"id":288,"name":"恒信科技仪表工段","parentid":27,"order":100000000,"department_leader":["YingZi_1"]},{"id":289,"name":"恒信科技电气工段","parentid":27,"order":99999000,"department_leader":["LiuZhiDan"]},{"id":290,"name":"荣信质检","parentid":167,"order":99992000,"department_leader":[]},{"id":291,"name":"煤焦分析","parentid":290,"order":100000000,"department_leader":["XiaoGuanZi"]},{"id":292,"name":"化产品分析","parentid":290,"order":99999000,"department_leader":["znhionug"]},{"id":293,"name":"采制样","parentid":290,"order":99998000,"department_leader":["WangZhe","1da4508013cd8aa0ce343402ddedd3ae","WangZai","cc","CongBuXiao"]},{"id":294,"name":"质检办公室","parentid":167,"order":99991000,"department_leader":["GaoYanLiang","LiXianXian"]},{"id":295,"name":"恒信科技维修工段","parentid":27,"order":99998000,"department_leader":[]},{"id":296,"name":"恒信科技办公室","parentid":27,"order":99997000,"department_leader":[]},{"id":297,"name":"恒信科技产品精制工段","parentid":27,"order":99996000,"department_leader":["MaoMaoChong"]},{"id":298,"name":"恒信科技苯加氢工段","parentid":27,"order":99995000,"department_leader":["GaoHan"]},{"id":299,"name":"恒信科技蒽油加氢工段","parentid":27,"order":99994000,"department_leader":[]},{"id":300,"name":"恒信科技辅运工段","parentid":27,"order":99993000,"department_leader":[]},{"id":302,"name":"客房部","parentid":166,"order":99997000,"department_leader":[]},{"id":303,"name":"新入职","parentid":28,"order":99995000,"department_leader":[]},{"id":304,"name":"新员工","parentid":21,"order":99992000,"department_leader":[]},{"id":305,"name":"恒 +信科技新入职","parentid":27,"order":99992000,"department_leader":[]},{"id":306,"name":"备煤车间","parentid":3,"order":99989750,"department_leader":["MaYunYong","TianZhiJiaoZi"]},{"id":307,"name":"机焦车间","parentid":3,"order":99989375,"department_leader":["SanHuiYi"]},{"id":308,"name":"单种煤工段","parentid":306,"order":100000000,"department_leader":[]},{"id":309,"name":"配煤 +工段","parentid":306,"order":99999000,"department_leader":[]},{"id":310,"name":"运焦工段","parentid":306,"order":99998000,"department_leader":[]},{"id":311,"name":"焦场工段","parentid":306,"order":99997000,"department_leader":[]},{"id":312,"name":"机运车队","parentid":306,"order":99996000,"department_leader":[]},{"id":313,"name":"办公室","parentid":306,"order":99995000,"department_leader":[]},{"id":314,"name":"清洁工段","parentid":306,"order":99994000,"department_leader":[]},{"id":315,"name":"生产工段","parentid":306,"order":99993000,"department_leader":[]},{"id":316,"name":"生产工段","parentid":307,"order":100000000,"department_leader":[]},{"id":317,"name":"节能环保工段","parentid":307,"order":99999000,"department_leader":[]},{"id":318,"name":"热调 +工段","parentid":307,"order":99998000,"department_leader":[]},{"id":319,"name":"干熄焦工段","parentid":307,"order":99998500,"department_leader":[]},{"id":320,"name":"办公室","parentid":307,"order":99996000,"department_leader":[]},{"id":321,"name":"110kV变电站","parentid":181,"order":99998000,"department_leader":[]},{"id":322,"name":"二级培训新员工","parentid":19,"order":99994000,"department_leader":[]},{"id":323,"name":"乙醇项目组","parentid":16,"order":99996000,"department_leader":[]},{"id":324,"name":"综合管理","parentid":51,"order":100001000,"department_leader":[]},{"id":325,"name":"暂调乙醇项目人员","parentid":27,"order":99991000,"department_leader":[]},{"id":326,"name":"中碳氢能源","parentid":3,"order":99983000,"department_leader":["SheDe"]},{"id":327,"name":"安全科","parentid":326,"order":100000000,"department_leader":[]},{"id":328,"name":"生产科","parentid":326,"order":99999000,"department_leader":[]},{"id":329,"name":"岗监办","parentid":56,"order":99998000,"department_leader":[]}]} \ No newline at end of file diff --git a/api/version1/workWechat/typeApi.go b/api/version1/workWechat/typeApi.go index 8482bca..d4aedde 100644 --- a/api/version1/workWechat/typeApi.go +++ b/api/version1/workWechat/typeApi.go @@ -63,3 +63,16 @@ type XmlMsgUpdateCont struct { Event string `xml:"Event" json:"Event"` EventKey string `xml:"EventKey" json:"EventKey"` } + +type WechatOrg struct { + OrgId int64 + Token string + NewToekn bool + OrgList []WechatDepartmentInfo +} + +type WechatOrgPeole struct { + Token string + NewToekn bool + UserList []WechatUserList `json:"userlist"` +} diff --git a/api/version1/workWechat/wechat.go b/api/version1/workWechat/wechat.go index eb9e04a..784d6ad 100644 --- a/api/version1/workWechat/wechat.go +++ b/api/version1/workWechat/wechat.go @@ -48,7 +48,7 @@ func GainWechatToken(systemApp, key string, isAgain int) (token string, err erro redisFileKey = fmt.Sprintf("%v_%v_%v", redisFileKey, systemApp, overall.CONSTANT_CONFIG.EmployeeFile.Agentid) secretStr = overall.CONSTANT_CONFIG.EmployeeFile.Secret case "txl": - redisFileKey = fmt.Sprintf("%v_%v_%v", redisFileKey, systemApp, overall.CONSTANT_CONFIG.EmployeeFile.Agentid) + redisFileKey = fmt.Sprintf("%v_%v_%v", redisFileKey, systemApp, overall.CONSTANT_CONFIG.AddressBook.Agentid) secretStr = overall.CONSTANT_CONFIG.AddressBook.Secret default: redisFileKey = fmt.Sprintf("%v_%v", redisFileKey, systemApp) @@ -63,7 +63,7 @@ func GainWechatToken(systemApp, key string, isAgain int) (token string, err erro redisClient.Set(redisFileKey, token) } else { isTrue, tokens := redisClient.Get(redisFileKey) - if isTrue && token != "" { + if isTrue && tokens != "" { err = nil token = tokens return @@ -76,7 +76,7 @@ func GainWechatToken(systemApp, key string, isAgain int) (token string, err erro redisClient.Set(redisFileKey, token) } } - + // fmt.Printf("tokenKey: %v\n", redisFileKey) return } @@ -138,6 +138,9 @@ func GainJsapiTicket(systemApp, key string, class int) (jsApiTickerStr string, e jsApiTicketRedis := fmt.Sprintf("Wechat:JsapiTicket:%v_%v_%v", systemApp, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, class) redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) isTrue, jsApiTickerInfo := redisClient.Get(jsApiTicketRedis) //读取redis数据 + + fmt.Printf("读取redis数据-2-2->%v->%v->%v\n", jsApiTicketRedis, isTrue, jsApiTickerInfo) + if isTrue { jsApiTickerStr = jsApiTickerInfo err = nil diff --git a/api/version1/workWechat/wechatApi.go b/api/version1/workWechat/wechatApi.go index 2b187d9..e88b6da 100644 --- a/api/version1/workWechat/wechatApi.go +++ b/api/version1/workWechat/wechatApi.go @@ -43,6 +43,9 @@ func (a *ApiMethod) GainWechatToken(c *gin.Context) { overallhandle.Result(100, err, c) return } + if requestData.IsAgain == 0 { + requestData.IsAgain = 1 + } host := c.Request.Header.Get("Host") userAgent := c.Request.Header.Get("User-Agent") wechatTokenStr := fmt.Sprintf("%v_%v", host, userAgent) @@ -200,6 +203,9 @@ func (a *ApiMethod) CallBackAuthUser(c *gin.Context) { userNum := c.Query("usernum") md5Token := GainTokenKey(c) isAgainInt, _ := strconv.Atoi(isAgain) + if isAgainInt == 0 { + isAgainInt = 1 + } token, _ := GainWechatToken(systemApp, md5Token, isAgainInt) gainWechatInfo := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=%v&code=%v", token, code) // gainWechatInfo := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=%v&code=%v", state, code) diff --git a/api/version1/workWechat/workWechat.go b/api/version1/workWechat/workWechat.go new file mode 100644 index 0000000..1790003 --- /dev/null +++ b/api/version1/workWechat/workWechat.go @@ -0,0 +1,365 @@ +package workWechat + +import ( + "encoding/json" + "errors" + "fmt" + "hr_server/models" + "hr_server/overall" + "hr_server/overall/overallhandle" + "time" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-02 11:23:32 +@ 功能: 获取统一企业微信Token +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func GainWechatTokenUnify() string { + md5Token := "WorkWechatUpdatePeopleInfo" + token, err := GainWechatToken("txl", md5Token, 1) + fmt.Printf("token-2-2->%v->%v\n", err, token) + if err != nil { + GainWechatTokenUnify() + } + return token +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-02 11:09:57 +@ 功能: 获取行政组织列表 +@ 参数 + + #orgId 行政组织Id + #token 企业 + +@ 返回值 + + #departmentAry 部门列表 + #newToekn 新token + +@ 方法原型 + + # +*/ +func (w *WechatOrg) GainWechatOrgList() { + + sendWechatUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%v&id=%v", w.Token, w.OrgId) + if w.OrgId == 0 { + sendWechatUrl = fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%v", w.Token) + } + //获取企业微信取部门列表 + wechatCallBack := overallhandle.CurlGet(sendWechatUrl) + var deparmentsList WechatCallBackDepartment + err := json.Unmarshal(wechatCallBack, &deparmentsList) + if err != nil { + return + } + fmt.Printf("企业微信返回值:%v\n", string(wechatCallBack)) + if deparmentsList.Errcode != 0 { + // w.Token = GainWechatTokenUnify() + // w.NewToekn = true + // w.GainWechatOrgList() + return + } + w.OrgList = deparmentsList.Department +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-02 13:10:15 +@ 功能: 处理人员信息 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (w *WechatOrg) GainOrgPeopleList() { + if len(w.OrgList) <= 0 { + overallhandle.WriteLog("e", "没有相应的行政组织!", w.OrgList) + return + } + var orgPeople WechatOrgPeole + orgPeople.Token = w.Token + for _, v := range w.OrgList { + synPro.Add(1) + go orgPeople.GainOrgPeopleList(v) + } + synPro.Wait() + if orgPeople.NewToekn { + w.Token = orgPeople.Token + } + +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-02 13:17:41 +@ 功能: 获取企业微信行政组织下的人员信息 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (w *WechatOrgPeole) GainOrgPeopleList(org WechatDepartmentInfo) { + defer synPro.Done() + w.WechatOrgHandPeople(int64(org.Id)) + jsonStr, _ := json.Marshal(w.UserList) + fmt.Printf("人员1信息========》%v:%v\n", org.Id, string(jsonStr)) + if len(w.UserList) <= 0 { + overallhandle.WriteLog("e", "没有行111111人员!", w.UserList) + return + } + var peopleAry []interface{} + for _, v := range w.UserList { + // isWriteNum := true + gonghao := "" + dangAn := "" + if len(v.Extattr.Attrs) > 0 { + for _, a := range v.Extattr.Attrs { + if a.Name == "工号" { + if a.Value == "" { + gonghao = a.Text.Value + } else { + gonghao = a.Value + } + + } + if a.Web.Url != "" { + dangAn = a.Web.Url + } + } + } + attJson, _ := json.Marshal(v.Extattr.Attrs) + fmt.Printf("人员信息%v:%v---->%v---->%v---->%v\n", org.Id, v.Userid, gonghao, dangAn, string(attJson)) + //获取HR数据库中的员工信息 + var userCont models.PersonArchives + if gonghao != "" { + overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`,`number`,`work_wechat`,`wechat`").Where("`number` = ?", gonghao).First(&userCont) + // isWriteNum = false + } else { + if v.Userid != "" { + overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`,`number`,`work_wechat`,`wechat`").Where("`work_wechat` = ? OR `wechat` = ?", v.Userid, v.Userid).First(&userCont) + } + // isWriteNum = true + } + if userCont.Id != 0 { + // fmt.Printf("@人员信息%v:%v---->%v---->%v\n", org.Id, v.Userid, gonghao, userCont) + updateWechatUserCont := overallhandle.MapOut() + updateWechatUserCont["userid"] = v.Userid + //判断是否要更新当前人员信息 + + var attrsAry []interface{} //企业微信个人属性 + // for _, ev := range v.Extattr.Attrs { + // if ev.Name == "档案" { + dangAnUrl := fmt.Sprintf("http://hr.hxgk.group/#/?usernum=%v", userCont.Number) + var dangAnInfi UpdateMyWechatURL + dangAnInfi.Name = "档案" + dangAnInfi.Type = 1 + dangAnInfi.Web.Title = "详细信息" + dangAnInfi.Web.Url = dangAnUrl + attrsAry = append(attrsAry, dangAnInfi) + // } + // if ev.Name == "工号" { + var gonhaoInFo UpdateMyWechatText + gonhaoInFo.Name = "工号" + gonhaoInFo.Type = 0 + gonhaoInFo.Value = userCont.Number + gonhaoInFo.Text.Value = userCont.Number + attrsAry = append(attrsAry, gonhaoInFo) + // } + // } + // fmt.Printf("更新完毕!人员信息%v:%v---->%v---->%v\n", org.Id, v.Userid, gonghao, attrsAry) + if len(attrsAry) > 0 { + extattr := overallhandle.MapOut() + extattr["attrs"] = attrsAry + updateWechatUserCont["extattr"] = extattr + peopleAry = append(peopleAry, updateWechatUserCont) + } + if dangAn == "" { + w.SendUserInfoToWorkWechat(updateWechatUserCont) + } else { + overallhandle.WriteLog("t", "企业微信人员已有档案信息,无需重新生成!", v.Extattr.Attrs) + } + + userSaveInfo := make(map[string]interface{}) + if userCont.Number == "" && gonghao != "" { + userSaveInfo["number"] = gonghao + } + if userCont.WorkWechat == "" && v.Userid != "" { + userSaveInfo["work_wechat"] = v.Userid + } + if userCont.Wechat == "" && v.Userid != "" { + userSaveInfo["wechat"] = v.Userid + } + if len(userSaveInfo) > 0 { + userSaveInfo["eite_time"] = time.Now().Unix() + var userNumInfo models.PersonArchives + userNumInfo.EiteCont(map[string]interface{}{"`id`": userCont.Id}, userSaveInfo) + } + } else { + usWechatJson, _ := json.Marshal(v) + overallhandle.WriteLog("e", "没有行人员!", string(usWechatJson)) + } + } + peopleJson, _ := json.Marshal(peopleAry) + fmt.Printf("更新完毕!人员信息%v---->%v\n", org, string(peopleJson)) + overallhandle.WriteLog("e", "更新完毕!END", org, string(peopleJson)) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-02 15:33:28 +@ 功能: 发送信息修改通知 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (w *WechatOrgPeole) SendUserInfoToWorkWechat(userInfo map[string]interface{}) { + if _, ok := userInfo["userid"]; !ok { + err := errors.New("关键信息不全userid") + overallhandle.WriteLog("e", "1、更新企业微信人员信息", err, userInfo) + return + } + userJson, err := json.Marshal(userInfo) + if err != nil { + overallhandle.WriteLog("e", "1、更新企业微信人员信息", err, userJson) + return + } + overallhandle.WriteLog("i", "向企业微信发送人员信息", string(userJson)) + sendWechatUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/user/update?access_token=%v", w.Token) + wechatCallBack := overallhandle.CurlPostJosn(sendWechatUrl, userJson) + var orgPeopleList RevokeMsgSendCallBack + err = json.Unmarshal(wechatCallBack, &orgPeopleList) + if err != nil { + overallhandle.WriteLog("e", "2、更新企业微信人员信息出错,从新发起请求。", err, string(wechatCallBack)) + w.Token = GainWechatTokenUnify() + w.NewToekn = true + w.SendUserInfoToWorkWechat(userInfo) + return + } + if orgPeopleList.Errcode != 0 { + err = errors.New(orgPeopleList.Errmsg) + overallhandle.WriteLog("e", "3、更新企业微信人员信息发生错误!重新提交此数据!", orgPeopleList.Errcode, orgPeopleList.Errmsg) + w.Token = GainWechatTokenUnify() + w.NewToekn = true + w.SendUserInfoToWorkWechat(userInfo) + return + } + overallhandle.WriteLog("write", "更新企业微信人员信息完成!", userInfo) +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-02 13:32:50 +@ 功能: 获取企业微信行政组织下人员信息 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func (w *WechatOrgPeole) WechatOrgHandPeople(orgId int64) { + sendWechatUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token=%v&department_id=%v", w.Token, orgId) + fmt.Printf("sendWechatUrl--1->:%v\n", sendWechatUrl) + //获取企业微信取部门成员详情 + wechatCallBack := overallhandle.CurlGet(sendWechatUrl) + var orgPeopleList WechatCallBackPeople + err := json.Unmarshal(wechatCallBack, &orgPeopleList) + if err != nil { + w.Token = GainWechatTokenUnify() + w.NewToekn = true + w.WechatOrgHandPeople(orgId) + return + } + if orgPeopleList.Errcode != 0 { + w.Token = GainWechatTokenUnify() + w.NewToekn = true + w.WechatOrgHandPeople(orgId) + return + } + // fmt.Printf("sendWechatUrl:%v\n", sendWechatUrl) + w.UserList = orgPeopleList.UserList +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-02 15:44:36 +@ 功能: 新版定时任务启动数据同步 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func NewTimedTasksForOrgWechat(orgId int64, errmsg ...any) { + fmt.Printf("orgId-2-->%v\n", orgId) + token := GainWechatTokenUnify() + fmt.Printf("token--->%v\n", token) + var orgMap WechatOrg + orgMap.OrgId = orgId + orgMap.Token = token + orgMap.GainWechatOrgList() + if orgMap.NewToekn { + token = orgMap.Token + } + fmt.Printf("orgMap--->%v\n", orgMap) + orgMap.GainOrgPeopleList() + // sendMap := make(map[string]interface{}) + // sendMap["token"] = token + // sendMap["orgMap"] = orgMap + overallhandle.WriteLog("i", "行政组织:", orgId, "更新完成") +} diff --git a/api/version1/workrostering/structsetup.go b/api/version1/workrostering/structsetup.go index db0fc7f..cffe4a2 100644 --- a/api/version1/workrostering/structsetup.go +++ b/api/version1/workrostering/structsetup.go @@ -82,10 +82,12 @@ type TimeRuleSend struct { //设置倒班源点 type SetOrigin struct { - Id string `json:"id"` // + Id string `json:"id"` //源点记录Id Rule string `json:"rule"` //轮询规则 ShiftTime string `json:"shifttime"` // 班次安排 StartTime string `json:"starttime"` // 起源时间 + SetIsm string `json:"setIsm"` // 执行制度 + OrgId string `json:"orgId"` //行政组织 } //排班查询列表 diff --git a/api/version1/workrostering/teamtime.go b/api/version1/workrostering/teamtime.go index 760b853..94c0e7e 100644 --- a/api/version1/workrostering/teamtime.go +++ b/api/version1/workrostering/teamtime.go @@ -146,7 +146,7 @@ func (a *ApiModer) AddTeamTime(c *gin.Context) { // workTimeType.Rule = requestData.Rule //工作时段 var workTimeList []workgroup.WorkingTimePeriod - for _, lv := range requestData.List { + for i, lv := range requestData.List { var workTimeCont workgroup.WorkingTimePeriod workTimeCont.Name = lv.Title //type:string comment:工作时间段名称 version:2022-11-13 16:59 workTimeCont.Time = time.Now().Unix() //type:int64 comment:编辑时间;0 version:2022-11-13 16:59 @@ -154,6 +154,7 @@ func (a *ApiModer) AddTeamTime(c *gin.Context) { workTimeCont.StartTime = lv.StartTime //type:string comment:开始时间 version:2022-11-13 16:59 workTimeCont.EndTime = lv.EndTime //type:string comment:结束时间 version:2022-11-13 16:59 workTimeCont.State = 1 + workTimeCont.Sort = i + 1 workTimeList = append(workTimeList, workTimeCont) } //轮询规则 @@ -587,7 +588,7 @@ func EditPeriodTime(typeId int64, ruleList []TemaTimes) { workTimeListCont, _ := workTimeCont.ContMap(map[string]interface{}{"`type_id`": typeId}) var editId []string var saveData []workgroup.WorkingTimePeriod - for _, v := range ruleList { + for i, v := range ruleList { if v.Id != "" { var workTimeContJudge workgroup.WorkingTimePeriod err := workTimeContJudge.GetCont(map[string]interface{}{"`id`": v.Id}) @@ -597,6 +598,7 @@ func EditPeriodTime(typeId int64, ruleList []TemaTimes) { } editCont := overallhandle.MapOut() + editCont["`sort`"] = i + 1 editCont["`state`"] = 1 editCont["`name`"] = v.Title editCont["`time`"] = time.Now().Unix() @@ -606,6 +608,7 @@ func EditPeriodTime(typeId int64, ruleList []TemaTimes) { workTimeContEs.EiteCont(map[string]interface{}{"`id`": v.Id}, editCont) } else { var workTimeContAdd workgroup.WorkingTimePeriod + workTimeContAdd.Sort = i + 1 workTimeContAdd.Name = v.Title //type:string comment:工作时间段名称 version:2022-11-13 16:59 workTimeContAdd.Time = time.Now().Unix() //type:int64 comment:编辑时间;0 version:2022-11-13 16:59 workTimeContAdd.TypeId = typeId //type:int64 comment:类型 version:2022-11-13 16:59 @@ -620,6 +623,7 @@ func EditPeriodTime(typeId int64, ruleList []TemaTimes) { workTimeContAdd.TypeId = typeId //type:int64 comment:类型 version:2022-11-13 16:59 workTimeContAdd.StartTime = v.StartTime //type:string comment:开始时间 version:2022-11-13 16:59 workTimeContAdd.EndTime = v.EndTime //type:string comment:结束时间 version:2022-11-13 16:59 + workTimeContAdd.Sort = i + 1 saveData = append(saveData, workTimeContAdd) } } @@ -731,8 +735,8 @@ func (a *ApiModer) SetOirginCont(c *gin.Context) { overallhandle.Result(100, err, c) return } - if requestData.Id == "" { - overallhandle.Result(101, err, c) + if requestData.OrgId == "" { + overallhandle.Result(101, err, c, "未知行政组织!") return } if requestData.Rule == "" { @@ -747,33 +751,42 @@ func (a *ApiModer) SetOirginCont(c *gin.Context) { overallhandle.Result(101, err, c) return } - timeInt, timeErr := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 12:00:00", requestData.StartTime)) - if !timeErr { - overallhandle.Result(1, err, c, "你提交的日期不符合规范!请改正后提交!") - return - } + var manageDate overallhandle.DateTimeTotimes + manageDate.BaisStrToTime(requestData.StartTime) + // timeInt, timeErr := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 12:00:00", requestData.StartTime)) + // if !timeErr { + // overallhandle.Result(1, err, c, "你提交的日期不符合规范!请改正后提交!") + // return + // } var genesisCont workgroup.Genesis - err = genesisCont.GetCont(map[string]interface{}{"`type_id`": requestData.Id}) + // err = genesisCont.GetCont(map[string]interface{}{"`id`": requestData.Id}) + err = genesisCont.GetCont(map[string]interface{}{"`orgId`": requestData.OrgId}) if err != nil { - genesisCont.TypeId, _ = strconv.ParseInt(requestData.Id, 10, 64) //type:int64 comment:类型 + genesisCont.TypeId, _ = strconv.ParseInt(requestData.SetIsm, 10, 64) //type:int64 comment:类型 genesisCont.PeriodId, _ = strconv.ParseInt(requestData.ShiftTime, 10, 64) //type:int64 comment:锚定工作段 genesisCont.Rules, _ = strconv.ParseInt(requestData.Rule, 10, 64) //type:int64 comment:锚定轮询规则起点 - genesisCont.StartTime = timeInt //type:int64 comment:锚定历史原点 + genesisCont.StartTime = manageDate.AllTime //type:int64 comment:锚定历史原点 genesisCont.Time = time.Now().Unix() //type:int64 + genesisCont.OrgId, _ = strconv.ParseInt(requestData.OrgId, 10, 64) err = overall.CONSTANT_DB_HR.Create(&genesisCont).Error + overall.CONSTANT_HRSERVER_DATABASE.Create(&genesisCont) } else { editCont := overallhandle.MapOut() - editCont["type_id"] = requestData.Id + editCont["type_id"] = requestData.SetIsm editCont["period_id"] = requestData.ShiftTime editCont["rules"] = requestData.Rule - editCont["start_time"] = timeInt - err = genesisCont.EiteCont(map[string]interface{}{"`id`": genesisCont.Id}, editCont) + editCont["start_time"] = manageDate.AllTime + if genesisCont.OrgId == 0 { + editCont["orgId"] = requestData.OrgId + } + var genesisContEdit workgroup.Genesis + err = genesisContEdit.EiteCont(map[string]interface{}{"`id`": genesisCont.Id}, editCont) } if err != nil { overallhandle.Result(1, err, c, "设置失败!") return } - overallhandle.Result(0, err, c) + overallhandle.Result(0, genesisCont, c) } /* diff --git a/apirouter/personnel/people.go b/apirouter/personnel/people.go index 367854c..7fb265f 100644 --- a/apirouter/personnel/people.go +++ b/apirouter/personnel/people.go @@ -21,8 +21,8 @@ func (p *PersonnelRoute) InitRouterGroup(route *gin.RouterGroup) { apiRouter.POST("archiveslistcont", apiHandle.ArchivesListCont) //人员档案列表(平台用) apiRouter.POST("archivescont", apiHandle.ArchivesCon) //个人档案 apiRouter.POST("personnelFiles", apiHandle.PersonnelFiles) //根据工号获取个人档案 - apiRouter.POST("getPeopleColor", apiHandle.GetPeopleColor) //根据工号获取个人档案 - // apiRouter.POST("oneToBer", apiHandle.OneToBer) //根据工号获取个人档案 + apiRouter.POST("getPeopleColor", apiHandle.GetPeopleColor) //根据工号获取个人档案性格色彩 + apiRouter.POST("getPeopleKey", apiHandle.GetPeopleKey) //根据Key获取个人档案 apiRouter.POST("kingdeehr", apiHandle.NewKingdee) //对接金蝶HR系统 apiRouter.POST("editpassword", apiHandle.EditPassWord) //修改密码 @@ -30,7 +30,8 @@ func (p *PersonnelRoute) InitRouterGroup(route *gin.RouterGroup) { apiRouter.POST("edit_us_wechat_openid", apiHandle.EditUsWechatOpenId) //修改员工微信或企业微信UserId apiRouter.POST("edit_people_icon", apiHandle.EditPeopleIcon) //修改员工微信或企业微信UserId - apiRouter.POST("useraboutorglist", apiHandle.UserAboutOrgList) //行政组织关系 + // apiRouter.POST("useraboutorglist", apiHandle.UserAboutOrgList) //行政组织关系 UserAboutOrgListNew + apiRouter.POST("useraboutorglist", apiHandle.UserAboutOrgListNew) //行政组织关系 //双职工 apiRouter.POST("doubleworkerlist", apiHandle.DoubleWorkerList) //双职工列表 apiRouter.POST("adddoubleworker", apiHandle.AddDoubleWorkerApi) //添加双职工 @@ -87,53 +88,76 @@ func (p *PersonnelRoute) InitRouterGroup(route *gin.RouterGroup) { apiRouter.POST("uploadUserFiles", apiHandle.UploadUserFiles) //解析上传的人员信息表格 apiRouter.POST("uploadUserFilesRedis", apiHandle.UploadUserFilesRedis) //解析上传的人员信息表格 - apiRouter.POST("analysisRedisExelect", apiHandle.AnalysisRedisExelect) //解析Redis列表中的数据 + apiRouter.POST("upLoadPeopelMerits", apiHandle.UpLoadPeopelMerits) //解析考评人员成绩统计表 + + apiRouter.POST("analysisRedisExelect", apiHandle.AnalysisRedisExelect) //解析Redis列表中的数据 + apiRouter.POST("analysisRedisOrgExelect", apiHandle.AnalysisRedisOrgExelect) //解析Redis列表中的数据 + + apiRouter.POST("anaRedisOrgStaffExc", apiHandle.AnalysisRedisOrgStaffExelect) //解析人员绩效成绩 + + apiRouter.POST("personnelPositioning", apiHandle.PersonnelPositioning) //人员定位信息(简略) + apiRouter.POST("gainSunOrgAndUser", apiHandle.GainSunOrgAndUser) //根据行政组织ID获取当前行政组织人员及子行政组织 + apiRouter.POST("searchOrgUser", apiHandle.SearchOrgUser) //搜索行政组织及人员 + + apiRouter.POST("rewPunList", apiHandle.RewPunList) //奖惩记录 + apiRouter.POST("assessmentRecords", apiHandle.AssessmentRecords) //绩效考核成绩 + apiRouter.POST("peopleEmploymentRelationship", apiHandle.PeopleEmploymentRelationship) //员工关系 + apiRouter.POST("peopleTitle", apiHandle.PeopleTitle) //职称列表 + apiRouter.POST("peopleHonor", apiHandle.PeopleHonor) //荣誉 + + apiRouter.POST("gainMyChengjiYears", apiHandle.GainMyChengjiYears) //获取个人年份评估成绩详情 + + apiRouter.POST("uploadTiemsManFiles", apiHandle.UploadTiemsManFiles) //上传班组设定人员 + apiRouter.POST("analysisRedisTimesExelect", apiHandle.AnalysisRedisTimesExelect) //解析人员信息!并写入数据库 } } // 员工档案 func (p *PersonnelRouteKingdee) InitRouterGroup(route *gin.RouterGroup) { - apiRouter := route.Group("staffkingdee") - var apiHandle = version1.AppApiInlet.StaffApi + apiRouterOut := route.Group("staffkingdee") + var apiHandleOut = version1.AppApiInlet.StaffApi { - apiRouter.GET("", apiHandle.Index) //入口 - apiRouter.POST("", apiHandle.Index) //入口 - apiRouter.POST("stafflist", apiHandle.StaffList) //人员列表 - apiRouter.POST("addstaff", apiHandle.AddStaff) //添加人员档案 - apiRouter.POST("allocationofrights", apiHandle.AllocationOfRights) //分配权限 - apiRouter.POST("archiveslist", apiHandle.ArchivesListWai) //人员列表(新) - 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 + apiRouterOut.GET("", apiHandleOut.Index) //入口 + apiRouterOut.POST("", apiHandleOut.Index) //入口 + apiRouterOut.POST("stafflist", apiHandleOut.StaffList) //人员列表 + apiRouterOut.POST("addstaff", apiHandleOut.AddStaff) //添加人员档案 + apiRouterOut.POST("allocationofrights", apiHandleOut.AllocationOfRights) //分配权限 + apiRouterOut.POST("archiveslist", apiHandleOut.ArchivesListWai) //人员列表(新) + apiRouterOut.POST("archivescont", apiHandleOut.ArchivesCon) //个人档案 + apiRouterOut.POST("kingdeehr", apiHandleOut.NewKingdee) //对接金蝶HR系统 + apiRouterOut.POST("editpassword", apiHandleOut.EditPassWord) //修改密码 + apiRouterOut.POST("wechat_give_uscont", apiHandleOut.WeChatGiveUsCont) //根据微信OpenId获取个人档案 + apiRouterOut.POST("edit_us_wechat_openid", apiHandleOut.EditUsWechatOpenId) //修改员工微信或企业微信UserId //双职工 - apiRouter.POST("adddoubleworker", apiHandle.AddDoubleWorkerApi) //添加双职工 - apiRouter.POST("eidtdoubleworker", apiHandle.EidtDoubleWorkerApi) //编辑双职工 - apiRouter.POST("eidtdoubleworkerstate", apiHandle.EidtDoubleWorkerState) //编辑双职工状态 + apiRouterOut.POST("adddoubleworker", apiHandleOut.AddDoubleWorkerApi) //添加双职工 + apiRouterOut.POST("eidtdoubleworker", apiHandleOut.EidtDoubleWorkerApi) //编辑双职工 + apiRouterOut.POST("eidtdoubleworkerstate", apiHandleOut.EidtDoubleWorkerState) //编辑双职工状态 //员工资料 - apiRouter.POST("eidtstaffcont", apiHandle.EidtStaffCont) //编辑员工资料 + apiRouterOut.POST("eidtstaffcont", apiHandleOut.EidtStaffCont) //编辑员工资料 //紧急联系人 - apiRouter.POST("addemercycall", apiHandle.AddEmercyCall) //添加紧急联系人 - apiRouter.POST("editemercycall", apiHandle.EditEmercyCall) //编辑紧急联系人 - apiRouter.POST("editemercycallstate", apiHandle.EditEmercyCallState) //编辑紧急联系人状态 + apiRouterOut.POST("addemercycall", apiHandleOut.AddEmercyCall) //添加紧急联系人 + apiRouterOut.POST("editemercycall", apiHandleOut.EditEmercyCall) //编辑紧急联系人 + apiRouterOut.POST("editemercycallstate", apiHandleOut.EditEmercyCallState) //编辑紧急联系人状态 //家庭成员 - apiRouter.POST("addfamilymembers", apiHandle.AddFamilyMembers) //添加家庭成员 - apiRouter.POST("editfamilymembers", apiHandle.EditFamilyMembers) //编辑家庭成员 - apiRouter.POST("editfamilymemberssatte", apiHandle.EditFamilyMembersSatte) //编辑家庭成员状态 + apiRouterOut.POST("addfamilymembers", apiHandleOut.AddFamilyMembers) //添加家庭成员 + apiRouterOut.POST("editfamilymembers", apiHandleOut.EditFamilyMembers) //编辑家庭成员 + apiRouterOut.POST("editfamilymemberssatte", apiHandleOut.EditFamilyMembersSatte) //编辑家庭成员状态 //教育经历 - apiRouter.POST("addeducationalexperience", apiHandle.AddEducationalExperience) //添加教育经历 - apiRouter.POST("editeducationalexperience", apiHandle.EditEducationalExperience) //编辑教育经历 - apiRouter.POST("editeduexpstate", apiHandle.EditEduExpState) //编辑教育经历状态 + apiRouterOut.POST("addeducationalexperience", apiHandleOut.AddEducationalExperience) //添加教育经历 + apiRouterOut.POST("editeducationalexperience", apiHandleOut.EditEducationalExperience) //编辑教育经历 + apiRouterOut.POST("editeduexpstate", apiHandleOut.EditEduExpState) //编辑教育经历状态 //工作履历 - apiRouter.POST("addworkhistorycont", apiHandle.AddWorkHistoryCont) //添加工作履历 - apiRouter.POST("editworkhistorycont", apiHandle.EditWorkHistoryCont) //编辑工作履历 - apiRouter.POST("editworkhistorystate", apiHandle.EditWorkHistoryState) //编辑工作履历状态 + apiRouterOut.POST("addworkhistorycont", apiHandleOut.AddWorkHistoryCont) //添加工作履历 + apiRouterOut.POST("editworkhistorycont", apiHandleOut.EditWorkHistoryCont) //编辑工作履历 + apiRouterOut.POST("editworkhistorystate", apiHandleOut.EditWorkHistoryState) //编辑工作履历状态 //集团工作履历 - apiRouter.POST("insideworkhistorylist", apiHandle.InsideWorkHistoryList) //集团工作履历列表 - apiRouter.POST("addinsidehistory", apiHandle.AddInsideHistory) //添加集团工作履历 - apiRouter.POST("eidtinsidehistoryworkcont", apiHandle.EidtInsideHistoryWorkCont) //编辑集团工作履历 - apiRouter.POST("editordelinsideworkhistorystate", apiHandle.EditOrDelInsideWorkHistoryState) //编辑集团工作履历状态 + apiRouterOut.POST("insideworkhistorylist", apiHandleOut.InsideWorkHistoryList) //集团工作履历列表 + apiRouterOut.POST("addinsidehistory", apiHandleOut.AddInsideHistory) //添加集团工作履历 + apiRouterOut.POST("eidtinsidehistoryworkcont", apiHandleOut.EidtInsideHistoryWorkCont) //编辑集团工作履历 + apiRouterOut.POST("editordelinsideworkhistorystate", apiHandleOut.EditOrDelInsideWorkHistoryState) //编辑集团工作履历状态 + + //人员定位相关 + apiRouterOut.POST("personnelPositioning", apiHandleOut.PersonnelPositioning) //人员定位信息(简略) } } diff --git a/apirouter/shiyanrouter/shiyan.go b/apirouter/shiyanrouter/shiyan.go index 2683e57..397581b 100644 --- a/apirouter/shiyanrouter/shiyan.go +++ b/apirouter/shiyanrouter/shiyan.go @@ -25,5 +25,9 @@ func (p *ShiyanApiRouter) InitRouterGroup(route *gin.RouterGroup) { apiRouter.POST("hand_movement_postcont", apiHandle.HandMovementPostCont) //手动同步职位 apiRouter.POST("write_token", apiHandle.WriteToken) //写入令牌 + + apiRouter.POST("workWechat", apiHandle.WorkWechat) //测试企业微信个人信息 + + apiRouter.POST("getTestPost", apiHandle.GetTestPost) //测试获取职务 } } diff --git a/config/configApp/appConfig.yaml b/config/configApp/appConfig.yaml index afcdf30..1361140 100644 --- a/config/configApp/appConfig.yaml +++ b/config/configApp/appConfig.yaml @@ -9,6 +9,7 @@ appsetup: prefix: 'HXJT' #系统字段前缀 weburl: 'http://gyhlw.hxgk.group' #web访问地址 pcurl: 'http:/gyhlw.hxgk.group' #PC访问地址 + defaultIP: '127.0.0.1' # logconfig: path: 'log' #日志保存地址 diff --git a/config/configApp/server.go b/config/configApp/server.go index ce14593..0e82150 100644 --- a/config/configApp/server.go +++ b/config/configApp/server.go @@ -23,6 +23,7 @@ type appsetup struct { PreFix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"` WebUrl string `mapstructure:"weburl" json:"weburl" yaml:"weburl"` PcbUrl string `mapstructure:"pcurl" json:"pcurl" yaml:"pcurl"` + DefaultIP string `mapstructure:"defaultIP" json:"defaultIP" yaml:"defaultIP"` } //日志配置 diff --git a/config/configDatabase/database.go b/config/configDatabase/database.go index 22d44a7..a6c506e 100644 --- a/config/configDatabase/database.go +++ b/config/configDatabase/database.go @@ -10,13 +10,16 @@ import ( ) type MysqlSetUp struct { - MasterMysql MasterMysqlSetUp `mapstructure:"master" json:"master" yaml:"master"` //主数据库 + MasterMysql MasterMysqlSetUp `mapstructure:"master" json:"master" yaml:"master"` //主数据库 + AppPlatformDatabase MasterMysqlSetUp `mapstructure:"appPlatformDatabase" json:"appPlatformDatabase" yaml:"appPlatformDatabase"` //应用平台 //其他数据库依次添加 WechatMysql MasterMysqlSetUp `mapstructure:"wechat" json:"wechat" yaml:"wechat"` //微信数据库 HrMysql MasterMysqlSetUp `mapstructure:"hrdatabase" json:"hrdatabase" yaml:"hrdatabase"` //HR数据库 HrMysqlJin MasterMysqlSetUp `mapstructure:"hrdatabasejin" json:"hrdatabasejin" yaml:"hrdatabasejin"` //HR数据库 PersonalityColor MasterMysqlSetUp `mapstructure:"charactercolor" json:"charactercolor" yaml:"charactercolor"` //HR数据库 // HrNeiSever MasterMysqlSetUp `mapstructure:"hrNeiSever" json:"hrNeiSever" yaml:"hrNeiSever"` //HR数据库 + HrDatabaseServer MasterMysqlSetUp `mapstructure:"hrdatabaseserver" json:"hrdatabaseserver" yaml:"hrdatabaseserver"` //外网HR数据库 + CustomerForm MasterMysqlSetUp `mapstructure:"customerFormDatabase" json:"customerFormDatabase" yaml:"customerFormDatabase"` //自定义表单数据库 } type MasterMysqlSetUp struct { diff --git a/config/configDatabase/database.yaml b/config/configDatabase/database.yaml index 52b2dfb..012e071 100644 --- a/config/configDatabase/database.yaml +++ b/config/configDatabase/database.yaml @@ -12,7 +12,7 @@ master: password: 'root' #数据库密码 max_idle_conns: 100 #最大空闲数量 max_open_conns: 1500 #最大打开数量 - gorm_log: false #是否开启gorm日志 + gorm_log: true #是否开启gorm日志 #微信数据库 wechat: url_path: '127.0.0.1' #数据库地址 @@ -25,7 +25,7 @@ wechat: password: 'root' #数据库密码 max_idle_conns: 100 #最大空闲数量 max_open_conns: 1500 #最大打开数量 - gorm_log: false #是否开启gorm日志 + gorm_log: true #是否开启gorm日志 #HR数据库 hrdatabase: # url_path: '127.0.0.1' #数据库地址 @@ -49,7 +49,7 @@ hrdatabase: name: 'hr_new' #数据库名称 max_idle_conns: 100 #最大空闲数量 max_open_conns: 1500 #最大打开数量 - gorm_log: false #是否开启gorm日志 + gorm_log: true #是否开启gorm日志 #HR数据库 hrdatabasejin: # url_path: '127.0.0.1' #数据库地址 @@ -68,7 +68,7 @@ hrdatabasejin: name: 'human_resources' #数据库名称 max_idle_conns: 100 #最大空闲数量 max_open_conns: 1500 #最大打开数量 - gorm_log: false #是否开启gorm日志 + gorm_log: true #是否开启gorm日志 #性格色彩 charactercolor: url_path: '172.20.5.33' #数据库地址 @@ -81,7 +81,7 @@ charactercolor: password: '9z_Bu28r1*DZ3K6@+a' #数据库密码 max_idle_conns: 100 #最大空闲数量 max_open_conns: 1500 #最大打开数量 - gorm_log: false #是否开启gorm日志 + gorm_log: true #是否开启gorm日志 #HR数据库 hrNeiSever: @@ -101,4 +101,61 @@ hrNeiSever: name: 'hr_new' #数据库名称 max_idle_conns: 100 #最大空闲数量 max_open_conns: 1500 #最大打开数量 - gorm_log: false #是否开启gorm日志 \ No newline at end of file + gorm_log: true #是否开启gorm日志 +#HR数据库 +hrdatabaseserver: + url_path: '36.133.126.182' #数据库地址 + port: 3306 #数据库端口 + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + name: 'hr_new' #数据库名称 + username: 'hr_new' #数据库用户民 + password: 'kPMP6NafMsdccxDX' #数据库密码 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 1500 #最大打开数量 + gorm_log: true #是否开启gorm日志 + + #自定义数据库 +customerFormDatabase: + url_path: '172.20.5.34' #数据库地址 + port: 4000 #数据库端口 + name: 'customer_form' #数据库名称 + username: 'root' #数据库用户民 + password: '9z_Bu28r1*DZ3K6@+a' #数据库密码 + + # url_path: '36.133.126.182' #数据库地址 + # port: 3306 #数据库端口 + # name: 'customer_form' #数据库名称 + # username: 'customer_form' #数据库用户民 + # password: 'Mjh4msNtADGjiMaC' #数据库密码 + + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 1500 #最大打开数量 + gorm_log: true #是否开启gorm日志 + + +#应用平台数据库 +appPlatformDatabase: + url_path: '172.20.5.34' #数据库地址 + port: 4000 #数据库端口 + name: 'app_platform' #数据库名称 + username: 'root' #数据库用户民 + password: '9z_Bu28r1*DZ3K6@+a' #数据库密码 + + # url_path: '127.0.0.1' #数据库地址 + # port: 3306 #数据库端口 + # name: 'app_platform' #数据库名称 + # username: 'root' #数据库用户民 + # password: 'root' #数据库密码 + + + charset: 'utf8mb4' #数据库编码方式 + parseTime: 'True' #是否自动转换时间 + loc: 'Local' #时区 + max_idle_conns: 100 #最大空闲数量 + max_open_conns: 1500 #最大打开数量 + gorm_log: true #是否开启gorm日志 \ No newline at end of file diff --git a/devlog.md b/devlog.md deleted file mode 100644 index 2e4b6a7..0000000 --- a/devlog.md +++ /dev/null @@ -1,161 +0,0 @@ -# 开发日志 - -## 2024-01-29 - -### 数据库操作 - -#### 1、person_archives 人员主表 - -增加表字段 - -``` -ALTER TABLE `person_archives` ADD `work_section` bigint unsigned DEFAULT '0' COMMENT '工段'; -``` - -#### 2、personnel_content 人员副表 - -增加表字段 - -``` -ALTER TABLE `personnel_content` ADD `domicile_type` varchar(100) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '户籍类型'; -ALTER TABLE `personnel_content` ADD `idCardnoLongTerm` int unsigned NOT NULL DEFAULT '2' COMMENT '身份证是否长期有效(1:是;2:否)'; -ALTER TABLE `person_archives` ADD `mobileShortNumber` varchar(50) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '手机小号'; -ALTER TABLE `person_archives` ADD `channel` int unsigned NOT NULL DEFAULT '1' COMMENT '入职渠道(1:社会招聘;2:校园招聘;3:内部推荐)'; -ALTER TABLE `person_archives` ADD `bloodType` varchar(10) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '血型'; -``` - -#### 3、personnel_education 教育经历 - -增加字段 - -``` -ALTER TABLE `personnel_education` ADD `education_type` int unsigned NOT NULL DEFAULT '1' COMMENT '学历类型(1、全日制统招学历;2、成人高考学历;3、自学考试学历;4:开放大学学历;5:网络教育学历)'; -ALTER TABLE `personnel_education` ADD `collegeFaction` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '所属院系'; -ALTER TABLE `personnel_education` ADD `schoolType` int unsigned NOT NULL DEFAULT '0' COMMENT '院校类型(1、私立中学;2:公立中学;3:高职院校;4:民办专科院校;5:公办专科院校;6:民办本科院校;7:公办本科院校;8:”211“工程院校;9:”985“工程院校;10:双一流院校)' -``` - -#### 4、family_members 员工家属 - -增加字段 - -``` -ALTER TABLE `family_members` ADD `workUnitPost` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '工作单位及职务'; -ALTER TABLE `family_members` ADD `isSos` int unsigned NOT NULL DEFAULT '2' COMMENT '是否为紧急联系人(1、是;2:否)'; -``` - -#### 5、double_worker 双职工 - -添加字段 - -``` -ALTER TABLE `double_worker` ADD `workUnit` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '工段'; -ALTER TABLE `double_worker` ADD `workPosit` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '职位'; -ALTER TABLE `double_worker` ADD `levele` varchar(30) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '职等'; -``` - -#### 6、inside_work_history 集团内部工作经历 - -添加字段 - -``` -ALTER TABLE `inside_work_history` ADD `changeType` int unsigned NOT NULL DEFAULT '1' COMMENT '变动类型(1、新入职;2:平调;3:降职;4:升职)'; -ALTER TABLE `inside_work_history` ADD `changeReason` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '变动原因'; -ALTER TABLE `inside_work_history` ADD `superiorPosition` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '上级职位'; -ALTER TABLE `inside_work_history` ADD `superiorName` varchar(50) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '上级名称'; -ALTER TABLE `inside_work_history` ADD `subordinates` int unsigned NOT NULL DEFAULT '0' COMMENT '下属人数'; -``` - -#### 7、work_history 工作履历 - -添加字段 - -``` -ALTER TABLE `work_history` ADD `companyNature` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '公司性质'; -ALTER TABLE `work_history` ADD `industry` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '所属行业'; -``` - -#### 8、meritslog 绩效 - -添加字段 - -``` -ALTER TABLE `work_history` ADD `level` varchar(255) COLLATE utf8mb4_bin DEFAULT '' COMMENT '考核等级'; -``` - -#### 9、rewards_penalties 奖惩 - -添加字段 - -``` -ALTER TABLE rewards_penalties ADD level int unsigned NOT NULL DEFAULT '1' COMMENT '奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)'; -ALTER TABLE rewards_penalties ADD rewPunClass int unsigned NOT NULL DEFAULT '1' COMMENT '奖惩类型(1:年终评优;2:表扬;3:嘉奖;4:记功;5:记大功;6:特别奖励;7:批评;8:警告;9:记过;10:记大过;11:降级;12:留用察看;13:开除)'; -``` - -#### 10、political_identity 政治属性 - -添加表 - -``` -CREATE TABLE `political_identity` ( - `userkey` bigint unsigned NOT NULL DEFAULT '0' COMMENT '员工唯一识别符', - `political_outlook` int unsigned NOT NULL DEFAULT '1' COMMENT '政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)', - `joinTime` bigint NOT NULL DEFAULT '0' COMMENT '加入时间', - `branch` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '所在党支部', - `position` varchar(100) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '党内职务', - `joiningParty` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '入党时所在单位', - `switchToClass` int unsigned NOT NULL DEFAULT '2' COMMENT '组织关系是否转入(1:是;2:否)', - `switchToTime` bigint NOT NULL DEFAULT '0' COMMENT '组织关系转入时间', - `time` bigint unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (`userkey`), - UNIQUE KEY `userkey` (`userkey`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='政治属性'; -``` - -#### 11、veterans 退役军人信息 - -添加表 - -``` -CREATE TABLE `veterans` ( - `userkey` bigint unsigned NOT NULL DEFAULT '0', - `isRetire` int unsigned NOT NULL DEFAULT '2' COMMENT '是否为退役军人(1:是;2:否)', - `retireNumber` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '退役证编号', - `joinTime` bigint NOT NULL DEFAULT '0' COMMENT '入伍时间', - `retireTime` bigint NOT NULL DEFAULT '0' COMMENT '退伍时间', - `armyUnits` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '参军单位', - `typesOfSoldiers` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '兵种', - `time` bigint unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (`userkey`), - UNIQUE KEY `userkey` (`userkey`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='老兵信息'; -``` - -#### 12、academictitle 职称 - -添加表 - -``` -CREATE TABLE `academictitle` ( - `id` bigint unsigned NOT NULL, - `types` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '职称级别', - `series` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '职称系列', - `speciality` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '职称专业', - `number` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '资格证书编号', - `time` bigint unsigned NOT NULL DEFAULT '0' COMMENT '生效时间', - `editTime` bigint unsigned NOT NULL DEFAULT '0', - `userKey` bigint unsigned NOT NULL DEFAULT '0' COMMENT '人员唯一识别符', - PRIMARY KEY (`id`), - UNIQUE KEY `id` (`id`), - KEY `userKey` (`userKey`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='职称'; -``` - -#### 13、certificate_honors 证书 - -添加字段 - -``` -ALTER TABLE rewards_penalties ADD number varchar(255) COLLATE utf8mb4_bin DEFAULT '' COMMENT '证书编号''; -ALTER TABLE rewards_penalties ADD endTime int unsigned NOT NULL DEFAULT '1' COMMENT '奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)'; -ALTER TABLE rewards_penalties ADD validPeriod int unsigned NOT NULL DEFAULT '1' COMMENT '奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)'; -``` diff --git a/go.mod b/go.mod index 976fa9a..36363db 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,10 @@ require ( github.com/robfig/cron/v3 v3.0.1 github.com/spf13/viper v1.10.1 gorm.io/driver/mysql v1.3.3 - gorm.io/gorm v1.23.4 + gorm.io/driver/postgres v1.5.11 + gorm.io/driver/sqlite v1.5.7 + gorm.io/driver/sqlserver v1.5.4 + gorm.io/gorm v1.25.10 ) require ( @@ -23,14 +26,22 @@ require ( github.com/go-playground/universal-translator v0.18.0 // indirect github.com/go-playground/validator/v10 v10.10.1 // indirect github.com/go-sql-driver/mysql v1.6.0 // indirect + github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect + github.com/golang-sql/sqlexp v0.1.0 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/hashicorp/hcl v1.0.0 // indirect + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect + github.com/jackc/pgx/v5 v5.5.5 // indirect + github.com/jackc/puddle/v2 v2.2.1 // indirect github.com/jinzhu/inflection v1.0.0 // indirect - github.com/jinzhu/now v1.1.4 // indirect + github.com/jinzhu/now v1.1.5 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/magiconair/properties v1.8.5 // indirect github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-sqlite3 v1.14.22 // indirect + github.com/microsoft/go-mssqldb v1.7.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect @@ -42,10 +53,10 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.2.0 // indirect github.com/ugorji/go/codec v1.2.7 // indirect - golang.org/x/crypto v0.12.0 // indirect - golang.org/x/net v0.14.0 // indirect - golang.org/x/sys v0.11.0 // indirect - golang.org/x/text v0.12.0 // indirect + golang.org/x/crypto v0.18.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.16.0 // indirect + golang.org/x/text v0.14.0 // indirect google.golang.org/protobuf v1.28.0 // indirect gopkg.in/ini.v1 v1.66.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index ab008e4..b8c53e9 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,22 @@ github.com/360EntSecGroup-Skylar/excelize v1.4.1 h1:l55mJb6rkkaUzOpSsgEeKYtS6/0gHwBYyfo5Jcjv/Ks= github.com/360EntSecGroup-Skylar/excelize v1.4.1/go.mod h1:vnax29X2usfl7HHkBrX5EvSCJcmH3dT9luvxzu8iGAE= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 h1:lGlwhPtrX6EVml1hO0ivjkUxsSyl4dsiw9qcA1k/3IQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1/go.mod h1:RKUqNu35KJYcVG/fqTRqmuXJZYNhYkBrnC/hX7yGbTA= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1/go.mod h1:uE9zaUfEQT/nbQjVi2IblCG9iaLtZsuYZ8ne+PuQ02M= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 h1:6oNBlSdi1QqM1PNW7FPA6xOGA5UNsXnkaYZz9vdPGhA= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1 h1:MyVTgWR8qd/Jw1Le0NZebGBUCLbtak3bJ3z1OlqZBpw= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1/go.mod h1:GpPjLhVR9dnUoJMyHWSPy71xY9/lcmpzIPZXmF0FCVY= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0 h1:D3occbWoio4EBLkbkevetNMAVX197GkzbUMtqjGWn80= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0/go.mod h1:bTSOgj05NGRuHHhQwAdPnYr9TOdNmKlZTgGLL6nyAdI= +github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 h1:DzHpqpoJVaCgOUdVHxE8QB52S6NiVdDQvGlny1qvPqA= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -8,6 +25,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= @@ -29,6 +48,13 @@ github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw= +github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA= +github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= +github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= @@ -36,12 +62,35 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw= +github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A= +github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= +github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= +github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= +github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= +github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo= +github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= +github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs= +github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.4 h1:tHnRBy1i5F2Dh8BAFxqFzxKqqvezXrL2OW1TnX+Mlas= github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= @@ -54,6 +103,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= @@ -62,6 +113,10 @@ github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPK github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= +github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP3b/PA= +github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA= github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -70,8 +125,10 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/mozillazg/go-pinyin v0.19.0 h1:p+J8/kjJ558KPvVGYLvqBhxf8jbZA2exSLCs2uUVN8c= github.com/mozillazg/go-pinyin v0.19.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= @@ -80,6 +137,9 @@ github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= @@ -101,13 +161,19 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk= github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.3-0.20181224173747-660f15d67dbb/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= @@ -115,35 +181,91 @@ github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6 github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= @@ -158,15 +280,24 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/driver/mysql v1.3.3 h1:jXG9ANrwBc4+bMvBcSl8zCfPBaVoPyBEBshA8dA93X8= gorm.io/driver/mysql v1.3.3/go.mod h1:ChK6AHbHgDCFZyJp0F+BmVGb06PSIoh9uVYKAlRbb2U= +gorm.io/driver/postgres v1.5.11 h1:ubBVAfbKEUld/twyKZ0IYn9rSQh448EdelLYk9Mv314= +gorm.io/driver/postgres v1.5.11/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI= +gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I= +gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4= +gorm.io/driver/sqlserver v1.5.4 h1:xA+Y1KDNspv79q43bPyjDMUgHoYHLhXYmdFcYPobg8g= +gorm.io/driver/sqlserver v1.5.4/go.mod h1:+frZ/qYmuna11zHPlh5oc2O6ZA/lS88Keb0XSH1Zh/g= gorm.io/gorm v1.23.1/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= -gorm.io/gorm v1.23.4 h1:1BKWM67O6CflSLcwGQR7ccfmC4ebOxQrTfOQGRE9wjg= -gorm.io/gorm v1.23.4/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= +gorm.io/gorm v1.25.10 h1:dQpO+33KalOA+aFYGlK+EfxcI5MbO7EP2yYygwh9h+s= +gorm.io/gorm v1.25.10/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= diff --git a/hr_server.exe b/hr_server.exe index 6fdda4c..03c5406 100644 Binary files a/hr_server.exe and b/hr_server.exe differ diff --git a/identification/authentication.go b/identification/authentication.go index 06e1d95..74fcbd2 100644 --- a/identification/authentication.go +++ b/identification/authentication.go @@ -11,7 +11,7 @@ import ( "github.com/mitchellh/mapstructure" ) -//验证器 +// 验证器 func Validator() gin.HandlerFunc { return func(c *gin.Context) { userToken := c.Request.Header.Get("token") @@ -157,15 +157,16 @@ func Validator() gin.HandlerFunc { // tokenMd5Str, numberMd5 // overallhandle.Result(2004, "对不起!非法令牌!不可访问系统", c) - overallhandle.Result(2004, sss, c, "对不起!非法令牌!不可访问系统") + overallhandle.Result(2004, numberMd5, c, "对不起!非法令牌!不可访问系统") c.Abort() return } + // fmt.Printf("拦截") c.Next() } } -//拦截器 +// 拦截器 func Interceptor() gin.HandlerFunc { return func(c *gin.Context) { diff --git a/initialization/databaseinit/mysql.go b/initialization/databaseinit/mysql.go index 7a32074..d20eaaa 100644 --- a/initialization/databaseinit/mysql.go +++ b/initialization/databaseinit/mysql.go @@ -44,6 +44,14 @@ func LoadDatabase() { } else { fmt.Printf("%v数据库开启成功!\n", sqlConfig.PersonalityColor.Name) } + + //开启外网Hr数据库 + overall.CONSTANT_HRSERVER_DATABASE = sqlConfig.HrDatabaseServer.OpenSql() + if overall.CONSTANT_HRSERVER_DATABASE == nil { + fmt.Printf("%v数据库开启失败!\n", sqlConfig.HrDatabaseServer.Name) + } else { + fmt.Printf("%v数据库开启成功!\n", sqlConfig.HrDatabaseServer.Name) + } //开启内网数据库 // overall.CONSTANT_Hr_Server = sqlConfig.HrNeiSever.OpenSql() // if overall.CONSTANT_Personality_Color == nil { @@ -51,4 +59,17 @@ func LoadDatabase() { // } else { // fmt.Printf("%v数据库开启成1功!\n", sqlConfig.HrNeiSever.Name) // } + overall.CONSTANT_DB_CustomerForm = sqlConfig.CustomerForm.OpenSql() + if overall.CONSTANT_DB_CustomerForm == nil { + fmt.Printf("%v:数据库开启失败!服务器\n", sqlConfig.CustomerForm.Name) + } else { + fmt.Printf("%v:数据库开启成功!服务器\n", sqlConfig.CustomerForm.Name) + } + //开启主数据库 + overall.CONSTANT_DB_AppPlatform = sqlConfig.AppPlatformDatabase.OpenSql() + if overall.CONSTANT_DB_AppPlatform == nil { + fmt.Printf("%v:数据库开启失败!\n", sqlConfig.AppPlatformDatabase.Name) + } else { + fmt.Printf("%v:数据库开启成功!\n", sqlConfig.AppPlatformDatabase.Name) + } } diff --git a/models/administrative_organization.go b/models/administrative_organization.go index 9f053e9..e3384c5 100644 --- a/models/administrative_organization.go +++ b/models/administrative_organization.go @@ -1,6 +1,9 @@ package models import ( + "encoding/json" + "fmt" + "hr_server/grocerystore" "hr_server/overall" "strings" ) @@ -56,3 +59,23 @@ func (cont *AdministrativeOrganization) ContMap(whereMap interface{}) (countAry overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Find(&countAry) return } + +// 根据ID获取行政组织内容 +func (cont *AdministrativeOrganization) RedisCont(orgId int64) (err error) { + redisFileKey := fmt.Sprintf("org:Info:%v_%v", orgId, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias) + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) //设定redis库 + isTrue, tokens := redisClient.Get(redisFileKey) + if isTrue && tokens != "" { + err = json.Unmarshal([]byte(tokens), &cont) + return + } else { + var jsonStr []byte + err = overall.CONSTANT_DB_HR.Model(&cont).Where("`id` = ?", orgId).First(&cont).Error + if err == nil { + redisClient.SetRedisTime(0) + jsonStr, err = json.Marshal(cont) + redisClient.Set(redisFileKey, string(jsonStr)) + } + } + return +} diff --git a/models/customerForm/diaoBanSetup.go b/models/customerForm/diaoBanSetup.go new file mode 100644 index 0000000..ab436a7 --- /dev/null +++ b/models/customerForm/diaoBanSetup.go @@ -0,0 +1,73 @@ +package customerForm + +import ( + "hr_server/overall" + "strings" +) + +/* +* +@ 作者: 秦东 +@ 时间: 2024-03-06 13:23:03 +@ 功能: 自定义表单分组 +*/ +type DiaoBanSetup struct { + Id int64 `json:"id" gorm:"primaryKey;column:id;type:int(5) unsigned;not null;comment:Id;index"` + Appid int64 `json:"appid" gorm:"column:appid;type:bigint(20) unsigned;default:0;not null;comment:归属哪个app"` + Source string `json:"source" gorm:"column:source;type:varchar(255) unsigned;default:'';not null;comment:是否引用数据源(yes ; no)"` + Ip string `json:"ip" gorm:"column:ip;type:varchar(255) unsigned;default:'';not null;comment:数据源地址"` + DataBaseName string `json:"dataBaseName" gorm:"column:dataBaseName;type:varchar(255) unsigned;default:'';not null;comment:是否引用数据源(yes ; no)"` + SqlType string `json:"sqlType" gorm:"column:sqlType;type:varchar(255) unsigned;default:'';not null;comment:数据库类型"` + Port int `json:"port" gorm:"column:port;type:int(7) unsigned;default:50;not null;comment:端口"` + TableKey string `json:"tableKey" gorm:"column:tableKey;type:varchar(255);default:'';comment:数据表标识"` + TableNames string `json:"tableName" gorm:"column:tableName;type:varchar(255);default:'';comment:数据表名称"` + UserName string `json:"userName" gorm:"column:userName;type:varchar(255);default:'';comment:数据库用户名"` + Pwd string `json:"pwd" gorm:"column:pwd;type:varchar(255);default:'';comment:数据库密码"` + Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` + SourceId string `json:"sourceId" gorm:"column:sourceId;type:varchar(255);default:'';comment:所愿"` +} + +func (DiaoBanSetup *DiaoBanSetup) TableName() string { + return "diaoBanSetup" +} + +// 编辑内容 +func (cont *DiaoBanSetup) EiteCont(whereMap interface{}, saveData interface{}) (err error) { + err = overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Updates(saveData).Error + return +} + +// 获取内容 +func (cont *DiaoBanSetup) GetCont(whereMap interface{}, field ...string) (err error) { + gormDb := overall.CONSTANT_DB_CustomerForm.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 *DiaoBanSetup) CountCont(whereMap interface{}) (countId int64) { + overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Count(&countId) + return +} + +// 读取全部信息 +func (cont *DiaoBanSetup) ContMap(whereMap interface{}, field ...string) (countAry []DiaoBanSetup, err error) { + gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont) + if len(field) > 0 { + fieldStr := strings.Join(field, ",") + gormDb = gormDb.Select(fieldStr) + } + err = gormDb.Where(whereMap).Find(&countAry).Error + return +} + +// 删除内容 +func (cont *DiaoBanSetup) DelCont(whereMap interface{}) (err error) { + err = overall.CONSTANT_DB_CustomerForm.Where(whereMap).Delete(&cont).Error + return +} diff --git a/models/customerForm/huanBanShenQing.go b/models/customerForm/huanBanShenQing.go new file mode 100644 index 0000000..a973144 --- /dev/null +++ b/models/customerForm/huanBanShenQing.go @@ -0,0 +1,79 @@ +package customerForm + +import ( + "hr_server/overall" + "strings" +) + +// 工作流执行主体 +// 字典类型 +type HuanBanShenQing struct { + Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` + MastersKey int64 `json:"masters_key" gorm:"column:masters_key;type:bigint(20) unsigned;default:0;not null;comment:申请人"` + Creater int64 `json:"creater" gorm:"column:creater;type:bigint(20) unsigned;default:0;not null;comment:申请人"` + CreaterTime int64 `json:"creater_time" gorm:"column:creater_time;type:bigint(20) unsigned;default:0;not null;comment:提交时间"` + EditTime int64 `json:"edit_time" gorm:"column:edit_time;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"` + FlowId int64 `json:"flow_id" gorm:"column:flow_id;type:bigint(20) unsigned;default:0;not null;comment:流程识别标识"` + States int `json:"states" gorm:"column:states;type:int(11) unsigned;default:1;not null;comment:状态(1:启用,2:禁用;3:删除)"` + FlowIsOpen int `json:"flowIsOpen" gorm:"column:flowIsOpen;type:int(1) unsigned;default:3;not null;comment:是否开启工作流"` + Shen3pi1bian1hao4 string `json:"shen3pi1bian1hao4" gorm:"column:shen3pi1bian1hao4;type:varchar(255);default:'';comment:审批编号"` + Fu4jian4 string `json:"fu4jian4" gorm:"column:fu4jian4;type:longtext;comment:附件"` + Org string `json:"org" gorm:"column:org;type:mediumtext;default:'';comment:申请人部门"` + Shou3ji1hao4109293 string `json:"shou3ji1hao4109293" gorm:"column:shou3ji1hao4109293;type:mediumtext;default:'';comment:手机号"` + Dang1zhi2ri4qi1 int64 `json:"dang1zhi2ri4qi1" gorm:"column:dang1zhi2ri4qi1;type:bigint(20) unsigned;default:0;not null;comment:当值日期"` + Diao4huan4ren229452110 string `json:"diao4huan4ren229452110" gorm:"column:diao4huan4ren229452110;type:longtext;comment:调换人"` + Shou3ji1 string `json:"shou3ji1" gorm:"column:shou3ji1;type:varchar(255);default:'';comment:审批编号"` + Diao4huan4ri4qi1 int64 `json:"diao4huan4ri4qi1" gorm:"column:diao4huan4ri4qi1;type:bigint(20) unsigned;default:0;not null;comment:调换日期"` + Shen1qing3yuan2yin1 string `json:"shen1qing3yuan2yin1" gorm:"column:shen1qing3yuan2yin1;type:longtext;comment:申请原因"` +} + +func (HuanBanShenQing *HuanBanShenQing) TableName() string { + return "huanBanShenQing" +} + +// 写入内容 +func (cont *HuanBanShenQing) WriteCont() (err error) { + err = overall.CONSTANT_DB_CustomerForm.Create(&cont).Error + return +} + +// 编辑内容 +func (cont *HuanBanShenQing) EiteCont(whereMap interface{}, saveData interface{}) (err error) { + err = overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Updates(saveData).Error + return +} + +// 获取内容 +func (cont *HuanBanShenQing) GetCont(whereMap interface{}, field ...string) (err error) { + gormDb := overall.CONSTANT_DB_CustomerForm.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 *HuanBanShenQing) CountCont(whereMap interface{}) (countId int64) { + overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Count(&countId) + return +} + +// 读取全部信息 +func (cont *HuanBanShenQing) ContMap(whereMap interface{}, field ...string) (countAry []HuanBanShenQing, err error) { + gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont) + if len(field) > 0 { + fieldStr := strings.Join(field, ",") + gormDb = gormDb.Select(fieldStr) + } + err = gormDb.Where(whereMap).Find(&countAry).Error + return +} + +// 删除内容 +func (cont *HuanBanShenQing) DelCont(whereMap interface{}) (err error) { + err = overall.CONSTANT_DB_CustomerForm.Where(whereMap).Delete(&cont).Error + return +} diff --git a/models/customerForm/runFlowTask.go b/models/customerForm/runFlowTask.go new file mode 100644 index 0000000..3450734 --- /dev/null +++ b/models/customerForm/runFlowTask.go @@ -0,0 +1,97 @@ +package customerForm + +import ( + "hr_server/overall" + "strings" +) + +// 工作流执行主体 +// 字典类型 +type RunFlowTask struct { + Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` + FlowKey int64 `json:"flowKey" gorm:"column:flow_key;type:bigint(20) unsigned;default:0;not null;comment:工作流主体"` + Version string `json:"version" gorm:"column:version;type:varchar(255);default:'';comment:使用得版本"` + Status int `json:"status" gorm:"column:status;type:int(1) unsigned;default:1;not null;comment:状态:1、草稿;2:驳回;3:通过;4:归档;5:删除"` + FlowCont string `json:"flowcont" gorm:"column:flow_cont;type:longtext;comment:流程执行体"` + Creater int64 `json:"creater" gorm:"column:creater;type:bigint(20) unsigned;default:0;not null;comment:流程发起人"` + CurrentStep int `json:"currentStep" gorm:"column:current_step;type:int(4) unsigned;default:1;not null;comment:当前节点"` + NextStep int `json:"nextStep" gorm:"column:next_step;type:int(4) unsigned;default:0;not null;comment:下一个节点。0:代表没有下一个节点。流程结束"` + NextExecutor string `json:"nextExecutor" gorm:"column:next_executor;type:mediumtext;default:'';comment:下一步执行人"` + Participants string `json:"participants" gorm:"column:participants;type:longtext;comment:参与人"` + StartTime int64 `json:"startTime" gorm:"column:start_time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` + UpdateTime int64 `json:"update_time" gorm:"column:update_time;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"` + VersionCont string `json:"versionCont" gorm:"column:version_cont;type:longtext;comment:版本流程内容"` + RunKey int64 `json:"runKey" gorm:"column:runKey;type:bigint(20) unsigned;default:0;not null;comment:当前执行识别符"` + Title string `json:"title" gorm:"column:title;type:varchar(255) unsigned;default:'';not null;comment:标题"` + TaskCreate int64 `json:"taskCreate" gorm:"column:taskCreate;type:bigint(20) unsigned;default:0;not null;comment:创建人"` + CreaterTime int64 `json:"creater_time" gorm:"column:creater_time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` + Types int `json:"types" gorm:"column:types;type:int(1) unsigned;default:1;not null;comment:类型(1:普通表单;2:流程表单)"` + VersionId int64 `json:"version_id" gorm:"column:version_id;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:审批中;4:归档;5:删除)"` + // MastersKey int64 `json:"masters_key" gorm:"column:masters_key;type:bigint(20) unsigned;default:0;not null;comment:主表标识"` + TaskFlowKey int64 `json:"taskFlowKey" gorm:"column:taskFlowKey;type:bigint(20) unsigned;default:0;not null;comment:主表标识"` + FlowRunSing int64 `json:"flowRunSing" gorm:"column:flow_run_sing;type:bigint(20) unsigned;default:0;not null;comment:主表标识"` + MastesForm string `json:"mastesform" gorm:"column:mastesform;type:longtext;default:'';comment:表单结构"` + MastesFormJson string `json:"mastesformjson" gorm:"column:mastesformjson;type:longtext;default:'';comment:表单结构json"` + Visibility int `json:"visibility" gorm:"column:visibility;type:int(1) unsigned;default:1;not null;comment:1、所有人;2、自定义"` + AuthorizationRoles string `json:"authorizationRoles" gorm:"column:authorizationRoles;type:mediumtext;comment:授权角色"` + AuthorizedPersonnel string `json:"authorizedPersonnel" gorm:"column:authorizedPersonnel;type:mediumtext;comment:授权人员"` + AuthorizedOrg string `json:"authorizedOrg" gorm:"column:authorizedOrg;type:mediumtext;comment:授权行政组织"` + AuthorizedPosition string `json:"authorizedPosition" gorm:"column:authorizedPosition;type:mediumtext;comment:授权职务"` + Participant string `json:"participant" gorm:"column:participant;type:longtext;default:'';comment:表单结构json"` + TableKey int64 `json:"tableKey" gorm:"column:tableKey;type:bigint(20) unsigned;default:0;not null;comment:归属自定义表"` + AppKey int64 `json:"appKey" gorm:"column:appKey;type:bigint(20) unsigned;default:0;not null;comment:归属App(0:非app表单)"` + MakeCopy string `json:"makeCopy" gorm:"column:makeCopy;type:mediumtext;comment:抄送人"` + MastersKey int64 `json:"masters_key" gorm:"column:masters_key;type:bigint(20) unsigned;default:0;not null;comment:主表识别符"` +} + +func (RunFlowTask *RunFlowTask) TableName() string { + return "runFlowTask" +} + +// 写入内容 +func (cont *RunFlowTask) WriteCont() (err error) { + err = overall.CONSTANT_DB_CustomerForm.Create(&cont).Error + return +} + +// 编辑内容 +func (cont *RunFlowTask) EiteCont(whereMap interface{}, saveData interface{}) (err error) { + err = overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Updates(saveData).Error + return +} + +// 获取内容 +func (cont *RunFlowTask) GetCont(whereMap interface{}, field ...string) (err error) { + gormDb := overall.CONSTANT_DB_CustomerForm.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 *RunFlowTask) CountCont(whereMap interface{}) (countId int64) { + overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Count(&countId) + return +} + +// 读取全部信息 +func (cont *RunFlowTask) ContMap(whereMap interface{}, field ...string) (countAry []RunFlowTask, err error) { + gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont) + if len(field) > 0 { + fieldStr := strings.Join(field, ",") + gormDb = gormDb.Select(fieldStr) + } + err = gormDb.Where(whereMap).Find(&countAry).Error + return +} + +// 删除内容 +func (cont *RunFlowTask) DelCont(whereMap interface{}) (err error) { + err = overall.CONSTANT_DB_CustomerForm.Where(whereMap).Delete(&cont).Error + return +} diff --git a/models/customerForm/runWorkflow.go b/models/customerForm/runWorkflow.go new file mode 100644 index 0000000..fab935c --- /dev/null +++ b/models/customerForm/runWorkflow.go @@ -0,0 +1,77 @@ +package customerForm + +import ( + "hr_server/overall" + "strings" +) + +// 工作流执行主体 +// 字典类型 +type RunWorkflow struct { + Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` + FlowKey int64 `json:"flowKey" gorm:"column:flow_key;type:bigint(20) unsigned;default:0;not null;comment:工作流主体"` + Version string `json:"version" gorm:"column:version;type:varchar(255);default:'';comment:使用得版本"` + Status int `json:"status" gorm:"column:status;type:int(1) unsigned;default:1;not null;comment:状态:1、草稿;2:驳回;3:通过;4:归档;5:删除"` + FlowCont string `json:"flowcont" gorm:"column:flow_cont;type:longtext;comment:流程执行体"` + Creater int64 `json:"creater" gorm:"column:creater;type:bigint(20) unsigned;default:0;not null;comment:流程发起人"` + CurrentStep int `json:"currentStep" gorm:"column:current_step;type:int(4) unsigned;default:1;not null;comment:当前节点"` + NextStep int `json:"nextStep" gorm:"column:next_step;type:int(4) unsigned;default:0;not null;comment:下一个节点。0:代表没有下一个节点。流程结束"` + NextExecutor string `json:"nextExecutor" gorm:"column:next_executor;type:mediumtext;default:'';comment:下一步执行人"` + Participants string `json:"participants" gorm:"column:participants;type:longtext;comment:参与人"` + StartTime int64 `json:"startTime" gorm:"column:start_time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` + UpdateTime int64 `json:"update_time" gorm:"column:update_time;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"` + VersionCont string `json:"versionCont" gorm:"column:version_cont;type:longtext;comment:版本流程内容"` + RunKey int64 `json:"runKey" gorm:"column:runKey;type:bigint(20) unsigned;default:0;not null;comment:当前执行识别符"` + MakeCopy string `json:"makeCopy" gorm:"column:makeCopy;type:mediumtext;comment:抄送人"` +} + +func (RunWorkflow *RunWorkflow) TableName() string { + return "runworkflow" +} + +// 写入内容 +func (cont *RunWorkflow) WriteCont() (err error) { + err = overall.CONSTANT_DB_CustomerForm.Create(&cont).Error + return +} + +// 编辑内容 +func (cont *RunWorkflow) EiteCont(whereMap interface{}, saveData interface{}) (err error) { + err = overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Updates(saveData).Error + return +} + +// 获取内容 +func (cont *RunWorkflow) GetCont(whereMap interface{}, field ...string) (err error) { + gormDb := overall.CONSTANT_DB_CustomerForm.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 *RunWorkflow) CountCont(whereMap interface{}) (countId int64) { + overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Count(&countId) + return +} + +// 读取全部信息 +func (cont *RunWorkflow) ContMap(whereMap interface{}, field ...string) (countAry []RunWorkflow, err error) { + gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont) + if len(field) > 0 { + fieldStr := strings.Join(field, ",") + gormDb = gormDb.Select(fieldStr) + } + err = gormDb.Where(whereMap).Find(&countAry).Error + return +} + +// 删除内容 +func (cont *RunWorkflow) DelCont(whereMap interface{}) (err error) { + err = overall.CONSTANT_DB_CustomerForm.Where(whereMap).Delete(&cont).Error + return +} diff --git a/models/customerForm/taskrecord.go b/models/customerForm/taskrecord.go new file mode 100644 index 0000000..c68af32 --- /dev/null +++ b/models/customerForm/taskrecord.go @@ -0,0 +1,78 @@ +package customerForm + +import ( + "hr_server/overall" + "strings" +) + +// 自定义表单任务表 +type TaskRecord struct { + Id int64 `json:"id" gorm:"primaryKey;column:id;type:int(5) unsigned;not null;comment:Id;index"` + Title string `json:"title" gorm:"column:title;type:varchar(255) unsigned;default:'';not null;comment:标题"` + Creater int64 `json:"creater" gorm:"column:creater;type:bigint(20) unsigned;default:0;not null;comment:创建人"` + CreaterTime int64 `json:"creater_time" gorm:"column:creater_time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` + EditTime int64 `json:"editTime" gorm:"column:edit_time;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"` + Types int `json:"types" gorm:"column:types;type:int(1) unsigned;default:1;not null;comment:类型(1:普通表单;2:流程表单)"` + VersionId int64 `json:"version_id" gorm:"column:version_id;type:bigint(20) unsigned;default:0;not null;comment:来源于哪个表单"` + Status int `json:"status" gorm:"column:status;type:int(1) unsigned;default:1;not null;comment:状态(1:草稿,2:发表;3:审批中;4:归档;5:删除)"` + MastersKey int64 `json:"masters_key" gorm:"column:masters_key;type:bigint(20) unsigned;default:0;not null;comment:主表标识"` + FlowKey int64 `json:"flow_key" gorm:"column:flow_key;type:bigint(20) unsigned;default:0;not null;comment:主表标识"` + FlowRunSing int64 `json:"flowRunSing" gorm:"column:flow_run_sing;type:bigint(20) unsigned;default:0;not null;comment:主表标识"` + MastesForm string `json:"mastesform" gorm:"column:mastesform;type:longtext;default:'';comment:表单结构"` + MastesFormJson string `json:"mastesformjson" gorm:"column:mastesformjson;type:longtext;default:'';comment:表单结构json"` + Visibility int `json:"visibility" gorm:"column:visibility;type:int(1) unsigned;default:1;not null;comment:1、所有人;2、自定义"` + AuthorizationRoles string `json:"authorizationRoles" gorm:"column:authorizationRoles;type:mediumtext;comment:授权角色"` + AuthorizedPersonnel string `json:"authorizedPersonnel" gorm:"column:authorizedPersonnel;type:mediumtext;comment:授权人员"` + AuthorizedOrg string `json:"authorizedOrg" gorm:"column:authorizedOrg;type:mediumtext;comment:授权行政组织"` + AuthorizedPosition string `json:"authorizedPosition" gorm:"column:authorizedPosition;type:mediumtext;comment:授权职务"` + Participant string `json:"participant" gorm:"column:participant;type:longtext;default:'';comment:表单结构json"` + TableKey int64 `json:"tableKey" gorm:"column:tableKey;type:bigint(20) unsigned;default:0;not null;comment:归属自定义表"` + AppKey int64 `json:"appKey" gorm:"column:appKey;type:bigint(20) unsigned;default:0;not null;comment:归属App(0:非app表单)"` + RunFlowId int64 `json:"runFlowId" gorm:"column:runFlowId;type:bigint(20) unsigned;default:0;not null;comment:正在执行得流程"` + MsgId int64 `json:"msgId" gorm:"column:msgId;type:bigint(20) unsigned;default:0;not null;comment:发送消息得任务ID"` +} + +func (TaskRecord *TaskRecord) TableName() string { + return "taskrecord" +} + +// 编辑内容 +func (cont *TaskRecord) EiteCont(whereMap interface{}, saveData interface{}) (err error) { + err = overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Updates(saveData).Error + return +} + +// 获取内容 +func (cont *TaskRecord) GetCont(whereMap interface{}, field ...string) (err error) { + gormDb := overall.CONSTANT_DB_CustomerForm.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 *TaskRecord) CountCont(whereMap interface{}) (countId int64) { + overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Count(&countId) + return +} + +// 读取全部信息 +func (cont *TaskRecord) ContMap(whereMap interface{}, field ...string) (countAry []TaskRecord, err error) { + gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont) + if len(field) > 0 { + fieldStr := strings.Join(field, ",") + gormDb = gormDb.Select(fieldStr) + } + err = gormDb.Where(whereMap).Find(&countAry).Error + return +} + +// 删除内容 +func (cont *TaskRecord) DelCont(whereMap interface{}) (err error) { + err = overall.CONSTANT_DB_CustomerForm.Where(whereMap).Delete(&cont).Error + return +} diff --git a/models/customerForm/taskrunrecord.go b/models/customerForm/taskrunrecord.go new file mode 100644 index 0000000..3974ae5 --- /dev/null +++ b/models/customerForm/taskrunrecord.go @@ -0,0 +1,76 @@ +package customerForm + +import ( + "hr_server/overall" + "strings" +) + +// 工作流执行主体 +// 字典类型 +type TaskRunRecord struct { + Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` + FlowKey int64 `json:"flowKey" gorm:"column:flow_key;type:bigint(20) unsigned;default:0;not null;comment:工作流主体"` + Version string `json:"version" gorm:"column:version;type:varchar(255);default:'';comment:使用得版本"` + Status int `json:"status" gorm:"column:status;type:int(1) unsigned;default:1;not null;comment:状态:1、草稿;2:驳回;3:通过;4:归档;5:删除"` + FlowCont string `json:"flowcont" gorm:"column:flow_cont;type:longtext;comment:流程执行体"` + Creater int64 `json:"creater" gorm:"column:creater;type:bigint(20) unsigned;default:0;not null;comment:流程发起人"` + CurrentStep int `json:"currentStep" gorm:"column:current_step;type:int(4) unsigned;default:1;not null;comment:当前节点"` + NextStep int `json:"nextStep" gorm:"column:next_step;type:int(4) unsigned;default:0;not null;comment:下一个节点。0:代表没有下一个节点。流程结束"` + NextExecutor string `json:"nextExecutor" gorm:"column:next_executor;type:mediumtext;default:'';comment:下一步执行人"` + Participants string `json:"participants" gorm:"column:participants;type:longtext;comment:参与人"` + StartTime int64 `json:"startTime" gorm:"column:start_time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` + UpdateTime int64 `json:"update_time" gorm:"column:update_time;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"` + VersionCont string `json:"versionCont" gorm:"column:version_cont;type:longtext;comment:版本流程内容"` + RunKey int64 `json:"runKey" gorm:"column:runKey;type:bigint(20) unsigned;default:0;not null;comment:当前执行识别符"` +} + +func (TaskRunRecord *TaskRunRecord) TableName() string { + return "taskrunrecord" +} + +// 写入内容 +func (cont *TaskRunRecord) WriteCont() (err error) { + err = overall.CONSTANT_DB_CustomerForm.Create(&cont).Error + return +} + +// 编辑内容 +func (cont *TaskRunRecord) EiteCont(whereMap interface{}, saveData interface{}) (err error) { + err = overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Updates(saveData).Error + return +} + +// 获取内容 +func (cont *TaskRunRecord) GetCont(whereMap interface{}, field ...string) (err error) { + gormDb := overall.CONSTANT_DB_CustomerForm.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 *TaskRunRecord) CountCont(whereMap interface{}) (countId int64) { + overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Count(&countId) + return +} + +// 读取全部信息 +func (cont *TaskRunRecord) ContMap(whereMap interface{}, field ...string) (countAry []TaskRunRecord, err error) { + gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont) + if len(field) > 0 { + fieldStr := strings.Join(field, ",") + gormDb = gormDb.Select(fieldStr) + } + err = gormDb.Where(whereMap).Find(&countAry).Error + return +} + +// 删除内容 +func (cont *TaskRunRecord) DelCont(whereMap interface{}) (err error) { + err = overall.CONSTANT_DB_CustomerForm.Where(whereMap).Delete(&cont).Error + return +} diff --git a/models/duties.go b/models/duties.go index bb0a4ef..44d26fb 100644 --- a/models/duties.go +++ b/models/duties.go @@ -5,14 +5,14 @@ import ( "strings" ) -//职务 +// 职务 type Duties struct { Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` Name string `json:"name" gorm:"column:name;type:varchar(255) unsigned;default:'';not null;comment:职务名称"` JobType int64 `json:"jobtype" gorm:"column:job_type;type:bigint(20) unsigned;default:0;not null;comment:归属职务类型"` Weight int64 `json:"weight" gorm:"column:weight;type:bigint(20) unsigned;default:1;not null;comment:权重"` Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` - Number string `json:"number" gorm:"column:number;type:varchar(50) unsigned;default:'';not null;comment:编码"` + Number string `json:"number" gorm:"column:number;type:varchar(50) unsigned;default:'';comment:编码"` State int `json:"state" gorm:"column:state;type:int(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)"` KingdeeId string `json:"kingdeeid" gorm:"column:kingdeeid;type:varchar(255) unsigned;default:'';comment:金蝶对照ID"` KingdeeNum string `json:"kingdeenum" gorm:"column:kingdeenum;type:varchar(255) unsigned;default:'';comment:金蝶对照编码"` @@ -22,13 +22,13 @@ func (Duties *Duties) TableName() string { return "duties" } -//编辑职务分类内容 +// 编辑职务分类内容 func (Duties *Duties) EiteCont(whereMap map[string]interface{}, saveData map[string]interface{}) (err error) { err = overall.CONSTANT_DB_HR.Model(&Duties).Where(whereMap).Updates(saveData).Error return } -//获取详细内容 +// 获取详细内容 func (cont *Duties) GetCont(whereMap interface{}, field ...string) (err error) { gormDb := overall.CONSTANT_DB_HR.Model(&cont) if len(field) > 0 { diff --git a/models/inside_work_history.go b/models/inside_work_history.go index 9e18686..3b29a93 100644 --- a/models/inside_work_history.go +++ b/models/inside_work_history.go @@ -30,6 +30,13 @@ type InsideWorkHistory struct { SuperiorPosition string `json:"superiorPosition" gorm:"column:superiorPosition;type:varchar(255) ;comment:上级职位"` SuperiorName string `json:"superiorName" gorm:"column:superiorName;type:varchar(255) unsigned;default:'';comment:上级名称"` Subordinates int `json:"subordinates" gorm:"column:subordinates;type:int(5) unsigned;default:0;not null;comment:下属人数"` + Bdlx string `json:"bdlx" gorm:"column:bdlx;type:varchar(255) ;comment:变动类型"` + Gsmc string `json:"gsmc" gorm:"column:gsmc;type:varchar(255) ;comment:公司名称"` + Yjbm string `json:"yjbm" gorm:"column:yjbm;type:varchar(255) ;comment:一级部门"` + Ejbm string `json:"ejbm" gorm:"column:ejbm;type:varchar(255) ;comment:二级部门"` + Gongduan string `json:"gongduan" gorm:"column:gongduan;type:varchar(255) ;comment:工段"` + Dengji string `json:"dengji" gorm:"column:dengji;type:varchar(255) ;comment:等级"` + Zhiwei string `json:"zhiwei" gorm:"column:zhiwei;type:varchar(255) ;comment:职位"` } func (InsideWorkHistory *InsideWorkHistory) TableName() string { diff --git a/models/man_cont.go b/models/man_cont.go index f8ae973..374b8dc 100644 --- a/models/man_cont.go +++ b/models/man_cont.go @@ -66,6 +66,7 @@ type ManCont struct { CareerPlanning string `json:"career_planning" gorm:"column:career_planning;type:longtext;default:'';not null;comment:职业生涯规划"` HelpObtained string `json:"help_obtained" gorm:"column:help_obtained;type:longtext;default:'';not null;comment:个人期望从组织获得的帮助"` Hobby string `json:"hobby" gorm:"column:hobby;type:text;default:'';not null;comment:爱好"` + ExcelTemplate int64 `json:"excelTemplate" gorm:"column:excel_template;type:bigint(20) unsigned;default:0;not null;comment:信息来源于哪个模板` } func (ManCont *ManCont) TableName() string { diff --git a/models/meritslog.go b/models/meritslog.go index 39a8f17..75997e6 100644 --- a/models/meritslog.go +++ b/models/meritslog.go @@ -15,6 +15,7 @@ type Meritslog struct { Years int `json:"years" gorm:"column:years;type:int(7) unsigned;default:0;not null;comment:年"` Months int `json:"months" gorm:"column:months;type:int(7) unsigned;default:0;not null;comment:月"` Level string `json:"level" gorm:"column:level;type:varchar(255);not null;comment:考核等级"` + Notes string `json:"notes" gorm:"column:notes;type:mediumtext;comment:考核等级"` } func (Meritslog *Meritslog) TableName() string { diff --git a/models/orgChangeRecord.go b/models/orgChangeRecord.go new file mode 100644 index 0000000..1b15f34 --- /dev/null +++ b/models/orgChangeRecord.go @@ -0,0 +1,67 @@ +package models + +import ( + "hr_server/overall" + "strings" +) + +// 行政组织变更记录 +type OrgChangeRecord struct { + Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:ID"` + Userkey int64 `json:"userkey" gorm:"primaryKey;column:userkey;type:bigint(20) unsigned;not null;comment:员工唯一识别符;"` + CompanyCn string `json:"companycn" gorm:"column:companycn;type:varchar(255) ;comment:公司中文"` + CompanyId int64 `json:"companyid" gorm:"column:companyid;type:bigint(20) unsigned;default:0;not null;comment:公司id"` + FirstDepartment string `json:"firstDepartment" gorm:"column:firstDepartment;type:varchar(255) ;comment:一级部门中文"` + FirstDepartmentId int64 `json:"firstDepartmentid" gorm:"column:firstDepartmentid;type:bigint(20) unsigned;default:0;not null;comment:一级部门id"` + SecondaryDepartment string `json:"secondaryDepartment" gorm:"column:secondaryDepartment;type:varchar(255) ;comment:二级部门中文"` + SecondaryDepartmentId int64 `json:"secondaryDepartmentid" gorm:"column:secondaryDepartmentid;type:bigint(20) unsigned;default:0;not null;comment:二级部门id"` + WorkShop string `json:"workshop" gorm:"column:workshop;type:varchar(255) ;comment:公司中文"` + WorkShopid int64 `json:"workshopid" gorm:"column:workshopid;type:bigint(20) unsigned;default:0;not null;comment:工段ID"` + Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` + Notes string `json:"notes" gorm:"column:notes;type:mediumtext;comment:备注"` +} + +func (OrgChangeRecord *OrgChangeRecord) TableName() string { + return "orgChangeRecord" +} + +// 编辑内容 +func (cont *OrgChangeRecord) EiteCont(whereMap interface{}, saveData interface{}) (err error) { + err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error + return +} + +// 获取内容 +func (cont *OrgChangeRecord) 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 *OrgChangeRecord) CountCont(whereMap interface{}) (countId int64) { + overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId) + return +} + +// 读取全部信息 +func (cont *OrgChangeRecord) ContMap(whereMap interface{}, field ...string) (countAry []OrgChangeRecord, 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 *OrgChangeRecord) DelCont(whereMap interface{}) (err error) { + err = overall.CONSTANT_DB_HR.Where(whereMap).Delete(&cont).Error + return +} diff --git a/models/org_cont_type.go b/models/org_cont_type.go index ea7e853..76b77e2 100644 --- a/models/org_cont_type.go +++ b/models/org_cont_type.go @@ -1,6 +1,9 @@ package models import ( + "encoding/json" + "fmt" + "hr_server/grocerystore" "hr_server/overall" "strings" ) @@ -32,3 +35,23 @@ func (cont *OrgContType) GetCont(whereMap interface{}, field ...string) (err err err = gormDb.First(&cont).Error return } + +// 根据ID获取行政组织内容 +func (cont *OrgContType) RedisCont(orgId int64) (err error) { + redisFileKey := fmt.Sprintf("orgType:Info:%v_%v", orgId, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias) + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) //设定redis库 + isTrue, tokens := redisClient.Get(redisFileKey) + if isTrue && tokens != "" { + err = json.Unmarshal([]byte(tokens), &cont) + return + } else { + var jsonStr []byte + err = overall.CONSTANT_DB_HR.Model(&cont).Where("`id` = ?", orgId).First(&cont).Error + if err == nil { + redisClient.SetRedisTime(0) + jsonStr, err = json.Marshal(cont) + redisClient.Set(redisFileKey, string(jsonStr)) + } + } + return +} diff --git a/models/personarchives.go b/models/personarchives.go index bf36345..8200937 100644 --- a/models/personarchives.go +++ b/models/personarchives.go @@ -1,6 +1,9 @@ package models import ( + "encoding/json" + "fmt" + "hr_server/grocerystore" "hr_server/overall" "strings" ) @@ -41,6 +44,7 @@ type PersonArchives struct { ResponsibleDepartmentJson string `json:"responsibledepartmentjson" gorm:"column:responsible_department_json;type:longtext;default:'';not null;comment:负责的行政组织json"` WorkSection int64 `json:"workSection" gorm:"column:work_section;type:bigint(20) unsigned;default:0;not null;comment:工段"` IsShowTrue int64 `json:"isShowTrue" gorm:"column:is_show_true;type:int(5) unsigned;default:2;not null;comment:信息是否锁定` + ExcelTemplate int64 `json:"excelTemplate" gorm:"column:excel_template;type:bigint(20) unsigned;default:0;not null;comment:信息来源于哪个模板` } func (PersonArchives *PersonArchives) TableName() string { @@ -64,3 +68,31 @@ func (cont *PersonArchives) GetCont(whereMap interface{}, field ...string) (err err = gormDb.First(&cont).Error return } + +// 根据ID获取行政组织内容 +func (cont *PersonArchives) RedisCont(key string, class int) (err error) { + redisFileKey := fmt.Sprintf("UserDossier:Info:%v_%v", key, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias) + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) //设定redis库 + isTrue, tokens := redisClient.Get(redisFileKey) + if isTrue && tokens != "" { + err = json.Unmarshal([]byte(tokens), &cont) + return + } else { + var jsonStr []byte + switch class { + case 1: + err = overall.CONSTANT_DB_HR.Model(&cont).Where("`number` = ?", key).First(&cont).Error + case 2: + err = overall.CONSTANT_DB_HR.Model(&cont).Where("`key` = ?", key).First(&cont).Error + default: + err = overall.CONSTANT_DB_HR.Model(&cont).Where("`id` = ?", key).First(&cont).Error + } + + if err == nil { + redisClient.SetRedisTime(0) + jsonStr, err = json.Marshal(cont) + redisClient.Set(redisFileKey, string(jsonStr)) + } + } + return +} diff --git a/models/personnel_education.go b/models/personnel_education.go index df3bc2d..5424f9c 100644 --- a/models/personnel_education.go +++ b/models/personnel_education.go @@ -26,6 +26,9 @@ type PersonnelEducation struct { EducationType int `json:"educationType" gorm:"column:education_type;type:tinyint(1) unsigned;default:1;not null;comment:学历类型(1、全日制统招学历;2、成人高考学历;3、自学考试学历;4:开放大学学历;5:网络教育学历)"` CollegeFaction string `json:"collegeFaction" gorm:"column:collegeFaction;type:varchar(30) unsigned;comment:所属院系"` SchoolType int `json:"schoolType" gorm:"column:schoolType;type:tinyint(1) unsigned;default:1;not null;comment:学历类型(院校类型(1、私立中学;2:公立中学;3:高职院校;4:民办专科院校;5:公办专科院校;6:民办本科院校;7:公办本科院校;8:”211“工程院校;9:”985“工程院校;10:双一流院校))"` + XueLi string `json:"xueLi" gorm:"column:xueLi;type:varchar(255) unsigned;comment:学历"` + XueLiLeixing string `json:"xueLiLeixing" gorm:"column:xueLiLeixing;type:varchar(255) unsigned;comment:学历类型"` + YuanXiaoLeiXing string `json:"yuanXiaoLeiXing" gorm:"column:yuanXiaoLeiXing;type:varchar(255) unsigned;comment:院校类型"` } func (PersonnelEducation *PersonnelEducation) TableName() string { diff --git a/models/perstatisticsevaluators.go b/models/perstatisticsevaluators.go new file mode 100644 index 0000000..df0f547 --- /dev/null +++ b/models/perstatisticsevaluators.go @@ -0,0 +1,62 @@ +package models + +import ( + "hr_server/overall" + "strings" +) + +// 行政组织变更记录 +type PerstatiSticsevaluators struct { + Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:ID"` + Userkey int64 `json:"userkey" gorm:"primaryKey;column:userkey;type:bigint(20) unsigned;not null;comment:员工唯一识别符;"` + TimeYear int64 `json:"timeYear" gorm:"column:timeYear;type:bigint(20) unsigned;default:0;not null;comment:考评年分"` + Levels int64 `json:"levels" gorm:"column:levels;type:int(1) unsigned;default:1;not null;comment:考评分类"` + Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` + EvaluationItems string `json:"evaluationItems" gorm:"column:evaluationItems;type:varchar(255) ;comment:评估项"` + Comment string `json:"v" gorm:"column:comment;type:mediumtext;comment:领导评语"` +} + +func (PerstatiSticsevaluators *PerstatiSticsevaluators) TableName() string { + return "perstatisticsevaluators" +} + +// 编辑内容 +func (cont *PerstatiSticsevaluators) EiteCont(whereMap interface{}, saveData interface{}) (err error) { + err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error + return +} + +// 获取内容 +func (cont *PerstatiSticsevaluators) 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 *PerstatiSticsevaluators) CountCont(whereMap interface{}) (countId int64) { + overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId) + return +} + +// 读取全部信息 +func (cont *PerstatiSticsevaluators) ContMap(whereMap interface{}, field ...string) (countAry []PerstatiSticsevaluators, 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 *PerstatiSticsevaluators) DelCont(whereMap interface{}) (err error) { + err = overall.CONSTANT_DB_HR.Where(whereMap).Delete(&cont).Error + return +} diff --git a/models/rewards_penalties.go b/models/rewards_penalties.go index f9207f2..f46b7a6 100644 --- a/models/rewards_penalties.go +++ b/models/rewards_penalties.go @@ -7,17 +7,18 @@ import ( // 证书 type RewardsPenalties struct { - Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:ID"` - Title string `json:"title" gorm:"column:title;type:varchar(30) unsigned;not null;comment:奖励/处分项目"` - UserKey int64 `json:"userkey" gorm:"column:userkey;type:bigint(20) unsigned;default:0;not null;comment:获得人员"` - Types int `json:"types" gorm:"column:types;type:tinyint(1) unsigned;default:1;not null;comment:类型(1:奖励;2:处分;)` - State int `json:"state" gorm:"column:state;type:tinyint(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)` - IssuingUnit string `json:"issuingUnit" gorm:"column:issuing_unit;type:varchar(255) unsigned;default:'';not null;comment:颁发单位"` - TimeData int64 `json:"timedata" gorm:"column:timedata;type:bigint(20) unsigned;default:0;not null;comment:获得时间"` - Years int `json:"years" gorm:"column:years;type:int(7) unsigned;default:0;not null;comment:年"` - Months int `json:"months" gorm:"column:months;type:int(7) unsigned;default:0;not null;comment:月"` - Level int `json:"level" gorm:"column:level;type:int(7) unsigned;default:0;not null;comment:奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)"` - RewPunClass int `json:"rewPunClass" gorm:"column:rewPunClass;type:int(7) unsigned;default:0;not null;comment:奖惩类型(1:年终评优;2:表扬;3:嘉奖;4:记功;5:记大功;6:特别奖励;7:批评;8:警告;9:记过;10:记大过;11:降级;12:留用察看;13:开除)"` + Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:ID"` + Title string `json:"title" gorm:"column:title;type:varchar(30) unsigned;not null;comment:奖励/处分项目"` + UserKey int64 `json:"userkey" gorm:"column:userkey;type:bigint(20) unsigned;default:0;not null;comment:获得人员"` + Types int `json:"types" gorm:"column:types;type:tinyint(1) unsigned;default:1;not null;comment:类型(1:奖励;2:处分;)` + State int `json:"state" gorm:"column:state;type:tinyint(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)` + IssuingUnit string `json:"issuingUnit" gorm:"column:issuing_unit;type:varchar(255) unsigned;default:'';not null;comment:颁发单位"` + TimeData int64 `json:"timedata" gorm:"column:timedata;type:bigint(20) unsigned;default:0;not null;comment:获得时间"` + Years int `json:"years" gorm:"column:years;type:int(7) unsigned;default:0;not null;comment:年"` + Months int `json:"months" gorm:"column:months;type:int(7) unsigned;default:0;not null;comment:月"` + Level int `json:"level" gorm:"column:level;type:int(7) unsigned;default:0;not null;comment:奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)"` + RewPunClass int `json:"rewPunClass" gorm:"column:rewPunClass;type:int(7) unsigned;default:0;not null;comment:奖惩类型(1:年终评优;2:表扬;3:嘉奖;4:记功;5:记大功;6:特别奖励;7:批评;8:警告;9:记过;10:记大过;11:降级;12:留用察看;13:开除)"` + RewPunNumber string `json:"rewPunNumber" gorm:"column:rewPunNumber;type:varchar(255) unsigned;not null;comment:奖惩文号"` } func (RewardsPenalties *RewardsPenalties) TableName() string { diff --git a/models/talentInventory.go b/models/talentInventory.go new file mode 100644 index 0000000..4f080b1 --- /dev/null +++ b/models/talentInventory.go @@ -0,0 +1,53 @@ +package models + +import ( + "hr_server/overall" + "strings" +) + +// 班组 +type TalentInventory struct { + Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` + UserKey int64 `json:"userKey" gorm:"column:userKey;type:bigint(20) unsigned;default:0;not null;comment:归属人员key"` + UserTypes string `json:"userTypes" gorm:"column:userTypes;type:mediumtext;default null;comment:人员类型"` + CareerPlanning string `json:"careerPlanning" gorm:"column:careerPlanning;type:mediumtext;default null;comment:职业生涯规划"` + PersonalAssistance string `json:"personalAssistance" gorm:"column:personalAssistance;type:mediumtext;default null;comment:个人期望从组织获得的帮助"` + LastYearAssessmentLevel string `json:"lastYearAssessmentLevel" gorm:"column:lastYearAssessmentLevel;type:varchar(50) unsigned;default:'';not null;comment:上一年绩效成绩"` + Years int `json:"years" gorm:"column:years;type:int(5) unsigned;default:0;not null;comment:年份"` + Times int64 `json:"times" gorm:"column:times;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"` +} + +func (TalentInventory *TalentInventory) TableName() string { + return "talentInventory" +} + +// 编辑班组内容 +func (TalentInventory *TalentInventory) EiteTalentInventoryCont(whereMap map[string]interface{}, saveData map[string]interface{}) (err error) { + err = overall.CONSTANT_DB_HR.Model(&TalentInventory).Where(whereMap).Updates(saveData).Error + return +} + +// 获取详细内容 +func (cont *TalentInventory) 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 *TalentInventory) CountCont(whereMap interface{}) (countId int64) { + overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId) + return +} + +// 删除内容 +func (cont *TalentInventory) DelCont(whereMap interface{}) (err error) { + + err = overall.CONSTANT_DB_HR.Where(whereMap).Delete(&cont).Error + return +} diff --git a/models/userOrg.go b/models/userOrg.go new file mode 100644 index 0000000..01cb01d --- /dev/null +++ b/models/userOrg.go @@ -0,0 +1,63 @@ +package models + +import ( + "hr_server/overall" + "strings" +) + +type UserOrg struct { + Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` + Userkey int64 `json:"userKey" gorm:"primaryKey;column:userKey;type:bigint(20) unsigned;not null;comment:员工唯一识别符;"` + Company int64 `json:"company" gorm:"primaryKey;column:company;type:bigint(20) unsigned;not null;comment:所属公司;"` + Orgid int64 `json:"orgid" gorm:"primaryKey;column:orgid;type:bigint(20) unsigned;not null;comment:行政组织ID;"` + Position int64 `json:"position" gorm:"primaryKey;column:position;type:bigint(20) unsigned;not null;comment:职位;"` + TeamsId int64 `json:"teamsId" gorm:"primaryKey;column:teamsId;type:bigint(20) unsigned;not null;comment:班组Id;"` + StartTime int64 `json:"startTime" gorm:"primaryKey;column:startTime;type:bigint(20) unsigned;not null;comment:任职开始时间;"` + AssignType int `json:"assignType" gorm:"column:assignType;type:int(1) unsigned;default:50;not null;comment:1:主职;2:兼职"` + Time int64 `json:"time" gorm:"primaryKey;column:time;type:bigint(20) unsigned;not null;comment:编辑时间;"` +} + +func (UserOrg *UserOrg) TableName() string { + return "userOrg" +} + +// 编辑内容 +func (cont *UserOrg) EiteCont(whereMap interface{}, saveData interface{}) (err error) { + err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error + return +} + +// 获取内容 +func (cont *UserOrg) 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 *UserOrg) CountCont(whereMap interface{}) (countId int64) { + overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId) + return +} + +// 读取全部信息 +func (cont *UserOrg) ContMap(whereMap interface{}, field ...string) (countAry []UserOrg, 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 *UserOrg) DelCont(whereMap interface{}) (err error) { + err = overall.CONSTANT_DB_HR.Where(whereMap).Delete(&cont).Error + return +} diff --git a/models/work_history.go b/models/work_history.go index d1a5544..9447127 100644 --- a/models/work_history.go +++ b/models/work_history.go @@ -22,7 +22,7 @@ type WorkHistory struct { State int `json:"state" gorm:"column:state;type:int(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)"` WorkCont string `json:"workcont" gorm:"column:workcont;type:longtext ;comment:工作内容"` SuperiorPosition string `json:"superiorPosition" gorm:"column:superior_position;type:varchar(255) unsigned;default:'';comment:上级职务"` - MinionNumber int `json:"minion_number" gorm:"column:minion_number;type:int(5) unsigned;default:1;not null;comment:下属人数"` + MinionNumber int `json:"minion_number" gorm:"column:minion_number;type:int(5) unsigned;default:0;not null;comment:下属人数"` CompanyNature string `json:"companyNature" gorm:"column:companyNature;type:varchar(255) unsigned;default:'';comment:公司性质"` Industry string `json:"industry" gorm:"column:industry;type:varchar(255) unsigned;default:'';comment:所属行业"` } diff --git a/models/workgroup/genesis.go b/models/workgroup/genesis.go index 8f7b15a..32cdf72 100644 --- a/models/workgroup/genesis.go +++ b/models/workgroup/genesis.go @@ -13,6 +13,7 @@ type Genesis struct { Rules int64 `gorm:"column:rules" json:"rules"` //type:int64 comment:锚定轮询规则起点 StartTime int64 `gorm:"column:start_time" json:"starttime"` //type:int64 comment:锚定历史原点 Time int64 `gorm:"column:time" json:"time"` //type:int64 + OrgId int64 `gorm:"column:orgId" json:"orgId"` } func (Genesis *Genesis) TableName() string { @@ -22,6 +23,7 @@ func (Genesis *Genesis) TableName() string { // 编辑内容 func (cont *Genesis) EiteCont(whereMap interface{}, saveData interface{}) (err error) { err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error + err = overall.CONSTANT_HRSERVER_DATABASE.Model(&cont).Where(whereMap).Updates(saveData).Error return } @@ -57,5 +59,6 @@ func (cont *Genesis) ContMap(whereMap interface{}, field ...string) (countAry [] // 删除内容 func (cont *Genesis) DelCont(whereMap interface{}) (err error) { err = overall.CONSTANT_DB_HR.Where(whereMap).Delete(&cont).Error + err = overall.CONSTANT_HRSERVER_DATABASE.Where(whereMap).Delete(&cont).Error return } diff --git a/models/workgroup/teams_rules.go b/models/workgroup/teams_rules.go new file mode 100644 index 0000000..f540dd0 --- /dev/null +++ b/models/workgroup/teams_rules.go @@ -0,0 +1,66 @@ +package workgroup + +import ( + "hr_server/overall" + "strings" +) + +// 排班记录 +type TeamsRules struct { + Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;index"` + RuleTypeId int64 `json:"ruleTypeId" gorm:"column:ruleTypeId;type:bigint(20) unsigned;default:0;not null;comment:排班制度ID"` + RuleTypeName string `json:"ruleTypeName" gorm:"column:ruleTypeName;type:varchar(255);comment:制度名称"` + Cycle int `json:"cycle" gorm:"column:cycle;type:int(4) unsigned;default:1;not null;comment:周期类型"` + TeamsId int64 `json:"teamsId" gorm:"column:teamsId;type:bigint(20) unsigned;default:0;not null;comment:班组Id"` + TeamsName string `json:"teamsName" gorm:"column:teamsName;type:varchar(255);comment:班组姓名"` + CycleSort int64 `json:"cycleSort" gorm:"column:cycleSort;type:int(4) unsigned;default:1;not null;comment:周期排序"` + CycleName string `json:"cycleName" gorm:"column:cycleName;type:varchar(255);comment:周期名称"` + CycleWorkTime int64 `json:"cycleWorkTime" gorm:"column:cycleWorkTime;type:bigint(20) unsigned;default:0;not null;comment:工作时间段Id"` + CycleWorkName string `json:"cycleWorkName" gorm:"column:cycleWorkName;type:varchar(255);comment:工作时间段名称"` + Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"` +} + +func (TeamsRules *TeamsRules) TableName() string { + return "teams_rules" +} + +// 编辑内容 +func (cont *TeamsRules) EiteCont(whereMap interface{}, saveData interface{}) (err error) { + err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error + return +} + +// 获取内容 +func (cont *TeamsRules) 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 *TeamsRules) CountCont(whereMap interface{}) (countId int64) { + overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId) + return +} + +// 读取全部信息 +func (cont *TeamsRules) ContMap(whereMap interface{}, field ...string) (countAry []TeamsRules, 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 *TeamsRules) DelCont(whereMap interface{}) (err error) { + err = overall.CONSTANT_DB_HR.Where(whereMap).Delete(&cont).Error + return +} diff --git a/models/workgroup/working_time_period.go b/models/workgroup/working_time_period.go index cd960ac..5be4cd2 100644 --- a/models/workgroup/working_time_period.go +++ b/models/workgroup/working_time_period.go @@ -14,6 +14,7 @@ type WorkingTimePeriod struct { StartTime string `gorm:"column:start_time" json:"starttime"` //type:string comment:开始时间 version:2022-11-13 16:59 EndTime string `gorm:"column:end_time" json:"endtime"` //type:string comment:结束时间 version:2022-11-13 16:59 State int `gorm:"column:state" json:"state"` + Sort int `gorm:"column:sort" json:"sort"` //type:*int comment:排序 } func (WorkingTimePeriod *WorkingTimePeriod) TableName() string { diff --git a/overall/app_config_const.go b/overall/app_config_const.go index e8c6a51..941519b 100644 --- a/overall/app_config_const.go +++ b/overall/app_config_const.go @@ -18,6 +18,9 @@ var ( CONSTANT_DB_HR_Jin *gorm.DB //微信数据库 CONSTANT_Personality_Color *gorm.DB //性格色彩 CONSTANT_Hr_Server *gorm.DB //性格色彩 + CONSTANT_HRSERVER_DATABASE *gorm.DB //性格色彩 + CONSTANT_DB_CustomerForm *gorm.DB //自定义表单数据库 + CONSTANT_DB_AppPlatform *gorm.DB //应用平台据库 //Redis CONSTANT_REDIS0 *redis.Client CONSTANT_REDIS1 *redis.Client diff --git a/overall/app_constant.go b/overall/app_constant.go index 5a02c5c..5a0e60a 100644 --- a/overall/app_constant.go +++ b/overall/app_constant.go @@ -8,5 +8,6 @@ var ( 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.133.124.113:18888" + // DockingKingdeeUrl = "http://36.133.124.113:18888" //测试地址 + DockingKingdeeUrl = "http://36.133.124.113:18888" //正式地址 ) diff --git a/overall/overallhandle/format_output.go b/overall/overallhandle/format_output.go index 2376e89..8cbb518 100644 --- a/overall/overallhandle/format_output.go +++ b/overall/overallhandle/format_output.go @@ -25,6 +25,11 @@ func Result(code int, data interface{}, c *gin.Context, msgAry ...string) { c.JSON(http.StatusOK, Reply{code, msg, data}) //输出json格式数据 } +// 格式化输出 +func ResultInterface(data interface{}, c *gin.Context) { + c.JSON(http.StatusOK, data) //输出json格式数据 +} + //列表输出标准格式 /* @total 总数 @@ -33,13 +38,20 @@ func Result(code int, data interface{}, c *gin.Context, msgAry ...string) { @pageSize 每页显示数量 @data 返回数据 */ -func ResultList(code, page, pageSize int, total, count int64, data interface{}, c *gin.Context) (printMap map[string]interface{}) { +func ResultList(code, page, pageSize int, total, count int64, data interface{}, c *gin.Context, expand ...map[string]interface{}) (printMap map[string]interface{}) { outMap := MapOut() outMap["count"] = count outMap["total"] = total outMap["page"] = page outMap["pageSize"] = pageSize outMap["list"] = data + if len(expand) > 0 { + for _, v := range expand { + for mi, mv := range v { + outMap[mi] = mv + } + } + } printMap = outMap Result(code, outMap, c) return diff --git a/overall/overallhandle/log.go b/overall/overallhandle/log.go index cbcf0cf..3218494 100644 --- a/overall/overallhandle/log.go +++ b/overall/overallhandle/log.go @@ -30,7 +30,7 @@ func PathExists(path string) bool { return true } -//写日志 +// 写日志 func WriteLog(class string, errmsg ...any) { // var ErrorLog *log.Logger fileName := fmt.Sprintf("./%v/%v", overall.CONSTANT_CONFIG.Logsetup.Path, UnixTimeToDay(time.Now().Unix(), 21)) diff --git a/overall/overallhandle/overall_handle.go b/overall/overallhandle/overall_handle.go index 1b8f7bc..d83fa87 100644 --- a/overall/overallhandle/overall_handle.go +++ b/overall/overallhandle/overall_handle.go @@ -6,6 +6,7 @@ import ( "crypto/rand" "crypto/sha1" "encoding/hex" + "encoding/json" "errors" "fmt" "hr_server/grocerystore" @@ -22,6 +23,7 @@ import ( "time" "github.com/mozillazg/go-pinyin" + "gorm.io/gorm" ) // 全局函数处理 @@ -233,6 +235,59 @@ func ChineseFirstWordCapitalize(wordStr string) (firstWord string) { return } +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-24 08:48:33 +@ 功能: 字符串转拼音 +@ 参数 + + #Title string `json:"title"` //中文语句 + #Types int `json:"types"` //转换风格 0:普通风格,不带声调(默认风格)。如: zhong guo;1:声调风格1,拼音声调在韵母第一个字母上。如: zhōng guó;2:声调风格2,即拼音声调在各个韵母之后,用数字 [1-4] 进行表示。如: zho1ng guo2;3:声母风格,只返回各个拼音的声母部分。如: zh g 。注意:不是所有的拼音都有声母;4:首字母风格,只返回拼音的首字母部分。如: z g;5: 韵母风格,只返回各个拼音的韵母部分,不带声调。如: ong uo;6:韵母风格1,带声调,声调在韵母第一个字母上。如: ōng uó;7:韵母风格2,带声调,声调在各个韵母之后,用数字 [1-4] 进行表示。如: o1ng uo2;8:声调风格3,即拼音声调在各个拼音之后,用数字 [1-4] 进行表示。如: zhong1 guo2;9:韵母风格3,带声调,声调在各个拼音之后,用数字 [1-4] 进行表示。如: ong1 uo2; + #Connector string `json:"connector"` // Join 所用的分隔符 + #FormJson string `json:"formJson"` //当前表单内容 + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func StringToPinYin(types int, title, connector, formJson string) string { + pyObject := pinyin.NewArgs() + switch types { + case 1: + pyObject.Style = pinyin.Tone + case 2: + pyObject.Style = pinyin.Tone2 + case 3: + pyObject.Style = pinyin.Initials + case 4: + pyObject.Style = pinyin.FirstLetter + case 5: + pyObject.Style = pinyin.Finals + case 6: + pyObject.Style = pinyin.FinalsTone + case 7: + pyObject.Style = pinyin.FinalsTone2 + case 8: + pyObject.Style = pinyin.Tone3 + case 9: + pyObject.Style = pinyin.FinalsTone3 + default: + pyObject.Style = pinyin.Normal + } + pyObject.Separator = connector + str := pinyin.Slug(title, pyObject) + + if len(str) > 25 { + str = StringToPinYin(4, title, connector, formJson) + } + return str +} + //获取行政组织首字母 /* @govName 全称 @@ -930,6 +985,8 @@ func (a *AllSunList[int64]) GetAllSunOrg(superior int64) (err error) { return } +// func (a *AllSunList[int64])GetAllParentOrg + // 获取行政组织所有上级 func (a *AllSunList[int64]) GetAllFatherOrg(superior int64) (err error) { var orgAry []models.AdministrativeOrganization @@ -1146,6 +1203,12 @@ func HestacademicdegreeToInt(hir string) int { } } +// IsLeapYear 函数用于判断某一年是否为闰年 +func IsLeapYear(year int) bool { + // 普通年份能被 4 整除但不能被 100 整除,或者世纪年份能被 400 整除 + return (year%4 == 0 && year%100 != 0) || (year%400 == 0) +} + // 根据字符串组合时间 //补全时间 /* @@ -1153,6 +1216,7 @@ func HestacademicdegreeToInt(hir string) int { */ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) { timeStrAry := strings.Split(dateTime, "-") + // fmt.Printf("根据字符串组合时间:%v\n%v\n%v\n%v\n", dateTime, timeStrAry, len(timeStrAry), dateTime) switch len(timeStrAry) { case 1: dateTime = fmt.Sprintf("%v-01-01 12:00:00", dateTime) @@ -1221,13 +1285,32 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) { // if len(timeStrAry[2]) < 2 { // dayStr = fmt.Sprintf("0%v", timeStrAry[2]) // } - dateTime = fmt.Sprintf("%v-%v-%v", timeStrAry[0], monthStr, dayStr) + monthInt, _ := strconv.Atoi(monthStr) + if monthInt == 2 { + yearInt, _ := strconv.Atoi(timeStrAry[0]) + dayInt, _ := strconv.Atoi(dayStr) + if IsLeapYear(yearInt) { + + if dayInt > 29 { + dayStr = "29" + } + } else { + if dayInt > 28 { + dayStr = "28" + } + } + } + dateTime = fmt.Sprintf("%v-%v-%v", timeStrAry[0], monthStr, dayStr) + // fmt.Printf("monthInt:%v---1--->%v\n", monthInt, dateTime) default: } // fmt.Printf("dateTime:%v---1--->%v\n", dateTime, len(dateTime)) orgTime, orgTimeErr := DateToTimeStamp(fmt.Sprintf("%v-01-01 12:00:00", dateTime)) d.Time = dateTime + + // fmt.Printf("dateTime:%v---2--->%v\n", orgTime, orgTimeErr) + if orgTimeErr { d.AllTime = orgTime d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10) @@ -1241,6 +1324,7 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) { } else { orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v-01 12:00:00", dateTime)) + // fmt.Printf("dateTime:%v---3--->%v\n", orgTime, orgTimeErr) if orgTimeErr { d.AllTime = orgTime d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10) @@ -1252,9 +1336,193 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) { d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10) d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10) - fmt.Printf("dateTime:%v---2--->%v--->%v\n", orgTime, d.AllTime, d.Quarter) + // fmt.Printf("dateTime:%v---4--->%v--->%v\n", orgTime, d.AllTime, d.Quarter) } else { orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v 12:00:00", dateTime)) + // fmt.Printf("dateTime:%v---5--->%v--->%v\n", orgTime, orgTimeErr, fmt.Sprintf("%v 12:00:00", dateTime)) + if orgTimeErr { + d.AllTime = orgTime + d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10) + d.Quarter = strconv.FormatInt(ComputingTime(orgTime, 2), 10) + d.Months = strconv.FormatInt(ComputingTime(orgTime, 3), 10) + d.Week = strconv.FormatInt(ComputingTime(orgTime, 4), 10) + d.Days = strconv.FormatInt(ComputingTime(orgTime, 5), 10) + d.Hours = strconv.FormatInt(ComputingTime(orgTime, 7), 10) + d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10) + d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10) + } else { + orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v:00:00", dateTime)) + // fmt.Printf("dateTime:%v---6--->%v\n", orgTime, orgTimeErr) + if orgTimeErr { + d.AllTime = orgTime + d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10) + d.Quarter = strconv.FormatInt(ComputingTime(orgTime, 2), 10) + d.Months = strconv.FormatInt(ComputingTime(orgTime, 3), 10) + d.Week = strconv.FormatInt(ComputingTime(orgTime, 4), 10) + d.Days = strconv.FormatInt(ComputingTime(orgTime, 5), 10) + d.Hours = strconv.FormatInt(ComputingTime(orgTime, 7), 10) + d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10) + d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10) + } else { + orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v:00", dateTime)) + // fmt.Printf("dateTime:%v---7--->%v\n", orgTime, orgTimeErr) + if orgTimeErr { + d.AllTime = orgTime + d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10) + d.Quarter = strconv.FormatInt(ComputingTime(orgTime, 2), 10) + d.Months = strconv.FormatInt(ComputingTime(orgTime, 3), 10) + d.Week = strconv.FormatInt(ComputingTime(orgTime, 4), 10) + d.Days = strconv.FormatInt(ComputingTime(orgTime, 5), 10) + d.Hours = strconv.FormatInt(ComputingTime(orgTime, 7), 10) + d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10) + d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10) + } else { + orgTime, orgTimeErr = DateToTimeStamp(dateTime) + // fmt.Printf("dateTime:%v---8--->%v\n", orgTime, orgTimeErr) + if orgTimeErr { + d.AllTime = orgTime + d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10) + d.Quarter = strconv.FormatInt(ComputingTime(orgTime, 2), 10) + d.Months = strconv.FormatInt(ComputingTime(orgTime, 3), 10) + d.Week = strconv.FormatInt(ComputingTime(orgTime, 4), 10) + d.Days = strconv.FormatInt(ComputingTime(orgTime, 5), 10) + d.Hours = strconv.FormatInt(ComputingTime(orgTime, 7), 10) + d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10) + d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10) + } + } + } + } + } + } +} + +func (d *DateTimeTotimes) BaisStrToTimeLing(dateTime string) { + timeStrAry := strings.Split(dateTime, "-") + // fmt.Printf("根据字符串组合时间:%v\n%v\n%v\n%v\n", dateTime, timeStrAry, len(timeStrAry), dateTime) + switch len(timeStrAry) { + case 1: + dateTime = fmt.Sprintf("%v-01-01 00:00:00", dateTime) + case 2: + if len(timeStrAry[1]) < 2 { + dateTime = fmt.Sprintf("%v-0%v-01 00:00:00", timeStrAry[0], timeStrAry[1]) + } + case 3: + monthStr := timeStrAry[1] + if len(timeStrAry[1]) < 2 { + monthStr = fmt.Sprintf("0%v", timeStrAry[1]) + } + dayAry := strings.Split(timeStrAry[2], " ") + // fmt.Printf("dayAry:%v------>%v\n", dayAry, len(dayAry)) + dayStr := dayAry[0] + if len(dayAry[0]) < 2 { + dayStr = fmt.Sprintf("0%v", dayAry[0]) + } + if len(dayAry) > 1 { + // fmt.Printf("dayAry[1]:%v------>%v\n", dayAry[1], len(dayAry[1])) + if len(dayAry[1]) > 0 { + Hours := "00" + minutes := "00" + seconds := "00" + hisAry := strings.Split(dayAry[1], ":") + switch len(hisAry) { + case 1: + if len(hisAry[0]) < 2 { + Hours = fmt.Sprintf("0%v", hisAry[0]) + } else { + Hours = hisAry[0] + } + case 2: + if len(hisAry[0]) < 2 { + Hours = fmt.Sprintf("0%v", hisAry[0]) + } else { + Hours = hisAry[0] + } + if len(hisAry[1]) < 2 { + minutes = fmt.Sprintf("0%v", hisAry[1]) + } else { + minutes = hisAry[1] + } + case 3: + if len(hisAry[0]) < 2 { + Hours = fmt.Sprintf("0%v", hisAry[0]) + } else { + Hours = hisAry[0] + } + if len(hisAry[1]) < 2 { + minutes = fmt.Sprintf("0%v", hisAry[1]) + } else { + minutes = hisAry[1] + } + if len(hisAry[2]) < 2 { + seconds = fmt.Sprintf("0%v", hisAry[2]) + } else { + seconds = hisAry[2] + } + default: + } + dayStr = fmt.Sprintf("%v %v:%v:%v", dayStr, Hours, minutes, seconds) + } + } + // dayStr := timeStrAry[2] + // if len(timeStrAry[2]) < 2 { + // dayStr = fmt.Sprintf("0%v", timeStrAry[2]) + // } + monthInt, _ := strconv.Atoi(monthStr) + + if monthInt == 2 { + yearInt, _ := strconv.Atoi(timeStrAry[0]) + dayInt, _ := strconv.Atoi(dayStr) + if IsLeapYear(yearInt) { + + if dayInt > 29 { + dayStr = "29" + } + } else { + if dayInt > 28 { + dayStr = "28" + } + } + } + dateTime = fmt.Sprintf("%v-%v-%v", timeStrAry[0], monthStr, dayStr) + // fmt.Printf("monthInt:%v---1--->%v\n", monthInt, dateTime) + default: + } + // fmt.Printf("dateTime:%v---1--->%v\n", dateTime, len(dateTime)) + orgTime, orgTimeErr := DateToTimeStamp(fmt.Sprintf("%v-01-01 00:00:00", dateTime)) + d.Time = dateTime + + // fmt.Printf("dateTime:%v---2--->%v\n", orgTime, orgTimeErr) + + if orgTimeErr { + d.AllTime = orgTime + d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10) + d.Quarter = strconv.FormatInt(ComputingTime(orgTime, 2), 10) + d.Months = strconv.FormatInt(ComputingTime(orgTime, 3), 10) + d.Week = strconv.FormatInt(ComputingTime(orgTime, 4), 10) + d.Days = strconv.FormatInt(ComputingTime(orgTime, 5), 10) + d.Hours = strconv.FormatInt(ComputingTime(orgTime, 7), 10) + d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10) + d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10) + } else { + + orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v-01 00:00:00", dateTime)) + // fmt.Printf("dateTime:%v---3--->%v\n", orgTime, orgTimeErr) + if orgTimeErr { + d.AllTime = orgTime + d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10) + d.Quarter = strconv.FormatInt(ComputingTime(orgTime, 2), 10) + d.Months = strconv.FormatInt(ComputingTime(orgTime, 3), 10) + d.Week = strconv.FormatInt(ComputingTime(orgTime, 4), 10) + d.Days = strconv.FormatInt(ComputingTime(orgTime, 5), 10) + d.Hours = strconv.FormatInt(ComputingTime(orgTime, 7), 10) + d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10) + d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10) + + // fmt.Printf("dateTime:%v---4--->%v--->%v\n", orgTime, d.AllTime, d.Quarter) + } else { + orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v 00:00:00", dateTime)) + // fmt.Printf("dateTime:%v---5--->%v--->%v\n", orgTime, orgTimeErr, fmt.Sprintf("%v 12:00:00", dateTime)) if orgTimeErr { d.AllTime = orgTime d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10) @@ -1267,6 +1535,7 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) { d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10) } else { orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v:00:00", dateTime)) + // fmt.Printf("dateTime:%v---6--->%v\n", orgTime, orgTimeErr) if orgTimeErr { d.AllTime = orgTime d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10) @@ -1279,6 +1548,7 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) { d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10) } else { orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v:00", dateTime)) + // fmt.Printf("dateTime:%v---7--->%v\n", orgTime, orgTimeErr) if orgTimeErr { d.AllTime = orgTime d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10) @@ -1291,6 +1561,7 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) { d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10) } else { orgTime, orgTimeErr = DateToTimeStamp(dateTime) + // fmt.Printf("dateTime:%v---8--->%v\n", orgTime, orgTimeErr) if orgTimeErr { d.AllTime = orgTime d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10) @@ -1308,6 +1579,7 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) { } } } + func DateToTimeStampOld(dataStr string) (timeStamp int64) { tmp := "2006-01-02 15:04:05" res, _ := time.ParseInLocation(tmp, dataStr, time.Local) @@ -1399,6 +1671,46 @@ func StringToTimeIng(unit, str string) (res time.Time) { return } +// 获取当天是周几 +func ZellerFunction2Week(year, month, day int) int { + var weekday = [7]int{7, 1, 2, 3, 4, 5, 6} + var y, m, c int + // fmt.Println("ppppppppppp") + // fmt.Println(reflect.TypeOf(month)) + if month >= 3 { + + m = month + + y = year % 100 + + c = year / 100 + + } else { + + m = month + 12 + + y = (year - 1) % 100 + + c = (year - 1) / 100 + + } + + week := y + (y / 4) + (c / 4) - 2*c + ((26 * (m + 1)) / 10) + day - 1 + + if week < 0 { + + week = 7 - (-week)%7 + + } else { + + week = week % 7 + + } + which_week := int(week) + return weekday[which_week] + +} + /* * @ 作者: 秦东 @@ -1633,7 +1945,7 @@ func StarSign(level int64) string { case 6: return "处女座" case 7: - return "天枰座" + return "天秤座" case 8: return "天蝎座" case 9: @@ -1763,11 +2075,71 @@ func EducationTypeAll(level int64) string { return "网络教育学历" case 6: return "函授学历" + case 8: + return "“985”工程院校" + case 9: + return "“211”工程院校" + case 10: + return "公办本科院校" + case 11: + return "民办本科院校" + case 12: + return "公办专科院校" + case 13: + return "民办专科院校" + case 14: + return "高职院校" + case 15: + return "中职院校" + case 16: + return "公立中学" + case 17: + return "私立中学" default: return "" } } +// 学历类型 +func EducationTypeAllId(level string) int64 { + switch level { + case "全日制统招学历": + return 1 + case "成人高考学历": + return 2 + case "自学考试学历": + return 3 + case "开放大学学历": + return 4 + case "网络教育学历": + return 5 + case "函授学历": + return 6 + case "“985”工程院校": + return 8 + case "“211”工程院校": + return 9 + case "公办本科院校": + return 10 + case "民办本科院校": + return 11 + case "公办专科院校": + return 12 + case "民办专科院校": + return 13 + case "高职院校": + return 14 + case "中职院校": + return 15 + case "公立中学": + return 16 + case "私立中学": + return 17 + default: + return 16 + } +} + //取最大值 func GetMaxNum[T GenericityVariableInt](ary []T) T { @@ -1884,6 +2256,36 @@ func JoinJobChanelStr(hir int) string { // 获取所有下级 func (g *GetOrgAllParent) GetOrgSonAllId(orgId int64) { + redisFileKey := fmt.Sprintf("orgSuperior:Info:%v_%v", orgId, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias) + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) //设定redis库 + isTrue, tokens := redisClient.Get(redisFileKey) + + var orgAry []models.AdministrativeOrganization + if isTrue && tokens != "" { + err := json.Unmarshal([]byte(tokens), &orgAry) + if err != nil { + orgAry, _ = GetOrgSunId(orgId) + redisClient.SetRedisTime(1209600) + jsonStr, _ := json.Marshal(orgAry) + redisClient.Set(redisFileKey, string(jsonStr)) + } + } else { + orgAry, _ = GetOrgSunId(orgId) + redisClient.SetRedisTime(1209600) + jsonStr, _ := json.Marshal(orgAry) + redisClient.Set(redisFileKey, string(jsonStr)) + } + for _, v := range orgAry { + if !IsInTrue[int64](v.Id, g.Id) { + g.Id = append(g.Id, v.Id) + g.GetOrgSonAllId(v.Id) + } else { + g.GetOrgSonAllId(v.Id) + } + } +} + +func (g *GetOrgAllParent) GetOrgSonAllIdOld(orgId int64) { var orgAry []int64 if orgId != 0 { err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`").Where("`state` = 1 AND `superior` = ?", orgId).Find(&orgAry).Error @@ -1902,6 +2304,77 @@ func (g *GetOrgAllParent) GetOrgSonAllId(orgId int64) { } +// 获取所有下级(去除集团、公司、子集团) +func (g *GetOrgAllParent) GetGCSOrgSonAllIdRedis(orgId int64) { + var orgAry []int64 + if orgId != 0 { + err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`").Where("`state` = 1 AND `superior` = ?", orgId).Find(&orgAry).Error + if err != nil { + return + } + for _, v := range orgAry { + if !IsInTrue[int64](v, g.Id) { + var orgType models.OrgContType + // orgType.GetCont(map[string]interface{}{"`id`": v}, "`level`") + orgType.RedisCont(v) + if orgType.Level != 1 && orgType.Level != 2 && orgType.Level != 3 { + g.Id = append(g.Id, v) + g.GetOrgSonAllId(v) + } + + } else { + g.GetOrgSonAllId(v) + } + } + } + +} +func (g *GetOrgAllParent) GetGCSOrgSonAllId(orgId int64) { + redisFileKey := fmt.Sprintf("orgSuperior:Info:%v_%v", orgId, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias) + redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) //设定redis库 + isTrue, tokens := redisClient.Get(redisFileKey) + var orgAry []models.AdministrativeOrganization + var err error + if isTrue && tokens != "" { + err = json.Unmarshal([]byte(tokens), &orgAry) + if err != nil { + orgAry, _ = GetOrgSunId(orgId) + redisClient.SetRedisTime(1209600) + jsonStr, _ := json.Marshal(orgAry) + redisClient.Set(redisFileKey, string(jsonStr)) + } else { + if len(orgAry) < 1 { + orgAry, _ = GetOrgSunId(orgId) + redisClient.SetRedisTime(1209600) + jsonStr, _ := json.Marshal(orgAry) + redisClient.Set(redisFileKey, string(jsonStr)) + } + } + } else { + orgAry, _ = GetOrgSunId(orgId) + redisClient.SetRedisTime(1209600) + jsonStr, _ := json.Marshal(orgAry) + redisClient.Set(redisFileKey, string(jsonStr)) + } + for _, v := range orgAry { + if !IsInTrue[int64](v.Id, g.Id) { + var orgType models.OrgContType + orgType.RedisCont(v.Id) + if orgType.Level != 1 && orgType.Level != 2 && orgType.Level != 3 { + g.Id = append(g.Id, v.Id) + g.GetOrgSonAllId(v.Id) + } + } else { + g.GetOrgSonAllId(v.Id) + } + } +} + +func GetOrgSunId(orgId int64) (orgAry []models.AdministrativeOrganization, err error) { + err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`").Where("`state` = 1 AND `superior` = ?", orgId).Find(&orgAry).Error + return +} + /* * @ 作者: 秦东 @@ -2053,3 +2526,261 @@ func RewPunLevelClass(emp int) string { return "" } } + +/* +* +@ 作者: 秦东 +@ 时间: 2024-03-28 09:53:25 +@ 功能: 隐藏四位号码 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func MaskPhone(mobile string) string { + if len(mobile) <= 10 { + return mobile + } + return mobile[:3] + "****" + mobile[7:] +} + +// 翻页设置 +func PageTurningSettings(gormDb *gorm.DB, page, pageSize int) *gorm.DB { + if page < 0 { + page = 1 + } + if pageSize < 0 { + pageSize = 10 + } + gormDb = gormDb.Limit(pageSize).Offset(LimitPage(page, pageSize)) + return gormDb +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-07-04 13:58:45 +@ 功能: 计算两个时间戳相差时间 +@ 参数 + + # + +@ 返回值 + + # + +@ 方法原型 + + # +*/ +func CalculateYearDifference(timestamp1, timestamp2 int64, class int) (yearDiff float64, err error) { + date1 := time.Unix(timestamp1, 0) + date2 := time.Unix(timestamp2, 0) + // 计算两个时间的差值 + diff := date2.Sub(date1) + if diff < 0 { + diff = -diff + } + switch class { + case 1: //天 + if diff < 0 { + yearDiff = (diff.Hours() / 24) + } else { + yearDiff = (diff.Hours() / 24) + } + case 2: //周 + yearDiff = (diff.Hours() / (7 * 24)) + default: + yearDiff = (diff.Hours() / (365.25 * 24)) + fmt.Printf("年:%v\n", yearDiff) + } + yearDiff = math.Round(yearDiff) + return +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-09 09:21:09 +@ 功能: 根据身份证获取生日 +*/ +func GetBirthday(cardId string) string { + // 兼容第一代15位身份证号码 + if len(cardId) == 15 { + // 第一代身份证年份都是19开头的 + return fmt.Sprintf("19%s", cardId[6:12]) + } else { + return cardId[6:14] + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-09-09 09:21:44 +@ 功能: 根据生日获取年龄 +*/ +func GetAgeByBirthday(birthday string, class ...int) int { + year, _ := strconv.Atoi(birthday[0:4]) + month, _ := strconv.Atoi(birthday[4:6]) + day, _ := strconv.Atoi(birthday[6:]) + if len(class) > 0 { + year, _ = strconv.Atoi(birthday[0:4]) + month, _ = strconv.Atoi(birthday[5:7]) + day, _ = strconv.Atoi(birthday[8:]) + } + + // fmt.Printf("birthday--->%v\n", birthday) + // fmt.Printf("len(class)--->%v\n", len(class)) + // fmt.Printf("year--->%v\n", year) + // fmt.Printf("month--->%v\n", month) + // fmt.Printf("day--->%v\n", day) + // 计算当前日期与生日中年月日都差值 + now := time.Now() + age := now.Year() - year + moreMonth := int(now.Month()) - month + moreDay := now.Day() - day + + // fmt.Printf("now--->%v\n", now) + // fmt.Printf("age--->%v\n", age) + // fmt.Printf("moreMonth--->%v\n", moreMonth) + // fmt.Printf("moreDay--->%v\n", moreDay) + + // fmt.Printf("moreDay--1->%v\n", moreMonth < 0 || (moreMonth == 0 && moreDay < 0)) + // 未到生日月份,或者到了月份,但未到生日日期,年龄都要减1岁 + if moreMonth < 0 || (moreMonth == 0 && moreDay < 0) { + age-- + } + // 不要出现负值 + if age < 0 { + age = 0 + } + + return age +} + +// 数据考核类型 +func OutPutAnalysisExcelType(types string) int { + switch types { + case "一类": + return 1 + case "1类": + return 1 + case "一": + return 1 + case "1": + return 1 + case "二类": + return 2 + case "2类": + return 2 + case "二": + return 2 + case "2": + return 2 + case "三类": + return 3 + case "3类": + return 3 + case "三": + return 3 + case "3": + return 3 + default: + return 1 + } +} +func OutPutAnalysisExcelTypeStr(types int64) string { + switch types { + case 1: + return "一类" + + case 2: + return "二类" + + case 3: + return "三类" + + default: + return "一类" + } +} + +/* +* +@ 作者: 秦东 +@ 时间: 2024-04-02 11:19:41 +@ 功能: 泛型类型断言 +*/ +func TypeToInterface(val interface{}) string { + switch balData := val.(type) { + case int: + return strconv.Itoa(balData) + case int8: + return strconv.FormatInt(int64(balData), 10) + case int16: + return strconv.FormatInt(int64(balData), 10) + case int32: + return strconv.FormatInt(int64(balData), 10) + case int64: + return strconv.FormatInt(balData, 10) + case uint: + return strconv.FormatUint(uint64(balData), 10) + case uint8: + return strconv.FormatUint(uint64(balData), 10) + case uint16: + return strconv.FormatUint(uint64(balData), 10) + case uint32: + return strconv.FormatUint(uint64(balData), 10) + case uint64: + return strconv.FormatUint(balData, 10) + case float32: + return fmt.Sprintf("%v", float64(balData)) + case float64: + return fmt.Sprintf("%v", float64(balData)) + default: + if balDataStr, ok := balData.(string); ok { + if balDataStr != "" { + return balDataStr + } else { + return "" + } + } else { + return "" + } + + } + // if valDataStr, ok := val.(string); ok { + // if valDataStr != "" { + // return valDataStr + // } else { + // return "" + // } + // } else { + // return "" + // } +} + +// 数据库关系转换 +func DatabaseIntToString(typeId int64) string { + switch typeId { + case 2: + return "RTD" + case 3: + return "TIDB" + case 4: + return "SqlServer" + case 5: + return "redis" + default: + return "mysql" + } + return "mysql" +} diff --git a/overall/overallhandle/peopleLog.go b/overall/overallhandle/peopleLog.go new file mode 100644 index 0000000..26b7df1 --- /dev/null +++ b/overall/overallhandle/peopleLog.go @@ -0,0 +1,18 @@ +package overallhandle + +import "github.com/gin-gonic/gin" + +/** +@ 作者: 秦东 +@ 时间: 2024-03-08 13:38:51 +@ 功能: 人员操作记录 +@ 参数 + # +@ 返回值 + # +@ 方法原型 + # +*/ +func WritePeopleLog(c *gin.Context, class string, errmsg ...any) { + +} diff --git a/overall/overallhandle/type.go b/overall/overallhandle/type.go index 99b4462..01451ce 100644 --- a/overall/overallhandle/type.go +++ b/overall/overallhandle/type.go @@ -42,6 +42,12 @@ type NmuberOverall struct { Number string `json:"number"` //编码 } +// 判断名称识别符不重复 +type OnleyOneName struct { + NameOverall + NameAry []string +} + //输出行政组织关系 type outGovToClass struct { Name string `json:"name" gorm:"column:name;type:varchar(255) unsigned;default:'';not null;comment:组织名称"` @@ -113,3 +119,35 @@ type DateTimeTotimes struct { type GetOrgAllParent struct { Id []int64 `json:"id"` } +type PublicStatus struct { + Status int `json:"status"` +} + +type NodesUnitNameStatue struct { + ConstId + NameOverall + PublicStatus + IsLook bool `json:"isLook"` + IsEdit bool `json:"isEdit"` +} + +// 递归循环表单组件 +type RecursionFormUnit struct { + MasterUnitList []NodesUnitNameStatue `json:"masterUnitList"` + SunUnitList []SunNodesUnitNameStatue `json:"sunUnitList"` + UnitAllKey []string `json:"unitAllKey"` + UnitAllState []NodesUnitNameStatue `json:"-"` + + CurrentNodeName string `json:"-"` + NodePower []NodePowerInfo `json:"-"` +} +type SunNodesUnitNameStatue struct { + NameOverall + UnitList []NodesUnitNameStatue `json:"masterUnitList"` +} + +// 节点权限结构体 +type NodePowerInfo struct { + NodeKey string `json:"nodeKey"` + PowerAry []NodesUnitNameStatue `json:"powerAry"` +} diff --git a/scheduledtask/time_task.go b/scheduledtask/time_task.go index ef3189a..f4aa943 100644 --- a/scheduledtask/time_task.go +++ b/scheduledtask/time_task.go @@ -54,156 +54,414 @@ func TimeTask() { }) //每天0时15分执行 c.AddFunc("0 0 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(高管)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(48, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(高管)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(48, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(高管)", errWechat) + workWechat.NewTimedTasksForOrgWechat(48) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(高管)") }) //每天2时分执行 c.AddFunc("0 5 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(综合办)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(49, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(综合办)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(49, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(综合办)", errWechat) + workWechat.NewTimedTasksForOrgWechat(49) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(综合办)") }) //每天2时5分执行 c.AddFunc("0 10 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(人资部)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(50, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(人资部)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(50, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(人资部)", errWechat) + workWechat.NewTimedTasksForOrgWechat(50) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(人资部)") }) //每天2时10分执行 c.AddFunc("0 12 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(企管部)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(51, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(企管部)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(51, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(企管部)", errWechat) + workWechat.NewTimedTasksForOrgWechat(51) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(企管部)") }) //每天2时12分执行 c.AddFunc("0 15 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(财务部)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(52, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(财务部)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(52, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(财务部)", errWechat) + workWechat.NewTimedTasksForOrgWechat(52) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(财务部)") }) //每天2时15分执行 c.AddFunc("0 20 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(营销部)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(53, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(营销部)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(53, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(营销部)", errWechat) + workWechat.NewTimedTasksForOrgWechat(53) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(营销部)") }) //每天2时20分执行 c.AddFunc("0 22 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(生产部)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(54, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(生产部)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(54, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(生产部)", errWechat) + workWechat.NewTimedTasksForOrgWechat(54) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(生产部)") }) //每天2时22分执行 c.AddFunc("0 25 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(质检中心)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(55, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(质检中心)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(55, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(质检中心)", errWechat) + workWechat.NewTimedTasksForOrgWechat(55) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(质检中心)") }) //每天2时25分执行 c.AddFunc("0 27 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(保卫部)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(57, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(保卫部)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(57, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(保卫部)", errWechat) + workWechat.NewTimedTasksForOrgWechat(57) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(保卫部)") }) //每天2时27分执行 c.AddFunc("0 30 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(技术部)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(145, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(技术部)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(145, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(技术部)", errWechat) + workWechat.NewTimedTasksForOrgWechat(145) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(技术部)") }) //每天2时30分执行 c.AddFunc("0 32 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(安环部)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(56, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(安环部)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(56, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(安环部)", errWechat) + workWechat.NewTimedTasksForOrgWechat(56) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(安环部)") }) //每天2时32分执行 c.AddFunc("0 34 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(备煤车间)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(306, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(备煤车间)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(306, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(备煤车间)", errWechat) + workWechat.NewTimedTasksForOrgWechat(306) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(备煤车间)") }) //每天2时34分执行 c.AddFunc("0 44 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(机焦车间)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(307, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(机焦车间)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(307, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(机焦车间)", errWechat) + workWechat.NewTimedTasksForOrgWechat(307) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(机焦车间)") }) //每天2时44分执行 c.AddFunc("0 54 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(化产分厂)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(59, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(化产分厂)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(59, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(化产分厂)", errWechat) + workWechat.NewTimedTasksForOrgWechat(59) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(化产分厂)") }) //每天2时54分执行 c.AddFunc("0 59 2 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(甲醇分厂)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(61, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(甲醇分厂)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(61, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(甲醇分厂)", errWechat) + workWechat.NewTimedTasksForOrgWechat(61) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(甲醇分厂)") }) //每天2时59分执行 c.AddFunc("0 10 3 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(动力分厂)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(60, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(动力分厂)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(60, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(动力分厂)", errWechat) + workWechat.NewTimedTasksForOrgWechat(60) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(动力分厂)") }) //每天3时10分执行 c.AddFunc("0 20 3 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(电仪分厂)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(181, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(电仪分厂)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(181, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(电仪分厂)", errWechat) + workWechat.NewTimedTasksForOrgWechat(181) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(电仪分厂)") }) //每天3时20分执行 c.AddFunc("0 25 3 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(仓储中心)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(73, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(仓储中心)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(73, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(仓储中心)", errWechat) + workWechat.NewTimedTasksForOrgWechat(73) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(仓储中心)") }) //每天3时25分执行 c.AddFunc("0 26 3 * * *", func() { overallhandle.WriteLog("t", "开始执行企业微信信息对照(物流中心)") - dockingorganization.Position() - md5Token := "WorkWechatUpdatePeopleInfo" - errWechat := workWechat.UpdateWechatOrgPeople(76, "txl", md5Token, 1) - overallhandle.WriteLog("t", "结束执行企业微信信息对照(物流中心)", errWechat) - + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(76, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(物流中心)", errWechat) + workWechat.NewTimedTasksForOrgWechat(76) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(物流中心)") }) //每天3时26分执行 + c.AddFunc("0 40 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行企业微信信息对照(玖安工程)") + // md5Token := "WorkWechatUpdatePeopleInfo" + // errWechat := workWechat.UpdateWechatOrgPeople(76, "txl", md5Token, 1) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(物流中心)", errWechat) + workWechat.NewTimedTasksForOrgWechat(201) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(玖安工程)") + }) //每天3时40分执行 + + //荣信集团数据处理 + c.AddFunc("0 45 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(高管)") + workWechat.NewTimedTasksForOrgWechat(6) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(高管)") + }) //每天3时40分执行 + c.AddFunc("0 46 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(办公司)") + workWechat.NewTimedTasksForOrgWechat(7) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(办公司)") + }) //每天3时40分执行 + + c.AddFunc("0 47 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(人才发展中心)") + workWechat.NewTimedTasksForOrgWechat(8) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(人才发展中心)") + }) //每天3时40分执行 + c.AddFunc("0 48 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(企管部)") + workWechat.NewTimedTasksForOrgWechat(9) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(企管部)") + }) //每天3时40分执行 + c.AddFunc("0 49 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(审计部)") + workWechat.NewTimedTasksForOrgWechat(10) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(审计部)") + }) //每天3时40分执行 + c.AddFunc("0 50 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(法律事务部)") + workWechat.NewTimedTasksForOrgWechat(11) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(法律事务部)") + }) //每天3时40分执行 + c.AddFunc("0 51 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(财务部)") + workWechat.NewTimedTasksForOrgWechat(12) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(财务部)") + }) //每天3时40分执行 + c.AddFunc("0 52 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(供应部)") + workWechat.NewTimedTasksForOrgWechat(13) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(供应部)") + }) //每天3时40分执行 + c.AddFunc("0 53 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(销售部)") + workWechat.NewTimedTasksForOrgWechat(14) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(销售部)") + }) //每天3时40分执行 + c.AddFunc("0 54 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(生产计划部)") + workWechat.NewTimedTasksForOrgWechat(15) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(生产计划部)") + }) //每天3时40分执行 + c.AddFunc("0 55 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(工程技术部)") + workWechat.NewTimedTasksForOrgWechat(16) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(工程技术部)") + }) //每天3时40分执行 + c.AddFunc("0 56 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(基建部)") + workWechat.NewTimedTasksForOrgWechat(17) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(基建部)") + }) //每天3时40分执行 + c.AddFunc("0 57 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(安环部)") + workWechat.NewTimedTasksForOrgWechat(18) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(安环部)") + }) //每天3时40分执行 + c.AddFunc("0 58 3 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(保卫部)") + workWechat.NewTimedTasksForOrgWechat(19) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(保卫部)") + }) //每天3时40分执行 + c.AddFunc("0 05 4 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(纪检部)") + workWechat.NewTimedTasksForOrgWechat(140) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(纪检部)") + }) //每天3时40分执行 + c.AddFunc("0 06 4 * * *", func() { + // overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(煤焦分厂)") + // workWechat.NewTimedTasksForOrgWechat(144) + // overallhandle.WriteLog("t", "结束执行企业微信信息对照(煤焦分厂)") + + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(荣信集团机焦分厂)") + workWechat.NewTimedTasksForOrgWechat(341) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(荣信集团机焦分厂)") + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(荣信集团备煤煤分厂)") + workWechat.NewTimedTasksForOrgWechat(342) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(荣信集团备煤煤分厂)") + + }) //每天3时40分执行 + c.AddFunc("0 16 4 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(化产分厂)") + workWechat.NewTimedTasksForOrgWechat(21) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(化产分厂)") + }) //每天3时40分执行 + c.AddFunc("0 26 4 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(动力分厂)") + workWechat.NewTimedTasksForOrgWechat(23) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(动力分厂)") + }) //每天3时40分执行 + c.AddFunc("0 36 4 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(甲醇分厂)") + workWechat.NewTimedTasksForOrgWechat(24) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(甲醇分厂)") + }) //每天3时40分执行 + c.AddFunc("0 46 4 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(仓储中心)") + workWechat.NewTimedTasksForOrgWechat(25) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(仓储中心)") + }) //每天3时40分执行 + c.AddFunc("0 47 4 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(物流中心)") + workWechat.NewTimedTasksForOrgWechat(26) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(物流中心)") + }) //每天3时40分执行 + c.AddFunc("0 48 4 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(接待中心)") + workWechat.NewTimedTasksForOrgWechat(166) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(接待中心)") + }) //每天3时40分执行 + c.AddFunc("0 49 4 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(质检中心)") + workWechat.NewTimedTasksForOrgWechat(167) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(质检中心)") + }) //每天3时40分执行 + + c.AddFunc("0 59 4 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(恒信荟荃)") + workWechat.NewTimedTasksForOrgWechat(118) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(恒信荟荃)") + }) //每天3时40分执行 + c.AddFunc("0 10 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(恒信新能源)") + workWechat.NewTimedTasksForOrgWechat(330) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(恒信新能源)") + }) //每天3时40分执行 + + //新材料 + + c.AddFunc("0 20 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(焦油车间)") + workWechat.NewTimedTasksForOrgWechat(250) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(焦油车间)") + }) //每天3时40分执行 + c.AddFunc("0 21 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(动力车间)") + workWechat.NewTimedTasksForOrgWechat(251) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(动力车间)") + }) //每天3时40分执行 + c.AddFunc("0 25 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(针状焦车间)") + workWechat.NewTimedTasksForOrgWechat(252) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(针状焦车间)") + }) //每天3时40分执行 + c.AddFunc("0 30 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(综合办)") + workWechat.NewTimedTasksForOrgWechat(259) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(综合办)") + }) //每天3时40分执行 + c.AddFunc("0 31 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(安全科)") + workWechat.NewTimedTasksForOrgWechat(261) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(安全科)") + }) //每天3时40分执行 + c.AddFunc("0 32 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(新入职)") + workWechat.NewTimedTasksForOrgWechat(303) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(新入职)") + }) //每天3时40分执行 + //恒信科技 + c.AddFunc("0 32 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(仪表工段)") + workWechat.NewTimedTasksForOrgWechat(288) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(仪表工段)") + }) //每天3时40分执行 + c.AddFunc("0 32 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(电器工段)") + workWechat.NewTimedTasksForOrgWechat(289) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(电器工段)") + }) //每天3时40分执行 + c.AddFunc("0 32 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(维修工段)") + workWechat.NewTimedTasksForOrgWechat(295) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(维修工段)") + }) //每天3时40分执行 + c.AddFunc("0 32 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(办公室)") + workWechat.NewTimedTasksForOrgWechat(296) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(办公室)") + }) //每天3时40分执行 + c.AddFunc("0 32 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(产品精制工段)") + workWechat.NewTimedTasksForOrgWechat(297) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(产品精制工段)") + }) //每天3时40分执行 + c.AddFunc("0 32 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(苯加氢工段)") + workWechat.NewTimedTasksForOrgWechat(298) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(苯加氢工段)") + }) //每天3时40分执行 + c.AddFunc("0 32 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(蒽油加氢工段)") + workWechat.NewTimedTasksForOrgWechat(299) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(蒽油加氢工段)") + }) //每天3时40分执行 + c.AddFunc("0 32 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(辅运工段)") + workWechat.NewTimedTasksForOrgWechat(300) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(辅运工段)") + }) //每天3时40分执行 + c.AddFunc("0 32 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(新入职)") + workWechat.NewTimedTasksForOrgWechat(305) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(新入职)") + }) //每天3时40分执行 + c.AddFunc("0 32 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(暂调乙醇项目人员)") + workWechat.NewTimedTasksForOrgWechat(325) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(暂调乙醇项目人员)") + }) //每天3时40分执行 + //新入职人员待分配 + c.AddFunc("0 35 5 * * *", func() { + overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(新入职人员待分配)") + workWechat.NewTimedTasksForOrgWechat(168) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(新入职人员待分配)") + }) //每天3时40分执行 + + //中压热力 + c.AddFunc("0 10 21 * * *", func() { + overallhandle.WriteLog("t", "开始执行中压热力新材料企业微信信息对照(中压热力)") + workWechat.NewTimedTasksForOrgWechat(331) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(中压热力)") + }) //每天3时40分执行 + + c.AddFunc("0 10 21 * * *", func() { + overallhandle.WriteLog("t", "开始执行中压热力新材料企业微信信息对照(中压热力)") + workWechat.NewTimedTasksForOrgWechat(331) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(中压热力)") + }) //每天3时40分执行 + + c.AddFunc("0 30 1 * * *", func() { + overallhandle.WriteLog("t", "开始执行中压热力企业微信信息对照(集团高管、办公室、财务部、营销部)") + workWechat.NewTimedTasksForOrgWechat(44) + workWechat.NewTimedTasksForOrgWechat(45) + workWechat.NewTimedTasksForOrgWechat(46) + workWechat.NewTimedTasksForOrgWechat(47) + overallhandle.WriteLog("t", "结束执行企业微信信息对照(集团高管、办公室、财务部、营销部)") + }) //每天3时40分执行 + //启动 c.Start() //设定全部执行后,最后关闭定时任务