Browse Source

更新

v2_dev
herenshan112 10 months ago
parent
commit
6a265790f1
  1. 154
      README_ZHAH.md
  2. 110
      README_luruan.md
  3. 110
      README_yikatong.md
  4. 63
      api/jindie_docking/dockingorganization/controller.go
  5. 1
      api/version1/administrativeorganization/govcont.go
  6. 14
      api/version1/administrativeorganization/orgpost.go
  7. 7
      api/version1/administrativeorganization/team.go
  8. 20
      api/version1/administrativeorganization/type.go
  9. 389
      api/version1/dataCenter/databastHanld.go
  10. 202
      api/version1/dataCenter/hander.go
  11. 58
      api/version1/dataCenter/runDataBase.go
  12. 90
      api/version1/dataCenter/type.go
  13. 1838
      api/version1/personnelapi/analysExelect.go
  14. 1383
      api/version1/personnelapi/analysRxExelect.go
  15. 252
      api/version1/personnelapi/controll.go
  16. 18
      api/version1/personnelapi/export_type.go
  17. 22
      api/version1/personnelapi/kingdeecont.go
  18. 208
      api/version1/personnelapi/kingdeeempty.go
  19. 221
      api/version1/personnelapi/kingdeenew.go
  20. 233
      api/version1/personnelapi/mancont.go
  21. 275
      api/version1/personnelapi/orgUserRole.go
  22. 279
      api/version1/personnelapi/rewardsPunishments.go
  23. 19
      api/version1/personnelapi/staff.go
  24. 475
      api/version1/personnelapi/staffarchives.go
  25. 78
      api/version1/personnelapi/type.go
  26. 231
      api/version1/personnelapi/types.go
  27. 583
      api/version1/personnelapi/uploadFileredis.go
  28. 742
      api/version1/personnelapi/uploadfile.go
  29. 251
      api/version1/personnelapi/userarchives.go
  30. 91
      api/version1/shiyan/shiyan.go
  31. 12
      api/version1/shiyan/全部企业微信行政组织.ini
  32. 13
      api/version1/workWechat/typeApi.go
  33. 9
      api/version1/workWechat/wechat.go
  34. 6
      api/version1/workWechat/wechatApi.go
  35. 365
      api/version1/workWechat/workWechat.go
  36. 4
      api/version1/workrostering/structsetup.go
  37. 45
      api/version1/workrostering/teamtime.go
  38. 98
      apirouter/personnel/people.go
  39. 4
      apirouter/shiyanrouter/shiyan.go
  40. 1
      config/configApp/appConfig.yaml
  41. 1
      config/configApp/server.go
  42. 5
      config/configDatabase/database.go
  43. 69
      config/configDatabase/database.yaml
  44. 161
      devlog.md
  45. 23
      go.mod
  46. 149
      go.sum
  47. BIN
      hr_server.exe
  48. 7
      identification/authentication.go
  49. 21
      initialization/databaseinit/mysql.go
  50. 23
      models/administrative_organization.go
  51. 73
      models/customerForm/diaoBanSetup.go
  52. 79
      models/customerForm/huanBanShenQing.go
  53. 97
      models/customerForm/runFlowTask.go
  54. 77
      models/customerForm/runWorkflow.go
  55. 78
      models/customerForm/taskrecord.go
  56. 76
      models/customerForm/taskrunrecord.go
  57. 8
      models/duties.go
  58. 7
      models/inside_work_history.go
  59. 1
      models/man_cont.go
  60. 1
      models/meritslog.go
  61. 67
      models/orgChangeRecord.go
  62. 23
      models/org_cont_type.go
  63. 32
      models/personarchives.go
  64. 3
      models/personnel_education.go
  65. 62
      models/perstatisticsevaluators.go
  66. 23
      models/rewards_penalties.go
  67. 53
      models/talentInventory.go
  68. 63
      models/userOrg.go
  69. 2
      models/work_history.go
  70. 3
      models/workgroup/genesis.go
  71. 66
      models/workgroup/teams_rules.go
  72. 1
      models/workgroup/working_time_period.go
  73. 3
      overall/app_config_const.go
  74. 3
      overall/app_constant.go
  75. 14
      overall/overallhandle/format_output.go
  76. 2
      overall/overallhandle/log.go
  77. 737
      overall/overallhandle/overall_handle.go
  78. 18
      overall/overallhandle/peopleLog.go
  79. 38
      overall/overallhandle/type.go
  80. 448
      scheduledtask/time_task.go

154
README_ZHAH.md

@ -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 |

110
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<br />内网--->http://172.20.2.87:39168 |

110
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<br />内网--->http://172.20.2.87:39168 |

63
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)

1
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

14
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)

7
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 {

20
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:"-"`
}

389
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
}

202
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)
}

58
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)
}

90
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"` //表字段
}

1838
api/version1/personnelapi/analysExelect.go

File diff suppressed because it is too large

1383
api/version1/personnelapi/analysRxExelect.go

File diff suppressed because it is too large

252
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
}

18
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"`
}

22
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

208
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)
}
}
}

221
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

233
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)
}

275
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)
}
}
}

279
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)
}

19
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, "修改成功!")
}

475
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)
}

78
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
}

231
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:"-"` //
}

583
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)
}

742
api/version1/personnelapi/uploadfile.go

File diff suppressed because it is too large

251
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) //入学时间
}

91
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)
}

12
api/version1/shiyan/全部企业微信行政组织.ini

File diff suppressed because one or more lines are too long

13
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"`
}

9
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

6
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)

365
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, "更新完成")
}

4
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"` //行政组织
}
//排班查询列表

45
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)
}
/*

98
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) //人员定位信息(简略)
}
}

4
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) //测试获取职务
}
}

1
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' #日志保存地址

1
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"`
}
//日志配置

5
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 {

69
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日志
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日志

161
devlog.md

@ -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:国家级)';
```

23
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

149
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=

BIN
hr_server.exe

Binary file not shown.

7
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) {

21
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)
}
}

23
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
}

73
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
}

79
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
}

97
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
}

77
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
}

78
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
}

76
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
}

8
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 {

7
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 {

1
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 {

1
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 {

67
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
}

23
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
}

32
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
}

3
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 {

62
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
}

23
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 {

53
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
}

63
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
}

2
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:所属行业"`
}

3
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
}

66
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
}

1
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 {

3
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

3
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" //正式地址
)

14
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

2
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))

737
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"
}

18
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) {
}

38
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"`
}

448
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()
//设定全部执行后,最后关闭定时任务

Loading…
Cancel
Save