diff --git a/README_ZHAH.md b/README_ZHAH.md
deleted file mode 100644
index 5ccccb6..0000000
--- a/README_ZHAH.md
+++ /dev/null
@@ -1,154 +0,0 @@
-## Hr Server项目结构 1
-
-```Project
-|—— api
- └── version1
- └── empower
-|—— router
-|—— initialization
- └── database
- └── nosql
- └── app
- └── route
-|identification
-|—— config
- └── database
- └── nosql
- └── app
-|—— models
-|—— overall
-|—— middleware
-```
-
-## Hr 文件结构说明
-
-| 文件夹 | 说明 | 描述 |
-| ------------------ | ---------------- | ---------------------------------- |
-| `api` | api相关业务 | api业务实现 |
-| `--version1` | 业务版本文件夹 | 版本界定 |
-| `--empower` | OAuth 2.0 授权 | 授权Token |
-| `router` | 路由器 | 业务路由设定 |
-| `initialization` | 初始化相关业务 | 系统初始化方面的实现 |
-| `--database` | 数据库业务 | 数据库业务初始化实现 |
-| `--nosql` | nosql数据库业务 | nosql业务初始化实现(例:Redis) |
-| `--app` | app数据库业务 | app业务初始化实现 |
-| `--route` | 路由初始化 | 路由初始化 |
-| `identification` | 授权验证器 | 授权验证器 |
-| `config` | 系统配置相关业务 | 系统系统配置方面的实现 |
-| `--database` | 数据库业务 | 数据库业务系统配置实现 |
-| `--nosql` | nosql数据库业务 | nosql业务系统配置实现(例:Redis) |
-| `--app` | app数据库业务 | app业务系统配置实现 |
-| `models` | 数据模型 | 数据库方面的配置 |
-| `overall` | 全局对象 | 全局对象 |
-| `middleware` | 中间件 | 中间件 |
-
-## 加密规则
-
-```
- 1、分解步骤
- one = md5(CodeString)+md5(AppKey)
- two = md5(one)+AppKey
- therr = md5(two)
- 2、合并
- md5(md5(md5(CodeString)+md5(AppKey))+AppKey)
-```
-
-## 接口访问规则
-
-1、以POST方式访问 http://xxxx/empower/gaintoken
-
-#### 参数
-
-```json
- {
- "username":"jindie",
- "password":"jindie123"
- }
-```
-
-| 参数 | 说明 |
-| -------- | ---- |
-| username | 账号 |
-| password | 密码 |
-
-#### 返回值
-
-```json
- {
- "code": 0,
- "msg": "成功",
- "data": {
- "token": "6235a9de7109ba50852f3f9d3b3052ae",
- "number": "16534571868477"
- }
- }
-```
-
-| 参数 | 说明 | |
-| ---- | ------ | -------------------------- |
-| code | | 状态码 |
-| msg | | 信息 |
-| data | | 附加值 |
-| | token | Token(有效时间为180分钟) |
-| | number | 随机数 |
-
-1、以POST方式访问 http://xxxx/接口
-
-#### Header参数
-
-| 参数 | 说明 |
-| ------------ | ------------------------------ |
-| token | 获取到得参数 |
-| number | 加密后得随机数(参考加密规则) |
-| Content-Type | 内容类型 |
-| Origin | 站点信息 |
-| User-Agent | 用户代理 |
-
-#### Body参数 (接口需要得添加参数)
-
-```json
- {
- "page":"1",
- "pagesize":"20"
- }
-```
-
-| 参数 | 说明 |
-| -------- | -------------- |
-| page | 页码 |
-| pagesize | 每页显示多少条 |
-
-#### 返回值
-
-```json
- {
- "code": 0,
- "msg": "成功",
- "data": {
- "count": 20,
- "page": 1,
- "pageSize": 20,
- "total": 1147,
- "list": []
- }
- }
-```
-
-| 参数 | 说明 | |
-| ---- | -------- | -------------- |
-| code | | 状态码 |
-| msg | | 信息 |
-| data | | 附加值 |
-| | count | 本页共多少数据 |
-| | page | 当前页码 |
-| | pageSize | 每页显示多少条 |
-| | .... | .... |
-
-#### 认证信息
-
-| 参数 | 说明 |
-| ---------------- | ------------------------ |
-| UserKey | SdRxjt@zhah001 |
-| Password | Rx@Zhi$Hui%AnHuan |
-| VerificationCode | rxjt_zhan |
-| 访问地址 | http://120.224.6.6:39168 |
diff --git a/README_luruan.md b/README_luruan.md
new file mode 100644
index 0000000..cd3c331
--- /dev/null
+++ b/README_luruan.md
@@ -0,0 +1,110 @@
+## 加密规则
+
+```
+ 1、分解步骤
+ one = md5(CodeString)+md5(AppKey)
+ two = md5(one)+AppKey
+ therr = md5(two)
+ 2、合并
+ md5(md5(md5(CodeString)+md5(AppKey))+AppKey)
+```
+
+## 接口访问规则
+
+1、以POST方式访问 http://xxxx/empower/gaintoken
+
+#### 参数
+
+```json
+ {
+ "username":"luruankeji",
+ "password":"lu@ruan#ke$ji"
+ }
+```
+
+| 参数 | 说明 |
+| -------- | ---- |
+| username | 账号 |
+| password | 密码 |
+
+#### 返回值
+
+```json
+ {
+ "code": 0,
+ "msg": "成功",
+ "data": {
+ "token": "e869bb125d2ef2cd099f7f0bfc413eec",
+ "number": "17115918338182"
+ }
+ }
+```
+
+| 参数 | 说明 | |
+| ---- | ------ | -------------------------- |
+| code | | 状态码 |
+| msg | | 信息 |
+| data | | 附加值 |
+| | token | Token(有效时间为180分钟) |
+| | number | 随机数 |
+
+1、以POST方式访问 http://xxxx/接口
+
+#### Header参数
+
+| 参数 | 说明 |
+| ------------ | ------------------------------ |
+| token | 获取到得参数 |
+| number | 加密后得随机数(参考加密规则) |
+| Content-Type | 内容类型 |
+| Origin | 站点信息 |
+| User-Agent | 用户代理 |
+
+#### Body参数 (接口需要得添加参数)
+
+```json
+ {
+ "page":"1",
+ "pagesize":"20"
+ }
+```
+
+| 参数 | 说明 |
+| -------- | -------------- |
+| page | 页码 |
+| pagesize | 每页显示多少条 |
+
+#### 返回值
+
+```json
+ {
+ "code": 0,
+ "msg": "成功",
+ "data": {
+ "count": 20,
+ "page": 1,
+ "pageSize": 20,
+ "total": 1147,
+ "list": []
+ }
+ }
+```
+
+| 参数 | 说明 | |
+| ---- | -------- | -------------- |
+| code | | 状态码 |
+| msg | | 信息 |
+| data | | 附加值 |
+| | count | 本页共多少数据 |
+| | page | 当前页码 |
+| | pageSize | 每页显示多少条 |
+| | .... | .... |
+
+#### 认证信息
+
+| 参数 | 说明 |
+| ---------------- | ---------------------------------------------------------------------- |
+| UserKey | luruankeji |
+| Password | lu@ruan#ke$ji |
+| VerificationCode | luquan_hr |
+| 访问地址 | 外网--->http://120.224.6.6:39168
内网--->http://172.20.2.87:39168 |
diff --git a/README_yikatong.md b/README_yikatong.md
new file mode 100644
index 0000000..5c16bc3
--- /dev/null
+++ b/README_yikatong.md
@@ -0,0 +1,110 @@
+## 加密规则
+
+```
+ 1、分解步骤
+ one = md5(CodeString)+md5(AppKey)
+ two = md5(one)+AppKey
+ therr = md5(two)
+ 2、合并
+ md5(md5(md5(CodeString)+md5(AppKey))+AppKey)
+```
+
+## 接口访问规则
+
+1、以POST方式访问 http://xxxx/empower/gaintoken
+
+#### 参数
+
+```json
+ {
+ "username":"luruankeji",
+ "password":"lu@ruan#ke$ji"
+ }
+```
+
+| 参数 | 说明 |
+| -------- | ---- |
+| username | 账号 |
+| password | 密码 |
+
+#### 返回值
+
+```json
+ {
+ "code": 0,
+ "msg": "成功",
+ "data": {
+ "token": "e869bb125d2ef2cd099f7f0bfc413eec",
+ "number": "17115918338182"
+ }
+ }
+```
+
+| 参数 | 说明 | |
+| ---- | ------ | -------------------------- |
+| code | | 状态码 |
+| msg | | 信息 |
+| data | | 附加值 |
+| | token | Token(有效时间为180分钟) |
+| | number | 随机数 |
+
+1、以POST方式访问 http://xxxx/接口
+
+#### Header参数
+
+| 参数 | 说明 |
+| ------------ | ------------------------------ |
+| token | 获取到得参数 |
+| number | 加密后得随机数(参考加密规则) |
+| Content-Type | 内容类型 |
+| Origin | 站点信息 |
+| User-Agent | 用户代理 |
+
+#### Body参数 (接口需要得添加参数)
+
+```json
+ {
+ "page":"1",
+ "pagesize":"20"
+ }
+```
+
+| 参数 | 说明 |
+| -------- | -------------- |
+| page | 页码 |
+| pagesize | 每页显示多少条 |
+
+#### 返回值
+
+```json
+ {
+ "code": 0,
+ "msg": "成功",
+ "data": {
+ "count": 20,
+ "page": 1,
+ "pageSize": 20,
+ "total": 1147,
+ "list": []
+ }
+ }
+```
+
+| 参数 | 说明 | |
+| ---- | -------- | -------------- |
+| code | | 状态码 |
+| msg | | 信息 |
+| data | | 附加值 |
+| | count | 本页共多少数据 |
+| | page | 当前页码 |
+| | pageSize | 每页显示多少条 |
+| | .... | .... |
+
+#### 认证信息
+
+| 参数 | 说明 |
+| ---------------- | ---------------------------------------------------------------------- |
+| UserKey | yikatong |
+| Password | yi@ka#tong$app |
+| VerificationCode | yiKaTong_hr |
+| 访问地址 | 外网--->http://120.224.6.6:39168
内网--->http://172.20.2.87:39168 |
diff --git a/api/jindie_docking/dockingorganization/controller.go b/api/jindie_docking/dockingorganization/controller.go
index d9e6933..5e17c33 100644
--- a/api/jindie_docking/dockingorganization/controller.go
+++ b/api/jindie_docking/dockingorganization/controller.go
@@ -104,7 +104,7 @@ func GetOrgType() {
}
var orgAll []models.AdministrativeOrganizationType
allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&orgAll).Error
- if allErr == nil {
+ if allErr == nil && len(orgAll) > 0 {
var eidtId []string
for _, av := range orgAll {
if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false {
@@ -113,7 +113,7 @@ func GetOrgType() {
}
}
}
- if len(eidtId) > 0 {
+ if len(eidtId) > 0 && len(orgAll) > len(eidtId) {
orgContEditErr := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganizationType{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error
if orgContEditErr == nil {
overallhandle.WriteLog("edit", "禁用已不使用得行政组织类型成功!", orgContEditErr, eidtId)
@@ -190,7 +190,7 @@ func JobClass() {
var jobClassAll []models.JobClass
allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&jobClassAll).Error
- if allErr == nil {
+ if allErr == nil && len(jobClassAll) > 0 {
var eidtId []string
for _, av := range jobClassAll {
if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false {
@@ -199,7 +199,7 @@ func JobClass() {
}
}
}
- if len(eidtId) > 0 {
+ if len(eidtId) > 0 && len(jobClassAll) > len(eidtId) {
jobClassContEditErr := overall.CONSTANT_DB_HR.Model(&models.JobClass{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error
if jobClassContEditErr == nil {
overallhandle.WriteLog("edit", "禁用已不使用得职务类型成功!", jobClassContEditErr, eidtId)
@@ -229,6 +229,7 @@ func DutiesContrast() {
overallhandle.WriteLog("e", "未能获取到职务!", jobInfo)
return
}
+ // fmt.Printf("jobInfo:%v\n", jobInfo)
var kingDeeIdAry []string
//进行职务对照
for _, v := range jobInfo {
@@ -237,7 +238,7 @@ func DutiesContrast() {
}
//判断该项是否存在
var dutiesCont models.Duties
- dutiesErr := dutiesCont.GetCont(map[string]interface{}{"kingdeeid": v.Id}, "`id`", "`name`", `state`, `job_type`)
+ dutiesErr := dutiesCont.GetCont(map[string]interface{}{"kingdeeid": v.Id}, "`id`", "`name`", "`number`", "`state`", "`job_type`")
if dutiesErr == nil {
//存在,进行更新
//获取职务Id
@@ -247,23 +248,27 @@ func DutiesContrast() {
isCaoZuo := false
if v.Name != dutiesCont.Name {
if dutiesCont.JobType != jobClassInfo.Id {
- editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"name": v.Name, "state": 1, "job_type": jobClassInfo.Id})
+ editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"name": v.Name, "state": 1, "job_type": jobClassInfo.Id, "`number`": v.Fnumber})
isCaoZuo = true
} else {
- editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"name": v.Name, "state": 1})
+ editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"name": v.Name, "state": 1, "`number`": v.Fnumber})
isCaoZuo = true
}
} else {
if dutiesCont.State != 1 {
if dutiesCont.JobType != jobClassInfo.Id {
- editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"state": 1, "job_type": jobClassInfo.Id})
+ editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"state": 1, "job_type": jobClassInfo.Id, "`number`": v.Fnumber})
isCaoZuo = true
} else {
- editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"state": 1})
+ editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"state": 1, "`number`": v.Fnumber})
isCaoZuo = true
}
}
}
+ if v.Fnumber != dutiesCont.Number {
+ editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"`number`": v.Fnumber})
+ isCaoZuo = true
+ }
if isCaoZuo == true {
if editOrgErr == nil {
overallhandle.WriteLog("edit", "职务更新成功!", editOrgErr, v)
@@ -287,6 +292,9 @@ func DutiesContrast() {
if oldDutErr == nil {
dutiesInfo.Weight = oldDutiesInfo.Weight
dutiesInfo.Number = oldDutiesInfo.Number
+ } else {
+ dutiesInfo.Weight = 0
+ dutiesInfo.Number = ""
}
dutiesInfo.Time = time.Now().Unix()
dutiesInfo.State = 1
@@ -303,7 +311,7 @@ func DutiesContrast() {
var dutiesAll []models.Duties
allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&dutiesAll).Error
- if allErr == nil {
+ if allErr == nil && len(dutiesAll) > 0 {
var eidtId []string
for _, av := range dutiesAll {
if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false {
@@ -312,7 +320,7 @@ func DutiesContrast() {
}
}
}
- if len(eidtId) > 0 {
+ if len(eidtId) > 0 && len(dutiesAll) > len(eidtId) {
dutiesContEditErr := overall.CONSTANT_DB_HR.Model(&models.Duties{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error
if dutiesContEditErr == nil {
overallhandle.WriteLog("edit", "禁用已不使用得职务成功!", dutiesContEditErr, eidtId)
@@ -378,7 +386,7 @@ func OrgAdmin() {
if judgeOrgTypeErr == nil {
if v.GovClass != judgeOrgType.KingdeeId {
var orgTypeNewType models.AdministrativeOrganizationType
- orgTypeNewTypeErr := orgTypeNewType.GetCont(map[string]interface{}{"kingdeeid": v.Superior}, "id")
+ orgTypeNewTypeErr := orgTypeNewType.GetCont(map[string]interface{}{"kingdeeid": v.GovClass}, "id")
if orgTypeNewTypeErr == nil {
saveData["organization_type"] = orgTypeNewType.Id
isEdit = true
@@ -453,7 +461,7 @@ func OrgAdmin() {
//关闭已经弃用得行政组织
var orgAdminAll []models.AdministrativeOrganization
allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&orgAdminAll).Error
- if allErr == nil {
+ if allErr == nil && len(orgAdminAll) > 0 {
var eidtId []string
for _, av := range orgAdminAll {
if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false {
@@ -462,7 +470,7 @@ func OrgAdmin() {
}
}
}
- if len(eidtId) > 0 {
+ if len(eidtId) > 0 && len(orgAdminAll) > len(eidtId) {
orgAdminEditErr := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error
if orgAdminEditErr == nil {
overallhandle.WriteLog("edit", "禁用已不使用得行政组织成功!", orgAdminEditErr, eidtId)
@@ -579,7 +587,28 @@ func Position() {
positCont.School = orgOldCont.School
}
positCont.Duties = zhiwuCont.Id
- batchPosition = append(batchPosition, positCont)
+
+ //判断该部门下此职位是否已经存在
+ var posistInfo models.Position
+ overall.CONSTANT_DB_HR.Where("`name` = ? AND `department` = ?", v.Name, orgCont.Superior).First(&posistInfo)
+ if posistInfo.Id != 0 {
+ saveData := overallhandle.MapOut()
+ saveData["`number`"] = v.Fnumber
+ saveData["`duties`"] = zhiwuCont.Id
+ saveData["`time`"] = time.Now().Unix()
+ saveData["`administrative_organization`"] = orgCont.Id
+ // saveData["`superior`"] = orgCont.Superior
+ saveData["`person_in_charge`"] = positCont.PersonInCharge
+ saveData["`department`"] = orgCont.Superior
+ saveData["`kingdeeid`"] = v.FAdminOrgUnitID
+
+ var savePostInfo models.Position
+ savePostInfo.EiteCont(map[string]interface{}{"`id`": posistInfo.Id}, saveData)
+
+ } else {
+ batchPosition = append(batchPosition, positCont)
+ }
+
// if v.Id == "QBsfJ1fbSKW+3q6eOJltjHSuYS4=" {
// fmt.Printf("positCont---->%v\n", positCont)
// return
@@ -629,7 +658,7 @@ func Position() {
//关闭已经弃用得行政组织
var orgAdminAll []models.Position
allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&orgAdminAll).Error
- if allErr == nil {
+ if allErr == nil && len(orgAdminAll) > 0 {
var eidtId []string
for _, av := range orgAdminAll {
if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false {
@@ -638,7 +667,7 @@ func Position() {
}
}
}
- if len(eidtId) > 0 {
+ if len(eidtId) > 0 && len(orgAdminAll) > len(eidtId) {
orgAdminEditErr := overall.CONSTANT_DB_HR.Model(&models.Position{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error
if orgAdminEditErr == nil {
overallhandle.WriteLog("edit", "禁用已不使用得职位成功!", orgAdminEditErr, eidtId)
diff --git a/api/version1/administrativeorganization/govcont.go b/api/version1/administrativeorganization/govcont.go
index f746a92..4636410 100644
--- a/api/version1/administrativeorganization/govcont.go
+++ b/api/version1/administrativeorganization/govcont.go
@@ -1155,6 +1155,7 @@ func (o *OrganizationApi) BasisOrgObtainSonOrgAndMan(c *gin.Context) {
employess.EmployeeName = man.Name //人员名称
employess.IsLeave = "0" //行政组织名称
employess.Open = "false" //上级ID
+ employess.Number = man.Number //
employess.Icon = man.Icon
employess.IconToBase64 = man.IconPhoto
employess.Wechat = man.Wechat
diff --git a/api/version1/administrativeorganization/orgpost.go b/api/version1/administrativeorganization/orgpost.go
index aa57ec2..18e0635 100644
--- a/api/version1/administrativeorganization/orgpost.go
+++ b/api/version1/administrativeorganization/orgpost.go
@@ -34,8 +34,10 @@ import (
func (o *OrganizationApi) GetOrgAndPostThree(c *gin.Context) {
var requestData OrgAndMAnThreeType
c.ShouldBindJSON(&requestData)
-
- redisFileKey := fmt.Sprintf("OrgPost:OrgPostContList:%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, "orgpostcont")
+ if requestData.Id == "" {
+ requestData.Id = "0"
+ }
+ redisFileKey := fmt.Sprintf("OrgPost:OrgPostContList:%v_%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, "orgpostcont", requestData.Id)
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
orgList, orgErr := redisClient.SMEMBERS(redisFileKey)
@@ -85,6 +87,7 @@ func (o *OrganizationApi) GetOrgAndPostThree(c *gin.Context) {
sendCont.Attribute = 1
sendCont.Sort = 1
sendCont.OrgId = strconv.FormatInt(v.Id, 10)
+ sendCont.Disabled = true
if (i+1)%pageSize == 0 {
contList = append(contList, sendCont)
synProes.Add(1)
@@ -167,6 +170,12 @@ func OrgAndPostThreeList(superiorId string, contList []OutPutOrgAndPost) []OutPu
node.DepartId = v.DepartId
node.DepartName = v.DepartName
node.AdminOrg = v.AdminOrg
+ if v.OrgId != "-1" {
+ node.Disabled = true
+ } else {
+ node.Disabled = false
+ }
+
if len(child) > 0 {
node.Child = child
}
@@ -208,6 +217,7 @@ func (o *OrgAndPostSync) GetPostInfoList(contList []OutPutOrgAndPost) {
sendCont.Attribute = 2
sendCont.Sort = 2
sendCont.OrgId = "-1"
+ sendCont.Disabled = false
sendCont.DepartId = strconv.FormatInt(departmentId, 10)
sendCont.DepartName = departCont.Name
sendCont.AdminOrg = strconv.FormatInt(v.AdministrativeOrganization, 10)
diff --git a/api/version1/administrativeorganization/team.go b/api/version1/administrativeorganization/team.go
index e10a935..23186fd 100644
--- a/api/version1/administrativeorganization/team.go
+++ b/api/version1/administrativeorganization/team.go
@@ -183,8 +183,13 @@ func (o *OrganizationApi) TeamContList(c *gin.Context) {
if totalErr != nil {
total = 0
}
- var teamList []models.TeamGroup
+ var teamList []SendTimeAry
err := gormDb.Limit(requestData.PageSize).Offset(overallhandle.LimitPage(requestData.Page, requestData.PageSize)).Find(&teamList).Error
+ for i, v := range teamList {
+ if v.State == 1 {
+ teamList[i].Status = true
+ }
+ }
if err != nil {
overallhandle.Result(105, err, c)
} else {
diff --git a/api/version1/administrativeorganization/type.go b/api/version1/administrativeorganization/type.go
index 5e3bcf2..0ea2ec9 100644
--- a/api/version1/administrativeorganization/type.go
+++ b/api/version1/administrativeorganization/type.go
@@ -179,12 +179,12 @@ type positionOutInfo struct {
AoName string `json:"aoname" gorm:"column:aoname;type:varchar(255) unsigned;default:'';not null;comment:组织名称"`
AoNumber string `json:"aonumber" gorm:"column:aonumber;type:varchar(50) unsigned;default:'';not null;comment:行政编码"`
JobName string `json:"jobname" gorm:"column:jobname;type:varchar(255) unsigned;default:'';not null;comment:职务类型"`
- SuperiorName string `json:"superiorname"` //上级名称
- SuperiorNumber string `json:"superiornumber"` //上级编号
- DepartmentName string `json:"departmentname"`
- IdStr string `json:"idstr"`
- OrgListAry []int64 `json:"orglistary"`
- Status bool `json:"status"`
+ SuperiorName string `json:"superiorname" gorm:"-"` //上级名称
+ SuperiorNumber string `json:"superiornumber" gorm:"-"` //上级编号
+ DepartmentName string `json:"departmentname" gorm:"-"`
+ IdStr string `json:"idstr" gorm:"-"`
+ OrgListAry []int64 `json:"orglistary" gorm:"-"`
+ Status bool `json:"status" gorm:"-"`
}
// 行政组织树查询
@@ -369,6 +369,7 @@ type ChildDepartmentsCont struct {
type EmployeesCont struct {
Id string `json:"id"`
EmployeeName string `json:"employeeName"` //人员名称
+ Number string `json:"number"` //人员工号
IsLeave string `json:"isLeave"` //行政组织名称
Open string `json:"open"` //上级ID
Icon string `json:"icon"` //头像
@@ -406,6 +407,7 @@ type OutPutOrgAndPost struct {
DepartId string `json:"departid"` //主责部门
DepartName string `json:"departname"` //主责部门名称
AdminOrg string `json:"adminorg"` //归属行政组织
+ Disabled bool `json:"disabled"` //
}
// 循环输出
@@ -590,3 +592,9 @@ type CustomerFormUser struct {
AdminOrgName string `json:"adminorgname"`
Tel string `json:"tel"`
}
+
+// 输出班组列表
+type SendTimeAry struct {
+ models.TeamGroup
+ Status bool `json:"status" gorm:"-"`
+}
diff --git a/api/version1/dataCenter/databastHanld.go b/api/version1/dataCenter/databastHanld.go
new file mode 100644
index 0000000..4590a00
--- /dev/null
+++ b/api/version1/dataCenter/databastHanld.go
@@ -0,0 +1,389 @@
+package datacenter
+
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+ "hr_server/overall"
+ "hr_server/overall/overallhandle"
+ "strings"
+ "time"
+
+ "gorm.io/driver/mysql"
+ "gorm.io/driver/postgres"
+ "gorm.io/driver/sqlite"
+ "gorm.io/driver/sqlserver"
+ "gorm.io/gorm"
+)
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-12-24 11:28:46
+@ 功能: 建立SqlServer
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (c *DatabaseConfig) ConnectToSqlServer() (*gorm.DB, error) {
+ // connStr := "provider=SQLOLEDB;data source=你的服务器名;initial catalog=你的数据库名;user id=你的用户名;password=你的密码;"
+ // db, err := sql.Open("adodb", connStr)
+ // connStr := fmt.Sprintf("server=%v;user id=<%v>;password=<%v>;port=<%v>;database=<%v>;", c.Host,
+ // c.User, c.Password, c.Port, c.Name)
+ // db, err := sql.Open("mssql", connStr)
+ dsn := fmt.Sprintf("sqlserver://gorm:LoremIpsum86@%v:%v?database=%v", c.Host, c.Port, c.Name)
+ db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{})
+ if err != nil {
+ return nil, err
+ }
+ sqlDb, _ := db.DB()
+ sqlDb.SetMaxIdleConns(5)
+ sqlDb.SetMaxOpenConns(2)
+ sqlDb.SetConnMaxLifetime(time.Minute)
+ return db, nil
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-12-24 09:59:12
+@ 功能: 建立PostgreSQL
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (c *DatabaseConfig) ConnectToPostgreSQL() (*gorm.DB, error) {
+ connStr := fmt.Sprintf("user=%s password=%s dbname=%s host=%s port=%d sslmode=disable",
+ c.User, c.Password, c.Name, c.Host, c.Port)
+ // db, err := sql.Open("postgres", connStr)
+ db, err := gorm.Open(postgres.Open(connStr), &gorm.Config{})
+ if err != nil {
+ return nil, err
+ }
+ sqlDb, _ := db.DB()
+ sqlDb.SetMaxIdleConns(5)
+ sqlDb.SetMaxOpenConns(2)
+ sqlDb.SetConnMaxLifetime(time.Minute)
+ return db, nil
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-12-24 09:59:12
+@ 功能: 建立MySQL
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (c *DatabaseConfig) ConnectToMySQL() (*gorm.DB, error) {
+ connStr := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=utf8mb4", c.User, c.Password, c.Host, c.Port, c.Name)
+ // db, err := sql.Open("mysql", connStr)
+ fmt.Printf("sqlOpen: %v\n", connStr)
+
+ sqlConfig := mysql.Config{
+ DSN: connStr, // DSN
+ DefaultStringSize: 255, // string 类型字段的默认长度
+ DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
+ DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
+ DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
+ SkipInitializeWithVersion: false, // 根据版本自动配置
+ }
+
+ db, err := gorm.Open(mysql.New(sqlConfig))
+ if err != nil {
+ return nil, err
+ }
+ sqlDb, _ := db.DB()
+ sqlDb.SetMaxIdleConns(5)
+ sqlDb.SetMaxOpenConns(2)
+ sqlDb.SetConnMaxLifetime(time.Minute)
+
+ return db, nil
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-12-24 09:59:12
+@ 功能: 建立SQLite
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (c *DatabaseConfig) ConnectToSQLite() (*gorm.DB, error) {
+ // db, err := sql.Open("sqlite3", c.Name)
+ db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})
+ if err != nil {
+ return nil, err
+ }
+ sqlDb, _ := db.DB()
+ sqlDb.SetMaxIdleConns(5)
+ sqlDb.SetMaxOpenConns(2)
+ sqlDb.SetConnMaxLifetime(time.Minute)
+ return db, nil
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-12-24 16:25:17
+@ 功能: Tidb
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (c *DatabaseConfig) ConnectToTiDb() (*gorm.DB, error) {
+ sql := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v", c.User, c.Password, c.Host, c.Port, c.Name)
+ db, err := gorm.Open(mysql.Open(sql), &gorm.Config{})
+ if err != nil {
+ return nil, err
+ }
+ sqlDb, _ := db.DB()
+ sqlDb.SetMaxIdleConns(5)
+ sqlDb.SetMaxOpenConns(2)
+ sqlDb.SetConnMaxLifetime(time.Minute)
+ return db, nil
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-12-24 10:04:00
+@ 功能: 启动数据库
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (d *DataBastType) StartDataBast() (openDb *gorm.DB, err error) {
+ var configInfo DatabaseConfig
+
+ if d.Ip == overall.CONSTANT_CONFIG.Appsetup.DefaultIP {
+ d.Ip = "127.0.0.1"
+ }
+ // fmt.Printf("对不起!当前不支持'%v'数据库。", d.Ip, overall.CONSTANT_CONFIG.Appsetup.DefaultIP)
+ configInfo.Name = d.DataBaseName
+ configInfo.Host = d.Ip
+ configInfo.Port = d.Port
+ configInfo.User = d.UserName
+ configInfo.Password = d.Pwd
+ switch strings.ToLower(d.Type) {
+ case "PostgreSQL", "postgresql", "postgre sql":
+ openDb, err = configInfo.ConnectToPostgreSQL()
+ case "MySQL", "mysql":
+ openDb, err = configInfo.ConnectToMySQL()
+ case "SQLite", "sqlite":
+ openDb, err = configInfo.ConnectToSQLite()
+ case "SqlServer", "sql server", "sqlserver":
+ openDb, err = configInfo.ConnectToSqlServer()
+ case "Tidb", "tidb", "TiDb", "TIDB":
+ openDb, err = configInfo.ConnectToMySQL()
+ default:
+ msg := fmt.Sprintf("对不起!当前不支持'%v'数据库。", d.DataBaseName)
+ err = errors.New(msg)
+ }
+ return
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-12-24 13:07:56
+@ 功能: 获取数据库中说有表
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #获取数据库表comment
+*/
+func (d *DataBastType) ObtainDataBaseAllTableMysql() (tableKeyValue []DataBaseTableInfo, err error) {
+ // tableKeyValue := overallhandle.MapOut[string]()
+ sqlDb, err := d.StartDataBast()
+ if err != nil {
+ return
+ }
+
+ var valData []string
+ // // sql := fmt.Sprintf("SHOW %v", d.DataBaseName)
+ sqlDb.Raw("SHOW TABLES").Scan(&valData)
+ // if err != nil {
+ // return tableKeyValue, err
+ // }
+ // fmt.Println(rows)
+ fmt.Printf("%T----->%v\n", valData, valData)
+ // var
+ for _, v := range valData {
+ fmt.Printf("%T----->%v\n", v, v)
+ // sqlStr := fmt.Sprintf("SHOW `%v`", v)
+
+ // sql := "SELECT TABLE_NAME AS `Table`, TABLE_COMMENT AS `Table Comment` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ?"
+
+ // var list []Result
+ // err = sqlDb.Raw(sqlStr).Scan(&list).Error
+ // tableKeyValue[v] = list
+ var tableName string
+ sql := fmt.Sprintf("SELECT TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = \"%v\" AND TABLE_NAME = \"%v\";", d.DataBaseName, v)
+ err = sqlDb.Raw(sql).Scan(&tableName).Error
+ // tableKeyValue[v] = tableInfo
+ var tableInfo DataBaseTableInfo
+ tableInfo.TableName = tableName
+ tableInfo.TableKey = v
+ sqlStr := fmt.Sprintf("SHOW FULL COLUMNS FROM `%v`", v)
+ err = sqlDb.Raw(sqlStr).Scan(&tableInfo.Fields).Error
+ tableKeyValue = append(tableKeyValue, tableInfo)
+ }
+ // defer rows.Close()
+ // var tableName []string
+ // for rows.Next() {
+ // var table string
+ // err = rows.Scan(&table)
+ // if err == nil {
+ // tableName = append(tableName, table)
+ // }
+ // }
+ // if len(tableName) > 0 {
+
+ // rows, err = sqlDb.Query("SHOW TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA IS NOT NULL")
+ // for _,v := range tableName{
+ // sql := fmt.Sprintf("SHOW TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = %v AND TABLE_NAME = %v",d.DataBaseName,v)
+ // rows, err = sqlDb.Query("SHOW TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA IS NOT NULL")
+ // }
+ // if err != nil {
+ // return tableKeyValue, err
+ // }
+ // defer rows.Close()
+
+ // var tableComments = make(map[string]string)
+ // for rows.Next() {
+ // var table, comment string
+ // if err := rows.Scan(&table, &comment); err != nil {
+ // // log.Fatal(err)
+ // fmt.Printf("rows----err---->:%v\n", err)
+ // }
+ // tableComments[table] = comment
+ // }
+ // fmt.Printf("rows-------->:%v\n", tableComments)
+ // }
+
+ return tableKeyValue, err
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-12-30 16:49:14
+@ 功能: 获取数据源
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func GainDataStorce(dataId string) (openDb *gorm.DB, err error) {
+ sendUrl := fmt.Sprintf("http://120.224.6.6:29911/prod-api/database/app/datasource/page?pageNum=1&pageSize=%v&databaseName=&dataType=", 100000)
+ // fmt.Printf("1获取数据源===>%v\n", sendUrl)
+ getData := overallhandle.CurlGet(sendUrl)
+ // fmt.Printf("2获取数据源===>%v\n", getData)
+ var sendMap map[string]interface{}
+ json.Unmarshal(getData, &sendMap)
+ var sqlDb DataBastType
+ // fmt.Printf("3获取数据源===>%v\n", sendMap)
+ if code, ok := sendMap["code"]; ok {
+ // fmt.Printf("4获取数据源===>%v\n", code)
+
+ codeInt, _ := overallhandle.StringToInt64(code)
+ if codeInt == 200 {
+ // jsonval, _ := json.Marshal(sendMap)
+ // fmt.Printf("\n\n\n6获取数据源===>%v\n\n\n", string(jsonval))
+ if dataval, isOk := sendMap["data"]; isOk {
+ if dataMap, ok := dataval.(map[string]interface{}); ok {
+ if records, isOk := dataMap["records"]; isOk {
+ if recordAry, isOk := records.([]interface{}); isOk {
+ for _, v := range recordAry {
+ if vMAp, ok := v.(map[string]interface{}); ok {
+ // fmt.Printf("5获取数据源===>%T\n===>%v\n\n\n", vMAp, vMAp["id"])
+ idStr := overallhandle.TypeToInterface(vMAp["id"])
+ if idStr == dataId {
+ typeVal, _ := overallhandle.StringToInt64(vMAp["datasourceType"])
+ sqlDb.Type = overallhandle.DatabaseIntToString(typeVal)
+ sqlDb.Ip = overallhandle.TypeToInterface(vMAp["ipAddress"])
+ sqlDb.DataBaseName = overallhandle.TypeToInterface(vMAp["databaseName"])
+ sqlDb.Port, _ = overallhandle.StringToInt64(vMAp["port"])
+ sqlDb.UserName = overallhandle.TypeToInterface(vMAp["account"])
+ sqlDb.Pwd = overallhandle.TypeToInterface(vMAp["password"])
+ }
+
+ }
+ // fmt.Printf("5获取数据源===>%T\n===>%v\n\n\n", v, v)
+ }
+ }
+ }
+ }
+
+ }
+ }
+ }
+ // fmt.Printf("7获取数据源===>%T\n===>%v\n\n\n", sqlDb, sqlDb)
+ openDb, err = sqlDb.StartDataBast()
+ return
+}
diff --git a/api/version1/dataCenter/hander.go b/api/version1/dataCenter/hander.go
new file mode 100644
index 0000000..b2361ba
--- /dev/null
+++ b/api/version1/dataCenter/hander.go
@@ -0,0 +1,202 @@
+package datacenter
+
+import (
+ "encoding/json"
+ "fmt"
+ "hr_server/overall/overallhandle"
+ "net/url"
+ "strings"
+
+ "github.com/gin-gonic/gin"
+)
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-04-18 15:37:05
+@ 功能: 通用地址
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (a *ApiMethod) GaindataCenter(c *gin.Context) {
+ var requestData DataInfo
+ c.ShouldBindJSON(&requestData)
+ if requestData.Url == "" {
+ overallhandle.Result(1, requestData, c, "未知访问地址")
+ return
+ }
+ // overallhandle.Result(1, requestData, c, "未知访问地址")
+ // return
+ if requestData.Where != "" {
+ if requestData.Method == "GET" {
+ var whereAry []string
+ whyOne := strings.Split(requestData.Where, "&")
+ if len(whyOne) > 0 {
+ for _, v := range whyOne {
+ whyTwo := strings.Split(v, "=")
+ if len(whyTwo) == 2 {
+ whereAry = append(whereAry, fmt.Sprintf("%v=%v", whyTwo[0], url.QueryEscape(whyTwo[1])))
+ } else {
+ whereAry = append(whereAry, v)
+ }
+ }
+ }
+ getUrl := requestData.Url
+ if len(whereAry) > 0 {
+ getUrl = fmt.Sprintf("%v?%v", requestData.Url, strings.Join(whereAry, "&"))
+ }
+
+ // getUrl = url.QueryEscape(getUrl)
+ // fmt.Printf("%T--------->%v\n", getUrl, getUrl)
+ getData := overallhandle.CurlGet(getUrl)
+ var sendMap map[string]interface{}
+ json.Unmarshal(getData, &sendMap)
+ // fmt.Printf("%T--------->%v--------->%v\n", sendMap, sendMap, getUrl)
+ // overallhandle.Result(0, sendMap, c)
+ shenData := overallhandle.MapOut()
+ if code, ok := sendMap["code"]; ok {
+
+ if codeIn, ok := code.(float64); ok {
+ if codeIn == 200 {
+ shenData["code"] = 0
+ } else {
+ shenData["code"] = codeIn
+ }
+ }
+
+ }
+ if msg, ok := sendMap["msg"]; ok {
+ shenData["msg"] = msg
+ }
+ if data, ok := sendMap["data"]; ok {
+ shenData["data"] = data
+ }
+ overallhandle.ResultInterface(sendMap, c)
+ return
+ } else {
+ getData := overallhandle.CurlPostJosn(requestData.Url, []byte(requestData.Where))
+ var sendMap map[string]interface{}
+ json.Unmarshal(getData, &sendMap)
+ overallhandle.ResultInterface(sendMap, c)
+ return
+ }
+ } else {
+ if requestData.Method == "GET" {
+ getUrl := fmt.Sprintf("%v", requestData.Url)
+ getData := overallhandle.CurlGet(getUrl)
+ var sendMap map[string]interface{}
+ json.Unmarshal(getData, &sendMap)
+ // overallhandle.Result(0, sendMap, c)
+ shenData := overallhandle.MapOut()
+ if code, ok := sendMap["code"]; ok {
+ if codeIn, ok := code.(float64); ok {
+ if codeIn == 200 {
+ shenData["code"] = 0
+ } else {
+ shenData["code"] = codeIn
+ }
+ }
+
+ }
+ if msg, ok := sendMap["msg"]; ok {
+ shenData["msg"] = msg
+ }
+ if data, ok := sendMap["data"]; ok {
+ shenData["data"] = data
+ }
+ overallhandle.ResultInterface(sendMap, c)
+ return
+ } else {
+ getData := overallhandle.CurlPostJosn(requestData.Url, []byte(""))
+ var sendMap map[string]interface{}
+ json.Unmarshal(getData, &sendMap)
+ shenData := overallhandle.MapOut()
+ if code, ok := sendMap["code"]; ok {
+ if codeIn, ok := code.(float64); ok {
+ if codeIn == 200 {
+ shenData["code"] = 0
+ } else {
+ shenData["code"] = codeIn
+ }
+ }
+
+ }
+ if msg, ok := sendMap["msg"]; ok {
+ shenData["msg"] = msg
+ }
+ overallhandle.ResultInterface(sendMap, c)
+ return
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-04-19 14:05:46
+@ 功能: 数据中台POST提交数据
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (a *ApiMethod) PostSaveData(c *gin.Context) {
+ var requestData DataInfoPost
+ c.ShouldBindJSON(&requestData)
+ if requestData.Url == "" {
+ overallhandle.Result(1, requestData, c, "未知访问地址")
+ return
+ }
+ dataJson, err := json.Marshal(requestData.DataInfo)
+ shenData := overallhandle.MapOut()
+ if err != nil {
+ shenData["code"] = 10001
+ shenData["msg"] = err
+ overallhandle.ResultInterface(shenData, c)
+ return
+ }
+ callBackBtye := overallhandle.CurlPostJosn(requestData.Url, dataJson)
+ var sendMap map[string]interface{}
+ err = json.Unmarshal(callBackBtye, &sendMap)
+ if err != nil {
+ shenData["code"] = 10001
+ shenData["msg"] = err
+ overallhandle.ResultInterface(shenData, c)
+ return
+ }
+ if code, ok := sendMap["code"]; ok {
+
+ if codeIn, ok := code.(float64); ok {
+ if codeIn == 200 {
+ shenData["code"] = 0
+ } else {
+ shenData["code"] = codeIn
+ }
+
+ }
+
+ }
+ if msg, ok := sendMap["msg"]; ok {
+ shenData["msg"] = msg
+ }
+ if data, ok := sendMap["data"]; ok {
+ shenData["data"] = data
+ }
+ overallhandle.ResultInterface(shenData, c)
+}
diff --git a/api/version1/dataCenter/runDataBase.go b/api/version1/dataCenter/runDataBase.go
new file mode 100644
index 0000000..f6d301a
--- /dev/null
+++ b/api/version1/dataCenter/runDataBase.go
@@ -0,0 +1,58 @@
+package datacenter
+
+import (
+ "fmt"
+ "hr_server/overall/overallhandle"
+
+ "github.com/gin-gonic/gin"
+)
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-12-24 11:43:02
+@ 功能: 获取数据表
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (a *ApiMethod) GainDataTable(c *gin.Context) {
+ var requestData DataBastType
+ err := c.ShouldBindJSON(&requestData)
+ if err != nil {
+ overallhandle.Result(100, err, c)
+ return
+ }
+ if requestData.Type == "" {
+ overallhandle.Result(1, err, c, "未知数据库类型!请先确实是什么数据库类型!")
+ return
+ }
+ if requestData.DataBaseName == "" {
+ overallhandle.Result(1, err, c, "请输入数据库名称!")
+ return
+ }
+ if requestData.Ip == "" {
+ overallhandle.Result(1, err, c, "请输入数据库地址!")
+ return
+ }
+
+ if requestData.UserName == "" {
+ overallhandle.Result(1, err, c, "请输入用户名!")
+ return
+ }
+ if requestData.Pwd == "" {
+ overallhandle.Result(1, err, c, "请输入密码!")
+ return
+ }
+ tableInfo, err := requestData.ObtainDataBaseAllTableMysql()
+ fmt.Printf("tableInfo:%v\n", tableInfo)
+ overallhandle.Result(0, tableInfo, c)
+}
diff --git a/api/version1/dataCenter/type.go b/api/version1/dataCenter/type.go
new file mode 100644
index 0000000..79ebd9b
--- /dev/null
+++ b/api/version1/dataCenter/type.go
@@ -0,0 +1,90 @@
+package datacenter
+
+import (
+ "hr_server/overall/overallhandle"
+ "sync"
+
+ "github.com/gin-gonic/gin"
+)
+
+// 协程设置
+var syncSeting = sync.WaitGroup{}
+
+type ApiMethod struct{}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-04-18 15:28:20
+@ 功能: 数据中台入口
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (a *ApiMethod) Index(c *gin.Context) {
+ outputCont := overallhandle.MapOut()
+ outputCont["index"] = "数据中台入口"
+ overallhandle.Result(0, outputCont, c)
+}
+
+// 接收参数
+type DataInfo struct {
+ Url string `json:"url"`
+ Method string `json:"methodType"`
+ Where string `json:"where"`
+}
+
+// 接收POST请求
+type DataInfoPost struct {
+ Url string `json:"url"`
+ DataInfo interface{} `json:"dataInfo"`
+}
+
+// 数据库链接参数
+type DataBastType struct {
+ Type string `json:"type"` //数据库类型
+ DataBaseName string `json:"dataBaseName"` //数据库名称
+ Ip string `json:"ip"` //数据库地址
+ Port int64 `json:"port"` //数据库端口
+ UserName string `json:"userName"` //数据库帐号
+ Pwd string `json:"password"` //数据库密码
+}
+type DatabaseConfig struct {
+ Name string
+ Host string
+ Port int64
+ User string
+ Password string
+}
+
+// 数据库表结构
+type Result struct {
+ Field string `json:"fieldes"`
+ Type string `json:"types"`
+ Attribute string `json:"attribute"`
+ Collation string `json:"collation"`
+ Null string `json:"nullVal"`
+ Key string `json:"key"`
+ Default string `json:"defaultVal"`
+ Extra string `json:"extra"`
+ Privileges string `json:"privileges"`
+ Comment string `json:"comment"`
+ Pattern string `json:"pattern"`
+ Classify string `json:"classify"`
+ Auxiliary string `json:"auxiliary"`
+}
+
+// 输出数据表数据
+type DataBaseTableInfo struct {
+ TableName string `json:"tableName"` //数据表名称
+ TableKey string `json:"tableKey"` //数据表标识
+ Fields []Result `json:"fields"` //表字段
+}
diff --git a/api/version1/personnelapi/analysExelect.go b/api/version1/personnelapi/analysExelect.go
new file mode 100644
index 0000000..e1281a2
--- /dev/null
+++ b/api/version1/personnelapi/analysExelect.go
@@ -0,0 +1,1838 @@
+package personnelapi
+
+import (
+ "encoding/json"
+ "fmt"
+ "hr_server/grocerystore"
+ "hr_server/models"
+ "hr_server/overall"
+ "hr_server/overall/overallhandle"
+ "strconv"
+ "strings"
+ "time"
+
+ "github.com/360EntSecGroup-Skylar/excelize"
+)
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-26 14:51:29
+@ 功能: 解析考核年份及奖惩年份
+@ 参数
+
+ #xlsx 电子表单数据
+ #redisKey 保存Redis数据得键值
+ #orgId 当前的行政组织
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) AnalysAssessYears(xlsx *excelize.File, redisKey, orgId string) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) {
+ rows := xlsx.GetRows(xlsx.GetSheetName(xlsx.GetActiveSheetIndex()))
+ isDateYear := time.Now().Year()
+ switch orgId {
+ case "296":
+ // totalNums, meritsYearIngs, isDateYears := RongXinKeYears(rows, redisKey, isDateYear)
+ totalNums, meritsYearIngs, isDateYears := RongXinKeYearsNew(rows, redisKey, isDateYear)
+ totalNum = totalNums
+ meritsYearIng = meritsYearIngs
+ rewPunYearsIng = isDateYears
+ default:
+ totalNums, meritsYearIngs, isDateYears := GaoKeYears(rows, redisKey, isDateYear)
+ totalNum = totalNums
+ meritsYearIng = meritsYearIngs
+ rewPunYearsIng = isDateYears
+ }
+
+ return
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-26 15:06:53
+@ 功能: 荣信绩效及考核
+@ 参数
+
+ #rows 表格信息
+ #redisKey Redis 键
+ #isDateYear 当前年
+
+@ 返回值
+
+ #totalNum 总记录数
+ #meritsYearIng 考核年限
+ #rewPunYearsIng 奖惩年限
+
+@ 方法原型
+
+ #
+*/
+func RongXinKeYears(rows [][]string, redisKey string, isDateYear int) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) {
+
+ // fmt.Printf("rows[0][292]:%v\n", rows[0][305])
+ // fmt.Printf("rows[1][292]:%v\n", rows[1][305])
+ // fmt.Printf("rows[2][292]:%v\n", rows[2][305])
+ // fmt.Printf("rows[3][292]:%v\n", rows[3][305])
+ // fmt.Printf("rows[4][292]:%v\n", rows[4][305])
+ // fmt.Printf("rows[5][292]:%v\n", rows[5][305])
+
+ //获取绩效年度
+ meritsYear := make(map[int]int)
+ if rows[1][292] != "" {
+ yearAry := strings.Split(rows[1][292], "年")
+ if len(yearAry) > 0 {
+
+ yearVal, _ := strconv.Atoi(yearAry[0])
+ meritsYear[0] = yearVal
+ }
+ } else {
+ meritsYear[0] = isDateYear - 3
+ }
+
+ if rows[1][294] != "" {
+ yearAry := strings.Split(rows[1][294], "年")
+ if len(yearAry) > 0 {
+ yearVal, _ := strconv.Atoi(yearAry[0])
+ meritsYear[1] = yearVal
+ }
+ } else {
+ meritsYear[1] = isDateYear - 2
+ }
+
+ meritsYearIng = meritsYear
+ //获取奖惩年度
+ rewPunYears := make(map[int]int)
+ // fmt.Printf("rows[2][305]---1--->:%v\n", rows[2][305])
+ if rows[2][305] != "" {
+ jcYearAry := strings.Split(rows[2][305], "年")
+ // jcYearAry := strings.Split(rows[2][305], "奖惩")
+ // fmt.Printf("rows[2][305]---2--->:%v--->%v\n", len(jcYearAry), jcYearAry)
+ if len(jcYearAry) > 0 {
+ // fmt.Printf("rows[2][305]---3--->:%v\n", jcYearAry[0])
+ jcYearVal, _ := strconv.Atoi(jcYearAry[0])
+ // fmt.Printf("rows[2][305]---4--->:%v\n", jcYearVal)
+ rewPunYears[0] = jcYearVal
+ }
+ } else {
+ rewPunYears[0] = isDateYear - 4
+ }
+
+ if rows[2][311] != "" {
+ jcYearAry := strings.Split(rows[2][311], "奖惩")
+ if len(jcYearAry) > 0 {
+
+ jcYearVal, _ := strconv.Atoi(jcYearAry[0])
+ rewPunYears[1] = jcYearVal
+ }
+ } else {
+ rewPunYears[1] = isDateYear - 3
+ }
+ if rows[2][317] != "" {
+ jcYearAry := strings.Split(rows[2][317], "奖惩")
+ if len(jcYearAry) > 0 {
+
+ jcYearVal, _ := strconv.Atoi(jcYearAry[0])
+ rewPunYears[2] = jcYearVal
+ }
+ } else {
+ rewPunYears[2] = isDateYear - 2
+ }
+ if rows[2][323] != "" {
+ jcYearAry := strings.Split(rows[2][323], "奖惩")
+ if len(jcYearAry) > 0 {
+
+ jcYearVal, _ := strconv.Atoi(jcYearAry[0])
+ rewPunYears[3] = jcYearVal
+ }
+ } else {
+ rewPunYears[3] = isDateYear - 1
+ }
+ rewPunYearsIng = rewPunYears
+
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
+ redisClient.SetRedisTime(86400)
+ totalNum = 0
+ for i, row := range rows {
+ if i < 4 {
+ continue
+ }
+ // jsonStr, _ := json.Marshal(row)
+ // fmt.Printf("%v出生日期:%v\n", row[1], string(jsonStr))
+ if row[1] != "" {
+ jsonStr, _ := json.Marshal(row)
+ // fmt.Printf("%v出生日期:%v\n", row[1], string(jsonStr))
+ redisClient.Lpush(redisKey, jsonStr)
+ totalNum++
+ }
+ }
+ return
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-20 08:16:16
+@ 功能:
+@ 参数
+
+ #rows 表格信息
+ #redisKey Redis 键
+ #isDateYear 当前年
+
+@ 返回值
+
+ #totalNum 总记录数
+ #meritsYearIng 考核年限
+ #rewPunYearsIng 奖惩年限
+
+@ 方法原型
+
+ #
+*/
+func RongXinKeYearsNew(rows [][]string, redisKey string, isDateYear int) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) {
+ //获取绩效年度
+ meritsYear := make(map[int]int)
+ if rows[1][293] != "" {
+ yearAry := strings.Split(rows[1][292], "年")
+ if len(yearAry) > 0 {
+
+ yearVal, _ := strconv.Atoi(yearAry[0])
+ meritsYear[0] = yearVal
+ }
+ } else {
+ meritsYear[0] = isDateYear - 3
+ }
+
+ if rows[1][295] != "" {
+ yearAry := strings.Split(rows[1][295], "年")
+ if len(yearAry) > 0 {
+ yearVal, _ := strconv.Atoi(yearAry[0])
+ meritsYear[1] = yearVal
+ }
+ } else {
+ meritsYear[1] = isDateYear - 2
+ }
+ if rows[1][297] != "" {
+ yearAry := strings.Split(rows[1][297], "年")
+ if len(yearAry) > 0 {
+ yearVal, _ := strconv.Atoi(yearAry[0])
+ meritsYear[2] = yearVal
+ }
+ } else {
+ meritsYear[2] = isDateYear - 1
+ }
+
+ meritsYearIng = meritsYear
+ //获取奖惩年度
+ rewPunYears := make(map[int]int)
+ if rows[2][304] != "" {
+ jcYearAry := strings.Split(rows[2][304], "年")
+ if len(jcYearAry) > 0 {
+ jcYearVal, _ := strconv.Atoi(jcYearAry[0])
+ rewPunYears[0] = jcYearVal
+ }
+ } else {
+ rewPunYears[0] = isDateYear - 4
+ }
+
+ if rows[2][310] != "" {
+ jcYearAry := strings.Split(rows[2][310], "奖惩")
+ if len(jcYearAry) > 0 {
+
+ jcYearVal, _ := strconv.Atoi(jcYearAry[0])
+ rewPunYears[1] = jcYearVal
+ }
+ } else {
+ rewPunYears[1] = isDateYear - 3
+ }
+ if rows[2][316] != "" {
+ jcYearAry := strings.Split(rows[2][316], "奖惩")
+ if len(jcYearAry) > 0 {
+
+ jcYearVal, _ := strconv.Atoi(jcYearAry[0])
+ rewPunYears[2] = jcYearVal
+ }
+ } else {
+ rewPunYears[2] = isDateYear - 2
+ }
+ // if rows[2][325] != "" {
+ // jcYearAry := strings.Split(rows[2][325], "奖惩")
+ // if len(jcYearAry) > 0 {
+
+ // jcYearVal, _ := strconv.Atoi(jcYearAry[0])
+ // rewPunYears[3] = jcYearVal
+ // }
+ // } else {
+ // rewPunYears[3] = isDateYear - 1
+ // }
+ rewPunYearsIng = rewPunYears
+
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
+ redisClient.SetRedisTime(86400)
+ totalNum = 0
+ for i, row := range rows {
+ if i < 4 {
+ continue
+ }
+ if row[1] != "" {
+ jsonStr, _ := json.Marshal(row)
+ redisClient.Lpush(redisKey, jsonStr)
+ totalNum++
+ }
+ }
+ return
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-26 14:57:03
+@ 功能: 高科绩效及考核
+@ 参数
+
+ #rows 表格信息
+ #redisKey Redis 键
+ #isDateYear 当前年
+
+@ 返回值
+
+ #totalNum 总记录数
+ #meritsYearIng 考核年限
+ #rewPunYearsIng 奖惩年限
+
+@ 方法原型
+
+ #
+*/
+func GaoKeYears(rows [][]string, redisKey string, isDateYear int) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) {
+ //获取绩效年度
+ meritsYear := make(map[int]int)
+ if rows[1][288] != "" {
+ yearAry := strings.Split(rows[1][288], "年")
+ if len(yearAry) > 0 {
+
+ yearVal, _ := strconv.Atoi(yearAry[0])
+ meritsYear[0] = yearVal
+ }
+ } else {
+ meritsYear[0] = isDateYear - 3
+ }
+
+ if rows[1][289] != "" {
+ yearAry := strings.Split(rows[1][289], "年")
+ if len(yearAry) > 0 {
+ yearVal, _ := strconv.Atoi(yearAry[0])
+ meritsYear[1] = yearVal
+ }
+ } else {
+ meritsYear[1] = isDateYear - 2
+ }
+ if rows[1][290] != "" {
+ yearAry := strings.Split(rows[1][290], "年")
+ if len(yearAry) > 0 {
+ yearVal, _ := strconv.Atoi(yearAry[0])
+ meritsYear[2] = yearVal
+ }
+ } else {
+ meritsYear[2] = isDateYear - 1
+ }
+ meritsYearIng = meritsYear
+ //获取奖惩年度
+ rewPunYears := make(map[int]int)
+ if rows[2][298] != "" {
+ jcYearAry := strings.Split(rows[2][298], "奖惩")
+ if len(jcYearAry) > 0 {
+
+ jcYearVal, _ := strconv.Atoi(jcYearAry[0])
+ rewPunYears[0] = jcYearVal
+ }
+ } else {
+ rewPunYears[0] = isDateYear - 3
+ }
+
+ if rows[2][303] != "" {
+ jcYearAry := strings.Split(rows[2][303], "奖惩")
+ if len(jcYearAry) > 0 {
+
+ jcYearVal, _ := strconv.Atoi(jcYearAry[0])
+ rewPunYears[1] = jcYearVal
+ }
+ } else {
+ rewPunYears[1] = isDateYear - 2
+ }
+ if rows[2][308] != "" {
+ jcYearAry := strings.Split(rows[2][308], "奖惩")
+ if len(jcYearAry) > 0 {
+
+ jcYearVal, _ := strconv.Atoi(jcYearAry[0])
+ rewPunYears[2] = jcYearVal
+ }
+ } else {
+ rewPunYears[2] = isDateYear - 1
+ }
+ rewPunYearsIng = rewPunYears
+
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
+ redisClient.SetRedisTime(86400)
+ totalNum = 0
+ for i, row := range rows {
+ if i < 4 {
+ continue
+ }
+ if row[1] != "" {
+ jsonStr, _ := json.Marshal(row)
+ // fmt.Printf("%v出生日期:%v\n", row[1], string(jsonStr))
+ redisClient.Lpush(redisKey, jsonStr)
+ totalNum++
+ }
+ }
+ return
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-26 16:05:27
+@ 功能: 解析电子表格人员信息
+@ 参数
+
+ #info //人员信息
+ #meritsYear 绩效年度
+ #rewPunYearsmap 奖惩年度
+ #orgId 行政组织
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) ParsingUserInfoOfExcel(list map[int]string, meritsYear, rewPunYearsmap map[int]int, orgId string) {
+ g.IsOk = false
+ switch orgId {
+ case "296": //荣信模版
+ // fmt.Printf("分成的段:%v\n%v\n", list[0], list[2])
+
+ // isRxTemplate := strings.Contains(list[2], list[1])
+
+ // fmt.Printf("分成的段:%v\n%v\n%v\n", isRxTemplate, list[2], list[1])
+ // if isRxTemplate {
+ if list[2] != "" {
+ g.UserNum = list[2]
+ var myCont models.PersonArchives
+ err := myCont.RedisCont(list[2], 1)
+ if err != nil {
+ g.IsOk = true
+ } else {
+ g.UserKey = myCont.Key
+ }
+ // g.ProcessMainTableRongXin(list, meritsYear, rewPunYearsmap, orgId)
+ g.ProcessMainTableRongXinNew(list, meritsYear, rewPunYearsmap, orgId)
+ } else {
+ g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[3], time.Now().Unix()))
+ g.MsgStr = fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[3], overallhandle.UnixTimeToDay(time.Now().Unix(), 11))
+ }
+ // } else {
+ // g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v(%v):模板与选择的公司不匹配!无法录入--->%v", list[0], list[3], list[2], time.Now().Unix()))
+ // g.MsgStr = fmt.Sprintf("序号:%v--->%v:模板与选择的公司不匹配!无法录入--->%v", list[0], list[3], overallhandle.UnixTimeToDay(time.Now().Unix(), 11))
+ // }
+
+ default: //高科模版解析
+
+ isRxTemplate := strings.Contains(list[2], list[1])
+
+ if !isRxTemplate {
+ if list[1] != "" {
+ g.UserNum = list[1]
+ var myCont models.PersonArchives
+ err := myCont.RedisCont(list[1], 1)
+ if err != nil {
+ g.IsOk = true
+ } else {
+ g.UserKey = myCont.Key
+ }
+ g.ProcessMainTable(list, meritsYear, rewPunYearsmap, orgId)
+ } else {
+ g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[2], time.Now().Unix()))
+ g.MsgStr = fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[2], overallhandle.UnixTimeToDay(time.Now().Unix(), 11))
+ }
+ } else {
+ g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v(%v):模板与选择的公司不匹配!无法录入--->%v", list[0], list[2], list[1], time.Now().Unix()))
+ g.MsgStr = fmt.Sprintf("序号:%v--->%v(%v):模板与选择的公司不匹配!无法录入--->%v", list[0], list[2], list[1], overallhandle.UnixTimeToDay(time.Now().Unix(), 11))
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-26 16:28:32
+@ 功能: 主表数据处理(荣信表格模版)
+@ 参数
+
+ #info 人员信息
+ #meritsYear 绩效年度
+ #rewPunYearsmap 奖惩年度
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) ProcessMainTableRongXin(info map[int]string, meritsYear, rewPunYearsmap map[int]int, orgId string) {
+ if g.UserKey == 0 {
+ g.UserKey = overallhandle.OnlyOneNumber(2)
+ }
+ curryTime := time.Now().Unix()
+ if g.IsOk { //新增员工信息
+ var userInfo models.PersonArchives
+ userInfo.Key = g.UserKey //唯一编号
+ userInfo.Name = info[3] //姓名"`
+ userInfo.Number = info[2] //工号
+ userInfo.HireClass = 1 //雇佣类型(1:雇佣入职;2:再入职;)"`
+ userInfo.EmpType = 4 //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)"`
+ orgIdInt, _ := strconv.ParseInt(orgId, 10, 64)
+ userInfo.ExcelTemplate = orgIdInt
+ var adminOrg int64
+ var allOrgId []int64
+ //公司
+ if info[4] != "" {
+ var comOrg models.AdministrativeOrganization
+ comOrg.GetCont(map[string]interface{}{"`name`": info[4]}, "`id`")
+ if comOrg.Id != 0 {
+ userInfo.Company = comOrg.Id //入职公司"`
+ adminOrg = comOrg.Id
+ var sunOrg overallhandle.GetOrgAllParent
+ sunOrg.GetGCSOrgSonAllId(comOrg.Id)
+ sunOrg.Id = append(sunOrg.Id, comOrg.Id)
+ allOrgId = sunOrg.Id
+ }
+
+ }
+ fmt.Printf("下属所有子部门-->%v\n", allOrgId)
+ if info[5] != "" {
+ if len(allOrgId) > 0 {
+ mastOrg := GetMyOrgSunId(info[5], allOrgId)
+ if mastOrg != 0 {
+ userInfo.MainDeparment = mastOrg //主部门"`
+ adminOrg = mastOrg
+ }
+ }
+
+ }
+ if info[6] != "" {
+ if len(allOrgId) > 0 {
+ suntOrg := GetMyOrgSunId(info[6], allOrgId)
+ if suntOrg != 0 {
+ userInfo.SunMainDeparment = suntOrg //二级主部门"`
+ adminOrg = suntOrg
+ }
+ }
+ }
+ if info[7] != "" {
+ if len(allOrgId) > 0 {
+ postOrg := GetMyOrgSunId(info[7], allOrgId)
+ if postOrg != 0 {
+ userInfo.WorkSection = postOrg //二级主部门"`
+ adminOrg = postOrg
+ }
+ }
+ }
+ if adminOrg != 0 {
+ userInfo.AdminOrg = adminOrg //所属行政组织"`
+
+ position, jobId, PersonInCharge := GetMyPositisName(info[8], adminOrg)
+ if position != 0 {
+ userInfo.Position = position
+ }
+ if jobId != 0 {
+ userInfo.JobId = jobId
+ }
+ if PersonInCharge != 0 {
+ userInfo.PersonInCharge = PersonInCharge
+ }
+ }
+ switch info[9] {
+ case "一级":
+ userInfo.JobLeve = 1 // 职务等级"`
+ case "二级":
+ userInfo.JobLeve = 2 // 职务等级"`
+ case "三级":
+ userInfo.JobLeve = 3 // 职务等级"`
+ case "四级":
+ userInfo.JobLeve = 4 // 职务等级"`
+ case "五级":
+ userInfo.JobLeve = 5 // 职务等级"`
+ case "协议":
+ userInfo.JobLeve = 6 // 协议"`
+ default:
+ }
+ if info[10] != "" {
+ var jobInfo models.JobClass
+ jobInfo.GetCont(map[string]interface{}{"`name`": info[10]}, "`id`")
+ if jobInfo.Id != 0 {
+ userInfo.JobClass = jobInfo.Id //管理类别"`
+ }
+ }
+ userInfo.Time = curryTime //写入时间"`
+ userInfo.EiteTime = curryTime //编辑时间"`
+ userInfo.State = 1 //状态(1:启用;2:禁用;3:删除)`
+ userInfo.Key = g.UserKey //key"`
+ var md5JiaMi overallhandle.Md5Encryption
+ md5JiaMi.Md5EncryptionInit(overall.CONSTANT_CONFIG.Appsetup.DefaultPassword)
+ md5Token := md5JiaMi.Md5EncryptionAlgorithm()
+ userInfo.Password = md5Token //密码"`
+ userInfo.IsShowTrue = 1
+ if info[32] != "" {
+ userInfo.Wechat = info[32]
+ }
+ err := overall.CONSTANT_DB_HR.Create(&userInfo).Error
+ if err != nil {
+ g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err))
+ g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err)
+ } else {
+ g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11)))
+ g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11))
+ }
+ } else { //修改员工信息
+ editInfo := overallhandle.MapOut()
+ editInfo["`name`"] = info[3]
+ var adminOrg int64
+ var allOrgId []int64
+ if info[4] != "" {
+ var comOrg models.AdministrativeOrganization
+ comOrg.GetCont(map[string]interface{}{"`name`": info[4]}, "`id`")
+ if comOrg.Id != 0 {
+ editInfo["`company`"] = comOrg.Id //入职公司"`
+
+ adminOrg = comOrg.Id
+
+ var sunOrg overallhandle.GetOrgAllParent
+ sunOrg.GetGCSOrgSonAllId(comOrg.Id)
+ sunOrg.Id = append(sunOrg.Id, comOrg.Id)
+ allOrgId = sunOrg.Id
+ }
+
+ }
+ fmt.Printf("下属所有子部门-->%v\n", allOrgId)
+ if info[5] != "" {
+ if len(allOrgId) > 0 {
+ mastOrg := GetMyOrgSunId(info[5], allOrgId)
+ if mastOrg != 0 {
+ editInfo["`maindeparment`"] = mastOrg //主部门"`
+ adminOrg = mastOrg
+ }
+ }
+
+ }
+ if info[6] != "" {
+ if len(allOrgId) > 0 {
+ suntOrg := GetMyOrgSunId(info[6], allOrgId)
+ if suntOrg != 0 {
+ editInfo["`sun_main_deparment`"] = suntOrg //二级主部门"`
+ adminOrg = suntOrg
+ }
+ }
+ }
+ if info[7] != "" {
+ if len(allOrgId) > 0 {
+ postOrg := GetMyOrgSunId(info[7], allOrgId)
+ if postOrg != 0 {
+ editInfo["`work_section`"] = postOrg //二级主部门"`
+ adminOrg = postOrg
+ }
+ }
+ }
+ if adminOrg != 0 {
+ editInfo["`admin_org`"] = adminOrg //所属行政组织"`
+
+ position, jobId, PersonInCharge := GetMyPositisName(info[8], adminOrg)
+ if position != 0 {
+ editInfo["`position`"] = position
+ }
+ if jobId != 0 {
+ editInfo["`job_id`"] = jobId
+ }
+ if PersonInCharge != 0 {
+ editInfo["`person_in_charge`"] = PersonInCharge
+ }
+ }
+
+ switch info[9] {
+ case "一级":
+ editInfo["`job_leve`"] = 1 // 职务等级"`
+ case "二级":
+ editInfo["`job_leve`"] = 2 // 职务等级"`
+ case "三级":
+ editInfo["`job_leve`"] = 3 // 职务等级"`
+ case "四级":
+ editInfo["`job_leve`"] = 4 // 职务等级"`
+ case "五级":
+ editInfo["`job_leve`"] = 5 // 职务等级"`
+ case "协议":
+ editInfo["`job_leve`"] = 6 // 协议"`
+ default:
+ }
+ if info[10] != "" {
+ var jobInfo models.JobClass
+ jobInfo.GetCont(map[string]interface{}{"`name`": info[10]}, "`id`")
+ if jobInfo.Id != 0 {
+ editInfo["`job_class`"] = jobInfo.Id //管理类别"`
+ }
+
+ }
+ editInfo["`eite_time`"] = curryTime
+ editInfo["`is_show_true`"] = 1
+ if info[32] != "" {
+ editInfo["`wechat`"] = info[32]
+ }
+ // orgIdInt, _ := strconv.ParseInt(orgId, 10, 64)
+ editInfo["`excel_template`"] = orgId
+ var userInfo models.PersonArchives
+ err := userInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editInfo)
+ // fmt.Printf("编辑信息:%v\n", err)
+ if err != nil {
+ g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err))
+ g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err)
+ } else {
+ g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11)))
+ g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11))
+ }
+ }
+ //协程处理附属信息
+ synPros.Add(1)
+ go g.OrgChannelInfo(info[4], info[5], info[6], info[7], "电子表格导入数据") //行政组织变更
+ synPros.Add(1)
+ go g.AuxiliaryTableUserRongXin(info)
+ synPros.Add(1)
+ go g.PoliticalOutlookEditRongXin(info) //政治面貌
+ synPros.Add(1)
+ go g.EditEducationInfoRongXin(info) //学历信息
+ synPros.Add(1)
+ go g.FamilyMembersRongXin(info) //家庭成员
+ synPros.Add(1)
+ go g.GrowthExpWitTheGroupRongXin(info, orgId) //集团内成长经历
+ synPros.Add(1)
+ go g.ExtWorkExpOfTheGroupRongXin(info) //集团外部工作经历
+ synPros.Add(1)
+ go g.EditExamLevelRongXin(info, meritsYear) //绩效考核成绩
+ synPros.Add(1)
+ go g.EditRewPunRongXin(info, rewPunYearsmap) //奖惩记录
+ synPros.Add(1)
+ go g.EditAcademicTitleRongXin(info) //编辑职称
+ synPros.Add(1)
+ go g.EditCertificateRongXin(info) //编辑证书
+ synPros.Add(1)
+ go g.TalentInventory(info, orgId) //人才盘点
+ //监听所有协程都完成
+ synPros.Wait()
+
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-05 09:50:36
+@ 功能: 行政组织变动
+@ 参数
+
+ #company 公司
+ #firstDepartment 第一部门
+ #secondaryDepartment 第二部门
+ #workshop 工段
+ #notes 备注
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) OrgChannelInfo(company, firstDepartment, secondaryDepartment, workshop, notes string) {
+ defer synPros.Done()
+ var orgChangeInfo []models.OrgChangeRecord
+ overall.CONSTANT_DB_HR.Model(&models.OrgChangeRecord{}).Where("`userKey` = ?", g.UserKey).Find(&orgChangeInfo)
+ if len(orgChangeInfo) > 0 {
+ var comId int64
+ var firstDepId int64
+ var secDepId int64
+ var workspId int64
+ var allOrgId []int64
+ //公司
+ if company != "" {
+ var comOrg models.AdministrativeOrganization
+ comOrg.GetCont(map[string]interface{}{"`name`": company}, "`id`")
+ if comOrg.Id != 0 {
+ comId = comOrg.Id //入职公司"`
+ var sunOrg overallhandle.GetOrgAllParent
+ sunOrg.GetGCSOrgSonAllId(comOrg.Id)
+ sunOrg.Id = append(sunOrg.Id, comOrg.Id)
+ allOrgId = sunOrg.Id
+ }
+
+ }
+ if firstDepartment != "" {
+ if len(allOrgId) > 0 {
+ mastOrg := GetMyOrgSunId(firstDepartment, allOrgId)
+ if mastOrg != 0 {
+ firstDepId = mastOrg //主部门"`
+ }
+ }
+
+ }
+ if secondaryDepartment != "" {
+ if len(allOrgId) > 0 {
+ suntOrg := GetMyOrgSunId(secondaryDepartment, allOrgId)
+ if suntOrg != 0 {
+ secDepId = suntOrg //二级主部门"`
+ }
+ }
+ }
+ if workshop != "" {
+ if len(allOrgId) > 0 {
+ postOrg := GetMyOrgSunId(workshop, allOrgId)
+ if postOrg != 0 {
+ workspId = postOrg //二级主部门"`
+ }
+ }
+ }
+ isEdit := true
+ for _, v := range orgChangeInfo {
+ if v.CompanyCn == company {
+ if v.FirstDepartment != firstDepartment {
+ if v.SecondaryDepartment != secondaryDepartment {
+ if v.WorkShop != workshop {
+ isEdit = false
+ break
+ }
+ }
+ }
+ }
+ }
+ if isEdit {
+ var inSetInfo models.OrgChangeRecord
+ inSetInfo.Userkey = g.UserKey
+ inSetInfo.CompanyCn = company
+ inSetInfo.FirstDepartment = firstDepartment
+ inSetInfo.SecondaryDepartment = secondaryDepartment
+ inSetInfo.WorkShop = workshop
+ inSetInfo.CompanyId = comId //入职公司"`
+ inSetInfo.FirstDepartmentId = firstDepId //主部门"`
+ inSetInfo.SecondaryDepartmentId = secDepId //二级主部门"`
+ inSetInfo.WorkShopid = workspId //二级主部门"`
+ inSetInfo.Time = time.Now().Unix()
+ inSetInfo.Notes = "表格导入信息行政组织调动"
+ overall.CONSTANT_DB_HR.Create(&inSetInfo)
+ }
+ } else {
+ var inSetInfo models.OrgChangeRecord
+ inSetInfo.Userkey = g.UserKey
+ inSetInfo.CompanyCn = company
+ inSetInfo.FirstDepartment = firstDepartment
+ inSetInfo.SecondaryDepartment = secondaryDepartment
+ inSetInfo.WorkShop = workshop
+
+ var allOrgId []int64
+ //公司
+ if company != "" {
+ var comOrg models.AdministrativeOrganization
+ comOrg.GetCont(map[string]interface{}{"`name`": company}, "`id`")
+ if comOrg.Id != 0 {
+ inSetInfo.CompanyId = comOrg.Id //入职公司"`
+ var sunOrg overallhandle.GetOrgAllParent
+ sunOrg.GetGCSOrgSonAllId(comOrg.Id)
+ sunOrg.Id = append(sunOrg.Id, comOrg.Id)
+ allOrgId = sunOrg.Id
+ }
+
+ }
+ if firstDepartment != "" {
+ if len(allOrgId) > 0 {
+ mastOrg := GetMyOrgSunId(firstDepartment, allOrgId)
+ if mastOrg != 0 {
+ inSetInfo.FirstDepartmentId = mastOrg //主部门"`
+ }
+ }
+
+ }
+ if secondaryDepartment != "" {
+ if len(allOrgId) > 0 {
+ suntOrg := GetMyOrgSunId(secondaryDepartment, allOrgId)
+ if suntOrg != 0 {
+ inSetInfo.SecondaryDepartmentId = suntOrg //二级主部门"`
+ }
+ }
+ }
+ if workshop != "" {
+ if len(allOrgId) > 0 {
+ postOrg := GetMyOrgSunId(workshop, allOrgId)
+ if postOrg != 0 {
+ inSetInfo.WorkShopid = postOrg //二级主部门"`
+ }
+ }
+ }
+ inSetInfo.Time = time.Now().Unix()
+ inSetInfo.Notes = "初始化表格导入信息"
+ overall.CONSTANT_DB_HR.Create(&inSetInfo)
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-28 09:28:07
+@ 功能: 人才盘点
+@ 参数
+
+ #info 表格数据
+ #orgId 行政组织
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) TalentInventory(info map[int]string, orgId string) {
+ defer synPros.Done()
+ currentYear := overallhandle.UnixTimeToDay(time.Now().Unix(), 16)
+ switch orgId {
+ case "296":
+ EditTalentInventory(g.UserKey, currentYear, info[297], info[299], info[298], info[296])
+ default:
+ EditTalentInventory(g.UserKey, currentYear, info[291], info[292], "", "")
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-28 09:32:57
+@ 功能:
+@ 参数
+
+ #userKey 当前人员
+ #currentYear 当前年
+ #careerPlanning 职业生涯规划
+ #personalAssistance 个人期望从组织获得的帮助
+ #lastYearAssessmentLevel 上一年绩效成绩
+ #userTypes 人员类型
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func EditTalentInventory(userKey int64, currentYear, careerPlanning, personalAssistance, lastYearAssessmentLevel, userTypes string) {
+ var talInvCont models.TalentInventory
+ err := overall.CONSTANT_DB_HR.Model(&talInvCont).Where("`userKey` = ? AND `years` = ?", userKey, currentYear).Find(&talInvCont).Error
+ if err == nil && talInvCont.Id != 0 {
+
+ saveInfo := overallhandle.MapOut()
+ if careerPlanning != "" && careerPlanning != talInvCont.CareerPlanning {
+ saveInfo["careerPlanning"] = careerPlanning
+ }
+ if personalAssistance != "" && personalAssistance != talInvCont.PersonalAssistance {
+ saveInfo["personalAssistance"] = personalAssistance
+ }
+ if lastYearAssessmentLevel != "" && lastYearAssessmentLevel != talInvCont.LastYearAssessmentLevel {
+ saveInfo["lastYearAssessmentLevel"] = lastYearAssessmentLevel
+ }
+ if userTypes != "" && userTypes != talInvCont.UserTypes {
+ saveInfo["userTypes"] = userTypes
+ }
+ if len(saveInfo) > 0 {
+ saveInfo["times"] = time.Now().Unix()
+ var EdittalInvCont models.TalentInventory
+ EdittalInvCont.EiteTalentInventoryCont(map[string]interface{}{"`id`": talInvCont.Id}, saveInfo)
+ }
+
+ } else {
+ //不存在此项,那么新增
+ var newTalInvInfo models.TalentInventory
+ newTalInvInfo.UserKey = userKey //归属人员key"`
+ newTalInvInfo.UserTypes = userTypes //人员类型"`
+ newTalInvInfo.CareerPlanning = careerPlanning //职业生涯规划"`
+ newTalInvInfo.PersonalAssistance = personalAssistance //个人期望从组织获得的帮助"`
+ newTalInvInfo.LastYearAssessmentLevel = lastYearAssessmentLevel //上一年绩效成绩"`
+ currentYearInt, _ := strconv.Atoi(currentYear)
+ newTalInvInfo.Years = currentYearInt //年份"`
+ newTalInvInfo.Times = time.Now().Unix()
+ overall.CONSTANT_DB_HR.Create(&newTalInvInfo)
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 14:03:14
+@ 功能: 编辑证书(荣信)
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) EditCertificateRongXin(info map[int]string) {
+ defer synPros.Done()
+ var cerHonList []models.CertificateHonors
+ err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&cerHonList).Error
+ if err != nil || len(cerHonList) < 1 {
+ if info[344] != "" {
+ g.EditCertificateCont(info[343], info[344], info[345], info[346], info[347], info[348], "是")
+ }
+ if info[350] != "" {
+ g.EditCertificateCont(info[349], info[350], info[351], info[352], info[353], info[354], "是")
+ }
+ if info[356] != "" {
+ g.EditCertificateCont(info[355], info[356], info[357], info[358], info[359], info[360], "是")
+ }
+ } else {
+ jsonInfo, _ := json.Marshal(cerHonList)
+ overallhandle.WriteLog("del", "删除旧证书数据!", string(jsonInfo))
+ var workGroupLogCont models.CertificateHonors
+ workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey})
+ if info[344] != "" {
+ g.EditCertificateCont(info[343], info[344], info[345], info[346], info[347], info[348], "是")
+ }
+ if info[350] != "" {
+ g.EditCertificateCont(info[349], info[350], info[351], info[352], info[353], info[354], "是")
+ }
+ if info[356] != "" {
+ g.EditCertificateCont(info[355], info[356], info[357], info[358], info[359], info[360], "是")
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 13:58:10
+@ 功能: 编辑职称
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) EditAcademicTitleRongXin(info map[int]string) {
+ defer synPros.Done()
+ var acaList []models.AcademicTitle
+ err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&acaList).Error
+ if err != nil || len(acaList) < 1 {
+ //新增职称
+ if info[333] != "" {
+ g.InsetAcaInfo(info[333], info[334], info[335], info[336], info[337])
+ }
+ if info[338] != "" {
+ g.InsetAcaInfo(info[338], info[339], info[340], info[341], info[342])
+ }
+ } else {
+ //原先有数据
+ jsonInfo, _ := json.Marshal(acaList)
+ overallhandle.WriteLog("del", "删除旧职称数据!", string(jsonInfo))
+ var workGroupLogCont models.AcademicTitle
+ workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey})
+ if info[333] != "" {
+ g.InsetAcaInfo(info[333], info[334], info[335], info[336], info[337])
+ }
+ if info[338] != "" {
+ g.InsetAcaInfo(info[338], info[339], info[340], info[341], info[342])
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 13:44:40
+@ 功能: 编辑奖惩记录
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) EditRewPunRongXin(info map[int]string, rewPunYearsmap map[int]int) {
+ defer synPros.Done()
+ if val, isOk := rewPunYearsmap[0]; isOk {
+ g.EditRewPunInfoRongXin(val, info[305], info[306], info[307], info[308], info[309], info[310])
+ }
+ if val, isOk := rewPunYearsmap[1]; isOk {
+ g.EditRewPunInfoRongXin(val, info[311], info[312], info[313], info[314], info[315], info[316])
+ }
+ if val, isOk := rewPunYearsmap[2]; isOk {
+ g.EditRewPunInfoRongXin(val, info[317], info[318], info[319], info[320], info[321], info[322])
+ }
+ if val, isOk := rewPunYearsmap[3]; isOk {
+ g.EditRewPunInfoRongXin(val, info[323], info[324], info[325], info[326], info[327], info[328])
+ }
+}
+
+// 写入奖惩记录
+func (g *GroupParsingData) EditRewPunInfoRongXin(years int, level, rewPunClass, title, timeData, issuingUnit, prePunNum string) {
+
+ jiangCeng := RewPunLevelClassStr(rewPunClass)
+ var rewPunYearCont models.RewardsPenalties
+ err := rewPunYearCont.GetCont(map[string]interface{}{"`userkey`": g.UserKey, "`years`": years, "`months`": 0})
+ timeVal := time.Now().Unix()
+ if err == nil {
+ overall.CONSTANT_DB_HR.Where("`id` = ? ", rewPunYearCont.Id).Delete(&rewPunYearCont)
+ }
+ if timeData != "" {
+ timeVal = overallhandle.ExcelDateToDate(timeData).Unix()
+ // fmt.Printf("奖惩记录3: %v\n", timeVal)
+ }
+ if level != "" {
+ rewPunYearCont.Title = title //奖励/处分项目"`
+ rewPunYearCont.UserKey = g.UserKey //获得人员"`
+ if jiangCeng <= 6 {
+ rewPunYearCont.Types = 1 //类型(1:奖励;2:处分;)`
+ } else {
+ rewPunYearCont.Types = 2 //类型(1:奖励;2:处分;)`
+ }
+ rewPunYearCont.State = 1 //状态(1:启用;2:禁用;3:删除)`
+ rewPunYearCont.IssuingUnit = issuingUnit //颁发单位"`
+
+ rewPunYearCont.TimeData = timeVal //获得时间"`
+
+ rewPunYearCont.Years = years //年"`
+ rewPunYearCont.Months = 0 //月"`
+ rewPunYearCont.Level = RewPunLevelStr(level) //奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)"`
+ rewPunYearCont.RewPunClass = jiangCeng //奖惩类型(1:年终评优;2:表扬;3:嘉奖;4:记功;5:记大功;6:特别奖励;7:批评;8:警告;9:记过;10:记大过;11:降级;12:留用察看;13:开除)"`
+ rewPunYearCont.RewPunNumber = prePunNum
+ overall.CONSTANT_DB_HR.Create(&rewPunYearCont)
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 13:25:00
+@ 功能: 编辑考核成绩(荣信)
+@ 参数
+
+ #info 表单内容
+ #meritsYear 年份
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) EditExamLevelRongXin(info map[int]string, meritsYear map[int]int) {
+ defer synPros.Done()
+ if val, isOk := meritsYear[0]; isOk {
+ g.EditExamLevelInfoRongXin(info[292], info[293], val)
+ }
+ if val, isOk := meritsYear[1]; isOk {
+ g.EditExamLevelInfoRongXin(info[294], info[295], val)
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 13:40:34
+@ 功能: 编辑绩效考核内容
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) EditExamLevelInfoRongXin(level, notes string, years int) {
+ var merInfo models.Meritslog
+ err := merInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey, "`years`": years, "`months`": 0}, "`id`", "`level`", "`notes`")
+ if err != nil { //新增
+ merInfo.Score = 0 //绩效分数*10000保存"`
+ merInfo.UserKey = g.UserKey //获得人员"`
+ merInfo.Status = 1 //(1:启用;2:禁用;3:删除)`
+ merInfo.TimeData = time.Now().Unix() //获得时间"`
+ merInfo.Years = years //年"`
+ merInfo.Months = 0 //月"`
+ merInfo.Level = level //考核等级"`
+ merInfo.Notes = notes //备注
+ overall.CONSTANT_DB_HR.Create(&merInfo)
+ } else {
+ editCont := overallhandle.MapOut()
+ if merInfo.Level != level {
+ editCont["`level`"] = level
+ editCont["`notes`"] = notes
+ editCont["`status`"] = 1
+ editCont["`timedata`"] = time.Now().Unix()
+ var merNewInfo models.Meritslog
+ merNewInfo.EiteCont(map[string]interface{}{"`id`": merInfo.Id}, editCont)
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 11:43:54
+@ 功能: 集团外部工作经历(荣信)
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) ExtWorkExpOfTheGroupRongXin(info map[int]string) {
+ defer synPros.Done()
+ var workList []models.WorkHistory
+ err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&workList).Error
+ if err != nil || len(workList) < 1 { //没有记录进行新增
+ if info[226] != "" { //集团外工作经历1
+ g.ExternalWorkGroupLog(info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235], info[236], info[237], info[238])
+ }
+ if info[239] != "" { //集团外工作经历2
+ g.ExternalWorkGroupLog(info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248], info[249], info[250], info[251])
+ }
+ if info[252] != "" { //集团外工作经历3
+ g.ExternalWorkGroupLog(info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261], info[262], info[263], info[264])
+ }
+ if info[265] != "" { //集团外工作经历4
+ g.ExternalWorkGroupLog(info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274], info[275], info[276], info[277])
+ }
+ if info[278] != "" { //集团外工作经历5
+ g.ExternalWorkGroupLog(info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287], info[288], info[289], info[290])
+ }
+ } else { //已经存在历史记录了
+ jsonInfo, _ := json.Marshal(workList)
+ overallhandle.WriteLog("del", "删除旧集团外部工作经历数据!", string(jsonInfo))
+ var workGroupLogCont models.WorkHistory
+ workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey})
+ if info[226] != "" { //集团外工作经历1
+ g.ExternalWorkGroupLog(info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235], info[236], info[237], info[238])
+ }
+ if info[239] != "" { //集团外工作经历2
+ g.ExternalWorkGroupLog(info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248], info[249], info[250], info[251])
+ }
+ if info[252] != "" { //集团外工作经历3
+ g.ExternalWorkGroupLog(info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261], info[262], info[263], info[264])
+ }
+ if info[265] != "" { //集团外工作经历4
+ g.ExternalWorkGroupLog(info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274], info[275], info[276], info[277])
+ }
+ if info[278] != "" { //集团外工作经历5
+ g.ExternalWorkGroupLog(info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287], info[288], info[289], info[290])
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 11:17:42
+@ 功能: 集团内成长经历
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) GrowthExpWitTheGroupRongXin(info map[int]string, orgId string) {
+ defer synPros.Done()
+ var growInGroup []models.InsideWorkHistory
+ err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&growInGroup).Error
+ if err != nil || len(growInGroup) < 1 {
+ //没有集团经历,那么进行新增
+ if info[95] != "" { //集团内工作经历1
+ g.EditGroupInWorkLog(info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104], info[105], info[106], info[107], orgId)
+ }
+ if info[108] != "" { //集团内工作经历2
+ g.EditGroupInWorkLog(info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117], info[118], info[119], info[120], orgId)
+ }
+ if info[121] != "" { //集团内工作经历3
+ g.EditGroupInWorkLog(info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130], info[131], info[132], info[133], orgId)
+ }
+ if info[134] != "" { //集团内工作经历4
+ g.EditGroupInWorkLog(info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143], info[144], info[145], info[146], orgId)
+ }
+ if info[147] != "" { //集团内工作经历5
+ g.EditGroupInWorkLog(info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156], info[157], info[158], info[159], orgId)
+ }
+ if info[160] != "" { //集团内工作经历6
+ g.EditGroupInWorkLog(info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169], info[170], info[171], info[172], orgId)
+ }
+ if info[173] != "" { //集团内工作经历7
+ g.EditGroupInWorkLog(info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], info[183], info[184], info[185], orgId)
+ }
+ if info[186] != "" { //集团内工作经历8
+ g.EditGroupInWorkLog(info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], info[196], info[197], info[198], orgId)
+ }
+ if info[199] != "" { //集团内工作经历9
+ g.EditGroupInWorkLog(info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], info[209], info[210], info[211], orgId)
+ }
+ if info[212] != "" { //集团内工作经历10
+ g.EditGroupInWorkLog(info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], info[222], info[223], info[224], orgId)
+ }
+ } else {
+ //有集团经历,那么删除旧的经历再新增
+ jsonInfo, _ := json.Marshal(growInGroup)
+ overallhandle.WriteLog("del", "删除旧集团内部经历数据!", string(jsonInfo))
+ var workGroupLogCont models.InsideWorkHistory
+ workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey})
+ if info[95] != "" { //集团内工作经历1
+ g.EditGroupInWorkLog(info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104], info[105], info[106], info[107], orgId)
+ }
+ if info[108] != "" { //集团内工作经历2
+ g.EditGroupInWorkLog(info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117], info[118], info[119], info[120], orgId)
+ }
+ if info[121] != "" { //集团内工作经历3
+ g.EditGroupInWorkLog(info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130], info[131], info[132], info[133], orgId)
+ }
+ if info[134] != "" { //集团内工作经历4
+ g.EditGroupInWorkLog(info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143], info[144], info[145], info[146], orgId)
+ }
+ if info[147] != "" { //集团内工作经历5
+ g.EditGroupInWorkLog(info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156], info[157], info[158], info[159], orgId)
+ }
+ if info[160] != "" { //集团内工作经历6
+ g.EditGroupInWorkLog(info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169], info[170], info[171], info[172], orgId)
+ }
+ if info[173] != "" { //集团内工作经历7
+ g.EditGroupInWorkLog(info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], info[183], info[184], info[185], orgId)
+ }
+ if info[186] != "" { //集团内工作经历8
+ g.EditGroupInWorkLog(info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], info[196], info[197], info[198], orgId)
+ }
+ if info[199] != "" { //集团内工作经历9
+ g.EditGroupInWorkLog(info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], info[209], info[210], info[211], orgId)
+ }
+ if info[212] != "" { //集团内工作经历10
+ g.EditGroupInWorkLog(info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], info[222], info[223], info[224], orgId)
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 10:54:53
+@ 功能: 家庭成员(荣信模版)
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) FamilyMembersRongXin(info map[int]string) {
+ defer synPros.Done()
+ var familyAry []models.FamilyMembers
+ err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&familyAry).Error
+ // var emergencyFamily []models.EmergencyContact //紧急联系人
+ // creeTime := time.Now().Unix()
+ if err != nil || len(familyAry) < 1 {
+ if info[62] != "" && info[63] != "" {
+ g.EditFamilyInfo(info[62], info[63], info[64], info[65], info[66], "否")
+ }
+ if info[67] != "" && info[68] != "" {
+ g.EditFamilyInfo(info[67], info[68], info[69], info[70], info[71], "否")
+ }
+ if info[72] != "" && info[73] != "" {
+ g.EditFamilyInfo(info[72], info[73], info[74], info[75], info[76], "否")
+ }
+ if info[77] != "" && info[78] != "" {
+ g.EditFamilyInfo(info[77], info[78], info[79], info[80], info[81], "否")
+ }
+ if info[82] != "" && info[83] != "" {
+ g.EditFamilyInfo(info[82], info[83], info[84], info[85], info[86], "否")
+ }
+ } else {
+ jsonInfo, _ := json.Marshal(familyAry)
+ overallhandle.WriteLog("del", "删除旧家庭成员数据!", string(jsonInfo))
+ var familyCont models.FamilyMembers
+ familyCont.DelCont(map[string]interface{}{"`key`": g.UserKey})
+ if info[62] != "" && info[63] != "" {
+ g.EditFamilyInfo(info[62], info[63], info[64], info[65], info[66], "否")
+ }
+ if info[67] != "" && info[68] != "" {
+ g.EditFamilyInfo(info[67], info[68], info[69], info[70], info[71], "否")
+ }
+ if info[72] != "" && info[73] != "" {
+ g.EditFamilyInfo(info[72], info[73], info[74], info[75], info[76], "否")
+ }
+ if info[77] != "" && info[78] != "" {
+ g.EditFamilyInfo(info[77], info[78], info[79], info[80], info[81], "否")
+ }
+ if info[82] != "" && info[83] != "" {
+ g.EditFamilyInfo(info[82], info[83], info[84], info[85], info[86], "否")
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 10:28:10
+@ 功能:
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) EditEducationInfoRongXin(info map[int]string) {
+ defer synPros.Done()
+ var mySchoolLog []models.PersonnelEducation
+ err := overall.CONSTANT_DB_HR.Model(&models.PersonnelEducation{}).Where("`key` = ?", g.UserKey).Find(&mySchoolLog).Error
+ fmt.Printf("教育经历--->%v\n", len(mySchoolLog))
+ if err != nil || len(mySchoolLog) < 1 {
+ if info[34] != "" || info[37] != "" { //第一学历
+ g.AddOneSchollLog(info[34], info[35], info[36], info[37], info[38], info[39], info[40], info[41], info[42], 2)
+ }
+ if info[43] != "" || info[46] != "" { //最高学历
+ g.AddOneSchollLog(info[43], info[44], info[45], info[46], info[47], info[48], info[49], info[50], info[51], 3)
+ }
+ if info[52] != "" || info[55] != "" { //其他学历
+ g.AddOneSchollLog(info[52], info[53], info[54], info[55], info[56], info[57], info[58], info[59], info[60], 1)
+ }
+ } else {
+ jsonInfo, _ := json.Marshal(mySchoolLog)
+ overallhandle.WriteLog("del", "删除旧集团外部工作经历数据!", string(jsonInfo))
+ var delScho models.PersonnelEducation
+ delScho.DelCont(map[string]interface{}{"`key`": g.UserKey})
+ if info[34] != "" || info[37] != "" { //第一学历
+ g.AddOneSchollLog(info[34], info[35], info[36], info[37], info[38], info[39], info[40], info[41], info[42], 2)
+ }
+ if info[43] != "" || info[46] != "" { //最高学历
+ g.AddOneSchollLog(info[43], info[44], info[45], info[46], info[47], info[48], info[49], info[50], info[51], 3)
+ }
+ if info[52] != "" || info[55] != "" { //其他学历
+ g.AddOneSchollLog(info[52], info[53], info[54], info[55], info[56], info[57], info[58], info[59], info[60], 1)
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 10:12:33
+@ 功能:
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) PoliticalOutlookEditRongXin(info map[int]string) {
+ defer synPros.Done()
+ if info[329] != "" {
+ var polOutInfo models.PoliticalIdentity
+ err := polOutInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey})
+ if err != nil { //不存在,新增
+ polOutInfo.Userkey = g.UserKey //员工唯一识别符;"`
+ polOutInfo.PoliticalOutlook = politiToInt(info[329]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
+ if info[330] != "" {
+ polOutInfo.JoinTime = overallhandle.ExcelDateToDate(info[330]).Unix() //加入时间"`
+ }
+ polOutInfo.Branch = info[331] //所在党支部"`
+ polOutInfo.Bosition = info[332] //党内职务"`
+ // polOutInfo.JoiningParty = info[317] //入党时所在单位"`
+ // if info[318] == "是" {
+ // polOutInfo.SwitchToClass = 1 //组织关系是否转入(1:是;2:否)"`
+ // } else {
+ // polOutInfo.SwitchToClass = 2 //组织关系是否转入(1:是;2:否)"`
+ // }
+ // if info[319] != "" {
+ // polOutInfo.SwitchToTime = overallhandle.ExcelDateToDate(info[319]).Unix() //组织关系转入时间"`
+ // }
+ polOutInfo.Time = time.Now().Unix() //创建时间"`
+ overall.CONSTANT_DB_HR.Create(&polOutInfo)
+ } else {
+ editCont := overallhandle.MapOut()
+ if info[329] != "" {
+ poloutName := politiToInt(info[329])
+ if poloutName != polOutInfo.PoliticalOutlook {
+ editCont["`political_outlook`"] = poloutName
+ }
+ }
+ if info[330] != "" {
+ joinTimeVal := overallhandle.ExcelDateToDate(info[330]).Unix()
+ if joinTimeVal != polOutInfo.JoinTime {
+ editCont["`joinTime`"] = joinTimeVal
+ }
+ }
+ if info[331] != "" && info[331] != polOutInfo.Branch {
+ editCont["`branch`"] = info[331]
+ }
+ if info[332] != "" && info[332] != polOutInfo.Bosition {
+ editCont["`position`"] = info[332]
+ }
+ // if info[317] != "" && info[317] != polOutInfo.JoiningParty {
+ // editCont["`joiningParty`"] = info[317]
+ // }
+ // zhuan := 2
+ // if info[318] == "是" {
+ // zhuan = 1
+ // }
+ // if zhuan != polOutInfo.SwitchToClass {
+ // editCont["`switchToClass`"] = zhuan
+ // }
+ // if info[319] != "" {
+ // switchTimeVal := overallhandle.ExcelDateToDate(info[319]).Unix()
+ // if switchTimeVal != polOutInfo.SwitchToTime {
+ // editCont["`switchToTime`"] = switchTimeVal
+ // }
+ // }
+ if len(editCont) > 0 {
+ editCont["`time`"] = time.Now().Unix()
+ polOutInfo.EiteCont(map[string]interface{}{"`userkey`": g.UserKey}, editCont)
+ }
+ }
+ } else {
+ var polOutInfo models.PoliticalIdentity
+ polOutInfo.DelCont(map[string]interface{}{"`userkey`": g.UserKey})
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 08:29:46
+@ 功能: 人员信息副本(荣信)
+@ 参数
+
+ #info 电子表格信息
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) AuxiliaryTableUserRongXin(info map[int]string) {
+ defer synPros.Done()
+ var myInfo models.PersonnelContent
+ err := myInfo.GetCont(map[string]interface{}{"`key`": g.UserKey}, "`number`")
+ if err != nil { //附属内容不存在,进行新增。
+ myInfo.Key = g.UserKey //Key"`
+ myInfo.Number = g.UserNum //员工工号;index"`
+ myInfo.Idcardno = info[24] //身份证号"`
+ // myInfo. Passportno = //护照号码"`
+ // myInfo. Globalroaming = //国际区号"`
+ myInfo.Mobilephone = info[29] //手机号码"`
+ myInfo.Email = info[33] //电子邮件"`
+ myInfo.Gender = genderToInt(info[11]) //性别(1:男性;2:女性;3:中性)"`
+ if info[12] != "" {
+ myInfo.Birthday = overallhandle.ExcelDateToDate(info[12]).Unix() //birthday"`
+ }
+ myInfo.Myfolk = info[14] //民族"`
+ myInfo.Nativeplace = info[20] //籍贯"`
+ if info[25] != "" {
+ myInfo.Idcardstartdate = overallhandle.ExcelDateToDate(info[25]).Unix() //身份证有效期开始"`
+ }
+ if info[26] != "" {
+ myInfo.Idcardenddate = overallhandle.ExcelDateToDate(info[26]).Unix() //身份证有效期结束"`
+ }
+
+ myInfo.Idcardaddress = info[28] //身份证地址"`
+ // myInfo. IdcardIssued = //身份证签发机关"`
+ myInfo.Health = healthToInt(info[16]) //健康状况(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废)"`
+ myInfo.Maritalstatus = maritalstatusToInt(info[15]) //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异)"`
+ // myInfo. Internaltelephone = //内线电话"`
+ myInfo.Currentresidence = info[19] //现居住地址"`
+ myInfo.Time = time.Now().Unix() //创建时间"`
+ myInfo.Constellation = consteToInt(info[22]) //星座(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座)"`
+ if info[87] == "是" {
+ myInfo.Isdoubleworker = 1 //是否双职工(1:是;2:否)"`
+ g.WorkingCoupleRongXin(info, true)
+ } else {
+ myInfo.Isdoubleworker = 2 //是否双职工(1:是;2:否)"`
+ g.WorkingCoupleRongXin(info, false)
+ }
+ // if info[320] == "是" {
+ // myInfo.Isveterans = 1 //是否为退役军人(1:是;2:否)"`
+ // g.EditVeterans(info, true)
+ // } else {
+ // myInfo.Isveterans = 2
+ // g.EditVeterans(info, false)
+ // }
+ // myInfo.Veteransnumber = info[321]
+ if info[301] != "" {
+ myInfo.Jobstartdate = overallhandle.ExcelDateToDate(info[301]).Unix() //参加工作日期"`
+ }
+ if info[303] != "" {
+ myInfo.Entrydate = overallhandle.ExcelDateToDate(info[303]).Unix() //入职日期"`
+ }
+ // myInfo. Probationperiod = //试用期"`
+ // myInfo. Planformaldate = //预计转正日期"`
+ if info[17] != "" {
+ myInfo.PoliticalOutlook = politiToInt(info[17]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
+ }
+ if info[329] != "" {
+ myInfo.PoliticalOutlook = politiToInt(info[329]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
+ }
+ myInfo.MaritalstatusCn = info[15] //婚姻状况汉字说明"`
+ myInfo.ConstellationingCn = info[22] //星座汉字说明"`
+ myInfo.PoliticalOutlookCn = info[17] //政治面貌汉字说明"`
+ myInfo.HealthCn = info[16] //健康状况中文说明"`
+ // myInfo.NameUsedBefore = //曾用名"`
+ myInfo.CareerPlanning = info[297] //职业生涯规划"`
+ myInfo.HelpObtained = info[299] //个人期望从组织获得的帮助"`
+ myInfo.Hobby = info[23] //爱好"`
+
+ myInfo.DomicileType = info[18] //户籍类型
+ if info[27] == "是" {
+ myInfo.IdCardnoLongTerm = 1 //身份证是否长期有效(1:是;2:否)
+
+ } else {
+ myInfo.IdCardnoLongTerm = 2 //身份证是否长期有效(1:是;2:否)
+
+ }
+ myInfo.MobileShortNumber = info[30] //手机小号
+ myInfo.Channel = JoinJobChanel(info[300]) //入职渠道(1:社会招聘;2:校园招聘;3:内部推荐)
+ myInfo.BloodType = info[21] //血型
+ overall.CONSTANT_DB_HR.Create(&myInfo)
+ } else { //附属内容存在,进行编辑。
+ editCont := overallhandle.MapOut()
+ editCont["`idcardno`"] = info[24]
+ editCont["`mobilephone`"] = info[29]
+ editCont["`email`"] = info[33]
+ editCont["`gender`"] = genderToInt(info[11])
+ if info[12] != "" {
+ editCont["`birthday`"] = overallhandle.ExcelDateToDate(info[12]).Unix()
+ }
+ editCont["`myfolk`"] = info[14]
+ editCont["`nativeplace`"] = info[20]
+ if info[25] != "" {
+ editCont["`idcardstartdate`"] = overallhandle.ExcelDateToDate(info[25]).Unix()
+ }
+ if info[26] != "" {
+ editCont["`idcardenddate`"] = overallhandle.ExcelDateToDate(info[26]).Unix()
+ }
+ editCont["`idcardaddress`"] = info[28]
+ editCont["`health`"] = healthToInt(info[16])
+ editCont["`maritalstatus`"] = maritalstatusToInt(info[15])
+ editCont["`currentresidence`"] = info[19]
+ editCont["`constellationing`"] = consteToInt(info[22])
+ if info[87] == "是" {
+ editCont["`isdoubleworker`"] = 1 //是否双职工(1:是;2:否)"`
+ g.WorkingCoupleRongXin(info, true)
+ } else {
+ editCont["`isdoubleworker`"] = 2 //是否双职工(1:是;2:否)"`
+ g.WorkingCoupleRongXin(info, false)
+ }
+ // if info[320] == "是" {
+ // editCont["`isveterans`"] = 1 //是否为退役军人(1:是;2:否)"`
+ // g.EditVeterans(info, true)
+ // } else {
+ // editCont["`isveterans`"] = 2
+ // g.EditVeterans(info, false)
+ // }
+ // editCont["`veteransnumber`"] = info[321]
+ if info[301] != "" {
+ editCont["`jobstartdate`"] = overallhandle.ExcelDateToDate(info[301]).Unix()
+ }
+ if info[303] != "" {
+ editCont["`entrydate`"] = overallhandle.ExcelDateToDate(info[303]).Unix()
+ }
+ if info[17] != "" {
+ editCont["`political_outlook`"] = politiToInt(info[17])
+ }
+ if info[329] != "" {
+ editCont["`political_outlook`"] = politiToInt(info[329])
+ }
+ editCont["`maritalstatus_cn`"] = info[15]
+ editCont["`constellationing_cn`"] = info[22]
+ editCont["`political_outlook_cn`"] = info[17]
+ editCont["`health_cn`"] = info[16]
+ editCont["`career_planning`"] = info[297]
+ editCont["`help_obtained`"] = info[299]
+ editCont["`hobby`"] = info[23]
+ editCont["`domicile_type`"] = info[18]
+ if info[27] == "是" {
+ editCont["`idCardnoLongTerm`"] = 1 //身份证是否长期有效(1:是;2:否)
+ // g.WorkingCouple(info, true)
+ } else {
+ editCont["`idCardnoLongTerm`"] = 2 //身份证是否长期有效(1:是;2:否)
+ // g.WorkingCouple(info, false)
+ }
+ editCont["`mobileShortNumber`"] = info[30]
+ editCont["`channel`"] = JoinJobChanel(info[300])
+ editCont["`bloodType`"] = info[21]
+ editCont["`time`"] = time.Now().Unix()
+ myInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editCont)
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 08:47:04
+@ 功能: 双职工处理
+@ 参数
+
+ #info 表单内容
+ #isTrue 是否为双职工
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) WorkingCoupleRongXin(info map[int]string, isTrue bool) {
+ var doubleWorkMan []models.DoubleWorker
+ overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&doubleWorkMan) //获取旧数据
+ if isTrue {
+ if len(doubleWorkMan) < 1 { //无记录,新增
+ NewAddDoubleWorkRongXin(g.UserKey, g.UserNum, info)
+ } else {
+ oldId := int64(0)
+ for _, v := range doubleWorkMan {
+ if v.Name == info[88] {
+ oldId = v.Id
+ }
+ }
+ if oldId != 0 { //存在,数据编辑
+ editInfo := overallhandle.MapOut()
+ editInfo["`name`"] = info[88]
+ editInfo["`company`"] = info[89]
+ editInfo["`department`"] = info[90]
+ editInfo["`position`"] = info[92]
+ editInfo["`workPosit`"] = info[92]
+ editInfo["`workUnit`"] = info[91]
+ // editInfo["`levele`"] = info[89]
+ if info[93] != "" {
+ editInfo["`joinTime`"] = overallhandle.ExcelDateToDate(info[93]).Unix()
+ }
+
+ editInfo["`tel`"] = info[94]
+ editInfo["`time`"] = time.Now().Unix()
+ editInfo["`state`"] = 1
+ var editCont models.DoubleWorker
+ editCont.EiteCont(map[string]interface{}{"`id`": oldId}, editInfo)
+ } else {
+ NewAddDoubleWorkRongXin(g.UserKey, g.UserNum, info)
+ }
+ }
+ } else { //不是双职工,软删除老数据
+ if len(doubleWorkMan) > 0 {
+ var delDoubleWork models.DoubleWorker
+ delDoubleWork.EiteCont(map[string]interface{}{"`key`": g.UserKey}, map[string]interface{}{"`state`": 3})
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 09:25:01
+@ 功能: 新增双职工(荣信模版)
+@ 参数
+
+ #userKey 人员KEY
+ #userNum 人员工号
+ #info 电子表格信息
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func NewAddDoubleWorkRongXin(userKey int64, userNum string, info map[int]string) {
+ var inSetInfo models.DoubleWorker
+ inSetInfo.Key = userKey //
+ inSetInfo.Number = userNum //"`
+ inSetInfo.Name = info[88] //姓名"`
+ inSetInfo.Company = info[89] //所在公司"`
+ inSetInfo.Department = info[90] //所在部门"`
+ inSetInfo.Position = info[92] //所在岗位"`
+ inSetInfo.WorkUnit = info[91]
+ inSetInfo.WorkPosit = info[92]
+
+ // inSetInfo.Levele = info[89]
+ if info[93] != "" {
+ inSetInfo.JoinTime = overallhandle.ExcelDateToDate(info[93]).Unix()
+ }
+ inSetInfo.Tel = info[94] //联系方式"`
+ inSetInfo.Time = time.Now().Unix() //创建时间"`
+ inSetInfo.State = 1 //状态(1:启用;2:禁用;3:删除)`
+ overall.CONSTANT_DB_HR.Create(&inSetInfo)
+}
diff --git a/api/version1/personnelapi/analysRxExelect.go b/api/version1/personnelapi/analysRxExelect.go
new file mode 100644
index 0000000..8402fd1
--- /dev/null
+++ b/api/version1/personnelapi/analysRxExelect.go
@@ -0,0 +1,1383 @@
+package personnelapi
+
+import (
+ "encoding/json"
+ "fmt"
+ "hr_server/models"
+ "hr_server/overall"
+ "hr_server/overall/overallhandle"
+ "strconv"
+ "strings"
+ "time"
+)
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-20 08:27:51
+@ 功能: 主表数据处理(荣信表格模版)
+@ 参数
+
+ #info 人员信息
+ #meritsYear 绩效年度
+ #rewPunYearsmap 奖惩年度
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) ProcessMainTableRongXinNew(info map[int]string, meritsYear, rewPunYearsmap map[int]int, orgId string) {
+ if g.UserKey == 0 { //判断是否有唯一标识符
+ g.UserKey = overallhandle.OnlyOneNumber(2)
+ }
+ curryTime := time.Now().Unix()
+ if g.IsOk { //新增员工信息
+ var userInfo models.PersonArchives
+ userInfo.Key = g.UserKey //唯一编号
+ userInfo.Name = info[3] //姓名"`
+ userInfo.Number = info[2] //工号
+ userInfo.HireClass = 1 //雇佣类型(1:雇佣入职;2:再入职;)"`
+ userInfo.EmpType = 4 //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)"`
+ orgIdInt, _ := strconv.ParseInt(orgId, 10, 64)
+ userInfo.ExcelTemplate = orgIdInt //信息来源于哪个模板
+ userInfo.Time = curryTime //写入时间"`
+ userInfo.EiteTime = curryTime //编辑时间"`
+ userInfo.State = 1 //状态(1:启用;2:禁用;3:删除)`
+ userInfo.Key = g.UserKey //key"`
+ var md5JiaMi overallhandle.Md5Encryption
+ md5JiaMi.Md5EncryptionInit(overall.CONSTANT_CONFIG.Appsetup.DefaultPassword)
+ md5Token := md5JiaMi.Md5EncryptionAlgorithm()
+ userInfo.Password = md5Token //密码"`
+ userInfo.IsShowTrue = 1 //信息锁定
+
+ var adminOrg int64 //最终行政组织
+ var allOrgId []int64 //行政范围
+
+ //判定公司
+ if info[4] != "" { //判断主公司
+ var comOrg models.AdministrativeOrganization
+ comOrg.GetCont(map[string]interface{}{"`name`": info[4]}, "`id`")
+ if comOrg.Id != 0 {
+ var sunOrg overallhandle.GetOrgAllParent //获取当前公司下的所有子行政组织
+ if info[5] != "" { //判断子公司
+ var sunComOrg models.AdministrativeOrganization
+ sunComOrg.GetCont(map[string]interface{}{"`name`": info[5], "`superior`": comOrg.Id}, "`id`")
+ if sunComOrg.Id != 0 {
+ userInfo.Company = sunComOrg.Id //入职公司"`
+ adminOrg = sunComOrg.Id
+ } else {
+ userInfo.Company = comOrg.Id //入职公司"`
+ adminOrg = comOrg.Id
+ }
+ } else {
+ userInfo.Company = comOrg.Id //入职公司"`
+ adminOrg = comOrg.Id
+ }
+ sunOrg.GetGCSOrgSonAllId(adminOrg)
+ sunOrg.Id = append(sunOrg.Id, adminOrg)
+ allOrgId = sunOrg.Id
+ }
+ }
+ if len(allOrgId) > 0 {
+ //主部门
+ if info[6] != "" {
+ mastOrg := GetMyOrgSunId(info[6], allOrgId)
+ if mastOrg != 0 {
+ userInfo.MainDeparment = mastOrg //主部门"`
+ adminOrg = mastOrg
+ }
+ }
+ //二级部门
+ if info[7] != "" {
+ suntOrg := GetMyOrgSunId(info[7], allOrgId)
+ if suntOrg != 0 {
+ userInfo.SunMainDeparment = suntOrg //主部门"`
+ adminOrg = suntOrg
+ }
+ }
+ //工段
+ if info[8] != "" {
+ postOrg := GetMyOrgSunId(info[87], allOrgId)
+ if postOrg != 0 {
+ userInfo.WorkSection = postOrg //主部门"`
+ adminOrg = postOrg
+ }
+ }
+ }
+ //根据最终行政组织获取职务等信息
+ if adminOrg != 0 {
+ userInfo.AdminOrg = adminOrg //所属行政组织"`
+ userInfo.Position, userInfo.JobId, userInfo.PersonInCharge = GetMyPositisName(info[9], adminOrg)
+ }
+ switch info[10] {
+ case "一级":
+ userInfo.JobLeve = 1 // 职务等级"`
+ case "二级":
+ userInfo.JobLeve = 2 // 职务等级"`
+ case "三级":
+ userInfo.JobLeve = 3 // 职务等级"`
+ case "四级":
+ userInfo.JobLeve = 4 // 职务等级"`
+ case "五级":
+ userInfo.JobLeve = 5 // 职务等级"`
+ case "协议":
+ userInfo.JobLeve = 6 // 协议"`
+ default:
+ }
+ if info[11] != "" { //管理类型
+ var jobInfo models.JobClass
+ jobInfo.GetCont(map[string]interface{}{"`name`": info[11]}, "`id`")
+ if jobInfo.Id != 0 {
+ userInfo.JobClass = jobInfo.Id //管理类别"`
+ }
+ }
+ if info[33] != "" { //微信号
+ userInfo.Wechat = info[33]
+ }
+ err := overall.CONSTANT_DB_HR.Create(&userInfo).Error
+ if err != nil {
+ g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err))
+ g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err)
+ } else {
+ g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11)))
+ g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11))
+ }
+ } else { //修改员工信息
+ editInfo := overallhandle.MapOut()
+ if info[3] != "" {
+ editInfo["`name`"] = info[3]
+ }
+ var adminOrg int64
+ var allOrgId []int64
+ //判定公司
+ if info[4] != "" { //判断主公司
+ var comOrg models.AdministrativeOrganization
+ comOrg.GetCont(map[string]interface{}{"`name`": info[4]}, "`id`")
+ if comOrg.Id != 0 {
+ var sunOrg overallhandle.GetOrgAllParent //获取当前公司下的所有子行政组织
+ if info[5] != "" { //判断子公司
+ var sunComOrg models.AdministrativeOrganization
+ sunComOrg.GetCont(map[string]interface{}{"`name`": info[5], "`superior`": comOrg.Id}, "`id`")
+ if sunComOrg.Id != 0 {
+ editInfo["`company`"] = sunComOrg.Id //入职公司"`
+ adminOrg = sunComOrg.Id
+ } else {
+ editInfo["`company`"] = comOrg.Id //入职公司"`
+ adminOrg = comOrg.Id
+ }
+ } else {
+ editInfo["`company`"] = comOrg.Id //入职公司"`
+ adminOrg = comOrg.Id
+ }
+ sunOrg.GetGCSOrgSonAllId(adminOrg)
+ sunOrg.Id = append(sunOrg.Id, adminOrg)
+ allOrgId = sunOrg.Id
+ }
+ }
+ if len(allOrgId) > 0 {
+ //主部门
+ if info[6] != "" {
+ mastOrg := GetMyOrgSunId(info[6], allOrgId)
+ if mastOrg != 0 {
+ editInfo["`maindeparment`"] = mastOrg //主部门"`
+ adminOrg = mastOrg
+ }
+ }
+ //二级部门
+ if info[7] != "" {
+ suntOrg := GetMyOrgSunId(info[7], allOrgId)
+ if suntOrg != 0 {
+ editInfo["`sun_main_deparment`"] = suntOrg //主部门"`
+ adminOrg = suntOrg
+ }
+ }
+ //工段
+ if info[8] != "" {
+ postOrg := GetMyOrgSunId(info[87], allOrgId)
+ if postOrg != 0 {
+ editInfo["`work_section`"] = postOrg //主部门"`
+ adminOrg = postOrg
+ }
+ }
+ }
+ //根据最终行政组织获取职务等信息
+ if adminOrg != 0 {
+ editInfo["`admin_org`"] = adminOrg //所属行政组织"`
+ position, jobId, PersonInCharge := GetMyPositisName(info[9], adminOrg)
+ if position != 0 {
+ editInfo["`position`"] = position
+ }
+ if jobId != 0 {
+ editInfo["`job_id`"] = jobId
+ }
+ if PersonInCharge != 0 {
+ editInfo["`person_in_charge`"] = PersonInCharge
+ }
+ }
+ switch info[10] {
+ case "一级":
+ editInfo["`job_leve`"] = 1 // 职务等级"`
+ case "二级":
+ editInfo["`job_leve`"] = 2 // 职务等级"`
+ case "三级":
+ editInfo["`job_leve`"] = 3 // 职务等级"`
+ case "四级":
+ editInfo["`job_leve`"] = 4 // 职务等级"`
+ case "五级":
+ editInfo["`job_leve`"] = 5 // 职务等级"`
+ case "协议":
+ editInfo["`job_leve`"] = 6 // 协议"`
+ default:
+ }
+ if info[11] != "" { //管理类型
+ var jobInfo models.JobClass
+ jobInfo.GetCont(map[string]interface{}{"`name`": info[11]}, "`id`")
+ if jobInfo.Id != 0 {
+ editInfo["`job_class`"] = jobInfo.Id //管理类别"`
+ }
+ }
+ if info[33] != "" { //微信号
+ editInfo["`wechat`"] = info[33]
+ }
+ editInfo["`eite_time`"] = curryTime
+ editInfo["`is_show_true`"] = 1
+ editInfo["`excel_template`"] = orgId
+ var userInfo models.PersonArchives
+ err := userInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editInfo)
+ // fmt.Printf("编辑信息:%v\n", err)
+ if err != nil {
+ g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err))
+ g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err)
+ } else {
+ g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11)))
+ g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11))
+ }
+ }
+ //协程处理附属信息
+ synPros.Add(1)
+ go g.OrgChannelInfoRx(info[4], info[5], info[6], info[7], info[8], "电子表格导入数据") //行政组织变更
+ synPros.Add(1)
+ go g.AuxiliaryTableUserRx(info) //人员信息副本(荣信)
+ // synPros.Add(1)
+ // go g.PoliticalOutlookEditRx(info) //政治面貌
+ synPros.Add(1)
+ go g.EditEducationInfoRx(info) //学历信息
+ synPros.Add(1)
+ go g.FamilyMembersRx(info) //家庭成员
+ synPros.Add(1)
+ go g.GrowthExpWitTheGroupRx(info, orgId) //集团内成长经历
+ synPros.Add(1)
+ go g.ExtWorkExpOfTheGroupRx(info) //集团外部工作经历
+ synPros.Add(1)
+ go g.EditExamLevelRx(info, meritsYear) //绩效考核成绩
+ synPros.Add(1)
+ go g.EditRewPunRx(info, rewPunYearsmap) //奖惩记录
+ synPros.Add(1)
+ go g.EditAcaTitleRx(info) //编辑职称
+ synPros.Add(1)
+ go g.EditCerFicRx(info) //编辑证书
+ synPros.Add(1)
+ go g.TalentInventoryNew(info, orgId) //人才盘点
+ //监听所有协程都完成
+ synPros.Wait()
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-24 16:05:30
+@ 功能: 荣信专供证书
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) EditCerFicRx(info map[int]string) {
+ defer synPros.Done()
+ var cerHonList []models.CertificateHonors
+ err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&cerHonList).Error
+ if err != nil || len(cerHonList) < 1 {
+ if info[325] != "" {
+ titleAry := strings.Split(info[325], ";")
+ fmt.Printf("证书--%v---%v---%T-->%v\n", g.UserNum, info[325], titleAry, titleAry)
+ for i, v := range titleAry {
+ fmt.Printf("证书-%v-->%v\n", i, v)
+ if v != "" {
+ g.EditCertificateCont(v, "", "", "", "", "", "是")
+ }
+ }
+
+ }
+
+ } else {
+ jsonInfo, _ := json.Marshal(cerHonList)
+ overallhandle.WriteLog("del", "删除旧证书数据!", string(jsonInfo))
+ var workGroupLogCont models.CertificateHonors
+ workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey})
+ if info[325] != "" {
+ titleAry := strings.Split(info[325], ";")
+ fmt.Printf("证书--%v---%v---%T-->%v\n", g.UserNum, info[325], titleAry, titleAry)
+ for i, v := range titleAry {
+ fmt.Printf("证书-%v-->%v\n", i, v)
+ if v != "" {
+ g.EditCertificateCont(v, "", "", "", "", "", "是")
+ }
+ }
+
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-24 15:58:32
+@ 功能: 荣信职称信息
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) EditAcaTitleRx(info map[int]string) {
+ defer synPros.Done()
+ var acaList []models.AcademicTitle
+ err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&acaList).Error
+ if err != nil || len(acaList) < 1 {
+ //新增职称
+ if info[322] != "" {
+ g.InsetAcaInfoRx(info[322], info[323], info[324], "", "")
+ }
+
+ } else {
+ //原先有数据
+ jsonInfo, _ := json.Marshal(acaList)
+ overallhandle.WriteLog("del", "删除旧职称数据!", string(jsonInfo))
+ var workGroupLogCont models.AcademicTitle
+ workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey})
+ //新增职称
+ if info[322] != "" {
+ g.InsetAcaInfoRx(info[322], info[323], info[324], "", "")
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-02-04 13:39:42
+@ 功能: 写入职称
+*/
+func (g *GroupParsingData) InsetAcaInfoRx(types, series, speciality, number, timeVal string) {
+ titleAry := strings.Split(types, ";")
+ // fmt.Printf("职称-%v-->%v\n", g.UserNum, titleAry)
+ for _, v := range titleAry {
+ if v != "" {
+ // fmt.Printf("职称-%v-%v-->%v\n", g.UserNum, i, v)
+ g.InsetAcaInfo(v, series, speciality, number, timeVal)
+ }
+ }
+
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-28 09:28:07
+@ 功能: 人才盘点
+@ 参数
+
+ #info 表格数据
+ #orgId 行政组织
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) TalentInventoryNew(info map[int]string, orgId string) {
+ defer synPros.Done()
+ currentYear := overallhandle.UnixTimeToDay(time.Now().Unix(), 16)
+ switch orgId {
+ case "296":
+ EditTalentInventory(g.UserKey, currentYear, info[297], info[298], "", info[296])
+ default:
+ EditTalentInventory(g.UserKey, currentYear, info[291], info[292], "", "")
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 14:03:14
+@ 功能: 编辑证书(荣信)
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) EditCertificateRx(info map[int]string) {
+ defer synPros.Done()
+ var cerHonList []models.CertificateHonors
+ err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&cerHonList).Error
+ if err != nil || len(cerHonList) < 1 {
+ if info[346] != "" {
+ g.EditCertificateCont(info[345], info[346], info[347], info[348], info[349], info[350], "是")
+ }
+ if info[352] != "" {
+ g.EditCertificateCont(info[351], info[352], info[353], info[354], info[355], info[356], "是")
+ }
+ if info[358] != "" {
+ g.EditCertificateCont(info[357], info[358], info[359], info[360], info[361], info[362], "是")
+ }
+ } else {
+ jsonInfo, _ := json.Marshal(cerHonList)
+ overallhandle.WriteLog("del", "删除旧证书数据!", string(jsonInfo))
+ var workGroupLogCont models.CertificateHonors
+ workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey})
+ if info[346] != "" {
+ g.EditCertificateCont(info[345], info[346], info[347], info[348], info[349], info[350], "是")
+ }
+ if info[352] != "" {
+ g.EditCertificateCont(info[351], info[352], info[353], info[354], info[355], info[356], "是")
+ }
+ if info[358] != "" {
+ g.EditCertificateCont(info[357], info[358], info[359], info[360], info[361], info[362], "是")
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 13:58:10
+@ 功能: 编辑职称
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) EditAcademicTitleRx(info map[int]string) {
+ defer synPros.Done()
+ var acaList []models.AcademicTitle
+ err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&acaList).Error
+ if err != nil || len(acaList) < 1 {
+ //新增职称
+ if info[335] != "" {
+ g.InsetAcaInfo(info[335], info[336], info[337], info[338], info[339])
+ }
+ if info[340] != "" {
+ g.InsetAcaInfo(info[340], info[341], info[342], info[343], info[344])
+ }
+ } else {
+ //原先有数据
+ jsonInfo, _ := json.Marshal(acaList)
+ overallhandle.WriteLog("del", "删除旧职称数据!", string(jsonInfo))
+ var workGroupLogCont models.AcademicTitle
+ workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey})
+ if info[335] != "" {
+ g.InsetAcaInfo(info[335], info[336], info[337], info[338], info[339])
+ }
+ if info[340] != "" {
+ g.InsetAcaInfo(info[340], info[341], info[342], info[343], info[344])
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 13:44:40
+@ 功能: 编辑奖惩记录
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) EditRewPunRx(info map[int]string, rewPunYearsmap map[int]int) {
+ defer synPros.Done()
+ if val, isOk := rewPunYearsmap[0]; isOk {
+ g.EditRewPunInfoRx(val, info[304], info[305], info[306], info[307], info[308], info[309])
+ }
+ if val, isOk := rewPunYearsmap[1]; isOk {
+ g.EditRewPunInfoRx(val, info[310], info[311], info[312], info[313], info[314], info[315])
+ }
+ if val, isOk := rewPunYearsmap[2]; isOk {
+ g.EditRewPunInfoRx(val, info[316], info[317], info[318], info[319], info[320], info[321])
+ }
+ // if val, isOk := rewPunYearsmap[3]; isOk {
+ // g.EditRewPunInfoRx(val, info[325], info[326], info[327], info[328], info[329], info[330])
+ // }
+}
+
+// 写入奖惩记录
+func (g *GroupParsingData) EditRewPunInfoRx(years int, level, rewPunClass, title, timeData, issuingUnit, prePunNum string) {
+ var oldId []int64
+ err := overall.CONSTANT_DB_HR.Model(&models.RewardsPenalties{}).Select("`id`").Where("`months` = 0 AND `userkey` = ? AND `years` = ?", g.UserKey, years).Find(&oldId).Error
+
+ // var rewPunYearCont models.RewardsPenalties
+ // err := rewPunYearCont.GetCont(map[string]interface{}{"`userkey`": g.UserKey, "`years`": years, "`months`": 0})
+
+ if err == nil {
+ if len(oldId) > 0 {
+ overall.CONSTANT_DB_HR.Where("`id` IN ? ", oldId).Delete(&models.RewardsPenalties{})
+ }
+
+ }
+
+ timeVal := time.Now().Unix()
+ if timeData != "" {
+ timeVal = overallhandle.ExcelDateToDate(timeData).Unix()
+ // fmt.Printf("奖惩记录3: %v\n", timeVal)
+ }
+ if title != "" {
+ titleAry := strings.Split(title, ";")
+ for _, v := range titleAry {
+ if v != "" {
+ var rewPunYearCont models.RewardsPenalties
+ jiangCeng := RewPunLevelClassStr(rewPunClass)
+ rewPunYearCont.Title = v //奖励/处分项目"`
+ rewPunYearCont.UserKey = g.UserKey //获得人员"`
+ if jiangCeng <= 6 {
+ rewPunYearCont.Types = 1 //类型(1:奖励;2:处分;)`
+ } else {
+ rewPunYearCont.Types = 2 //类型(1:奖励;2:处分;)`
+ }
+ rewPunYearCont.State = 1 //状态(1:启用;2:禁用;3:删除)`
+ rewPunYearCont.IssuingUnit = issuingUnit //颁发单位"`
+
+ rewPunYearCont.TimeData = timeVal //获得时间"`
+
+ rewPunYearCont.Years = years //年"`
+ rewPunYearCont.Months = 0 //月"`
+ rewPunYearCont.Level = RewPunLevelStr(level) //奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)"`
+ rewPunYearCont.RewPunClass = jiangCeng //奖惩类型(1:年终评优;2:表扬;3:嘉奖;4:记功;5:记大功;6:特别奖励;7:批评;8:警告;9:记过;10:记大过;11:降级;12:留用察看;13:开除)"`
+ rewPunYearCont.RewPunNumber = prePunNum
+ overall.CONSTANT_DB_HR.Create(&rewPunYearCont)
+ }
+
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 13:25:00
+@ 功能: 编辑考核成绩(荣信)
+@ 参数
+
+ #info 表单内容
+ #meritsYear 年份
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) EditExamLevelRx(info map[int]string, meritsYear map[int]int) {
+ defer synPros.Done()
+ if val, isOk := meritsYear[0]; isOk {
+ g.EditExamLevelInfoRongXin(info[290], info[291], val)
+ }
+ if val, isOk := meritsYear[1]; isOk {
+ g.EditExamLevelInfoRongXin(info[292], info[293], val)
+ }
+ if val, isOk := meritsYear[2]; isOk {
+ g.EditExamLevelInfoRongXin(info[294], info[299], val)
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-20 11:32:26
+@ 功能: 集团外部工作经历
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) ExtWorkExpOfTheGroupRx(info map[int]string) {
+ defer synPros.Done()
+ var workList []models.WorkHistory
+ err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&workList).Error
+ if err != nil || len(workList) < 1 { //没有记录进行新增
+ if info[224] != "" { //集团外工作经历1
+ g.ExternalWorkGroupLog(info[224], info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235], info[236])
+ }
+ if info[237] != "" { //集团外工作经历2
+ g.ExternalWorkGroupLog(info[237], info[238], info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248], info[249])
+ }
+ if info[250] != "" { //集团外工作经历3
+ g.ExternalWorkGroupLog(info[250], info[251], info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261], info[262])
+ }
+ if info[263] != "" { //集团外工作经历4
+ g.ExternalWorkGroupLog(info[263], info[264], info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274], info[275])
+ }
+ if info[276] != "" { //集团外工作经历5
+ g.ExternalWorkGroupLog(info[276], info[277], info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287], info[288])
+ }
+ } else { //已经存在历史记录了
+ jsonInfo, _ := json.Marshal(workList)
+ overallhandle.WriteLog("del", "删除旧集团外部工作经历数据!", string(jsonInfo))
+ var workGroupLogCont models.WorkHistory
+ workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey})
+ if info[224] != "" { //集团外工作经历1
+ g.ExternalWorkGroupLog(info[224], info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235], info[236])
+ }
+ if info[237] != "" { //集团外工作经历2
+ g.ExternalWorkGroupLog(info[237], info[238], info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248], info[249])
+ }
+ if info[250] != "" { //集团外工作经历3
+ g.ExternalWorkGroupLog(info[250], info[251], info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261], info[262])
+ }
+ if info[263] != "" { //集团外工作经历4
+ g.ExternalWorkGroupLog(info[263], info[264], info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274], info[275])
+ }
+ if info[276] != "" { //集团外工作经历5
+ g.ExternalWorkGroupLog(info[276], info[277], info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287], info[288])
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-20 11:23:58
+@ 功能: 集团内成长经历
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) GrowthExpWitTheGroupRx(info map[int]string, orgId string) {
+ defer synPros.Done()
+ var growInGroup []models.InsideWorkHistory
+ err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&growInGroup).Error
+ if err != nil || len(growInGroup) < 1 {
+ //没有集团经历,那么进行新增
+ if info[93] != "" { //集团内工作经历1
+ g.EditGroupInWorkLog(info[93], info[94], info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104], info[105], orgId)
+ }
+ if info[106] != "" { //集团内工作经历2
+ g.EditGroupInWorkLog(info[106], info[107], info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117], info[118], orgId)
+ }
+ if info[119] != "" { //集团内工作经历3
+ g.EditGroupInWorkLog(info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130], info[131], orgId)
+ }
+ if info[132] != "" { //集团内工作经历4
+ g.EditGroupInWorkLog(info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143], info[144], orgId)
+ }
+ if info[145] != "" { //集团内工作经历5
+ g.EditGroupInWorkLog(info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156], info[157], orgId)
+ }
+ if info[158] != "" { //集团内工作经历6
+ g.EditGroupInWorkLog(info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169], info[170], orgId)
+ }
+ if info[171] != "" { //集团内工作经历7
+ g.EditGroupInWorkLog(info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], info[183], orgId)
+ }
+ if info[184] != "" { //集团内工作经历8
+ g.EditGroupInWorkLog(info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], info[196], orgId)
+ }
+ if info[197] != "" { //集团内工作经历9
+ g.EditGroupInWorkLog(info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], info[209], orgId)
+ }
+ if info[210] != "" { //集团内工作经历10
+ g.EditGroupInWorkLog(info[210], info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], info[222], orgId)
+ }
+ } else {
+ //有集团经历,那么删除旧的经历再新增
+ jsonInfo, _ := json.Marshal(growInGroup)
+ overallhandle.WriteLog("del", "删除旧集团内部经历数据!", string(jsonInfo))
+ var workGroupLogCont models.InsideWorkHistory
+ workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey})
+ if info[93] != "" { //集团内工作经历1
+ g.EditGroupInWorkLog(info[93], info[94], info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104], info[105], orgId)
+ }
+ if info[106] != "" { //集团内工作经历2
+ g.EditGroupInWorkLog(info[106], info[107], info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117], info[118], orgId)
+ }
+ if info[119] != "" { //集团内工作经历3
+ g.EditGroupInWorkLog(info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130], info[131], orgId)
+ }
+ if info[132] != "" { //集团内工作经历4
+ g.EditGroupInWorkLog(info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143], info[144], orgId)
+ }
+ if info[145] != "" { //集团内工作经历5
+ g.EditGroupInWorkLog(info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156], info[157], orgId)
+ }
+ if info[158] != "" { //集团内工作经历6
+ g.EditGroupInWorkLog(info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169], info[170], orgId)
+ }
+ if info[171] != "" { //集团内工作经历7
+ g.EditGroupInWorkLog(info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], info[183], orgId)
+ }
+ if info[184] != "" { //集团内工作经历8
+ g.EditGroupInWorkLog(info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], info[196], orgId)
+ }
+ if info[197] != "" { //集团内工作经历9
+ g.EditGroupInWorkLog(info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], info[209], orgId)
+ }
+ if info[210] != "" { //集团内工作经历10
+ g.EditGroupInWorkLog(info[210], info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], info[222], orgId)
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-20 11:13:08
+@ 功能: 家庭成员
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) FamilyMembersRx(info map[int]string) {
+ defer synPros.Done()
+ var familyAry []models.FamilyMembers
+ err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&familyAry).Error
+ if err != nil || len(familyAry) < 1 { //不存在,新增
+ if info[60] != "" && info[61] != "" {
+ g.EditFamilyInfo(info[60], info[61], info[62], info[63], info[64], "否")
+ }
+ if info[65] != "" && info[66] != "" {
+ g.EditFamilyInfo(info[65], info[66], info[67], info[68], info[69], "否")
+ }
+ if info[70] != "" && info[71] != "" {
+ g.EditFamilyInfo(info[70], info[71], info[72], info[73], info[74], "否")
+ }
+ if info[75] != "" && info[76] != "" {
+ g.EditFamilyInfo(info[75], info[76], info[77], info[78], info[79], "否")
+ }
+ if info[80] != "" && info[81] != "" {
+ g.EditFamilyInfo(info[80], info[81], info[82], info[83], info[84], "否")
+ }
+ } else { //存在,删除旧数据后,再新增
+ jsonInfo, _ := json.Marshal(familyAry)
+ overallhandle.WriteLog("del", "删除旧家庭成员数据!", string(jsonInfo))
+ var familyCont models.FamilyMembers
+ familyCont.DelCont(map[string]interface{}{"`key`": g.UserKey})
+ if info[60] != "" && info[61] != "" {
+ g.EditFamilyInfo(info[60], info[61], info[62], info[63], info[64], "否")
+ }
+ if info[65] != "" && info[66] != "" {
+ g.EditFamilyInfo(info[65], info[66], info[67], info[68], info[69], "否")
+ }
+ if info[70] != "" && info[71] != "" {
+ g.EditFamilyInfo(info[70], info[71], info[72], info[73], info[74], "否")
+ }
+ if info[75] != "" && info[76] != "" {
+ g.EditFamilyInfo(info[75], info[76], info[77], info[78], info[79], "否")
+ }
+ if info[80] != "" && info[81] != "" {
+ g.EditFamilyInfo(info[80], info[81], info[82], info[83], info[84], "否")
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-20 11:05:13
+@ 功能:
+@ 参数
+
+ #info 电子表格信息
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) EditEducationInfoRx(info map[int]string) {
+ defer synPros.Done()
+ var mySchoolLog []models.PersonnelEducation
+ err := overall.CONSTANT_DB_HR.Model(&models.PersonnelEducation{}).Where("`key` = ?", g.UserKey).Find(&mySchoolLog).Error
+ if err != nil || len(mySchoolLog) < 1 { //不存在,新增
+ if info[35] != "" || info[37] != "" { //第一学历
+ g.AddOneSchollLog(info[35], info[36], "", info[37], "", "", info[38], info[39], info[40], 2)
+ }
+ if info[41] != "" || info[43] != "" { //最高学历
+ g.AddOneSchollLog(info[41], info[42], "", info[43], "", "", info[44], info[45], info[46], 3)
+ }
+ if info[47] != "" || info[49] != "" { //其他学历
+ g.AddOneSchollLog(info[47], info[48], "", info[49], "", "", info[50], info[51], info[52], 1)
+ }
+ if info[53] != "" || info[55] != "" { //其他学历
+ g.AddOneSchollLog(info[53], info[54], "", info[55], "", "", info[56], info[57], info[58], 1)
+ }
+ } else {
+ //存在,删除旧的,再新增
+ jsonInfo, _ := json.Marshal(mySchoolLog)
+ overallhandle.WriteLog("del", "删除旧集团外部工作经历数据!", string(jsonInfo))
+ var delScho models.PersonnelEducation
+ delScho.DelCont(map[string]interface{}{"`key`": g.UserKey})
+ if info[35] != "" || info[37] != "" { //第一学历
+ g.AddOneSchollLog(info[35], info[36], "", info[37], "", "", info[38], info[39], info[40], 2)
+ }
+ if info[41] != "" || info[43] != "" { //最高学历
+ g.AddOneSchollLog(info[41], info[42], "", info[43], "", "", info[44], info[45], info[46], 3)
+ }
+ if info[47] != "" || info[49] != "" { //其他学历
+ g.AddOneSchollLog(info[47], info[48], "", info[49], "", "", info[50], info[51], info[52], 1)
+ }
+ if info[53] != "" || info[55] != "" { //其他学历
+ g.AddOneSchollLog(info[53], info[54], "", info[55], "", "", info[56], info[57], info[58], 1)
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-20 10:39:34
+@ 功能: 政治面貌
+@ 参数
+
+ #info 电子表格信息
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) PoliticalOutlookEditRx(info map[int]string) {
+ defer synPros.Done()
+ if info[331] != "" {
+ var polOutInfo models.PoliticalIdentity
+ err := polOutInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey})
+ if err != nil { //不存在,新增
+ polOutInfo.Userkey = g.UserKey //员工唯一识别符;"`
+ polOutInfo.PoliticalOutlook = politiToInt(info[331]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
+ if info[332] != "" {
+ polOutInfo.JoinTime = overallhandle.ExcelDateToDate(info[332]).Unix() //加入时间"`
+ }
+ polOutInfo.Branch = info[333] //所在党支部"`
+ polOutInfo.Bosition = info[334] //党内职务"`
+ polOutInfo.Time = time.Now().Unix() //创建时间"`
+ overall.CONSTANT_DB_HR.Create(&polOutInfo)
+ } else {
+ //存在,编辑内容
+ editCont := overallhandle.MapOut()
+ if info[331] != "" {
+ poloutName := politiToInt(info[331])
+ if poloutName != polOutInfo.PoliticalOutlook {
+ editCont["`political_outlook`"] = poloutName
+ }
+ }
+ if info[332] != "" {
+ joinTimeVal := overallhandle.ExcelDateToDate(info[332]).Unix()
+ if joinTimeVal != polOutInfo.JoinTime {
+ editCont["`joinTime`"] = joinTimeVal
+ }
+ }
+ if info[333] != "" && info[333] != polOutInfo.Branch {
+ editCont["`branch`"] = info[333]
+ }
+ if info[334] != "" && info[334] != polOutInfo.Bosition {
+ editCont["`position`"] = info[334]
+ }
+ if len(editCont) > 0 {
+ editCont["`time`"] = time.Now().Unix()
+ polOutInfo.EiteCont(map[string]interface{}{"`userkey`": g.UserKey}, editCont)
+ }
+ }
+ } else {
+ var polOutInfo models.PoliticalIdentity
+ polOutInfo.DelCont(map[string]interface{}{"`userkey`": g.UserKey})
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-20 09:13:44
+@ 功能:人员信息副本(荣信)
+@ 参数
+
+ #info 电子表格信息
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) AuxiliaryTableUserRx(info map[int]string) {
+ defer synPros.Done()
+ var myInfo models.PersonnelContent
+ err := myInfo.GetCont(map[string]interface{}{"`key`": g.UserKey}, "`number`")
+ if err != nil { //附属内容不存在,进行新增。
+ myInfo.Key = g.UserKey //Key"`
+ myInfo.Number = g.UserNum //员工工号;index"`
+ myInfo.Idcardno = info[25] //身份证号
+ myInfo.Mobilephone = info[30] //手机号码"`
+ myInfo.Email = info[34] //电子邮件"`
+ myInfo.Gender = genderToInt(info[12]) //性别(1:男性;2:女性;3:中性)"`
+ if info[13] != "" {
+ myInfo.Birthday = overallhandle.ExcelDateToDate(info[13]).Unix() //生日"`
+ }
+ myInfo.Myfolk = info[15] //民族"`
+ myInfo.Nativeplace = info[21] //籍贯"`
+ if info[26] != "" {
+ myInfo.Idcardstartdate = overallhandle.ExcelDateToDate(info[26]).Unix() //身份证有效期开始"`
+ }
+ if info[27] != "" {
+ myInfo.Idcardenddate = overallhandle.ExcelDateToDate(info[27]).Unix() //身份证有效期结束"`
+ }
+ myInfo.Idcardaddress = info[29] //身份证地址"`
+ myInfo.Health = healthToInt(info[17]) //健康状况(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废)"`
+ myInfo.Maritalstatus = maritalstatusToInt(info[16]) //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异)"`
+ myInfo.Currentresidence = info[20] //现居住地址"`
+ myInfo.Time = time.Now().Unix() //创建时间"`
+ myInfo.Constellation = consteToInt(info[23]) //星座(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座)"`
+ if info[85] == "是" {
+ myInfo.Isdoubleworker = 1 //是否双职工(1:是;2:否)"`
+ g.WorkingCoupleRx(info, true)
+ } else {
+ myInfo.Isdoubleworker = 2 //是否双职工(1:是;2:否)"`
+ g.WorkingCoupleRx(info, false)
+ }
+ if info[300] != "" {
+ myInfo.Jobstartdate = overallhandle.ExcelDateToDate(info[300]).Unix() //参加工作日期"`
+ }
+ if info[302] != "" {
+ myInfo.Entrydate = overallhandle.ExcelDateToDate(info[302]).Unix() //入职日期"`
+ }
+ if info[18] != "" {
+ myInfo.PoliticalOutlook = politiToInt(info[18]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
+ }
+ // if info[18] != "" {
+ // myInfo.PoliticalOutlook = politiToInt(info[18]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
+ // }
+ myInfo.MaritalstatusCn = info[16] //婚姻状况汉字说明"`
+ myInfo.ConstellationingCn = info[23] //星座汉字说明"`
+ myInfo.PoliticalOutlookCn = info[18] //政治面貌汉字说明"`
+ myInfo.HealthCn = info[17] //健康状况中文说明"`
+ myInfo.CareerPlanning = info[297] //职业生涯规划"`
+ myInfo.HelpObtained = info[298] //个人期望从组织获得的帮助"`
+ myInfo.Hobby = info[24] //爱好"`
+ myInfo.DomicileType = info[19] //户籍类型
+ if info[28] == "是" {
+ myInfo.IdCardnoLongTerm = 1 //身份证是否长期有效(1:是;2:否)
+
+ } else {
+ myInfo.IdCardnoLongTerm = 2 //身份证是否长期有效(1:是;2:否)
+
+ }
+ myInfo.MobileShortNumber = info[31] //手机小号
+ myInfo.Channel = JoinJobChanel(info[299]) //入职渠道(1:社会招聘;2:校园招聘;3:内部推荐)
+ myInfo.BloodType = info[22] //血型
+ overall.CONSTANT_DB_HR.Create(&myInfo)
+ } else { //附属内容存在,进行编辑。
+ editCont := overallhandle.MapOut()
+ editCont["`idcardno`"] = info[25] //身份证号
+ editCont["`mobilephone`"] = info[30] //电话号码
+ editCont["`email`"] = info[34] //邮箱
+ editCont["`gender`"] = genderToInt(info[12]) //性别
+ if info[13] != "" {
+ editCont["`birthday`"] = overallhandle.ExcelDateToDate(info[13]).Unix()
+ }
+ editCont["`myfolk`"] = info[15]
+ editCont["`nativeplace`"] = info[21] //籍贯
+ if info[26] != "" {
+ editCont["`idcardstartdate`"] = overallhandle.ExcelDateToDate(info[26]).Unix()
+ }
+ if info[27] != "" {
+ editCont["`idcardenddate`"] = overallhandle.ExcelDateToDate(info[27]).Unix()
+ }
+ editCont["`idcardaddress`"] = info[29] //身份证地址
+ editCont["`health`"] = healthToInt(info[17]) //健康状况
+ editCont["`maritalstatus`"] = maritalstatusToInt(info[16]) //婚姻
+ editCont["`currentresidence`"] = info[20] //现居住地址
+ editCont["`constellationing`"] = consteToInt(info[23]) //星座
+ if info[85] == "是" {
+ editCont["`isdoubleworker`"] = 1 //是否双职工(1:是;2:否)"`
+ g.WorkingCoupleRx(info, true)
+ } else {
+ editCont["`isdoubleworker`"] = 2 //是否双职工(1:是;2:否)"`
+ g.WorkingCoupleRx(info, false)
+ }
+ if info[300] != "" {
+ editCont["`jobstartdate`"] = overallhandle.ExcelDateToDate(info[303]).Unix()
+ }
+ if info[302] != "" {
+ editCont["`entrydate`"] = overallhandle.ExcelDateToDate(info[305]).Unix()
+ }
+ if info[18] != "" {
+ editCont["`political_outlook`"] = politiToInt(info[18])
+ }
+ editCont["`maritalstatus_cn`"] = info[16]
+ editCont["`constellationing_cn`"] = info[23]
+ editCont["`political_outlook_cn`"] = info[18]
+ editCont["`health_cn`"] = info[17]
+ editCont["`career_planning`"] = info[297]
+ editCont["`help_obtained`"] = info[298]
+ editCont["`hobby`"] = info[24]
+ editCont["`domicile_type`"] = info[19]
+ if info[28] == "是" {
+ editCont["`idCardnoLongTerm`"] = 1 //身份证是否长期有效(1:是;2:否)
+ } else {
+ editCont["`idCardnoLongTerm`"] = 2 //身份证是否长期有效(1:是;2:否)
+ }
+ editCont["`mobileShortNumber`"] = info[31]
+ editCont["`channel`"] = JoinJobChanel(info[299])
+ editCont["`bloodType`"] = info[22]
+ editCont["`time`"] = time.Now().Unix()
+ myInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editCont)
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 08:47:04
+@ 功能: 双职工处理
+@ 参数
+
+ #info 表单内容
+ #isTrue 是否为双职工
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) WorkingCoupleRx(info map[int]string, isTrue bool) {
+ var doubleWorkMan []models.DoubleWorker
+ overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&doubleWorkMan) //获取旧数据
+ if isTrue {
+ if len(doubleWorkMan) < 1 { //无记录,新增
+ NewAddDoubleWorkRx(g.UserKey, g.UserNum, info)
+ } else {
+ oldId := int64(0)
+ for _, v := range doubleWorkMan {
+ if v.Name == info[86] {
+ oldId = v.Id
+ }
+ }
+ if oldId != 0 { //存在,数据编辑
+ editInfo := overallhandle.MapOut()
+ editInfo["`name`"] = info[86]
+ editInfo["`company`"] = info[87]
+ editInfo["`department`"] = info[88]
+ editInfo["`position`"] = info[90]
+ editInfo["`workPosit`"] = info[90]
+ editInfo["`workUnit`"] = info[89]
+ // editInfo["`levele`"] = info[89]
+ if info[91] != "" {
+ editInfo["`joinTime`"] = overallhandle.ExcelDateToDate(info[94]).Unix()
+ }
+
+ editInfo["`tel`"] = info[92]
+ editInfo["`time`"] = time.Now().Unix()
+ editInfo["`state`"] = 1
+ var editCont models.DoubleWorker
+ editCont.EiteCont(map[string]interface{}{"`id`": oldId}, editInfo)
+ } else {
+ NewAddDoubleWorkRx(g.UserKey, g.UserNum, info)
+ }
+ }
+ } else { //不是双职工,软删除老数据
+ if len(doubleWorkMan) > 0 {
+ var delDoubleWork models.DoubleWorker
+ delDoubleWork.EiteCont(map[string]interface{}{"`key`": g.UserKey}, map[string]interface{}{"`state`": 3})
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-27 09:25:01
+@ 功能: 新增双职工(荣信模版)
+@ 参数
+
+ #userKey 人员KEY
+ #userNum 人员工号
+ #info 电子表格信息
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func NewAddDoubleWorkRx(userKey int64, userNum string, info map[int]string) {
+ var inSetInfo models.DoubleWorker
+ inSetInfo.Key = userKey //
+ inSetInfo.Number = userNum //"`
+ inSetInfo.Name = info[86] //姓名"`
+ inSetInfo.Company = info[87] //所在公司"`
+ inSetInfo.Department = info[88] //所在部门"`
+ inSetInfo.Position = info[90] //所在岗位"`
+ inSetInfo.WorkUnit = info[89]
+ inSetInfo.WorkPosit = info[90]
+
+ // inSetInfo.Levele = info[89]
+ if info[91] != "" {
+ inSetInfo.JoinTime = overallhandle.ExcelDateToDate(info[94]).Unix()
+ }
+ inSetInfo.Tel = info[92] //联系方式"`
+ inSetInfo.Time = time.Now().Unix() //创建时间"`
+ inSetInfo.State = 1 //状态(1:启用;2:禁用;3:删除)`
+ overall.CONSTANT_DB_HR.Create(&inSetInfo)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-05 09:50:36
+@ 功能: 行政组织变动
+@ 参数
+
+ #company 公司
+ #firstDepartment 第一部门
+ #secondaryDepartment 第二部门
+ #workshop 工段
+ #notes 备注
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GroupParsingData) OrgChannelInfoRx(company, sunCompany, firstDepartment, secondaryDepartment, workshop, notes string) {
+ defer synPros.Done()
+ var orgChangeInfo []models.OrgChangeRecord
+ overall.CONSTANT_DB_HR.Model(&models.OrgChangeRecord{}).Where("`userKey` = ?", g.UserKey).Find(&orgChangeInfo)
+ if len(orgChangeInfo) > 0 {
+ var comId int64
+ var firstDepId int64
+ var secDepId int64
+ var workspId int64
+ var allOrgId []int64
+ //公司
+ if company != "" {
+ var comOrg models.AdministrativeOrganization
+ comOrg.GetCont(map[string]interface{}{"`name`": company}, "`id`")
+ if comOrg.Id != 0 {
+ if sunCompany != "" { //判断子公司
+ var sunComOrg models.AdministrativeOrganization
+ sunComOrg.GetCont(map[string]interface{}{"`name`": sunCompany, "`superior`": comOrg.Id}, "`id`")
+ if sunComOrg.Id != 0 {
+ comId = sunComOrg.Id //入职公司"`
+ } else {
+ comId = comOrg.Id //入职公司"`
+ }
+ } else {
+ comId = comOrg.Id //入职公司"`
+ }
+ var sunOrg overallhandle.GetOrgAllParent
+ sunOrg.GetGCSOrgSonAllId(comId)
+ sunOrg.Id = append(sunOrg.Id, comId)
+ allOrgId = sunOrg.Id
+ }
+
+ }
+ if firstDepartment != "" {
+ if len(allOrgId) > 0 {
+ mastOrg := GetMyOrgSunId(firstDepartment, allOrgId)
+ if mastOrg != 0 {
+ firstDepId = mastOrg //主部门"`
+ }
+ }
+
+ }
+ if secondaryDepartment != "" {
+ if len(allOrgId) > 0 {
+ suntOrg := GetMyOrgSunId(secondaryDepartment, allOrgId)
+ if suntOrg != 0 {
+ secDepId = suntOrg //二级主部门"`
+ }
+ }
+ }
+ if workshop != "" {
+ if len(allOrgId) > 0 {
+ postOrg := GetMyOrgSunId(workshop, allOrgId)
+ if postOrg != 0 {
+ workspId = postOrg //二级主部门"`
+ }
+ }
+ }
+ isEdit := true
+ for _, v := range orgChangeInfo {
+ if v.CompanyCn == company {
+ if v.FirstDepartment != firstDepartment {
+ if v.SecondaryDepartment != secondaryDepartment {
+ if v.WorkShop != workshop {
+ isEdit = false
+ break
+ }
+ }
+ }
+ }
+ }
+ if isEdit {
+ var inSetInfo models.OrgChangeRecord
+ inSetInfo.Userkey = g.UserKey
+ inSetInfo.CompanyCn = company
+ inSetInfo.FirstDepartment = firstDepartment
+ inSetInfo.SecondaryDepartment = secondaryDepartment
+ inSetInfo.WorkShop = workshop
+ inSetInfo.CompanyId = comId //入职公司"`
+ inSetInfo.FirstDepartmentId = firstDepId //主部门"`
+ inSetInfo.SecondaryDepartmentId = secDepId //二级主部门"`
+ inSetInfo.WorkShopid = workspId //二级主部门"`
+ inSetInfo.Time = time.Now().Unix()
+ inSetInfo.Notes = "表格导入信息行政组织调动"
+ overall.CONSTANT_DB_HR.Create(&inSetInfo)
+ }
+ } else {
+ var inSetInfo models.OrgChangeRecord
+ inSetInfo.Userkey = g.UserKey
+ inSetInfo.CompanyCn = company
+ inSetInfo.FirstDepartment = firstDepartment
+ inSetInfo.SecondaryDepartment = secondaryDepartment
+ inSetInfo.WorkShop = workshop
+
+ var allOrgId []int64
+ //公司
+ if company != "" {
+ var comOrg models.AdministrativeOrganization
+ comOrg.GetCont(map[string]interface{}{"`name`": company}, "`id`")
+ if comOrg.Id != 0 {
+
+ var sunOrg overallhandle.GetOrgAllParent
+
+ if sunCompany != "" { //判断子公司
+ var sunComOrg models.AdministrativeOrganization
+ sunComOrg.GetCont(map[string]interface{}{"`name`": sunCompany, "`superior`": comOrg.Id}, "`id`")
+ if sunComOrg.Id != 0 {
+ inSetInfo.CompanyId = sunComOrg.Id //入职公司"`
+ sunOrg.GetGCSOrgSonAllId(sunComOrg.Id)
+ sunOrg.Id = append(sunOrg.Id, sunComOrg.Id)
+ } else {
+ inSetInfo.CompanyId = comOrg.Id //入职公司"`
+ sunOrg.GetGCSOrgSonAllId(comOrg.Id)
+ sunOrg.Id = append(sunOrg.Id, comOrg.Id)
+ }
+ } else {
+ inSetInfo.CompanyId = comOrg.Id //入职公司"`
+ sunOrg.GetGCSOrgSonAllId(comOrg.Id)
+ sunOrg.Id = append(sunOrg.Id, comOrg.Id)
+ }
+ allOrgId = sunOrg.Id
+ }
+
+ }
+ if firstDepartment != "" {
+ if len(allOrgId) > 0 {
+ mastOrg := GetMyOrgSunId(firstDepartment, allOrgId)
+ if mastOrg != 0 {
+ inSetInfo.FirstDepartmentId = mastOrg //主部门"`
+ }
+ }
+
+ }
+ if secondaryDepartment != "" {
+ if len(allOrgId) > 0 {
+ suntOrg := GetMyOrgSunId(secondaryDepartment, allOrgId)
+ if suntOrg != 0 {
+ inSetInfo.SecondaryDepartmentId = suntOrg //二级主部门"`
+ }
+ }
+ }
+ if workshop != "" {
+ if len(allOrgId) > 0 {
+ postOrg := GetMyOrgSunId(workshop, allOrgId)
+ if postOrg != 0 {
+ inSetInfo.WorkShopid = postOrg //二级主部门"`
+ }
+ }
+ }
+ inSetInfo.Time = time.Now().Unix()
+ inSetInfo.Notes = "初始化表格导入信息"
+ overall.CONSTANT_DB_HR.Create(&inSetInfo)
+ }
+}
diff --git a/api/version1/personnelapi/controll.go b/api/version1/personnelapi/controll.go
index 35bca08..56db45d 100644
--- a/api/version1/personnelapi/controll.go
+++ b/api/version1/personnelapi/controll.go
@@ -1,5 +1,16 @@
package personnelapi
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+ "hr_server/models"
+ "hr_server/models/workgroup"
+ "hr_server/overall"
+ "hr_server/overall/overallhandle"
+ "strconv"
+)
+
//用工关系转换
//1:实习生;2:待分配;3:试用员工;4:正式员工;5:停薪留职;6:退休;7:辞退;8:离职
@@ -44,8 +55,8 @@ func EmptypeToInt(emp string) int {
}
}
-//雇佣类型转换
-//雇佣类型(1:雇佣入职;2:再入职;3:返聘)
+// 雇佣类型转换
+// 雇佣类型(1:雇佣入职;2:再入职;3:返聘)
func hireTypeToInt(hir string) int {
switch hir {
case "雇佣入职":
@@ -101,6 +112,8 @@ func consteToInt(emp string) int {
return 6
case "天枰座":
return 7
+ case "天秤座":
+ return 7
case "天蝎座":
return 8
case "射手座":
@@ -375,11 +388,11 @@ func ducationToInt(emp string) int {
case "专家、教授":
return 12
default:
- return 1
+ return 0
}
}
-//学位(0:无;1:学士;2:硕士;3:博士;4:工学学士;5:教育学学位)int
+// 学位(0:无;1:学士;2:硕士;3:博士;4:工学学士;5:教育学学位)int
func hestacademicdegreeToInt(hir string) int {
switch hir {
case "学士":
@@ -434,7 +447,7 @@ func EmptypeToStr(emp int) string {
}
}
-//雇佣类型(1:社会招聘;2:校园招聘;3:内部推荐)
+// 雇佣类型(1:社会招聘;2:校园招聘;3:内部推荐)
func JoinJobChanel(hir string) int {
switch hir {
case "校园招聘":
@@ -461,6 +474,28 @@ func EducationTypeStr(level string) int {
return 5
case "函授学历":
return 6
+ case "双一流院校":
+ return 7
+ case "“985”工程院校":
+ return 9
+ case "“211”工程院校":
+ return 8
+ case "公办本科院校":
+ return 10
+ case "民办本科院校":
+ return 11
+ case "公办专科院校":
+ return 12
+ case "民办专科院校":
+ return 13
+ case "高职院校":
+ return 14
+ case "中职院校":
+ return 15
+ case "公立中学":
+ return 16
+ case "私立中学":
+ return 17
default:
return 0
}
@@ -550,8 +585,12 @@ func SchoolTypeStr(level string) int {
typeName = 7
case "”211“工程院校":
typeName = 8
- case "”985“工程院校":
+ case "“211“工程院校":
typeName = 8
+ case "”985“工程院校":
+ typeName = 9
+ case "“985”工程院校":
+ typeName = 9
case "双一流院校":
typeName = 10
default:
@@ -559,3 +598,204 @@ func SchoolTypeStr(level string) int {
}
return typeName
}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2025-01-16 16:26:39
+@ 功能: 确定当前行政组织用哪一个轮询规则
+*/
+func CureeRunRules(orgId int64) (rules GenesInfo, cureeOrgId int64, err error) {
+
+ if orgId != 0 {
+ err = rules.GetCont(map[string]interface{}{"`orgId`": orgId})
+ if err != nil || rules.TypeId == 0 {
+ var supaerOrgId models.AdministrativeOrganization
+ supaerOrgId.GetCont(map[string]interface{}{"`id`": orgId}, "`superior`")
+ if supaerOrgId.Superior != 0 {
+ return CureeRunRules(supaerOrgId.Superior)
+ }
+ } else {
+ cureeOrgId = orgId
+ }
+ } else {
+ err = errors.New("没有相关设定")
+ }
+ return
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2025-01-30 13:38:44
+@ 功能: 计算行政组织某一天执行得班组
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (g *GenesInfo) CountOrgTeamsIsDay(dats string) (teamIsDay []workgroup.TeamsRules, err error) {
+ //获取源点起始工作时间段
+ g.BegainTime = overallhandle.UnixTimeToDay(g.StartTime, 14)
+ g.TypeIdStr = strconv.FormatInt(g.TypeId, 10)
+ //获取倒班规则
+ var paiBanType workgroup.WorkTimeType
+ paiBanType.GetCont(map[string]interface{}{"`id`": g.TypeId}, " `name`")
+ g.TypeName = paiBanType.Name
+ //作息时间
+ var zuoXiTime []workgroup.WorkingTimePeriod
+ overall.CONSTANT_DB_HR.Where("`state` = 1 AND `type_id` = ?", g.TypeId).Order("`sort` ASC").Find(&zuoXiTime)
+ //轮询规则
+
+ var lunXunShiXu []workgroup.TeamsRules
+ overall.CONSTANT_DB_HR.Where("`ruleTypeId` = ?", g.TypeId).Find(&lunXunShiXu)
+ if len(zuoXiTime) < 1 || len(lunXunShiXu) < 1 {
+ return teamIsDay, errors.New("此行政组织还未设定班组轮询规则! *struct类型,却传入*")
+ }
+ var canyuTeams []int64
+ cycle := 1
+ for _, v := range lunXunShiXu {
+ cycle = v.Cycle
+ if !overallhandle.IsInTrue(v.TeamsId, canyuTeams) {
+ canyuTeams = append(canyuTeams, v.TeamsId)
+ }
+ }
+ teamsMap := make(map[int64][]workgroup.TeamsRules)
+ for _, v := range canyuTeams {
+ var teamRuleAry []workgroup.TeamsRules
+ for _, mv := range lunXunShiXu {
+ if v == mv.TeamsId {
+ teamRuleAry = append(teamRuleAry, mv)
+ }
+ }
+ teamsMap[v] = teamRuleAry
+ }
+
+ var wvTimeAll overallhandle.DateTimeTotimes
+ wvTimeAll.BaisStrToTime(dats)
+
+ fmt.Printf("daysApart------------->:%v\n%v\n%v\n", dats, wvTimeAll.AllTime, wvTimeAll)
+
+ var qiyuanTime overallhandle.DateTimeTotimes
+ qiyuanTime.BaisStrToTime(g.BegainTime)
+
+ // yearIntQy, _ := strconv.Atoi(qiyuanTime.Years)
+ // monthIntQy, _ := strconv.Atoi(qiyuanTime.Months)
+ // daysIntQy, _ := strconv.Atoi(qiyuanTime.Days)
+ // zhouJiQiyuan := overallhandle.ZellerFunction2Week(yearIntQy, monthIntQy, daysIntQy)
+
+ switch cycle {
+ case 2: //按周
+ yearInt, _ := strconv.Atoi(wvTimeAll.Years)
+ monthInt, _ := strconv.Atoi(wvTimeAll.Months)
+ daysInt, _ := strconv.Atoi(wvTimeAll.Days)
+ zhouJi := overallhandle.ZellerFunction2Week(yearInt, monthInt, daysInt)
+ key := 0
+ if zhouJi-1 > 0 {
+ if zhouJi-1 > len(lunXunShiXu) {
+ key = len(lunXunShiXu) - 1
+ } else {
+ key = zhouJi - 1
+ }
+
+ } else {
+ key = 0
+ }
+ banZuAry := lunXunShiXu[key]
+ teamIsDay = append(teamIsDay, banZuAry)
+ default:
+ daysApart := ((wvTimeAll.AllTime - qiyuanTime.AllTime) / 86400) + 1
+ // jsontime, _ := json.Marshal(g)
+ fmt.Printf("daysApart:%v\n%v\n%v\n%v\n", dats, daysApart, wvTimeAll.AllTime, qiyuanTime.AllTime)
+ if daysApart >= 0 {
+ for i, v := range teamsMap {
+ ruleLen := len(v)
+ var ruleStep int64 = 1
+ if daysApart > int64(ruleLen) {
+
+ ruleStep = int64(daysApart) % int64(ruleLen)
+ if ruleStep == 0 {
+ ruleStep = int64(ruleLen)
+ }
+ } else {
+ ruleStep = int64(daysApart)
+ }
+
+ for _, lv := range lunXunShiXu {
+
+ if lv.CycleSort == ruleStep && lv.TeamsId == i && lv.CycleWorkTime != 0 {
+ // cycleInfo = v
+ lvJson, _ := json.Marshal(lv)
+ fmt.Printf("\n\nlv---------i:%v----ruleStep:%v-------->%v\n\n", i, ruleStep, string(lvJson))
+ teamIsDay = append(teamIsDay, lv)
+ }
+
+ }
+ }
+ }
+
+ // daysApart, _ := overallhandle.CalculateYearDifference(g.StartTime, wvTimeAll.AllTime, 1)
+ // sjc := ((wvTimeAll.AllTime - g.StartTime) / 86400) + 1
+ // fmt.Printf("\n\n\n\n相差几天%v------------------->%v\n\n\n\n", daysApart, sjc)
+ // xiangcha := (7 - zhouJiQiyuan)
+ // daysApart = daysApart + float64(xiangcha)
+ // fmt.Printf("\n\n\n\n相差几天%v------------------->%v----------------->%v------------------->%v\n\n\n\n", daysApart, sjc, xiangcha, daysApart)
+ // daysApartInt64, _ := strconv.ParseInt(strconv.FormatFloat(daysApart, 'f', 0, 64), 10, 64)
+ // if daysApart >= 0 {
+ // for _, v := range teamsMap {
+ // ruleLen := len(v)
+ // var ruleStep int64 = 1
+ // if sjc > int64(ruleLen) {
+
+ // ruleStep = int64(sjc) % int64(ruleLen)
+ // if ruleStep == 0 {
+ // ruleStep = int64(ruleLen)
+ // }
+ // } else {
+ // ruleStep = int64(sjc)
+ // }
+
+ // guoDuVal := daysApartInt64 % int64(ruleLen)
+ // // dingwei, _ := strconv.ParseInt(strconv.FormatFloat(math.Ceil(guoDuVal), 'f', 0, 64), 10, 64)
+ // // fmt.Printf("\n\n\n\n相差几天------------>%v\n\n\n\n", dingwei)
+ // val, _ := json.Marshal(v)
+
+ // sort.Slice(v, func(i, j int) bool {
+ // return v[i].CycleSort < v[j].CycleSort
+ // })
+ // fmt.Printf("\n\n\n\n相差几天-----guoDuVal------->%v\n\n------->%v\n\n------->%v\n\n", ruleStep, guoDuVal, string(val))
+ // // keyVal := dingwei + 1
+ // keyVal := guoDuVal
+ // if keyVal < 0 {
+ // keyVal = 0
+ // }
+ // // if v.CycleSort == ruleStep{
+
+ // // }
+ // teamIsDay = append(teamIsDay, v[guoDuVal])
+ // }
+ // } else {
+ // daysApartInt64 = -daysApartInt64
+ // for _, v := range teamsMap {
+ // ruleLen := len(v)
+ // if ruleLen <= 0 {
+ // ruleLen = 1
+ // }
+ // guoDuVal := daysApartInt64 / int64(ruleLen)
+ // // dingwei, _ := strconv.ParseInt(strconv.FormatFloat(math.Ceil(guoDuVal), 'f', 0, 64), 10, 64)
+ // sort.Slice(v, func(i, j int) bool {
+ // return v[i].CycleSort > v[j].CycleSort
+ // })
+ // teamIsDay = append(teamIsDay, v[guoDuVal])
+ // }
+ // }
+ }
+ return teamIsDay, nil
+}
diff --git a/api/version1/personnelapi/export_type.go b/api/version1/personnelapi/export_type.go
index fe8783c..b098414 100644
--- a/api/version1/personnelapi/export_type.go
+++ b/api/version1/personnelapi/export_type.go
@@ -1,12 +1,16 @@
package personnelapi
-import "github.com/gin-gonic/gin"
+import (
+ "hr_server/models"
+
+ "github.com/gin-gonic/gin"
+)
type ExportServer struct {
engine *gin.Engine
}
-//导出人员信息
+// 导出人员信息
type ExportPeopleCont struct {
Number string `json:"number"`
Name string `json:"name"`
@@ -17,3 +21,13 @@ type ExportPeopleCont struct {
Team string `json:"team"`
EmpTypeNAme string `json:"emptype"`
}
+
+type UserOfOrgInfo struct {
+ models.UserOrg
+ Orgallname string `json:"orgallname" gorm:"-"`
+ Postname string `json:"postname" gorm:"-"`
+ Starttimeing string `json:"starttimeing" gorm:"-"`
+}
+type OrgFullName struct {
+ Name string `json:"name"`
+}
diff --git a/api/version1/personnelapi/kingdeecont.go b/api/version1/personnelapi/kingdeecont.go
index 317695e..dfa7308 100644
--- a/api/version1/personnelapi/kingdeecont.go
+++ b/api/version1/personnelapi/kingdeecont.go
@@ -5,6 +5,7 @@ import (
"hr_server/models"
"hr_server/overall"
"hr_server/overall/overallhandle"
+ "strconv"
"strings"
"time"
@@ -55,21 +56,23 @@ func EditWithinGroupWorkLog(manKeyNum int64, contList []insideHistoryer) {
}
//写入员工入职离职时间
EmployeeOnboardingAndResignation(manKeyNum, v.ChangeType, v.StartTime, weiYi)
-
+ var creadCont models.InsideWorkHistory
WorkShop := myCont.SunMainDeparment
if v.Workshop != "" {
var workShopCont models.AdministrativeOrganization
- workShopErr := workShopCont.GetCont(map[string]interface{}{"kingdeeid": v.Workshop}, "id")
+ workShopErr := workShopCont.GetCont(map[string]interface{}{"kingdeeid": v.Workshop}, "`id`", "`name`")
if workShopErr == nil {
WorkShop = workShopCont.Id //部室"`
+ creadCont.Ejbm = workShopCont.Name
}
}
WorkshopSection := myCont.AdminOrg
if v.WorkshopSection != "" {
var workShopSecCont models.AdministrativeOrganization
- workShopSecErr := workShopSecCont.GetCont(map[string]interface{}{"kingdeeid": v.WorkshopSection}, "id")
+ workShopSecErr := workShopSecCont.GetCont(map[string]interface{}{"kingdeeid": v.WorkshopSection}, "`id`", "`name`")
if workShopSecErr == nil {
WorkshopSection = workShopSecCont.Id //工段"`
+ creadCont.Gongduan = workShopSecCont.Name
}
}
var wssCont models.AdministrativeOrganization
@@ -97,20 +100,26 @@ func EditWithinGroupWorkLog(manKeyNum int64, contList []insideHistoryer) {
}
if dempCont.Id == 0 {
dempCont.Id = myCont.MainDeparment
+ } else {
+ creadCont.Yjbm = dempCont.Name
}
//公司
var compayCont models.AdministrativeOrganization
- compayCont.GetCont(map[string]interface{}{"kingdeeid": v.Company}, "id")
+ compayCont.GetCont(map[string]interface{}{"kingdeeid": v.Company}, "`id`", "`name`")
if compayCont.Id == 0 {
compayCont.Id = myCont.Company
+ } else {
+ creadCont.Gsmc = compayCont.Name
}
//职务
var postCont models.Position
- postCont.GetCont(map[string]interface{}{"kingdeeid": v.Position}, "id")
+ postCont.GetCont(map[string]interface{}{"kingdeeid": v.Position}, "`id`", "`name`")
if postCont.Id == 0 {
postCont.Id = myCont.Position
+ } else {
+ creadCont.Zhiwei = postCont.Name
}
- var creadCont models.InsideWorkHistory
+
creadCont.Key = manKeyNum //员工识别符"`
creadCont.Group = groupContes.Id //集团"`
creadCont.Company = compayCont.Id //公司"`
@@ -119,6 +128,7 @@ func EditWithinGroupWorkLog(manKeyNum int64, contList []insideHistoryer) {
creadCont.WorkshopSection = WorkshopSection //工段"`
creadCont.Position = postCont.Id //职位"`
creadCont.GradePositions = v.GradePositions //职等"`
+ creadCont.Dengji = strconv.FormatInt(v.GradePositions, 10)
startTime := time.Now().Unix()
if v.StartTime != "" {
var startTimeErr bool
diff --git a/api/version1/personnelapi/kingdeeempty.go b/api/version1/personnelapi/kingdeeempty.go
index 6c9b631..bcaa63d 100644
--- a/api/version1/personnelapi/kingdeeempty.go
+++ b/api/version1/personnelapi/kingdeeempty.go
@@ -1,11 +1,15 @@
package personnelapi
import (
+ "fmt"
"hr_server/models"
"hr_server/models/hrmodels"
"hr_server/overall"
"hr_server/overall/overallhandle"
+ "strconv"
"time"
+
+ "github.com/gin-gonic/gin"
)
/*
@@ -194,3 +198,207 @@ func GetInsetCommpyTime(userKey int64) (workTime int64) {
overall.CONSTANT_DB_HR.Model(&models.InsideWorkHistory{}).Select("COALESCE(MIN(start_time), 0) AS beginTime").Where("`key` = ?", userKey).Find(&workTime)
return
}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2025-02-11 13:10:16
+@ 功能: 编辑个人行政组织关系
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func SaveUserOfOrg(manKeyNum int64, contList []insideHistoryer) {
+ defer synPro.Done()
+ if len(contList) > 0 && manKeyNum > 0 {
+ //获取个人信息
+ var myCont models.PersonArchives
+ myCont.GetCont(map[string]interface{}{"key": manKeyNum}, "`company`", "`maindeparment`", "`admin_org`", "`sun_main_deparment`", "`position`", "`teamid`")
+
+ creatTime := time.Now().Unix()
+ //批量写入
+ var creadContList []models.UserOrg
+ for _, v := range contList {
+ var timeCont overallhandle.DateTimeTotimes
+ timeCont.BaisStrToTime(v.EndTime)
+
+ if creatTime <= timeCont.AllTime {
+ var adminOrg OrgAndLevel
+ var creadCont models.UserOrg
+ creadCont.Userkey = manKeyNum //mment:员工唯一识别符;"`
+ if v.Company != "" {
+ var orgOne hrmodels.OrgCont
+ orgOne.GetCont(map[string]interface{}{"`kingdeeid`": v.Company}, "`id`", "`level`")
+ creadCont.Company = orgOne.Id //mment:所属公司;"`
+ if adminOrg.Level <= orgOne.Level {
+ adminOrg.Level = orgOne.Level
+ adminOrg.AdminOrg = orgOne.Id
+ }
+ }
+ if v.Department != "" {
+ var orgOneDerp hrmodels.OrgCont
+ orgOneDerp.GetCont(map[string]interface{}{"`kingdeeid`": v.Department}, "`id`", "`level`")
+ if adminOrg.Level <= orgOneDerp.Level {
+ adminOrg.Level = orgOneDerp.Level
+ adminOrg.AdminOrg = orgOneDerp.Id
+ }
+ }
+ if v.Workshop != "" {
+ var orgOneWorks hrmodels.OrgCont
+ orgOneWorks.GetCont(map[string]interface{}{"`kingdeeid`": v.Workshop}, "`id`", "`level`")
+ if adminOrg.Level <= orgOneWorks.Level {
+ adminOrg.Level = orgOneWorks.Level
+ adminOrg.AdminOrg = orgOneWorks.Id
+ }
+ }
+ if v.Group != "" {
+ var orgOneGrop hrmodels.OrgCont
+ orgOneGrop.GetCont(map[string]interface{}{"`kingdeeid`": v.Group}, "`id`", "`level`")
+ if adminOrg.Level <= orgOneGrop.Level {
+ adminOrg.Level = orgOneGrop.Level
+ adminOrg.AdminOrg = orgOneGrop.Id
+ }
+ }
+ creadCont.Orgid = adminOrg.AdminOrg //t:行政组织ID;"`
+ if v.Position != "" {
+ var postInfo models.Position
+ postInfo.GetCont(map[string]interface{}{"`kingdeeid`": v.Position}, "`id`", "`name`")
+ creadCont.Position = postInfo.Id //comment:职位;"`
+ }
+ // creadCont.TeamsId = //mment:班组Id;"`
+ if v.StartTime != "" {
+ var timeCont overallhandle.DateTimeTotimes
+ timeCont.BaisStrToTime(v.StartTime)
+ creadCont.StartTime = timeCont.AllTime
+ }
+ if v.AssignType == "主职" {
+ creadCont.AssignType = 1 //comment:1:主职;2:兼职"`
+ } else {
+ creadCont.AssignType = 2 //comment:1:主职;2:兼职"`
+ }
+ creadCont.Time = creatTime //编辑时间;"`
+ creadContList = append(creadContList, creadCont)
+ }
+
+ }
+ if len(creadContList) > 0 {
+ //1、清空任职记录
+ overall.CONSTANT_DB_HR.Where("`userKey` = ?", manKeyNum).Delete(&models.UserOrg{})
+ overall.CONSTANT_HRSERVER_DATABASE.Where("`userKey` = ?", manKeyNum).Delete(&models.UserOrg{})
+ for _, v := range creadContList {
+ var nId int64
+ overall.CONSTANT_DB_HR.Model(&models.UserOrg{}).Select("`id`").Where("`userKey` = ? AND `company` = ? AND `orgid` = ? AND `position` = ?", manKeyNum, v.Company, v.Orgid, v.Position).First(&nId)
+ if nId == 0 {
+ overall.CONSTANT_DB_HR.Create(&v)
+ }
+ var wId int64
+ overall.CONSTANT_HRSERVER_DATABASE.Model(&models.UserOrg{}).Select("`id`").Where("`userKey` = ? AND `company` = ? AND `orgid` = ? AND `position` = ?", manKeyNum, v.Company, v.Orgid, v.Position).First(&wId)
+ if wId == 0 {
+ overall.CONSTANT_HRSERVER_DATABASE.Create(&v)
+ }
+
+ }
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2025-02-11 14:28:37
+@ 功能: 员工行政组织关系
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) UserAboutOrgListNew(c *gin.Context) {
+ var requestData overallhandle.ConstId
+ err := c.ShouldBindJSON(&requestData)
+ if err != nil {
+ overallhandle.Result(100, err, c)
+ return
+ }
+ sendMap, _ := GetUesrOffice(requestData.Id)
+ overallhandle.Result(0, sendMap, c)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2025-02-11 15:02:59
+@ 功能:获取任职列表
+*/
+func GetUesrOffice(userKey interface{}) (sendMap []map[string]interface{}, err error) {
+ var workHistory []UserOfOrgInfo
+ err = overall.CONSTANT_DB_HR.Where("`userKey` = ?", userKey).Order("`assignType` ASC").Order("`startTime` DESC").Find(&workHistory).Error
+ if err != nil {
+
+ return
+ }
+ // var sendMap []map[string]interface{}
+ for _, v := range workHistory {
+ sendInfo := overallhandle.MapOut()
+ sendInfo["id"] = strconv.FormatInt(v.Id, 10)
+ sendInfo["userKey"] = strconv.FormatInt(v.Userkey, 10)
+ sendInfo["company"] = strconv.FormatInt(v.Company, 10)
+ sendInfo["orgid"] = strconv.FormatInt(v.Orgid, 10)
+ sendInfo["position"] = strconv.FormatInt(v.Position, 10)
+ sendInfo["teamsId"] = strconv.FormatInt(v.TeamsId, 10)
+ sendInfo["startTime"] = strconv.FormatInt(v.StartTime, 10)
+ sendInfo["assigntype"] = v.AssignType
+ if v.Position != 0 {
+ var postInfo models.Position
+ postInfo.GetCont(map[string]interface{}{"`id`": v.Position}, "`name`")
+ sendInfo["postname"] = postInfo.Name
+ }
+ if v.Orgid != 0 {
+ var fullOegName OrgFullName
+ fullOegName.DiGuiOrgName(v.Orgid)
+ sendInfo["orgallname"] = fullOegName.Name
+ }
+ sendInfo["starttimeing"] = overallhandle.UnixTimeToDay(v.StartTime, 4)
+ sendInfo["time"] = overallhandle.UnixTimeToDay(v.Time, 4)
+ sendMap = append(sendMap, sendInfo)
+ }
+ return
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2025-02-11 14:45:11
+@ 功能: 递归获取行政组织名称
+@ 行政组织Id orgId
+*/
+func (o *OrgFullName) DiGuiOrgName(orgId int64) {
+ var orgOneGrop hrmodels.OrgCont
+ orgOneGrop.GetCont(map[string]interface{}{"`id`": orgId}, "`name`", "`superior`", "`level`")
+ if orgOneGrop.Name != "" {
+ if o.Name != "" {
+ o.Name = fmt.Sprintf("%v/%v", orgOneGrop.Name, o.Name)
+ } else {
+ o.Name = fmt.Sprintf(" %v", orgOneGrop.Name)
+ }
+ }
+ if orgOneGrop.Level > 3 {
+ if orgOneGrop.Superior != 0 {
+ o.DiGuiOrgName(orgOneGrop.Superior)
+ }
+ }
+}
diff --git a/api/version1/personnelapi/kingdeenew.go b/api/version1/personnelapi/kingdeenew.go
index 7bebf88..d6076f1 100644
--- a/api/version1/personnelapi/kingdeenew.go
+++ b/api/version1/personnelapi/kingdeenew.go
@@ -44,17 +44,18 @@ func (s *StaffApi) NewKingdee(c *gin.Context) {
// manJson, _ := json.Marshal(manContent)
// fmt.Printf("编辑操作---》%v\n---》%v\n", requestData.Number, string(manJson))
if manErr == nil {
-
+ overallhandle.WriteLog("i", "已经存在!进行变动操作!", string(saveKingDeeJson))
//已经存在!进行变动操作
manErr = eidtAddManContJinDie(manContent, requestData)
- overallhandle.WriteLog("i", "已经存在!进行变动操作!", string(saveKingDeeJson))
+ overallhandle.WriteLog("i", "变动操作完成!", manErr)
} else {
// fmt.Printf("新增操作---》%v\n", manContent.IsShowTrue)
//不存在!进行新增操作
+ overallhandle.WriteLog("i", "不存在!进行新增操作!", manErr, string(saveKingDeeJson))
var oldSchool models.WorkMan
oldSchool.GetCont(map[string]interface{}{"wm_number": requestData.Number})
manErr = newAddManContJinDie(oldSchool, requestData)
- overallhandle.WriteLog("i", "不存在!进行新增操作!", manErr, string(saveKingDeeJson))
+ overallhandle.WriteLog("i", "新增操作完成!", manErr, string(saveKingDeeJson))
}
if manErr != nil {
overallhandle.Result(104, manErr, c)
@@ -97,7 +98,7 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe
}
if manCont.Icon != "" {
newIcon := fmt.Sprintf("data:image/jpeg;base64,%v", strings.Replace(manCont.Icon, "\r\n", "", -1))
- if newIcon != perArcInfo.Icon {
+ if newIcon != perArcInfo.IconPhoto {
eidtManCont["`icon_photo`"] = newIcon
}
@@ -144,7 +145,7 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe
if manCont.Company != "" {
var orgCompany models.AdministrativeOrganization
orgErr := orgCompany.GetCont(map[string]interface{}{"kingdeeid": manCont.Company}, "`id`")
- if orgErr == nil {
+ if orgErr == nil && orgCompany.Id != 0 {
if orgCompany.Id != perArcInfo.Company {
eidtManCont["`company`"] = orgCompany.Id
changeRecordTrue = true
@@ -168,16 +169,34 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe
// manMainCont.AdminOrg = orgMainDepart.Id
if departmentId != perArcInfo.MainDeparment {
- eidtManCont["`company`"] = companyId
- eidtManCont["`maindeparment`"] = departmentId
- eidtManCont["`sun_main_deparment`"] = sunDepartId
+ if companyId != 0 {
+ eidtManCont["`company`"] = companyId
+ }
+ if departmentId != 0 {
+ eidtManCont["`maindeparment`"] = departmentId
+ }
+ if sunDepartId != 0 {
+ eidtManCont["`sun_main_deparment`"] = sunDepartId
+ }
+ if companyId != 0 || departmentId != 0 || sunDepartId != 0 {
+ changeRecordTrue = true
+ }
+ }
+ if orgMainDepart.Id != 0 && orgMainDepart.Id != perArcInfo.AdminOrg {
eidtManCont["`admin_org`"] = orgMainDepart.Id
changeRecordTrue = true
}
- manChangeRecord.Company = companyId
- manChangeRecord.MainDepartment = departmentId
+ if companyId != 0 {
+ manChangeRecord.Company = companyId
+ }
+ if departmentId != 0 {
+ manChangeRecord.MainDepartment = departmentId
+ }
// manChangeRecord.SunMainDeparment = sunDepartId
- manChangeRecord.Adminorg = orgMainDepart.Id
+ if orgMainDepart.Id != 0 {
+ manChangeRecord.Adminorg = orgMainDepart.Id
+ }
+
}
}
//部门
@@ -191,14 +210,17 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe
}
for _, dv := range manCont.Department {
- var orgMainDepartAry models.AdministrativeOrganization
- orgErr := orgMainDepartAry.GetCont(map[string]interface{}{"kingdeeid": dv}, "`id`")
- if orgErr == nil {
- orgIdStr := strconv.FormatInt(orgMainDepartAry.Id, 10)
- if overallhandle.StringIsInMap(orgIdStr, departId) == false {
- departId = append(departId, orgIdStr)
+ if dv != "" || dv != "0" {
+ var orgMainDepartAry models.AdministrativeOrganization
+ orgErr := orgMainDepartAry.GetCont(map[string]interface{}{"kingdeeid": dv}, "`id`")
+ if orgErr == nil && orgMainDepartAry.Id != 0 {
+ orgIdStr := strconv.FormatInt(orgMainDepartAry.Id, 10)
+ if overallhandle.StringIsInMap(orgIdStr, departId) == false {
+ departId = append(departId, orgIdStr)
+ }
}
}
+
}
oldDepart := strings.Split(perArcInfo.Deparment, ",")
chaJiDepart := overallhandle.DifferenceSet[string](departId, oldDepart)
@@ -226,7 +248,7 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe
if manCont.Position != "" {
var positionCont models.Position
positErr := positionCont.GetCont(map[string]interface{}{`kingdeeid`: manCont.Position}, "`id`")
- if positErr == nil {
+ if positErr == nil && positionCont.Id != 0 {
if positionCont.Id != perArcInfo.Position {
eidtManCont["`position`"] = positionCont.Id
changeRecordTrue = true
@@ -238,7 +260,7 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe
if manCont.JobName != "" {
var dutiesCont models.DutiesClassLeve
dutiesErr := dutiesCont.GetCont(map[string]interface{}{"`d_king`": manCont.JobName}, "d_id")
- if dutiesErr == nil {
+ if dutiesErr == nil && dutiesCont.Id != 0 {
if dutiesCont.Id != perArcInfo.Position {
eidtManCont["`job_id`"] = dutiesCont.Id
@@ -261,6 +283,154 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe
manChangeRecord.JobLevel = positionGrade
changeRecordTrue = true
}
+ } else {
+
+ if perArcInfo.ExcelTemplate != 296 {
+ //公司
+ if manCont.Company != "" {
+ var orgCompany models.AdministrativeOrganization
+ orgErr := orgCompany.GetCont(map[string]interface{}{"kingdeeid": manCont.Company}, "`id`")
+ if orgErr == nil && orgCompany.Id != 0 {
+ if orgCompany.Id != perArcInfo.Company {
+ eidtManCont["`company`"] = orgCompany.Id
+ changeRecordTrue = true
+ }
+ manChangeRecord.Company = orgCompany.Id
+ }
+ }
+ //主部门
+ if manCont.MainDepartment != "" {
+ var orgMainDepart models.AdministrativeOrganization
+ orgErr := orgMainDepart.GetCont(map[string]interface{}{"kingdeeid": manCont.MainDepartment}, "`id`")
+ if orgErr == nil {
+
+ _, companyId, departmentId, sunDepartId, _ := overallhandle.GetOrgStructure(orgMainDepart.Id)
+ // if manMainCont.Company == 0 {
+ // manMainCont.Company = companyId
+ // }
+
+ // manMainCont.MainDeparment = departmentId
+ // manMainCont.SunMainDeparment = sunDepartId
+ // manMainCont.AdminOrg = orgMainDepart.Id
+
+ if departmentId != perArcInfo.MainDeparment {
+ if companyId != 0 {
+ eidtManCont["`company`"] = companyId
+ }
+ if departmentId != 0 {
+ eidtManCont["`maindeparment`"] = departmentId
+ }
+ if sunDepartId != 0 {
+ eidtManCont["`sun_main_deparment`"] = sunDepartId
+ }
+ if companyId != 0 || departmentId != 0 || sunDepartId != 0 {
+ changeRecordTrue = true
+ }
+ }
+ if orgMainDepart.Id != 0 && orgMainDepart.Id != perArcInfo.AdminOrg {
+ eidtManCont["`admin_org`"] = orgMainDepart.Id
+ changeRecordTrue = true
+ }
+ if companyId != 0 {
+ manChangeRecord.Company = companyId
+ }
+ if departmentId != 0 {
+ manChangeRecord.MainDepartment = departmentId
+ }
+ // manChangeRecord.SunMainDeparment = sunDepartId
+ if orgMainDepart.Id != 0 {
+ manChangeRecord.Adminorg = orgMainDepart.Id
+ }
+
+ }
+ }
+ //部门
+ if len(manCont.Department) > 0 {
+ var departId []string
+
+ if manCont.MainDepartment != "" {
+ if overallhandle.IsInTrue[string](manCont.MainDepartment, manCont.Department) == false {
+ manCont.Department = append(manCont.Department, manCont.MainDepartment)
+ }
+ }
+
+ for _, dv := range manCont.Department {
+ if dv != "" || dv != "0" {
+ var orgMainDepartAry models.AdministrativeOrganization
+ orgErr := orgMainDepartAry.GetCont(map[string]interface{}{"kingdeeid": dv}, "`id`")
+ if orgErr == nil && orgMainDepartAry.Id != 0 {
+ orgIdStr := strconv.FormatInt(orgMainDepartAry.Id, 10)
+ if overallhandle.StringIsInMap(orgIdStr, departId) == false {
+ departId = append(departId, orgIdStr)
+ }
+ }
+ }
+
+ }
+ oldDepart := strings.Split(perArcInfo.Deparment, ",")
+ chaJiDepart := overallhandle.DifferenceSet[string](departId, oldDepart)
+ if len(chaJiDepart) > 0 {
+ departIdStr := strings.Join(departId, ",")
+ eidtManCont["`deparment`"] = departIdStr
+ manChangeRecord.Department = departIdStr
+ changeRecordTrue = true
+ }
+
+ }
+ //行政组织
+ // if manCont.AdminOrg != "" {
+ // var orgMainDepartAdmin models.AdministrativeOrganization
+ // orgErr := orgMainDepartAdmin.GetCont(map[string]interface{}{"kingdeeid": manCont.AdminOrg}, "`id`")
+ // if orgErr == nil {
+ // if orgMainDepartAdmin.Id != perArcInfo.AdminOrg {
+ // eidtManCont["`admin_org`"] = orgMainDepartAdmin.Id
+ // changeRecordTrue = true
+ // }
+ // manChangeRecord.Adminorg = orgMainDepartAdmin.Id
+ // }
+ // }
+ //职位
+ if manCont.Position != "" {
+ var positionCont models.Position
+ positErr := positionCont.GetCont(map[string]interface{}{`kingdeeid`: manCont.Position}, "`id`")
+ if positErr == nil && positionCont.Id != 0 {
+ if positionCont.Id != perArcInfo.Position {
+ eidtManCont["`position`"] = positionCont.Id
+ changeRecordTrue = true
+ }
+ manChangeRecord.Position = positionCont.Id
+ }
+ }
+ //职务
+ if manCont.JobName != "" {
+ var dutiesCont models.DutiesClassLeve
+ dutiesErr := dutiesCont.GetCont(map[string]interface{}{"`d_king`": manCont.JobName}, "d_id")
+ if dutiesErr == nil && dutiesCont.Id != 0 {
+
+ if dutiesCont.Id != perArcInfo.Position {
+ eidtManCont["`job_id`"] = dutiesCont.Id
+ changeRecordTrue = true
+ }
+
+ if dutiesCont.ClassId != perArcInfo.JobClass {
+ eidtManCont["`job_class`"] = dutiesCont.ClassId
+ changeRecordTrue = true
+ }
+ manChangeRecord.JobId = dutiesCont.Id
+ manChangeRecord.JobClass = dutiesCont.ClassId
+ }
+ }
+ if manCont.PositionGrade != "" {
+ positionGrade, _ := overallhandle.StringToInt64(manCont.PositionGrade)
+ if positionGrade != perArcInfo.JobLeve {
+ eidtManCont["`job_leve`"] = positionGrade
+ }
+ manChangeRecord.JobLevel = positionGrade
+ changeRecordTrue = true
+ }
+ } else {
+ overallhandle.WriteLog("write", "信息已通过电子表格导入!")
+ }
}
// fmt.Printf("第一学历--->%v--->%v\n", changeRecordTrue, manChangeRecord)
if len(eidtManCont) > 0 {
@@ -311,9 +481,15 @@ func eidtAddManContJinDie(perArcInfo models.PersonArchives, manCont addKingdeePe
// go editInsideWorkHistoryMan(perArcInfo.Key, manCont.InsideWorkHistory)
// go editInsideWorkHistoryManNew(perArcInfo.Key, manCont.InsideWorkHistory)
go EditWithinGroupWorkLog(perArcInfo.Key, manCont.InsideWorkHistory)
- synPro.Wait()
+
+ }
+ //编辑员工任职关系
+ if len(manCont.InsideWorkHistory) > 0 {
+ synPro.Add(1)
+ go SaveUserOfOrg(perArcInfo.Key, manCont.InsideWorkHistory)
}
+ synPro.Wait()
return nil
}
@@ -519,6 +695,11 @@ func newAddManContJinDie(oldSchool models.WorkMan, manCont addKingdeePersonneles
// go editInsideWorkHistoryMan(manKeyNum, manCont.InsideWorkHistory)
// go editInsideWorkHistoryManNew(manKeyNum, manCont.InsideWorkHistory)
go EditWithinGroupWorkLog(manKeyNum, manCont.InsideWorkHistory)
+ //编辑员工任职关系
+ if len(manCont.InsideWorkHistory) > 0 {
+ synPro.Add(1)
+ go SaveUserOfOrg(manKeyNum, manCont.InsideWorkHistory)
+ }
synPro.Wait()
}
return nil
diff --git a/api/version1/personnelapi/mancont.go b/api/version1/personnelapi/mancont.go
index 2906fb2..57dd398 100644
--- a/api/version1/personnelapi/mancont.go
+++ b/api/version1/personnelapi/mancont.go
@@ -125,17 +125,31 @@ func (s *StaffApi) EditManOrgCont(c *gin.Context) {
saveData["responsible_department_json"] = ""
}
if requestData.PersonInCharge == 1 {
- if len(requestData.Resallorg) > 0 {
- var orgResList []string
- for i := 0; i < len(requestData.Resallorg); i++ {
- resAllOrgIdStr := strconv.Itoa(requestData.Resallorg[i])
- if overallhandle.IsInTrue[string](resAllOrgIdStr, orgResList) == false {
- orgResList = append(orgResList, resAllOrgIdStr)
+ // if len(requestData.Resallorg) > 0 {
+ // var orgResList []string
+ // for i := 0; i < len(requestData.Resallorg); i++ {
+ // resAllOrgIdStr := strconv.Itoa(requestData.Resallorg[i])
+ // if overallhandle.IsInTrue[string](resAllOrgIdStr, orgResList) == false {
+ // orgResList = append(orgResList, resAllOrgIdStr)
+ // }
+ // }
+ // orgResListStr := strings.Join(orgResList, ",")
+ // saveData["responsible_department"] = orgResListStr
+ // }
+ var orgAry []string
+ if len(requestData.OrgresList) > 0 {
+ for _, v := range requestData.OrgresList {
+ for _, ov := range v {
+ resOrgIdVStr := strconv.Itoa(ov)
+ if overallhandle.IsInTrue[string](resOrgIdVStr, orgAry) == false {
+ orgAry = append(orgAry, resOrgIdVStr)
+ }
}
}
- orgResListStr := strings.Join(orgResList, ",")
+ orgResListStr := strings.Join(orgAry, ",")
saveData["responsible_department"] = orgResListStr
}
+
} else {
saveData["responsible_department"] = ""
}
@@ -254,6 +268,9 @@ func (s *StaffApi) EditManMainCont(c *gin.Context) {
}
editTime := time.Now().Unix()
saveMainDate := overallhandle.MapOut()
+ if requestData.Name != "" && requestData.Name != myCont.Name {
+ saveMainDate["`name`"] = requestData.Name
+ } //绑定微信
if requestData.Wechat != "" && requestData.Wechat != myCont.Wechat {
saveMainDate["`wechat`"] = requestData.Wechat
} //绑定微信
@@ -402,3 +419,205 @@ func (s *StaffApi) EditManMainCont(c *gin.Context) {
overallhandle.Result(0, err, c)
}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-03-28 09:03:52
+@ 功能: 人员定位信息(简略)
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) PersonnelPositioning(c *gin.Context) {
+ var requestData overallhandle.ConstId
+ c.ShouldBindJSON(&requestData)
+
+ peopleUrl := "http://172.20.2.156:8084/HXGK/open/information/getRealGps.do"
+ postString := overallhandle.CurlPostJosn(peopleUrl, []byte(""))
+ var postCallBack DingWeiData
+ json.Unmarshal(postString, &postCallBack)
+ postCallBack.Total = len(postCallBack.Data)
+ noSend := []string{"300010", "300043", "202471", "302535", "200001", "200005", "200009", "200003", "200010", "201542", "200008", "200019", "200012"}
+
+ var sendPeopleList []DingWeiInfo
+
+ if len(postCallBack.Data) > 0 {
+ for i, v := range postCallBack.Data {
+ if !overallhandle.IsInTrue[string](v.EmpNo, noSend) {
+ postCallBack.Data[i].UserName = v.EmpName
+ if v.EmpNo != "" && v.EmpNo != "null" {
+ var manErr error
+ var manInfo models.ManCont
+ switch requestData.Id {
+ case "224":
+ manErr = manInfo.GetCont(map[string]interface{}{"`number`": v.EmpNo, "`company`": requestData.Id}, "`name`", "`key`", "`mobilephone`")
+ postCallBack.Data[i].UserOrgName = "恒信中碳氢能源科技(山东)有限公司"
+ if manErr == nil {
+ var sendPeople DingWeiInfo
+ sendPeople.DateTime = v.DateTime //dateTime"`
+ sendPeople.Area = v.Area //area"`
+ sendPeople.FactoryId = v.FactoryId //factoryId"`
+ sendPeople.Latitude = v.Latitude //latitude"`
+ sendPeople.FactoryName = v.FactoryName //factoryName"`
+ sendPeople.DeviceNo = v.DeviceNo //deviceNo"`
+ sendPeople.EmpNo = v.EmpNo //empNo"`
+ sendPeople.IsOffLine = v.IsOffLine //isOffLine"`
+ sendPeople.Layer = v.Layer //layer"`
+ sendPeople.CrossX = v.CrossX //crossX"`
+ sendPeople.CrossY = v.CrossY //crossY"`
+ sendPeople.Specifictype = v.Specifictype //specifictype"`
+ sendPeople.EmpName = v.EmpName //empName"`
+ sendPeople.Longitude = v.Longitude //longitude"`
+
+ sendPeople.UserCode = strconv.FormatInt(manInfo.Key, 10)
+ sendPeople.UserName = manInfo.Name
+ if manInfo.Mobilephone != "" {
+ sendPeople.UserPhone = overallhandle.MaskPhone(manInfo.Mobilephone)
+ }
+
+ switch v.Specifictype { //人员类型
+ case "1":
+ sendPeople.UserType = "临时访客"
+ case "2":
+ sendPeople.UserType = "承包商员工"
+ case "3":
+ sendPeople.UserType = "临时访客"
+ case "4":
+ sendPeople.UserType = "临时访客"
+ case "5":
+ sendPeople.UserType = "临时访客"
+ default:
+ sendPeople.UserType = "在职职工"
+ }
+ sendPeople.UserOrgCode = "91370921MA94AF5H3N" //userOrgCode"` //所属单位唯一标志
+ sendPeople.UserOrgName = "恒信中碳氢能源科技(山东)有限公司" //userOrgName"` //所属单位名称
+ sendPeople.Cardld = v.DeviceNo //cardld"` //绑定设备唯一编码
+ sendPeopleList = append(sendPeopleList, sendPeople)
+ }
+ case "309":
+ manErr = manInfo.GetCont(map[string]interface{}{"`number`": v.EmpNo, "`company`": requestData.Id}, "`name`", "`key`", "`mobilephone`")
+ postCallBack.Data[i].UserOrgName = "恒信中碳氢能源科技(山东)有限公司"
+ if manErr == nil {
+ var sendPeople DingWeiInfo
+ sendPeople.DateTime = v.DateTime //dateTime"`
+ sendPeople.Area = v.Area //area"`
+ sendPeople.FactoryId = v.FactoryId //factoryId"`
+ sendPeople.Latitude = v.Latitude //latitude"`
+ sendPeople.FactoryName = v.FactoryName //factoryName"`
+ sendPeople.DeviceNo = v.DeviceNo //deviceNo"`
+ sendPeople.EmpNo = v.EmpNo //empNo"`
+ sendPeople.IsOffLine = v.IsOffLine //isOffLine"`
+ sendPeople.Layer = v.Layer //layer"`
+ sendPeople.CrossX = v.CrossX //crossX"`
+ sendPeople.CrossY = v.CrossY //crossY"`
+ sendPeople.Specifictype = v.Specifictype //specifictype"`
+ sendPeople.EmpName = v.EmpName //empName"`
+ sendPeople.Longitude = v.Longitude //longitude"`
+
+ sendPeople.UserCode = strconv.FormatInt(manInfo.Key, 10)
+ sendPeople.UserName = manInfo.Name
+ if manInfo.Mobilephone != "" {
+ sendPeople.UserPhone = overallhandle.MaskPhone(manInfo.Mobilephone)
+ }
+
+ switch v.Specifictype { //人员类型
+ case "1":
+ sendPeople.UserType = "临时访客"
+ case "2":
+ sendPeople.UserType = "承包商员工"
+ case "3":
+ sendPeople.UserType = "临时访客"
+ case "4":
+ sendPeople.UserType = "临时访客"
+ case "5":
+ sendPeople.UserType = "临时访客"
+ default:
+ sendPeople.UserType = "在职职工"
+ }
+ sendPeople.UserOrgCode = "91370921MA94AF5H3N" //userOrgCode"` //所属单位唯一标志
+ sendPeople.UserOrgName = "恒信中碳氢能源科技(山东)有限公司" //userOrgName"` //所属单位名称
+ sendPeople.Cardld = v.DeviceNo //cardld"` //绑定设备唯一编码
+ sendPeopleList = append(sendPeopleList, sendPeople)
+ }
+ default:
+ manErr = manInfo.GetCont(map[string]interface{}{"`number`": v.EmpNo}, "`name`", "`key`", "`mobilephone`")
+ postCallBack.Data[i].UserOrgName = "山东恒信高科能源有限公司"
+ if manErr == nil {
+ var sendPeople DingWeiInfo
+ sendPeople.DateTime = v.DateTime //dateTime"`
+ sendPeople.Area = v.Area //area"`
+ sendPeople.FactoryId = v.FactoryId //factoryId"`
+ sendPeople.Latitude = v.Latitude //latitude"`
+ sendPeople.FactoryName = v.FactoryName //factoryName"`
+ sendPeople.DeviceNo = v.DeviceNo //deviceNo"`
+ sendPeople.EmpNo = v.EmpNo //empNo"`
+ sendPeople.IsOffLine = v.IsOffLine //isOffLine"`
+ sendPeople.Layer = v.Layer //layer"`
+ sendPeople.CrossX = v.CrossX //crossX"`
+ sendPeople.CrossY = v.CrossY //crossY"`
+ sendPeople.Specifictype = v.Specifictype //specifictype"`
+ sendPeople.EmpName = v.EmpName //empName"`
+ sendPeople.Longitude = v.Longitude //longitude"`
+
+ sendPeople.UserCode = strconv.FormatInt(manInfo.Key, 10)
+ sendPeople.UserName = manInfo.Name
+ if manInfo.Mobilephone != "" {
+ sendPeople.UserPhone = overallhandle.MaskPhone(manInfo.Mobilephone)
+ }
+
+ switch v.Specifictype { //人员类型
+ case "1":
+ sendPeople.UserType = "临时访客"
+ case "2":
+ sendPeople.UserType = "承包商员工"
+ case "3":
+ sendPeople.UserType = "临时访客"
+ case "4":
+ sendPeople.UserType = "临时访客"
+ case "5":
+ sendPeople.UserType = "临时访客"
+ default:
+ sendPeople.UserType = "在职职工"
+ }
+ sendPeople.UserOrgCode = "91370921328482832M" //userOrgCode"` //所属单位唯一标志
+ sendPeople.UserOrgName = "山东恒信高科能源有限公司" //userOrgName"` //所属单位名称
+ sendPeople.Cardld = v.DeviceNo //cardld"` //绑定设备唯一编码
+ sendPeopleList = append(sendPeopleList, sendPeople)
+ }
+ }
+
+ } else {
+ postCallBack.Data[i].UserCode = v.DeviceNo
+ }
+ switch v.Specifictype {
+ case "1":
+ postCallBack.Data[i].UserType = "临时访客"
+ case "2":
+ postCallBack.Data[i].UserType = "承包商员工"
+ case "3":
+ postCallBack.Data[i].UserType = "临时访客"
+ case "4":
+ postCallBack.Data[i].UserType = "临时访客"
+ case "5":
+ postCallBack.Data[i].UserType = "临时访客"
+ default:
+ postCallBack.Data[i].UserType = "在职职工"
+ }
+ postCallBack.Data[i].UserOrgCode = "91370921328482832M"
+
+ postCallBack.Data[i].Cardld = v.DeviceNo
+ }
+ }
+ }
+ overallhandle.Result(0, sendPeopleList, c)
+ // overallhandle.Result(0, postCallBack.Data, c)
+}
diff --git a/api/version1/personnelapi/orgUserRole.go b/api/version1/personnelapi/orgUserRole.go
new file mode 100644
index 0000000..58dfc5e
--- /dev/null
+++ b/api/version1/personnelapi/orgUserRole.go
@@ -0,0 +1,275 @@
+package personnelapi
+
+import (
+ "hr_server/models"
+ "hr_server/models/hrmodels"
+ "hr_server/overall"
+ "hr_server/overall/overallhandle"
+ "sort"
+ "strconv"
+
+ "github.com/gin-gonic/gin"
+)
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-05-24 13:55:03
+@ 功能: 根据行政组织ID获取当前行政组织人员及子行政组织
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) GainSunOrgAndUser(c *gin.Context) {
+ var requestData overallhandle.ConstId
+ err := c.ShouldBindJSON(&requestData)
+ if err != nil {
+ requestData.Id = "309"
+ }
+ if requestData.Id == "" {
+ requestData.Id = "309"
+ }
+ var sendInfo OrgGainPeopel
+ orgIdInt, _ := strconv.ParseInt(requestData.Id, 10, 64)
+ synPro.Add(1)
+ go sendInfo.GainAllFatherOrg(orgIdInt)
+ synPro.Add(1)
+ go sendInfo.GainOrgPeopel(orgIdInt)
+ synPro.Add(1)
+ go sendInfo.GainOrgSunOrgList(orgIdInt)
+ synPro.Wait()
+ var sendData SendOrgGainPeopel
+ sendData.OrgList = sendInfo.OrgList
+ sendData.OrgUserList = append(sendData.OrgUserList, sendInfo.SunOrgList...)
+ sendData.OrgUserList = append(sendData.OrgUserList, sendInfo.UserList...)
+ overallhandle.Result(0, sendData, c)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-05-24 14:33:28
+@ 功能: 获取当前行政组织直接子级行政组织
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (o *OrgGainPeopel) GainOrgSunOrgList(orgId int64) {
+ defer synPro.Done()
+ var orgList []models.AdministrativeOrganization
+ overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`,`name`").Where("`state` = 1 AND `superior` = ?", orgId).Find(&orgList)
+ if len(orgList) > 0 {
+ for _, v := range orgList {
+ var user UserOrgRole
+ user.Id = strconv.FormatInt(v.Id, 10)
+ user.Title = v.Name
+ user.Img = ""
+ user.IsPick = 2
+ user.Types = 2
+ o.SunOrgList = append(o.SunOrgList, user)
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-05-24 14:23:46
+@ 功能: 获取当前行政组织下得人员信息
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (o *OrgGainPeopel) GainOrgPeopel(orgId int64) {
+ defer synPro.Done()
+ var prople []models.PersonArchives
+ err := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`key`,`number`,`name`,`icon`,`admin_org`,`icon_photo`").Where("`admin_org` = ? AND `emp_type` BETWEEN ? AND ? ", orgId, 1, 10).Find(&prople).Error
+ if err == nil && len(prople) > 0 {
+ for _, v := range prople {
+ var user UserOrgRole
+ user.Id = strconv.FormatInt(v.Key, 10)
+ user.Title = v.Name
+ user.Img = v.Icon
+ if v.IconPhoto != "" {
+ user.Img = v.IconPhoto
+ }
+ user.IsPick = 2
+ user.Types = 1
+ o.UserList = append(o.UserList, user)
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-05-24 14:04:20
+@ 功能: 获取所有父级行政组织
+@ 参数
+
+ #orgId 行政组织ID
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (o *OrgGainPeopel) GainAllFatherOrg(orgId int64) {
+ defer synPro.Done()
+ var sunAry overallhandle.AllSunList[int64]
+ sunAry.GetAllParentOrg(orgId, 2)
+ sunAry.SunList = append(sunAry.SunList, orgId)
+ if len(sunAry.SunList) > 0 {
+ var orgList []hrmodels.OrgCont
+ err := overall.CONSTANT_DB_HR.Model(&hrmodels.OrgCont{}).Select("`id`,`name`,`level`").Where("`id` IN ?", sunAry.SunList).Find(&orgList).Error
+ if err == nil {
+ sort.Slice(orgList, func(i, j int) bool {
+ return orgList[i].Level < orgList[j].Level
+ })
+ for _, v := range orgList {
+ var orgInfo OrgCrumb
+ orgInfo.Id = strconv.FormatInt(v.Id, 10)
+ orgInfo.Title = v.Name
+ o.OrgList = append(o.OrgList, orgInfo)
+ }
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-05-27 08:33:09
+@ 功能: 搜索行政组织及人员
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) SearchOrgUser(c *gin.Context) {
+ var requestData overallhandle.NameOverall
+ err := c.ShouldBindJSON(&requestData)
+ var sendData SendOrgGainPeopel
+ if err != nil {
+ overallhandle.Result(0, sendData, c)
+ return
+ }
+ if requestData.Name == "" {
+ overallhandle.Result(0, sendData, c)
+ return
+ }
+ var sendInfo OrgGainPeopel
+ synPro.Add(1)
+ go sendInfo.SearchOrgCont(requestData.Name)
+ synPro.Add(1)
+ go sendInfo.SearchPeopleCont(requestData.Name)
+ synPro.Wait()
+ sendData.OrgUserList = append(sendData.OrgUserList, sendInfo.SunOrgList...)
+ sendData.OrgUserList = append(sendData.OrgUserList, sendInfo.UserList...)
+ overallhandle.Result(0, sendData, c)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-05-27 08:51:49
+@ 功能: 搜索人员
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (o *OrgGainPeopel) SearchPeopleCont(name string) {
+ defer synPro.Done()
+ var prople []models.PersonArchives
+ err := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`key`,`number`,`name`,`icon`,`admin_org`,`icon_photo`").Where("(`name` Like ? OR `number` Like ?) AND `emp_type` BETWEEN ? AND ? ", "%"+name+"%", "%"+name+"%", 1, 10).Find(&prople).Error
+ if err == nil && len(prople) > 0 {
+ for _, v := range prople {
+ var user UserOrgRole
+ user.Id = strconv.FormatInt(v.Key, 10)
+ user.Title = v.Name
+ user.Img = v.Icon
+ if v.IconPhoto != "" {
+ user.Img = v.IconPhoto
+ }
+ user.IsPick = 2
+ user.Types = 1
+ o.UserList = append(o.UserList, user)
+ }
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-05-27 08:40:51
+@ 功能: 搜索行政组织名称
+@ 参数
+
+ #name 行政组织名称
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (o *OrgGainPeopel) SearchOrgCont(name string) {
+ defer synPro.Done()
+ var orgList []hrmodels.OrgCont
+ overall.CONSTANT_DB_HR.Model(&hrmodels.OrgCont{}).Select("`id`,`name`").Where("`state` = 1 AND level > 3 AND `name` LIKE ?", "%"+name+"%").Find(&orgList)
+ if len(orgList) > 0 {
+ for _, v := range orgList {
+ var user UserOrgRole
+ user.Id = strconv.FormatInt(v.Id, 10)
+ user.Title = v.Name
+ user.Img = ""
+ user.IsPick = 2
+ user.Types = 2
+ o.SunOrgList = append(o.SunOrgList, user)
+ }
+ }
+}
diff --git a/api/version1/personnelapi/rewardsPunishments.go b/api/version1/personnelapi/rewardsPunishments.go
new file mode 100644
index 0000000..3d7aaad
--- /dev/null
+++ b/api/version1/personnelapi/rewardsPunishments.go
@@ -0,0 +1,279 @@
+package personnelapi
+
+import (
+ "hr_server/models"
+ "hr_server/overall"
+ "hr_server/overall/overallhandle"
+ "time"
+
+ "github.com/gin-gonic/gin"
+)
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-04 08:43:33
+@ 功能: 奖惩记录
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) RewPunList(c *gin.Context) {
+ var requestData RewPunType
+ c.ShouldBindJSON(&requestData)
+ // err := c.ShouldBindJSON(&requestData)
+ // if err != nil {
+ // overallhandle.Result(100, requestData.Id, c)
+ // return
+ // }
+ if requestData.Id == "" {
+ overallhandle.Result(101, requestData.Id, c)
+ return
+ }
+ if requestData.Page < 0 {
+ requestData.Page = 1
+ }
+ if requestData.PageSize < 0 {
+ requestData.PageSize = 10
+ }
+ var list []SendRewPunInfo
+ gormDb := overall.CONSTANT_DB_HR.Model(&models.RewardsPenalties{}).Where("`state` = 1 AND `userkey` = ?", requestData.Id)
+ if requestData.State != 0 {
+ if requestData.State == 1 {
+ gormDb = gormDb.Where("`types` = ?", 1)
+ } else {
+ gormDb = gormDb.Where("`types` = ?", 2)
+ }
+ }
+ var total int64
+ totalErr := gormDb.Count(&total).Error
+ if totalErr != nil {
+ total = 0
+ }
+ gormDb = overallhandle.PageTurningSettings(gormDb, requestData.Page, requestData.PageSize)
+ err := gormDb.Order("`years` DESC").Order("`months` ASC").Order("`id` DESC").Find(&list).Error
+ if err != nil {
+ overallhandle.Result(107, requestData.Id, c)
+ return
+ }
+ for i, v := range list {
+ list[i].TimedataStr = overallhandle.UnixTimeToDay(v.TimeData, 14)
+ list[i].LevelName = overallhandle.RewPunLevel(v.Level)
+ list[i].RewPunClassName = overallhandle.RewPunLevelClass(v.RewPunClass)
+ }
+ overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(list)), list, c)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-04 09:24:59
+@ 功能: 绩效考核成绩
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) AssessmentRecords(c *gin.Context) {
+ var requestData RewPunType
+ c.ShouldBindJSON(&requestData)
+ if requestData.Id == "" {
+ overallhandle.Result(101, requestData.Id, c)
+ return
+ }
+ if requestData.Page < 0 {
+ requestData.Page = 1
+ }
+ if requestData.PageSize < 0 {
+ requestData.PageSize = 10
+ }
+ var list []SendMeritslog
+ gormDb := overall.CONSTANT_DB_HR.Model(&models.Meritslog{}).Where("`userkey` = ?", requestData.Id)
+ if requestData.State != 0 {
+ if requestData.State == 1 {
+ gormDb = gormDb.Where("`status` = ?", 1)
+ } else {
+ gormDb = gormDb.Where("`status` = ?", 2)
+ }
+ }
+ var total int64
+ totalErr := gormDb.Count(&total).Error
+ if totalErr != nil {
+ total = 0
+ }
+ gormDb = overallhandle.PageTurningSettings(gormDb, requestData.Page, requestData.PageSize)
+ err := gormDb.Order("`years` DESC").Order("`months` ASC").Order("`id` DESC").Find(&list).Error
+ if err != nil {
+ overallhandle.Result(107, requestData.Id, c)
+ return
+ }
+ for i, v := range list {
+ list[i].TimedataStr = overallhandle.UnixTimeToDay(v.TimeData, 14)
+ }
+ overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(list)), list, c)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-04 13:18:47
+@ 功能: 员工关系
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) PeopleEmploymentRelationship(c *gin.Context) {
+ var requestData overallhandle.ConstId
+ err := c.ShouldBindJSON(&requestData)
+ if err != nil {
+ overallhandle.Result(100, err, c)
+ return
+ }
+ if requestData.Id == "" {
+ overallhandle.Result(101, err, c)
+ return
+ }
+ var myInfo models.PersonnelContent
+ err = myInfo.GetCont(map[string]interface{}{"`key`": requestData.Id}, "`channel`", "`entrydate`", "`jobstartdate`")
+ if err != nil {
+ overallhandle.Result(107, err, c)
+ return
+ }
+
+ var sendInfo SendSheHuiGuanxi
+ sendInfo.Channel = overallhandle.JoinJobChanelStr(myInfo.Channel)
+ sendInfo.Jobstartdate = overallhandle.UnixTimeToDay(myInfo.Jobstartdate, 14)
+ sendInfo.Entrydate = overallhandle.UnixTimeToDay(myInfo.Entrydate, 14)
+
+ cruTime := time.Now().Unix()
+ sendInfo.SheHuiGongli, _ = overallhandle.CalculateYearDifference(myInfo.Jobstartdate, cruTime, 0)
+ sendInfo.JiTuanGongli, _ = overallhandle.CalculateYearDifference(myInfo.Entrydate, cruTime, 0)
+ overallhandle.Result(0, sendInfo, c)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-04 15:20:34
+@ 功能: 职称列表
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) PeopleTitle(c *gin.Context) {
+ var requestData overallhandle.ConstId
+ err := c.ShouldBindJSON(&requestData)
+ if err != nil {
+ overallhandle.Result(100, err, c)
+ return
+ }
+ if requestData.Id == "" {
+ overallhandle.Result(101, err, c)
+ return
+ }
+ var list []SendAcademicTitle
+ err = overall.CONSTANT_DB_HR.Model(&models.AcademicTitle{}).Where("`userKey` = ?", requestData.Id).Order("`time` DESC").Order("`id` DESC").Find(&list).Error
+ if err != nil {
+ overallhandle.Result(107, err, c)
+ return
+ }
+ for i, v := range list {
+ list[i].TimeStr = overallhandle.UnixTimeToDay(v.Time, 14)
+ }
+ overallhandle.Result(0, list, c)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-04 15:27:05
+@ 功能: 荣誉
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) PeopleHonor(c *gin.Context) {
+ var requestData HonorsType
+ c.ShouldBindJSON(&requestData)
+ if requestData.Id == "" {
+ overallhandle.Result(101, requestData.Id, c)
+ return
+ }
+ if requestData.Page < 0 {
+ requestData.Page = 1
+ }
+ if requestData.PageSize < 0 {
+ requestData.PageSize = 10
+ }
+ var list []SendCertificateHonors
+ gormDb := overall.CONSTANT_DB_HR.Model(&models.CertificateHonors{}).Where("`userkey` = ?", requestData.Id)
+ if requestData.State != 0 {
+ if requestData.State == 1 {
+ gormDb = gormDb.Where("`state` = ?", 1)
+ } else {
+ gormDb = gormDb.Where("`state` = ?", 2)
+ }
+ }
+ if requestData.Types != 0 {
+ gormDb = gormDb.Where("`types` = ?", requestData.Types)
+ }
+ var total int64
+ totalErr := gormDb.Count(&total).Error
+ if totalErr != nil {
+ total = 0
+ }
+ gormDb = overallhandle.PageTurningSettings(gormDb, requestData.Page, requestData.PageSize)
+ err := gormDb.Order("`years` DESC").Order("`months` ASC").Order("`id` DESC").Find(&list).Error
+ if err != nil {
+ overallhandle.Result(107, requestData.Id, c)
+ return
+ }
+ for i, v := range list {
+ if v.TimeData != 0 {
+ list[i].TimeDataStr = overallhandle.UnixTimeToDay(v.TimeData, 14)
+ }
+ if v.EndTime != 0 {
+ list[i].EndTimeStr = overallhandle.UnixTimeToDay(v.EndTime, 14)
+ }
+ }
+ overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(list)), list, c)
+}
diff --git a/api/version1/personnelapi/staff.go b/api/version1/personnelapi/staff.go
index 6897790..3898852 100644
--- a/api/version1/personnelapi/staff.go
+++ b/api/version1/personnelapi/staff.go
@@ -63,9 +63,9 @@ func (s *StaffApi) StaffList(c *gin.Context) {
gormDb = gormDb.Where("`position` = ?", requestData.Position)
sqlStr = fmt.Sprintf("%v AND `position` = %v", sqlStr, requestData.Position)
}
- if requestData.EmpType != 0 {
- gormDb = gormDb.Where("`emp_type` = ?", requestData.EmpType)
- sqlStr = fmt.Sprintf("%v AND `emp_type` = %v", sqlStr, requestData.EmpType)
+ if len(requestData.EmpType) > 0 {
+ gormDb = gormDb.Where("`emp_type` IN ?", requestData.EmpType)
+ sqlStr = fmt.Sprintf("%v AND `emp_type` IN %v", sqlStr, requestData.EmpType)
} else {
// gormDb = gormDb.Where("`emp_type` IN ?", overall.EmployeeStatusIng)
gormDb = gormDb.Where("`emp_type` BETWEEN ? AND ?", 1, 10)
@@ -85,6 +85,10 @@ func (s *StaffApi) StaffList(c *gin.Context) {
gormDb = gormDb.Where("FIND_IN_SET(?,`role`)", requestData.Role)
sqlStr = fmt.Sprintf("%v AND FIND_IN_SET(%v,`role`)", sqlStr, requestData.Role)
}
+ if requestData.Teamid != 0 {
+ gormDb = gormDb.Where("`teamid` = ?", requestData.Teamid)
+ sqlStr = fmt.Sprintf("%v AND `teamid` = ?", sqlStr, requestData.Teamid)
+ }
gormDb = gormDb.Where("`state` = 1")
var total int64
totalErr := gormDb.Count(&total).Error
@@ -1469,6 +1473,15 @@ func (s *StaffApi) EditPassWord(c *gin.Context) {
overallhandle.Result(1, err, c, "修改失败!")
return
}
+ var waiHr models.PersonArchives
+ err = overall.CONSTANT_HRSERVER_DATABASE.Where("`key` = ?", requestData.Id).Find(&waiHr).Error
+ if err != nil {
+ var neiHr models.PersonArchives
+ neiHr.GetCont(whereAry)
+ overall.CONSTANT_HRSERVER_DATABASE.Create(&neiHr)
+ } else {
+ overall.CONSTANT_HRSERVER_DATABASE.Model(&waiHr).Where(whereAry).Updates(saveDate)
+ }
overallhandle.Result(0, err, c, "修改成功!")
}
diff --git a/api/version1/personnelapi/staffarchives.go b/api/version1/personnelapi/staffarchives.go
index bbd471f..7f6219b 100644
--- a/api/version1/personnelapi/staffarchives.go
+++ b/api/version1/personnelapi/staffarchives.go
@@ -3,11 +3,16 @@ package personnelapi
import (
"encoding/json"
"fmt"
+ datacenter "hr_server/api/version1/dataCenter"
"hr_server/grocerystore"
"hr_server/models"
+ "hr_server/models/customerForm"
+ personalitycolor "hr_server/models/personalityColor"
"hr_server/models/workgroup"
"hr_server/overall"
"hr_server/overall/overallhandle"
+ "regexp"
+ "sort"
"strconv"
"strings"
"time"
@@ -58,15 +63,17 @@ func (s *StaffApi) ArchivesList(c *gin.Context) {
if requestData.Position != 0 {
gormDb = gormDb.Where("position = ?", requestData.Position)
}
- if requestData.EmpType != 0 {
- gormDb = gormDb.Where("emp_type = ?", requestData.EmpType)
+ if len(requestData.EmpType) > 0 {
+ gormDb = gormDb.Where("emp_type IN ?", requestData.EmpType)
} else {
gormDb = gormDb.Where("emp_type BETWEEN ? AND ?", 1, 10)
}
if requestData.Role != "" {
gormDb = gormDb.Where("FIND_IN_SET(?,`role`)", requestData.Role)
}
-
+ if requestData.Teamid != 0 {
+ gormDb = gormDb.Where("`teamid` = ?", requestData.Teamid)
+ }
var total int64
totalErr := gormDb.Count(&total).Error
if totalErr != nil {
@@ -1315,6 +1322,13 @@ func getGroupWorkHistoryList(key int64) (workHisList []insideHistory) {
if workHisContListErr == nil {
for _, v := range workHisContList {
var workCont insideHistory
+ workCont.Bdlx = v.Bdlx
+ workCont.Gsmc = v.Gsmc
+ workCont.Yjbm = v.Yjbm
+ workCont.Ejbm = v.Ejbm
+ workCont.Gongduan = v.Gongduan
+ workCont.Dengji = v.Dengji
+ workCont.Zhiwei = v.Zhiwei
if v.Group != 0 {
var groupInfo models.AdministrativeOrganization
groupInfo.GetCont(map[string]interface{}{"`id`": v.Group}, "`name`")
@@ -1732,7 +1746,18 @@ func (s *StaffApi) PersonnelEducationList(c *gin.Context) {
} else {
cont.GraduationTimeStr = "至今"
}
-
+ // xueXiaoType := overallhandle.EducationTypeAll(int64(v.SchoolType))
+ if v.YuanXiaoLeiXing != "" {
+ cont.YuanXiaoLeiXing = v.YuanXiaoLeiXing
+ } else {
+ cont.YuanXiaoLeiXing = overallhandle.EducationTypeAll(int64(v.SchoolType))
+ }
+ cont.CollegeFaction = v.CollegeFaction
+ if v.XueLiLeixing != "" {
+ cont.XueLiLeixing = v.XueLiLeixing
+ } else {
+ cont.XueLiLeixing = overallhandle.EducationTypeAll(int64(v.EducationType))
+ }
list = append(list, cont)
}
overallhandle.Result(0, list, c)
@@ -2060,15 +2085,17 @@ func (s *StaffApi) ArchivesListExporCsv(c *gin.Context) {
if requestData.Position != 0 {
gormDb = gormDb.Where("position = ?", requestData.Position)
}
- if requestData.EmpType != 0 {
- gormDb = gormDb.Where("emp_type = ?", requestData.EmpType)
+ if len(requestData.EmpType) > 0 {
+ gormDb = gormDb.Where("emp_type IN ?", requestData.EmpType)
} else {
gormDb = gormDb.Where("emp_type BETWEEN ? AND ?", 1, 10)
}
if requestData.Role != "" {
gormDb = gormDb.Where("FIND_IN_SET(?,`role`)", requestData.Role)
}
-
+ if requestData.Teamid != 0 {
+ gormDb = gormDb.Where("`teamid` = ?", requestData.Teamid)
+ }
var total int64
totalErr := gormDb.Count(&total).Error
if totalErr != nil {
@@ -2296,14 +2323,62 @@ func (s *StaffApi) GetArchivesCon(c *gin.Context) {
}
staffCenter.PoliticalOutlookName = overallhandle.PolitiToString(satffCont.PoliticalOutlook)
- var ruleCont workgroup.WorkTimeType
- ruleCont.GetCont(map[string]interface{}{"`id`": satffCont.Ruleid}, "`name`")
- staffCenter.RuleId = strconv.FormatInt(satffCont.Ruleid, 10)
- staffCenter.RuleName = ruleCont.Name
+ if satffCont.Ruleid != 0 {
+ var ruleCont workgroup.WorkTimeType
+ ruleCont.GetCont(map[string]interface{}{"`id`": satffCont.Ruleid}, "`name`")
+ staffCenter.RuleId = strconv.FormatInt(satffCont.Ruleid, 10)
+ staffCenter.RuleName = ruleCont.Name
+ }
+
staffCenter.KeyStr = strconv.FormatInt(satffCont.Key, 10)
if satffCont.ResponsibleDepartmentJson != "" {
- jsonErr := json.Unmarshal([]byte(satffCont.ResponsibleDepartmentJson), &staffCenter.OrgresList)
- fmt.Printf("satffCont---------->%v---------->%v---------->%v\n", satffCont.ResponsibleDepartmentJson, satffCont, jsonErr)
+ json.Unmarshal([]byte(satffCont.ResponsibleDepartmentJson), &staffCenter.OrgresList)
+ // jsonErr := json.Unmarshal([]byte(satffCont.ResponsibleDepartmentJson), &staffCenter.OrgresList)
+ // fmt.Printf("satffCont---------->%v---------->%v---------->%v\n", satffCont.ResponsibleDepartmentJson, satffCont, jsonErr)
+ }
+
+ var personalityTest []personalitycolor.Charcolortest
+ overall.CONSTANT_Personality_Color.Where("`c_states` = 1 AND `c_number` = ?", satffCont.Number).Find(&personalityTest)
+
+ if len(personalityTest) > 0 {
+ rongXin := false
+ gaoKe := false
+ for _, v := range personalityTest {
+ if v.Class == 10000002 {
+ rongXin = true
+ }
+ if v.Class == 10000001 {
+ gaoKe = true
+ }
+ }
+ if rongXin && gaoKe {
+ staffCenter.IsColorTrue = 4
+ } else if rongXin {
+ staffCenter.IsColorTrue = 3
+ } else {
+ staffCenter.IsColorTrue = 1
+ }
+ } else {
+
+ if satffCont.ExcelTemplate == 296 {
+ var rcpdInfo models.TalentInventory
+ err := rcpdInfo.GetCont(map[string]interface{}{"`userKey`": satffCont.Key}, "`userTypes`")
+ fmt.Printf("获取聪哥---------->%v\n", rcpdInfo)
+ if err != nil {
+ staffCenter.IsColorTrue = 2
+ } else {
+ if rcpdInfo.UserTypes != "" {
+ staffCenter.IsColorTrue = 5
+ staffCenter.UserTypes = rcpdInfo.UserTypes
+ } else {
+ staffCenter.IsColorTrue = 2
+ }
+ }
+
+ } else {
+ staffCenter.IsColorTrue = 2
+ }
+
}
overallhandle.Result(0, staffCenter, c)
@@ -2418,10 +2493,13 @@ func (s *StaffApi) GetPeopleMainCont(c *gin.Context) {
var manContEs models.PersonnelContent
manContEs.GetCont(map[string]interface{}{"`key`": myCont.Key}, "`mobilephone`")
myInfo.Tel = manContEs.Mobilephone
- var ruleCont workgroup.WorkTimeType
- ruleCont.GetCont(map[string]interface{}{"`id`": myCont.Ruleid}, "`name`")
- myInfo.RuleId = strconv.FormatInt(myCont.Ruleid, 10)
- myInfo.RuleName = ruleCont.Name
+ if myCont.Ruleid != 0 {
+ var ruleCont workgroup.WorkTimeType
+ ruleCont.GetCont(map[string]interface{}{"`id`": myCont.Ruleid}, "`name`")
+ myInfo.RuleId = strconv.FormatInt(myCont.Ruleid, 10)
+ myInfo.RuleName = ruleCont.Name
+ }
+
overallhandle.Result(0, myInfo, c)
}
@@ -2544,6 +2622,19 @@ func (s *StaffApi) GetInsideWorkHistoryList(c *gin.Context) {
// snedCont.SuperiorPostName string //上级职务名称
// snedCont.SuperiorManName []string //上级人员
// snedCont.SubordinatesCount int //下属熟练
+ snedCont.ChangeReason = v.ChangeReason
+ snedCont.SuperiorPostName = v.SuperiorPosition
+ snedCont.SuperiorManName = v.SuperiorName
+ snedCont.SubordinatesCount = v.Subordinates
+
+ snedCont.Bdlx = v.Bdlx
+ snedCont.Gsmc = v.Gsmc
+ snedCont.Yjbm = v.Yjbm
+ snedCont.Ejbm = v.Ejbm
+ snedCont.Gongduan = v.Gongduan
+ snedCont.Dengji = v.Dengji
+ snedCont.Zhiwei = v.Zhiwei
+
sendData = append(sendData, snedCont)
}
overallhandle.Result(0, sendData, c)
@@ -2810,9 +2901,12 @@ func (s *StaffApi) ArchivesListWai(c *gin.Context) {
if requestData.PageSize < 0 {
requestData.PageSize = 10
}
+ // overallhandle.Result(0, requestData, c)
+ // return
// var staffList []models.ManCont
// var staffList []models.PersonArchives
- gormDb := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`").Where("state = 1 AND `number` NOT LIKE ?", "%W%")
+ // gormDb := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`").Where("state = 1 AND `number` NOT LIKE ?", "%W%")
+ gormDb := overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`").Where("`number` NOT LIKE ?", "%W%")
if requestData.Number != "" {
gormDb = gormDb.Where("number LIKE ?", "%"+requestData.Number+"%")
@@ -2829,16 +2923,70 @@ func (s *StaffApi) ArchivesListWai(c *gin.Context) {
// if requestData.Deparment != "" {
// gormDb = gormDb.Where("FIND_IN_SET(?,`deparment`)", requestData.Deparment)
// }
+ var banZu []workgroup.TeamsRules
+ var ruleTypeId int64
+ var ruleTypeName string
if requestData.AdminOrg != 0 {
// var idAry []int64
// idAry = overallhandle.GetDepartmentSun(requestData.AdminOrg, idAry)
// idAry = append(idAry, requestData.AdminOrg)
// gormDb = gormDb.Where("admin_org IN ?", idAry)
+
+ //duo'yuan'h
var sunAry overallhandle.AllSunList[int64]
sunAry.GetAllSunOrg(requestData.AdminOrg)
sunAry.SunList = append(sunAry.SunList, requestData.AdminOrg)
gormDb = gormDb.Where("admin_org IN ?", sunAry.SunList)
+ if requestData.Days != "" {
+ menuCont, _, err := CureeRunRules(requestData.AdminOrg)
+ if err != nil {
+ overallhandle.Result(200, err, c, "此行政组织还未设定班组轮询规则!")
+ return
+ }
+ banZu, err = menuCont.CountOrgTeamsIsDay(requestData.Days)
+ // jsonVal, _ := json.Marshal(banZu)
+ // fmt.Printf("\n\n\n\n\n规则列表:\n %v\n\n\n\n", string(jsonVal))
+ if err == nil {
+ var dayTeamsId []int64
+ for _, v := range banZu {
+ if v.CycleWorkTime != 0 && !overallhandle.IsInTrue(v.TeamsId, dayTeamsId) {
+ dayTeamsId = append(dayTeamsId, v.TeamsId)
+ }
+ ruleTypeId = v.RuleTypeId
+ ruleTypeName = v.RuleTypeName
+ }
+ if requestData.Teamid != 0 {
+ if overallhandle.IsInTrue(requestData.Teamid, dayTeamsId) {
+ gormDb = gormDb.Where("teamid = ?", requestData.Teamid)
+ } else {
+ overallhandle.Result(200, err, c, "当天此行政组织内的此班组处于休息状态!")
+ return
+ }
+
+ } else {
+ if len(dayTeamsId) > 0 {
+ dayTeamsId = append(dayTeamsId, 6)
+ gormDb = gormDb.Where("teamid IN ?", dayTeamsId)
+ }
+
+ }
+ } else {
+ if requestData.Teamid != 0 {
+ gormDb = gormDb.Where("teamid = ?", requestData.Teamid)
+ }
+ }
+
+ } else {
+ if requestData.Teamid != 0 {
+ gormDb = gormDb.Where("teamid = ?", requestData.Teamid)
+ }
+ }
+
+ } else {
+ if requestData.Teamid != 0 {
+ gormDb = gormDb.Where("teamid = ?", requestData.Teamid)
+ }
}
if requestData.Position != 0 {
gormDb = gormDb.Where("position = ?", requestData.Position)
@@ -2848,13 +2996,15 @@ func (s *StaffApi) ArchivesListWai(c *gin.Context) {
// } else {
// gormDb = gormDb.Where("emp_type BETWEEN ? AND ?", 1, 10)
// }
- if requestData.EmpType != 0 {
- gormDb = gormDb.Where("emp_type = ?", requestData.EmpType)
+ if len(requestData.EmpType) > 0 {
+ gormDb = gormDb.Where("emp_type IN ?", requestData.EmpType)
}
if requestData.Role != "" {
gormDb = gormDb.Where("FIND_IN_SET(?,`role`)", requestData.Role)
}
-
+ // if requestData.Teamid != 0 {
+ // gormDb = gormDb.Where("teamid = ?", requestData.Teamid)
+ // }
var total int64
totalErr := gormDb.Count(&total).Error
if totalErr != nil {
@@ -2869,12 +3019,21 @@ func (s *StaffApi) ArchivesListWai(c *gin.Context) {
errGorm = overall.CONSTANT_DB_HR.Where("`id` IN ?", idAry).Find(&manContList).Error
for _, v := range manContList {
+
+ if requestData.Days != "" {
+ v = Shiftdjustment(requestData.Days, v)
+ // fmt.Printf("\n\n\n\n结果:%v\n\n\n\n", v)
+ }
+
var staffInfo peopleManOutList
staffInfo.ManCont = v
var getSpur models.Position
getWhe := overallhandle.MapOut()
- getWhe["id"] = v.Position
- getSpur.GetCont(getWhe, "name", "person_in_charge")
+ if v.Position != 0 {
+ getWhe["id"] = v.Position
+ getSpur.GetCont(getWhe, "name", "person_in_charge")
+ }
+
staffInfo.PositionName = getSpur.Name
// staffInfo.PersonInCharge = getSpur.PersonInCharge
staffInfo.KeyStr = strconv.FormatInt(v.Key, 10)
@@ -2933,16 +3092,193 @@ func (s *StaffApi) ArchivesListWai(c *gin.Context) {
}
}
+ sendMap, _ := GetUesrOffice(v.Key)
+ staffInfo.OfficeList = sendMap
positionAry = append(positionAry, staffInfo)
}
if errGorm != nil {
overallhandle.Result(105, errGorm, c)
} else {
- overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c)
+ sendExpand := overallhandle.MapOut()
+ var sendRuleInfo DaysTeamsRuler
+ if len(banZu) > 0 {
+ sendRuleInfo.RuleTypeId = strconv.FormatInt(ruleTypeId, 10)
+ sendRuleInfo.RuleTypeName = ruleTypeName
+
+ var workTimePer []workgroup.WorkingTimePeriod
+ overall.CONSTANT_DB_HR.Where("`type_id` = ?", ruleTypeId).Find(&workTimePer)
+ var teamRuleMap []DaysTeamsRulerInfo
+ if len(workTimePer) > 0 {
+ for _, v := range workTimePer {
+ for _, bv := range banZu {
+ if v.Id == bv.CycleWorkTime {
+ var teamRuleInfo DaysTeamsRulerInfo
+ teamRuleInfo.TeamsId = strconv.FormatInt(bv.TeamsId, 10) //生产班组ID
+ teamRuleInfo.TeamsName = bv.TeamsName //生产班组名称
+ teamRuleInfo.RuleId = strconv.FormatInt(v.Id, 10) //规则ID
+ teamRuleInfo.RuleName = v.Name //规则名称
+ teamRuleInfo.StartTime = v.StartTime //开始时间
+ teamRuleInfo.EndTime = v.EndTime //结束时间
+ teamRuleMap = append(teamRuleMap, teamRuleInfo)
+ }
+ }
+ }
+ }
+ sort.Slice(teamRuleMap, func(i, j int) bool {
+ return teamRuleMap[i].StartTime < teamRuleMap[j].StartTime
+ })
+ sendRuleInfo.List = teamRuleMap
+
+ }
+ sendExpand["ruler"] = sendRuleInfo
+
+ overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c, sendExpand)
}
}
+/*
+*
+@ 作者: 秦东
+@ 时间: 2025-02-17 14:18:25
+@ 功能: 调班计算
+@ 参数
+
+ #查询时间
+ #当前人
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func Shiftdjustment(day string, use models.ManCont) (pick models.ManCont) {
+ if day == "" || use.Id == 0 {
+ return
+ }
+ var diaoIno customerForm.DiaoBanSetup
+ overall.CONSTANT_DB_AppPlatform.First(&diaoIno)
+ var wvTimeAll overallhandle.DateTimeTotimes
+ wvTimeAll.BaisStrToTimeLing(day)
+ taDay := wvTimeAll.AllTime * 1000
+ // fmt.Printf("当前时间戳:%v\n:%v\n", wvTimeAll.AllTime, taDay)
+
+ redisSqKey := fmt.Sprintf("%v_%v", use.Key, taDay)
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS5)
+ isTrue, tokenInfo := redisClient.Get(redisSqKey)
+ if isTrue {
+ json.Unmarshal([]byte(tokenInfo), &pick)
+ } else {
+ var hbsqCont customerForm.HuanBanShenQing
+ if diaoIno.Id != 0 && diaoIno.Source == "yes" {
+ var sqlDb datacenter.DataBastType
+ sqlDb.Type = diaoIno.SqlType
+ sqlDb.Ip = diaoIno.Ip
+ sqlDb.DataBaseName = diaoIno.DataBaseName
+ sqlDb.Port = int64(diaoIno.Port)
+ sqlDb.UserName = diaoIno.UserName
+ sqlDb.Pwd = diaoIno.Pwd
+ sqlDborm, err := sqlDb.StartDataBast()
+ if err != nil {
+ sqlDborm, err = datacenter.GainDataStorce(diaoIno.SourceId)
+ if err != nil {
+
+ return
+ }
+ }
+ gormDb := sqlDborm.Table(diaoIno.TableKey)
+ gormDb.Where("`states` = 1 AND `creater` = ? AND `dang1zhi2ri4qi1` = ?", use.Key, taDay).First(&hbsqCont)
+ // sqlDB, _ := gormDb.DB()
+ // sqlDB.Close()
+ } else {
+ fmt.Printf("xuan")
+ hbsqCont.GetCont(map[string]interface{}{"`states`": 1, "`creater`": use.Key, "dang1zhi2ri4qi1": taDay}) //当值日期
+ }
+
+ // overall.CONSTANT_DB_CustomerForm.Model(&customerForm.HuanBanShenQing{}).Where("`states` = 1 AND `creater` = ? AND `dang1zhi2ri4qi1` = ?", use.Key).Find(&hbsqCont)
+ if hbsqCont.MastersKey != 0 {
+ var starTask customerForm.TaskRecord
+ starTask.GetCont(map[string]interface{}{"`masters_key`": hbsqCont.MastersKey})
+
+ // fmt.Printf("\n\nstarTask:%v\n\n\n\n", starTask)
+
+ if starTask.Status == 4 {
+ reg1 := regexp.MustCompile(`\(([^)]+)\)`)
+ userAry := reg1.FindAllStringSubmatch(hbsqCont.Diao4huan4ren229452110, -1) //按照正则规则提取数据
+ // fmt.Printf("\n\n按照正则规则提取数据:Diao4huan4ren229452110:%v\n\n userAry:%v\n\n", hbsqCont.Diao4huan4ren229452110, userAry)
+ for _, u := range userAry {
+ vLen := len(u)
+ if len(u) > 0 {
+ pick.GetCont(map[string]interface{}{"`number`": u[vLen-1]})
+ err := overall.CONSTANT_DB_HR.Where("`number` = ? AND `emp_type` BETWEEN ? AND ? ", u[vLen-1], 1, 10).First(&pick).Error
+ if err == nil {
+ pickJson, _ := json.Marshal(pick)
+ redisClient.SetRedisTime(86400)
+ redisClient.Set(redisSqKey, string(pickJson))
+ return
+ }
+ }
+ }
+ //
+ }
+ }
+ }
+ redisSqKeySq := fmt.Sprintf("%v_%v", use.Key, taDay)
+ redisClientSq := grocerystore.RunRedis(overall.CONSTANT_REDIS5)
+ isTrueSq, tokenInfoSq := redisClientSq.Get(redisSqKeySq)
+ if isTrueSq {
+ json.Unmarshal([]byte(tokenInfoSq), &pick)
+ } else {
+ var hbsqContDh customerForm.HuanBanShenQing
+ // hbsqContDh.GetCont(map[string]interface{}{"`states`": 1, "`creater`": use.Key, "`diao4huan4ri4qi1`": taDay}, "`masters_key`", "`creater` ") //调换日期
+ // fmt.Printf("用户信息:use.Number------->%v\n------->%v\n------->%v\n", use.Number, diaoIno.Id, diaoIno.Source)
+ if diaoIno.Id != 0 && diaoIno.Source == "yes" {
+ var sqlDbes datacenter.DataBastType
+ sqlDbes.Type = diaoIno.SqlType
+ sqlDbes.Ip = diaoIno.Ip
+ sqlDbes.DataBaseName = diaoIno.DataBaseName
+ sqlDbes.Port = int64(diaoIno.Port)
+ sqlDbes.UserName = diaoIno.UserName
+ sqlDbes.Pwd = diaoIno.Pwd
+ sqlDbesorm, err := sqlDbes.StartDataBast()
+ // fmt.Printf("用户信息:err----1--->%v\n", err)
+ if err != nil {
+ sqlDbesorm, err = datacenter.GainDataStorce(diaoIno.SourceId)
+ if err != nil {
+
+ return
+ }
+ }
+ gormDb := sqlDbesorm.Table(diaoIno.TableKey)
+ err = gormDb.Where("`diao4huan4ren229452110` REGEXP ? AND `diao4huan4ri4qi1` = ? AND `states` = 1 ", use.Number, taDay).First(&hbsqContDh).Error
+ // fmt.Printf("用户信息:err----3--->%v--->%v\n", err, hbsqContDh)
+ // sqlDB, _ := gormDb.DB()
+ // sqlDB.Close()
+ } else {
+ overall.CONSTANT_DB_CustomerForm.Where("`diao4huan4ren229452110` REGEXP ? AND `diao4huan4ri4qi1` = ? AND `states` = 1 ", use.Number, taDay).First(&hbsqContDh)
+ }
+
+ if hbsqContDh.MastersKey != 0 {
+ var starTaskDh customerForm.TaskRecord
+ starTaskDh.GetCont(map[string]interface{}{"`masters_key`": hbsqContDh.MastersKey})
+ if starTaskDh.Status == 4 {
+ // pick.GetCont(map[string]interface{}{"`key`": hbsqContDh.Creater})
+ err := overall.CONSTANT_DB_HR.Where("`key` = ? AND `emp_type` BETWEEN ? AND ? ", hbsqContDh.Creater, 1, 10).First(&pick).Error
+ if err == nil {
+ pickJsonSq, _ := json.Marshal(pick)
+ redisClientSq.SetRedisTime(86400)
+ redisClientSq.Set(redisSqKeySq, string(pickJsonSq))
+ return
+ }
+ }
+ }
+ }
+ return use
+}
+
/*
*
@ 作者: 秦东
@@ -2977,13 +3313,57 @@ func (s *StaffApi) ArchivesListCont(c *gin.Context) {
if requestData.KeyWords != "" {
gormDb = gormDb.Where("number LIKE ? OR name LIKE ?", "%"+requestData.KeyWords+"%", "%"+requestData.KeyWords+"%")
}
-
+ var banZu []workgroup.TeamsRules
+ var ruleTypeId int64
+ var ruleTypeName string
if requestData.AdminOrg != 0 {
var sunAry overallhandle.AllSunList[int64]
sunAry.GetAllSunOrg(requestData.AdminOrg)
sunAry.SunList = append(sunAry.SunList, requestData.AdminOrg)
gormDb = gormDb.Where("admin_org IN ?", sunAry.SunList)
+ if requestData.Days != "" {
+ menuCont, _, err := CureeRunRules(requestData.AdminOrg)
+ if err != nil {
+ overallhandle.Result(200, err, c, "此行政组织还未设定班组轮询规则!")
+ return
+ }
+ banZu, err = menuCont.CountOrgTeamsIsDay(requestData.Days)
+ if err == nil {
+ var dayTeamsId []int64
+ for _, v := range banZu {
+ if v.CycleWorkTime != 0 && !overallhandle.IsInTrue(v.TeamsId, dayTeamsId) {
+ dayTeamsId = append(dayTeamsId, v.TeamsId)
+ }
+ ruleTypeId = v.RuleTypeId
+ ruleTypeName = v.RuleTypeName
+ }
+ if requestData.Teamid != 0 {
+ if overallhandle.IsInTrue(requestData.Teamid, dayTeamsId) {
+ gormDb = gormDb.Where("teamid = ?", requestData.Teamid)
+ } else {
+ overallhandle.Result(200, err, c, "当天此行政组织内的此班组处于休息状态!")
+ return
+ }
+
+ } else {
+ gormDb = gormDb.Where("teamid IN ?", dayTeamsId)
+ }
+ } else {
+ if requestData.Teamid != 0 {
+ gormDb = gormDb.Where("teamid = ?", requestData.Teamid)
+ }
+ }
+
+ } else {
+ if requestData.Teamid != 0 {
+ gormDb = gormDb.Where("teamid = ?", requestData.Teamid)
+ }
+ }
+ } else {
+ if requestData.Teamid != 0 {
+ gormDb = gormDb.Where("teamid = ?", requestData.Teamid)
+ }
}
if len(requestData.Emptype) > 0 {
gormDb = gormDb.Where("emp_type IN ?", requestData.Emptype)
@@ -3014,12 +3394,19 @@ func (s *StaffApi) ArchivesListCont(c *gin.Context) {
return
}
for _, v := range manContList {
+ if requestData.Days != "" {
+ v = Shiftdjustment(requestData.Days, v)
+
+ }
var staffInfo peopleManOutList
staffInfo.ManCont = v
var getSpur models.Position
getWhe := overallhandle.MapOut()
- getWhe["id"] = v.Position
- getSpur.GetCont(getWhe, "name", "person_in_charge")
+ if v.Position != 0 {
+ getWhe["id"] = v.Position
+ getSpur.GetCont(getWhe, "name", "person_in_charge")
+ }
+
staffInfo.PositionName = getSpur.Name
// staffInfo.PersonInCharge = getSpur.PersonInCharge
staffInfo.KeyStr = strconv.FormatInt(v.Key, 10)
@@ -3066,5 +3453,37 @@ func (s *StaffApi) ArchivesListCont(c *gin.Context) {
positionAry = append(positionAry, staffInfo)
}
- overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c)
+ sendExpand := overallhandle.MapOut()
+ var sendRuleInfo DaysTeamsRuler
+ if len(banZu) > 0 {
+ sendRuleInfo.RuleTypeId = strconv.FormatInt(ruleTypeId, 10)
+ sendRuleInfo.RuleTypeName = ruleTypeName
+
+ var workTimePer []workgroup.WorkingTimePeriod
+ overall.CONSTANT_DB_HR.Where("`type_id` = ?", ruleTypeId).Find(&workTimePer)
+ var teamRuleMap []DaysTeamsRulerInfo
+ if len(workTimePer) > 0 {
+ for _, v := range workTimePer {
+ for _, bv := range banZu {
+ if v.Id == bv.CycleWorkTime {
+ var teamRuleInfo DaysTeamsRulerInfo
+ teamRuleInfo.TeamsId = strconv.FormatInt(bv.TeamsId, 10) //生产班组ID
+ teamRuleInfo.TeamsName = bv.TeamsName //生产班组名称
+ teamRuleInfo.RuleId = strconv.FormatInt(v.Id, 10) //规则ID
+ teamRuleInfo.RuleName = v.Name //规则名称
+ teamRuleInfo.StartTime = v.StartTime //开始时间
+ teamRuleInfo.EndTime = v.EndTime //结束时间
+ teamRuleMap = append(teamRuleMap, teamRuleInfo)
+ }
+ }
+ }
+ }
+ sort.Slice(teamRuleMap, func(i, j int) bool {
+ return teamRuleMap[i].StartTime < teamRuleMap[j].StartTime
+ })
+ sendRuleInfo.List = teamRuleMap
+
+ }
+ sendExpand["ruler"] = sendRuleInfo
+ overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(positionAry)), positionAry, c, sendExpand)
}
diff --git a/api/version1/personnelapi/type.go b/api/version1/personnelapi/type.go
index 9ed8dce..0d5d5e4 100644
--- a/api/version1/personnelapi/type.go
+++ b/api/version1/personnelapi/type.go
@@ -32,8 +32,10 @@ type peopleList struct {
Deparment string `json:"deparment"` //部门
AdminOrg int64 `json:"adminorg"` //所属行政组织
Position int64 `json:"position"` //职位
- EmpType int `json:"emptype"` //用工关系(1:实习生;2:待分配;3:试用员工;4:正式员工;5:停薪留职;6:退休;7:辞退;8:离职)
- Role string `json:"role"`
+ EmpType []int `json:"emptype"` //用工关系(1:实习生;2:待分配;3:试用员工;4:正式员工;5:停薪留职;6:退休;7:辞退;8:离职)
+ Role string `json:"role"` //角色
+ Teamid int64 `json:"teamid"` //班组
+ Days string `json:"days"` //按给定日期获取班组人员
}
// 人员列表输出
@@ -60,11 +62,12 @@ type peopleManOutList struct {
MainDeparmentName string `json:"maindeparmentname"` //主部门
SunMainDeparmentName string `json:"sunmaindeparmentname"` //二级主部门
// DeparmentName string `json:"deparmentname"` //部门名称
- WorkPostName string `json:"workpostname"` //工段名称
- PositionName string `json:"positionname"` //职位
- KeyStr string `json:"keystr"` //身份认证
- TeamName string `json:"teamname"` //班组
- PersonInCharge int `json:"personincharge"` //负责人
+ WorkPostName string `json:"workpostname"` //工段名称
+ PositionName string `json:"positionname"` //职位
+ KeyStr string `json:"keystr"` //身份认证
+ TeamName string `json:"teamname"` //班组
+ PersonInCharge int `json:"personincharge"` //负责人
+ OfficeList []map[string]interface{} `json:"officelist"` //
}
// 获取部门细腻些
@@ -319,7 +322,9 @@ type staffArchivesCont struct {
RuleId string `json:"ruleid"` //轮询规则ID
RuleName string `json:"rulename"` //轮询规则名称
// PersonInCharge int `json:"personincharge"` //负责人(1:是;2:否)
- OrgresList [][]int `json:"orgreslist"` //负责部门列表json
+ OrgresList [][]int `json:"orgreslist"` //负责部门列表json
+ IsColorTrue int `json:"isColorTrue"`
+ UserTypes string `json:"userTypes"` //
}
// 双职工
@@ -477,6 +482,14 @@ type insideHistory struct {
WorkCont string `json:"workcont"` //工作内容
SuperiorPosition string `json:"superior_position"` //上级职务
MinionNumber string `json:"minion_number"` //下属人数
+
+ Bdlx string `json:"bdlx"`
+ Gsmc string `json:"gsmc"`
+ Yjbm string `json:"yjbm"`
+ Ejbm string `json:"ejbm"`
+ Gongduan string `json:"gongduan"`
+ Dengji string `json:"dengji"`
+ Zhiwei string `json:"zhiwei"`
}
// 编辑集团工作履历
@@ -574,6 +587,8 @@ type ArchivesSearch struct {
AdminOrg int64 `json:"adminorg"` //行政组织
Emptype []int `json:"emptype"` //用工关系
Right int `json:"right"` //显示正常
+ Teamid int64 `json:"teamid"` //
+ Days string `json:"days"` //按给定日期获取班组人员
}
// 输出行政组织关系
@@ -652,3 +667,50 @@ type GroupParsingData struct {
Msg []string `json:"msg"`
MsgStr string `json:"msgstr"`
}
+
+// 行政组织面包屑
+type OrgCrumb struct {
+ overallhandle.ConstId
+ Title string `json:"title"`
+}
+
+// 行政组织、人员、角色通用面包屑
+type UserOrgRole struct {
+ OrgCrumb
+ Img string `json:"img"`
+ IsPick int `json:"isPick"`
+ Types int `json:"types"`
+}
+
+// 行政组织获取人员
+type OrgGainPeopel struct {
+ OrgList []OrgCrumb `json:"orgList"`
+ SunOrgList []UserOrgRole `json:"sunOrgList"`
+ UserList []UserOrgRole `json:"userList"`
+}
+
+// 输出行政组织获取人员
+type SendOrgGainPeopel struct {
+ OrgList []OrgCrumb `json:"orgList"`
+ OrgUserList []UserOrgRole `json:"orgUserList"`
+}
+
+// 输出当天班组及时间
+type DaysTeamsRuler struct {
+ RuleTypeId string `json:"ruleTypeId"` //倒班规则
+ RuleTypeName string `json:"ruleTypeName"` //倒班名称
+ List []DaysTeamsRulerInfo `json:"list"`
+}
+
+type DaysTeamsRulerInfo struct {
+ TeamsId string `json:"teamsId"` //生产班组ID
+ TeamsName string `json:"teamsName"` //生产班组名称
+ RuleId string `json:"ruleId"` //规则ID
+ RuleName string `json:"ruleName"` //规则名称
+ StartTime string `json:"startTime"` //开始时间
+ EndTime string `json:"endTime"` //结束时间
+}
+type OrgAndLevel struct {
+ AdminOrg int64
+ Level int64
+}
diff --git a/api/version1/personnelapi/types.go b/api/version1/personnelapi/types.go
index f95e447..ebd2ec9 100644
--- a/api/version1/personnelapi/types.go
+++ b/api/version1/personnelapi/types.go
@@ -1,8 +1,12 @@
package personnelapi
-import "hr_server/models"
+import (
+ "hr_server/models"
+ "hr_server/models/workgroup"
+ "hr_server/overall/overallhandle"
+)
-//添加员工参数
+// 添加员工参数
type addKingdeePersonneles struct {
Number string `json:"fnumber"` //工号1
Name string `json:"name"` //姓名1
@@ -90,7 +94,7 @@ type addKingdeePersonneles struct {
PersonInCharge int `json:"personInCharge"` //部门负责人(1:是;2:否)
}
-//家庭成员
+// 家庭成员
type memberOfFamilyes struct {
emergencyContact
Company string `json:"company"` //公司
@@ -100,7 +104,7 @@ type memberOfFamilyes struct {
IdStr string `json:"idstr"`
}
-//集团内部工作履历
+// 集团内部工作履历
type insideHistoryer struct {
Group string `json:"group"` //集团
Company string `json:"company"` //公司
@@ -116,7 +120,7 @@ type insideHistoryer struct {
// Grop string `json:"grop"` //工段
}
-//人员主档案信息
+// 人员主档案信息
type MyMainCont struct {
Id string `json:"id"`
Key string `json:"key"` //员工key
@@ -145,36 +149,45 @@ type MyMainCont struct {
RuleName string `json:"rulename"` //轮询规则名称
}
-//输出学历
+// 输出学历
type OutpersonCont struct {
models.PersonnelEducation
AdmissionTimeStr string `json:"admissiontimestr"` //入学时间
GraduationTimeStr string `json:"graduationtimestr"` //毕业时间
}
-//输出集团内部工作经历
+// 输出集团内部工作经历
type outInsetWork struct {
- Id string `json:"id"` //
- StartTime string `json:"starttimg"` //开始时间
- EndTime string `json:"endtimg"` //结束时间
- AllOrgName string `json:"allorgname"` //性质组织全称
- OrgId int64 `json:"orgid"` //行政组织ID
- PostId int64 `json:"postid"` //职务ID
- PostName string `json:"postname"` //职务名称
- PostLevel int64 `json:"postnlevel"` //职务等级
- TeamId int64 `json:"teamid"` //班组ID
- TeamName string `json:"teamname"` //班组名称
- ChangeType int `json:"changetype"` //调动类型
- ChangeTypeName string `json:"changetypename"` //调动类型
- AssignType int `json:"assigntype"` //1、主职;2:兼职
- SuperiorPostName string `json:"superiorpostname"` //上级职务名称
- SuperiorManName []string `json:"superiormanname"` //上级人员
- SubordinatesCount int `json:"subordinatescount"` //下属熟练
- JobId int64 `json:"jobid"` //职务
- JobName string `json:"jobname"` //职务名称
-}
-
-//输出集团内部工作经历
+ Id string `json:"id"` //
+ StartTime string `json:"starttimg"` //开始时间
+ EndTime string `json:"endtimg"` //结束时间
+ AllOrgName string `json:"allorgname"` //性质组织全称
+ OrgId int64 `json:"orgid"` //行政组织ID
+ PostId int64 `json:"postid"` //职务ID
+ PostName string `json:"postname"` //职务名称
+ PostLevel int64 `json:"postnlevel"` //职务等级
+ TeamId int64 `json:"teamid"` //班组ID
+ TeamName string `json:"teamname"` //班组名称
+ ChangeType int `json:"changetype"` //调动类型
+ ChangeTypeName string `json:"changetypename"` //调动类型
+ AssignType int `json:"assigntype"` //1、主职;2:兼职
+ SuperiorPostName string `json:"superiorpostname"` //上级职务名称
+ SuperiorManName string `json:"superiormanname"` //上级人员
+ SubordinatesCount int `json:"subordinatescount"` //下属熟练
+ JobId int64 `json:"jobid"` //职务
+ JobName string `json:"jobname"` //职务名称
+ ChangeReason string `json:"changeReason"` //变动原因
+
+ Bdlx string `json:"bdlx"`
+ Gsmc string `json:"gsmc"`
+ Yjbm string `json:"yjbm"`
+ Ejbm string `json:"ejbm"`
+ Gongduan string `json:"gongduan"`
+ Dengji string `json:"dengji"`
+ Zhiwei string `json:"zhiwei"`
+}
+
+// 输出集团内部工作经历
type outWorkHistory struct {
models.WorkHistory
StartTime string `json:"starttimg"` //开始时间
@@ -182,7 +195,7 @@ type outWorkHistory struct {
}
-//编辑人员行政组织关系
+// 编辑人员行政组织关系
type EditOrgPeople struct {
Id string `json:"id"`
OrgId int64 `json:"orgid"` //行政组织
@@ -196,10 +209,11 @@ type EditOrgPeople struct {
Resallorg []int `json:"resallorg"` //负责部门列表
}
-// type OrgresListStruct struct{
-// []int
-// }
-//编辑人员主体信息
+// type OrgresListStruct struct{
+// []int
+// }
+//
+// 编辑人员主体信息
type EditContData struct {
Id string `json:"id"`
Name string `json:"name"` //姓名
@@ -235,14 +249,14 @@ type EditContData struct {
Maritalstatus int `json:"maritalstatus"` //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异) int
}
-//判断主职
+// 判断主职
type judgeMainPost struct {
UserKey string `json:"userkey"` //
// OrgId string `json:"orgid"` //行政组织
// PostId string `json:"postid"` //岗位
}
-//性格色彩试题格式
+// 性格色彩试题格式
type TestPageColor struct {
TestNumber int `json:"testnumber"` //题号
CheckedVal int `json:"checkedval"` //选项
@@ -252,14 +266,14 @@ type TestPageColorStr struct {
CheckedVal string `json:"checkedval"` //选项
}
-//性格色彩结果
+// 性格色彩结果
type TestPageColorVal struct {
Strval int `json:"strval"` //题号
Name string `json:"name"` //选项
Setval int `json:"setval"` //选项
}
-//性格结果
+// 性格结果
type TestPageColorResult struct {
TestNumber []string `json:"testnumber"` //题号
CheckedVal []int `json:"checkedval"` //选项
@@ -272,10 +286,151 @@ type ExcelInfo struct {
ProductSlaveTitle string `json:"ProductSlaveTitle"`
}
-//解析上传到redis中的数据
+// 解析上传到redis中的数据
type AnaRedisKB struct {
Number int `json:"number"`
RedisListKey string `json:"redisListKey"`
MeritsYearIng map[string]int `json:"meritsYearIng"`
RewPunYearsIng map[string]int `json:"rewPunYearsIng"`
}
+
+type DingWeiInfo struct {
+ DateTime string `json:"dateTime"`
+ Area int `json:"area"`
+ FactoryId string `json:"factoryId"`
+ Latitude float64 `json:"latitude"`
+ FactoryName string `json:"factoryName"`
+ DeviceNo string `json:"deviceNo"`
+ EmpNo string `json:"empNo"`
+ IsOffLine string `json:"isOffLine"`
+ Layer string `json:"layer"`
+ CrossX float64 `json:"crossX"`
+ CrossY float64 `json:"crossY"`
+ Specifictype string `json:"specifictype"`
+ EmpName string `json:"empName"`
+ Longitude float64 `json:"longitude"`
+ UserCode string `json:"userCode"` //人员唯一标识
+ UserName string `json:"userName"` //人员姓名
+ UserPhone string `json:"userPhone"` //联系电话
+ UserType string `json:"userType"` //人员类型
+ UserOrgCode string `json:"userOrgCode"` //所属单位唯一标志
+ UserOrgName string `json:"userOrgName"` //所属单位名称
+ Cardld string `json:"cardld"` //绑定设备唯一编码
+}
+
+type DingWeiData struct {
+ Data []DingWeiInfo `json:"data"`
+ Msginfo string `json:"msginfo"`
+ Status int `json:"status"`
+ Total int `json:"total"`
+}
+
+type RewPunType struct {
+ overallhandle.PublicId[string]
+ overallhandle.PageTurning
+ overallhandle.StateOverall
+}
+
+type SendRewPunInfo struct {
+ models.RewardsPenalties
+ TimedataStr string `json:"timedataStr" gorm:"-"`
+ LevelName string `json:"levelName" gorm:"-"`
+ RewPunClassName string `json:"rewPunClassName" gorm:"-"`
+}
+
+type SendMeritslog struct {
+ models.Meritslog
+ TimedataStr string `json:"timedataStr" gorm:"-"`
+}
+
+type SendSheHuiGuanxi struct {
+ Channel string `json:"channel"`
+ Jobstartdate string `json:"jobstartdate"`
+ Entrydate string `json:"entrydate"`
+ SheHuiGongli float64 `json:"shehuiGongli"`
+ JiTuanGongli float64 `json:"jiTuanGongli"`
+}
+
+type SendAcademicTitle struct {
+ models.AcademicTitle
+ TimeStr string `json:"timeStr" gorm:"-"`
+}
+type SendCertificateHonors struct {
+ models.CertificateHonors
+ TypeStr string `json:"typeStr" gorm:"-"`
+ TimeDataStr string `json:"timeDataStr" gorm:"-"`
+ EndTimeStr string `json:"endTimeStr" gorm:"-"`
+}
+type HonorsType struct {
+ overallhandle.PublicId[string]
+ overallhandle.PageTurning
+ overallhandle.StateOverall
+ Types int `json:"types"`
+}
+
+// 按行政组织解析数据
+type AnaRedisKBOrg struct {
+ OrgId string `json:"orgId"`
+ AnaRedisKB
+}
+
+// 职务对应等级
+type PositionlrInfo struct {
+ Id int64 `json:"id" `
+ DutId int64 `json:"dutId"`
+ Weight int64 `json:"weight" `
+}
+
+// 员工考评
+type StaffAppraisal struct {
+ Total int64 `json:"total"`
+ Years int64 `json:"years"`
+ Levels int `json:"levels"`
+ errMsg []string `json:"errMsg"`
+}
+
+// 员工考评成绩
+type StaffAppLevel struct {
+ OrgId string `json:"orgId"`
+ RedisListKey string `json:"redisListKey"`
+ Total int64 `json:"total"`
+ Years int64 `json:"years"`
+ Levels int `json:"levels"`
+ Number int `json:"number"`
+}
+
+// 查看绩效成绩详情
+type JiXiaoChengji struct {
+ UserKey string `json:"userKey"`
+ Years string `json:"years"`
+ Levels int `json:"levels"`
+}
+
+// 输出绩效成绩详情
+type SendStaffInfo struct {
+ Comment []string `json:"comment"`
+ EvaluationItems map[int]float64 `json:"evaluationItems"`
+ Average float64 `json:"average"`
+ Levels string `json:"levels"`
+}
+
+//获取班组信息
+
+type TimeSetupPeople struct {
+ TimeId string `json:"timeId"`
+ RedisListKey string `json:"redisListKey"`
+ Number int64 `json:"number"`
+}
+
+type GenesInfo struct {
+ workgroup.Genesis
+ TypeIdStr string `json:"typeIdStr" gorm:"-"` //排班类型
+ TypeName string `json:"typeName" gorm:"-"` //排班类型
+ PeriodName string `json:"periodName" gorm:"-"` //工作时段
+ RulesTime string `json:"rulesTime" gorm:"-"` //轮询起点
+ RulesName string `json:"rulesName" gorm:"-"` //轮询起点名称
+ RulesSort int `json:"rulesSort" gorm:"-"` //轮询起点排序
+ BegainTime string `json:"begainTime" gorm:"-"` //源点时间
+ StartTimeStr string `json:"startTime" gorm:"-"` //
+ EndTimeStr string `json:"endTime" gorm:"-"` //
+}
diff --git a/api/version1/personnelapi/uploadFileredis.go b/api/version1/personnelapi/uploadFileredis.go
index 6b82af3..930ad5d 100644
--- a/api/version1/personnelapi/uploadFileredis.go
+++ b/api/version1/personnelapi/uploadFileredis.go
@@ -35,13 +35,14 @@ import (
#
*/
func (s *StaffApi) UploadUserFilesRedis(c *gin.Context) {
+ orgId := c.Request.FormValue("orgId")
fileInfo, fileHeader, fileErr := c.Request.FormFile("file")
if fileErr != nil {
overallhandle.Result(1, fileErr, c)
return
}
tageExt := path.Ext(fileHeader.Filename)
- fmt.Printf("tageExt:%v\n", tageExt)
+ // fmt.Printf("tageExt:%v\n", tageExt)
fileType := overallhandle.JudgeUpFileType(tageExt)
if fileType != 5 {
overallhandle.Result(1, fileType, c, "您上传的不是电子表格!请上传正确的文件!")
@@ -55,23 +56,28 @@ func (s *StaffApi) UploadUserFilesRedis(c *gin.Context) {
}
redisListKey := fmt.Sprintf("ExcelImport:PeopleList:%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, overallhandle.OnlyOneNumber(1))
var userInfoData GroupParsingData
- totalNum, meritsYearIng, rewPunYearsIng := userInfoData.ReadExcelRedis(xlsx, redisListKey)
+ totalNum, meritsYearIng, rewPunYearsIng := userInfoData.AnalysAssessYears(xlsx, redisListKey, orgId)
sendData := overallhandle.MapOut()
sendData["redisListKey"] = redisListKey
sendData["totalNum"] = totalNum
sendData["meritsYearIng"] = meritsYearIng
sendData["rewPunYearsIng"] = rewPunYearsIng
+ sendData["orgId"] = orgId
+ // sendData["orgHeader"] = orgHeader
+ // sendData["orgErr"] = orgErr
+
overallhandle.Result(0, sendData, c)
}
-// ReadExcel .读取excel 转成切片
-func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) {
+// ReadExcel .读取excel 转成切片 orgId : 当前行政组织
+func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey, orgId string) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) {
rows := xlsx.GetRows(xlsx.GetSheetName(xlsx.GetActiveSheetIndex()))
isDateYear := time.Now().Year()
+
//获取绩效年度
meritsYear := make(map[int]int)
- if rows[1][289] != "" {
- yearAry := strings.Split(rows[1][289], "年")
+ if rows[1][288] != "" {
+ yearAry := strings.Split(rows[1][288], "年")
if len(yearAry) > 0 {
yearVal, _ := strconv.Atoi(yearAry[0])
@@ -80,8 +86,9 @@ func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string)
} else {
meritsYear[0] = isDateYear - 3
}
- if rows[1][290] != "" {
- yearAry := strings.Split(rows[1][290], "年")
+
+ if rows[1][289] != "" {
+ yearAry := strings.Split(rows[1][289], "年")
if len(yearAry) > 0 {
yearVal, _ := strconv.Atoi(yearAry[0])
meritsYear[1] = yearVal
@@ -89,8 +96,8 @@ func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string)
} else {
meritsYear[1] = isDateYear - 2
}
- if rows[1][291] != "" {
- yearAry := strings.Split(rows[1][291], "年")
+ if rows[1][290] != "" {
+ yearAry := strings.Split(rows[1][290], "年")
if len(yearAry) > 0 {
yearVal, _ := strconv.Atoi(yearAry[0])
meritsYear[2] = yearVal
@@ -101,8 +108,8 @@ func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string)
meritsYearIng = meritsYear
//获取奖惩年度
rewPunYears := make(map[int]int)
- if rows[2][299] != "" {
- jcYearAry := strings.Split(rows[2][299], "奖惩")
+ if rows[2][298] != "" {
+ jcYearAry := strings.Split(rows[2][298], "奖惩")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
@@ -111,8 +118,9 @@ func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string)
} else {
rewPunYears[0] = isDateYear - 3
}
- if rows[2][304] != "" {
- jcYearAry := strings.Split(rows[2][304], "奖惩")
+
+ if rows[2][303] != "" {
+ jcYearAry := strings.Split(rows[2][303], "奖惩")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
@@ -121,8 +129,8 @@ func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string)
} else {
rewPunYears[1] = isDateYear - 2
}
- if rows[2][309] != "" {
- jcYearAry := strings.Split(rows[2][309], "奖惩")
+ if rows[2][308] != "" {
+ jcYearAry := strings.Split(rows[2][308], "奖惩")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
@@ -132,7 +140,6 @@ func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string)
rewPunYears[2] = isDateYear - 1
}
rewPunYearsIng = rewPunYears
-
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
redisClient.SetRedisTime(86400)
totalNum = 0
@@ -179,7 +186,7 @@ func (s *StaffApi) AnalysisRedisExelect(c *gin.Context) {
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
redisListLenght, err := redisClient.Llen(requestData.RedisListKey)
if err != nil {
- overallhandle.Result(1, err, c, "数据获取识别!没有找到数据!")
+ overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ")
return
}
@@ -209,14 +216,24 @@ func (s *StaffApi) AnalysisRedisExelect(c *gin.Context) {
}
var groupManCont GroupParsingData
groupManCont.GroupParsingDataInfoRedis(manCont, meritsYear, rewPunYears)
- // fmt.Printf("执行完222毕删除列表键%v-%v-%v\n", redisListLenght, requestData.Number, redisListLenght-1 == int64(requestData.Number))
+ // groupManCont.ParsingUserInfoOfExcel(manCont, meritsYear, rewPunYears,requestData.)
+ // // fmt.Printf("执行完222毕删除列表键%v-%v-%v\n", redisListLenght, requestData.Number, redisListLenght-1 == int64(requestData.Number))
if redisListLenght-1 == int64(requestData.Number) {
- //执行完毕删除列表键
- redisClient.Lrange(requestData.RedisListKey, 0, -1)
+ // 执行完毕删除列表键
+ redisClient.Ltrim(requestData.RedisListKey, 1, 0)
redisClient.DelKey(requestData.RedisListKey)
- // fmt.Printf("执行完毕删除列表键%v\n", requestData.RedisListKey)
+ // fmt.Printf("执行完毕删除列表键RedisListKey:%v------>lAry:%v------>lerr:%v------>dErr:%v\n", requestData.RedisListKey, lAry, lerr, dErr)
+
+ // fmt.Printf("redisListLenght:%v------>Number:%v\n", redisListLenght-1, requestData.Number)
}
- overallhandle.Result(0, groupManCont, c)
+
+ sendData := make(map[string]interface{})
+ sendData["redisListLenght"] = redisListLenght
+ sendData["Number"] = requestData.Number
+ sendData["RedisListKey"] = requestData.RedisListKey
+ sendData["meritsYear"] = meritsYear
+ sendData["rewPunYears"] = rewPunYears
+ overallhandle.Result(0, sendData, c)
}
/*
@@ -241,16 +258,532 @@ func (s *StaffApi) AnalysisRedisExelect(c *gin.Context) {
func (g *GroupParsingData) GroupParsingDataInfoRedis(list map[int]string, meritsYear, rewPunYearsmap map[int]int) {
g.IsOk = false
g.UserNum = list[1]
+ // listJson, err := json.Marshal(list)
+ // fmt.Printf("list: %v\n%v\n", err, string(listJson))
if list[1] != "" {
var myCont models.PersonArchives
- err := myCont.GetCont(map[string]interface{}{"`number`": list[1]}, "`key`")
+ err := myCont.RedisCont(list[2], 1)
if err != nil {
g.IsOk = true
} else {
g.UserKey = myCont.Key
}
- g.ProcessMainTable(list, meritsYear, rewPunYearsmap)
+ g.ProcessMainTable(list, meritsYear, rewPunYearsmap, "309")
} else {
g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[2], time.Now().Unix()))
}
}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-08-26 13:52:56
+@ 功能: 按行政组织解析人员信息
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) AnalysisRedisOrgExelect(c *gin.Context) {
+ var requestData AnaRedisKBOrg
+ err := c.ShouldBindJSON(&requestData)
+ if err != nil {
+ overallhandle.Result(100, err, c)
+ return
+ }
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
+ redisListLenght, err := redisClient.Llen(requestData.RedisListKey)
+ if err != nil {
+ overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ")
+ return
+ }
+
+ redisVal, err := redisClient.Lindex(requestData.RedisListKey, int64(requestData.Number))
+ if err != nil {
+ overallhandle.Result(1, err, c, "数据获取识别!没有找到数据!")
+ return
+ }
+ var jieguo []string
+ err = json.Unmarshal([]byte(redisVal), &jieguo)
+ if err != nil {
+ overallhandle.Result(1, err, c, "数据格式不正取!")
+ }
+ manCont := make(map[int]string)
+ for i, v := range jieguo {
+ manCont[i] = v
+ }
+ meritsYear := make(map[int]int)
+ for i, v := range requestData.MeritsYearIng {
+ iInt, _ := strconv.Atoi(i)
+ meritsYear[iInt] = v
+ }
+ rewPunYears := make(map[int]int)
+ for i, v := range requestData.RewPunYearsIng {
+ iInt, _ := strconv.Atoi(i)
+ rewPunYears[iInt] = v
+ }
+ var groupManCont GroupParsingData
+ // groupManCont.GroupParsingDataInfoRedis(manCont, meritsYear, rewPunYears)
+ groupManCont.ParsingUserInfoOfExcel(manCont, meritsYear, rewPunYears, requestData.OrgId)
+ // // fmt.Printf("执行完222毕删除列表键%v-%v-%v\n", redisListLenght, requestData.Number, redisListLenght-1 == int64(requestData.Number))
+ if redisListLenght-1 == int64(requestData.Number) {
+ // 执行完毕删除列表键
+ redisClient.Ltrim(requestData.RedisListKey, 1, 0)
+ redisClient.DelKey(requestData.RedisListKey)
+ // fmt.Printf("执行完毕删除列表键RedisListKey:%v------>lAry:%v------>lerr:%v------>dErr:%v\n", requestData.RedisListKey, lAry, lerr, dErr)
+
+ // fmt.Printf("redisListLenght:%v------>Number:%v\n", redisListLenght-1, requestData.Number)
+ }
+
+ sendData := make(map[string]interface{})
+ sendData["redisListLenght"] = redisListLenght
+ sendData["Number"] = requestData.Number
+ sendData["RedisListKey"] = requestData.RedisListKey
+ sendData["meritsYear"] = meritsYear
+ sendData["rewPunYears"] = rewPunYears
+ sendData["msg"] = groupManCont.Msg
+ sendData["msgStr"] = groupManCont.MsgStr
+ overallhandle.Result(0, sendData, c)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2025-01-08 08:18:47
+@ 功能: 解析考评人员成绩统计表
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (a *StaffApi) UpLoadPeopelMerits(c *gin.Context) {
+ orgId := c.Request.FormValue("orgId")
+ fileInfo, fileHeader, fileErr := c.Request.FormFile("file")
+ if fileErr != nil {
+ overallhandle.Result(1, fileErr, c)
+ return
+ }
+ tageExt := path.Ext(fileHeader.Filename)
+ // fmt.Printf("tageExt:%v\n", tageExt)
+ fileType := overallhandle.JudgeUpFileType(tageExt)
+ if fileType != 5 {
+ overallhandle.Result(1, fileType, c, "您上传的不是电子表格!请上传正确的文件!")
+ return
+ }
+
+ xlsx, err := excelize.OpenReader(fileInfo)
+ if err != nil {
+ overallhandle.Result(2, err, c)
+ return
+ }
+ redisListKey := fmt.Sprintf("ExcelImport:StaffEvaluation:%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, overallhandle.OnlyOneNumber(2))
+
+ rows := xlsx.GetRows(xlsx.GetSheetName(xlsx.GetActiveSheetIndex()))
+ var listCont StaffAppraisal
+ switch orgId {
+ case "309": //高科
+ listCont.AnalysisExcel(rows, redisListKey)
+ default:
+ }
+ sendData := overallhandle.MapOut()
+ sendData["orgId"] = orgId
+ sendData["redisListKey"] = redisListKey
+ sendData["total"] = listCont.Total
+ sendData["years"] = listCont.Years
+ sendData["levels"] = listCont.Levels
+ sendData["errMsg"] = listCont.errMsg
+ overallhandle.Result(0, sendData, c)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2025-01-08 13:03:16
+@ 功能: 考评人员成绩统计表 数据写入Redis
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffAppraisal) AnalysisExcel(list [][]string, redisKey string) {
+ // fmt.Printf("list[0][2]---->%v\n\nlist[1][2]---->%v\n", list[2][0], list[2][1])
+ s.Years, _ = strconv.ParseInt(list[2][0], 10, 64)
+ s.Levels = overallhandle.OutPutAnalysisExcelType(list[2][1])
+
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
+ redisClient.SetRedisTime(86400)
+ // fmt.Printf("list=====>%v\n", len(list))
+ var listAllNumber int64
+ for i, v := range list {
+ if i > 3 {
+ jsonStr, _ := json.Marshal(v)
+ fmt.Printf("jsonStr=====>%vr=====>%v\n", v[0], string(jsonStr))
+ if v[0] != "" {
+ redisClient.Lpush(redisKey, string(jsonStr))
+ listAllNumber++
+ } else {
+ errMsg := fmt.Sprintf("%v没有工号!无法识别!不可录入数据为:", v[1], string(jsonStr))
+ s.errMsg = append(s.errMsg, errMsg)
+ }
+
+ }
+ }
+ s.Total = listAllNumber
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2025-01-08 15:55:27
+@ 功能: 解析人员绩效成绩
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) AnalysisRedisOrgStaffExelect(c *gin.Context) {
+ var requestData StaffAppLevel
+ err := c.ShouldBindJSON(&requestData)
+ if err != nil {
+ overallhandle.Result(100, err, c)
+ return
+ }
+ if requestData.RedisListKey == "" {
+ overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ")
+ return
+ }
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
+ redisListLenght, err := redisClient.Llen(requestData.RedisListKey)
+ if err != nil {
+ overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ")
+ return
+ }
+
+ redisVal, err := redisClient.Lindex(requestData.RedisListKey, int64(requestData.Number))
+ if err != nil {
+ overallhandle.Result(1, err, c, "数据获取识别!没有找到数据!")
+ return
+ }
+ var jieguo []string
+ err = json.Unmarshal([]byte(redisVal), &jieguo)
+ if err != nil {
+ overallhandle.Result(1, err, c, "数据格式不正取!")
+ }
+ var errMsg []string
+ var msgStr string
+ // manCont := make(map[int]string)
+ var fenzhi []string
+ var pingyu string
+ var myCode string
+ var myName string
+ for i, v := range jieguo {
+ // manCont[i] = v
+ fmt.Printf("jieguo====>%v---------------->%T-------->%v\n", i, v, v)
+ if i >= 2 && i <= 11 {
+ fenzhi = append(fenzhi, v)
+ }
+ if i == 0 {
+ myCode = v
+ }
+ if i == 1 {
+ myName = v
+ }
+ if i == 12 {
+ // pingyu = strings.Split(v, "#A#")
+ pingyu = v
+ }
+ }
+ if redisListLenght-1 == int64(requestData.Number) {
+ // 执行完毕删除列表键
+ redisClient.Ltrim(requestData.RedisListKey, 1, 0)
+ redisClient.DelKey(requestData.RedisListKey)
+ }
+
+ if myCode != "" {
+ var myInfo models.PersonArchives
+ err = myInfo.GetCont(map[string]interface{}{"`number`": myCode})
+ fmt.Printf("%v\n%v\n", myInfo.Name, myInfo.Key)
+ if err != nil {
+ msgStr = fmt.Sprintf("序号:%v--->%v:没有此人信息--->%v", requestData.Number, myName, time.Now().Unix())
+ errMsg = append(errMsg, msgStr)
+ } else {
+ var staffKaoPing models.PerstatiSticsevaluators
+ err = staffKaoPing.GetCont(map[string]interface{}{"`userKey`": myInfo.Key, "`timeYear`": requestData.Years})
+
+ fenzhiAry := strings.Join(fenzhi, ",")
+ if err != nil {
+ staffKaoPing.Userkey = myInfo.Key
+ staffKaoPing.TimeYear = requestData.Years
+ staffKaoPing.Levels = int64(requestData.Levels)
+ staffKaoPing.EvaluationItems = fenzhiAry
+ staffKaoPing.Comment = pingyu
+ staffKaoPing.Time = time.Now().Unix()
+ err = overall.CONSTANT_DB_HR.Create(&staffKaoPing).Error
+ if err != nil {
+ msgStr = fmt.Sprintf("%v[%v]数据处理失败!--->%v", myName, myCode, time.Now().Unix())
+ } else {
+ msgStr = fmt.Sprintf("%v[%v]数据处理完成!--->%v", myName, myCode, time.Now().Unix())
+ }
+ errMsg = append(errMsg, msgStr)
+ } else {
+ editCont := overallhandle.MapOut()
+ if int64(requestData.Levels) != staffKaoPing.Levels {
+ editCont["`levels`"] = requestData.Levels
+ }
+ if fenzhiAry != staffKaoPing.EvaluationItems {
+ editCont["`evaluationItems`"] = fenzhiAry
+ }
+ if pingyu != staffKaoPing.Comment {
+ editCont["`comment`"] = pingyu
+ }
+ if len(editCont) > 0 {
+ editCont["`time`"] = time.Now().Unix()
+ err = staffKaoPing.EiteCont(map[string]interface{}{"`id`": staffKaoPing.Id}, editCont)
+ if err != nil {
+ msgStr = fmt.Sprintf("%v[%v]数据处理失败!--->%v", myName, myCode, time.Now().Unix())
+ } else {
+ msgStr = fmt.Sprintf("%v[%v]数据处理完成!--->%v", myName, myCode, time.Now().Unix())
+ }
+ errMsg = append(errMsg, msgStr)
+ } else {
+ msgStr = fmt.Sprintf("%v[%v]数据处理完成!--->%v", myName, myCode, time.Now().Unix())
+ errMsg = append(errMsg, msgStr)
+ }
+ }
+ }
+ } else {
+ msgStr = fmt.Sprintf("序号:%v--->%v:没有工号--->%v", requestData.Number, myName, time.Now().Unix())
+ errMsg = append(errMsg, msgStr)
+
+ }
+
+ sendData := make(map[string]interface{})
+ sendData["redisListLenght"] = redisListLenght
+ sendData["Number"] = requestData.Number
+ sendData["RedisListKey"] = requestData.RedisListKey
+
+ sendData["fenzhi"] = fenzhi
+ sendData["pingyu"] = pingyu
+
+ sendData["msg"] = errMsg
+ sendData["msgStr"] = msgStr
+ overallhandle.Result(0, sendData, c)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2025-01-09 08:48:09
+@ 功能: 获取个人年份评估成绩详情
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) GainMyChengjiYears(c *gin.Context) {
+ var requestData JiXiaoChengji
+ err := c.ShouldBindJSON(&requestData)
+ if err != nil {
+ overallhandle.Result(100, err, c)
+ return
+ }
+ if requestData.UserKey == "" {
+ overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ")
+ return
+ }
+ if requestData.Years == "" {
+ requestData.Years = overallhandle.UnixTimeToDay(time.Now().Unix(), 16)
+ }
+ var staffKaoPing models.PerstatiSticsevaluators
+ err = staffKaoPing.GetCont(map[string]interface{}{"`userKey`": requestData.UserKey, "`timeYear`": requestData.Years})
+ if err != nil {
+ overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ")
+ return
+ }
+ var sendData SendStaffInfo
+ sendData.Comment = strings.Split(staffKaoPing.Comment, "#A#")
+ scoreAry := strings.Split(staffKaoPing.EvaluationItems, ",")
+ var sunScore float64 = 0
+ scoreMap := make(map[int]float64)
+ for i, v := range scoreAry {
+ vInt, _ := strconv.ParseFloat(v, 64)
+ scoreMap[i], _ = strconv.ParseFloat(strconv.FormatFloat(vInt, 'f', 1, 64), 64)
+ sunScore = sunScore + vInt
+ // vFloat, _ := strconv.ParseFloat(strconv.FormatFloat(vInt, 'f', 1, 64), 64)
+ // scoreMap[i] = vFloat
+ // sunScore = sunScore + vFloat
+ }
+ sendData.EvaluationItems = scoreMap
+ sumNum := len(scoreAry)
+ if sumNum == 0 {
+ sumNum = 1
+ }
+ sendData.Levels = overallhandle.OutPutAnalysisExcelTypeStr(staffKaoPing.Levels)
+ // sendData.Average = float64(sunScore) / float64(sumNum)
+ sendData.Average, _ = strconv.ParseFloat(strconv.FormatFloat(float64(sunScore), 'f', 1, 64), 64)
+
+ // sendData.Average, _ = strconv.ParseFloat(strconv.FormatFloat(float64(sunScore)/float64(sumNum), 'f', 1, 64), 64)
+ overallhandle.Result(0, sendData, c)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2025-01-14 09:02:57
+@ 功能: 上传班组设定人员
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) UploadTiemsManFiles(c *gin.Context) {
+ timeId := c.Request.FormValue("timeId")
+ fileInfo, fileHeader, fileErr := c.Request.FormFile("file")
+ if fileErr != nil {
+ overallhandle.Result(1, fileErr, c)
+ return
+ }
+ tageExt := path.Ext(fileHeader.Filename)
+ fileType := overallhandle.JudgeUpFileType(tageExt)
+ if fileType != 5 {
+ overallhandle.Result(1, fileType, c, "您上传的不是电子表格!请上传正确的文件!")
+ return
+ }
+ xlsx, err := excelize.OpenReader(fileInfo)
+ if err != nil {
+ overallhandle.Result(2, err, c)
+ return
+ }
+ redisListKey := fmt.Sprintf("ExcelImport:TimesList:%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, overallhandle.OnlyOneNumber(1))
+ rows := xlsx.GetRows(xlsx.GetSheetName(xlsx.GetActiveSheetIndex()))
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
+ redisClient.SetRedisTime(86400)
+ totalNum := 0
+ for i, row := range rows {
+ if i > 0 {
+ jsonStr, _ := json.Marshal(row)
+ redisClient.Lpush(redisListKey, jsonStr)
+ totalNum++
+ }
+ }
+ sendData := overallhandle.MapOut()
+ sendData["redisListKey"] = redisListKey
+ sendData["totalNum"] = totalNum
+ sendData["timeId"] = timeId
+ overallhandle.Result(0, sendData, c)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2025-01-14 09:39:24
+@ 功能: 解析人员信息!并写入数据库
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) AnalysisRedisTimesExelect(c *gin.Context) {
+ var requestData TimeSetupPeople
+ err := c.ShouldBindJSON(&requestData)
+ if err != nil {
+ overallhandle.Result(100, err, c)
+ return
+ }
+ if requestData.RedisListKey == "" {
+ overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ")
+ return
+ }
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
+ redisListLenght, err := redisClient.Llen(requestData.RedisListKey)
+ if err != nil {
+ overallhandle.Result(1, err, c, "数据获取识别!没有找到数据! ")
+ return
+ }
+ redisVal, err := redisClient.Lindex(requestData.RedisListKey, requestData.Number)
+ if err != nil {
+ overallhandle.Result(1, err, c, "数据获取识别!没有找到数据!")
+ return
+ }
+ var jieguo []string
+ err = json.Unmarshal([]byte(redisVal), &jieguo)
+ if err != nil {
+ overallhandle.Result(1, err, c, "数据格式不正取!")
+ }
+ curryTime := time.Now().Unix()
+ msgStr := ""
+ if jieguo[0] != "" {
+ var myInfo models.PersonArchives
+ err = myInfo.GetCont(map[string]interface{}{"`number`": jieguo[0]}, "`key`")
+ if err != nil {
+ msgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", jieguo[0], jieguo[1], overallhandle.UnixTimeToDay(curryTime, 11), err)
+ } else {
+ err = myInfo.EiteCont(map[string]interface{}{"`key`": myInfo.Key}, map[string]interface{}{"`teamid`": requestData.TimeId, "`eite_time`": curryTime})
+ if err != nil {
+ msgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", jieguo[0], jieguo[1], overallhandle.UnixTimeToDay(curryTime, 11), err)
+ } else {
+ msgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", jieguo[0], jieguo[1], overallhandle.UnixTimeToDay(curryTime, 11))
+ }
+ }
+ } else {
+ msgStr = fmt.Sprintf("序号:%v--->%v:没有工号,无法确定启组织关系!不可写入数据--->%v", requestData.Number, jieguo[2], time.Now().Unix())
+ }
+
+ if redisListLenght-1 == int64(requestData.Number) {
+ // 执行完毕删除列表键
+ redisClient.Ltrim(requestData.RedisListKey, 1, 0)
+ redisClient.DelKey(requestData.RedisListKey)
+ }
+ sendData := make(map[string]interface{})
+ sendData["msgStr"] = msgStr
+ overallhandle.Result(0, sendData, c)
+}
diff --git a/api/version1/personnelapi/uploadfile.go b/api/version1/personnelapi/uploadfile.go
index c704b15..0f16ee7 100644
--- a/api/version1/personnelapi/uploadfile.go
+++ b/api/version1/personnelapi/uploadfile.go
@@ -7,6 +7,7 @@ import (
"hr_server/overall"
"hr_server/overall/overallhandle"
"path"
+ "sort"
"strconv"
"strings"
"time"
@@ -227,7 +228,7 @@ func (g *GroupParsingData) GroupParsingDataInfo(list []interface{}, meritsYear,
} else {
g.UserKey = myCont.Key
}
- g.ProcessMainTable(val, meritsYear, rewPunYearsmap)
+ g.ProcessMainTable(val, meritsYear, rewPunYearsmap, "309")
} else {
g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v:没有工号", val[0], val[2]))
}
@@ -254,7 +255,7 @@ func (g *GroupParsingData) GroupParsingDataInfo(list []interface{}, meritsYear,
#
*/
-func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rewPunYearsmap map[int]int) {
+func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rewPunYearsmap map[int]int, orgId string) {
// fmt.Printf("分成的段:%v\n%v\n%v\n", g.UserNum, g.UserKey, g.IsOk)
if g.UserKey == 0 {
g.UserKey = overallhandle.OnlyOneNumber(2)
@@ -263,39 +264,68 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew
if g.IsOk {
var userInfo models.PersonArchives
- userInfo.Key = g.UserKey //唯一编号
- userInfo.Name = info[2] //姓名"`
- userInfo.HireClass = 1 //雇佣类型(1:雇佣入职;2:再入职;)"`
- userInfo.EmpType = 4 //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)"`
+ userInfo.Key = g.UserKey //唯一编号
+ userInfo.Name = info[2] //姓名"`
+ userInfo.Number = info[1] //工号
+ userInfo.HireClass = 1 //雇佣类型(1:雇佣入职;2:再入职;)"`
+ userInfo.EmpType = 8 //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)"`
+ orgIdInt, _ := strconv.ParseInt(orgId, 10, 64)
+ userInfo.ExcelTemplate = orgIdInt
var adminOrg int64
var allOrgId []int64
if info[3] != "" {
var comOrg models.AdministrativeOrganization
comOrg.GetCont(map[string]interface{}{"`name`": info[3]}, "`id`")
- userInfo.Company = comOrg.Id //入职公司"`
- adminOrg = comOrg.Id
- var sunOrg overallhandle.GetOrgAllParent
- sunOrg.GetOrgSonAllId(comOrg.Id)
- sunOrg.Id = append(sunOrg.Id, comOrg.Id)
- allOrgId = sunOrg.Id
+ if comOrg.Id != 0 {
+ userInfo.Company = comOrg.Id //入职公司"`
+ adminOrg = comOrg.Id
+ var sunOrg overallhandle.GetOrgAllParent
+ sunOrg.GetOrgSonAllId(comOrg.Id)
+ sunOrg.Id = append(sunOrg.Id, comOrg.Id)
+ allOrgId = sunOrg.Id
+ }
}
if info[4] != "" {
- mastOrg := GetMyOrgSunId(info[4], allOrgId)
- userInfo.MainDeparment = mastOrg //主部门"`
- adminOrg = mastOrg
+ if len(allOrgId) > 0 {
+ mastOrg := GetMyOrgSunId(info[4], allOrgId)
+ if mastOrg != 0 {
+ userInfo.MainDeparment = mastOrg //主部门"`
+ adminOrg = mastOrg
+ }
+ }
}
if info[5] != "" {
- suntOrg := GetMyOrgSunId(info[5], allOrgId)
- userInfo.SunMainDeparment = suntOrg //二级主部门"`
- adminOrg = suntOrg
+ if len(allOrgId) > 0 {
+ suntOrg := GetMyOrgSunId(info[5], allOrgId)
+ if suntOrg != 0 {
+ userInfo.SunMainDeparment = suntOrg //二级主部门"`
+ adminOrg = suntOrg
+ }
+ }
}
if info[6] != "" {
- postOrg := GetMyOrgSunId(info[6], allOrgId)
- userInfo.WorkSection = postOrg //二级主部门"`
- adminOrg = postOrg
+ if len(allOrgId) > 0 {
+ postOrg := GetMyOrgSunId(info[6], allOrgId)
+ if postOrg != 0 {
+ userInfo.WorkSection = postOrg //二级主部门"`
+ adminOrg = postOrg
+ }
+ }
+ }
+ if adminOrg != 0 {
+ userInfo.AdminOrg = adminOrg //所属行政组织"`
+ // userInfo.Position, userInfo.JobId, userInfo.PersonInCharge = GetMyPositisName(info[7], adminOrg)
+ position, jobId, PersonInCharge := GetMyPositisName(info[7], adminOrg)
+ if position != 0 {
+ userInfo.Position = position
+ }
+ if jobId != 0 {
+ userInfo.JobId = jobId
+ }
+ if PersonInCharge != 0 {
+ userInfo.PersonInCharge = PersonInCharge
+ }
}
- userInfo.AdminOrg = adminOrg //所属行政组织"`
- userInfo.Position, userInfo.JobId, userInfo.PersonInCharge = GetMyPositisName(info[7], adminOrg)
switch info[8] {
case "一级":
userInfo.JobLeve = 1 // 职务等级"`
@@ -312,7 +342,9 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew
if info[9] != "" {
var jobInfo models.JobClass
jobInfo.GetCont(map[string]interface{}{"`name`": info[9]}, "`id`")
- userInfo.JobClass = jobInfo.Id //管理类别"`
+ if jobInfo.Id != 0 {
+ userInfo.JobClass = jobInfo.Id //管理类别"`
+ }
}
userInfo.Time = curryTime //写入时间"`
userInfo.EiteTime = curryTime //编辑时间"`
@@ -328,8 +360,8 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew
}
err := overall.CONSTANT_DB_HR.Create(&userInfo).Error
if err != nil {
- g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11)))
- g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11))
+ g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11), err))
+ g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11), err)
} else {
g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11)))
g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11))
@@ -342,40 +374,60 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew
if info[3] != "" {
var comOrg models.AdministrativeOrganization
comOrg.GetCont(map[string]interface{}{"`name`": info[3]}, "`id`")
- editInfo["`company`"] = comOrg.Id //入职公司"`
if comOrg.Id != 0 {
+ editInfo["`company`"] = comOrg.Id //入职公司"`
+
adminOrg = comOrg.Id
- }
- var sunOrg overallhandle.GetOrgAllParent
- sunOrg.GetOrgSonAllId(comOrg.Id)
- sunOrg.Id = append(sunOrg.Id, comOrg.Id)
- allOrgId = sunOrg.Id
+ var sunOrg overallhandle.GetOrgAllParent
+ sunOrg.GetOrgSonAllId(comOrg.Id)
+ sunOrg.Id = append(sunOrg.Id, comOrg.Id)
+ allOrgId = sunOrg.Id
+ }
}
if info[4] != "" {
- mastOrg := GetMyOrgSunId(info[4], allOrgId)
- editInfo["`maindeparment`"] = mastOrg //主部门"`
- if mastOrg != 0 {
- adminOrg = mastOrg
+ if len(allOrgId) > 0 {
+ mastOrg := GetMyOrgSunId(info[4], allOrgId)
+
+ if mastOrg != 0 {
+ editInfo["`maindeparment`"] = mastOrg //主部门"`
+ adminOrg = mastOrg
+ }
}
}
if info[5] != "" {
- suntOrg := GetMyOrgSunId(info[5], allOrgId)
- editInfo["`sun_main_deparment`"] = suntOrg //二级主部门"`
- if suntOrg != 0 {
- adminOrg = suntOrg
+ if len(allOrgId) > 0 {
+ suntOrg := GetMyOrgSunId(info[5], allOrgId)
+
+ if suntOrg != 0 {
+ editInfo["`sun_main_deparment`"] = suntOrg //二级主部门"`
+ adminOrg = suntOrg
+ }
}
}
if info[6] != "" {
- postOrg := GetMyOrgSunId(info[6], allOrgId)
- editInfo["`work_section`"] = postOrg //二级主部门"`
- if postOrg != 0 {
- adminOrg = postOrg
- }
+ if len(allOrgId) > 0 {
+ postOrg := GetMyOrgSunId(info[6], allOrgId)
+ if postOrg != 0 {
+ editInfo["`work_section`"] = postOrg //二级主部门"`
+ adminOrg = postOrg
+ }
+ }
+ }
+ if adminOrg != 0 {
+ editInfo["`admin_org`"] = adminOrg //所属行政组织"`
+ position, jobId, PersonInCharge := GetMyPositisName(info[7], adminOrg)
+ if position != 0 {
+ editInfo["`position`"] = position
+ }
+ if jobId != 0 {
+ editInfo["`job_id`"] = jobId
+ }
+ if PersonInCharge != 0 {
+ editInfo["`person_in_charge`"] = PersonInCharge
+ }
}
- editInfo["`admin_org`"] = adminOrg //所属行政组织"`
- editInfo["`position`"], editInfo["`job_id`"], editInfo["`person_in_charge`"] = GetMyPositisName(info[7], adminOrg)
switch info[8] {
case "一级":
editInfo["`job_leve`"] = 1 // 职务等级"`
@@ -392,19 +444,23 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew
if info[9] != "" {
var jobInfo models.JobClass
jobInfo.GetCont(map[string]interface{}{"`name`": info[9]}, "`id`")
- editInfo["`job_class`"] = jobInfo.Id //管理类别"`
+ if jobInfo.Id != 0 {
+ editInfo["`job_class`"] = jobInfo.Id //管理类别"`
+ }
}
editInfo["`eite_time`"] = curryTime
editInfo["`is_show_true`"] = 1
if info[30] != "" {
editInfo["`wechat`"] = info[30]
}
+ orgIdInt, _ := strconv.ParseInt(orgId, 10, 64)
+ editInfo["`excel_template`"] = orgIdInt
var userInfo models.PersonArchives
err := userInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editInfo)
// fmt.Printf("编辑信息:%v\n", err)
if err != nil {
- g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11)))
- g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11))
+ g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11), err))
+ g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11), err)
} else {
g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11)))
g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[2], info[1], overallhandle.UnixTimeToDay(curryTime, 11))
@@ -420,7 +476,7 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew
synPros.Add(1)
go g.FamilyMembers(info) //家庭成员
synPros.Add(1)
- go g.GrowthExperienceWithinTheGroup(info) //集团内成长经历
+ go g.GrowthExperienceWithinTheGroup(info, orgId) //集团内成长经历
synPros.Add(1)
go g.ExternalWorkExperienceOfTheGroup(info) //集团外部工作经历
synPros.Add(1)
@@ -431,7 +487,9 @@ func (g *GroupParsingData) ProcessMainTable(info map[int]string, meritsYear, rew
go g.EditAcademicTitle(info) //编辑职称
synPros.Add(1)
go g.EditCertificate(info) //编辑证书
- synPros.Wait()
+ synPros.Add(1)
+ go g.TalentInventory(info, orgId) //人才盘点
+ // synPros.Wait()
// g.SecondaryTableUser(info) //人员信息副本
// g.PoliticalOutlookEdit(info) //政治面貌
@@ -469,46 +527,46 @@ func (g *GroupParsingData) EditCertificate(info map[int]string) {
var cerHonList []models.CertificateHonors
err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&cerHonList).Error
if err != nil || len(cerHonList) < 1 {
- if info[339] != "" {
- g.EditCertificateCont(info[338], info[339], info[340], info[341], info[342], info[343], info[344])
+ if info[338] != "" {
+ g.EditCertificateCont(info[337], info[338], info[339], info[340], info[341], info[342], info[343])
}
- if info[346] != "" {
- g.EditCertificateCont(info[345], info[346], info[347], info[348], info[349], info[350], info[351])
+ if info[345] != "" {
+ g.EditCertificateCont(info[344], info[345], info[346], info[347], info[348], info[349], info[350])
}
- if info[353] != "" {
- g.EditCertificateCont(info[352], info[353], info[354], info[355], info[356], info[357], info[358])
+ if info[352] != "" {
+ g.EditCertificateCont(info[351], info[352], info[353], info[354], info[355], info[356], info[357])
}
- if info[360] != "" {
- g.EditCertificateCont(info[359], info[360], info[361], info[362], info[363], info[364], info[365])
+ if info[359] != "" {
+ g.EditCertificateCont(info[358], info[359], info[360], info[361], info[362], info[363], info[364])
}
- if info[367] != "" {
- g.EditCertificateCont(info[366], info[367], info[368], info[369], info[370], info[371], info[372])
+ if info[366] != "" {
+ g.EditCertificateCont(info[365], info[366], info[367], info[368], info[369], info[370], info[371])
}
- if info[374] != "" {
- g.EditCertificateCont(info[373], info[374], info[375], info[376], info[377], info[378], info[379])
+ if info[373] != "" {
+ g.EditCertificateCont(info[372], info[373], info[374], info[375], info[376], info[377], info[378])
}
} else {
jsonInfo, _ := json.Marshal(cerHonList)
overallhandle.WriteLog("del", "删除旧证书数据!", string(jsonInfo))
var workGroupLogCont models.CertificateHonors
workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey})
- if info[339] != "" {
- g.EditCertificateCont(info[338], info[339], info[340], info[341], info[342], info[343], info[344])
+ if info[338] != "" {
+ g.EditCertificateCont(info[337], info[338], info[339], info[340], info[341], info[342], info[343])
}
- if info[346] != "" {
- g.EditCertificateCont(info[345], info[346], info[347], info[348], info[349], info[350], info[351])
+ if info[345] != "" {
+ g.EditCertificateCont(info[344], info[345], info[346], info[347], info[348], info[349], info[350])
}
- if info[353] != "" {
- g.EditCertificateCont(info[352], info[353], info[354], info[355], info[356], info[357], info[358])
+ if info[352] != "" {
+ g.EditCertificateCont(info[351], info[352], info[353], info[354], info[355], info[356], info[357])
}
- if info[360] != "" {
- g.EditCertificateCont(info[359], info[360], info[361], info[362], info[363], info[364], info[365])
+ if info[359] != "" {
+ g.EditCertificateCont(info[358], info[359], info[360], info[361], info[362], info[363], info[364])
}
- if info[367] != "" {
- g.EditCertificateCont(info[366], info[367], info[368], info[369], info[370], info[371], info[372])
+ if info[366] != "" {
+ g.EditCertificateCont(info[365], info[366], info[367], info[368], info[369], info[370], info[371])
}
- if info[374] != "" {
- g.EditCertificateCont(info[373], info[374], info[375], info[376], info[377], info[378], info[379])
+ if info[373] != "" {
+ g.EditCertificateCont(info[372], info[373], info[374], info[375], info[376], info[377], info[378])
}
}
}
@@ -545,7 +603,7 @@ func (g *GroupParsingData) EditCertificateCont(Title, Number, IssuingUnit, TimeD
monthsInt, _ := strconv.Atoi(overallhandle.UnixTimeToDay(cureeTime, 17))
cerInfo.Months = monthsInt //月"`
cerInfo.Number = Number //证书编号"`
- if EndTime != "" {
+ if EndTime != "" && EndTime != "无" {
cerInfo.EndTime = overallhandle.ExcelDateToDate(EndTime).Unix() //截止时间"`
}
cerInfo.ValidPeriod = ValidPeriod //有效期限"`
@@ -603,22 +661,22 @@ func (g *GroupParsingData) EditAcademicTitle(info map[int]string) {
var acaList []models.AcademicTitle
err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&acaList).Error
if err != nil || len(acaList) < 1 {
- if info[331] != "" {
- g.InsetAcaInfo(info[328], info[329], info[330], info[331], info[332])
+ if info[330] != "" {
+ g.InsetAcaInfo(info[327], info[328], info[329], info[330], info[331])
}
- if info[336] != "" {
- g.InsetAcaInfo(info[333], info[334], info[335], info[336], info[337])
+ if info[335] != "" {
+ g.InsetAcaInfo(info[332], info[333], info[334], info[335], info[336])
}
} else {
jsonInfo, _ := json.Marshal(acaList)
overallhandle.WriteLog("del", "删除旧职称数据!", string(jsonInfo))
var workGroupLogCont models.AcademicTitle
workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey})
- if info[331] != "" {
- g.InsetAcaInfo(info[328], info[329], info[330], info[331], info[332])
+ if info[330] != "" {
+ g.InsetAcaInfo(info[327], info[328], info[329], info[330], info[331])
}
- if info[336] != "" {
- g.InsetAcaInfo(info[333], info[334], info[335], info[336], info[337])
+ if info[335] != "" {
+ g.InsetAcaInfo(info[332], info[333], info[334], info[335], info[336])
}
}
}
@@ -723,36 +781,41 @@ func (g *GroupParsingData) EditRewardsPunishments(info map[int]string, rewPunYea
// fmt.Printf("奖惩记录1: %v\n", rewPunYearsmap)
// fmt.Printf("奖惩记录: %v\n %v\n %v\n", info[299], info[304], info[309])
if val, isOk := rewPunYearsmap[0]; isOk {
- if info[299] != "" {
- g.EditRewPunInfo(val, info[299], info[300], info[301], info[302], info[303])
- }
+ // if info[298] != "" {
+ g.EditRewPunInfo(val, info[298], info[299], info[300], info[301], info[302])
+ // }
}
if val, isOk := rewPunYearsmap[1]; isOk {
- if info[304] != "" {
- g.EditRewPunInfo(val, info[304], info[305], info[306], info[307], info[308])
- }
+ // if info[303] != "" {
+ g.EditRewPunInfo(val, info[303], info[304], info[305], info[306], info[307])
+ // }
}
if val, isOk := rewPunYearsmap[2]; isOk {
- if info[309] != "" {
- g.EditRewPunInfo(val, info[309], info[310], info[311], info[312], info[313])
- }
+ // if info[308] != "" {
+ g.EditRewPunInfo(val, info[308], info[309], info[310], info[311], info[312])
+ // }
}
}
func (g *GroupParsingData) EditRewPunInfo(years int, level, rewPunClass, title, timeData, issuingUnit string) {
- // fmt.Printf("奖惩记录2: %v\n", timeData)
+ fmt.Printf("奖惩记录2: %v----> %v\n", level, timeData)
jiangCeng := RewPunLevelClassStr(rewPunClass)
var rewPunYearCont models.RewardsPenalties
err := rewPunYearCont.GetCont(map[string]interface{}{"`userkey`": g.UserKey, "`years`": years, "`months`": 0})
timeVal := time.Now().Unix()
// yserInt, _ := strconv.Atoi(overallhandle.UnixTimeToDay(timeVal, 16))
-
+ if err == nil {
+ overall.CONSTANT_DB_HR.Where("`id` = ? ", rewPunYearCont.Id).Delete(&rewPunYearCont)
+ // overall.CONSTANT_DB_HR.Where("`userkey` = ? AND `years` = ? AND `months` = ?", g.UserKey, years, 0).Delete(&rewPunYearCont)
+ }
if timeData != "" {
timeVal = overallhandle.ExcelDateToDate(timeData).Unix()
fmt.Printf("奖惩记录3: %v\n", timeVal)
}
- if err != nil { //新增
+ if level != "" {
+
+ // if err != nil { //新增
rewPunYearCont.Title = title //奖励/处分项目"`
rewPunYearCont.UserKey = g.UserKey //获得人员"`
if jiangCeng <= 6 {
@@ -770,24 +833,25 @@ func (g *GroupParsingData) EditRewPunInfo(years int, level, rewPunClass, title,
rewPunYearCont.Level = RewPunLevelStr(level) //奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)"`
rewPunYearCont.RewPunClass = jiangCeng //奖惩类型(1:年终评优;2:表扬;3:嘉奖;4:记功;5:记大功;6:特别奖励;7:批评;8:警告;9:记过;10:记大过;11:降级;12:留用察看;13:开除)"`
overall.CONSTANT_DB_HR.Create(&rewPunYearCont)
- } else { //编辑
- editCont := overallhandle.MapOut()
- editCont["`title`"] = title
- if jiangCeng <= 6 {
- editCont["`types`"] = 1 //类型(1:奖励;2:处分;)`
- } else {
- editCont["`types`"] = 2 //类型(1:奖励;2:处分;)`
- }
- editCont["`state`"] = 1
- editCont["`issuing_unit`"] = issuingUnit
- editCont["`timedata`"] = timeVal
- editCont["`years`"] = years
- editCont["`months`"] = 0
- editCont["`level`"] = RewPunLevelStr(level)
- editCont["`rewPunClass`"] = jiangCeng
- var rewPunYearEditCont models.RewardsPenalties
- rewPunYearEditCont.EiteCont(map[string]interface{}{"`id`": rewPunYearCont.Id}, editCont)
}
+ // } else { //编辑
+ // editCont := overallhandle.MapOut()
+ // editCont["`title`"] = title
+ // if jiangCeng <= 6 {
+ // editCont["`types`"] = 1 //类型(1:奖励;2:处分;)`
+ // } else {
+ // editCont["`types`"] = 2 //类型(1:奖励;2:处分;)`
+ // }
+ // editCont["`state`"] = 1
+ // editCont["`issuing_unit`"] = issuingUnit
+ // editCont["`timedata`"] = timeVal
+ // editCont["`years`"] = years
+ // editCont["`months`"] = 0
+ // editCont["`level`"] = RewPunLevelStr(level)
+ // editCont["`rewPunClass`"] = jiangCeng
+ // var rewPunYearEditCont models.RewardsPenalties
+ // rewPunYearEditCont.EiteCont(map[string]interface{}{"`id`": rewPunYearCont.Id}, editCont)
+ // }
}
/*
@@ -812,13 +876,13 @@ func (g *GroupParsingData) EditExamineLevel(info map[int]string, meritsYear map[
// if info[289] == "" {
// }
if val, isOk := meritsYear[0]; isOk {
- g.EditExamineLevelInfo(info[289], val)
+ g.EditExamineLevelInfo(info[288], val)
}
if val, isOk := meritsYear[1]; isOk {
- g.EditExamineLevelInfo(info[290], val)
+ g.EditExamineLevelInfo(info[289], val)
}
if val, isOk := meritsYear[2]; isOk {
- g.EditExamineLevelInfo(info[291], val)
+ g.EditExamineLevelInfo(info[290], val)
}
}
@@ -829,9 +893,9 @@ func (g *GroupParsingData) EditExamineLevel(info map[int]string, meritsYear map[
@ 功能: 编辑绩效考核内容
*/
func (g *GroupParsingData) EditExamineLevelInfo(level string, years int) {
- if level == "" {
- return
- }
+ // if level == "" {
+ // return
+ // }
var merInfo models.Meritslog
err := merInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey, "`years`": years, "`months`": 0}, "`id`", "`level`")
if err != nil { //新增
@@ -877,40 +941,40 @@ func (g *GroupParsingData) ExternalWorkExperienceOfTheGroup(info map[int]string)
var workList []models.WorkHistory
err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&workList).Error
if err != nil || len(workList) < 1 {
- if info[223] != "" {
- g.ExternalWorkGroupLog(info[223], info[224], info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235])
+ if info[222] != "" {
+ g.ExternalWorkGroupLog(info[222], info[223], info[224], info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234])
}
- if info[236] != "" {
- g.ExternalWorkGroupLog(info[236], info[237], info[238], info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248])
+ if info[235] != "" {
+ g.ExternalWorkGroupLog(info[235], info[236], info[237], info[238], info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247])
}
- if info[249] != "" {
- g.ExternalWorkGroupLog(info[249], info[250], info[251], info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261])
+ if info[248] != "" {
+ g.ExternalWorkGroupLog(info[248], info[249], info[250], info[251], info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260])
}
- if info[262] != "" {
- g.ExternalWorkGroupLog(info[262], info[263], info[264], info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274])
+ if info[261] != "" {
+ g.ExternalWorkGroupLog(info[261], info[262], info[263], info[264], info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273])
}
- if info[275] != "" {
- g.ExternalWorkGroupLog(info[275], info[276], info[277], info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287])
+ if info[274] != "" {
+ g.ExternalWorkGroupLog(info[274], info[275], info[276], info[277], info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286])
}
} else { //已经存在历史记录了
jsonInfo, _ := json.Marshal(workList)
overallhandle.WriteLog("del", "删除旧集团外部工作经历数据!", string(jsonInfo))
var workGroupLogCont models.WorkHistory
workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey})
- if info[223] != "" {
- g.ExternalWorkGroupLog(info[223], info[224], info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235])
+ if info[222] != "" {
+ g.ExternalWorkGroupLog(info[222], info[223], info[224], info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234])
}
- if info[236] != "" {
- g.ExternalWorkGroupLog(info[236], info[237], info[238], info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248])
+ if info[235] != "" {
+ g.ExternalWorkGroupLog(info[235], info[236], info[237], info[238], info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247])
}
- if info[249] != "" {
- g.ExternalWorkGroupLog(info[249], info[250], info[251], info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261])
+ if info[248] != "" {
+ g.ExternalWorkGroupLog(info[248], info[249], info[250], info[251], info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260])
}
- if info[262] != "" {
- g.ExternalWorkGroupLog(info[262], info[263], info[264], info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274])
+ if info[261] != "" {
+ g.ExternalWorkGroupLog(info[261], info[262], info[263], info[264], info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273])
}
- if info[275] != "" {
- g.ExternalWorkGroupLog(info[275], info[276], info[277], info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287])
+ if info[274] != "" {
+ g.ExternalWorkGroupLog(info[274], info[275], info[276], info[277], info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286])
}
}
}
@@ -966,6 +1030,8 @@ func (g *GroupParsingData) ExternalWorkGroupLog(EntryTime, Leavedate, Company, C
if MinionNumber != "" {
manNum, _ := strconv.Atoi(MinionNumber)
myWorkLog.MinionNumber = manNum //下属人数"`
+ } else {
+ myWorkLog.MinionNumber = 0
}
myWorkLog.CompanyNature = CompanyNature //公司性质
myWorkLog.Industry = Industry //所属行业
@@ -989,40 +1055,40 @@ func (g *GroupParsingData) ExternalWorkGroupLog(EntryTime, Leavedate, Company, C
#
*/
-func (g *GroupParsingData) GrowthExperienceWithinTheGroup(info map[int]string) {
+func (g *GroupParsingData) GrowthExperienceWithinTheGroup(info map[int]string, orgId string) {
defer synPros.Done()
var growInGroup []models.InsideWorkHistory
err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&growInGroup).Error
if err != nil || len(growInGroup) < 1 {
if info[92] != "" {
- g.EditGroupInWorkLog(info[92], info[93], info[94], info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104])
+ g.EditGroupInWorkLog(info[92], info[93], info[94], info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104], orgId)
}
if info[105] != "" {
- g.EditGroupInWorkLog(info[105], info[106], info[107], info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117])
+ g.EditGroupInWorkLog(info[105], info[106], info[107], info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117], orgId)
}
if info[118] != "" {
- g.EditGroupInWorkLog(info[118], info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130])
+ g.EditGroupInWorkLog(info[118], info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130], orgId)
}
if info[131] != "" {
- g.EditGroupInWorkLog(info[131], info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143])
+ g.EditGroupInWorkLog(info[131], info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143], orgId)
}
if info[144] != "" {
- g.EditGroupInWorkLog(info[144], info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156])
+ g.EditGroupInWorkLog(info[144], info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156], orgId)
}
if info[157] != "" {
- g.EditGroupInWorkLog(info[157], info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169])
+ g.EditGroupInWorkLog(info[157], info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169], orgId)
}
if info[170] != "" {
- g.EditGroupInWorkLog(info[170], info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182])
+ g.EditGroupInWorkLog(info[170], info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], orgId)
}
if info[183] != "" {
- g.EditGroupInWorkLog(info[183], info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195])
+ g.EditGroupInWorkLog(info[183], info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], orgId)
}
if info[196] != "" {
- g.EditGroupInWorkLog(info[196], info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208])
+ g.EditGroupInWorkLog(info[196], info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], orgId)
}
if info[209] != "" {
- g.EditGroupInWorkLog(info[209], info[210], info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221])
+ g.EditGroupInWorkLog(info[209], info[210], info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], orgId)
}
} else {
jsonInfo, _ := json.Marshal(growInGroup)
@@ -1030,34 +1096,34 @@ func (g *GroupParsingData) GrowthExperienceWithinTheGroup(info map[int]string) {
var workGroupLogCont models.InsideWorkHistory
workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey})
if info[92] != "" {
- g.EditGroupInWorkLog(info[92], info[93], info[94], info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104])
+ g.EditGroupInWorkLog(info[92], info[93], info[94], info[95], info[96], info[97], info[98], info[99], info[100], info[101], info[102], info[103], info[104], orgId)
}
if info[105] != "" {
- g.EditGroupInWorkLog(info[105], info[106], info[107], info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117])
+ g.EditGroupInWorkLog(info[105], info[106], info[107], info[108], info[109], info[110], info[111], info[112], info[113], info[114], info[115], info[116], info[117], orgId)
}
if info[118] != "" {
- g.EditGroupInWorkLog(info[118], info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130])
+ g.EditGroupInWorkLog(info[118], info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], info[127], info[128], info[129], info[130], orgId)
}
if info[131] != "" {
- g.EditGroupInWorkLog(info[131], info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143])
+ g.EditGroupInWorkLog(info[131], info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], info[141], info[142], info[143], orgId)
}
if info[144] != "" {
- g.EditGroupInWorkLog(info[144], info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156])
+ g.EditGroupInWorkLog(info[144], info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], info[155], info[156], orgId)
}
if info[157] != "" {
- g.EditGroupInWorkLog(info[157], info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169])
+ g.EditGroupInWorkLog(info[157], info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], info[169], orgId)
}
if info[170] != "" {
- g.EditGroupInWorkLog(info[170], info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182])
+ g.EditGroupInWorkLog(info[170], info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], orgId)
}
if info[183] != "" {
- g.EditGroupInWorkLog(info[183], info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195])
+ g.EditGroupInWorkLog(info[183], info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], orgId)
}
if info[196] != "" {
- g.EditGroupInWorkLog(info[196], info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208])
+ g.EditGroupInWorkLog(info[196], info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], orgId)
}
if info[209] != "" {
- g.EditGroupInWorkLog(info[209], info[210], info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221])
+ g.EditGroupInWorkLog(info[209], info[210], info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], orgId)
}
}
}
@@ -1081,37 +1147,70 @@ superiorPosition 上级职位
superiorName 上级名称
subordinates 下属人数
*/
-func (g *GroupParsingData) EditGroupInWorkLog(startTime, endTime, changeType, changeReason, company, department, workShop, workshopSection, position, gradePositions, superiorPosition, superiorName, subordinates string) {
+func (g *GroupParsingData) EditGroupInWorkLog(startTime, endTime, changeType, changeReason, company, department, workShop, workshopSection, position, gradePositions, superiorPosition, superiorName, subordinates string, org string) {
var adminOrg int64
var sunOrg overallhandle.GetOrgAllParent
var inWorkGroupInfo models.InsideWorkHistory
inWorkGroupInfo.Key = g.UserKey //员工识别符"`
+
+ inWorkGroupInfo.Bdlx = changeType
+ inWorkGroupInfo.Gsmc = company
+ inWorkGroupInfo.Yjbm = department
+ inWorkGroupInfo.Ejbm = workShop
+ inWorkGroupInfo.Gongduan = workshopSection
+
+ inWorkGroupInfo.Zhiwei = position
+
if company != "" {
var comOrg models.AdministrativeOrganization
comOrg.GetCont(map[string]interface{}{"`name`": company}, "`id`")
- inWorkGroupInfo.Company = comOrg.Id //公司"`
- sunOrg.GetOrgSonAllId(comOrg.Id)
- sunOrg.Id = append(sunOrg.Id, comOrg.Id)
- adminOrg = comOrg.Id
+ if comOrg.Id != 0 {
+ inWorkGroupInfo.Company = comOrg.Id //公司"`
+ sunOrg.GetOrgSonAllId(comOrg.Id)
+ sunOrg.Id = append(sunOrg.Id, comOrg.Id)
+ adminOrg = comOrg.Id
+ }
+
}
- // fmt.Printf("所有子级--->%v--->%v--->%v\n", sunOrg.Id, department, adminOrg)
+
if department != "" {
- mastOrg := GetMyOrgSunId(department, sunOrg.Id)
- inWorkGroupInfo.Department = mastOrg //一级部室"`
- adminOrg = mastOrg
+ if len(sunOrg.Id) > 0 {
+ mastOrg := GetMyOrgSunId(department, sunOrg.Id)
+ if mastOrg != 0 {
+ inWorkGroupInfo.Department = mastOrg //一级部室"`
+ adminOrg = mastOrg
+ }
+ }
+
}
if workShop != "" {
- suntOrg := GetMyOrgSunId(workShop, sunOrg.Id)
- inWorkGroupInfo.WorkShop = suntOrg //二级部门或车间"`
- adminOrg = suntOrg
+ if len(sunOrg.Id) > 0 {
+ suntOrg := GetMyOrgSunId(workShop, sunOrg.Id)
+ if suntOrg != 0 {
+ inWorkGroupInfo.WorkShop = suntOrg //二级部门或车间"`
+ adminOrg = suntOrg
+ }
+
+ }
}
if workshopSection != "" {
- workOrg := GetMyOrgSunId(workshopSection, sunOrg.Id)
- inWorkGroupInfo.WorkshopSection = workOrg //工段"`
- adminOrg = workOrg
+ if len(sunOrg.Id) > 0 {
+ workOrg := GetMyOrgSunId(workshopSection, sunOrg.Id)
+ if workOrg != 0 {
+ inWorkGroupInfo.WorkshopSection = workOrg //工段"`
+ adminOrg = workOrg
+ }
+
+ }
+ }
+ if adminOrg != 0 {
+ positions, jobIds, _ := GetMyPositisName(position, adminOrg) //职位"`
+ inWorkGroupInfo.Position = positions
+ inWorkGroupInfo.JobId = jobIds
+
+ // inWorkGroupInfo.Position, inWorkGroupInfo.JobId, _ = GetMyPositisName(position, adminOrg) //职位"`
}
- inWorkGroupInfo.Position, inWorkGroupInfo.JobId, _ = GetMyPositisName(position, adminOrg) //职位"`
switch gradePositions {
case "一级":
inWorkGroupInfo.GradePositions = 1 // 职务等级"`
@@ -1123,6 +1222,8 @@ func (g *GroupParsingData) EditGroupInWorkLog(startTime, endTime, changeType, ch
inWorkGroupInfo.GradePositions = 4 // 职务等级"`
case "五级":
inWorkGroupInfo.GradePositions = 5 // 职务等级"`
+ case "协议":
+ inWorkGroupInfo.GradePositions = 6 // 职务等级"`
default:
}
if startTime != "" {
@@ -1145,6 +1246,13 @@ func (g *GroupParsingData) EditGroupInWorkLog(startTime, endTime, changeType, ch
inWorkGroupInfo.State = 1 //状态(1:启用;2:禁用;3:删除)"`
// inWorkGroupInfo.AssignType = //1、主职;2:兼职"`
// inWorkGroupInfo.JobId = //职务"`
+ fmt.Printf("行政职务--->%v\n", org)
+ switch org {
+ case "296":
+ inWorkGroupInfo.Dengji = gradePositions
+ default:
+ inWorkGroupInfo.WorkCont = gradePositions
+ }
// inWorkGroupInfo.WorkCont = //工作内容"`
inWorkGroupInfo.ChangeReason = changeReason //变动原因"`
inWorkGroupInfo.SuperiorPosition = superiorPosition //上级职位"`
@@ -1152,6 +1260,8 @@ func (g *GroupParsingData) EditGroupInWorkLog(startTime, endTime, changeType, ch
if subordinates != "" {
subNum, _ := strconv.Atoi(subordinates)
inWorkGroupInfo.Subordinates = subNum //下属人数"`
+ } else {
+ inWorkGroupInfo.Subordinates = 0
}
overall.CONSTANT_DB_HR.Create(&inWorkGroupInfo)
}
@@ -1488,7 +1598,8 @@ func (g *GroupParsingData) EditSchollLog(Education, EducationType, AcademicDegre
*/
func (g *GroupParsingData) AddOneSchollLog(Education, EducationType, AcademicDegree, GraduationSchool, SchoolType, CollegeFaction, Subject, AdmissionTime, GraduationTime string, level int) {
var firstLog models.PersonnelEducation
- firstLog.Number = g.UserNum //员工工号"`
+ firstLog.Number = g.UserNum //员工工号"`
+ firstLog.XueLi = Education
firstLog.Education = ducationToInt(Education) //学历(1:初中及以下;2:中专;3:高中;4:中技;5:高技;6:函数专科;7:大学专科;8:函数本科;9:大学本科;10:硕士研究生;11:博士研究生;12:专家、教授)"`
firstLog.GraduationSchool = GraduationSchool //毕业学校"`
firstLog.Subject = Subject //专业"`
@@ -1509,6 +1620,8 @@ func (g *GroupParsingData) AddOneSchollLog(Education, EducationType, AcademicDeg
firstLog.EducationType = EducationTypeStr(EducationType) //学历类型(1、统招;2、函授)"`
firstLog.CollegeFaction = CollegeFaction //所属院系"`
firstLog.SchoolType = SchoolTypeStr(SchoolType) //学历类型(院校类型(1、私立中学;2:公立中学;3:高职院校;4:民办专科院校;5:公办专科院校;6:民办本科院校;7:公办本科院校;8:”211“工程院校;9:”985“工程院校;10:双一流院校))"`
+ firstLog.XueLiLeixing = EducationType
+ firstLog.YuanXiaoLeiXing = SchoolType
overall.CONSTANT_DB_HR.Create(&firstLog)
}
@@ -1571,35 +1684,35 @@ func (g *GroupParsingData) SecondaryTableUser(info map[int]string) {
myInfo.Isdoubleworker = 2 //是否双职工(1:是;2:否)"`
g.WorkingCouple(info, false)
}
- if info[321] == "是" {
+ if info[320] == "是" {
myInfo.Isveterans = 1 //是否为退役军人(1:是;2:否)"`
g.EditVeterans(info, true)
} else {
myInfo.Isveterans = 2
g.EditVeterans(info, false)
}
- myInfo.Veteransnumber = info[322]
- if info[295] != "" {
- myInfo.Jobstartdate = overallhandle.ExcelDateToDate(info[295]).Unix() //参加工作日期"`
+ myInfo.Veteransnumber = info[321]
+ if info[294] != "" {
+ myInfo.Jobstartdate = overallhandle.ExcelDateToDate(info[294]).Unix() //参加工作日期"`
} //退役证编号"`
- if info[297] != "" {
- myInfo.Entrydate = overallhandle.ExcelDateToDate(info[297]).Unix() //入职日期"`
+ if info[296] != "" {
+ myInfo.Entrydate = overallhandle.ExcelDateToDate(info[296]).Unix() //入职日期"`
}
// myInfo. Probationperiod = //试用期"`
// myInfo. Planformaldate = //预计转正日期"`
if info[16] != "" {
myInfo.PoliticalOutlook = politiToInt(info[16]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
}
- if info[314] != "" {
- myInfo.PoliticalOutlook = politiToInt(info[314]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
+ if info[313] != "" {
+ myInfo.PoliticalOutlook = politiToInt(info[313]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
}
myInfo.MaritalstatusCn = info[14] //婚姻状况汉字说明"`
myInfo.ConstellationingCn = info[21] //星座汉字说明"`
myInfo.PoliticalOutlookCn = info[16] //政治面貌汉字说明"`
myInfo.HealthCn = info[15] //健康状况中文说明"`
// myInfo.NameUsedBefore = //曾用名"`
- myInfo.CareerPlanning = info[292] //职业生涯规划"`
- myInfo.HelpObtained = info[293] //个人期望从组织获得的帮助"`
+ myInfo.CareerPlanning = info[291] //职业生涯规划"`
+ myInfo.HelpObtained = info[292] //个人期望从组织获得的帮助"`
myInfo.Hobby = info[22] //爱好"`
myInfo.DomicileType = info[17] //户籍类型
@@ -1611,8 +1724,10 @@ func (g *GroupParsingData) SecondaryTableUser(info map[int]string) {
}
myInfo.MobileShortNumber = info[29] //手机小号
- myInfo.Channel = JoinJobChanel(info[294]) //入职渠道(1:社会招聘;2:校园招聘;3:内部推荐)
+ myInfo.Channel = JoinJobChanel(info[293]) //入职渠道(1:社会招聘;2:校园招聘;3:内部推荐)
myInfo.BloodType = info[20] //血型
+ // myInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, myInfo)
+ overall.CONSTANT_DB_HR.Create(&myInfo)
} else {
//附属内容存在,进行编辑。
editCont := overallhandle.MapOut()
@@ -1643,32 +1758,32 @@ func (g *GroupParsingData) SecondaryTableUser(info map[int]string) {
editCont["`isdoubleworker`"] = 2 //是否双职工(1:是;2:否)"`
g.WorkingCouple(info, false)
}
- if info[321] == "是" {
+ if info[320] == "是" {
editCont["`isveterans`"] = 1 //是否为退役军人(1:是;2:否)"`
g.EditVeterans(info, true)
} else {
editCont["`isveterans`"] = 2
g.EditVeterans(info, false)
}
- editCont["`veteransnumber`"] = info[322]
- if info[295] != "" {
- editCont["`jobstartdate`"] = overallhandle.ExcelDateToDate(info[295]).Unix()
+ editCont["`veteransnumber`"] = info[321]
+ if info[294] != "" {
+ editCont["`jobstartdate`"] = overallhandle.ExcelDateToDate(info[294]).Unix()
}
- if info[297] != "" {
- editCont["`entrydate`"] = overallhandle.ExcelDateToDate(info[297]).Unix()
+ if info[296] != "" {
+ editCont["`entrydate`"] = overallhandle.ExcelDateToDate(info[296]).Unix()
}
if info[16] != "" {
editCont["`political_outlook`"] = politiToInt(info[16])
}
- if info[314] != "" {
- editCont["`political_outlook`"] = politiToInt(info[314])
+ if info[313] != "" {
+ editCont["`political_outlook`"] = politiToInt(info[313])
}
editCont["`maritalstatus_cn`"] = info[14]
editCont["`constellationing_cn`"] = info[21]
editCont["`political_outlook_cn`"] = info[16]
editCont["`health_cn`"] = info[15]
- editCont["`career_planning`"] = info[292]
- editCont["`help_obtained`"] = info[293]
+ editCont["`career_planning`"] = info[291]
+ editCont["`help_obtained`"] = info[292]
editCont["`hobby`"] = info[22]
editCont["`domicile_type`"] = info[17]
if info[26] == "是" {
@@ -1679,7 +1794,7 @@ func (g *GroupParsingData) SecondaryTableUser(info map[int]string) {
// g.WorkingCouple(info, false)
}
editCont["`mobileShortNumber`"] = info[29]
- editCont["`channel`"] = JoinJobChanel(info[294])
+ editCont["`channel`"] = JoinJobChanel(info[293])
editCont["`bloodType`"] = info[20]
editCont["`time`"] = time.Now().Unix()
myInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editCont)
@@ -1705,7 +1820,7 @@ func (g *GroupParsingData) SecondaryTableUser(info map[int]string) {
#
*/
func (g *GroupParsingData) EditVeterans(info map[int]string, isTrue bool) {
- if info[322] != "" {
+ if info[321] != "" {
var veteransInfo models.Veterans
err := veteransInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey})
// fmt.Printf("退役军人:%v\n%v\n", err, veteransInfo)
@@ -1718,15 +1833,15 @@ func (g *GroupParsingData) EditVeterans(info map[int]string, isTrue bool) {
veteransInfo.IsRetire = 2 //5是否为退役军人(1:是;2:否)"`
}
- veteransInfo.RetireNumber = info[322] //mment:退役证编号"`
- if info[323] != "" {
- veteransInfo.JoinTime = overallhandle.ExcelDateToDate(info[323]).Unix() //ult:入伍时间"`
+ veteransInfo.RetireNumber = info[321] //mment:退役证编号"`
+ if info[322] != "" {
+ veteransInfo.JoinTime = overallhandle.ExcelDateToDate(info[322]).Unix() //ult:入伍时间"`
}
- if info[324] != "" {
- veteransInfo.RetireTime = overallhandle.ExcelDateToDate(info[324]).Unix() //default:退伍时间"`
+ if info[323] != "" {
+ veteransInfo.RetireTime = overallhandle.ExcelDateToDate(info[323]).Unix() //default:退伍时间"`
}
- veteransInfo.ArmyUnits = info[326] //参军单位"`
- veteransInfo.TypesOfSoldiers = info[327] //5) ;comment:兵种"`
+ veteransInfo.ArmyUnits = info[325] //参军单位"`
+ veteransInfo.TypesOfSoldiers = info[326] //5) ;comment:兵种"`
veteransInfo.Time = time.Now().Unix() //t null;comment:创建时间"`
overall.CONSTANT_DB_HR.Create(&veteransInfo)
@@ -1737,15 +1852,15 @@ func (g *GroupParsingData) EditVeterans(info map[int]string, isTrue bool) {
} else {
editCont["isRetire"] = 2
}
- editCont["retireNumber"] = info[322]
- if info[323] != "" {
- editCont["joinTime"] = overallhandle.ExcelDateToDate(info[323]).Unix() //ult:入伍时间"`
+ editCont["retireNumber"] = info[312]
+ if info[322] != "" {
+ editCont["joinTime"] = overallhandle.ExcelDateToDate(info[322]).Unix() //ult:入伍时间"`
}
- if info[324] != "" {
- editCont["retireTime"] = overallhandle.ExcelDateToDate(info[324]).Unix() //default:退伍时间"`
+ if info[323] != "" {
+ editCont["retireTime"] = overallhandle.ExcelDateToDate(info[323]).Unix() //default:退伍时间"`
}
- editCont["armyUnits"] = info[326]
- editCont["typesOfSoldiers"] = info[327]
+ editCont["armyUnits"] = info[325]
+ editCont["typesOfSoldiers"] = info[326]
editCont["time"] = time.Now().Unix()
veteransInfo.EiteCont(map[string]interface{}{"`userkey`": g.UserKey}, editCont)
}
@@ -1771,62 +1886,62 @@ func (g *GroupParsingData) EditVeterans(info map[int]string, isTrue bool) {
*/
func (g *GroupParsingData) PoliticalOutlookEdit(info map[int]string) {
defer synPros.Done()
- if info[314] != "" {
+ if info[313] != "" {
var polOutInfo models.PoliticalIdentity
err := polOutInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey})
if err != nil { //不存在,新增
- if info[315] != "" || info[316] != "" {
- polOutInfo.Userkey = g.UserKey //员工唯一识别符;"`
- polOutInfo.PoliticalOutlook = politiToInt(info[314]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
- if info[315] != "" {
- polOutInfo.JoinTime = overallhandle.ExcelDateToDate(info[315]).Unix() //加入时间"`
- }
- polOutInfo.Branch = info[316] //所在党支部"`
- polOutInfo.Bosition = info[317] //党内职务"`
- polOutInfo.JoiningParty = info[318] //入党时所在单位"`
- if info[319] == "是" {
- polOutInfo.SwitchToClass = 1 //组织关系是否转入(1:是;2:否)"`
- } else {
- polOutInfo.SwitchToClass = 2 //组织关系是否转入(1:是;2:否)"`
- }
- if info[320] != "" {
- polOutInfo.SwitchToTime = overallhandle.ExcelDateToDate(info[320]).Unix() //组织关系转入时间"`
- }
- polOutInfo.Time = time.Now().Unix() //创建时间"`
- overall.CONSTANT_DB_HR.Create(&polOutInfo)
+ // if info[315] != "" || info[316] != "" {
+ polOutInfo.Userkey = g.UserKey //员工唯一识别符;"`
+ polOutInfo.PoliticalOutlook = politiToInt(info[313]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
+ if info[314] != "" {
+ polOutInfo.JoinTime = overallhandle.ExcelDateToDate(info[314]).Unix() //加入时间"`
}
+ polOutInfo.Branch = info[315] //所在党支部"`
+ polOutInfo.Bosition = info[316] //党内职务"`
+ polOutInfo.JoiningParty = info[317] //入党时所在单位"`
+ if info[318] == "是" {
+ polOutInfo.SwitchToClass = 1 //组织关系是否转入(1:是;2:否)"`
+ } else {
+ polOutInfo.SwitchToClass = 2 //组织关系是否转入(1:是;2:否)"`
+ }
+ if info[319] != "" {
+ polOutInfo.SwitchToTime = overallhandle.ExcelDateToDate(info[319]).Unix() //组织关系转入时间"`
+ }
+ polOutInfo.Time = time.Now().Unix() //创建时间"`
+ overall.CONSTANT_DB_HR.Create(&polOutInfo)
+ // }
} else {
editCont := overallhandle.MapOut()
- if info[314] != "" {
- poloutName := politiToInt(info[314])
+ if info[313] != "" {
+ poloutName := politiToInt(info[313])
if poloutName != polOutInfo.PoliticalOutlook {
editCont["`political_outlook`"] = poloutName
}
}
- if info[315] != "" {
- joinTimeVal := overallhandle.ExcelDateToDate(info[315]).Unix()
+ if info[314] != "" {
+ joinTimeVal := overallhandle.ExcelDateToDate(info[314]).Unix()
if joinTimeVal != polOutInfo.JoinTime {
editCont["`joinTime`"] = joinTimeVal
}
}
- if info[316] != "" && info[316] != polOutInfo.Branch {
- editCont["`branch`"] = info[316]
+ if info[315] != "" && info[315] != polOutInfo.Branch {
+ editCont["`branch`"] = info[315]
}
- if info[317] != "" && info[317] != polOutInfo.Bosition {
- editCont["`position`"] = info[317]
+ if info[316] != "" && info[316] != polOutInfo.Bosition {
+ editCont["`position`"] = info[316]
}
- if info[318] != "" && info[318] != polOutInfo.JoiningParty {
- editCont["`joiningParty`"] = info[318]
+ if info[317] != "" && info[317] != polOutInfo.JoiningParty {
+ editCont["`joiningParty`"] = info[317]
}
zhuan := 2
- if info[319] == "是" {
+ if info[318] == "是" {
zhuan = 1
}
if zhuan != polOutInfo.SwitchToClass {
editCont["`switchToClass`"] = zhuan
}
- if info[320] != "" {
- switchTimeVal := overallhandle.ExcelDateToDate(info[320]).Unix()
+ if info[319] != "" {
+ switchTimeVal := overallhandle.ExcelDateToDate(info[319]).Unix()
if switchTimeVal != polOutInfo.SwitchToTime {
editCont["`switchToTime`"] = switchTimeVal
}
@@ -1986,7 +2101,15 @@ func GetMyPositisName(name string, orgId int64) (posistId, dutiesId int64, isTru
sunOrg.Id = append(sunOrg.Id, orgId)
var posistInfo models.Position
err := overall.CONSTANT_DB_HR.Model(&models.Position{}).Select("`id`,`person_in_charge`,`duties`").Where("`name` LIKE ? AND `administrative_organization` IN ?", "%"+name+"%", sunOrg.Id).Find(&posistInfo).Error
- if err != nil {
+ // fmt.Printf("职务---》%v---》%v\n", err, posistInfo)
+ if err != nil || posistInfo.Id == 0 {
+ newPoster := WriteNewPost(name, orgId)
+ posistId = newPoster.Id
+ dutiesId = newPoster.Duties
+ isTrue = newPoster.PersonInCharge
+ if newPoster.PersonInCharge == 0 {
+ isTrue = 2
+ }
return
}
posistId = posistInfo.Id
@@ -1997,3 +2120,124 @@ func GetMyPositisName(name string, orgId int64) (posistId, dutiesId int64, isTru
}
return
}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-10-30 10:21:28
+@ 功能: 写入新的岗位
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func WriteNewPost(name string, orgId int64) models.Position {
+
+ supId, _ := GetFasterPostId(orgId)
+ _, _, departmentId, _, _ := overallhandle.GetOrgStructure(orgId)
+ var posistInfo models.Position
+ posistInfo.Number = overallhandle.StringToPinYin(8, name, "", "") //职位编码"`
+ posistInfo.Name = name //职位名称"`
+ posistInfo.Duties = GetDuties(departmentId) //职务"`
+ posistInfo.Time = time.Now().Unix() //创建时间"`
+ posistInfo.State = 1 //状态(1:启用;2:禁用;3:删除)"`
+ posistInfo.AdministrativeOrganization = orgId //归属行政组织"`
+ posistInfo.Superior = supId //上级ID"`
+ posistInfo.PersonInCharge = 2 //是否为本部门负责人(1:是;2:否)"`
+ posistInfo.Department = departmentId //部门"`
+ posistInfo.MenuPermit = "" //菜单许可证"`
+ posistInfo.ButtonPermit = "" //按钮许可"`
+ posistInfo.School = 0 //部门"`
+ posistInfo.KingdeeId = "" //金蝶对照ID"`
+ posistInfo.OrgList = "" //
+ posistInfo.UnifyId = 0 //统一名称"`
+ overall.CONSTANT_DB_HR.Create(&posistInfo)
+ return posistInfo
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-10-30 13:19:35
+@ 功能: 获取职务
+*/
+func GetDuties(departId int64) (dutisId int64) {
+ dutisId = 3
+ var dutisIdAry []int64
+ overall.CONSTANT_DB_HR.Model(&models.Position{}).Select("`duties`").Where(" `department` = ?", departId).Find(&dutisIdAry)
+ if len(dutisIdAry) > 0 {
+ var dutAry []models.Duties
+ overall.CONSTANT_DB_HR.Model(&models.Duties{}).Select("`id`,`weight`").Where(" `id` IN ?", dutisIdAry).Order("`id` DESC").Find(&dutAry)
+ if len(dutAry) > 0 {
+ sort.Slice(dutAry, func(i, j int) bool {
+ return dutAry[i].Weight < dutAry[j].Weight
+ })
+ dutisId = dutAry[0].Id
+ }
+
+ }
+ return dutisId
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-10-29 16:00:05
+@ 功能: 获取上级职务
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func GetFasterPostId(orgId int64) (isSuperiorId, dutiesId int64) {
+ //查询平级职务
+ var pingJiPost []models.Position
+ overall.CONSTANT_DB_HR.Model(&models.Position{}).Select("`id`,`superior`,`person_in_charge`,`duties`").Where("`state` = 1 AND `administrative_organization` = ?", orgId).Find(&pingJiPost)
+ if len(pingJiPost) < 1 {
+ //获取上级行政组织
+ var superiorId int64
+ err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`superior`").Where("`id` = ?", orgId).First(&superiorId).Error
+ if err != nil {
+ superiorId = 313
+ }
+ GetFasterPostId(superiorId)
+ }
+ isTrue := true
+ var allPostList []PositionlrInfo
+ for _, v := range pingJiPost {
+ if v.PersonInCharge == 1 {
+ isTrue = false
+ isSuperiorId = v.Id
+ }
+ var postCont PositionlrInfo
+ postCont.Id = v.Id
+ var dutisInfor models.Duties
+ dutisInfor.GetCont(map[string]interface{}{"`id`": v.Duties}, "`weight`")
+ postCont.DutId = v.Duties
+ postCont.Weight = dutisInfor.Weight
+ allPostList = append(allPostList, postCont)
+ }
+ if isTrue {
+ if len(allPostList) > 0 {
+ sort.Slice(allPostList, func(i, j int) bool {
+ return allPostList[i].Weight < allPostList[j].Weight
+ })
+ isSuperiorId = allPostList[0].Id
+ }
+ }
+ return
+}
diff --git a/api/version1/personnelapi/userarchives.go b/api/version1/personnelapi/userarchives.go
index 0c69150..7b88916 100644
--- a/api/version1/personnelapi/userarchives.go
+++ b/api/version1/personnelapi/userarchives.go
@@ -15,6 +15,149 @@ import (
"github.com/gin-gonic/gin"
)
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-06-21 14:27:27
+@ 功能: 根据Key获取个人档案
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *StaffApi) GetPeopleKey(c *gin.Context) {
+ var requestData overallhandle.ConstId
+ err := c.ShouldBindJSON(&requestData)
+ if err != nil {
+ overallhandle.Result(10001, requestData, c)
+ return
+ }
+ if requestData.Id == "" {
+ overallhandle.Result(10001, requestData, c, "未知人员!不可查询信息")
+ return
+ }
+ var myInfo models.ManCont
+ err = myInfo.GetCont(map[string]interface{}{"`key`": requestData.Id})
+ if err != nil {
+ overallhandle.Result(10001, err, c)
+ return
+ }
+ saveInfo := overallhandle.MapOut()
+ structValue := reflect.ValueOf(myInfo)
+ structType := structValue.Type()
+ for i := 0; i < structValue.NumField(); i++ {
+ fieldValue := structValue.Field(i)
+ fieldType := structType.Field(i)
+ saveInfo[fieldType.Name] = fieldValue.Interface()
+ }
+ if myInfo.Birthday != 0 {
+ saveInfo["birthdayTime"] = overallhandle.UnixTimeToDay(myInfo.Birthday, 14) //生日
+ }
+ if myInfo.Entrydate != 0 {
+ saveInfo["EntrydateTime"] = overallhandle.UnixTimeToDay(myInfo.Entrydate, 14) //入职日期
+ }
+ //部门
+ if myInfo.MainDeparment != 0 {
+ var demperMainInfos models.AdministrativeOrganization
+ demperMainInfos.GetCont(map[string]interface{}{"`id`": myInfo.MainDeparment}, "`name`")
+ saveInfo["MainDeparmentName"] = demperMainInfos.Name
+ }
+ //岗位
+ if myInfo.AdminOrg != 0 {
+ var adminOrg models.AdministrativeOrganization
+ adminOrg.GetCont(map[string]interface{}{"`id`": myInfo.AdminOrg}, "`name`")
+ saveInfo["AdminOrgName"] = adminOrg.Name
+ }
+ //职务
+ if myInfo.Position != 0 {
+ var postisInfo models.Position
+ postisInfo.GetCont(map[string]interface{}{"`id`": myInfo.Position}, "`name`", "`person_in_charge`")
+ saveInfo["PositionName"] = postisInfo.Name
+ saveInfo["PersonInCharge"] = postisInfo.PersonInCharge
+ }
+ if myInfo.Isdoubleworker == 1 {
+ var doubleWorkerInfo models.DoubleWorker
+ doubleWorkerInfo.GetCont(map[string]interface{}{"`number`": myInfo.Number, "`state`": 1}, "`name`", "`company`", "`department`", "`position`")
+ saveInfo["WorkCompany"] = fmt.Sprintf("%v%v%v%v", doubleWorkerInfo.Name, doubleWorkerInfo.Company, doubleWorkerInfo.Department, doubleWorkerInfo.Position)
+ } else {
+ saveInfo["WorkCompany"] = ""
+ }
+ saveInfo["GenderName"] = overallhandle.GenderStatus(int64(myInfo.Gender))
+ saveInfo["ConstellationName"] = overallhandle.StarSign(int64(myInfo.Constellation))
+ saveInfo["PolitOutlook"] = overallhandle.PoliticalIdentity(int64(myInfo.PoliticalOutlook))
+ saveInfo["Maristatus"] = overallhandle.MaritalStatus(int64(myInfo.Maritalstatus))
+ //教育经历
+ synPro.Add(1)
+ go func() {
+ saveInfo["EducationalExperience"] = UserEducationalExperience(myInfo.Key)
+ }()
+ //工作履历
+ synPro.Add(1)
+ go func() {
+ saveInfo["ExternalWork"] = getWorkHistoryList(myInfo.Key) //工作履历
+ }()
+ //集团内工作履历
+ synPro.Add(1)
+ go func() {
+ saveInfo["InternalWork"] = getGroupWorkHistoryList(myInfo.Key) //工作履历
+ }()
+ //职称证书
+ synPro.Add(1)
+ go func() {
+ AcademicTitle := GainCertificateHonors(myInfo.Key, 4)
+ saveInfo["AcademicTitle"] = strings.Join(AcademicTitle, ",") //工作履历
+ }()
+ //资格证书
+ synPro.Add(1)
+ go func() {
+ Diploma := GainCertificateHonorsBook(myInfo.Key, 4)
+ saveInfo["Diploma"] = strings.Join(Diploma, ",") //工作履历
+ }()
+
+ currentTime := time.Now()
+ years := currentTime.Year() - 2
+ //绩效成绩 Performance score
+ synPro.Add(1)
+ go func() {
+ saveInfo["Meritslog"] = GainTimeLangMeritslog(myInfo.Key, years, 2) //工作履历
+ }()
+ //获奖情况
+ synPro.Add(1)
+ go func() {
+ saveInfo["Rewards"] = GainRewardsPenalties(myInfo.Key, years, 2, 1) //工作履历
+ }()
+ //惩罚情况
+ synPro.Add(1)
+ go func() {
+ saveInfo["Penalties"] = GainRewardsPenalties(myInfo.Key, years, 2, 2) //工作履历
+ }()
+ //性格社彩
+ var myColor personalitycolor.Charcolortest
+ errColor := myColor.GetCont(map[string]interface{}{"`c_states`": 1, "`c_number`": myInfo.Number}, "`c_id`")
+ if errColor != nil {
+ saveInfo["isColorTrue"] = 2
+ } else {
+ saveInfo["isColorTrue"] = 1
+ }
+ // synPro.Add(1)
+ // go func() {
+ // xgsc := GainCharacterColor(myInfo.Number)
+ // // fmt.Printf("xgsc:%v\n", xgsc)
+ // saveInfo["CharacterColour"] = strings.Join(xgsc.TestNumber, "、") //工作履历
+ // saveInfo["ColourNameList"] = xgsc.TestNumber //工作履历
+ // saveInfo["RadarColour"] = xgsc.ColorMap
+ // }()
+ synPro.Wait()
+ overallhandle.Result(0, saveInfo, c)
+}
+
/*
*
@ 作者: 秦东
@@ -52,13 +195,23 @@ func (s *StaffApi) PersonnelFiles(c *gin.Context) {
saveInfo := overallhandle.MapOut()
structValue := reflect.ValueOf(myInfo)
structType := structValue.Type()
+ saveInfo["excel_template"] = myInfo.ExcelTemplate
for i := 0; i < structValue.NumField(); i++ {
fieldValue := structValue.Field(i)
fieldType := structType.Field(i)
saveInfo[fieldType.Name] = fieldValue.Interface()
}
if myInfo.Birthday != 0 {
- saveInfo["birthdayTime"] = overallhandle.UnixTimeToDay(myInfo.Birthday, 14) //生日
+ birthday := overallhandle.UnixTimeToDay(myInfo.Birthday, 14) //生日
+ saveInfo["birthdayTime"] = birthday
+ saveInfo["age"] = overallhandle.GetAgeByBirthday(birthday, 1)
+
+ } else {
+ if myInfo.Idcardno != "" {
+ birthday := overallhandle.GetBirthday(myInfo.Idcardno)
+ saveInfo["birthdayTime"] = birthday
+ saveInfo["age"] = overallhandle.GetAgeByBirthday(birthday)
+ }
}
if myInfo.Entrydate != 0 {
saveInfo["EntrydateTime"] = overallhandle.UnixTimeToDay(myInfo.Entrydate, 14) //入职日期
@@ -93,6 +246,7 @@ func (s *StaffApi) PersonnelFiles(c *gin.Context) {
saveInfo["ConstellationName"] = overallhandle.StarSign(int64(myInfo.Constellation))
saveInfo["PolitOutlook"] = overallhandle.PoliticalIdentity(int64(myInfo.PoliticalOutlook))
saveInfo["Maristatus"] = overallhandle.MaritalStatus(int64(myInfo.Maritalstatus))
+ saveInfo["KeyStr"] = strconv.FormatInt(myInfo.Key, 10)
//教育经历
synPro.Add(1)
go func() {
@@ -122,7 +276,7 @@ func (s *StaffApi) PersonnelFiles(c *gin.Context) {
}()
currentTime := time.Now()
- years := currentTime.Year() - 2
+ years := currentTime.Year() - 1
//绩效成绩 Performance score
synPro.Add(1)
go func() {
@@ -138,14 +292,65 @@ func (s *StaffApi) PersonnelFiles(c *gin.Context) {
go func() {
saveInfo["Penalties"] = GainRewardsPenalties(myInfo.Key, years, 2, 2) //工作履历
}()
+ //家庭成员
+ synPro.Add(1)
+ go func() {
+ saveInfo["familyMembers"] = FamilyMembers(myInfo.Key) //工作履历
+ }()
//性格社彩
- var myColor personalitycolor.Charcolortest
- errColor := myColor.GetCont(map[string]interface{}{"`c_states`": 1, "`c_number`": requestData.Number}, "`c_id`")
- if errColor != nil {
- saveInfo["isColorTrue"] = 2
+ // var myColor personalitycolor.Charcolortest
+ // errColor := myColor.GetCont(map[string]interface{}{"`c_states`": 1, "`c_number`": requestData.Number}, "`c_id`", "`c_class`")
+ // if errColor != nil {
+ // saveInfo["isColorTrue"] = 2
+ // } else {
+ // if myColor.Class == 10000002 {
+ // saveInfo["isColorTrue"] = 3
+ // } else {
+ // saveInfo["isColorTrue"] = 1
+ // }
+ // }
+
+ var personalityTest []personalitycolor.Charcolortest
+ overall.CONSTANT_Personality_Color.Where("`c_states` = 1 AND `c_number` = ?", requestData.Number).Find(&personalityTest)
+ if len(personalityTest) > 0 {
+ rongXin := false
+ gaoKe := false
+ for _, v := range personalityTest {
+ if v.Class == 10000002 {
+ rongXin = true
+ }
+ if v.Class == 10000001 {
+ gaoKe = true
+ }
+ }
+ if rongXin && gaoKe {
+ saveInfo["isColorTrue"] = 4
+ } else if rongXin {
+ saveInfo["isColorTrue"] = 3
+ } else {
+ saveInfo["isColorTrue"] = 1
+ }
} else {
- saveInfo["isColorTrue"] = 1
+ if myInfo.ExcelTemplate == 296 {
+ var rcpdInfo models.TalentInventory
+ err = rcpdInfo.GetCont(map[string]interface{}{"`userKey`": myInfo.Key}, "`userTypes`")
+ if err != nil {
+ saveInfo["isColorTrue"] = 2
+ } else {
+ if rcpdInfo.UserTypes != "" {
+ saveInfo["isColorTrue"] = 5
+ saveInfo["userTypes"] = rcpdInfo.UserTypes
+ } else {
+ saveInfo["isColorTrue"] = 2
+ }
+ }
+
+ } else {
+ saveInfo["isColorTrue"] = 2
+ }
+
}
+
// synPro.Add(1)
// go func() {
// xgsc := GainCharacterColor(myInfo.Number)
@@ -158,6 +363,29 @@ func (s *StaffApi) PersonnelFiles(c *gin.Context) {
overallhandle.Result(0, saveInfo, c)
}
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-09 10:12:01
+@ 功能: 家庭成员
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func FamilyMembers(userKey int64) (list []models.FamilyMembers) {
+ defer synPro.Done()
+ overall.CONSTANT_DB_HR.Model(&models.FamilyMembers{}).Where("`state` = 1 AND `key` = ?", userKey).Find(&list)
+ return
+}
+
/*
*
@ 作者: 秦东
@@ -436,6 +664,7 @@ func GainRewardsPenalties(userKey int64, years, duration, class int) map[string]
timeValStr := strconv.Itoa(years)
sendData[timeValStr] = allScore
}
+ fmt.Printf("奖惩记录55555: %v\n", sendData)
return sendData
}
@@ -489,6 +718,7 @@ func GainTimeLangMeritslog(userKey int64, years, duration int) map[string]interf
overall.CONSTANT_DB_HR.Model(&models.Meritslog{}).Select("SUM(`score`) as `scoresum`").Where("`status` = 1 AND `userkey` = ? AND `years` = ?", userKey, years).Find(&allScore)
sendData[timeValStr] = allScore
}
+ fmt.Printf("绩效成绩%v\n", sendData)
return sendData
}
@@ -569,7 +799,12 @@ func UserEducationalExperience(num int64) (eduExper []educatExp) {
dwManCont.GraduationSchool = v.GraduationSchool //毕业学校
dwManCont.Subject = v.Subject //专业
dwManCont.Education = v.Education //学历
- dwManCont.EducationName = overallhandle.EducationLevel(int64(v.Education))
+ if v.XueLi != "" {
+ dwManCont.EducationName = v.XueLi
+ } else {
+ dwManCont.EducationName = overallhandle.EducationLevel(int64(v.Education))
+ }
+
if v.AdmissionTime != 0 {
dwManCont.AdmissionTime = overallhandle.UnixTimeToDay(v.AdmissionTime, 14) //入学时间
}
diff --git a/api/version1/shiyan/shiyan.go b/api/version1/shiyan/shiyan.go
index f308d1f..2943ac5 100644
--- a/api/version1/shiyan/shiyan.go
+++ b/api/version1/shiyan/shiyan.go
@@ -4,10 +4,12 @@ import (
"fmt"
"hr_server/api/jindie_docking/dockingorganization"
"hr_server/api/version1/personnelapi"
+ "hr_server/api/version1/workWechat"
"hr_server/grocerystore"
"hr_server/models"
"hr_server/overall"
"hr_server/overall/overallhandle"
+ "strconv"
"time"
"github.com/gin-gonic/gin"
@@ -580,3 +582,92 @@ func (a *ShiYan) WriteToken(c *gin.Context) {
fmt.Printf("redisMyContKey------Login----->%v----->%v\n", redisMyContKey, shjd)
overallhandle.Result(0, saveData, c)
}
+
+func (s *ShiYan) WorkWechat(c *gin.Context) {
+ var requestData overallhandle.ConstId
+ err := c.ShouldBindJSON(&requestData)
+ fmt.Printf("err--1->%v\n", err)
+ if err != nil {
+ overallhandle.Result(100, err, c)
+ return
+ }
+ // token := workWechat.GainWechatTokenUnify()
+ // // md5Token := "WorkWechatUpdatePeopleInfo"
+ // // // errWechat := workWechat.UpdateWechatOrgPeople(51, "txl", md5Token, 1)
+ // var orgMap workWechat.WechatOrg
+ // orgMap.OrgId = 51
+ // orgMap.Token = token
+ // // orgList, err := workWechat.GainWechatDepartment(51, "txl", md5Token, 1)
+ // orgMap.GainWechatOrgList()
+ // if orgMap.NewToekn {
+ // token = orgMap.Token
+ // }
+ // orgMap.GainOrgPeopleList()
+ // sendMap := make(map[string]interface{})
+ // sendMap["token"] = token
+ // sendMap["orgMap"] = orgMap
+ // sendMap["jiegou"] = jiegou
+ // sendMap["newToken"] = newToken
+
+ // if err != nil {
+ // overallhandle.Result(0, sendMap, c)
+ // return
+ // }
+ //获取行政组织下的人员信息
+ // var orgPeople workWechat.WechatOrgPeole
+ // for _, v := range orgMap.OrgList {
+ // synPro.Add(1)
+ // // go GainOrgManAry(int64(v.Id), "txl", md5Token, 1)
+ // go orgPeople.GainOrgPeopleList(v)
+ // }
+ // synPro.Wait()
+ // overallhandle.Result(0, sendMap, c)
+ idInt, err := strconv.ParseInt(requestData.Id, 10, 64)
+ fmt.Printf("err--2->%v\n", err)
+ workWechat.NewTimedTasksForOrgWechat(idInt)
+ overallhandle.Result(100, err, c)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-02 10:57:08
+@ 功能: 获取去行政组织下的人员信息
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func GainOrgManAry(orgId int64, systemApp, key string, isAgain int) {
+ defer synPro.Done()
+
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-10-30 08:34:40
+@ 功能: 测试获取职务
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (s *ShiYan) GetTestPost(c *gin.Context) {
+ postId, _ := personnelapi.GetFasterPostId(12)
+ overallhandle.Result(0, postId, c)
+}
diff --git a/api/version1/shiyan/全部企业微信行政组织.ini b/api/version1/shiyan/全部企业微信行政组织.ini
new file mode 100644
index 0000000..3c7cd3c
--- /dev/null
+++ b/api/version1/shiyan/全部企业微信行政组织.ini
@@ -0,0 +1,12 @@
+{"errcode":0,"errmsg":"ok","department":[{"id":1,"name":"山东恒信集团","parentid":0,"order":100000000,"department_leader":[]},{"id":2,"name":"荣信集团","parentid":1,"order":100000000,"department_leader":[]},{"id":3,"name":"恒信高科","parentid":1,"order":99999000,"department_leader":[]},{"id":4,"name":"恒信生物","parentid":1,"order":99998000,"department_leader":[]},{"id":5,"name":"恒信置业","parentid":1,"order":99997000,"department_leader":[]},{"id":6,"name":"高管","parentid":2,"order":100000000,"department_leader":[]},{"id":7,"name":"办公室","parentid":2,"order":99999000,"department_leader":[]},{"id":8,"name":"人才发展中心","parentid":2,"order":99998000,"department_leader":[]},{"id":9,"name":"企管部","parentid":2,"order":99997000,"department_leader":["WangBin"]},{"id":10,"name":"审计部","parentid":2,"order":99996000,"department_leader":[]},{"id":11,"name":"法律事务部","parentid":2,"order":99995000,"department_leader":["RenYingBin"]},{"id":12,"name":"财务部","parentid":2,"order":99994000,"department_leader":[]},{"id":13,"name":"供应部","parentid":2,"order":99993000,"department_leader":["TianYingQiu"]},{"id":14,"name":"销售部","parentid":2,"order":99992000,"department_leader":[]},{"id":15,"name":"生产计划部","parentid":2,"order":99991000,"department_leader":["YueYang"]},{"id":16,"name":"工程技术
+部","parentid":2,"order":99990000,"department_leader":[]},{"id":17,"name":"基建部","parentid":2,"order":99989000,"department_leader":[]},{"id":18,"name":"安环部","parentid":2,"order":99988000,"department_leader":[]},{"id":19,"name":"保卫部","parentid":2,"order":99987000,"department_leader":[]},{"id":20,"name":"备煤车间","parentid":144,"order":100001000,"department_leader":[]},{"id":21,"name":"化产分厂","parentid":2,"order":99985000,"department_leader":[]},{"id":22,"name":"机焦车间","parentid":144,"order":100000000,"department_leader":[]},{"id":23,"name":"动力分厂","parentid":2,"order":99983000,"department_leader":[]},{"id":24,"name":"甲醇分厂","parentid":2,"order":99982000,"department_leader":[]},{"id":25,"name":"仓储中心","parentid":2,"order":99981000,"department_leader":[]},{"id":26,"name":"物流中心","parentid":2,"order":99980000,"department_leader":[]},{"id":27,"name":"恒信科技","parentid":2,"order":99979000,"department_leader":[]},{"id":28,"name":"恒信新材料","parentid":2,"order":99977000,"department_leader":[]},{"id":29,"name":"高管","parentid":4,"order":100000000,"department_leader":[]},{"id":30,"name":"综合部","parentid":4,"order":99999000,"department_leader":[]},{"id":33,"name":"营销部","parentid":4,"order":99996000,"department_leader":[]},{"id":34,"name":"生产部","parentid":4,"order":99995000,"department_leader":[]},{"id":35,"name":"技术部","parentid":4,"order":99994000,"department_leader":[]},{"id":42,"name":"高管","parentid":5,"order":100000000,"department_leader":[]},{"id":43,"name":"恒信公馆项目部","parentid":5,"order":99999000,"department_leader":[]},{"id":44,"name":"集团高管","parentid":1,"order":100004000,"department_leader":[]},{"id":45,"name":"集团办公室","parentid":1,"order":100003000,"department_leader":[]},{"id":46,"name":"集团财务部","parentid":1,"order":100002000,"department_leader":[]},{"id":47,"name":"集团营销部","parentid":1,"order":100001000,"department_leader":[]},{"id":48,"name":"高管","parentid":3,"order":100000000,"department_leader":[]},{"id":49,"name":"综合办","parentid":3,"order":99999000,"department_leader":["JingXueWan"]},{"id":50,"name":"人资部","parentid":3,"order":99998000,"department_leader":["FanYueSheng"]},{"id":51,"name":"企管部","parentid":3,"order":99997000,"department_leader":["WoBenShanLiang_3"]},{"id":52,"name":"财务部","parentid":3,"order":99996000,"department_leader":["DongWenFang"]},{"id":53,"name":"营销部","parentid":3,"order":99995000,"department_leader":["TianYingQiu"]},{"id":54,"name":"生产部","parentid":3,"order":99994000,"department_leader":["JinHao"]},{"id":55,"name":"质检中心","parentid":3,"order":99986000,"department_leader":["ZhangJinSong"]},{"id":56,"name":"安环部","parentid":3,"order":99992000,"department_leader":["HuYuanFang"]},{"id":57,"name":"保卫部","parentid":3,"order":99995500,"department_leader":["DaAi"]},{"id":59,"name":"化产分厂
+","parentid":3,"order":99989000,"department_leader":["LuoHua"]},{"id":60,"name":"动力分厂","parentid":3,"order":99986500,"department_leader":["XuChao_1"]},{"id":61,"name":"甲醇分厂","parentid":3,"order":99987000,"department_leader":[]},{"id":73,"name":"仓储中心","parentid":3,"order":99985000,"department_leader":["XinPing"]},{"id":76,"name":"物流中心","parentid":3,"order":99984000,"department_leader":["GuoCheng","WanMeiShengHuo"]},{"id":77,"name":"食堂","parentid":49,"order":100000000,"department_leader":["YiQieKaoZiJi"]},{"id":78,"name":"车班","parentid":49,"order":99999000,"department_leader":[]},{"id":79,"name":"办公室","parentid":49,"order":100001000,"department_leader":[]},{"id":81,"name":"IT","parentid":51,"order":99999000,"department_leader":[]},{"id":82,"name":"1号餐厅(创新中心)","parentid":77,"order":100000000,"department_leader":[]},{"id":83,"name":"2号餐厅(厂区)","parentid":77,"order":99999000,"department_leader":[]},{"id":85,"name":"鼓冷工段","parentid":59,"order":100000000,"department_leader":[]},{"id":86,"name":"HPF脱硫工段","parentid":59,"order":99999000,"department_leader":[]},{"id":87,"name":"硫铵工段","parentid":59,"order":99998000,"department_leader":["WangHongFei--HuaChan--ZhongKong"]},{"id":88,"name":"粗苯工段","parentid":59,"order":99997000,"department_leader":[]},{"id":89,"name":"循
+环水工段","parentid":59,"order":99996000,"department_leader":["MaGuoHua"]},{"id":90,"name":"电气工段","parentid":181,"order":100000000,"department_leader":[]},{"id":92,"name":"中控室","parentid":59,"order":100001000,"department_leader":[]},{"id":91,"name":"锅炉工段","parentid":60,"order":99999000,"department_leader":[]},{"id":93,"name":"污水工段","parentid":60,"order":99998000,"department_leader":[]},{"id":94,"name":"中水工段","parentid":60,"order":99997000,"department_leader":[]},{"id":95,"name":"高科厂区","parentid":201,"order":100000000,"department_leader":[]},{"id":96,"name":"仪表工段","parentid":181,"order":99999000,"department_leader":[]},{"id":97,"name":"油库工段","parentid":59,"order":99996500,"department_leader":[]},{"id":98,"name":"煤焦","parentid":55,"order":100000000,"department_leader":[]},{"id":99,"name":"化产品","parentid":55,"order":99999000,"department_leader":[]},{"id":100,"name":"计量中心","parentid":54,"order":99998000,"department_leader":["XinPing"]},{"id":101,"name":"设备专业","parentid":54,"order":100000000,"department_leader":["HeXieZhongGuo"]},{"id":103,"name":"生产调度","parentid":54,"order":100001000,"department_leader":[]},{"id":118,"name":"恒信荟荃","parentid":2,"order":99976000,"department_leader":[]},{"id":121,"name":"主装置工段","parentid":61,"order":99998000,"department_leader":[]},{"id":122,"name":"压缩工段","parentid":61,"order":99997000,"department_leader":[]},{"id":123,"name":"空分工段","parentid":61,"order":99996000,"department_leader":[]},{"id":124,"name":"装卸站","parentid":61,"order":99995000,"department_leader":[]},{"id":125,"name":"甲醇办公室","parentid":61,"order":99994000,"department_leader":[]},{"id":134,"name":"品保部","parentid":4,"order":99987000,"department_leader":[]},{"id":135,"name":"安环部","parentid":4,"order":99986000,"department_leader":[]},{"id":138,"name":"桃园物业","parentid":5,"order":99998000,"department_leader":[]},{"id":139,"name":"车班","parentid":7,"order":100000000,"department_leader":[]},{"id":140,"name":"纪检部","parentid":2,"order":99986500,"department_leader":[]},{"id":143,"name":"人
+力资源部","parentid":4,"order":99984000,"department_leader":[]},{"id":144,"name":"煤焦分厂","parentid":2,"order":99986000,"department_leader":[]},{"id":145,"name":"技术部","parentid":3,"order":99993500,"department_leader":["Jin"]},{"id":146,"name":"销售","parentid":53,"order":100000000,"department_leader":[]},{"id":147,"name":"供应","parentid":53,"order":99999000,"department_leader":["LiuHui"]},{"id":149,"name":"土建","parentid":145,"order":99999000,"department_leader":[]},{"id":151,"name":"机动队","parentid":57,"order":100000000,"department_leader":[]},{"id":156,"name":"甲班","parentid":76,"order":100000000,"department_leader":[]},{"id":157,"name":"乙班","parentid":76,"order":99999000,"department_leader":[]},{"id":159,"name":"甲班","parentid":57,"order":99999000,"department_leader":[]},{"id":160,"name":"乙班","parentid":57,"order":99998000,"department_leader":[]},{"id":161,"name":"丙班","parentid":57,"order":99997000,"department_leader":[]},{"id":162,"name":"丁班","parentid":57,"order":99996000,"department_leader":[]},{"id":163,"name":"货场","parentid":57,"order":99995000,"department_leader":[]},{"id":166,"name":"接待中心
+","parentid":2,"order":99974000,"department_leader":[]},{"id":167,"name":"质检中心","parentid":2,"order":99973000,"department_leader":[]},{"id":168,"name":"新入职人员待分配","parentid":1,"order":99994000,"department_leader":[]},{"id":169,"name":"二","parentid":19,"order":100000000,"department_leader":[]},{"id":171,"name":"三","parentid":19,"order":99998000,"department_leader":[]},{"id":172,"name":"一","parentid":19,"order":100001000,"department_leader":[]},{"id":173,"name":"四","parentid":19,"order":99996000,"department_leader":[]},{"id":174,"name":"码头","parentid":19,"order":99995000,"department_leader":[]},{"id":175,"name":"六","parentid":19,"order":99995625,"department_leader":[]},{"id":176,"name":"五","parentid":19,"order":99995750,"department_leader":[]},{"id":177,"name":"机动队","parentid":19,"order":99995312,"department_leader":[]},{"id":180,"name":"清洁","parentid":49,"order":99998000,"department_leader":[]},{"id":181,"name":"
+电仪分厂","parentid":3,"order":99986250,"department_leader":["SunHeShun"]},{"id":182,"name":"安全部","parentid":56,"order":100000000,"department_leader":[]},{"id":183,"name":"环保部","parentid":56,"order":99999000,"department_leader":[]},{"id":191,"name":"恒信金服","parentid":1,"order":99994500,"department_leader":[]},{"id":192,"name":"业务发展部","parentid":191,"order":100000000,"department_leader":[]},{"id":193,"name":"风险控制部","parentid":191,"order":99999000,"department_leader":[]},{"id":194,"name":"财务部","parentid":191,"order":99998000,"department_leader":[]},{"id":195,"name":"综合管理部","parentid":191,"order":99997000,"department_leader":[]},{"id":196,"name":"高管","parentid":191,"order":100001000,"department_leader":[]},{"id":197,"name":"提盐工段","parentid":60,"order":99992000,"department_leader":[]},{"id":198,"name":"发电运行","parentid":60,"order":99991000,"department_leader":[]},{"id":199,"name":"办公室","parentid":60,"order":99990000,"department_leader":[]},{"id":200,"name":"3号餐厅(铁路货场)","parentid":77,"order":99998000,"department_leader":[]},{"id":201,"name":"玖安工程","parentid":1,"order":99994250,"department_leader":["WangHaiTing"]},{"id":202,"name":"长白","parentid":76,"order":99998000,"department_leader":[]},{"id":203,"name":"荣信厂区","parentid":201,"order":99999000,"department_leader":[]},{"id":204,"name":"综合管理","parentid":9,"order":100000000,"department_leader":[]},{"id":205,"name":"信息化中心","parentid":9,"order":99999000,"department_leader":[]},{"id":206,"name":"生产部装瓶","parentid":34,"order":100000000,"department_leader":["HuaiHuai"]},{"id":207,"name":"生产办公室","parentid":34,"order":99999000,"department_leader":[]},{"id":209,"name":"生
+产部包装","parentid":34,"order":99998000,"department_leader":["XuanLv"]},{"id":210,"name":"生产部生育","parentid":34,"order":99997000,"department_leader":["BaXinAoChengTie"]},{"id":211,"name":"生产部培养","parentid":34,"order":99996000,"department_leader":["keepwatch"]},{"id":212,"name":"生产部接种","parentid":34,"order":99995000,"department_leader":["ZhengZaiShanChu"]},{"id":213,"name":"生产部公用工程","parentid":34,"order":99994000,"department_leader":["JiaYouSanBao"]},{"id":214,"name":"生产部设备","parentid":34,"order":99993000,"department_leader":["HouBuBin"]},{"id":215,"name":"企业宣传","parentid":9,"order":99998000,"department_leader":[]},{"id":216,"name":"仪表","parentid":15,"order":100000000,"department_leader":["WangJingLei"]},{"id":217,"name":"生产工艺","parentid":15,"order":100001000,"department_leader":["YueYang","ZhangMeiRong"]},{"id":218,"name":"备煤甲班","parentid":20,"order":100000000,"department_leader":[]},{"id":219,"name":"备煤乙班","parentid":20,"order":99999000,"department_leader":[]},{"id":220,"name":"备煤丙班","parentid":20,"order":99998000,"department_leader":[]},{"id":221,"name":"备煤丁班","parentid":20,"order":99997000,"department_leader":[]},{"id":227,"name":"厨师","parentid":166,"order":100000000,"department_leader":["ZhangFaXun"]},{"id":228,"name":"面点师","parentid":166,"order":99999000,"department_leader":["PingFanDeShiJie_1"]},{"id":229,"name":"服务","parentid":166,"order":99998000,"department_leader":["fdfed41136abbc4171742dfc9989f666"]},{"id":230,"name":"办公室","parentid":30,"order":100000000,"department_leader":[]},{"id":231,"name":"食堂","parentid":30,"order":99999000,"department_leader":[]},{"id":232,"name":"保洁","parentid":30,"order":99998000,"department_leader":[]},{"id":233,"name":"调控","parentid":35,"order":100000000,"department_leader":[]},{"id":234,"name":"菌种","parentid":35,"order":99999000,"department_leader":[]},{"id":235,"name":"办公室","parentid":19,"order":100002000,"department_leader":[]},{"id":236,"name":"煤料","parentid":20,"order":99996000,"department_leader":[]},{"id":237,"name":"焦场","parentid":20,"order":99995000,"department_leader":[]},{"id":238,"name":"车队","parentid":20,"order":99994000,"department_leader":[]},{"id":239,"name":"电工","parentid":20,"order":99993000,"department_leader":[]},{"id":241,"name":"荟荃生产部","parentid":118,"order":100000000,"department_leader":[]},{"id":242,"name":"荟荃综合办","parentid":118,"order":99999000,"department_leader":[]},{"id":244,"name":"(荣信)干熄焦工段","parentid":22,"order":99999000,"department_leader":["QingHuaDian"]},{"id":245,"name":"电修工段","parentid":22,"order":99998000,"department_leader":["LiuShouBo"]},{"id":246,"name":"余热工段","parentid":22,"order":99997000,"department_leader":["YuCheng"]},{"id":247,"name":"地面站班组","parentid":22,"order":99996000,"department_leader":["HuaLuoQianNianQingKeGu"]},{"id":248,"name":"一期工段","parentid":22,"order":99999500,"department_leader":["skl"]},{"id":249,"name":"二期工段","parentid":22,"order":99999250,"department_leader":["FengYun"]},{"id":250,"name":"焦油车间","parentid":28,"order":100000000,"department_leader":[]},{"id":251,"name":"动力车间","parentid":28,"order":99999000,"department_leader":[]},{"id":252,"name":"针状焦车间","parentid":28,"order":99998000,"department_leader":[]},{"id":253,"name":"机动班组","parentid":20,"order":99991000,"department_leader":[]},{"id":254,"name":"煤焦办公室","parentid":144,"order":100002000,"department_leader":["JieJiaoDeLan"]},{"id":255,"name":"工艺组","parentid":16,"order":99999000,"department_leader":[]},{"id":256,"name":"设备组","parentid":16,"order":99998000,"department_leader":[]},{"id":257,"name":"电仪组","parentid":16,"order":99997000,"department_leader":[]},{"id":258,"name":"保卫部","parentid":4,"order":99983000,"department_leader":[]},{"id":259,"name":"综合办","parentid":28,"order":99997000,"department_leader":[]},{"id":260,"name":"动力锅炉工段","parentid":23,"order":100000000,"department_leader":[]},{"id":261,"name":"安全科","parentid":28,"order":99996000,"department_leader":[]},{"id":262,"name":"动力电气工段","parentid":23,"order":99999000,"department_leader":[]},{"id":263,"name":"动力余热发电工段","parentid":23,"order":99998000,"department_leader":[]},{"id":264,"name":"动力污水工段","parentid":23,"order":99997000,"department_leader":[]},{"id":265,"name":"动力除盐水工段","parentid":23,"order":99996000,"department_leader":[]},{"id":266,"name":"动力中水工段","parentid":23,"order":99995000,"department_leader":[]},{"id":267,"name":"鼓冷工段","parentid":21,"order":100000000,"department_leader":[]},{"id":268,"name":"脱硫工段","parentid":21,"order":99999000,"department_leader":[]},{"id":269,"name":"硫铵工段","parentid":21,"order":99998000,"department_leader":[]},{"id":270,"name":"粗苯工段","parentid":21,"order":99997000,"department_leader":[]},{"id":271,"name":"精脱硫工段","parentid":21,"order":99996000,"department_leader":[]},{"id":272,"name":"副盐工段
+","parentid":21,"order":99995000,"department_leader":[]},{"id":273,"name":"中控室","parentid":21,"order":100001000,"department_leader":[]},{"id":275,"name":"动力循环水站","parentid":23,"order":99993000,"department_leader":[]},{"id":276,"name":"动力办公室","parentid":23,"order":99992000,"department_leader":[]},{"id":278,"name":"电气维修","parentid":21,"order":99993000,"department_leader":[]},{"id":279,"name":"分厂办公室","parentid":21,"order":100002000,"department_leader":[]},{"id":281,"name":"科技质检","parentid":167,"order":99999000,"department_leader":["GaoJingJing","XianXiaSuiFeng"]},{"id":282,"name":"新材料质检","parentid":167,"order":99998000,"department_leader":["LiuYuanYuan"]},{"id":288,"name":"恒信科技仪表工段","parentid":27,"order":100000000,"department_leader":["YingZi_1"]},{"id":289,"name":"恒信科技电气工段","parentid":27,"order":99999000,"department_leader":["LiuZhiDan"]},{"id":290,"name":"荣信质检","parentid":167,"order":99992000,"department_leader":[]},{"id":291,"name":"煤焦分析","parentid":290,"order":100000000,"department_leader":["XiaoGuanZi"]},{"id":292,"name":"化产品分析","parentid":290,"order":99999000,"department_leader":["znhionug"]},{"id":293,"name":"采制样","parentid":290,"order":99998000,"department_leader":["WangZhe","1da4508013cd8aa0ce343402ddedd3ae","WangZai","cc","CongBuXiao"]},{"id":294,"name":"质检办公室","parentid":167,"order":99991000,"department_leader":["GaoYanLiang","LiXianXian"]},{"id":295,"name":"恒信科技维修工段","parentid":27,"order":99998000,"department_leader":[]},{"id":296,"name":"恒信科技办公室","parentid":27,"order":99997000,"department_leader":[]},{"id":297,"name":"恒信科技产品精制工段","parentid":27,"order":99996000,"department_leader":["MaoMaoChong"]},{"id":298,"name":"恒信科技苯加氢工段","parentid":27,"order":99995000,"department_leader":["GaoHan"]},{"id":299,"name":"恒信科技蒽油加氢工段","parentid":27,"order":99994000,"department_leader":[]},{"id":300,"name":"恒信科技辅运工段","parentid":27,"order":99993000,"department_leader":[]},{"id":302,"name":"客房部","parentid":166,"order":99997000,"department_leader":[]},{"id":303,"name":"新入职","parentid":28,"order":99995000,"department_leader":[]},{"id":304,"name":"新员工","parentid":21,"order":99992000,"department_leader":[]},{"id":305,"name":"恒
+信科技新入职","parentid":27,"order":99992000,"department_leader":[]},{"id":306,"name":"备煤车间","parentid":3,"order":99989750,"department_leader":["MaYunYong","TianZhiJiaoZi"]},{"id":307,"name":"机焦车间","parentid":3,"order":99989375,"department_leader":["SanHuiYi"]},{"id":308,"name":"单种煤工段","parentid":306,"order":100000000,"department_leader":[]},{"id":309,"name":"配煤
+工段","parentid":306,"order":99999000,"department_leader":[]},{"id":310,"name":"运焦工段","parentid":306,"order":99998000,"department_leader":[]},{"id":311,"name":"焦场工段","parentid":306,"order":99997000,"department_leader":[]},{"id":312,"name":"机运车队","parentid":306,"order":99996000,"department_leader":[]},{"id":313,"name":"办公室","parentid":306,"order":99995000,"department_leader":[]},{"id":314,"name":"清洁工段","parentid":306,"order":99994000,"department_leader":[]},{"id":315,"name":"生产工段","parentid":306,"order":99993000,"department_leader":[]},{"id":316,"name":"生产工段","parentid":307,"order":100000000,"department_leader":[]},{"id":317,"name":"节能环保工段","parentid":307,"order":99999000,"department_leader":[]},{"id":318,"name":"热调
+工段","parentid":307,"order":99998000,"department_leader":[]},{"id":319,"name":"干熄焦工段","parentid":307,"order":99998500,"department_leader":[]},{"id":320,"name":"办公室","parentid":307,"order":99996000,"department_leader":[]},{"id":321,"name":"110kV变电站","parentid":181,"order":99998000,"department_leader":[]},{"id":322,"name":"二级培训新员工","parentid":19,"order":99994000,"department_leader":[]},{"id":323,"name":"乙醇项目组","parentid":16,"order":99996000,"department_leader":[]},{"id":324,"name":"综合管理","parentid":51,"order":100001000,"department_leader":[]},{"id":325,"name":"暂调乙醇项目人员","parentid":27,"order":99991000,"department_leader":[]},{"id":326,"name":"中碳氢能源","parentid":3,"order":99983000,"department_leader":["SheDe"]},{"id":327,"name":"安全科","parentid":326,"order":100000000,"department_leader":[]},{"id":328,"name":"生产科","parentid":326,"order":99999000,"department_leader":[]},{"id":329,"name":"岗监办","parentid":56,"order":99998000,"department_leader":[]}]}
\ No newline at end of file
diff --git a/api/version1/workWechat/typeApi.go b/api/version1/workWechat/typeApi.go
index 8482bca..d4aedde 100644
--- a/api/version1/workWechat/typeApi.go
+++ b/api/version1/workWechat/typeApi.go
@@ -63,3 +63,16 @@ type XmlMsgUpdateCont struct {
Event string `xml:"Event" json:"Event"`
EventKey string `xml:"EventKey" json:"EventKey"`
}
+
+type WechatOrg struct {
+ OrgId int64
+ Token string
+ NewToekn bool
+ OrgList []WechatDepartmentInfo
+}
+
+type WechatOrgPeole struct {
+ Token string
+ NewToekn bool
+ UserList []WechatUserList `json:"userlist"`
+}
diff --git a/api/version1/workWechat/wechat.go b/api/version1/workWechat/wechat.go
index eb9e04a..784d6ad 100644
--- a/api/version1/workWechat/wechat.go
+++ b/api/version1/workWechat/wechat.go
@@ -48,7 +48,7 @@ func GainWechatToken(systemApp, key string, isAgain int) (token string, err erro
redisFileKey = fmt.Sprintf("%v_%v_%v", redisFileKey, systemApp, overall.CONSTANT_CONFIG.EmployeeFile.Agentid)
secretStr = overall.CONSTANT_CONFIG.EmployeeFile.Secret
case "txl":
- redisFileKey = fmt.Sprintf("%v_%v_%v", redisFileKey, systemApp, overall.CONSTANT_CONFIG.EmployeeFile.Agentid)
+ redisFileKey = fmt.Sprintf("%v_%v_%v", redisFileKey, systemApp, overall.CONSTANT_CONFIG.AddressBook.Agentid)
secretStr = overall.CONSTANT_CONFIG.AddressBook.Secret
default:
redisFileKey = fmt.Sprintf("%v_%v", redisFileKey, systemApp)
@@ -63,7 +63,7 @@ func GainWechatToken(systemApp, key string, isAgain int) (token string, err erro
redisClient.Set(redisFileKey, token)
} else {
isTrue, tokens := redisClient.Get(redisFileKey)
- if isTrue && token != "" {
+ if isTrue && tokens != "" {
err = nil
token = tokens
return
@@ -76,7 +76,7 @@ func GainWechatToken(systemApp, key string, isAgain int) (token string, err erro
redisClient.Set(redisFileKey, token)
}
}
-
+ // fmt.Printf("tokenKey: %v\n", redisFileKey)
return
}
@@ -138,6 +138,9 @@ func GainJsapiTicket(systemApp, key string, class int) (jsApiTickerStr string, e
jsApiTicketRedis := fmt.Sprintf("Wechat:JsapiTicket:%v_%v_%v", systemApp, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, class)
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
isTrue, jsApiTickerInfo := redisClient.Get(jsApiTicketRedis) //读取redis数据
+
+ fmt.Printf("读取redis数据-2-2->%v->%v->%v\n", jsApiTicketRedis, isTrue, jsApiTickerInfo)
+
if isTrue {
jsApiTickerStr = jsApiTickerInfo
err = nil
diff --git a/api/version1/workWechat/wechatApi.go b/api/version1/workWechat/wechatApi.go
index 2b187d9..e88b6da 100644
--- a/api/version1/workWechat/wechatApi.go
+++ b/api/version1/workWechat/wechatApi.go
@@ -43,6 +43,9 @@ func (a *ApiMethod) GainWechatToken(c *gin.Context) {
overallhandle.Result(100, err, c)
return
}
+ if requestData.IsAgain == 0 {
+ requestData.IsAgain = 1
+ }
host := c.Request.Header.Get("Host")
userAgent := c.Request.Header.Get("User-Agent")
wechatTokenStr := fmt.Sprintf("%v_%v", host, userAgent)
@@ -200,6 +203,9 @@ func (a *ApiMethod) CallBackAuthUser(c *gin.Context) {
userNum := c.Query("usernum")
md5Token := GainTokenKey(c)
isAgainInt, _ := strconv.Atoi(isAgain)
+ if isAgainInt == 0 {
+ isAgainInt = 1
+ }
token, _ := GainWechatToken(systemApp, md5Token, isAgainInt)
gainWechatInfo := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=%v&code=%v", token, code)
// gainWechatInfo := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=%v&code=%v", state, code)
diff --git a/api/version1/workWechat/workWechat.go b/api/version1/workWechat/workWechat.go
new file mode 100644
index 0000000..1790003
--- /dev/null
+++ b/api/version1/workWechat/workWechat.go
@@ -0,0 +1,365 @@
+package workWechat
+
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+ "hr_server/models"
+ "hr_server/overall"
+ "hr_server/overall/overallhandle"
+ "time"
+)
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-02 11:23:32
+@ 功能: 获取统一企业微信Token
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func GainWechatTokenUnify() string {
+ md5Token := "WorkWechatUpdatePeopleInfo"
+ token, err := GainWechatToken("txl", md5Token, 1)
+ fmt.Printf("token-2-2->%v->%v\n", err, token)
+ if err != nil {
+ GainWechatTokenUnify()
+ }
+ return token
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-02 11:09:57
+@ 功能: 获取行政组织列表
+@ 参数
+
+ #orgId 行政组织Id
+ #token 企业
+
+@ 返回值
+
+ #departmentAry 部门列表
+ #newToekn 新token
+
+@ 方法原型
+
+ #
+*/
+func (w *WechatOrg) GainWechatOrgList() {
+
+ sendWechatUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%v&id=%v", w.Token, w.OrgId)
+ if w.OrgId == 0 {
+ sendWechatUrl = fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%v", w.Token)
+ }
+ //获取企业微信取部门列表
+ wechatCallBack := overallhandle.CurlGet(sendWechatUrl)
+ var deparmentsList WechatCallBackDepartment
+ err := json.Unmarshal(wechatCallBack, &deparmentsList)
+ if err != nil {
+ return
+ }
+ fmt.Printf("企业微信返回值:%v\n", string(wechatCallBack))
+ if deparmentsList.Errcode != 0 {
+ // w.Token = GainWechatTokenUnify()
+ // w.NewToekn = true
+ // w.GainWechatOrgList()
+ return
+ }
+ w.OrgList = deparmentsList.Department
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-02 13:10:15
+@ 功能: 处理人员信息
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (w *WechatOrg) GainOrgPeopleList() {
+ if len(w.OrgList) <= 0 {
+ overallhandle.WriteLog("e", "没有相应的行政组织!", w.OrgList)
+ return
+ }
+ var orgPeople WechatOrgPeole
+ orgPeople.Token = w.Token
+ for _, v := range w.OrgList {
+ synPro.Add(1)
+ go orgPeople.GainOrgPeopleList(v)
+ }
+ synPro.Wait()
+ if orgPeople.NewToekn {
+ w.Token = orgPeople.Token
+ }
+
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-02 13:17:41
+@ 功能: 获取企业微信行政组织下的人员信息
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (w *WechatOrgPeole) GainOrgPeopleList(org WechatDepartmentInfo) {
+ defer synPro.Done()
+ w.WechatOrgHandPeople(int64(org.Id))
+ jsonStr, _ := json.Marshal(w.UserList)
+ fmt.Printf("人员1信息========》%v:%v\n", org.Id, string(jsonStr))
+ if len(w.UserList) <= 0 {
+ overallhandle.WriteLog("e", "没有行111111人员!", w.UserList)
+ return
+ }
+ var peopleAry []interface{}
+ for _, v := range w.UserList {
+ // isWriteNum := true
+ gonghao := ""
+ dangAn := ""
+ if len(v.Extattr.Attrs) > 0 {
+ for _, a := range v.Extattr.Attrs {
+ if a.Name == "工号" {
+ if a.Value == "" {
+ gonghao = a.Text.Value
+ } else {
+ gonghao = a.Value
+ }
+
+ }
+ if a.Web.Url != "" {
+ dangAn = a.Web.Url
+ }
+ }
+ }
+ attJson, _ := json.Marshal(v.Extattr.Attrs)
+ fmt.Printf("人员信息%v:%v---->%v---->%v---->%v\n", org.Id, v.Userid, gonghao, dangAn, string(attJson))
+ //获取HR数据库中的员工信息
+ var userCont models.PersonArchives
+ if gonghao != "" {
+ overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`,`number`,`work_wechat`,`wechat`").Where("`number` = ?", gonghao).First(&userCont)
+ // isWriteNum = false
+ } else {
+ if v.Userid != "" {
+ overall.CONSTANT_DB_HR.Model(&models.PersonArchives{}).Select("`id`,`number`,`work_wechat`,`wechat`").Where("`work_wechat` = ? OR `wechat` = ?", v.Userid, v.Userid).First(&userCont)
+ }
+ // isWriteNum = true
+ }
+ if userCont.Id != 0 {
+ // fmt.Printf("@人员信息%v:%v---->%v---->%v\n", org.Id, v.Userid, gonghao, userCont)
+ updateWechatUserCont := overallhandle.MapOut()
+ updateWechatUserCont["userid"] = v.Userid
+ //判断是否要更新当前人员信息
+
+ var attrsAry []interface{} //企业微信个人属性
+ // for _, ev := range v.Extattr.Attrs {
+ // if ev.Name == "档案" {
+ dangAnUrl := fmt.Sprintf("http://hr.hxgk.group/#/?usernum=%v", userCont.Number)
+ var dangAnInfi UpdateMyWechatURL
+ dangAnInfi.Name = "档案"
+ dangAnInfi.Type = 1
+ dangAnInfi.Web.Title = "详细信息"
+ dangAnInfi.Web.Url = dangAnUrl
+ attrsAry = append(attrsAry, dangAnInfi)
+ // }
+ // if ev.Name == "工号" {
+ var gonhaoInFo UpdateMyWechatText
+ gonhaoInFo.Name = "工号"
+ gonhaoInFo.Type = 0
+ gonhaoInFo.Value = userCont.Number
+ gonhaoInFo.Text.Value = userCont.Number
+ attrsAry = append(attrsAry, gonhaoInFo)
+ // }
+ // }
+ // fmt.Printf("更新完毕!人员信息%v:%v---->%v---->%v\n", org.Id, v.Userid, gonghao, attrsAry)
+ if len(attrsAry) > 0 {
+ extattr := overallhandle.MapOut()
+ extattr["attrs"] = attrsAry
+ updateWechatUserCont["extattr"] = extattr
+ peopleAry = append(peopleAry, updateWechatUserCont)
+ }
+ if dangAn == "" {
+ w.SendUserInfoToWorkWechat(updateWechatUserCont)
+ } else {
+ overallhandle.WriteLog("t", "企业微信人员已有档案信息,无需重新生成!", v.Extattr.Attrs)
+ }
+
+ userSaveInfo := make(map[string]interface{})
+ if userCont.Number == "" && gonghao != "" {
+ userSaveInfo["number"] = gonghao
+ }
+ if userCont.WorkWechat == "" && v.Userid != "" {
+ userSaveInfo["work_wechat"] = v.Userid
+ }
+ if userCont.Wechat == "" && v.Userid != "" {
+ userSaveInfo["wechat"] = v.Userid
+ }
+ if len(userSaveInfo) > 0 {
+ userSaveInfo["eite_time"] = time.Now().Unix()
+ var userNumInfo models.PersonArchives
+ userNumInfo.EiteCont(map[string]interface{}{"`id`": userCont.Id}, userSaveInfo)
+ }
+ } else {
+ usWechatJson, _ := json.Marshal(v)
+ overallhandle.WriteLog("e", "没有行人员!", string(usWechatJson))
+ }
+ }
+ peopleJson, _ := json.Marshal(peopleAry)
+ fmt.Printf("更新完毕!人员信息%v---->%v\n", org, string(peopleJson))
+ overallhandle.WriteLog("e", "更新完毕!END", org, string(peopleJson))
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-02 15:33:28
+@ 功能: 发送信息修改通知
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (w *WechatOrgPeole) SendUserInfoToWorkWechat(userInfo map[string]interface{}) {
+ if _, ok := userInfo["userid"]; !ok {
+ err := errors.New("关键信息不全userid")
+ overallhandle.WriteLog("e", "1、更新企业微信人员信息", err, userInfo)
+ return
+ }
+ userJson, err := json.Marshal(userInfo)
+ if err != nil {
+ overallhandle.WriteLog("e", "1、更新企业微信人员信息", err, userJson)
+ return
+ }
+ overallhandle.WriteLog("i", "向企业微信发送人员信息", string(userJson))
+ sendWechatUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/user/update?access_token=%v", w.Token)
+ wechatCallBack := overallhandle.CurlPostJosn(sendWechatUrl, userJson)
+ var orgPeopleList RevokeMsgSendCallBack
+ err = json.Unmarshal(wechatCallBack, &orgPeopleList)
+ if err != nil {
+ overallhandle.WriteLog("e", "2、更新企业微信人员信息出错,从新发起请求。", err, string(wechatCallBack))
+ w.Token = GainWechatTokenUnify()
+ w.NewToekn = true
+ w.SendUserInfoToWorkWechat(userInfo)
+ return
+ }
+ if orgPeopleList.Errcode != 0 {
+ err = errors.New(orgPeopleList.Errmsg)
+ overallhandle.WriteLog("e", "3、更新企业微信人员信息发生错误!重新提交此数据!", orgPeopleList.Errcode, orgPeopleList.Errmsg)
+ w.Token = GainWechatTokenUnify()
+ w.NewToekn = true
+ w.SendUserInfoToWorkWechat(userInfo)
+ return
+ }
+ overallhandle.WriteLog("write", "更新企业微信人员信息完成!", userInfo)
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-02 13:32:50
+@ 功能: 获取企业微信行政组织下人员信息
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func (w *WechatOrgPeole) WechatOrgHandPeople(orgId int64) {
+ sendWechatUrl := fmt.Sprintf("https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token=%v&department_id=%v", w.Token, orgId)
+ fmt.Printf("sendWechatUrl--1->:%v\n", sendWechatUrl)
+ //获取企业微信取部门成员详情
+ wechatCallBack := overallhandle.CurlGet(sendWechatUrl)
+ var orgPeopleList WechatCallBackPeople
+ err := json.Unmarshal(wechatCallBack, &orgPeopleList)
+ if err != nil {
+ w.Token = GainWechatTokenUnify()
+ w.NewToekn = true
+ w.WechatOrgHandPeople(orgId)
+ return
+ }
+ if orgPeopleList.Errcode != 0 {
+ w.Token = GainWechatTokenUnify()
+ w.NewToekn = true
+ w.WechatOrgHandPeople(orgId)
+ return
+ }
+ // fmt.Printf("sendWechatUrl:%v\n", sendWechatUrl)
+ w.UserList = orgPeopleList.UserList
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-02 15:44:36
+@ 功能: 新版定时任务启动数据同步
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func NewTimedTasksForOrgWechat(orgId int64, errmsg ...any) {
+ fmt.Printf("orgId-2-->%v\n", orgId)
+ token := GainWechatTokenUnify()
+ fmt.Printf("token--->%v\n", token)
+ var orgMap WechatOrg
+ orgMap.OrgId = orgId
+ orgMap.Token = token
+ orgMap.GainWechatOrgList()
+ if orgMap.NewToekn {
+ token = orgMap.Token
+ }
+ fmt.Printf("orgMap--->%v\n", orgMap)
+ orgMap.GainOrgPeopleList()
+ // sendMap := make(map[string]interface{})
+ // sendMap["token"] = token
+ // sendMap["orgMap"] = orgMap
+ overallhandle.WriteLog("i", "行政组织:", orgId, "更新完成")
+}
diff --git a/api/version1/workrostering/structsetup.go b/api/version1/workrostering/structsetup.go
index db0fc7f..cffe4a2 100644
--- a/api/version1/workrostering/structsetup.go
+++ b/api/version1/workrostering/structsetup.go
@@ -82,10 +82,12 @@ type TimeRuleSend struct {
//设置倒班源点
type SetOrigin struct {
- Id string `json:"id"` //
+ Id string `json:"id"` //源点记录Id
Rule string `json:"rule"` //轮询规则
ShiftTime string `json:"shifttime"` // 班次安排
StartTime string `json:"starttime"` // 起源时间
+ SetIsm string `json:"setIsm"` // 执行制度
+ OrgId string `json:"orgId"` //行政组织
}
//排班查询列表
diff --git a/api/version1/workrostering/teamtime.go b/api/version1/workrostering/teamtime.go
index 760b853..94c0e7e 100644
--- a/api/version1/workrostering/teamtime.go
+++ b/api/version1/workrostering/teamtime.go
@@ -146,7 +146,7 @@ func (a *ApiModer) AddTeamTime(c *gin.Context) {
// workTimeType.Rule = requestData.Rule
//工作时段
var workTimeList []workgroup.WorkingTimePeriod
- for _, lv := range requestData.List {
+ for i, lv := range requestData.List {
var workTimeCont workgroup.WorkingTimePeriod
workTimeCont.Name = lv.Title //type:string comment:工作时间段名称 version:2022-11-13 16:59
workTimeCont.Time = time.Now().Unix() //type:int64 comment:编辑时间;0 version:2022-11-13 16:59
@@ -154,6 +154,7 @@ func (a *ApiModer) AddTeamTime(c *gin.Context) {
workTimeCont.StartTime = lv.StartTime //type:string comment:开始时间 version:2022-11-13 16:59
workTimeCont.EndTime = lv.EndTime //type:string comment:结束时间 version:2022-11-13 16:59
workTimeCont.State = 1
+ workTimeCont.Sort = i + 1
workTimeList = append(workTimeList, workTimeCont)
}
//轮询规则
@@ -587,7 +588,7 @@ func EditPeriodTime(typeId int64, ruleList []TemaTimes) {
workTimeListCont, _ := workTimeCont.ContMap(map[string]interface{}{"`type_id`": typeId})
var editId []string
var saveData []workgroup.WorkingTimePeriod
- for _, v := range ruleList {
+ for i, v := range ruleList {
if v.Id != "" {
var workTimeContJudge workgroup.WorkingTimePeriod
err := workTimeContJudge.GetCont(map[string]interface{}{"`id`": v.Id})
@@ -597,6 +598,7 @@ func EditPeriodTime(typeId int64, ruleList []TemaTimes) {
}
editCont := overallhandle.MapOut()
+ editCont["`sort`"] = i + 1
editCont["`state`"] = 1
editCont["`name`"] = v.Title
editCont["`time`"] = time.Now().Unix()
@@ -606,6 +608,7 @@ func EditPeriodTime(typeId int64, ruleList []TemaTimes) {
workTimeContEs.EiteCont(map[string]interface{}{"`id`": v.Id}, editCont)
} else {
var workTimeContAdd workgroup.WorkingTimePeriod
+ workTimeContAdd.Sort = i + 1
workTimeContAdd.Name = v.Title //type:string comment:工作时间段名称 version:2022-11-13 16:59
workTimeContAdd.Time = time.Now().Unix() //type:int64 comment:编辑时间;0 version:2022-11-13 16:59
workTimeContAdd.TypeId = typeId //type:int64 comment:类型 version:2022-11-13 16:59
@@ -620,6 +623,7 @@ func EditPeriodTime(typeId int64, ruleList []TemaTimes) {
workTimeContAdd.TypeId = typeId //type:int64 comment:类型 version:2022-11-13 16:59
workTimeContAdd.StartTime = v.StartTime //type:string comment:开始时间 version:2022-11-13 16:59
workTimeContAdd.EndTime = v.EndTime //type:string comment:结束时间 version:2022-11-13 16:59
+ workTimeContAdd.Sort = i + 1
saveData = append(saveData, workTimeContAdd)
}
}
@@ -731,8 +735,8 @@ func (a *ApiModer) SetOirginCont(c *gin.Context) {
overallhandle.Result(100, err, c)
return
}
- if requestData.Id == "" {
- overallhandle.Result(101, err, c)
+ if requestData.OrgId == "" {
+ overallhandle.Result(101, err, c, "未知行政组织!")
return
}
if requestData.Rule == "" {
@@ -747,33 +751,42 @@ func (a *ApiModer) SetOirginCont(c *gin.Context) {
overallhandle.Result(101, err, c)
return
}
- timeInt, timeErr := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 12:00:00", requestData.StartTime))
- if !timeErr {
- overallhandle.Result(1, err, c, "你提交的日期不符合规范!请改正后提交!")
- return
- }
+ var manageDate overallhandle.DateTimeTotimes
+ manageDate.BaisStrToTime(requestData.StartTime)
+ // timeInt, timeErr := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 12:00:00", requestData.StartTime))
+ // if !timeErr {
+ // overallhandle.Result(1, err, c, "你提交的日期不符合规范!请改正后提交!")
+ // return
+ // }
var genesisCont workgroup.Genesis
- err = genesisCont.GetCont(map[string]interface{}{"`type_id`": requestData.Id})
+ // err = genesisCont.GetCont(map[string]interface{}{"`id`": requestData.Id})
+ err = genesisCont.GetCont(map[string]interface{}{"`orgId`": requestData.OrgId})
if err != nil {
- genesisCont.TypeId, _ = strconv.ParseInt(requestData.Id, 10, 64) //type:int64 comment:类型
+ genesisCont.TypeId, _ = strconv.ParseInt(requestData.SetIsm, 10, 64) //type:int64 comment:类型
genesisCont.PeriodId, _ = strconv.ParseInt(requestData.ShiftTime, 10, 64) //type:int64 comment:锚定工作段
genesisCont.Rules, _ = strconv.ParseInt(requestData.Rule, 10, 64) //type:int64 comment:锚定轮询规则起点
- genesisCont.StartTime = timeInt //type:int64 comment:锚定历史原点
+ genesisCont.StartTime = manageDate.AllTime //type:int64 comment:锚定历史原点
genesisCont.Time = time.Now().Unix() //type:int64
+ genesisCont.OrgId, _ = strconv.ParseInt(requestData.OrgId, 10, 64)
err = overall.CONSTANT_DB_HR.Create(&genesisCont).Error
+ overall.CONSTANT_HRSERVER_DATABASE.Create(&genesisCont)
} else {
editCont := overallhandle.MapOut()
- editCont["type_id"] = requestData.Id
+ editCont["type_id"] = requestData.SetIsm
editCont["period_id"] = requestData.ShiftTime
editCont["rules"] = requestData.Rule
- editCont["start_time"] = timeInt
- err = genesisCont.EiteCont(map[string]interface{}{"`id`": genesisCont.Id}, editCont)
+ editCont["start_time"] = manageDate.AllTime
+ if genesisCont.OrgId == 0 {
+ editCont["orgId"] = requestData.OrgId
+ }
+ var genesisContEdit workgroup.Genesis
+ err = genesisContEdit.EiteCont(map[string]interface{}{"`id`": genesisCont.Id}, editCont)
}
if err != nil {
overallhandle.Result(1, err, c, "设置失败!")
return
}
- overallhandle.Result(0, err, c)
+ overallhandle.Result(0, genesisCont, c)
}
/*
diff --git a/apirouter/personnel/people.go b/apirouter/personnel/people.go
index 367854c..7fb265f 100644
--- a/apirouter/personnel/people.go
+++ b/apirouter/personnel/people.go
@@ -21,8 +21,8 @@ func (p *PersonnelRoute) InitRouterGroup(route *gin.RouterGroup) {
apiRouter.POST("archiveslistcont", apiHandle.ArchivesListCont) //人员档案列表(平台用)
apiRouter.POST("archivescont", apiHandle.ArchivesCon) //个人档案
apiRouter.POST("personnelFiles", apiHandle.PersonnelFiles) //根据工号获取个人档案
- apiRouter.POST("getPeopleColor", apiHandle.GetPeopleColor) //根据工号获取个人档案
- // apiRouter.POST("oneToBer", apiHandle.OneToBer) //根据工号获取个人档案
+ apiRouter.POST("getPeopleColor", apiHandle.GetPeopleColor) //根据工号获取个人档案性格色彩
+ apiRouter.POST("getPeopleKey", apiHandle.GetPeopleKey) //根据Key获取个人档案
apiRouter.POST("kingdeehr", apiHandle.NewKingdee) //对接金蝶HR系统
apiRouter.POST("editpassword", apiHandle.EditPassWord) //修改密码
@@ -30,7 +30,8 @@ func (p *PersonnelRoute) InitRouterGroup(route *gin.RouterGroup) {
apiRouter.POST("edit_us_wechat_openid", apiHandle.EditUsWechatOpenId) //修改员工微信或企业微信UserId
apiRouter.POST("edit_people_icon", apiHandle.EditPeopleIcon) //修改员工微信或企业微信UserId
- apiRouter.POST("useraboutorglist", apiHandle.UserAboutOrgList) //行政组织关系
+ // apiRouter.POST("useraboutorglist", apiHandle.UserAboutOrgList) //行政组织关系 UserAboutOrgListNew
+ apiRouter.POST("useraboutorglist", apiHandle.UserAboutOrgListNew) //行政组织关系
//双职工
apiRouter.POST("doubleworkerlist", apiHandle.DoubleWorkerList) //双职工列表
apiRouter.POST("adddoubleworker", apiHandle.AddDoubleWorkerApi) //添加双职工
@@ -87,53 +88,76 @@ func (p *PersonnelRoute) InitRouterGroup(route *gin.RouterGroup) {
apiRouter.POST("uploadUserFiles", apiHandle.UploadUserFiles) //解析上传的人员信息表格
apiRouter.POST("uploadUserFilesRedis", apiHandle.UploadUserFilesRedis) //解析上传的人员信息表格
- apiRouter.POST("analysisRedisExelect", apiHandle.AnalysisRedisExelect) //解析Redis列表中的数据
+ apiRouter.POST("upLoadPeopelMerits", apiHandle.UpLoadPeopelMerits) //解析考评人员成绩统计表
+
+ apiRouter.POST("analysisRedisExelect", apiHandle.AnalysisRedisExelect) //解析Redis列表中的数据
+ apiRouter.POST("analysisRedisOrgExelect", apiHandle.AnalysisRedisOrgExelect) //解析Redis列表中的数据
+
+ apiRouter.POST("anaRedisOrgStaffExc", apiHandle.AnalysisRedisOrgStaffExelect) //解析人员绩效成绩
+
+ apiRouter.POST("personnelPositioning", apiHandle.PersonnelPositioning) //人员定位信息(简略)
+ apiRouter.POST("gainSunOrgAndUser", apiHandle.GainSunOrgAndUser) //根据行政组织ID获取当前行政组织人员及子行政组织
+ apiRouter.POST("searchOrgUser", apiHandle.SearchOrgUser) //搜索行政组织及人员
+
+ apiRouter.POST("rewPunList", apiHandle.RewPunList) //奖惩记录
+ apiRouter.POST("assessmentRecords", apiHandle.AssessmentRecords) //绩效考核成绩
+ apiRouter.POST("peopleEmploymentRelationship", apiHandle.PeopleEmploymentRelationship) //员工关系
+ apiRouter.POST("peopleTitle", apiHandle.PeopleTitle) //职称列表
+ apiRouter.POST("peopleHonor", apiHandle.PeopleHonor) //荣誉
+
+ apiRouter.POST("gainMyChengjiYears", apiHandle.GainMyChengjiYears) //获取个人年份评估成绩详情
+
+ apiRouter.POST("uploadTiemsManFiles", apiHandle.UploadTiemsManFiles) //上传班组设定人员
+ apiRouter.POST("analysisRedisTimesExelect", apiHandle.AnalysisRedisTimesExelect) //解析人员信息!并写入数据库
}
}
// 员工档案
func (p *PersonnelRouteKingdee) InitRouterGroup(route *gin.RouterGroup) {
- apiRouter := route.Group("staffkingdee")
- var apiHandle = version1.AppApiInlet.StaffApi
+ apiRouterOut := route.Group("staffkingdee")
+ var apiHandleOut = version1.AppApiInlet.StaffApi
{
- apiRouter.GET("", apiHandle.Index) //入口
- apiRouter.POST("", apiHandle.Index) //入口
- apiRouter.POST("stafflist", apiHandle.StaffList) //人员列表
- apiRouter.POST("addstaff", apiHandle.AddStaff) //添加人员档案
- apiRouter.POST("allocationofrights", apiHandle.AllocationOfRights) //分配权限
- apiRouter.POST("archiveslist", apiHandle.ArchivesListWai) //人员列表(新)
- apiRouter.POST("archivescont", apiHandle.ArchivesCon) //个人档案
- apiRouter.POST("kingdeehr", apiHandle.NewKingdee) //对接金蝶HR系统
- apiRouter.POST("editpassword", apiHandle.EditPassWord) //修改密码
- apiRouter.POST("wechat_give_uscont", apiHandle.WeChatGiveUsCont) //根据微信OpenId获取个人档案
- apiRouter.POST("edit_us_wechat_openid", apiHandle.EditUsWechatOpenId) //修改员工微信或企业微信UserId
+ apiRouterOut.GET("", apiHandleOut.Index) //入口
+ apiRouterOut.POST("", apiHandleOut.Index) //入口
+ apiRouterOut.POST("stafflist", apiHandleOut.StaffList) //人员列表
+ apiRouterOut.POST("addstaff", apiHandleOut.AddStaff) //添加人员档案
+ apiRouterOut.POST("allocationofrights", apiHandleOut.AllocationOfRights) //分配权限
+ apiRouterOut.POST("archiveslist", apiHandleOut.ArchivesListWai) //人员列表(新)
+ apiRouterOut.POST("archivescont", apiHandleOut.ArchivesCon) //个人档案
+ apiRouterOut.POST("kingdeehr", apiHandleOut.NewKingdee) //对接金蝶HR系统
+ apiRouterOut.POST("editpassword", apiHandleOut.EditPassWord) //修改密码
+ apiRouterOut.POST("wechat_give_uscont", apiHandleOut.WeChatGiveUsCont) //根据微信OpenId获取个人档案
+ apiRouterOut.POST("edit_us_wechat_openid", apiHandleOut.EditUsWechatOpenId) //修改员工微信或企业微信UserId
//双职工
- apiRouter.POST("adddoubleworker", apiHandle.AddDoubleWorkerApi) //添加双职工
- apiRouter.POST("eidtdoubleworker", apiHandle.EidtDoubleWorkerApi) //编辑双职工
- apiRouter.POST("eidtdoubleworkerstate", apiHandle.EidtDoubleWorkerState) //编辑双职工状态
+ apiRouterOut.POST("adddoubleworker", apiHandleOut.AddDoubleWorkerApi) //添加双职工
+ apiRouterOut.POST("eidtdoubleworker", apiHandleOut.EidtDoubleWorkerApi) //编辑双职工
+ apiRouterOut.POST("eidtdoubleworkerstate", apiHandleOut.EidtDoubleWorkerState) //编辑双职工状态
//员工资料
- apiRouter.POST("eidtstaffcont", apiHandle.EidtStaffCont) //编辑员工资料
+ apiRouterOut.POST("eidtstaffcont", apiHandleOut.EidtStaffCont) //编辑员工资料
//紧急联系人
- apiRouter.POST("addemercycall", apiHandle.AddEmercyCall) //添加紧急联系人
- apiRouter.POST("editemercycall", apiHandle.EditEmercyCall) //编辑紧急联系人
- apiRouter.POST("editemercycallstate", apiHandle.EditEmercyCallState) //编辑紧急联系人状态
+ apiRouterOut.POST("addemercycall", apiHandleOut.AddEmercyCall) //添加紧急联系人
+ apiRouterOut.POST("editemercycall", apiHandleOut.EditEmercyCall) //编辑紧急联系人
+ apiRouterOut.POST("editemercycallstate", apiHandleOut.EditEmercyCallState) //编辑紧急联系人状态
//家庭成员
- apiRouter.POST("addfamilymembers", apiHandle.AddFamilyMembers) //添加家庭成员
- apiRouter.POST("editfamilymembers", apiHandle.EditFamilyMembers) //编辑家庭成员
- apiRouter.POST("editfamilymemberssatte", apiHandle.EditFamilyMembersSatte) //编辑家庭成员状态
+ apiRouterOut.POST("addfamilymembers", apiHandleOut.AddFamilyMembers) //添加家庭成员
+ apiRouterOut.POST("editfamilymembers", apiHandleOut.EditFamilyMembers) //编辑家庭成员
+ apiRouterOut.POST("editfamilymemberssatte", apiHandleOut.EditFamilyMembersSatte) //编辑家庭成员状态
//教育经历
- apiRouter.POST("addeducationalexperience", apiHandle.AddEducationalExperience) //添加教育经历
- apiRouter.POST("editeducationalexperience", apiHandle.EditEducationalExperience) //编辑教育经历
- apiRouter.POST("editeduexpstate", apiHandle.EditEduExpState) //编辑教育经历状态
+ apiRouterOut.POST("addeducationalexperience", apiHandleOut.AddEducationalExperience) //添加教育经历
+ apiRouterOut.POST("editeducationalexperience", apiHandleOut.EditEducationalExperience) //编辑教育经历
+ apiRouterOut.POST("editeduexpstate", apiHandleOut.EditEduExpState) //编辑教育经历状态
//工作履历
- apiRouter.POST("addworkhistorycont", apiHandle.AddWorkHistoryCont) //添加工作履历
- apiRouter.POST("editworkhistorycont", apiHandle.EditWorkHistoryCont) //编辑工作履历
- apiRouter.POST("editworkhistorystate", apiHandle.EditWorkHistoryState) //编辑工作履历状态
+ apiRouterOut.POST("addworkhistorycont", apiHandleOut.AddWorkHistoryCont) //添加工作履历
+ apiRouterOut.POST("editworkhistorycont", apiHandleOut.EditWorkHistoryCont) //编辑工作履历
+ apiRouterOut.POST("editworkhistorystate", apiHandleOut.EditWorkHistoryState) //编辑工作履历状态
//集团工作履历
- apiRouter.POST("insideworkhistorylist", apiHandle.InsideWorkHistoryList) //集团工作履历列表
- apiRouter.POST("addinsidehistory", apiHandle.AddInsideHistory) //添加集团工作履历
- apiRouter.POST("eidtinsidehistoryworkcont", apiHandle.EidtInsideHistoryWorkCont) //编辑集团工作履历
- apiRouter.POST("editordelinsideworkhistorystate", apiHandle.EditOrDelInsideWorkHistoryState) //编辑集团工作履历状态
+ apiRouterOut.POST("insideworkhistorylist", apiHandleOut.InsideWorkHistoryList) //集团工作履历列表
+ apiRouterOut.POST("addinsidehistory", apiHandleOut.AddInsideHistory) //添加集团工作履历
+ apiRouterOut.POST("eidtinsidehistoryworkcont", apiHandleOut.EidtInsideHistoryWorkCont) //编辑集团工作履历
+ apiRouterOut.POST("editordelinsideworkhistorystate", apiHandleOut.EditOrDelInsideWorkHistoryState) //编辑集团工作履历状态
+
+ //人员定位相关
+ apiRouterOut.POST("personnelPositioning", apiHandleOut.PersonnelPositioning) //人员定位信息(简略)
}
}
diff --git a/apirouter/shiyanrouter/shiyan.go b/apirouter/shiyanrouter/shiyan.go
index 2683e57..397581b 100644
--- a/apirouter/shiyanrouter/shiyan.go
+++ b/apirouter/shiyanrouter/shiyan.go
@@ -25,5 +25,9 @@ func (p *ShiyanApiRouter) InitRouterGroup(route *gin.RouterGroup) {
apiRouter.POST("hand_movement_postcont", apiHandle.HandMovementPostCont) //手动同步职位
apiRouter.POST("write_token", apiHandle.WriteToken) //写入令牌
+
+ apiRouter.POST("workWechat", apiHandle.WorkWechat) //测试企业微信个人信息
+
+ apiRouter.POST("getTestPost", apiHandle.GetTestPost) //测试获取职务
}
}
diff --git a/config/configApp/appConfig.yaml b/config/configApp/appConfig.yaml
index afcdf30..1361140 100644
--- a/config/configApp/appConfig.yaml
+++ b/config/configApp/appConfig.yaml
@@ -9,6 +9,7 @@ appsetup:
prefix: 'HXJT' #系统字段前缀
weburl: 'http://gyhlw.hxgk.group' #web访问地址
pcurl: 'http:/gyhlw.hxgk.group' #PC访问地址
+ defaultIP: '127.0.0.1' #
logconfig:
path: 'log' #日志保存地址
diff --git a/config/configApp/server.go b/config/configApp/server.go
index ce14593..0e82150 100644
--- a/config/configApp/server.go
+++ b/config/configApp/server.go
@@ -23,6 +23,7 @@ type appsetup struct {
PreFix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"`
WebUrl string `mapstructure:"weburl" json:"weburl" yaml:"weburl"`
PcbUrl string `mapstructure:"pcurl" json:"pcurl" yaml:"pcurl"`
+ DefaultIP string `mapstructure:"defaultIP" json:"defaultIP" yaml:"defaultIP"`
}
//日志配置
diff --git a/config/configDatabase/database.go b/config/configDatabase/database.go
index 22d44a7..a6c506e 100644
--- a/config/configDatabase/database.go
+++ b/config/configDatabase/database.go
@@ -10,13 +10,16 @@ import (
)
type MysqlSetUp struct {
- MasterMysql MasterMysqlSetUp `mapstructure:"master" json:"master" yaml:"master"` //主数据库
+ MasterMysql MasterMysqlSetUp `mapstructure:"master" json:"master" yaml:"master"` //主数据库
+ AppPlatformDatabase MasterMysqlSetUp `mapstructure:"appPlatformDatabase" json:"appPlatformDatabase" yaml:"appPlatformDatabase"` //应用平台
//其他数据库依次添加
WechatMysql MasterMysqlSetUp `mapstructure:"wechat" json:"wechat" yaml:"wechat"` //微信数据库
HrMysql MasterMysqlSetUp `mapstructure:"hrdatabase" json:"hrdatabase" yaml:"hrdatabase"` //HR数据库
HrMysqlJin MasterMysqlSetUp `mapstructure:"hrdatabasejin" json:"hrdatabasejin" yaml:"hrdatabasejin"` //HR数据库
PersonalityColor MasterMysqlSetUp `mapstructure:"charactercolor" json:"charactercolor" yaml:"charactercolor"` //HR数据库
// HrNeiSever MasterMysqlSetUp `mapstructure:"hrNeiSever" json:"hrNeiSever" yaml:"hrNeiSever"` //HR数据库
+ HrDatabaseServer MasterMysqlSetUp `mapstructure:"hrdatabaseserver" json:"hrdatabaseserver" yaml:"hrdatabaseserver"` //外网HR数据库
+ CustomerForm MasterMysqlSetUp `mapstructure:"customerFormDatabase" json:"customerFormDatabase" yaml:"customerFormDatabase"` //自定义表单数据库
}
type MasterMysqlSetUp struct {
diff --git a/config/configDatabase/database.yaml b/config/configDatabase/database.yaml
index 52b2dfb..012e071 100644
--- a/config/configDatabase/database.yaml
+++ b/config/configDatabase/database.yaml
@@ -12,7 +12,7 @@ master:
password: 'root' #数据库密码
max_idle_conns: 100 #最大空闲数量
max_open_conns: 1500 #最大打开数量
- gorm_log: false #是否开启gorm日志
+ gorm_log: true #是否开启gorm日志
#微信数据库
wechat:
url_path: '127.0.0.1' #数据库地址
@@ -25,7 +25,7 @@ wechat:
password: 'root' #数据库密码
max_idle_conns: 100 #最大空闲数量
max_open_conns: 1500 #最大打开数量
- gorm_log: false #是否开启gorm日志
+ gorm_log: true #是否开启gorm日志
#HR数据库
hrdatabase:
# url_path: '127.0.0.1' #数据库地址
@@ -49,7 +49,7 @@ hrdatabase:
name: 'hr_new' #数据库名称
max_idle_conns: 100 #最大空闲数量
max_open_conns: 1500 #最大打开数量
- gorm_log: false #是否开启gorm日志
+ gorm_log: true #是否开启gorm日志
#HR数据库
hrdatabasejin:
# url_path: '127.0.0.1' #数据库地址
@@ -68,7 +68,7 @@ hrdatabasejin:
name: 'human_resources' #数据库名称
max_idle_conns: 100 #最大空闲数量
max_open_conns: 1500 #最大打开数量
- gorm_log: false #是否开启gorm日志
+ gorm_log: true #是否开启gorm日志
#性格色彩
charactercolor:
url_path: '172.20.5.33' #数据库地址
@@ -81,7 +81,7 @@ charactercolor:
password: '9z_Bu28r1*DZ3K6@+a' #数据库密码
max_idle_conns: 100 #最大空闲数量
max_open_conns: 1500 #最大打开数量
- gorm_log: false #是否开启gorm日志
+ gorm_log: true #是否开启gorm日志
#HR数据库
hrNeiSever:
@@ -101,4 +101,61 @@ hrNeiSever:
name: 'hr_new' #数据库名称
max_idle_conns: 100 #最大空闲数量
max_open_conns: 1500 #最大打开数量
- gorm_log: false #是否开启gorm日志
\ No newline at end of file
+ gorm_log: true #是否开启gorm日志
+#HR数据库
+hrdatabaseserver:
+ url_path: '36.133.126.182' #数据库地址
+ port: 3306 #数据库端口
+ charset: 'utf8mb4' #数据库编码方式
+ parseTime: 'True' #是否自动转换时间
+ loc: 'Local' #时区
+ name: 'hr_new' #数据库名称
+ username: 'hr_new' #数据库用户民
+ password: 'kPMP6NafMsdccxDX' #数据库密码
+ max_idle_conns: 100 #最大空闲数量
+ max_open_conns: 1500 #最大打开数量
+ gorm_log: true #是否开启gorm日志
+
+ #自定义数据库
+customerFormDatabase:
+ url_path: '172.20.5.34' #数据库地址
+ port: 4000 #数据库端口
+ name: 'customer_form' #数据库名称
+ username: 'root' #数据库用户民
+ password: '9z_Bu28r1*DZ3K6@+a' #数据库密码
+
+ # url_path: '36.133.126.182' #数据库地址
+ # port: 3306 #数据库端口
+ # name: 'customer_form' #数据库名称
+ # username: 'customer_form' #数据库用户民
+ # password: 'Mjh4msNtADGjiMaC' #数据库密码
+
+ charset: 'utf8mb4' #数据库编码方式
+ parseTime: 'True' #是否自动转换时间
+ loc: 'Local' #时区
+ max_idle_conns: 100 #最大空闲数量
+ max_open_conns: 1500 #最大打开数量
+ gorm_log: true #是否开启gorm日志
+
+
+#应用平台数据库
+appPlatformDatabase:
+ url_path: '172.20.5.34' #数据库地址
+ port: 4000 #数据库端口
+ name: 'app_platform' #数据库名称
+ username: 'root' #数据库用户民
+ password: '9z_Bu28r1*DZ3K6@+a' #数据库密码
+
+ # url_path: '127.0.0.1' #数据库地址
+ # port: 3306 #数据库端口
+ # name: 'app_platform' #数据库名称
+ # username: 'root' #数据库用户民
+ # password: 'root' #数据库密码
+
+
+ charset: 'utf8mb4' #数据库编码方式
+ parseTime: 'True' #是否自动转换时间
+ loc: 'Local' #时区
+ max_idle_conns: 100 #最大空闲数量
+ max_open_conns: 1500 #最大打开数量
+ gorm_log: true #是否开启gorm日志
\ No newline at end of file
diff --git a/devlog.md b/devlog.md
deleted file mode 100644
index 2e4b6a7..0000000
--- a/devlog.md
+++ /dev/null
@@ -1,161 +0,0 @@
-# 开发日志
-
-## 2024-01-29
-
-### 数据库操作
-
-#### 1、person_archives 人员主表
-
-增加表字段
-
-```
-ALTER TABLE `person_archives` ADD `work_section` bigint unsigned DEFAULT '0' COMMENT '工段';
-```
-
-#### 2、personnel_content 人员副表
-
-增加表字段
-
-```
-ALTER TABLE `personnel_content` ADD `domicile_type` varchar(100) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '户籍类型';
-ALTER TABLE `personnel_content` ADD `idCardnoLongTerm` int unsigned NOT NULL DEFAULT '2' COMMENT '身份证是否长期有效(1:是;2:否)';
-ALTER TABLE `person_archives` ADD `mobileShortNumber` varchar(50) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '手机小号';
-ALTER TABLE `person_archives` ADD `channel` int unsigned NOT NULL DEFAULT '1' COMMENT '入职渠道(1:社会招聘;2:校园招聘;3:内部推荐)';
-ALTER TABLE `person_archives` ADD `bloodType` varchar(10) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '血型';
-```
-
-#### 3、personnel_education 教育经历
-
-增加字段
-
-```
-ALTER TABLE `personnel_education` ADD `education_type` int unsigned NOT NULL DEFAULT '1' COMMENT '学历类型(1、全日制统招学历;2、成人高考学历;3、自学考试学历;4:开放大学学历;5:网络教育学历)';
-ALTER TABLE `personnel_education` ADD `collegeFaction` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '所属院系';
-ALTER TABLE `personnel_education` ADD `schoolType` int unsigned NOT NULL DEFAULT '0' COMMENT '院校类型(1、私立中学;2:公立中学;3:高职院校;4:民办专科院校;5:公办专科院校;6:民办本科院校;7:公办本科院校;8:”211“工程院校;9:”985“工程院校;10:双一流院校)'
-```
-
-#### 4、family_members 员工家属
-
-增加字段
-
-```
-ALTER TABLE `family_members` ADD `workUnitPost` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '工作单位及职务';
-ALTER TABLE `family_members` ADD `isSos` int unsigned NOT NULL DEFAULT '2' COMMENT '是否为紧急联系人(1、是;2:否)';
-```
-
-#### 5、double_worker 双职工
-
-添加字段
-
-```
-ALTER TABLE `double_worker` ADD `workUnit` varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '工段';
-ALTER TABLE `double_worker` ADD `workPosit` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '职位';
-ALTER TABLE `double_worker` ADD `levele` varchar(30) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '职等';
-```
-
-#### 6、inside_work_history 集团内部工作经历
-
-添加字段
-
-```
-ALTER TABLE `inside_work_history` ADD `changeType` int unsigned NOT NULL DEFAULT '1' COMMENT '变动类型(1、新入职;2:平调;3:降职;4:升职)';
-ALTER TABLE `inside_work_history` ADD `changeReason` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '变动原因';
-ALTER TABLE `inside_work_history` ADD `superiorPosition` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '上级职位';
-ALTER TABLE `inside_work_history` ADD `superiorName` varchar(50) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '上级名称';
-ALTER TABLE `inside_work_history` ADD `subordinates` int unsigned NOT NULL DEFAULT '0' COMMENT '下属人数';
-```
-
-#### 7、work_history 工作履历
-
-添加字段
-
-```
-ALTER TABLE `work_history` ADD `companyNature` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '公司性质';
-ALTER TABLE `work_history` ADD `industry` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '所属行业';
-```
-
-#### 8、meritslog 绩效
-
-添加字段
-
-```
-ALTER TABLE `work_history` ADD `level` varchar(255) COLLATE utf8mb4_bin DEFAULT '' COMMENT '考核等级';
-```
-
-#### 9、rewards_penalties 奖惩
-
-添加字段
-
-```
-ALTER TABLE rewards_penalties ADD level int unsigned NOT NULL DEFAULT '1' COMMENT '奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)';
-ALTER TABLE rewards_penalties ADD rewPunClass int unsigned NOT NULL DEFAULT '1' COMMENT '奖惩类型(1:年终评优;2:表扬;3:嘉奖;4:记功;5:记大功;6:特别奖励;7:批评;8:警告;9:记过;10:记大过;11:降级;12:留用察看;13:开除)';
-```
-
-#### 10、political_identity 政治属性
-
-添加表
-
-```
-CREATE TABLE `political_identity` (
- `userkey` bigint unsigned NOT NULL DEFAULT '0' COMMENT '员工唯一识别符',
- `political_outlook` int unsigned NOT NULL DEFAULT '1' COMMENT '政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)',
- `joinTime` bigint NOT NULL DEFAULT '0' COMMENT '加入时间',
- `branch` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '所在党支部',
- `position` varchar(100) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '党内职务',
- `joiningParty` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '入党时所在单位',
- `switchToClass` int unsigned NOT NULL DEFAULT '2' COMMENT '组织关系是否转入(1:是;2:否)',
- `switchToTime` bigint NOT NULL DEFAULT '0' COMMENT '组织关系转入时间',
- `time` bigint unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`userkey`),
- UNIQUE KEY `userkey` (`userkey`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='政治属性';
-```
-
-#### 11、veterans 退役军人信息
-
-添加表
-
-```
-CREATE TABLE `veterans` (
- `userkey` bigint unsigned NOT NULL DEFAULT '0',
- `isRetire` int unsigned NOT NULL DEFAULT '2' COMMENT '是否为退役军人(1:是;2:否)',
- `retireNumber` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '退役证编号',
- `joinTime` bigint NOT NULL DEFAULT '0' COMMENT '入伍时间',
- `retireTime` bigint NOT NULL DEFAULT '0' COMMENT '退伍时间',
- `armyUnits` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '参军单位',
- `typesOfSoldiers` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '兵种',
- `time` bigint unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (`userkey`),
- UNIQUE KEY `userkey` (`userkey`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='老兵信息';
-```
-
-#### 12、academictitle 职称
-
-添加表
-
-```
-CREATE TABLE `academictitle` (
- `id` bigint unsigned NOT NULL,
- `types` varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '职称级别',
- `series` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '职称系列',
- `speciality` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '职称专业',
- `number` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '资格证书编号',
- `time` bigint unsigned NOT NULL DEFAULT '0' COMMENT '生效时间',
- `editTime` bigint unsigned NOT NULL DEFAULT '0',
- `userKey` bigint unsigned NOT NULL DEFAULT '0' COMMENT '人员唯一识别符',
- PRIMARY KEY (`id`),
- UNIQUE KEY `id` (`id`),
- KEY `userKey` (`userKey`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='职称';
-```
-
-#### 13、certificate_honors 证书
-
-添加字段
-
-```
-ALTER TABLE rewards_penalties ADD number varchar(255) COLLATE utf8mb4_bin DEFAULT '' COMMENT '证书编号'';
-ALTER TABLE rewards_penalties ADD endTime int unsigned NOT NULL DEFAULT '1' COMMENT '奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)';
-ALTER TABLE rewards_penalties ADD validPeriod int unsigned NOT NULL DEFAULT '1' COMMENT '奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)';
-```
diff --git a/go.mod b/go.mod
index 976fa9a..36363db 100644
--- a/go.mod
+++ b/go.mod
@@ -12,7 +12,10 @@ require (
github.com/robfig/cron/v3 v3.0.1
github.com/spf13/viper v1.10.1
gorm.io/driver/mysql v1.3.3
- gorm.io/gorm v1.23.4
+ gorm.io/driver/postgres v1.5.11
+ gorm.io/driver/sqlite v1.5.7
+ gorm.io/driver/sqlserver v1.5.4
+ gorm.io/gorm v1.25.10
)
require (
@@ -23,14 +26,22 @@ require (
github.com/go-playground/universal-translator v0.18.0 // indirect
github.com/go-playground/validator/v10 v10.10.1 // indirect
github.com/go-sql-driver/mysql v1.6.0 // indirect
+ github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
+ github.com/golang-sql/sqlexp v0.1.0 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
+ github.com/jackc/pgpassfile v1.0.0 // indirect
+ github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
+ github.com/jackc/pgx/v5 v5.5.5 // indirect
+ github.com/jackc/puddle/v2 v2.2.1 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
- github.com/jinzhu/now v1.1.4 // indirect
+ github.com/jinzhu/now v1.1.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/magiconair/properties v1.8.5 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
+ github.com/mattn/go-sqlite3 v1.14.22 // indirect
+ github.com/microsoft/go-mssqldb v1.7.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
@@ -42,10 +53,10 @@ require (
github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.2.0 // indirect
github.com/ugorji/go/codec v1.2.7 // indirect
- golang.org/x/crypto v0.12.0 // indirect
- golang.org/x/net v0.14.0 // indirect
- golang.org/x/sys v0.11.0 // indirect
- golang.org/x/text v0.12.0 // indirect
+ golang.org/x/crypto v0.18.0 // indirect
+ golang.org/x/sync v0.1.0 // indirect
+ golang.org/x/sys v0.16.0 // indirect
+ golang.org/x/text v0.14.0 // indirect
google.golang.org/protobuf v1.28.0 // indirect
gopkg.in/ini.v1 v1.66.2 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
diff --git a/go.sum b/go.sum
index ab008e4..b8c53e9 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,22 @@
github.com/360EntSecGroup-Skylar/excelize v1.4.1 h1:l55mJb6rkkaUzOpSsgEeKYtS6/0gHwBYyfo5Jcjv/Ks=
github.com/360EntSecGroup-Skylar/excelize v1.4.1/go.mod h1:vnax29X2usfl7HHkBrX5EvSCJcmH3dT9luvxzu8iGAE=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 h1:lGlwhPtrX6EVml1hO0ivjkUxsSyl4dsiw9qcA1k/3IQ=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1/go.mod h1:RKUqNu35KJYcVG/fqTRqmuXJZYNhYkBrnC/hX7yGbTA=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1/go.mod h1:uE9zaUfEQT/nbQjVi2IblCG9iaLtZsuYZ8ne+PuQ02M=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 h1:6oNBlSdi1QqM1PNW7FPA6xOGA5UNsXnkaYZz9vdPGhA=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1 h1:MyVTgWR8qd/Jw1Le0NZebGBUCLbtak3bJ3z1OlqZBpw=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1/go.mod h1:GpPjLhVR9dnUoJMyHWSPy71xY9/lcmpzIPZXmF0FCVY=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0 h1:D3occbWoio4EBLkbkevetNMAVX197GkzbUMtqjGWn80=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0/go.mod h1:bTSOgj05NGRuHHhQwAdPnYr9TOdNmKlZTgGLL6nyAdI=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 h1:DzHpqpoJVaCgOUdVHxE8QB52S6NiVdDQvGlny1qvPqA=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
@@ -8,6 +25,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
+github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko=
+github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
@@ -29,6 +48,13 @@ github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
+github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
+github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
+github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
+github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
+github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
+github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
@@ -36,12 +62,35 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
+github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
+github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
+github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
+github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
+github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
+github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=
+github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
+github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
+github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
+github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs=
+github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM=
+github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo=
+github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg=
+github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs=
+github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.4 h1:tHnRBy1i5F2Dh8BAFxqFzxKqqvezXrL2OW1TnX+Mlas=
github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
+github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
+github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
@@ -54,6 +103,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
+github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
@@ -62,6 +113,10 @@ github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPK
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
+github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
+github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP3b/PA=
+github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs=
github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -70,8 +125,10 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
+github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
github.com/mozillazg/go-pinyin v0.19.0 h1:p+J8/kjJ558KPvVGYLvqBhxf8jbZA2exSLCs2uUVN8c=
github.com/mozillazg/go-pinyin v0.19.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
@@ -80,6 +137,9 @@ github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw=
github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro=
github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
+github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
@@ -101,13 +161,19 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An
github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk=
github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.3-0.20181224173747-660f15d67dbb/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
@@ -115,35 +181,91 @@ github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk=
+golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
+golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio=
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
+golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
+golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
+golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
+golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
+golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
+golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
+golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
+golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
+golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
+golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
+golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
+golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
+golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
+golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
+golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
@@ -158,15 +280,24 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI=
gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gorm.io/driver/mysql v1.3.3 h1:jXG9ANrwBc4+bMvBcSl8zCfPBaVoPyBEBshA8dA93X8=
gorm.io/driver/mysql v1.3.3/go.mod h1:ChK6AHbHgDCFZyJp0F+BmVGb06PSIoh9uVYKAlRbb2U=
+gorm.io/driver/postgres v1.5.11 h1:ubBVAfbKEUld/twyKZ0IYn9rSQh448EdelLYk9Mv314=
+gorm.io/driver/postgres v1.5.11/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI=
+gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I=
+gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
+gorm.io/driver/sqlserver v1.5.4 h1:xA+Y1KDNspv79q43bPyjDMUgHoYHLhXYmdFcYPobg8g=
+gorm.io/driver/sqlserver v1.5.4/go.mod h1:+frZ/qYmuna11zHPlh5oc2O6ZA/lS88Keb0XSH1Zh/g=
gorm.io/gorm v1.23.1/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=
-gorm.io/gorm v1.23.4 h1:1BKWM67O6CflSLcwGQR7ccfmC4ebOxQrTfOQGRE9wjg=
-gorm.io/gorm v1.23.4/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=
+gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
+gorm.io/gorm v1.25.10 h1:dQpO+33KalOA+aFYGlK+EfxcI5MbO7EP2yYygwh9h+s=
+gorm.io/gorm v1.25.10/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
diff --git a/hr_server.exe b/hr_server.exe
index 6fdda4c..03c5406 100644
Binary files a/hr_server.exe and b/hr_server.exe differ
diff --git a/identification/authentication.go b/identification/authentication.go
index 06e1d95..74fcbd2 100644
--- a/identification/authentication.go
+++ b/identification/authentication.go
@@ -11,7 +11,7 @@ import (
"github.com/mitchellh/mapstructure"
)
-//验证器
+// 验证器
func Validator() gin.HandlerFunc {
return func(c *gin.Context) {
userToken := c.Request.Header.Get("token")
@@ -157,15 +157,16 @@ func Validator() gin.HandlerFunc {
// tokenMd5Str, numberMd5
// overallhandle.Result(2004, "对不起!非法令牌!不可访问系统", c)
- overallhandle.Result(2004, sss, c, "对不起!非法令牌!不可访问系统")
+ overallhandle.Result(2004, numberMd5, c, "对不起!非法令牌!不可访问系统")
c.Abort()
return
}
+ // fmt.Printf("拦截")
c.Next()
}
}
-//拦截器
+// 拦截器
func Interceptor() gin.HandlerFunc {
return func(c *gin.Context) {
diff --git a/initialization/databaseinit/mysql.go b/initialization/databaseinit/mysql.go
index 7a32074..d20eaaa 100644
--- a/initialization/databaseinit/mysql.go
+++ b/initialization/databaseinit/mysql.go
@@ -44,6 +44,14 @@ func LoadDatabase() {
} else {
fmt.Printf("%v数据库开启成功!\n", sqlConfig.PersonalityColor.Name)
}
+
+ //开启外网Hr数据库
+ overall.CONSTANT_HRSERVER_DATABASE = sqlConfig.HrDatabaseServer.OpenSql()
+ if overall.CONSTANT_HRSERVER_DATABASE == nil {
+ fmt.Printf("%v数据库开启失败!\n", sqlConfig.HrDatabaseServer.Name)
+ } else {
+ fmt.Printf("%v数据库开启成功!\n", sqlConfig.HrDatabaseServer.Name)
+ }
//开启内网数据库
// overall.CONSTANT_Hr_Server = sqlConfig.HrNeiSever.OpenSql()
// if overall.CONSTANT_Personality_Color == nil {
@@ -51,4 +59,17 @@ func LoadDatabase() {
// } else {
// fmt.Printf("%v数据库开启成1功!\n", sqlConfig.HrNeiSever.Name)
// }
+ overall.CONSTANT_DB_CustomerForm = sqlConfig.CustomerForm.OpenSql()
+ if overall.CONSTANT_DB_CustomerForm == nil {
+ fmt.Printf("%v:数据库开启失败!服务器\n", sqlConfig.CustomerForm.Name)
+ } else {
+ fmt.Printf("%v:数据库开启成功!服务器\n", sqlConfig.CustomerForm.Name)
+ }
+ //开启主数据库
+ overall.CONSTANT_DB_AppPlatform = sqlConfig.AppPlatformDatabase.OpenSql()
+ if overall.CONSTANT_DB_AppPlatform == nil {
+ fmt.Printf("%v:数据库开启失败!\n", sqlConfig.AppPlatformDatabase.Name)
+ } else {
+ fmt.Printf("%v:数据库开启成功!\n", sqlConfig.AppPlatformDatabase.Name)
+ }
}
diff --git a/models/administrative_organization.go b/models/administrative_organization.go
index 9f053e9..e3384c5 100644
--- a/models/administrative_organization.go
+++ b/models/administrative_organization.go
@@ -1,6 +1,9 @@
package models
import (
+ "encoding/json"
+ "fmt"
+ "hr_server/grocerystore"
"hr_server/overall"
"strings"
)
@@ -56,3 +59,23 @@ func (cont *AdministrativeOrganization) ContMap(whereMap interface{}) (countAry
overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Find(&countAry)
return
}
+
+// 根据ID获取行政组织内容
+func (cont *AdministrativeOrganization) RedisCont(orgId int64) (err error) {
+ redisFileKey := fmt.Sprintf("org:Info:%v_%v", orgId, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias)
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) //设定redis库
+ isTrue, tokens := redisClient.Get(redisFileKey)
+ if isTrue && tokens != "" {
+ err = json.Unmarshal([]byte(tokens), &cont)
+ return
+ } else {
+ var jsonStr []byte
+ err = overall.CONSTANT_DB_HR.Model(&cont).Where("`id` = ?", orgId).First(&cont).Error
+ if err == nil {
+ redisClient.SetRedisTime(0)
+ jsonStr, err = json.Marshal(cont)
+ redisClient.Set(redisFileKey, string(jsonStr))
+ }
+ }
+ return
+}
diff --git a/models/customerForm/diaoBanSetup.go b/models/customerForm/diaoBanSetup.go
new file mode 100644
index 0000000..ab436a7
--- /dev/null
+++ b/models/customerForm/diaoBanSetup.go
@@ -0,0 +1,73 @@
+package customerForm
+
+import (
+ "hr_server/overall"
+ "strings"
+)
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-03-06 13:23:03
+@ 功能: 自定义表单分组
+*/
+type DiaoBanSetup struct {
+ Id int64 `json:"id" gorm:"primaryKey;column:id;type:int(5) unsigned;not null;comment:Id;index"`
+ Appid int64 `json:"appid" gorm:"column:appid;type:bigint(20) unsigned;default:0;not null;comment:归属哪个app"`
+ Source string `json:"source" gorm:"column:source;type:varchar(255) unsigned;default:'';not null;comment:是否引用数据源(yes ; no)"`
+ Ip string `json:"ip" gorm:"column:ip;type:varchar(255) unsigned;default:'';not null;comment:数据源地址"`
+ DataBaseName string `json:"dataBaseName" gorm:"column:dataBaseName;type:varchar(255) unsigned;default:'';not null;comment:是否引用数据源(yes ; no)"`
+ SqlType string `json:"sqlType" gorm:"column:sqlType;type:varchar(255) unsigned;default:'';not null;comment:数据库类型"`
+ Port int `json:"port" gorm:"column:port;type:int(7) unsigned;default:50;not null;comment:端口"`
+ TableKey string `json:"tableKey" gorm:"column:tableKey;type:varchar(255);default:'';comment:数据表标识"`
+ TableNames string `json:"tableName" gorm:"column:tableName;type:varchar(255);default:'';comment:数据表名称"`
+ UserName string `json:"userName" gorm:"column:userName;type:varchar(255);default:'';comment:数据库用户名"`
+ Pwd string `json:"pwd" gorm:"column:pwd;type:varchar(255);default:'';comment:数据库密码"`
+ Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"`
+ SourceId string `json:"sourceId" gorm:"column:sourceId;type:varchar(255);default:'';comment:所愿"`
+}
+
+func (DiaoBanSetup *DiaoBanSetup) TableName() string {
+ return "diaoBanSetup"
+}
+
+// 编辑内容
+func (cont *DiaoBanSetup) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Updates(saveData).Error
+ return
+}
+
+// 获取内容
+func (cont *DiaoBanSetup) GetCont(whereMap interface{}, field ...string) (err error) {
+ gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ gormDb = gormDb.Where(whereMap)
+ err = gormDb.First(&cont).Error
+ return
+}
+
+// 根据条件获取总数
+func (cont *DiaoBanSetup) CountCont(whereMap interface{}) (countId int64) {
+ overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Count(&countId)
+ return
+}
+
+// 读取全部信息
+func (cont *DiaoBanSetup) ContMap(whereMap interface{}, field ...string) (countAry []DiaoBanSetup, err error) {
+ gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ err = gormDb.Where(whereMap).Find(&countAry).Error
+ return
+}
+
+// 删除内容
+func (cont *DiaoBanSetup) DelCont(whereMap interface{}) (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Where(whereMap).Delete(&cont).Error
+ return
+}
diff --git a/models/customerForm/huanBanShenQing.go b/models/customerForm/huanBanShenQing.go
new file mode 100644
index 0000000..a973144
--- /dev/null
+++ b/models/customerForm/huanBanShenQing.go
@@ -0,0 +1,79 @@
+package customerForm
+
+import (
+ "hr_server/overall"
+ "strings"
+)
+
+// 工作流执行主体
+// 字典类型
+type HuanBanShenQing struct {
+ Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"`
+ MastersKey int64 `json:"masters_key" gorm:"column:masters_key;type:bigint(20) unsigned;default:0;not null;comment:申请人"`
+ Creater int64 `json:"creater" gorm:"column:creater;type:bigint(20) unsigned;default:0;not null;comment:申请人"`
+ CreaterTime int64 `json:"creater_time" gorm:"column:creater_time;type:bigint(20) unsigned;default:0;not null;comment:提交时间"`
+ EditTime int64 `json:"edit_time" gorm:"column:edit_time;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"`
+ FlowId int64 `json:"flow_id" gorm:"column:flow_id;type:bigint(20) unsigned;default:0;not null;comment:流程识别标识"`
+ States int `json:"states" gorm:"column:states;type:int(11) unsigned;default:1;not null;comment:状态(1:启用,2:禁用;3:删除)"`
+ FlowIsOpen int `json:"flowIsOpen" gorm:"column:flowIsOpen;type:int(1) unsigned;default:3;not null;comment:是否开启工作流"`
+ Shen3pi1bian1hao4 string `json:"shen3pi1bian1hao4" gorm:"column:shen3pi1bian1hao4;type:varchar(255);default:'';comment:审批编号"`
+ Fu4jian4 string `json:"fu4jian4" gorm:"column:fu4jian4;type:longtext;comment:附件"`
+ Org string `json:"org" gorm:"column:org;type:mediumtext;default:'';comment:申请人部门"`
+ Shou3ji1hao4109293 string `json:"shou3ji1hao4109293" gorm:"column:shou3ji1hao4109293;type:mediumtext;default:'';comment:手机号"`
+ Dang1zhi2ri4qi1 int64 `json:"dang1zhi2ri4qi1" gorm:"column:dang1zhi2ri4qi1;type:bigint(20) unsigned;default:0;not null;comment:当值日期"`
+ Diao4huan4ren229452110 string `json:"diao4huan4ren229452110" gorm:"column:diao4huan4ren229452110;type:longtext;comment:调换人"`
+ Shou3ji1 string `json:"shou3ji1" gorm:"column:shou3ji1;type:varchar(255);default:'';comment:审批编号"`
+ Diao4huan4ri4qi1 int64 `json:"diao4huan4ri4qi1" gorm:"column:diao4huan4ri4qi1;type:bigint(20) unsigned;default:0;not null;comment:调换日期"`
+ Shen1qing3yuan2yin1 string `json:"shen1qing3yuan2yin1" gorm:"column:shen1qing3yuan2yin1;type:longtext;comment:申请原因"`
+}
+
+func (HuanBanShenQing *HuanBanShenQing) TableName() string {
+ return "huanBanShenQing"
+}
+
+// 写入内容
+func (cont *HuanBanShenQing) WriteCont() (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Create(&cont).Error
+ return
+}
+
+// 编辑内容
+func (cont *HuanBanShenQing) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Updates(saveData).Error
+ return
+}
+
+// 获取内容
+func (cont *HuanBanShenQing) GetCont(whereMap interface{}, field ...string) (err error) {
+ gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ gormDb = gormDb.Where(whereMap)
+ err = gormDb.First(&cont).Error
+ return
+}
+
+// 根据条件获取总数
+func (cont *HuanBanShenQing) CountCont(whereMap interface{}) (countId int64) {
+ overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Count(&countId)
+ return
+}
+
+// 读取全部信息
+func (cont *HuanBanShenQing) ContMap(whereMap interface{}, field ...string) (countAry []HuanBanShenQing, err error) {
+ gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ err = gormDb.Where(whereMap).Find(&countAry).Error
+ return
+}
+
+// 删除内容
+func (cont *HuanBanShenQing) DelCont(whereMap interface{}) (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Where(whereMap).Delete(&cont).Error
+ return
+}
diff --git a/models/customerForm/runFlowTask.go b/models/customerForm/runFlowTask.go
new file mode 100644
index 0000000..3450734
--- /dev/null
+++ b/models/customerForm/runFlowTask.go
@@ -0,0 +1,97 @@
+package customerForm
+
+import (
+ "hr_server/overall"
+ "strings"
+)
+
+// 工作流执行主体
+// 字典类型
+type RunFlowTask struct {
+ Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"`
+ FlowKey int64 `json:"flowKey" gorm:"column:flow_key;type:bigint(20) unsigned;default:0;not null;comment:工作流主体"`
+ Version string `json:"version" gorm:"column:version;type:varchar(255);default:'';comment:使用得版本"`
+ Status int `json:"status" gorm:"column:status;type:int(1) unsigned;default:1;not null;comment:状态:1、草稿;2:驳回;3:通过;4:归档;5:删除"`
+ FlowCont string `json:"flowcont" gorm:"column:flow_cont;type:longtext;comment:流程执行体"`
+ Creater int64 `json:"creater" gorm:"column:creater;type:bigint(20) unsigned;default:0;not null;comment:流程发起人"`
+ CurrentStep int `json:"currentStep" gorm:"column:current_step;type:int(4) unsigned;default:1;not null;comment:当前节点"`
+ NextStep int `json:"nextStep" gorm:"column:next_step;type:int(4) unsigned;default:0;not null;comment:下一个节点。0:代表没有下一个节点。流程结束"`
+ NextExecutor string `json:"nextExecutor" gorm:"column:next_executor;type:mediumtext;default:'';comment:下一步执行人"`
+ Participants string `json:"participants" gorm:"column:participants;type:longtext;comment:参与人"`
+ StartTime int64 `json:"startTime" gorm:"column:start_time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"`
+ UpdateTime int64 `json:"update_time" gorm:"column:update_time;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"`
+ VersionCont string `json:"versionCont" gorm:"column:version_cont;type:longtext;comment:版本流程内容"`
+ RunKey int64 `json:"runKey" gorm:"column:runKey;type:bigint(20) unsigned;default:0;not null;comment:当前执行识别符"`
+ Title string `json:"title" gorm:"column:title;type:varchar(255) unsigned;default:'';not null;comment:标题"`
+ TaskCreate int64 `json:"taskCreate" gorm:"column:taskCreate;type:bigint(20) unsigned;default:0;not null;comment:创建人"`
+ CreaterTime int64 `json:"creater_time" gorm:"column:creater_time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"`
+ Types int `json:"types" gorm:"column:types;type:int(1) unsigned;default:1;not null;comment:类型(1:普通表单;2:流程表单)"`
+ VersionId int64 `json:"version_id" gorm:"column:version_id;type:bigint(20) unsigned;default:0;not null;comment:来源于哪个表单"`
+ State int `json:"state" gorm:"column:state;type:int(1) unsigned;default:1;not null;comment:状态(1:草稿,2:发表;3:审批中;4:归档;5:删除)"`
+ // MastersKey int64 `json:"masters_key" gorm:"column:masters_key;type:bigint(20) unsigned;default:0;not null;comment:主表标识"`
+ TaskFlowKey int64 `json:"taskFlowKey" gorm:"column:taskFlowKey;type:bigint(20) unsigned;default:0;not null;comment:主表标识"`
+ FlowRunSing int64 `json:"flowRunSing" gorm:"column:flow_run_sing;type:bigint(20) unsigned;default:0;not null;comment:主表标识"`
+ MastesForm string `json:"mastesform" gorm:"column:mastesform;type:longtext;default:'';comment:表单结构"`
+ MastesFormJson string `json:"mastesformjson" gorm:"column:mastesformjson;type:longtext;default:'';comment:表单结构json"`
+ Visibility int `json:"visibility" gorm:"column:visibility;type:int(1) unsigned;default:1;not null;comment:1、所有人;2、自定义"`
+ AuthorizationRoles string `json:"authorizationRoles" gorm:"column:authorizationRoles;type:mediumtext;comment:授权角色"`
+ AuthorizedPersonnel string `json:"authorizedPersonnel" gorm:"column:authorizedPersonnel;type:mediumtext;comment:授权人员"`
+ AuthorizedOrg string `json:"authorizedOrg" gorm:"column:authorizedOrg;type:mediumtext;comment:授权行政组织"`
+ AuthorizedPosition string `json:"authorizedPosition" gorm:"column:authorizedPosition;type:mediumtext;comment:授权职务"`
+ Participant string `json:"participant" gorm:"column:participant;type:longtext;default:'';comment:表单结构json"`
+ TableKey int64 `json:"tableKey" gorm:"column:tableKey;type:bigint(20) unsigned;default:0;not null;comment:归属自定义表"`
+ AppKey int64 `json:"appKey" gorm:"column:appKey;type:bigint(20) unsigned;default:0;not null;comment:归属App(0:非app表单)"`
+ MakeCopy string `json:"makeCopy" gorm:"column:makeCopy;type:mediumtext;comment:抄送人"`
+ MastersKey int64 `json:"masters_key" gorm:"column:masters_key;type:bigint(20) unsigned;default:0;not null;comment:主表识别符"`
+}
+
+func (RunFlowTask *RunFlowTask) TableName() string {
+ return "runFlowTask"
+}
+
+// 写入内容
+func (cont *RunFlowTask) WriteCont() (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Create(&cont).Error
+ return
+}
+
+// 编辑内容
+func (cont *RunFlowTask) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Updates(saveData).Error
+ return
+}
+
+// 获取内容
+func (cont *RunFlowTask) GetCont(whereMap interface{}, field ...string) (err error) {
+ gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ gormDb = gormDb.Where(whereMap)
+ err = gormDb.First(&cont).Error
+ return
+}
+
+// 根据条件获取总数
+func (cont *RunFlowTask) CountCont(whereMap interface{}) (countId int64) {
+ overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Count(&countId)
+ return
+}
+
+// 读取全部信息
+func (cont *RunFlowTask) ContMap(whereMap interface{}, field ...string) (countAry []RunFlowTask, err error) {
+ gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ err = gormDb.Where(whereMap).Find(&countAry).Error
+ return
+}
+
+// 删除内容
+func (cont *RunFlowTask) DelCont(whereMap interface{}) (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Where(whereMap).Delete(&cont).Error
+ return
+}
diff --git a/models/customerForm/runWorkflow.go b/models/customerForm/runWorkflow.go
new file mode 100644
index 0000000..fab935c
--- /dev/null
+++ b/models/customerForm/runWorkflow.go
@@ -0,0 +1,77 @@
+package customerForm
+
+import (
+ "hr_server/overall"
+ "strings"
+)
+
+// 工作流执行主体
+// 字典类型
+type RunWorkflow struct {
+ Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"`
+ FlowKey int64 `json:"flowKey" gorm:"column:flow_key;type:bigint(20) unsigned;default:0;not null;comment:工作流主体"`
+ Version string `json:"version" gorm:"column:version;type:varchar(255);default:'';comment:使用得版本"`
+ Status int `json:"status" gorm:"column:status;type:int(1) unsigned;default:1;not null;comment:状态:1、草稿;2:驳回;3:通过;4:归档;5:删除"`
+ FlowCont string `json:"flowcont" gorm:"column:flow_cont;type:longtext;comment:流程执行体"`
+ Creater int64 `json:"creater" gorm:"column:creater;type:bigint(20) unsigned;default:0;not null;comment:流程发起人"`
+ CurrentStep int `json:"currentStep" gorm:"column:current_step;type:int(4) unsigned;default:1;not null;comment:当前节点"`
+ NextStep int `json:"nextStep" gorm:"column:next_step;type:int(4) unsigned;default:0;not null;comment:下一个节点。0:代表没有下一个节点。流程结束"`
+ NextExecutor string `json:"nextExecutor" gorm:"column:next_executor;type:mediumtext;default:'';comment:下一步执行人"`
+ Participants string `json:"participants" gorm:"column:participants;type:longtext;comment:参与人"`
+ StartTime int64 `json:"startTime" gorm:"column:start_time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"`
+ UpdateTime int64 `json:"update_time" gorm:"column:update_time;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"`
+ VersionCont string `json:"versionCont" gorm:"column:version_cont;type:longtext;comment:版本流程内容"`
+ RunKey int64 `json:"runKey" gorm:"column:runKey;type:bigint(20) unsigned;default:0;not null;comment:当前执行识别符"`
+ MakeCopy string `json:"makeCopy" gorm:"column:makeCopy;type:mediumtext;comment:抄送人"`
+}
+
+func (RunWorkflow *RunWorkflow) TableName() string {
+ return "runworkflow"
+}
+
+// 写入内容
+func (cont *RunWorkflow) WriteCont() (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Create(&cont).Error
+ return
+}
+
+// 编辑内容
+func (cont *RunWorkflow) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Updates(saveData).Error
+ return
+}
+
+// 获取内容
+func (cont *RunWorkflow) GetCont(whereMap interface{}, field ...string) (err error) {
+ gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ gormDb = gormDb.Where(whereMap)
+ err = gormDb.First(&cont).Error
+ return
+}
+
+// 根据条件获取总数
+func (cont *RunWorkflow) CountCont(whereMap interface{}) (countId int64) {
+ overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Count(&countId)
+ return
+}
+
+// 读取全部信息
+func (cont *RunWorkflow) ContMap(whereMap interface{}, field ...string) (countAry []RunWorkflow, err error) {
+ gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ err = gormDb.Where(whereMap).Find(&countAry).Error
+ return
+}
+
+// 删除内容
+func (cont *RunWorkflow) DelCont(whereMap interface{}) (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Where(whereMap).Delete(&cont).Error
+ return
+}
diff --git a/models/customerForm/taskrecord.go b/models/customerForm/taskrecord.go
new file mode 100644
index 0000000..c68af32
--- /dev/null
+++ b/models/customerForm/taskrecord.go
@@ -0,0 +1,78 @@
+package customerForm
+
+import (
+ "hr_server/overall"
+ "strings"
+)
+
+// 自定义表单任务表
+type TaskRecord struct {
+ Id int64 `json:"id" gorm:"primaryKey;column:id;type:int(5) unsigned;not null;comment:Id;index"`
+ Title string `json:"title" gorm:"column:title;type:varchar(255) unsigned;default:'';not null;comment:标题"`
+ Creater int64 `json:"creater" gorm:"column:creater;type:bigint(20) unsigned;default:0;not null;comment:创建人"`
+ CreaterTime int64 `json:"creater_time" gorm:"column:creater_time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"`
+ EditTime int64 `json:"editTime" gorm:"column:edit_time;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"`
+ Types int `json:"types" gorm:"column:types;type:int(1) unsigned;default:1;not null;comment:类型(1:普通表单;2:流程表单)"`
+ VersionId int64 `json:"version_id" gorm:"column:version_id;type:bigint(20) unsigned;default:0;not null;comment:来源于哪个表单"`
+ Status int `json:"status" gorm:"column:status;type:int(1) unsigned;default:1;not null;comment:状态(1:草稿,2:发表;3:审批中;4:归档;5:删除)"`
+ MastersKey int64 `json:"masters_key" gorm:"column:masters_key;type:bigint(20) unsigned;default:0;not null;comment:主表标识"`
+ FlowKey int64 `json:"flow_key" gorm:"column:flow_key;type:bigint(20) unsigned;default:0;not null;comment:主表标识"`
+ FlowRunSing int64 `json:"flowRunSing" gorm:"column:flow_run_sing;type:bigint(20) unsigned;default:0;not null;comment:主表标识"`
+ MastesForm string `json:"mastesform" gorm:"column:mastesform;type:longtext;default:'';comment:表单结构"`
+ MastesFormJson string `json:"mastesformjson" gorm:"column:mastesformjson;type:longtext;default:'';comment:表单结构json"`
+ Visibility int `json:"visibility" gorm:"column:visibility;type:int(1) unsigned;default:1;not null;comment:1、所有人;2、自定义"`
+ AuthorizationRoles string `json:"authorizationRoles" gorm:"column:authorizationRoles;type:mediumtext;comment:授权角色"`
+ AuthorizedPersonnel string `json:"authorizedPersonnel" gorm:"column:authorizedPersonnel;type:mediumtext;comment:授权人员"`
+ AuthorizedOrg string `json:"authorizedOrg" gorm:"column:authorizedOrg;type:mediumtext;comment:授权行政组织"`
+ AuthorizedPosition string `json:"authorizedPosition" gorm:"column:authorizedPosition;type:mediumtext;comment:授权职务"`
+ Participant string `json:"participant" gorm:"column:participant;type:longtext;default:'';comment:表单结构json"`
+ TableKey int64 `json:"tableKey" gorm:"column:tableKey;type:bigint(20) unsigned;default:0;not null;comment:归属自定义表"`
+ AppKey int64 `json:"appKey" gorm:"column:appKey;type:bigint(20) unsigned;default:0;not null;comment:归属App(0:非app表单)"`
+ RunFlowId int64 `json:"runFlowId" gorm:"column:runFlowId;type:bigint(20) unsigned;default:0;not null;comment:正在执行得流程"`
+ MsgId int64 `json:"msgId" gorm:"column:msgId;type:bigint(20) unsigned;default:0;not null;comment:发送消息得任务ID"`
+}
+
+func (TaskRecord *TaskRecord) TableName() string {
+ return "taskrecord"
+}
+
+// 编辑内容
+func (cont *TaskRecord) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Updates(saveData).Error
+ return
+}
+
+// 获取内容
+func (cont *TaskRecord) GetCont(whereMap interface{}, field ...string) (err error) {
+ gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ gormDb = gormDb.Where(whereMap)
+ err = gormDb.First(&cont).Error
+ return
+}
+
+// 根据条件获取总数
+func (cont *TaskRecord) CountCont(whereMap interface{}) (countId int64) {
+ overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Count(&countId)
+ return
+}
+
+// 读取全部信息
+func (cont *TaskRecord) ContMap(whereMap interface{}, field ...string) (countAry []TaskRecord, err error) {
+ gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ err = gormDb.Where(whereMap).Find(&countAry).Error
+ return
+}
+
+// 删除内容
+func (cont *TaskRecord) DelCont(whereMap interface{}) (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Where(whereMap).Delete(&cont).Error
+ return
+}
diff --git a/models/customerForm/taskrunrecord.go b/models/customerForm/taskrunrecord.go
new file mode 100644
index 0000000..3974ae5
--- /dev/null
+++ b/models/customerForm/taskrunrecord.go
@@ -0,0 +1,76 @@
+package customerForm
+
+import (
+ "hr_server/overall"
+ "strings"
+)
+
+// 工作流执行主体
+// 字典类型
+type TaskRunRecord struct {
+ Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"`
+ FlowKey int64 `json:"flowKey" gorm:"column:flow_key;type:bigint(20) unsigned;default:0;not null;comment:工作流主体"`
+ Version string `json:"version" gorm:"column:version;type:varchar(255);default:'';comment:使用得版本"`
+ Status int `json:"status" gorm:"column:status;type:int(1) unsigned;default:1;not null;comment:状态:1、草稿;2:驳回;3:通过;4:归档;5:删除"`
+ FlowCont string `json:"flowcont" gorm:"column:flow_cont;type:longtext;comment:流程执行体"`
+ Creater int64 `json:"creater" gorm:"column:creater;type:bigint(20) unsigned;default:0;not null;comment:流程发起人"`
+ CurrentStep int `json:"currentStep" gorm:"column:current_step;type:int(4) unsigned;default:1;not null;comment:当前节点"`
+ NextStep int `json:"nextStep" gorm:"column:next_step;type:int(4) unsigned;default:0;not null;comment:下一个节点。0:代表没有下一个节点。流程结束"`
+ NextExecutor string `json:"nextExecutor" gorm:"column:next_executor;type:mediumtext;default:'';comment:下一步执行人"`
+ Participants string `json:"participants" gorm:"column:participants;type:longtext;comment:参与人"`
+ StartTime int64 `json:"startTime" gorm:"column:start_time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"`
+ UpdateTime int64 `json:"update_time" gorm:"column:update_time;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"`
+ VersionCont string `json:"versionCont" gorm:"column:version_cont;type:longtext;comment:版本流程内容"`
+ RunKey int64 `json:"runKey" gorm:"column:runKey;type:bigint(20) unsigned;default:0;not null;comment:当前执行识别符"`
+}
+
+func (TaskRunRecord *TaskRunRecord) TableName() string {
+ return "taskrunrecord"
+}
+
+// 写入内容
+func (cont *TaskRunRecord) WriteCont() (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Create(&cont).Error
+ return
+}
+
+// 编辑内容
+func (cont *TaskRunRecord) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Updates(saveData).Error
+ return
+}
+
+// 获取内容
+func (cont *TaskRunRecord) GetCont(whereMap interface{}, field ...string) (err error) {
+ gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ gormDb = gormDb.Where(whereMap)
+ err = gormDb.First(&cont).Error
+ return
+}
+
+// 根据条件获取总数
+func (cont *TaskRunRecord) CountCont(whereMap interface{}) (countId int64) {
+ overall.CONSTANT_DB_CustomerForm.Model(&cont).Where(whereMap).Count(&countId)
+ return
+}
+
+// 读取全部信息
+func (cont *TaskRunRecord) ContMap(whereMap interface{}, field ...string) (countAry []TaskRunRecord, err error) {
+ gormDb := overall.CONSTANT_DB_CustomerForm.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ err = gormDb.Where(whereMap).Find(&countAry).Error
+ return
+}
+
+// 删除内容
+func (cont *TaskRunRecord) DelCont(whereMap interface{}) (err error) {
+ err = overall.CONSTANT_DB_CustomerForm.Where(whereMap).Delete(&cont).Error
+ return
+}
diff --git a/models/duties.go b/models/duties.go
index bb0a4ef..44d26fb 100644
--- a/models/duties.go
+++ b/models/duties.go
@@ -5,14 +5,14 @@ import (
"strings"
)
-//职务
+// 职务
type Duties struct {
Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"`
Name string `json:"name" gorm:"column:name;type:varchar(255) unsigned;default:'';not null;comment:职务名称"`
JobType int64 `json:"jobtype" gorm:"column:job_type;type:bigint(20) unsigned;default:0;not null;comment:归属职务类型"`
Weight int64 `json:"weight" gorm:"column:weight;type:bigint(20) unsigned;default:1;not null;comment:权重"`
Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"`
- Number string `json:"number" gorm:"column:number;type:varchar(50) unsigned;default:'';not null;comment:编码"`
+ Number string `json:"number" gorm:"column:number;type:varchar(50) unsigned;default:'';comment:编码"`
State int `json:"state" gorm:"column:state;type:int(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)"`
KingdeeId string `json:"kingdeeid" gorm:"column:kingdeeid;type:varchar(255) unsigned;default:'';comment:金蝶对照ID"`
KingdeeNum string `json:"kingdeenum" gorm:"column:kingdeenum;type:varchar(255) unsigned;default:'';comment:金蝶对照编码"`
@@ -22,13 +22,13 @@ func (Duties *Duties) TableName() string {
return "duties"
}
-//编辑职务分类内容
+// 编辑职务分类内容
func (Duties *Duties) EiteCont(whereMap map[string]interface{}, saveData map[string]interface{}) (err error) {
err = overall.CONSTANT_DB_HR.Model(&Duties).Where(whereMap).Updates(saveData).Error
return
}
-//获取详细内容
+// 获取详细内容
func (cont *Duties) GetCont(whereMap interface{}, field ...string) (err error) {
gormDb := overall.CONSTANT_DB_HR.Model(&cont)
if len(field) > 0 {
diff --git a/models/inside_work_history.go b/models/inside_work_history.go
index 9e18686..3b29a93 100644
--- a/models/inside_work_history.go
+++ b/models/inside_work_history.go
@@ -30,6 +30,13 @@ type InsideWorkHistory struct {
SuperiorPosition string `json:"superiorPosition" gorm:"column:superiorPosition;type:varchar(255) ;comment:上级职位"`
SuperiorName string `json:"superiorName" gorm:"column:superiorName;type:varchar(255) unsigned;default:'';comment:上级名称"`
Subordinates int `json:"subordinates" gorm:"column:subordinates;type:int(5) unsigned;default:0;not null;comment:下属人数"`
+ Bdlx string `json:"bdlx" gorm:"column:bdlx;type:varchar(255) ;comment:变动类型"`
+ Gsmc string `json:"gsmc" gorm:"column:gsmc;type:varchar(255) ;comment:公司名称"`
+ Yjbm string `json:"yjbm" gorm:"column:yjbm;type:varchar(255) ;comment:一级部门"`
+ Ejbm string `json:"ejbm" gorm:"column:ejbm;type:varchar(255) ;comment:二级部门"`
+ Gongduan string `json:"gongduan" gorm:"column:gongduan;type:varchar(255) ;comment:工段"`
+ Dengji string `json:"dengji" gorm:"column:dengji;type:varchar(255) ;comment:等级"`
+ Zhiwei string `json:"zhiwei" gorm:"column:zhiwei;type:varchar(255) ;comment:职位"`
}
func (InsideWorkHistory *InsideWorkHistory) TableName() string {
diff --git a/models/man_cont.go b/models/man_cont.go
index f8ae973..374b8dc 100644
--- a/models/man_cont.go
+++ b/models/man_cont.go
@@ -66,6 +66,7 @@ type ManCont struct {
CareerPlanning string `json:"career_planning" gorm:"column:career_planning;type:longtext;default:'';not null;comment:职业生涯规划"`
HelpObtained string `json:"help_obtained" gorm:"column:help_obtained;type:longtext;default:'';not null;comment:个人期望从组织获得的帮助"`
Hobby string `json:"hobby" gorm:"column:hobby;type:text;default:'';not null;comment:爱好"`
+ ExcelTemplate int64 `json:"excelTemplate" gorm:"column:excel_template;type:bigint(20) unsigned;default:0;not null;comment:信息来源于哪个模板`
}
func (ManCont *ManCont) TableName() string {
diff --git a/models/meritslog.go b/models/meritslog.go
index 39a8f17..75997e6 100644
--- a/models/meritslog.go
+++ b/models/meritslog.go
@@ -15,6 +15,7 @@ type Meritslog struct {
Years int `json:"years" gorm:"column:years;type:int(7) unsigned;default:0;not null;comment:年"`
Months int `json:"months" gorm:"column:months;type:int(7) unsigned;default:0;not null;comment:月"`
Level string `json:"level" gorm:"column:level;type:varchar(255);not null;comment:考核等级"`
+ Notes string `json:"notes" gorm:"column:notes;type:mediumtext;comment:考核等级"`
}
func (Meritslog *Meritslog) TableName() string {
diff --git a/models/orgChangeRecord.go b/models/orgChangeRecord.go
new file mode 100644
index 0000000..1b15f34
--- /dev/null
+++ b/models/orgChangeRecord.go
@@ -0,0 +1,67 @@
+package models
+
+import (
+ "hr_server/overall"
+ "strings"
+)
+
+// 行政组织变更记录
+type OrgChangeRecord struct {
+ Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:ID"`
+ Userkey int64 `json:"userkey" gorm:"primaryKey;column:userkey;type:bigint(20) unsigned;not null;comment:员工唯一识别符;"`
+ CompanyCn string `json:"companycn" gorm:"column:companycn;type:varchar(255) ;comment:公司中文"`
+ CompanyId int64 `json:"companyid" gorm:"column:companyid;type:bigint(20) unsigned;default:0;not null;comment:公司id"`
+ FirstDepartment string `json:"firstDepartment" gorm:"column:firstDepartment;type:varchar(255) ;comment:一级部门中文"`
+ FirstDepartmentId int64 `json:"firstDepartmentid" gorm:"column:firstDepartmentid;type:bigint(20) unsigned;default:0;not null;comment:一级部门id"`
+ SecondaryDepartment string `json:"secondaryDepartment" gorm:"column:secondaryDepartment;type:varchar(255) ;comment:二级部门中文"`
+ SecondaryDepartmentId int64 `json:"secondaryDepartmentid" gorm:"column:secondaryDepartmentid;type:bigint(20) unsigned;default:0;not null;comment:二级部门id"`
+ WorkShop string `json:"workshop" gorm:"column:workshop;type:varchar(255) ;comment:公司中文"`
+ WorkShopid int64 `json:"workshopid" gorm:"column:workshopid;type:bigint(20) unsigned;default:0;not null;comment:工段ID"`
+ Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"`
+ Notes string `json:"notes" gorm:"column:notes;type:mediumtext;comment:备注"`
+}
+
+func (OrgChangeRecord *OrgChangeRecord) TableName() string {
+ return "orgChangeRecord"
+}
+
+// 编辑内容
+func (cont *OrgChangeRecord) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
+ err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error
+ return
+}
+
+// 获取内容
+func (cont *OrgChangeRecord) GetCont(whereMap interface{}, field ...string) (err error) {
+ gormDb := overall.CONSTANT_DB_HR.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ gormDb = gormDb.Where(whereMap)
+ err = gormDb.First(&cont).Error
+ return
+}
+
+// 根据条件获取总数
+func (cont *OrgChangeRecord) CountCont(whereMap interface{}) (countId int64) {
+ overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId)
+ return
+}
+
+// 读取全部信息
+func (cont *OrgChangeRecord) ContMap(whereMap interface{}, field ...string) (countAry []OrgChangeRecord, err error) {
+ gormDb := overall.CONSTANT_DB_HR.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ err = gormDb.Where(whereMap).Find(&countAry).Error
+ return
+}
+
+// 删除内容
+func (cont *OrgChangeRecord) DelCont(whereMap interface{}) (err error) {
+ err = overall.CONSTANT_DB_HR.Where(whereMap).Delete(&cont).Error
+ return
+}
diff --git a/models/org_cont_type.go b/models/org_cont_type.go
index ea7e853..76b77e2 100644
--- a/models/org_cont_type.go
+++ b/models/org_cont_type.go
@@ -1,6 +1,9 @@
package models
import (
+ "encoding/json"
+ "fmt"
+ "hr_server/grocerystore"
"hr_server/overall"
"strings"
)
@@ -32,3 +35,23 @@ func (cont *OrgContType) GetCont(whereMap interface{}, field ...string) (err err
err = gormDb.First(&cont).Error
return
}
+
+// 根据ID获取行政组织内容
+func (cont *OrgContType) RedisCont(orgId int64) (err error) {
+ redisFileKey := fmt.Sprintf("orgType:Info:%v_%v", orgId, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias)
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) //设定redis库
+ isTrue, tokens := redisClient.Get(redisFileKey)
+ if isTrue && tokens != "" {
+ err = json.Unmarshal([]byte(tokens), &cont)
+ return
+ } else {
+ var jsonStr []byte
+ err = overall.CONSTANT_DB_HR.Model(&cont).Where("`id` = ?", orgId).First(&cont).Error
+ if err == nil {
+ redisClient.SetRedisTime(0)
+ jsonStr, err = json.Marshal(cont)
+ redisClient.Set(redisFileKey, string(jsonStr))
+ }
+ }
+ return
+}
diff --git a/models/personarchives.go b/models/personarchives.go
index bf36345..8200937 100644
--- a/models/personarchives.go
+++ b/models/personarchives.go
@@ -1,6 +1,9 @@
package models
import (
+ "encoding/json"
+ "fmt"
+ "hr_server/grocerystore"
"hr_server/overall"
"strings"
)
@@ -41,6 +44,7 @@ type PersonArchives struct {
ResponsibleDepartmentJson string `json:"responsibledepartmentjson" gorm:"column:responsible_department_json;type:longtext;default:'';not null;comment:负责的行政组织json"`
WorkSection int64 `json:"workSection" gorm:"column:work_section;type:bigint(20) unsigned;default:0;not null;comment:工段"`
IsShowTrue int64 `json:"isShowTrue" gorm:"column:is_show_true;type:int(5) unsigned;default:2;not null;comment:信息是否锁定`
+ ExcelTemplate int64 `json:"excelTemplate" gorm:"column:excel_template;type:bigint(20) unsigned;default:0;not null;comment:信息来源于哪个模板`
}
func (PersonArchives *PersonArchives) TableName() string {
@@ -64,3 +68,31 @@ func (cont *PersonArchives) GetCont(whereMap interface{}, field ...string) (err
err = gormDb.First(&cont).Error
return
}
+
+// 根据ID获取行政组织内容
+func (cont *PersonArchives) RedisCont(key string, class int) (err error) {
+ redisFileKey := fmt.Sprintf("UserDossier:Info:%v_%v", key, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias)
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) //设定redis库
+ isTrue, tokens := redisClient.Get(redisFileKey)
+ if isTrue && tokens != "" {
+ err = json.Unmarshal([]byte(tokens), &cont)
+ return
+ } else {
+ var jsonStr []byte
+ switch class {
+ case 1:
+ err = overall.CONSTANT_DB_HR.Model(&cont).Where("`number` = ?", key).First(&cont).Error
+ case 2:
+ err = overall.CONSTANT_DB_HR.Model(&cont).Where("`key` = ?", key).First(&cont).Error
+ default:
+ err = overall.CONSTANT_DB_HR.Model(&cont).Where("`id` = ?", key).First(&cont).Error
+ }
+
+ if err == nil {
+ redisClient.SetRedisTime(0)
+ jsonStr, err = json.Marshal(cont)
+ redisClient.Set(redisFileKey, string(jsonStr))
+ }
+ }
+ return
+}
diff --git a/models/personnel_education.go b/models/personnel_education.go
index df3bc2d..5424f9c 100644
--- a/models/personnel_education.go
+++ b/models/personnel_education.go
@@ -26,6 +26,9 @@ type PersonnelEducation struct {
EducationType int `json:"educationType" gorm:"column:education_type;type:tinyint(1) unsigned;default:1;not null;comment:学历类型(1、全日制统招学历;2、成人高考学历;3、自学考试学历;4:开放大学学历;5:网络教育学历)"`
CollegeFaction string `json:"collegeFaction" gorm:"column:collegeFaction;type:varchar(30) unsigned;comment:所属院系"`
SchoolType int `json:"schoolType" gorm:"column:schoolType;type:tinyint(1) unsigned;default:1;not null;comment:学历类型(院校类型(1、私立中学;2:公立中学;3:高职院校;4:民办专科院校;5:公办专科院校;6:民办本科院校;7:公办本科院校;8:”211“工程院校;9:”985“工程院校;10:双一流院校))"`
+ XueLi string `json:"xueLi" gorm:"column:xueLi;type:varchar(255) unsigned;comment:学历"`
+ XueLiLeixing string `json:"xueLiLeixing" gorm:"column:xueLiLeixing;type:varchar(255) unsigned;comment:学历类型"`
+ YuanXiaoLeiXing string `json:"yuanXiaoLeiXing" gorm:"column:yuanXiaoLeiXing;type:varchar(255) unsigned;comment:院校类型"`
}
func (PersonnelEducation *PersonnelEducation) TableName() string {
diff --git a/models/perstatisticsevaluators.go b/models/perstatisticsevaluators.go
new file mode 100644
index 0000000..df0f547
--- /dev/null
+++ b/models/perstatisticsevaluators.go
@@ -0,0 +1,62 @@
+package models
+
+import (
+ "hr_server/overall"
+ "strings"
+)
+
+// 行政组织变更记录
+type PerstatiSticsevaluators struct {
+ Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:ID"`
+ Userkey int64 `json:"userkey" gorm:"primaryKey;column:userkey;type:bigint(20) unsigned;not null;comment:员工唯一识别符;"`
+ TimeYear int64 `json:"timeYear" gorm:"column:timeYear;type:bigint(20) unsigned;default:0;not null;comment:考评年分"`
+ Levels int64 `json:"levels" gorm:"column:levels;type:int(1) unsigned;default:1;not null;comment:考评分类"`
+ Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"`
+ EvaluationItems string `json:"evaluationItems" gorm:"column:evaluationItems;type:varchar(255) ;comment:评估项"`
+ Comment string `json:"v" gorm:"column:comment;type:mediumtext;comment:领导评语"`
+}
+
+func (PerstatiSticsevaluators *PerstatiSticsevaluators) TableName() string {
+ return "perstatisticsevaluators"
+}
+
+// 编辑内容
+func (cont *PerstatiSticsevaluators) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
+ err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error
+ return
+}
+
+// 获取内容
+func (cont *PerstatiSticsevaluators) GetCont(whereMap interface{}, field ...string) (err error) {
+ gormDb := overall.CONSTANT_DB_HR.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ gormDb = gormDb.Where(whereMap)
+ err = gormDb.First(&cont).Error
+ return
+}
+
+// 根据条件获取总数
+func (cont *PerstatiSticsevaluators) CountCont(whereMap interface{}) (countId int64) {
+ overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId)
+ return
+}
+
+// 读取全部信息
+func (cont *PerstatiSticsevaluators) ContMap(whereMap interface{}, field ...string) (countAry []PerstatiSticsevaluators, err error) {
+ gormDb := overall.CONSTANT_DB_HR.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ err = gormDb.Where(whereMap).Find(&countAry).Error
+ return
+}
+
+// 删除内容
+func (cont *PerstatiSticsevaluators) DelCont(whereMap interface{}) (err error) {
+ err = overall.CONSTANT_DB_HR.Where(whereMap).Delete(&cont).Error
+ return
+}
diff --git a/models/rewards_penalties.go b/models/rewards_penalties.go
index f9207f2..f46b7a6 100644
--- a/models/rewards_penalties.go
+++ b/models/rewards_penalties.go
@@ -7,17 +7,18 @@ import (
// 证书
type RewardsPenalties struct {
- Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:ID"`
- Title string `json:"title" gorm:"column:title;type:varchar(30) unsigned;not null;comment:奖励/处分项目"`
- UserKey int64 `json:"userkey" gorm:"column:userkey;type:bigint(20) unsigned;default:0;not null;comment:获得人员"`
- Types int `json:"types" gorm:"column:types;type:tinyint(1) unsigned;default:1;not null;comment:类型(1:奖励;2:处分;)`
- State int `json:"state" gorm:"column:state;type:tinyint(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)`
- IssuingUnit string `json:"issuingUnit" gorm:"column:issuing_unit;type:varchar(255) unsigned;default:'';not null;comment:颁发单位"`
- TimeData int64 `json:"timedata" gorm:"column:timedata;type:bigint(20) unsigned;default:0;not null;comment:获得时间"`
- Years int `json:"years" gorm:"column:years;type:int(7) unsigned;default:0;not null;comment:年"`
- Months int `json:"months" gorm:"column:months;type:int(7) unsigned;default:0;not null;comment:月"`
- Level int `json:"level" gorm:"column:level;type:int(7) unsigned;default:0;not null;comment:奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)"`
- RewPunClass int `json:"rewPunClass" gorm:"column:rewPunClass;type:int(7) unsigned;default:0;not null;comment:奖惩类型(1:年终评优;2:表扬;3:嘉奖;4:记功;5:记大功;6:特别奖励;7:批评;8:警告;9:记过;10:记大过;11:降级;12:留用察看;13:开除)"`
+ Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:ID"`
+ Title string `json:"title" gorm:"column:title;type:varchar(30) unsigned;not null;comment:奖励/处分项目"`
+ UserKey int64 `json:"userkey" gorm:"column:userkey;type:bigint(20) unsigned;default:0;not null;comment:获得人员"`
+ Types int `json:"types" gorm:"column:types;type:tinyint(1) unsigned;default:1;not null;comment:类型(1:奖励;2:处分;)`
+ State int `json:"state" gorm:"column:state;type:tinyint(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)`
+ IssuingUnit string `json:"issuingUnit" gorm:"column:issuing_unit;type:varchar(255) unsigned;default:'';not null;comment:颁发单位"`
+ TimeData int64 `json:"timedata" gorm:"column:timedata;type:bigint(20) unsigned;default:0;not null;comment:获得时间"`
+ Years int `json:"years" gorm:"column:years;type:int(7) unsigned;default:0;not null;comment:年"`
+ Months int `json:"months" gorm:"column:months;type:int(7) unsigned;default:0;not null;comment:月"`
+ Level int `json:"level" gorm:"column:level;type:int(7) unsigned;default:0;not null;comment:奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)"`
+ RewPunClass int `json:"rewPunClass" gorm:"column:rewPunClass;type:int(7) unsigned;default:0;not null;comment:奖惩类型(1:年终评优;2:表扬;3:嘉奖;4:记功;5:记大功;6:特别奖励;7:批评;8:警告;9:记过;10:记大过;11:降级;12:留用察看;13:开除)"`
+ RewPunNumber string `json:"rewPunNumber" gorm:"column:rewPunNumber;type:varchar(255) unsigned;not null;comment:奖惩文号"`
}
func (RewardsPenalties *RewardsPenalties) TableName() string {
diff --git a/models/talentInventory.go b/models/talentInventory.go
new file mode 100644
index 0000000..4f080b1
--- /dev/null
+++ b/models/talentInventory.go
@@ -0,0 +1,53 @@
+package models
+
+import (
+ "hr_server/overall"
+ "strings"
+)
+
+// 班组
+type TalentInventory struct {
+ Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"`
+ UserKey int64 `json:"userKey" gorm:"column:userKey;type:bigint(20) unsigned;default:0;not null;comment:归属人员key"`
+ UserTypes string `json:"userTypes" gorm:"column:userTypes;type:mediumtext;default null;comment:人员类型"`
+ CareerPlanning string `json:"careerPlanning" gorm:"column:careerPlanning;type:mediumtext;default null;comment:职业生涯规划"`
+ PersonalAssistance string `json:"personalAssistance" gorm:"column:personalAssistance;type:mediumtext;default null;comment:个人期望从组织获得的帮助"`
+ LastYearAssessmentLevel string `json:"lastYearAssessmentLevel" gorm:"column:lastYearAssessmentLevel;type:varchar(50) unsigned;default:'';not null;comment:上一年绩效成绩"`
+ Years int `json:"years" gorm:"column:years;type:int(5) unsigned;default:0;not null;comment:年份"`
+ Times int64 `json:"times" gorm:"column:times;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"`
+}
+
+func (TalentInventory *TalentInventory) TableName() string {
+ return "talentInventory"
+}
+
+// 编辑班组内容
+func (TalentInventory *TalentInventory) EiteTalentInventoryCont(whereMap map[string]interface{}, saveData map[string]interface{}) (err error) {
+ err = overall.CONSTANT_DB_HR.Model(&TalentInventory).Where(whereMap).Updates(saveData).Error
+ return
+}
+
+// 获取详细内容
+func (cont *TalentInventory) GetCont(whereMap interface{}, field ...string) (err error) {
+ gormDb := overall.CONSTANT_DB_HR.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ gormDb = gormDb.Where(whereMap)
+ err = gormDb.First(&cont).Error
+ return
+}
+
+// 根据条件获取总数
+func (cont *TalentInventory) CountCont(whereMap interface{}) (countId int64) {
+ overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId)
+ return
+}
+
+// 删除内容
+func (cont *TalentInventory) DelCont(whereMap interface{}) (err error) {
+
+ err = overall.CONSTANT_DB_HR.Where(whereMap).Delete(&cont).Error
+ return
+}
diff --git a/models/userOrg.go b/models/userOrg.go
new file mode 100644
index 0000000..01cb01d
--- /dev/null
+++ b/models/userOrg.go
@@ -0,0 +1,63 @@
+package models
+
+import (
+ "hr_server/overall"
+ "strings"
+)
+
+type UserOrg struct {
+ Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"`
+ Userkey int64 `json:"userKey" gorm:"primaryKey;column:userKey;type:bigint(20) unsigned;not null;comment:员工唯一识别符;"`
+ Company int64 `json:"company" gorm:"primaryKey;column:company;type:bigint(20) unsigned;not null;comment:所属公司;"`
+ Orgid int64 `json:"orgid" gorm:"primaryKey;column:orgid;type:bigint(20) unsigned;not null;comment:行政组织ID;"`
+ Position int64 `json:"position" gorm:"primaryKey;column:position;type:bigint(20) unsigned;not null;comment:职位;"`
+ TeamsId int64 `json:"teamsId" gorm:"primaryKey;column:teamsId;type:bigint(20) unsigned;not null;comment:班组Id;"`
+ StartTime int64 `json:"startTime" gorm:"primaryKey;column:startTime;type:bigint(20) unsigned;not null;comment:任职开始时间;"`
+ AssignType int `json:"assignType" gorm:"column:assignType;type:int(1) unsigned;default:50;not null;comment:1:主职;2:兼职"`
+ Time int64 `json:"time" gorm:"primaryKey;column:time;type:bigint(20) unsigned;not null;comment:编辑时间;"`
+}
+
+func (UserOrg *UserOrg) TableName() string {
+ return "userOrg"
+}
+
+// 编辑内容
+func (cont *UserOrg) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
+ err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error
+ return
+}
+
+// 获取内容
+func (cont *UserOrg) GetCont(whereMap interface{}, field ...string) (err error) {
+ gormDb := overall.CONSTANT_DB_HR.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ gormDb = gormDb.Where(whereMap)
+ err = gormDb.First(&cont).Error
+ return
+}
+
+// 根据条件获取总数
+func (cont *UserOrg) CountCont(whereMap interface{}) (countId int64) {
+ overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId)
+ return
+}
+
+// 读取全部信息
+func (cont *UserOrg) ContMap(whereMap interface{}, field ...string) (countAry []UserOrg, err error) {
+ gormDb := overall.CONSTANT_DB_HR.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ err = gormDb.Where(whereMap).Find(&countAry).Error
+ return
+}
+
+// 删除内容
+func (cont *UserOrg) DelCont(whereMap interface{}) (err error) {
+ err = overall.CONSTANT_DB_HR.Where(whereMap).Delete(&cont).Error
+ return
+}
diff --git a/models/work_history.go b/models/work_history.go
index d1a5544..9447127 100644
--- a/models/work_history.go
+++ b/models/work_history.go
@@ -22,7 +22,7 @@ type WorkHistory struct {
State int `json:"state" gorm:"column:state;type:int(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)"`
WorkCont string `json:"workcont" gorm:"column:workcont;type:longtext ;comment:工作内容"`
SuperiorPosition string `json:"superiorPosition" gorm:"column:superior_position;type:varchar(255) unsigned;default:'';comment:上级职务"`
- MinionNumber int `json:"minion_number" gorm:"column:minion_number;type:int(5) unsigned;default:1;not null;comment:下属人数"`
+ MinionNumber int `json:"minion_number" gorm:"column:minion_number;type:int(5) unsigned;default:0;not null;comment:下属人数"`
CompanyNature string `json:"companyNature" gorm:"column:companyNature;type:varchar(255) unsigned;default:'';comment:公司性质"`
Industry string `json:"industry" gorm:"column:industry;type:varchar(255) unsigned;default:'';comment:所属行业"`
}
diff --git a/models/workgroup/genesis.go b/models/workgroup/genesis.go
index 8f7b15a..32cdf72 100644
--- a/models/workgroup/genesis.go
+++ b/models/workgroup/genesis.go
@@ -13,6 +13,7 @@ type Genesis struct {
Rules int64 `gorm:"column:rules" json:"rules"` //type:int64 comment:锚定轮询规则起点
StartTime int64 `gorm:"column:start_time" json:"starttime"` //type:int64 comment:锚定历史原点
Time int64 `gorm:"column:time" json:"time"` //type:int64
+ OrgId int64 `gorm:"column:orgId" json:"orgId"`
}
func (Genesis *Genesis) TableName() string {
@@ -22,6 +23,7 @@ func (Genesis *Genesis) TableName() string {
// 编辑内容
func (cont *Genesis) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error
+ err = overall.CONSTANT_HRSERVER_DATABASE.Model(&cont).Where(whereMap).Updates(saveData).Error
return
}
@@ -57,5 +59,6 @@ func (cont *Genesis) ContMap(whereMap interface{}, field ...string) (countAry []
// 删除内容
func (cont *Genesis) DelCont(whereMap interface{}) (err error) {
err = overall.CONSTANT_DB_HR.Where(whereMap).Delete(&cont).Error
+ err = overall.CONSTANT_HRSERVER_DATABASE.Where(whereMap).Delete(&cont).Error
return
}
diff --git a/models/workgroup/teams_rules.go b/models/workgroup/teams_rules.go
new file mode 100644
index 0000000..f540dd0
--- /dev/null
+++ b/models/workgroup/teams_rules.go
@@ -0,0 +1,66 @@
+package workgroup
+
+import (
+ "hr_server/overall"
+ "strings"
+)
+
+// 排班记录
+type TeamsRules struct {
+ Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;index"`
+ RuleTypeId int64 `json:"ruleTypeId" gorm:"column:ruleTypeId;type:bigint(20) unsigned;default:0;not null;comment:排班制度ID"`
+ RuleTypeName string `json:"ruleTypeName" gorm:"column:ruleTypeName;type:varchar(255);comment:制度名称"`
+ Cycle int `json:"cycle" gorm:"column:cycle;type:int(4) unsigned;default:1;not null;comment:周期类型"`
+ TeamsId int64 `json:"teamsId" gorm:"column:teamsId;type:bigint(20) unsigned;default:0;not null;comment:班组Id"`
+ TeamsName string `json:"teamsName" gorm:"column:teamsName;type:varchar(255);comment:班组姓名"`
+ CycleSort int64 `json:"cycleSort" gorm:"column:cycleSort;type:int(4) unsigned;default:1;not null;comment:周期排序"`
+ CycleName string `json:"cycleName" gorm:"column:cycleName;type:varchar(255);comment:周期名称"`
+ CycleWorkTime int64 `json:"cycleWorkTime" gorm:"column:cycleWorkTime;type:bigint(20) unsigned;default:0;not null;comment:工作时间段Id"`
+ CycleWorkName string `json:"cycleWorkName" gorm:"column:cycleWorkName;type:varchar(255);comment:工作时间段名称"`
+ Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"`
+}
+
+func (TeamsRules *TeamsRules) TableName() string {
+ return "teams_rules"
+}
+
+// 编辑内容
+func (cont *TeamsRules) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
+ err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error
+ return
+}
+
+// 获取内容
+func (cont *TeamsRules) GetCont(whereMap interface{}, field ...string) (err error) {
+ gormDb := overall.CONSTANT_DB_HR.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ gormDb = gormDb.Where(whereMap)
+ err = gormDb.First(&cont).Error
+ return
+}
+
+// 根据条件获取总数
+func (cont *TeamsRules) CountCont(whereMap interface{}) (countId int64) {
+ overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId)
+ return
+}
+
+// 读取全部信息
+func (cont *TeamsRules) ContMap(whereMap interface{}, field ...string) (countAry []TeamsRules, err error) {
+ gormDb := overall.CONSTANT_DB_HR.Model(&cont)
+ if len(field) > 0 {
+ fieldStr := strings.Join(field, ",")
+ gormDb = gormDb.Select(fieldStr)
+ }
+ err = gormDb.Where(whereMap).Find(&countAry).Error
+ return
+}
+
+// 删除内容
+func (cont *TeamsRules) DelCont(whereMap interface{}) (err error) {
+ err = overall.CONSTANT_DB_HR.Where(whereMap).Delete(&cont).Error
+ return
+}
diff --git a/models/workgroup/working_time_period.go b/models/workgroup/working_time_period.go
index cd960ac..5be4cd2 100644
--- a/models/workgroup/working_time_period.go
+++ b/models/workgroup/working_time_period.go
@@ -14,6 +14,7 @@ type WorkingTimePeriod struct {
StartTime string `gorm:"column:start_time" json:"starttime"` //type:string comment:开始时间 version:2022-11-13 16:59
EndTime string `gorm:"column:end_time" json:"endtime"` //type:string comment:结束时间 version:2022-11-13 16:59
State int `gorm:"column:state" json:"state"`
+ Sort int `gorm:"column:sort" json:"sort"` //type:*int comment:排序
}
func (WorkingTimePeriod *WorkingTimePeriod) TableName() string {
diff --git a/overall/app_config_const.go b/overall/app_config_const.go
index e8c6a51..941519b 100644
--- a/overall/app_config_const.go
+++ b/overall/app_config_const.go
@@ -18,6 +18,9 @@ var (
CONSTANT_DB_HR_Jin *gorm.DB //微信数据库
CONSTANT_Personality_Color *gorm.DB //性格色彩
CONSTANT_Hr_Server *gorm.DB //性格色彩
+ CONSTANT_HRSERVER_DATABASE *gorm.DB //性格色彩
+ CONSTANT_DB_CustomerForm *gorm.DB //自定义表单数据库
+ CONSTANT_DB_AppPlatform *gorm.DB //应用平台据库
//Redis
CONSTANT_REDIS0 *redis.Client
CONSTANT_REDIS1 *redis.Client
diff --git a/overall/app_constant.go b/overall/app_constant.go
index 5a02c5c..5a0e60a 100644
--- a/overall/app_constant.go
+++ b/overall/app_constant.go
@@ -8,5 +8,6 @@ var (
EmployeeStatusIng = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)
EmployeeStatusOld = []int{11, 12, 13, 14} //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)
// DockingKingdeeUrl = "http://36.134.44.40:18888"
- DockingKingdeeUrl = "http://36.133.124.113:18888"
+ // DockingKingdeeUrl = "http://36.133.124.113:18888" //测试地址
+ DockingKingdeeUrl = "http://36.133.124.113:18888" //正式地址
)
diff --git a/overall/overallhandle/format_output.go b/overall/overallhandle/format_output.go
index 2376e89..8cbb518 100644
--- a/overall/overallhandle/format_output.go
+++ b/overall/overallhandle/format_output.go
@@ -25,6 +25,11 @@ func Result(code int, data interface{}, c *gin.Context, msgAry ...string) {
c.JSON(http.StatusOK, Reply{code, msg, data}) //输出json格式数据
}
+// 格式化输出
+func ResultInterface(data interface{}, c *gin.Context) {
+ c.JSON(http.StatusOK, data) //输出json格式数据
+}
+
//列表输出标准格式
/*
@total 总数
@@ -33,13 +38,20 @@ func Result(code int, data interface{}, c *gin.Context, msgAry ...string) {
@pageSize 每页显示数量
@data 返回数据
*/
-func ResultList(code, page, pageSize int, total, count int64, data interface{}, c *gin.Context) (printMap map[string]interface{}) {
+func ResultList(code, page, pageSize int, total, count int64, data interface{}, c *gin.Context, expand ...map[string]interface{}) (printMap map[string]interface{}) {
outMap := MapOut()
outMap["count"] = count
outMap["total"] = total
outMap["page"] = page
outMap["pageSize"] = pageSize
outMap["list"] = data
+ if len(expand) > 0 {
+ for _, v := range expand {
+ for mi, mv := range v {
+ outMap[mi] = mv
+ }
+ }
+ }
printMap = outMap
Result(code, outMap, c)
return
diff --git a/overall/overallhandle/log.go b/overall/overallhandle/log.go
index cbcf0cf..3218494 100644
--- a/overall/overallhandle/log.go
+++ b/overall/overallhandle/log.go
@@ -30,7 +30,7 @@ func PathExists(path string) bool {
return true
}
-//写日志
+// 写日志
func WriteLog(class string, errmsg ...any) {
// var ErrorLog *log.Logger
fileName := fmt.Sprintf("./%v/%v", overall.CONSTANT_CONFIG.Logsetup.Path, UnixTimeToDay(time.Now().Unix(), 21))
diff --git a/overall/overallhandle/overall_handle.go b/overall/overallhandle/overall_handle.go
index 1b8f7bc..d83fa87 100644
--- a/overall/overallhandle/overall_handle.go
+++ b/overall/overallhandle/overall_handle.go
@@ -6,6 +6,7 @@ import (
"crypto/rand"
"crypto/sha1"
"encoding/hex"
+ "encoding/json"
"errors"
"fmt"
"hr_server/grocerystore"
@@ -22,6 +23,7 @@ import (
"time"
"github.com/mozillazg/go-pinyin"
+ "gorm.io/gorm"
)
// 全局函数处理
@@ -233,6 +235,59 @@ func ChineseFirstWordCapitalize(wordStr string) (firstWord string) {
return
}
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-24 08:48:33
+@ 功能: 字符串转拼音
+@ 参数
+
+ #Title string `json:"title"` //中文语句
+ #Types int `json:"types"` //转换风格 0:普通风格,不带声调(默认风格)。如: zhong guo;1:声调风格1,拼音声调在韵母第一个字母上。如: zhōng guó;2:声调风格2,即拼音声调在各个韵母之后,用数字 [1-4] 进行表示。如: zho1ng guo2;3:声母风格,只返回各个拼音的声母部分。如: zh g 。注意:不是所有的拼音都有声母;4:首字母风格,只返回拼音的首字母部分。如: z g;5: 韵母风格,只返回各个拼音的韵母部分,不带声调。如: ong uo;6:韵母风格1,带声调,声调在韵母第一个字母上。如: ōng uó;7:韵母风格2,带声调,声调在各个韵母之后,用数字 [1-4] 进行表示。如: o1ng uo2;8:声调风格3,即拼音声调在各个拼音之后,用数字 [1-4] 进行表示。如: zhong1 guo2;9:韵母风格3,带声调,声调在各个拼音之后,用数字 [1-4] 进行表示。如: ong1 uo2;
+ #Connector string `json:"connector"` // Join 所用的分隔符
+ #FormJson string `json:"formJson"` //当前表单内容
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func StringToPinYin(types int, title, connector, formJson string) string {
+ pyObject := pinyin.NewArgs()
+ switch types {
+ case 1:
+ pyObject.Style = pinyin.Tone
+ case 2:
+ pyObject.Style = pinyin.Tone2
+ case 3:
+ pyObject.Style = pinyin.Initials
+ case 4:
+ pyObject.Style = pinyin.FirstLetter
+ case 5:
+ pyObject.Style = pinyin.Finals
+ case 6:
+ pyObject.Style = pinyin.FinalsTone
+ case 7:
+ pyObject.Style = pinyin.FinalsTone2
+ case 8:
+ pyObject.Style = pinyin.Tone3
+ case 9:
+ pyObject.Style = pinyin.FinalsTone3
+ default:
+ pyObject.Style = pinyin.Normal
+ }
+ pyObject.Separator = connector
+ str := pinyin.Slug(title, pyObject)
+
+ if len(str) > 25 {
+ str = StringToPinYin(4, title, connector, formJson)
+ }
+ return str
+}
+
//获取行政组织首字母
/*
@govName 全称
@@ -930,6 +985,8 @@ func (a *AllSunList[int64]) GetAllSunOrg(superior int64) (err error) {
return
}
+// func (a *AllSunList[int64])GetAllParentOrg
+
// 获取行政组织所有上级
func (a *AllSunList[int64]) GetAllFatherOrg(superior int64) (err error) {
var orgAry []models.AdministrativeOrganization
@@ -1146,6 +1203,12 @@ func HestacademicdegreeToInt(hir string) int {
}
}
+// IsLeapYear 函数用于判断某一年是否为闰年
+func IsLeapYear(year int) bool {
+ // 普通年份能被 4 整除但不能被 100 整除,或者世纪年份能被 400 整除
+ return (year%4 == 0 && year%100 != 0) || (year%400 == 0)
+}
+
// 根据字符串组合时间
//补全时间
/*
@@ -1153,6 +1216,7 @@ func HestacademicdegreeToInt(hir string) int {
*/
func (d *DateTimeTotimes) BaisStrToTime(dateTime string) {
timeStrAry := strings.Split(dateTime, "-")
+ // fmt.Printf("根据字符串组合时间:%v\n%v\n%v\n%v\n", dateTime, timeStrAry, len(timeStrAry), dateTime)
switch len(timeStrAry) {
case 1:
dateTime = fmt.Sprintf("%v-01-01 12:00:00", dateTime)
@@ -1221,13 +1285,32 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) {
// if len(timeStrAry[2]) < 2 {
// dayStr = fmt.Sprintf("0%v", timeStrAry[2])
// }
- dateTime = fmt.Sprintf("%v-%v-%v", timeStrAry[0], monthStr, dayStr)
+ monthInt, _ := strconv.Atoi(monthStr)
+ if monthInt == 2 {
+ yearInt, _ := strconv.Atoi(timeStrAry[0])
+ dayInt, _ := strconv.Atoi(dayStr)
+ if IsLeapYear(yearInt) {
+
+ if dayInt > 29 {
+ dayStr = "29"
+ }
+ } else {
+ if dayInt > 28 {
+ dayStr = "28"
+ }
+ }
+ }
+ dateTime = fmt.Sprintf("%v-%v-%v", timeStrAry[0], monthStr, dayStr)
+ // fmt.Printf("monthInt:%v---1--->%v\n", monthInt, dateTime)
default:
}
// fmt.Printf("dateTime:%v---1--->%v\n", dateTime, len(dateTime))
orgTime, orgTimeErr := DateToTimeStamp(fmt.Sprintf("%v-01-01 12:00:00", dateTime))
d.Time = dateTime
+
+ // fmt.Printf("dateTime:%v---2--->%v\n", orgTime, orgTimeErr)
+
if orgTimeErr {
d.AllTime = orgTime
d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10)
@@ -1241,6 +1324,7 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) {
} else {
orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v-01 12:00:00", dateTime))
+ // fmt.Printf("dateTime:%v---3--->%v\n", orgTime, orgTimeErr)
if orgTimeErr {
d.AllTime = orgTime
d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10)
@@ -1252,9 +1336,193 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) {
d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10)
d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10)
- fmt.Printf("dateTime:%v---2--->%v--->%v\n", orgTime, d.AllTime, d.Quarter)
+ // fmt.Printf("dateTime:%v---4--->%v--->%v\n", orgTime, d.AllTime, d.Quarter)
} else {
orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v 12:00:00", dateTime))
+ // fmt.Printf("dateTime:%v---5--->%v--->%v\n", orgTime, orgTimeErr, fmt.Sprintf("%v 12:00:00", dateTime))
+ if orgTimeErr {
+ d.AllTime = orgTime
+ d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10)
+ d.Quarter = strconv.FormatInt(ComputingTime(orgTime, 2), 10)
+ d.Months = strconv.FormatInt(ComputingTime(orgTime, 3), 10)
+ d.Week = strconv.FormatInt(ComputingTime(orgTime, 4), 10)
+ d.Days = strconv.FormatInt(ComputingTime(orgTime, 5), 10)
+ d.Hours = strconv.FormatInt(ComputingTime(orgTime, 7), 10)
+ d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10)
+ d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10)
+ } else {
+ orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v:00:00", dateTime))
+ // fmt.Printf("dateTime:%v---6--->%v\n", orgTime, orgTimeErr)
+ if orgTimeErr {
+ d.AllTime = orgTime
+ d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10)
+ d.Quarter = strconv.FormatInt(ComputingTime(orgTime, 2), 10)
+ d.Months = strconv.FormatInt(ComputingTime(orgTime, 3), 10)
+ d.Week = strconv.FormatInt(ComputingTime(orgTime, 4), 10)
+ d.Days = strconv.FormatInt(ComputingTime(orgTime, 5), 10)
+ d.Hours = strconv.FormatInt(ComputingTime(orgTime, 7), 10)
+ d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10)
+ d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10)
+ } else {
+ orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v:00", dateTime))
+ // fmt.Printf("dateTime:%v---7--->%v\n", orgTime, orgTimeErr)
+ if orgTimeErr {
+ d.AllTime = orgTime
+ d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10)
+ d.Quarter = strconv.FormatInt(ComputingTime(orgTime, 2), 10)
+ d.Months = strconv.FormatInt(ComputingTime(orgTime, 3), 10)
+ d.Week = strconv.FormatInt(ComputingTime(orgTime, 4), 10)
+ d.Days = strconv.FormatInt(ComputingTime(orgTime, 5), 10)
+ d.Hours = strconv.FormatInt(ComputingTime(orgTime, 7), 10)
+ d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10)
+ d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10)
+ } else {
+ orgTime, orgTimeErr = DateToTimeStamp(dateTime)
+ // fmt.Printf("dateTime:%v---8--->%v\n", orgTime, orgTimeErr)
+ if orgTimeErr {
+ d.AllTime = orgTime
+ d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10)
+ d.Quarter = strconv.FormatInt(ComputingTime(orgTime, 2), 10)
+ d.Months = strconv.FormatInt(ComputingTime(orgTime, 3), 10)
+ d.Week = strconv.FormatInt(ComputingTime(orgTime, 4), 10)
+ d.Days = strconv.FormatInt(ComputingTime(orgTime, 5), 10)
+ d.Hours = strconv.FormatInt(ComputingTime(orgTime, 7), 10)
+ d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10)
+ d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10)
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+func (d *DateTimeTotimes) BaisStrToTimeLing(dateTime string) {
+ timeStrAry := strings.Split(dateTime, "-")
+ // fmt.Printf("根据字符串组合时间:%v\n%v\n%v\n%v\n", dateTime, timeStrAry, len(timeStrAry), dateTime)
+ switch len(timeStrAry) {
+ case 1:
+ dateTime = fmt.Sprintf("%v-01-01 00:00:00", dateTime)
+ case 2:
+ if len(timeStrAry[1]) < 2 {
+ dateTime = fmt.Sprintf("%v-0%v-01 00:00:00", timeStrAry[0], timeStrAry[1])
+ }
+ case 3:
+ monthStr := timeStrAry[1]
+ if len(timeStrAry[1]) < 2 {
+ monthStr = fmt.Sprintf("0%v", timeStrAry[1])
+ }
+ dayAry := strings.Split(timeStrAry[2], " ")
+ // fmt.Printf("dayAry:%v------>%v\n", dayAry, len(dayAry))
+ dayStr := dayAry[0]
+ if len(dayAry[0]) < 2 {
+ dayStr = fmt.Sprintf("0%v", dayAry[0])
+ }
+ if len(dayAry) > 1 {
+ // fmt.Printf("dayAry[1]:%v------>%v\n", dayAry[1], len(dayAry[1]))
+ if len(dayAry[1]) > 0 {
+ Hours := "00"
+ minutes := "00"
+ seconds := "00"
+ hisAry := strings.Split(dayAry[1], ":")
+ switch len(hisAry) {
+ case 1:
+ if len(hisAry[0]) < 2 {
+ Hours = fmt.Sprintf("0%v", hisAry[0])
+ } else {
+ Hours = hisAry[0]
+ }
+ case 2:
+ if len(hisAry[0]) < 2 {
+ Hours = fmt.Sprintf("0%v", hisAry[0])
+ } else {
+ Hours = hisAry[0]
+ }
+ if len(hisAry[1]) < 2 {
+ minutes = fmt.Sprintf("0%v", hisAry[1])
+ } else {
+ minutes = hisAry[1]
+ }
+ case 3:
+ if len(hisAry[0]) < 2 {
+ Hours = fmt.Sprintf("0%v", hisAry[0])
+ } else {
+ Hours = hisAry[0]
+ }
+ if len(hisAry[1]) < 2 {
+ minutes = fmt.Sprintf("0%v", hisAry[1])
+ } else {
+ minutes = hisAry[1]
+ }
+ if len(hisAry[2]) < 2 {
+ seconds = fmt.Sprintf("0%v", hisAry[2])
+ } else {
+ seconds = hisAry[2]
+ }
+ default:
+ }
+ dayStr = fmt.Sprintf("%v %v:%v:%v", dayStr, Hours, minutes, seconds)
+ }
+ }
+ // dayStr := timeStrAry[2]
+ // if len(timeStrAry[2]) < 2 {
+ // dayStr = fmt.Sprintf("0%v", timeStrAry[2])
+ // }
+ monthInt, _ := strconv.Atoi(monthStr)
+
+ if monthInt == 2 {
+ yearInt, _ := strconv.Atoi(timeStrAry[0])
+ dayInt, _ := strconv.Atoi(dayStr)
+ if IsLeapYear(yearInt) {
+
+ if dayInt > 29 {
+ dayStr = "29"
+ }
+ } else {
+ if dayInt > 28 {
+ dayStr = "28"
+ }
+ }
+ }
+ dateTime = fmt.Sprintf("%v-%v-%v", timeStrAry[0], monthStr, dayStr)
+ // fmt.Printf("monthInt:%v---1--->%v\n", monthInt, dateTime)
+ default:
+ }
+ // fmt.Printf("dateTime:%v---1--->%v\n", dateTime, len(dateTime))
+ orgTime, orgTimeErr := DateToTimeStamp(fmt.Sprintf("%v-01-01 00:00:00", dateTime))
+ d.Time = dateTime
+
+ // fmt.Printf("dateTime:%v---2--->%v\n", orgTime, orgTimeErr)
+
+ if orgTimeErr {
+ d.AllTime = orgTime
+ d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10)
+ d.Quarter = strconv.FormatInt(ComputingTime(orgTime, 2), 10)
+ d.Months = strconv.FormatInt(ComputingTime(orgTime, 3), 10)
+ d.Week = strconv.FormatInt(ComputingTime(orgTime, 4), 10)
+ d.Days = strconv.FormatInt(ComputingTime(orgTime, 5), 10)
+ d.Hours = strconv.FormatInt(ComputingTime(orgTime, 7), 10)
+ d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10)
+ d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10)
+ } else {
+
+ orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v-01 00:00:00", dateTime))
+ // fmt.Printf("dateTime:%v---3--->%v\n", orgTime, orgTimeErr)
+ if orgTimeErr {
+ d.AllTime = orgTime
+ d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10)
+ d.Quarter = strconv.FormatInt(ComputingTime(orgTime, 2), 10)
+ d.Months = strconv.FormatInt(ComputingTime(orgTime, 3), 10)
+ d.Week = strconv.FormatInt(ComputingTime(orgTime, 4), 10)
+ d.Days = strconv.FormatInt(ComputingTime(orgTime, 5), 10)
+ d.Hours = strconv.FormatInt(ComputingTime(orgTime, 7), 10)
+ d.Minutes = strconv.FormatInt(ComputingTime(orgTime, 8), 10)
+ d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10)
+
+ // fmt.Printf("dateTime:%v---4--->%v--->%v\n", orgTime, d.AllTime, d.Quarter)
+ } else {
+ orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v 00:00:00", dateTime))
+ // fmt.Printf("dateTime:%v---5--->%v--->%v\n", orgTime, orgTimeErr, fmt.Sprintf("%v 12:00:00", dateTime))
if orgTimeErr {
d.AllTime = orgTime
d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10)
@@ -1267,6 +1535,7 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) {
d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10)
} else {
orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v:00:00", dateTime))
+ // fmt.Printf("dateTime:%v---6--->%v\n", orgTime, orgTimeErr)
if orgTimeErr {
d.AllTime = orgTime
d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10)
@@ -1279,6 +1548,7 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) {
d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10)
} else {
orgTime, orgTimeErr = DateToTimeStamp(fmt.Sprintf("%v:00", dateTime))
+ // fmt.Printf("dateTime:%v---7--->%v\n", orgTime, orgTimeErr)
if orgTimeErr {
d.AllTime = orgTime
d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10)
@@ -1291,6 +1561,7 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) {
d.Second = strconv.FormatInt(ComputingTime(orgTime, 9), 10)
} else {
orgTime, orgTimeErr = DateToTimeStamp(dateTime)
+ // fmt.Printf("dateTime:%v---8--->%v\n", orgTime, orgTimeErr)
if orgTimeErr {
d.AllTime = orgTime
d.Years = strconv.FormatInt(ComputingTime(orgTime, 1), 10)
@@ -1308,6 +1579,7 @@ func (d *DateTimeTotimes) BaisStrToTime(dateTime string) {
}
}
}
+
func DateToTimeStampOld(dataStr string) (timeStamp int64) {
tmp := "2006-01-02 15:04:05"
res, _ := time.ParseInLocation(tmp, dataStr, time.Local)
@@ -1399,6 +1671,46 @@ func StringToTimeIng(unit, str string) (res time.Time) {
return
}
+// 获取当天是周几
+func ZellerFunction2Week(year, month, day int) int {
+ var weekday = [7]int{7, 1, 2, 3, 4, 5, 6}
+ var y, m, c int
+ // fmt.Println("ppppppppppp")
+ // fmt.Println(reflect.TypeOf(month))
+ if month >= 3 {
+
+ m = month
+
+ y = year % 100
+
+ c = year / 100
+
+ } else {
+
+ m = month + 12
+
+ y = (year - 1) % 100
+
+ c = (year - 1) / 100
+
+ }
+
+ week := y + (y / 4) + (c / 4) - 2*c + ((26 * (m + 1)) / 10) + day - 1
+
+ if week < 0 {
+
+ week = 7 - (-week)%7
+
+ } else {
+
+ week = week % 7
+
+ }
+ which_week := int(week)
+ return weekday[which_week]
+
+}
+
/*
*
@ 作者: 秦东
@@ -1633,7 +1945,7 @@ func StarSign(level int64) string {
case 6:
return "处女座"
case 7:
- return "天枰座"
+ return "天秤座"
case 8:
return "天蝎座"
case 9:
@@ -1763,11 +2075,71 @@ func EducationTypeAll(level int64) string {
return "网络教育学历"
case 6:
return "函授学历"
+ case 8:
+ return "“985”工程院校"
+ case 9:
+ return "“211”工程院校"
+ case 10:
+ return "公办本科院校"
+ case 11:
+ return "民办本科院校"
+ case 12:
+ return "公办专科院校"
+ case 13:
+ return "民办专科院校"
+ case 14:
+ return "高职院校"
+ case 15:
+ return "中职院校"
+ case 16:
+ return "公立中学"
+ case 17:
+ return "私立中学"
default:
return ""
}
}
+// 学历类型
+func EducationTypeAllId(level string) int64 {
+ switch level {
+ case "全日制统招学历":
+ return 1
+ case "成人高考学历":
+ return 2
+ case "自学考试学历":
+ return 3
+ case "开放大学学历":
+ return 4
+ case "网络教育学历":
+ return 5
+ case "函授学历":
+ return 6
+ case "“985”工程院校":
+ return 8
+ case "“211”工程院校":
+ return 9
+ case "公办本科院校":
+ return 10
+ case "民办本科院校":
+ return 11
+ case "公办专科院校":
+ return 12
+ case "民办专科院校":
+ return 13
+ case "高职院校":
+ return 14
+ case "中职院校":
+ return 15
+ case "公立中学":
+ return 16
+ case "私立中学":
+ return 17
+ default:
+ return 16
+ }
+}
+
//取最大值
func GetMaxNum[T GenericityVariableInt](ary []T) T {
@@ -1884,6 +2256,36 @@ func JoinJobChanelStr(hir int) string {
// 获取所有下级
func (g *GetOrgAllParent) GetOrgSonAllId(orgId int64) {
+ redisFileKey := fmt.Sprintf("orgSuperior:Info:%v_%v", orgId, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias)
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) //设定redis库
+ isTrue, tokens := redisClient.Get(redisFileKey)
+
+ var orgAry []models.AdministrativeOrganization
+ if isTrue && tokens != "" {
+ err := json.Unmarshal([]byte(tokens), &orgAry)
+ if err != nil {
+ orgAry, _ = GetOrgSunId(orgId)
+ redisClient.SetRedisTime(1209600)
+ jsonStr, _ := json.Marshal(orgAry)
+ redisClient.Set(redisFileKey, string(jsonStr))
+ }
+ } else {
+ orgAry, _ = GetOrgSunId(orgId)
+ redisClient.SetRedisTime(1209600)
+ jsonStr, _ := json.Marshal(orgAry)
+ redisClient.Set(redisFileKey, string(jsonStr))
+ }
+ for _, v := range orgAry {
+ if !IsInTrue[int64](v.Id, g.Id) {
+ g.Id = append(g.Id, v.Id)
+ g.GetOrgSonAllId(v.Id)
+ } else {
+ g.GetOrgSonAllId(v.Id)
+ }
+ }
+}
+
+func (g *GetOrgAllParent) GetOrgSonAllIdOld(orgId int64) {
var orgAry []int64
if orgId != 0 {
err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`").Where("`state` = 1 AND `superior` = ?", orgId).Find(&orgAry).Error
@@ -1902,6 +2304,77 @@ func (g *GetOrgAllParent) GetOrgSonAllId(orgId int64) {
}
+// 获取所有下级(去除集团、公司、子集团)
+func (g *GetOrgAllParent) GetGCSOrgSonAllIdRedis(orgId int64) {
+ var orgAry []int64
+ if orgId != 0 {
+ err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`").Where("`state` = 1 AND `superior` = ?", orgId).Find(&orgAry).Error
+ if err != nil {
+ return
+ }
+ for _, v := range orgAry {
+ if !IsInTrue[int64](v, g.Id) {
+ var orgType models.OrgContType
+ // orgType.GetCont(map[string]interface{}{"`id`": v}, "`level`")
+ orgType.RedisCont(v)
+ if orgType.Level != 1 && orgType.Level != 2 && orgType.Level != 3 {
+ g.Id = append(g.Id, v)
+ g.GetOrgSonAllId(v)
+ }
+
+ } else {
+ g.GetOrgSonAllId(v)
+ }
+ }
+ }
+
+}
+func (g *GetOrgAllParent) GetGCSOrgSonAllId(orgId int64) {
+ redisFileKey := fmt.Sprintf("orgSuperior:Info:%v_%v", orgId, overall.CONSTANT_CONFIG.RedisPrefixStr.Alias)
+ redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4) //设定redis库
+ isTrue, tokens := redisClient.Get(redisFileKey)
+ var orgAry []models.AdministrativeOrganization
+ var err error
+ if isTrue && tokens != "" {
+ err = json.Unmarshal([]byte(tokens), &orgAry)
+ if err != nil {
+ orgAry, _ = GetOrgSunId(orgId)
+ redisClient.SetRedisTime(1209600)
+ jsonStr, _ := json.Marshal(orgAry)
+ redisClient.Set(redisFileKey, string(jsonStr))
+ } else {
+ if len(orgAry) < 1 {
+ orgAry, _ = GetOrgSunId(orgId)
+ redisClient.SetRedisTime(1209600)
+ jsonStr, _ := json.Marshal(orgAry)
+ redisClient.Set(redisFileKey, string(jsonStr))
+ }
+ }
+ } else {
+ orgAry, _ = GetOrgSunId(orgId)
+ redisClient.SetRedisTime(1209600)
+ jsonStr, _ := json.Marshal(orgAry)
+ redisClient.Set(redisFileKey, string(jsonStr))
+ }
+ for _, v := range orgAry {
+ if !IsInTrue[int64](v.Id, g.Id) {
+ var orgType models.OrgContType
+ orgType.RedisCont(v.Id)
+ if orgType.Level != 1 && orgType.Level != 2 && orgType.Level != 3 {
+ g.Id = append(g.Id, v.Id)
+ g.GetOrgSonAllId(v.Id)
+ }
+ } else {
+ g.GetOrgSonAllId(v.Id)
+ }
+ }
+}
+
+func GetOrgSunId(orgId int64) (orgAry []models.AdministrativeOrganization, err error) {
+ err = overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("`id`").Where("`state` = 1 AND `superior` = ?", orgId).Find(&orgAry).Error
+ return
+}
+
/*
*
@ 作者: 秦东
@@ -2053,3 +2526,261 @@ func RewPunLevelClass(emp int) string {
return ""
}
}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-03-28 09:53:25
+@ 功能: 隐藏四位号码
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func MaskPhone(mobile string) string {
+ if len(mobile) <= 10 {
+ return mobile
+ }
+ return mobile[:3] + "****" + mobile[7:]
+}
+
+// 翻页设置
+func PageTurningSettings(gormDb *gorm.DB, page, pageSize int) *gorm.DB {
+ if page < 0 {
+ page = 1
+ }
+ if pageSize < 0 {
+ pageSize = 10
+ }
+ gormDb = gormDb.Limit(pageSize).Offset(LimitPage(page, pageSize))
+ return gormDb
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-07-04 13:58:45
+@ 功能: 计算两个时间戳相差时间
+@ 参数
+
+ #
+
+@ 返回值
+
+ #
+
+@ 方法原型
+
+ #
+*/
+func CalculateYearDifference(timestamp1, timestamp2 int64, class int) (yearDiff float64, err error) {
+ date1 := time.Unix(timestamp1, 0)
+ date2 := time.Unix(timestamp2, 0)
+ // 计算两个时间的差值
+ diff := date2.Sub(date1)
+ if diff < 0 {
+ diff = -diff
+ }
+ switch class {
+ case 1: //天
+ if diff < 0 {
+ yearDiff = (diff.Hours() / 24)
+ } else {
+ yearDiff = (diff.Hours() / 24)
+ }
+ case 2: //周
+ yearDiff = (diff.Hours() / (7 * 24))
+ default:
+ yearDiff = (diff.Hours() / (365.25 * 24))
+ fmt.Printf("年:%v\n", yearDiff)
+ }
+ yearDiff = math.Round(yearDiff)
+ return
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-09 09:21:09
+@ 功能: 根据身份证获取生日
+*/
+func GetBirthday(cardId string) string {
+ // 兼容第一代15位身份证号码
+ if len(cardId) == 15 {
+ // 第一代身份证年份都是19开头的
+ return fmt.Sprintf("19%s", cardId[6:12])
+ } else {
+ return cardId[6:14]
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-09-09 09:21:44
+@ 功能: 根据生日获取年龄
+*/
+func GetAgeByBirthday(birthday string, class ...int) int {
+ year, _ := strconv.Atoi(birthday[0:4])
+ month, _ := strconv.Atoi(birthday[4:6])
+ day, _ := strconv.Atoi(birthday[6:])
+ if len(class) > 0 {
+ year, _ = strconv.Atoi(birthday[0:4])
+ month, _ = strconv.Atoi(birthday[5:7])
+ day, _ = strconv.Atoi(birthday[8:])
+ }
+
+ // fmt.Printf("birthday--->%v\n", birthday)
+ // fmt.Printf("len(class)--->%v\n", len(class))
+ // fmt.Printf("year--->%v\n", year)
+ // fmt.Printf("month--->%v\n", month)
+ // fmt.Printf("day--->%v\n", day)
+ // 计算当前日期与生日中年月日都差值
+ now := time.Now()
+ age := now.Year() - year
+ moreMonth := int(now.Month()) - month
+ moreDay := now.Day() - day
+
+ // fmt.Printf("now--->%v\n", now)
+ // fmt.Printf("age--->%v\n", age)
+ // fmt.Printf("moreMonth--->%v\n", moreMonth)
+ // fmt.Printf("moreDay--->%v\n", moreDay)
+
+ // fmt.Printf("moreDay--1->%v\n", moreMonth < 0 || (moreMonth == 0 && moreDay < 0))
+ // 未到生日月份,或者到了月份,但未到生日日期,年龄都要减1岁
+ if moreMonth < 0 || (moreMonth == 0 && moreDay < 0) {
+ age--
+ }
+ // 不要出现负值
+ if age < 0 {
+ age = 0
+ }
+
+ return age
+}
+
+// 数据考核类型
+func OutPutAnalysisExcelType(types string) int {
+ switch types {
+ case "一类":
+ return 1
+ case "1类":
+ return 1
+ case "一":
+ return 1
+ case "1":
+ return 1
+ case "二类":
+ return 2
+ case "2类":
+ return 2
+ case "二":
+ return 2
+ case "2":
+ return 2
+ case "三类":
+ return 3
+ case "3类":
+ return 3
+ case "三":
+ return 3
+ case "3":
+ return 3
+ default:
+ return 1
+ }
+}
+func OutPutAnalysisExcelTypeStr(types int64) string {
+ switch types {
+ case 1:
+ return "一类"
+
+ case 2:
+ return "二类"
+
+ case 3:
+ return "三类"
+
+ default:
+ return "一类"
+ }
+}
+
+/*
+*
+@ 作者: 秦东
+@ 时间: 2024-04-02 11:19:41
+@ 功能: 泛型类型断言
+*/
+func TypeToInterface(val interface{}) string {
+ switch balData := val.(type) {
+ case int:
+ return strconv.Itoa(balData)
+ case int8:
+ return strconv.FormatInt(int64(balData), 10)
+ case int16:
+ return strconv.FormatInt(int64(balData), 10)
+ case int32:
+ return strconv.FormatInt(int64(balData), 10)
+ case int64:
+ return strconv.FormatInt(balData, 10)
+ case uint:
+ return strconv.FormatUint(uint64(balData), 10)
+ case uint8:
+ return strconv.FormatUint(uint64(balData), 10)
+ case uint16:
+ return strconv.FormatUint(uint64(balData), 10)
+ case uint32:
+ return strconv.FormatUint(uint64(balData), 10)
+ case uint64:
+ return strconv.FormatUint(balData, 10)
+ case float32:
+ return fmt.Sprintf("%v", float64(balData))
+ case float64:
+ return fmt.Sprintf("%v", float64(balData))
+ default:
+ if balDataStr, ok := balData.(string); ok {
+ if balDataStr != "" {
+ return balDataStr
+ } else {
+ return ""
+ }
+ } else {
+ return ""
+ }
+
+ }
+ // if valDataStr, ok := val.(string); ok {
+ // if valDataStr != "" {
+ // return valDataStr
+ // } else {
+ // return ""
+ // }
+ // } else {
+ // return ""
+ // }
+}
+
+// 数据库关系转换
+func DatabaseIntToString(typeId int64) string {
+ switch typeId {
+ case 2:
+ return "RTD"
+ case 3:
+ return "TIDB"
+ case 4:
+ return "SqlServer"
+ case 5:
+ return "redis"
+ default:
+ return "mysql"
+ }
+ return "mysql"
+}
diff --git a/overall/overallhandle/peopleLog.go b/overall/overallhandle/peopleLog.go
new file mode 100644
index 0000000..26b7df1
--- /dev/null
+++ b/overall/overallhandle/peopleLog.go
@@ -0,0 +1,18 @@
+package overallhandle
+
+import "github.com/gin-gonic/gin"
+
+/**
+@ 作者: 秦东
+@ 时间: 2024-03-08 13:38:51
+@ 功能: 人员操作记录
+@ 参数
+ #
+@ 返回值
+ #
+@ 方法原型
+ #
+*/
+func WritePeopleLog(c *gin.Context, class string, errmsg ...any) {
+
+}
diff --git a/overall/overallhandle/type.go b/overall/overallhandle/type.go
index 99b4462..01451ce 100644
--- a/overall/overallhandle/type.go
+++ b/overall/overallhandle/type.go
@@ -42,6 +42,12 @@ type NmuberOverall struct {
Number string `json:"number"` //编码
}
+// 判断名称识别符不重复
+type OnleyOneName struct {
+ NameOverall
+ NameAry []string
+}
+
//输出行政组织关系
type outGovToClass struct {
Name string `json:"name" gorm:"column:name;type:varchar(255) unsigned;default:'';not null;comment:组织名称"`
@@ -113,3 +119,35 @@ type DateTimeTotimes struct {
type GetOrgAllParent struct {
Id []int64 `json:"id"`
}
+type PublicStatus struct {
+ Status int `json:"status"`
+}
+
+type NodesUnitNameStatue struct {
+ ConstId
+ NameOverall
+ PublicStatus
+ IsLook bool `json:"isLook"`
+ IsEdit bool `json:"isEdit"`
+}
+
+// 递归循环表单组件
+type RecursionFormUnit struct {
+ MasterUnitList []NodesUnitNameStatue `json:"masterUnitList"`
+ SunUnitList []SunNodesUnitNameStatue `json:"sunUnitList"`
+ UnitAllKey []string `json:"unitAllKey"`
+ UnitAllState []NodesUnitNameStatue `json:"-"`
+
+ CurrentNodeName string `json:"-"`
+ NodePower []NodePowerInfo `json:"-"`
+}
+type SunNodesUnitNameStatue struct {
+ NameOverall
+ UnitList []NodesUnitNameStatue `json:"masterUnitList"`
+}
+
+// 节点权限结构体
+type NodePowerInfo struct {
+ NodeKey string `json:"nodeKey"`
+ PowerAry []NodesUnitNameStatue `json:"powerAry"`
+}
diff --git a/scheduledtask/time_task.go b/scheduledtask/time_task.go
index ef3189a..f4aa943 100644
--- a/scheduledtask/time_task.go
+++ b/scheduledtask/time_task.go
@@ -54,156 +54,414 @@ func TimeTask() {
}) //每天0时15分执行
c.AddFunc("0 0 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(高管)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(48, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(高管)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(48, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(高管)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(48)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(高管)")
}) //每天2时分执行
c.AddFunc("0 5 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(综合办)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(49, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(综合办)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(49, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(综合办)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(49)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(综合办)")
}) //每天2时5分执行
c.AddFunc("0 10 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(人资部)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(50, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(人资部)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(50, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(人资部)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(50)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(人资部)")
}) //每天2时10分执行
c.AddFunc("0 12 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(企管部)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(51, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(企管部)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(51, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(企管部)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(51)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(企管部)")
}) //每天2时12分执行
c.AddFunc("0 15 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(财务部)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(52, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(财务部)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(52, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(财务部)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(52)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(财务部)")
}) //每天2时15分执行
c.AddFunc("0 20 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(营销部)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(53, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(营销部)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(53, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(营销部)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(53)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(营销部)")
}) //每天2时20分执行
c.AddFunc("0 22 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(生产部)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(54, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(生产部)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(54, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(生产部)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(54)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(生产部)")
}) //每天2时22分执行
c.AddFunc("0 25 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(质检中心)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(55, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(质检中心)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(55, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(质检中心)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(55)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(质检中心)")
}) //每天2时25分执行
c.AddFunc("0 27 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(保卫部)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(57, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(保卫部)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(57, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(保卫部)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(57)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(保卫部)")
}) //每天2时27分执行
c.AddFunc("0 30 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(技术部)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(145, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(技术部)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(145, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(技术部)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(145)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(技术部)")
}) //每天2时30分执行
c.AddFunc("0 32 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(安环部)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(56, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(安环部)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(56, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(安环部)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(56)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(安环部)")
}) //每天2时32分执行
c.AddFunc("0 34 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(备煤车间)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(306, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(备煤车间)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(306, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(备煤车间)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(306)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(备煤车间)")
}) //每天2时34分执行
c.AddFunc("0 44 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(机焦车间)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(307, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(机焦车间)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(307, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(机焦车间)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(307)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(机焦车间)")
}) //每天2时44分执行
c.AddFunc("0 54 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(化产分厂)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(59, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(化产分厂)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(59, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(化产分厂)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(59)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(化产分厂)")
}) //每天2时54分执行
c.AddFunc("0 59 2 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(甲醇分厂)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(61, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(甲醇分厂)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(61, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(甲醇分厂)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(61)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(甲醇分厂)")
}) //每天2时59分执行
c.AddFunc("0 10 3 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(动力分厂)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(60, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(动力分厂)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(60, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(动力分厂)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(60)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(动力分厂)")
}) //每天3时10分执行
c.AddFunc("0 20 3 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(电仪分厂)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(181, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(电仪分厂)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(181, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(电仪分厂)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(181)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(电仪分厂)")
}) //每天3时20分执行
c.AddFunc("0 25 3 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(仓储中心)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(73, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(仓储中心)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(73, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(仓储中心)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(73)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(仓储中心)")
}) //每天3时25分执行
c.AddFunc("0 26 3 * * *", func() {
overallhandle.WriteLog("t", "开始执行企业微信信息对照(物流中心)")
- dockingorganization.Position()
- md5Token := "WorkWechatUpdatePeopleInfo"
- errWechat := workWechat.UpdateWechatOrgPeople(76, "txl", md5Token, 1)
- overallhandle.WriteLog("t", "结束执行企业微信信息对照(物流中心)", errWechat)
-
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(76, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(物流中心)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(76)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(物流中心)")
}) //每天3时26分执行
+ c.AddFunc("0 40 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行企业微信信息对照(玖安工程)")
+ // md5Token := "WorkWechatUpdatePeopleInfo"
+ // errWechat := workWechat.UpdateWechatOrgPeople(76, "txl", md5Token, 1)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(物流中心)", errWechat)
+ workWechat.NewTimedTasksForOrgWechat(201)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(玖安工程)")
+ }) //每天3时40分执行
+
+ //荣信集团数据处理
+ c.AddFunc("0 45 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(高管)")
+ workWechat.NewTimedTasksForOrgWechat(6)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(高管)")
+ }) //每天3时40分执行
+ c.AddFunc("0 46 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(办公司)")
+ workWechat.NewTimedTasksForOrgWechat(7)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(办公司)")
+ }) //每天3时40分执行
+
+ c.AddFunc("0 47 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(人才发展中心)")
+ workWechat.NewTimedTasksForOrgWechat(8)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(人才发展中心)")
+ }) //每天3时40分执行
+ c.AddFunc("0 48 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(企管部)")
+ workWechat.NewTimedTasksForOrgWechat(9)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(企管部)")
+ }) //每天3时40分执行
+ c.AddFunc("0 49 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(审计部)")
+ workWechat.NewTimedTasksForOrgWechat(10)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(审计部)")
+ }) //每天3时40分执行
+ c.AddFunc("0 50 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(法律事务部)")
+ workWechat.NewTimedTasksForOrgWechat(11)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(法律事务部)")
+ }) //每天3时40分执行
+ c.AddFunc("0 51 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(财务部)")
+ workWechat.NewTimedTasksForOrgWechat(12)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(财务部)")
+ }) //每天3时40分执行
+ c.AddFunc("0 52 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(供应部)")
+ workWechat.NewTimedTasksForOrgWechat(13)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(供应部)")
+ }) //每天3时40分执行
+ c.AddFunc("0 53 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(销售部)")
+ workWechat.NewTimedTasksForOrgWechat(14)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(销售部)")
+ }) //每天3时40分执行
+ c.AddFunc("0 54 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(生产计划部)")
+ workWechat.NewTimedTasksForOrgWechat(15)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(生产计划部)")
+ }) //每天3时40分执行
+ c.AddFunc("0 55 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(工程技术部)")
+ workWechat.NewTimedTasksForOrgWechat(16)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(工程技术部)")
+ }) //每天3时40分执行
+ c.AddFunc("0 56 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(基建部)")
+ workWechat.NewTimedTasksForOrgWechat(17)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(基建部)")
+ }) //每天3时40分执行
+ c.AddFunc("0 57 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(安环部)")
+ workWechat.NewTimedTasksForOrgWechat(18)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(安环部)")
+ }) //每天3时40分执行
+ c.AddFunc("0 58 3 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(保卫部)")
+ workWechat.NewTimedTasksForOrgWechat(19)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(保卫部)")
+ }) //每天3时40分执行
+ c.AddFunc("0 05 4 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(纪检部)")
+ workWechat.NewTimedTasksForOrgWechat(140)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(纪检部)")
+ }) //每天3时40分执行
+ c.AddFunc("0 06 4 * * *", func() {
+ // overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(煤焦分厂)")
+ // workWechat.NewTimedTasksForOrgWechat(144)
+ // overallhandle.WriteLog("t", "结束执行企业微信信息对照(煤焦分厂)")
+
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(荣信集团机焦分厂)")
+ workWechat.NewTimedTasksForOrgWechat(341)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(荣信集团机焦分厂)")
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(荣信集团备煤煤分厂)")
+ workWechat.NewTimedTasksForOrgWechat(342)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(荣信集团备煤煤分厂)")
+
+ }) //每天3时40分执行
+ c.AddFunc("0 16 4 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(化产分厂)")
+ workWechat.NewTimedTasksForOrgWechat(21)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(化产分厂)")
+ }) //每天3时40分执行
+ c.AddFunc("0 26 4 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(动力分厂)")
+ workWechat.NewTimedTasksForOrgWechat(23)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(动力分厂)")
+ }) //每天3时40分执行
+ c.AddFunc("0 36 4 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(甲醇分厂)")
+ workWechat.NewTimedTasksForOrgWechat(24)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(甲醇分厂)")
+ }) //每天3时40分执行
+ c.AddFunc("0 46 4 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(仓储中心)")
+ workWechat.NewTimedTasksForOrgWechat(25)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(仓储中心)")
+ }) //每天3时40分执行
+ c.AddFunc("0 47 4 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(物流中心)")
+ workWechat.NewTimedTasksForOrgWechat(26)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(物流中心)")
+ }) //每天3时40分执行
+ c.AddFunc("0 48 4 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(接待中心)")
+ workWechat.NewTimedTasksForOrgWechat(166)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(接待中心)")
+ }) //每天3时40分执行
+ c.AddFunc("0 49 4 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(质检中心)")
+ workWechat.NewTimedTasksForOrgWechat(167)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(质检中心)")
+ }) //每天3时40分执行
+
+ c.AddFunc("0 59 4 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(恒信荟荃)")
+ workWechat.NewTimedTasksForOrgWechat(118)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(恒信荟荃)")
+ }) //每天3时40分执行
+ c.AddFunc("0 10 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行荣信集团企业微信信息对照(恒信新能源)")
+ workWechat.NewTimedTasksForOrgWechat(330)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(恒信新能源)")
+ }) //每天3时40分执行
+
+ //新材料
+
+ c.AddFunc("0 20 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(焦油车间)")
+ workWechat.NewTimedTasksForOrgWechat(250)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(焦油车间)")
+ }) //每天3时40分执行
+ c.AddFunc("0 21 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(动力车间)")
+ workWechat.NewTimedTasksForOrgWechat(251)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(动力车间)")
+ }) //每天3时40分执行
+ c.AddFunc("0 25 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(针状焦车间)")
+ workWechat.NewTimedTasksForOrgWechat(252)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(针状焦车间)")
+ }) //每天3时40分执行
+ c.AddFunc("0 30 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(综合办)")
+ workWechat.NewTimedTasksForOrgWechat(259)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(综合办)")
+ }) //每天3时40分执行
+ c.AddFunc("0 31 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(安全科)")
+ workWechat.NewTimedTasksForOrgWechat(261)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(安全科)")
+ }) //每天3时40分执行
+ c.AddFunc("0 32 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(新入职)")
+ workWechat.NewTimedTasksForOrgWechat(303)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(新入职)")
+ }) //每天3时40分执行
+ //恒信科技
+ c.AddFunc("0 32 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(仪表工段)")
+ workWechat.NewTimedTasksForOrgWechat(288)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(仪表工段)")
+ }) //每天3时40分执行
+ c.AddFunc("0 32 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(电器工段)")
+ workWechat.NewTimedTasksForOrgWechat(289)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(电器工段)")
+ }) //每天3时40分执行
+ c.AddFunc("0 32 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(维修工段)")
+ workWechat.NewTimedTasksForOrgWechat(295)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(维修工段)")
+ }) //每天3时40分执行
+ c.AddFunc("0 32 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(办公室)")
+ workWechat.NewTimedTasksForOrgWechat(296)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(办公室)")
+ }) //每天3时40分执行
+ c.AddFunc("0 32 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(产品精制工段)")
+ workWechat.NewTimedTasksForOrgWechat(297)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(产品精制工段)")
+ }) //每天3时40分执行
+ c.AddFunc("0 32 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(苯加氢工段)")
+ workWechat.NewTimedTasksForOrgWechat(298)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(苯加氢工段)")
+ }) //每天3时40分执行
+ c.AddFunc("0 32 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(蒽油加氢工段)")
+ workWechat.NewTimedTasksForOrgWechat(299)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(蒽油加氢工段)")
+ }) //每天3时40分执行
+ c.AddFunc("0 32 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(辅运工段)")
+ workWechat.NewTimedTasksForOrgWechat(300)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(辅运工段)")
+ }) //每天3时40分执行
+ c.AddFunc("0 32 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(新入职)")
+ workWechat.NewTimedTasksForOrgWechat(305)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(新入职)")
+ }) //每天3时40分执行
+ c.AddFunc("0 32 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(暂调乙醇项目人员)")
+ workWechat.NewTimedTasksForOrgWechat(325)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(暂调乙醇项目人员)")
+ }) //每天3时40分执行
+ //新入职人员待分配
+ c.AddFunc("0 35 5 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行新材料企业微信信息对照(新入职人员待分配)")
+ workWechat.NewTimedTasksForOrgWechat(168)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(新入职人员待分配)")
+ }) //每天3时40分执行
+
+ //中压热力
+ c.AddFunc("0 10 21 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行中压热力新材料企业微信信息对照(中压热力)")
+ workWechat.NewTimedTasksForOrgWechat(331)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(中压热力)")
+ }) //每天3时40分执行
+
+ c.AddFunc("0 10 21 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行中压热力新材料企业微信信息对照(中压热力)")
+ workWechat.NewTimedTasksForOrgWechat(331)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(中压热力)")
+ }) //每天3时40分执行
+
+ c.AddFunc("0 30 1 * * *", func() {
+ overallhandle.WriteLog("t", "开始执行中压热力企业微信信息对照(集团高管、办公室、财务部、营销部)")
+ workWechat.NewTimedTasksForOrgWechat(44)
+ workWechat.NewTimedTasksForOrgWechat(45)
+ workWechat.NewTimedTasksForOrgWechat(46)
+ workWechat.NewTimedTasksForOrgWechat(47)
+ overallhandle.WriteLog("t", "结束执行企业微信信息对照(集团高管、办公室、财务部、营销部)")
+ }) //每天3时40分执行
+
//启动
c.Start()
//设定全部执行后,最后关闭定时任务