KPI绩效考核系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1517 lines
53 KiB

package postpc
import (
"fmt"
"key_performance_indicators/api/version1/departmentseting/departmentpc"
"key_performance_indicators/models/modelshr"
"key_performance_indicators/models/modelskpi"
"key_performance_indicators/overall"
"key_performance_indicators/overall/publicmethod"
"strconv"
"strings"
"time"
"github.com/gin-gonic/gin"
)
/*
*
@ 作者: 秦东
@ 时间: 2023-02-20 08:46:24
@ 功能: 根据指标获取细则列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) GetDetailsList(c *gin.Context) {
var receivedValue GetPostDetails
c.ShouldBindJSON(&receivedValue)
if receivedValue.TargetId == "" {
publicmethod.Result(1, receivedValue, c, "未知指标!请指定!")
return
}
var idList []int64
var detCont modelskpi.PostTargetDetails
gormDb := overall.CONSTANT_DB_KPI.Table(fmt.Sprintf("%s dt", detCont.TableName())).Distinct("dt.id").Where("dt.state BETWEEN 1 AND 2 AND dt.parentid = ?", receivedValue.TargetId)
if receivedValue.Cycle != 0 {
gormDb = gormDb.Where("dt.`cycle` = ?", receivedValue.Cycle)
}
if len(receivedValue.Inspect) > 0 {
var sqlOrStr string
for ti, tv := range receivedValue.Inspect {
if ti == 0 {
// gormDb = gormDb.Where("FIND_IN_SET(?,`dt_censor_type`)", tv)
sqlOrStr = fmt.Sprintf("FIND_IN_SET(%v,dt.`censor_type`)", tv)
} else {
// gormDb = gormDb.Or("FIND_IN_SET(?,`dt_censor_type`)", tv)
sqlOrStr = fmt.Sprintf("%v OR FIND_IN_SET(%v,dt.`censor_type`)", sqlOrStr, tv)
}
}
gormDb = gormDb.Where(sqlOrStr)
}
if len(receivedValue.PostList) > 0 {
gormDb = gormDb.Joins("LEFT JOIN `target_department` `td` on td.target_id = dt.parentid AND td.target_sun_id = dt.parentid_sun AND td.target_bylaws = dt.id").Where("td.`type` = 3 AND td.`state` BETWEEN 1 AND 2 AND td.`level` = 2 AND td.post_id IN ?", receivedValue.PostList)
}
err := gormDb.Find(&idList).Error
if err != nil || len(idList) < 1 {
publicmethod.Result(107, err, c)
return
}
var listCont []modelskpi.PostTargetDetails
err = overall.CONSTANT_DB_KPI.Where("`id` IN ?", idList).Order("parentid desc, parentid_sun").Find(&listCont).Error
if err != nil || len(listCont) < 1 {
publicmethod.Result(107, err, c)
return
}
var sendContList []OutPostDetailsCont
var lastSunTable int64
jishuqi := 1
for _, v := range listCont {
var sendCont OutPostDetailsCont
sendCont.Id = v.Id
sendCont.Title = v.Title //指标细则"`
sendCont.Content = v.Content //指标说明"`
sendCont.ParentId = v.ParentId //归属指标栏目"`
if lastSunTable != v.ParentIdSun {
lastSunTable = v.ParentIdSun
jishuqi = 1
} else {
jishuqi = jishuqi + 1
}
sendCont.JiBuQi = jishuqi
sendCont.ParentIdSun = v.ParentIdSun //归属指标子栏目"`
sendCont.State = v.State //状态(1:启用;2:禁用;3:删除)"`
sendCont.AddTime = v.AddTime //制定时间"`
sendCont.MinScore = v.MinScore //(最小分*100保存"`
sendCont.MaxScore = v.MaxScore //(最大分*100保存"`
sendCont.Company = v.Company //单位"`
sendCont.AddReduce = v.AddReduce //1:减少;2:增加;3:无属性,现场确认加或减"`
sendCont.CensorType = v.CensorType //检查方式"`
sendCont.CensorCont = v.CensorCont //检查依据"`
sendCont.CensorRate = v.CensorRate //检查频次"`
sendCont.Cycles = v.Cycles //1:班;2:天;3:周;4:月;5:季度;6:年"`
sendCont.CycleAttres = v.CycleAttres //辅助计数"`
sendCont.Paretment = v.Paretment //接受考核的部门"`
sendCont.ParetmentPost = v.ParetmentPost //接受考核的部门岗位"`
sendCont.Reportary = v.Reportary //提报人"`
sendCont.Punishmode = v.Punishmode //(处罚方式 1:扣分;2:现金处罚;3:扣分加现金"`
sendCont.Maxmoney = v.Maxmoney //最高罚款"`
sendCont.Minmoney = v.Minmoney //最低罚款"`
if v.MinScore != 0 && v.MaxScore != 0 {
sendCont.Standard = fmt.Sprintf("%v-%v", float64(v.MinScore)/100, float64(v.MaxScore)/100)
} else if v.MinScore == 0 && v.MaxScore != 0 {
sendCont.Standard = fmt.Sprintf("%v", float64(v.MaxScore)/100)
} else if v.MinScore != 0 && v.MaxScore == 0 {
sendCont.Standard = fmt.Sprintf("%v", float64(v.MinScore)/100)
} else {
sendCont.Standard = ""
}
if v.Minmoney != 0 && v.Maxmoney != 0 {
sendCont.Forfeit = fmt.Sprintf("%v-%v元", float64(v.Minmoney)/100, float64(v.Maxmoney)/100)
} else if v.Minmoney == 0 && v.Maxmoney != 0 {
sendCont.Forfeit = fmt.Sprintf("%v元", float64(v.Maxmoney)/100)
} else if v.Minmoney != 0 && v.Maxmoney == 0 {
sendCont.Forfeit = fmt.Sprintf("%v元", float64(v.Minmoney)/100)
} else {
sendCont.Forfeit = ""
}
var sonTargetCont modelskpi.PostSonTarget
sonTargetCont.GetCont(map[string]interface{}{"id": v.ParentIdSun}, "title")
sendCont.ColumnName = sonTargetCont.Title
sendContList = append(sendContList, sendCont)
}
publicmethod.Result(0, sendContList, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-20 14:37:30
@ 功能: 获取岗位指标关联部门相关岗位及提报人(新版)
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) GetNewTargetAboutDepartToPostMan(c *gin.Context) {
var receivedValue publicmethod.PublicId
err := c.ShouldBindJSON(&receivedValue)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if receivedValue.Id == "" {
publicmethod.Result(101, receivedValue, c)
return
}
var postTargetCont modelskpi.PostTarget
err = postTargetCont.GetCont(map[string]interface{}{"`id`": receivedValue.Id})
if err != nil {
publicmethod.Result(107, err, c)
return
}
//获取指标关联的岗位
// var postId []int64
// err = overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetDepartment{}).Distinct("`post_id`").Where("`state` = 1 AND `type` = 1 AND `level` = 2 AND `target_id` = ? AND `target_sun_id` = 0 AND `target_bylaws` = 0", postTargetCont.Id).Find(&postId).Error
// if err != nil && len(postId) < 1 {
// publicmethod.Result(107, err, c)
// return
// }
// var orgId []int64
// err = overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetDepartment{}).Distinct("`department_id`").Where("`state` = 1 AND `type` = 1 AND `level` = 2 AND `target_id` = ? AND `target_sun_id` = 0 AND `target_bylaws` = 0", postTargetCont.Id).Find(&orgId).Error
// if err != nil && len(orgId) < 1 {
// publicmethod.Result(107, err, c)
// return
// }
var sendCont OutTargetDepatPostMan
var tarDepatContList []modelskpi.TargetDepartment
err = overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetDepartment{}).Select("`department_id`,`post_id`").Where("`state` = 1 AND `type` = 1 AND `level` = 2 AND `target_id` = ? AND `target_sun_id` = 0 AND `target_bylaws` = 0", postTargetCont.Id).Find(&tarDepatContList).Error
if err != nil && len(tarDepatContList) < 1 {
publicmethod.Result(107, err, c)
return
}
for _, v := range tarDepatContList {
orgIdstr := strconv.FormatInt(v.DepartmentId, 10)
if publicmethod.IsInTrue[string](orgIdstr, sendCont.OrgId) == false {
sendCont.OrgId = append(sendCont.OrgId, orgIdstr)
}
postIdstr := strconv.FormatInt(v.PostId, 10)
if publicmethod.IsInTrue[string](postIdstr, sendCont.PostId) == false {
sendCont.PostId = append(sendCont.PostId, postIdstr)
}
var orgPostInfo OrgPostCont
orgPostInfo.Id = postIdstr
orgPostInfo.OrgId = orgIdstr
var postInfo modelshr.Position
postInfo.GetCont(map[string]interface{}{"`id`": v.PostId}, "`name`")
_, _, departmentId, sunDepartId, workShopId := publicmethod.GetOrgStructure(v.DepartmentId)
fmt.Printf("%v------->%v------->%v\n", departmentId, sunDepartId, workShopId)
if departmentId != 0 && sunDepartId != 0 && workShopId != 0 {
if departmentId != workShopId && sunDepartId != workShopId && departmentId != sunDepartId {
orgPostInfo.Name = fmt.Sprintf("%v/%v/%v/%v", getOrgCont(departmentId), getOrgCont(sunDepartId), getOrgCont(workShopId), postInfo.Name)
} else if departmentId != workShopId && sunDepartId != workShopId && departmentId == sunDepartId {
orgPostInfo.Name = fmt.Sprintf("%v/%v/%v", getOrgCont(departmentId), getOrgCont(sunDepartId), postInfo.Name)
} else {
orgPostInfo.Name = fmt.Sprintf("%v/%v", getOrgCont(departmentId), postInfo.Name)
}
} else if departmentId != 0 && sunDepartId != 0 && workShopId == 0 {
if departmentId != sunDepartId {
orgPostInfo.Name = fmt.Sprintf("%v/%v/%v", getOrgCont(departmentId), getOrgCont(sunDepartId), postInfo.Name)
} else {
orgPostInfo.Name = fmt.Sprintf("%v/%v", getOrgCont(departmentId), postInfo.Name)
}
} else {
orgPostInfo.Name = fmt.Sprintf("%v/%v", getOrgCont(departmentId), postInfo.Name)
}
orgPostInfo.KeyList, orgPostInfo.Child = GetReportAndAllDepartMan(postTargetCont.Id, 0, 0, 0, v.PostId, departmentId, 2, 1)
sendCont.OrgAndPostList = append(sendCont.OrgAndPostList, orgPostInfo)
}
publicmethod.Result(0, sendCont, c)
}
//获取提报人及本部门所有人
/*
#targetId 指标
#tableId 栏目
#detailsId 细则
#departId 行政组织
#postId 岗位
#mainDepart 主部门
#types 类型1公司级2部门级
#levels 1指标2子目标3细则
*/
func GetReportAndAllDepartMan(targetId, tableId, detailsId, departId, postId, mainDepart int64, types, levels int) (repostKey []string, departMan *[]OrgPostCont) {
gormDb := overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetReport{}).Distinct("`man_key`").Where("`state` = 1 AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ?", targetId, tableId, detailsId)
if departId != 0 {
gormDb = gormDb.Where("department_id = ?", departId)
}
if postId != 0 {
gormDb = gormDb.Where("post_id = ?", postId)
}
err := gormDb.Find(&repostKey).Error
if err != nil {
}
var allOrgId []int64
allOrgId = publicmethod.GetDepartmentSun(mainDepart, allOrgId)
if publicmethod.IsInTrue[int64](mainDepart, allOrgId) == false {
allOrgId = append(allOrgId, mainDepart)
}
var manContList []modelshr.PersonArchives
err = overall.CONSTANT_DB_HR.Model(&modelshr.PersonArchives{}).Select("`id`,`number`,`name`,`key`").Where("`emp_type` BETWEEN 1 AND 10 AND `admin_org` IN ?", allOrgId).Find(&manContList).Error
if err == nil {
var allPeople []OrgPostCont
for _, v := range manContList {
var manCont OrgPostCont
manCont.Id = strconv.FormatInt(v.Key, 10)
manCont.Number = v.Number
manCont.Name = v.Name
allPeople = append(allPeople, manCont)
}
departMan = &allPeople
}
// fmt.Printf("allOrgId------------------->%v\n", manContList)
return
}
// 获取行政组织信息
func getOrgCont(id int64) (orgCont string) {
var orgInfo modelshr.AdministrativeOrganization
orgInfo.GetCont(map[string]interface{}{"`id`": id})
orgCont = orgInfo.Name
return
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-20 16:29:27
@ 功能: 根据指标获取岗位指标栏目
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) TableBasePostTarget(c *gin.Context) {
var receivedValue publicmethod.PublicId
err := c.ShouldBindJSON(&receivedValue)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if receivedValue.Id == "" {
publicmethod.Result(101, receivedValue, c)
return
}
var postTargetCont modelskpi.PostTarget
err = postTargetCont.GetCont(map[string]interface{}{"`id`": receivedValue.Id}, "`id`", "`title`")
if err != nil {
publicmethod.Result(107, err, c)
return
}
// var tableId []int64
// var detCont modelskpi.PostSonTarget
// err = overall.CONSTANT_DB_KPI..Table(fmt.Sprintf("%s dt", detCont.TableName())).Distinct("dt.`id`")
var postTableContList []modelskpi.PostSonTarget
err = overall.CONSTANT_DB_KPI.Where("`state` = 1 AND `parent_id` = ?", receivedValue.Id).Find(&postTableContList).Error
if err != nil {
publicmethod.Result(107, err, c)
return
}
publicmethod.Result(0, postTableContList, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-21 13:36:36
@ 功能: 根据指标添加细则列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) AddDetailsList(c *gin.Context) {
var receivedValue AddPostDetails
c.ShouldBindJSON(&receivedValue)
if receivedValue.TargetId == "" {
publicmethod.Result(101, receivedValue, c)
return
}
if receivedValue.TableName == "" {
publicmethod.Result(1, receivedValue, c, "未知栏目!请选择或输入栏目!")
return
}
iswrite := true
if len(receivedValue.DetailsList) < 1 {
publicmethod.Result(1, receivedValue, c, "至少要有一条细则!")
return
} else {
for _, v := range receivedValue.DetailsList {
if v.Title == "" {
iswrite = false
break
}
switch v.PunishType {
case 2:
if v.CashStandard == "" {
iswrite = false
break
} else {
testInt := strings.Split(v.CashStandard, "-")
testLen := len(testInt)
_, oenErr := strconv.ParseFloat(testInt[0], 10)
if oenErr != nil {
iswrite = false
break
} else {
if testLen > 1 {
_, twoErr := strconv.ParseFloat(testInt[testLen-1], 10)
if twoErr != nil {
iswrite = false
break
}
}
}
}
case 3:
if v.CashStandard == "" || v.Standard == "" {
iswrite = false
break
} else {
testInt := strings.Split(v.CashStandard, "-")
testLen := len(testInt)
_, oenErr := strconv.ParseFloat(testInt[0], 10)
if oenErr != nil {
iswrite = false
break
} else {
if testLen > 1 {
_, twoErr := strconv.ParseFloat(testInt[testLen-1], 10)
if twoErr != nil {
iswrite = false
break
}
}
}
testIntTwo := strings.Split(v.Standard, "-")
testLenTwo := len(testIntTwo)
_, oenErrTwo := strconv.ParseFloat(testIntTwo[0], 10)
if oenErrTwo != nil {
iswrite = false
break
} else {
if testLenTwo > 1 {
_, twoErr := strconv.ParseFloat(testIntTwo[testLenTwo-1], 10)
if twoErr != nil {
iswrite = false
break
}
}
}
}
default:
if v.Standard == "" {
iswrite = false
break
} else {
testInt := strings.Split(v.Standard, "-")
testLen := len(testInt)
_, oenErr := strconv.ParseFloat(testInt[0], 10)
if oenErr != nil {
iswrite = false
break
} else {
if testLen > 1 {
_, twoErr := strconv.ParseFloat(testInt[testLen-1], 10)
if twoErr != nil {
iswrite = false
break
}
}
}
}
}
if len(v.Inspemethod) < 1 {
iswrite = false
break
}
}
}
if !iswrite {
publicmethod.Result(1, receivedValue, c, "至少有一条细则内容填写不规范!请检查!")
return
}
var targetCont modelskpi.PostTarget
err := targetCont.GetCont(map[string]interface{}{"`id`": receivedValue.TargetId})
if err != nil {
publicmethod.Result(1, receivedValue, c, "指标不存在!不允许添加细则内容!")
return
}
orgList, postList, manList, orgPost, orgPostMan := GetTargetBaseDepartMan(targetCont.Id)
tableId, err := EditPostTableCont(targetCont.Id, receivedValue.TableName)
if err != nil {
publicmethod.Result(1, receivedValue, c, "没有栏目信息!栏目添加失败!请重新提交!")
return
}
var tableDepartList []string
var tablePostList []string
var tableDepartPost []OrgAndPostCont
var tableDepartPostMan []OrgAndPostManCont
//处理岗位细则内容
for _, v := range receivedValue.DetailsList {
var targetDetailsInfo modelskpi.PostTargetDetails
targetDetailsInfo.Title = v.Title //指标细则"`
targetDetailsInfo.Content = v.Remarks //指标说明"`
targetDetailsInfo.ParentId = targetCont.Id //归属指标栏目"`
targetDetailsInfo.ParentIdSun = tableId //归属指标子栏目"`
targetDetailsInfo.State = 1 //状态(1:启用;2:禁用;3:删除)"`
targetDetailsInfo.AddTime = time.Now().Unix() //制定时间"`
targetDetailsInfo.MinScore, targetDetailsInfo.MaxScore = departmentpc.SplitCriteria(v.Standard) //最小分*100保存"` && 最大分*100保存"`
targetDetailsInfo.Company = v.Unit //单位"`
targetDetailsInfo.AddReduce = v.Types //1:减少;2:增加;3:无属性,现场确认加或减"`
targetDetailsInfo.CensorType = strings.Join(v.Inspemethod, ",") //检查方式"`
targetDetailsInfo.CensorCont = v.Evidence //检查依据"`
targetDetailsInfo.CensorRate = v.Frequency //检查频次"`
targetDetailsInfo.Cycles = v.Cycle //1:班;2:天;3:周;4:月;5:季度;6:年"`
targetDetailsInfo.CycleAttres = 1 //辅助计数"`
if len(v.PostandExport) > 0 {
orgList, postList, manList, orgPost, orgPostMan = HandleOrgOfPostReportRelation(v.PostandExport)
// orgListJson, _ := json.Marshal(orgList)
// postListJson, _ := json.Marshal(postList)
// manListJson, _ := json.Marshal(manList)
// orgPostJson, _ := json.Marshal(orgPost)
// orgPostManJson, _ := json.Marshal(orgPostMan)
// fmt.Printf("明细表关联关系--->%v--->%v--->%v--->%v--->%v\n", string(orgListJson), string(postListJson), string(manListJson), string(orgPostJson), string(orgPostManJson))
}
targetDetailsInfo.Paretment = strings.Join(orgList, ",") //接受考核的部门"`
targetDetailsInfo.ParetmentPost = strings.Join(postList, ",") //接受考核的部门岗位"`
targetDetailsInfo.Reportary = strings.Join(manList, ",") //提报人"`
targetDetailsInfo.Punishmode = v.PunishType //处罚方式 1:扣分;2:现金处罚;3:扣分加现金"`
targetDetailsInfo.Minmoney, targetDetailsInfo.Maxmoney = departmentpc.SplitCriteria(v.CashStandard) //最高罚款"`&& 最低罚款"`
addErr := overall.CONSTANT_DB_KPI.Create(&targetDetailsInfo).Error //添加指标
if addErr == nil {
syncSeting.Add(1)
go PostDetailsBaseOrgPost(targetCont.Dimension, targetCont.Id, tableId, targetDetailsInfo.Id, targetCont.Type, 3, 2, orgPost)
syncSeting.Add(1)
go PostDetailsBaseOrgPostMan(targetCont.Dimension, targetCont.Id, tableId, targetDetailsInfo.Id, targetCont.Type, 3, 2, orgPostMan)
}
//处理指标关联数据
for _, ov := range orgList {
if publicmethod.IsInTrue[string](ov, tableDepartList) == false {
tableDepartList = append(tableDepartList, ov)
}
}
for _, pv := range postList {
if publicmethod.IsInTrue[string](pv, tablePostList) == false {
tablePostList = append(tablePostList, pv)
}
}
for _, opv := range orgPost {
if JudgeDeparPost(opv, tableDepartPost) == false {
tableDepartPost = append(tableDepartPost, opv)
}
}
for _, opvm := range orgPostMan {
if JudgeDeparPostMan(opvm, tableDepartPostMan) == false {
tableDepartPostMan = append(tableDepartPostMan, opvm)
}
}
}
// one, _ := json.Marshal(tableDepartList)
// two, _ := json.Marshal(tablePostList)
// three, _ := json.Marshal(tableDepartPost)
// four, _ := json.Marshal(tableDepartPostMan)
// fmt.Printf("栏目明细表关联关系--->%v--->%v--->%v--->%v\n", string(one), string(two), string(three), string(four))
editTabelInfo := publicmethod.MapOut[string]()
tableDepartStr := strings.Join(tableDepartList, ",")
editTabelInfo["`depart`"] = tableDepartStr
tablePostStr := strings.Join(tablePostList, ",")
editTabelInfo["`depart_post`"] = tablePostStr
editTabelInfo["`time`"] = time.Now().Unix()
var editTableCont modelskpi.PostSonTarget
editTableCont.EiteCont(map[string]interface{}{"`id`": tableId}, editTabelInfo)
syncSeting.Add(1)
go PostDetailsBaseOrgPost(targetCont.Dimension, targetCont.Id, tableId, 0, targetCont.Type, 2, 2, tableDepartPost)
syncSeting.Add(1)
go PostDetailsBaseOrgPostMan(targetCont.Dimension, targetCont.Id, tableId, 0, targetCont.Type, 2, 2, tableDepartPostMan)
syncSeting.Wait()
publicmethod.Result(0, receivedValue, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-22 09:41:43
@ 功能: 岗位指标细则关联行政组织及岗位提报人
@ 参数
#
@ 返回值
#dimensionId 维度
#targetId 指标
#tableId 栏目
#bylawsId 细则
#types 类型1指标2子目标3细则
#class 属性1定性考核2定量考核
#level 级别1部门级2岗位级
#orgPostManList 行政组织与岗位提报人组合
@ 方法原型
#
*/
func PostDetailsBaseOrgPostMan(dimensionId, targetId, tableId, bylawsId int64, class, types, level int, orgPostManList []OrgAndPostManCont) {
defer syncSeting.Done()
if types == 0 {
types = 3
}
if class == 0 {
class = 1
}
if level == 0 {
level = 2
}
var orgManList []ReportAry
for _, opmv := range orgPostManList {
if len(orgManList) < 1 {
var orgMAnCont ReportAry
orgMAnCont.OrgId = opmv.OrgId
orgMAnCont.PostId = opmv.PostId
orgMAnCont.ManKey = append(orgMAnCont.ManKey, opmv.ManKey)
orgManList = append(orgManList, orgMAnCont)
} else {
isCunz := true
for i, omlv := range orgManList {
if omlv.OrgId == opmv.OrgId && omlv.PostId == opmv.PostId {
if publicmethod.IsInTrue[int64](opmv.ManKey, orgManList[i].ManKey) == false {
orgManList[i].ManKey = append(orgManList[i].ManKey, opmv.ManKey)
}
isCunz = false
}
}
if isCunz {
var orgMAnCont ReportAry
orgMAnCont.OrgId = opmv.OrgId
orgMAnCont.PostId = opmv.PostId
orgMAnCont.ManKey = append(orgMAnCont.ManKey, opmv.ManKey)
orgManList = append(orgManList, orgMAnCont)
}
}
}
// orgManListJson, _ := json.Marshal(orgManList)
// fmt.Printf("岗位指标细则关联行政组织及岗位提报人------>%v\n", string(orgManListJson))
//将不属于该指标细则的部门岗位提报人至禁用
otherSaveData := publicmethod.MapOut[string]()
otherSaveData["`state`"] = 2
otherSaveData["`time`"] = time.Now().Unix()
for _, val := range orgManList {
overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetReport{}).Where("`type_level` = ? AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ? AND `type` = ? AND `department_id` = ? AND `post_id` = ?", types, targetId, tableId, bylawsId, level, val.OrgId, val.PostId).Not(map[string]interface{}{"man_key": val.ManKey}).Updates(&otherSaveData)
}
//处理指标细则提报人问题
for _, v := range orgPostManList {
//获取评价人部门
var manCont modelshr.PersonArchives
manCont.GetCont(map[string]interface{}{"`key`": v.ManKey}, "`maindeparment`")
var tarDepartCont modelskpi.TargetReport
saveErr := tarDepartCont.GetCont(map[string]interface{}{"`type_level`": types, "`type`": level, "`target_id`": targetId, "`target_sun_id`": tableId, "`target_bylaws`": bylawsId, "`department_id`": v.OrgId, "`post_id`": v.PostId, "`man_key`": v.ManKey}, "`id`", "`state`")
if saveErr == nil {
if tarDepartCont.State != 1 {
tarDepartCont.EiteCont(map[string]interface{}{"`id`": tarDepartCont.Id}, map[string]interface{}{"`state`": 1, "`man_department`": manCont.MainDeparment, "`time`": time.Now().Unix()})
}
} else {
var tarReportContAdd modelskpi.TargetReport
tarReportContAdd.Dimension = dimensionId //维度
tarReportContAdd.TargetId = targetId //指标ID"`
tarReportContAdd.TargetSunId = tableId //子目标"`
tarReportContAdd.TargetBylaws = bylawsId //指标细则"`
tarReportContAdd.DepartmentId = v.OrgId //部门ID"`
tarReportContAdd.PostId = v.PostId //岗位ID"`
tarReportContAdd.Type = level //类型(1:公司级;2:部门级)"`
tarReportContAdd.State = 1 //状态(1:启用;2:禁用;3:删除)"`
tarReportContAdd.ReportPerson = v.ManKey //上报人"`
tarReportContAdd.ManDepartment = manCont.MainDeparment //提报人所在部门"`
tarReportContAdd.Time = time.Now().Unix() //写入时间"`
tarReportContAdd.Class = class //1:定性考核;2:定量考核"`
tarReportContAdd.Level = types //1:指标;2:子目标;3:细则
overall.CONSTANT_DB_KPI.Create(&tarReportContAdd)
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-22 08:51:56
@ 功能: 岗位指标细则关联行政组织及岗位
@ 参数
#dimensionId 维度
#targetId 指标
#tableId 栏目
#bylawsId 细则
#types 类型1指标2子目标3细则
#class 属性1定性考核2定量考核
#level 级别1部门级2岗位级
#orgPostList 行政组织与岗位组合
@ 返回值
#
@ 方法原型
#
*/
func PostDetailsBaseOrgPost(dimensionId, targetId, tableId, bylawsId int64, class, types, level int, orgPostList []OrgAndPostCont) {
defer syncSeting.Done()
if types == 0 {
types = 3
}
if class == 0 {
class = 1
}
if level == 0 {
level = 2
}
orgPostMap := map[int64][]int64{}
for _, ov := range orgPostList {
orgPostMap[ov.OrgId] = append(orgPostMap[ov.OrgId], ov.PostId)
}
//将不属于该指标细则的部门至禁用
otherSaveData := publicmethod.MapOut[string]()
otherSaveData["`state`"] = 2
otherSaveData["`time`"] = time.Now().Unix()
for key, val := range orgPostMap {
overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetDepartment{}).Where("`level` = ? AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ? AND `type` = ? AND `department_id` = ?", level, targetId, targetId, bylawsId, types, key).Not(map[string]interface{}{"post_id": val}).Updates(&otherSaveData)
}
//处理新的关联数据
for _, v := range orgPostList {
var tarDepartCont modelskpi.TargetDepartment
saveErr := tarDepartCont.GetCont(map[string]interface{}{"`level`": level, "`type`": types, "`target_id`": targetId, "`target_sun_id`": tableId, "`target_bylaws`": bylawsId, "`department_id`": v.OrgId, "`post_id`": v.PostId}, "`id`", "`state`")
if saveErr == nil {
if tarDepartCont.State != 1 {
tarDepartCont.EiteCont(map[string]interface{}{"`id`": tarDepartCont.Id}, map[string]interface{}{"`state`": 1, "`time`": time.Now().Unix()})
}
} else {
var addTarDepartCont modelskpi.TargetDepartment
addTarDepartCont.Dimension = dimensionId
addTarDepartCont.TargetId = targetId //指标ID"`
addTarDepartCont.TargetSunId = tableId //子目标"`
addTarDepartCont.TargetBylaws = bylawsId //指标细则"`
addTarDepartCont.Type = types //类型(1:指标;2:子目标;3:细则)"`
addTarDepartCont.DepartmentId = v.OrgId //部门ID"`
addTarDepartCont.PostId = v.PostId //岗位ID"`
addTarDepartCont.State = 1 //状态(1:启用;2:禁用;3:删除)"`
addTarDepartCont.Time = time.Now().Unix() //写入时间"`
addTarDepartCont.Class = class //1:定性考核;2:定量考核"`
addTarDepartCont.Level = level //级别(1:部门级;2:岗位级)"`
overall.CONSTANT_DB_KPI.Create(&addTarDepartCont)
}
}
}
// 判断岗位是否已经存在
func JudgeDeparPostMan(orgPostMan OrgAndPostManCont, tableDepartPost []OrgAndPostManCont) (isTrue bool) {
isTrue = false
for _, v := range tableDepartPost {
if orgPostMan.OrgId == v.OrgId && orgPostMan.PostId == v.PostId && orgPostMan.ManKey == v.ManKey {
isTrue = true
return
}
}
return
}
func JudgeDeparPost(orgPost OrgAndPostCont, tableDepartPost []OrgAndPostCont) (isTrue bool) {
isTrue = false
for _, v := range tableDepartPost {
if orgPost.OrgId == v.OrgId && orgPost.PostId == v.PostId {
isTrue = true
return
}
}
return
}
// 获取岗位指标关联得岗位及提报人
/*
#targetId 指标
*/
func GetTargetBaseDepartMan(targetId int64) (orgList, postList, manList []string, orgPost []OrgAndPostCont, orgPostMan []OrgAndPostManCont) {
//获取指标关联行政组织及岗位
var targetDepartList []modelskpi.TargetDepartment
err := overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetDepartment{}).Select("`department_id`,`post_id`").Where("`state` = 1 AND `type` = 1 AND `level` = 2 AND `target_sun_id` = 0 AND `target_bylaws` = 0 AND `target_id` = ?", targetId).Find(&targetDepartList).Error
if err != nil {
for _, v := range targetDepartList {
var orgPostCont OrgAndPostCont
orgPostCont.OrgId = v.DepartmentId
orgPostCont.PostId = v.PostId
orgPost = append(orgPost, orgPostCont)
orgStr := strconv.FormatInt(v.DepartmentId, 10)
if publicmethod.IsInTrue[string](orgStr, orgList) == false {
orgList = append(orgList, orgStr)
}
postStr := strconv.FormatInt(v.PostId, 10)
if publicmethod.IsInTrue[string](postStr, postList) == false {
postList = append(postList, postStr)
}
}
}
//获取指标关联岗位提报人
var targetReportList []modelskpi.TargetReport
err = overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetReport{}).Select("`department_id`,`post_id`,`man_key`").Where("`state` = 1 AND `type_level` = 1 AND `type` = 2 AND `target_sun_id` = 0 AND `target_bylaws` = 0 AND `target_id` = ?", targetId).Find(&targetReportList).Error
if err != nil {
for _, v := range targetReportList {
var orgPostManCont OrgAndPostManCont
orgPostManCont.OrgId = v.DepartmentId
orgPostManCont.PostId = v.PostId
orgPostManCont.ManKey = v.ReportPerson
orgPostMan = append(orgPostMan, orgPostManCont)
manStr := strconv.FormatInt(v.ReportPerson, 10)
if publicmethod.IsInTrue[string](manStr, manList) == false {
manList = append(manList, manStr)
}
}
}
return
}
// 处理指标细则行政组织与岗位及提报人关系
func HandleOrgOfPostReportRelation(orgPostManList []OrgPostCont) (orgList, postList, manList []string, orgPost []OrgAndPostCont, orgPostMan []OrgAndPostManCont) {
if len(orgPostManList) < 1 {
return
}
for _, v := range orgPostManList {
if publicmethod.IsInTrue[string](v.Id, postList) == false {
var orgPostCont OrgAndPostCont //该细则关联得岗位关系
postList = append(postList, v.Id)
var postCont modelshr.Position
postCont.GetCont(map[string]interface{}{"`id`": v.Id}, "`id`", "administrative_organization")
orgPostCont.PostId = postCont.Id
orgPostCont.OrgId = postCont.AdministrativeOrganization
orgStr := strconv.FormatInt(postCont.AdministrativeOrganization, 10)
if publicmethod.IsInTrue[string](orgStr, orgList) == false {
orgList = append(orgList, orgStr)
}
if len(v.KeyList) > 0 {
for _, kv := range v.KeyList {
if publicmethod.IsInTrue[string](kv, manList) == false {
manList = append(manList, kv)
}
var orgPostManCont OrgAndPostManCont
orgPostManCont.PostId = postCont.Id
orgPostManCont.OrgId = postCont.AdministrativeOrganization
kvInt, _ := strconv.ParseInt(kv, 10, 64)
orgPostManCont.ManKey = kvInt
orgPostMan = append(orgPostMan, orgPostManCont)
}
}
orgPost = append(orgPost, orgPostCont)
}
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-21 15:12:46
@ 功能: 处理岗位指标数据
@ 参数
#targetId 指标ID
#title 栏目名称
@ 返回值
#tableId 栏目Id
#err 处理状态
@ 方法原型
#
*/
func EditPostTableCont(targetId int64, title string) (tableId int64, err error) {
var tableCont modelskpi.PostSonTarget
err = tableCont.GetCont(map[string]interface{}{"`title`": title, "`parent_id`": targetId})
if err != nil {
var sunTargetCont modelskpi.PostSonTarget
sunTargetCont.Title = title //标题"`
sunTargetCont.ParentId = targetId //归属指标"`
sunTargetCont.Time = time.Now().Unix() //创建时间"`
sunTargetCont.State = 1 //状态(1:启用;2:禁用;3:删除)"`
err = overall.CONSTANT_DB_KPI.Create(&sunTargetCont).Error
tableId = sunTargetCont.Id
} else {
tableId = tableCont.Id
editCont := publicmethod.MapOut[string]()
if tableCont.State != 1 {
editCont["state"] = 1
}
if len(editCont) > 0 {
editCont["time"] = time.Now().Unix()
var editInfo modelskpi.PostSonTarget
err = editInfo.EiteCont(map[string]interface{}{"`id`": tableCont.Id}, editCont)
}
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-23 08:15:29
@ 功能: 修改岗位指标细则新版
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) EditPostDetailsCont(c *gin.Context) {
var receivedValue EditDetailsCont
c.ShouldBindJSON(&receivedValue)
if receivedValue.Id == "" {
publicmethod.Result(101, receivedValue, c)
return
}
if receivedValue.Title == "" {
publicmethod.Result(1, receivedValue, c, "请输入考核内容!")
return
}
if receivedValue.PunishType == 0 {
receivedValue.PunishType = 3
}
switch receivedValue.PunishType {
case 2:
if receivedValue.CashStandard == "" {
publicmethod.Result(1, receivedValue, c, "请输入现金考核标准!")
return
}
case 3:
if receivedValue.Standard == "" {
publicmethod.Result(1, receivedValue, c, "请输入考核标准!")
return
}
if receivedValue.Unit == "" {
publicmethod.Result(1, receivedValue, c, "请输入计量单位!")
return
}
if receivedValue.CashStandard == "" {
publicmethod.Result(1, receivedValue, c, "请输入现金考核标准!")
return
}
default:
if receivedValue.Standard == "" {
publicmethod.Result(1, receivedValue, c, "请输入考核标准!")
return
}
if receivedValue.Unit == "" {
publicmethod.Result(1, receivedValue, c, "请输入计量单位!")
return
}
}
if receivedValue.Types == 0 {
receivedValue.Types = 2
}
if len(receivedValue.Inspemethod) < 1 {
publicmethod.Result(1, receivedValue, c, "请选择检查方式!")
return
}
if receivedValue.Cycle == 0 {
receivedValue.Cycle = 4
}
if receivedValue.Frequency == 0 {
receivedValue.Frequency = 1
}
var orgPost []OrgAndPostCont
var orgPostMan []OrgAndPostManCont
var orgList []string
var postList []string
var manList []string
if len(receivedValue.PostandExport) < 1 {
publicmethod.Result(1, receivedValue, c, "请设定岗位及提报人!")
return
} else {
for _, v := range receivedValue.PostandExport {
var orgPostCont OrgAndPostCont
orgIdInt, _ := strconv.ParseInt(v.OrgId, 10, 64)
orgPostCont.OrgId = orgIdInt
postIdInt, _ := strconv.ParseInt(v.Id, 10, 64)
orgPostCont.PostId = postIdInt
orgPost = append(orgPost, orgPostCont)
if publicmethod.IsInTrue[string](v.OrgId, orgList) == false {
orgList = append(orgList, v.OrgId)
}
if publicmethod.IsInTrue[string](v.Id, postList) == false {
postList = append(postList, v.Id)
}
if len(v.Operator) < 1 {
publicmethod.Result(1, receivedValue, c, "有未设定的岗位提报人!请检查!")
return
} else {
for _, mv := range v.Operator {
var orgPostManCont OrgAndPostManCont
orgPostManCont.OrgId = orgIdInt
orgPostManCont.PostId = postIdInt
mvIdInt, _ := strconv.ParseInt(mv, 10, 64)
orgPostManCont.ManKey = mvIdInt
orgPostMan = append(orgPostMan, orgPostManCont)
if publicmethod.IsInTrue[string](mv, manList) == false {
manList = append(manList, mv)
}
}
}
}
}
wher := publicmethod.MapOut[string]()
wher["`id`"] = receivedValue.Id
var oldDetailsCont modelskpi.PostTargetDetails
err := oldDetailsCont.GetCont(wher)
if err != nil {
publicmethod.Result(1, receivedValue, c, "细则不存在!请检查!")
return
}
editCont := publicmethod.MapOut[string]()
if receivedValue.Title != oldDetailsCont.Title {
editCont["`title`"] = receivedValue.Title
}
if receivedValue.PunishType != oldDetailsCont.Punishmode {
editCont["`punishmode`"] = receivedValue.PunishType
}
if receivedValue.Standard != "" {
minSecor, MaxSecor := departmentpc.SplitCriteria(receivedValue.Standard)
if minSecor != oldDetailsCont.MinScore {
editCont["`min_score`"] = minSecor
}
if MaxSecor != oldDetailsCont.MaxScore {
editCont["`max_score`"] = MaxSecor
}
}
if receivedValue.Unit != oldDetailsCont.Company {
editCont["`company`"] = receivedValue.Unit
}
if receivedValue.CashStandard != "" {
minMoneys, MaxMoneys := departmentpc.SplitCriteria(receivedValue.CashStandard)
if minMoneys != oldDetailsCont.Minmoney {
editCont["`minmoney`"] = minMoneys
}
if MaxMoneys != oldDetailsCont.Maxmoney {
editCont["`maxmoney`"] = MaxMoneys
}
}
if receivedValue.Types != oldDetailsCont.AddReduce {
editCont["`add_reduce`"] = receivedValue.Types
}
if len(receivedValue.Inspemethod) > 0 {
insStr := strings.Join(receivedValue.Inspemethod, ",")
if insStr != oldDetailsCont.CensorType {
editCont["`censor_type`"] = insStr
}
}
if receivedValue.Cycle != oldDetailsCont.Cycles {
editCont["`cycle`"] = receivedValue.Cycle
}
if receivedValue.Frequency != oldDetailsCont.CensorRate {
editCont["`censor_rate`"] = receivedValue.Frequency
}
if receivedValue.Evidence != oldDetailsCont.CensorCont {
editCont["`censor_cont`"] = receivedValue.Evidence
}
if receivedValue.Remarks != oldDetailsCont.Content {
editCont["`content`"] = receivedValue.Remarks
}
editCont["`paretment`"] = strings.Join(orgList, ",")
editCont["`paretment_post`"] = strings.Join(postList, ",")
editCont["`reportary`"] = strings.Join(manList, ",")
if len(editCont) > 0 {
editCont["`time`"] = time.Now().Unix()
var editInfoCont modelskpi.PostTargetDetails
err = editInfoCont.EiteCont(wher, editCont)
if err != nil {
publicmethod.Result(106, err, c)
return
}
}
var targetCont modelskpi.PostTarget
targetCont.GetCont(map[string]interface{}{"`id`": oldDetailsCont.ParentId})
syncSeting.Add(1)
go PostDetailsBaseOrgPost(targetCont.Dimension, targetCont.Id, oldDetailsCont.ParentIdSun, oldDetailsCont.Id, targetCont.Type, 3, 2, orgPost)
syncSeting.Add(1)
go PostDetailsBaseOrgPostMan(targetCont.Dimension, targetCont.Id, oldDetailsCont.ParentIdSun, oldDetailsCont.Id, targetCont.Type, 3, 2, orgPostMan)
syncSeting.Wait()
publicmethod.Result(0, err, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-23 13:49:06
@ 功能: 根据栏目添加细则列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) AddTableDetailsList(c *gin.Context) {
var receivedValue AddTablePostDetails
c.ShouldBindJSON(&receivedValue)
if receivedValue.TargetId == "" {
publicmethod.Result(101, receivedValue, c)
return
}
if receivedValue.TableId == "" {
publicmethod.Result(1, receivedValue, c, "未知栏目!请选择或输入栏目!")
return
}
iswrite := true
if len(receivedValue.DetailsList) < 1 {
publicmethod.Result(1, receivedValue, c, "至少要有一条细则!")
return
} else {
for _, v := range receivedValue.DetailsList {
if v.Title == "" {
iswrite = false
break
}
switch v.PunishType {
case 2:
if v.CashStandard == "" {
iswrite = false
break
} else {
testInt := strings.Split(v.CashStandard, "-")
testLen := len(testInt)
_, oenErr := strconv.ParseFloat(testInt[0], 10)
if oenErr != nil {
iswrite = false
break
} else {
if testLen > 1 {
_, twoErr := strconv.ParseFloat(testInt[testLen-1], 10)
if twoErr != nil {
iswrite = false
break
}
}
}
}
case 3:
if v.CashStandard == "" || v.Standard == "" {
iswrite = false
break
} else {
testInt := strings.Split(v.CashStandard, "-")
testLen := len(testInt)
_, oenErr := strconv.ParseFloat(testInt[0], 10)
if oenErr != nil {
iswrite = false
break
} else {
if testLen > 1 {
_, twoErr := strconv.ParseFloat(testInt[testLen-1], 10)
if twoErr != nil {
iswrite = false
break
}
}
}
testIntTwo := strings.Split(v.Standard, "-")
testLenTwo := len(testIntTwo)
_, oenErrTwo := strconv.ParseFloat(testIntTwo[0], 10)
if oenErrTwo != nil {
iswrite = false
break
} else {
if testLenTwo > 1 {
_, twoErr := strconv.ParseFloat(testIntTwo[testLenTwo-1], 10)
if twoErr != nil {
iswrite = false
break
}
}
}
}
default:
if v.Standard == "" {
iswrite = false
break
} else {
testInt := strings.Split(v.Standard, "-")
testLen := len(testInt)
_, oenErr := strconv.ParseFloat(testInt[0], 10)
if oenErr != nil {
iswrite = false
break
} else {
if testLen > 1 {
_, twoErr := strconv.ParseFloat(testInt[testLen-1], 10)
if twoErr != nil {
iswrite = false
break
}
}
}
}
}
if len(v.Inspemethod) < 1 {
iswrite = false
break
}
}
}
if !iswrite {
publicmethod.Result(1, receivedValue, c, "至少有一条细则内容填写不规范!请检查!")
return
}
var targetCont modelskpi.PostTarget
err := targetCont.GetCont(map[string]interface{}{"`id`": receivedValue.TargetId})
if err != nil {
publicmethod.Result(1, receivedValue, c, "指标不存在!不允许添加细则内容!")
return
}
orgList, postList, manList, orgPost, orgPostMan := GetTargetBaseDepartMan(targetCont.Id)
// tableId, err := EditPostTableCont(targetCont.Id, receivedValue.TableName)
// if err != nil {
// publicmethod.Result(1, receivedValue, c, "没有栏目信息!栏目添加失败!请重新提交!")
// return
// }
tableId, _ := strconv.ParseInt(receivedValue.TableId, 10, 64)
var tableDepartList []string
var tablePostList []string
var tableDepartPost []OrgAndPostCont
var tableDepartPostMan []OrgAndPostManCont
//处理岗位细则内容
for _, v := range receivedValue.DetailsList {
var targetDetailsInfo modelskpi.PostTargetDetails
targetDetailsInfo.Title = v.Title //指标细则"`
targetDetailsInfo.Content = v.Remarks //指标说明"`
targetDetailsInfo.ParentId = targetCont.Id //归属指标栏目"`
targetDetailsInfo.ParentIdSun = tableId //归属指标子栏目"`
targetDetailsInfo.State = 1 //状态(1:启用;2:禁用;3:删除)"`
targetDetailsInfo.AddTime = time.Now().Unix() //制定时间"`
targetDetailsInfo.MinScore, targetDetailsInfo.MaxScore = departmentpc.SplitCriteria(v.Standard) //最小分*100保存"` && 最大分*100保存"`
targetDetailsInfo.Company = v.Unit //单位"`
targetDetailsInfo.AddReduce = v.Types //1:减少;2:增加;3:无属性,现场确认加或减"`
targetDetailsInfo.CensorType = strings.Join(v.Inspemethod, ",") //检查方式"`
targetDetailsInfo.CensorCont = v.Evidence //检查依据"`
targetDetailsInfo.CensorRate = v.Frequency //检查频次"`
targetDetailsInfo.Cycles = v.Cycle //1:班;2:天;3:周;4:月;5:季度;6:年"`
targetDetailsInfo.CycleAttres = 1 //辅助计数"`
if len(v.PostandExport) > 0 {
orgList, postList, manList, orgPost, orgPostMan = HandleOrgOfPostReportRelation(v.PostandExport)
// orgListJson, _ := json.Marshal(orgList)
// postListJson, _ := json.Marshal(postList)
// manListJson, _ := json.Marshal(manList)
// orgPostJson, _ := json.Marshal(orgPost)
// orgPostManJson, _ := json.Marshal(orgPostMan)
// fmt.Printf("明细表关联关系--->%v--->%v--->%v--->%v--->%v\n", string(orgListJson), string(postListJson), string(manListJson), string(orgPostJson), string(orgPostManJson))
}
targetDetailsInfo.Paretment = strings.Join(orgList, ",") //接受考核的部门"`
targetDetailsInfo.ParetmentPost = strings.Join(postList, ",") //接受考核的部门岗位"`
targetDetailsInfo.Reportary = strings.Join(manList, ",") //提报人"`
targetDetailsInfo.Punishmode = v.PunishType //处罚方式 1:扣分;2:现金处罚;3:扣分加现金"`
targetDetailsInfo.Minmoney, targetDetailsInfo.Maxmoney = departmentpc.SplitCriteria(v.CashStandard) //最高罚款"`&& 最低罚款"`
addErr := overall.CONSTANT_DB_KPI.Create(&targetDetailsInfo).Error //添加指标
if addErr == nil {
syncSeting.Add(1)
go PostDetailsBaseOrgPost(targetCont.Dimension, targetCont.Id, tableId, targetDetailsInfo.Id, targetCont.Type, 3, 2, orgPost)
syncSeting.Add(1)
go PostDetailsBaseOrgPostMan(targetCont.Dimension, targetCont.Id, tableId, targetDetailsInfo.Id, targetCont.Type, 3, 2, orgPostMan)
}
//处理指标关联数据
for _, ov := range orgList {
if publicmethod.IsInTrue[string](ov, tableDepartList) == false {
tableDepartList = append(tableDepartList, ov)
}
}
for _, pv := range postList {
if publicmethod.IsInTrue[string](pv, tablePostList) == false {
tablePostList = append(tablePostList, pv)
}
}
for _, opv := range orgPost {
if JudgeDeparPost(opv, tableDepartPost) == false {
tableDepartPost = append(tableDepartPost, opv)
}
}
for _, opvm := range orgPostMan {
if JudgeDeparPostMan(opvm, tableDepartPostMan) == false {
tableDepartPostMan = append(tableDepartPostMan, opvm)
}
}
}
// one, _ := json.Marshal(tableDepartList)
// two, _ := json.Marshal(tablePostList)
// three, _ := json.Marshal(tableDepartPost)
// four, _ := json.Marshal(tableDepartPostMan)
// fmt.Printf("栏目明细表关联关系--->%v--->%v--->%v--->%v\n", string(one), string(two), string(three), string(four))
editTabelInfo := publicmethod.MapOut[string]()
tableDepartStr := strings.Join(tableDepartList, ",")
editTabelInfo["`depart`"] = tableDepartStr
tablePostStr := strings.Join(tablePostList, ",")
editTabelInfo["`depart_post`"] = tablePostStr
editTabelInfo["`time`"] = time.Now().Unix()
var editTableCont modelskpi.PostSonTarget
editTableCont.EiteCont(map[string]interface{}{"`id`": tableId}, editTabelInfo)
syncSeting.Add(1)
go PostDetailsBaseOrgPost(targetCont.Dimension, targetCont.Id, tableId, 0, targetCont.Type, 2, 2, tableDepartPost)
syncSeting.Add(1)
go PostDetailsBaseOrgPostMan(targetCont.Dimension, targetCont.Id, tableId, 0, targetCont.Type, 2, 2, tableDepartPostMan)
syncSeting.Wait()
publicmethod.Result(0, receivedValue, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-23 14:58:36
@ 功能: 获取岗位栏目关联部门相关岗位及提报人(新版)
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) GetNewTableDepartToPostMan(c *gin.Context) {
var receivedValue publicmethod.PublicId
err := c.ShouldBindJSON(&receivedValue)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if receivedValue.Id == "" {
publicmethod.Result(101, receivedValue, c)
return
}
var postTargetCont modelskpi.PostSonTarget
err = postTargetCont.GetCont(map[string]interface{}{"`id`": receivedValue.Id})
if err != nil {
publicmethod.Result(107, err, c)
return
}
var sendCont OutTableDepatPostMan
sendCont.Name = postTargetCont.Title
var tarDepatContList []modelskpi.TargetDepartment
err = overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetDepartment{}).Select("`department_id`,`post_id`").Where("`state` = 1 AND `type` = 2 AND `level` = 2 AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = 0", postTargetCont.ParentId, postTargetCont.Id).Find(&tarDepatContList).Error
if err != nil && len(tarDepatContList) < 1 {
publicmethod.Result(107, err, c)
return
}
for _, v := range tarDepatContList {
orgIdstr := strconv.FormatInt(v.DepartmentId, 10)
if publicmethod.IsInTrue[string](orgIdstr, sendCont.OrgId) == false {
sendCont.OrgId = append(sendCont.OrgId, orgIdstr)
}
postIdstr := strconv.FormatInt(v.PostId, 10)
if publicmethod.IsInTrue[string](postIdstr, sendCont.PostId) == false {
sendCont.PostId = append(sendCont.PostId, postIdstr)
}
var orgPostInfo OrgPostCont
orgPostInfo.Id = postIdstr
orgPostInfo.OrgId = orgIdstr
var postInfo modelshr.Position
postInfo.GetCont(map[string]interface{}{"`id`": v.PostId}, "`name`")
_, _, departmentId, sunDepartId, workShopId := publicmethod.GetOrgStructure(v.DepartmentId)
fmt.Printf("%v------->%v------->%v\n", departmentId, sunDepartId, workShopId)
if departmentId != 0 && sunDepartId != 0 && workShopId != 0 {
if departmentId != workShopId && sunDepartId != workShopId && departmentId != sunDepartId {
orgPostInfo.Name = fmt.Sprintf("%v/%v/%v/%v", getOrgCont(departmentId), getOrgCont(sunDepartId), getOrgCont(workShopId), postInfo.Name)
} else if departmentId != workShopId && sunDepartId != workShopId && departmentId == sunDepartId {
orgPostInfo.Name = fmt.Sprintf("%v/%v/%v", getOrgCont(departmentId), getOrgCont(sunDepartId), postInfo.Name)
} else {
orgPostInfo.Name = fmt.Sprintf("%v/%v", getOrgCont(departmentId), postInfo.Name)
}
} else if departmentId != 0 && sunDepartId != 0 && workShopId == 0 {
if departmentId != sunDepartId {
orgPostInfo.Name = fmt.Sprintf("%v/%v/%v", getOrgCont(departmentId), getOrgCont(sunDepartId), postInfo.Name)
} else {
orgPostInfo.Name = fmt.Sprintf("%v/%v", getOrgCont(departmentId), postInfo.Name)
}
} else {
orgPostInfo.Name = fmt.Sprintf("%v/%v", getOrgCont(departmentId), postInfo.Name)
}
orgPostInfo.KeyList, orgPostInfo.Child = GetReportAndAllDepartMan(postTargetCont.ParentId, postTargetCont.Id, 0, 0, v.PostId, departmentId, 2, 2)
sendCont.OrgAndPostList = append(sendCont.OrgAndPostList, orgPostInfo)
}
publicmethod.Result(0, sendCont, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-23 15:29:30
@ 功能: 编辑岗位子栏目内容(新版)
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) EditSonTargetContNew(c *gin.Context) {
var receivedValue EditTableCont
c.ShouldBindJSON(&receivedValue)
if receivedValue.Id == "" {
publicmethod.Result(101, receivedValue, c)
return
}
if receivedValue.Title == "" {
publicmethod.Result(1, receivedValue, c, "请输入考核内容!")
return
}
var orgPost []OrgAndPostCont
var orgPostMan []OrgAndPostManCont
var orgList []string
var postList []string
var manList []string
if len(receivedValue.PostandExport) < 1 {
publicmethod.Result(1, receivedValue, c, "请设定岗位及提报人!")
return
} else {
for _, v := range receivedValue.PostandExport {
var orgPostCont OrgAndPostCont
orgIdInt, _ := strconv.ParseInt(v.OrgId, 10, 64)
orgPostCont.OrgId = orgIdInt
postIdInt, _ := strconv.ParseInt(v.Id, 10, 64)
orgPostCont.PostId = postIdInt
orgPost = append(orgPost, orgPostCont)
if publicmethod.IsInTrue[string](v.OrgId, orgList) == false {
orgList = append(orgList, v.OrgId)
}
if publicmethod.IsInTrue[string](v.Id, postList) == false {
postList = append(postList, v.Id)
}
if len(v.KeyList) < 1 {
publicmethod.Result(1, receivedValue, c, "有未设定的岗位提报人!请检查!")
return
} else {
for _, mv := range v.KeyList {
var orgPostManCont OrgAndPostManCont
orgPostManCont.OrgId = orgIdInt
orgPostManCont.PostId = postIdInt
mvIdInt, _ := strconv.ParseInt(mv, 10, 64)
orgPostManCont.ManKey = mvIdInt
orgPostMan = append(orgPostMan, orgPostManCont)
if publicmethod.IsInTrue[string](mv, manList) == false {
manList = append(manList, mv)
}
}
}
}
}
wher := publicmethod.MapOut[string]()
wher["`id`"] = receivedValue.Id
var oldDetailsCont modelskpi.PostSonTarget
err := oldDetailsCont.GetCont(wher)
if err != nil {
publicmethod.Result(1, receivedValue, c, "细则不存在!请检查!")
return
}
editCont := publicmethod.MapOut[string]()
if receivedValue.Title != oldDetailsCont.Title {
editCont["`title`"] = receivedValue.Title
}
orgString := strings.Join(orgList, ",")
if orgString != oldDetailsCont.Depart {
editCont["`depart`"] = orgString
}
postString := strings.Join(postList, ",")
if postString != oldDetailsCont.DepartPost {
editCont["`depart_post`"] = postList
}
if oldDetailsCont.State != 1 {
editCont["`state`"] = 1
}
if len(editCont) > 0 {
editCont["`time`"] = time.Now().Unix()
var editTabInfo modelskpi.PostSonTarget
err = editTabInfo.EiteCont(wher, editCont)
}
// sendData := publicmethod.MapOut[string]()
// sendData["orgPost"] = orgPost
// sendData["orgPostMan"] = orgPostMan
// sendData["orgList"] = orgList
// sendData["postList"] = postList
// sendData["manList"] = manList
// sendData["oldDetailsCont"] = oldDetailsCont
var targetCont modelskpi.PostTarget
targetCont.GetCont(map[string]interface{}{"`id`": oldDetailsCont.ParentId})
syncSeting.Add(1)
go PostDetailsBaseOrgPost(targetCont.Dimension, targetCont.Id, oldDetailsCont.Id, 0, targetCont.Type, 2, 2, orgPost)
syncSeting.Add(1)
go PostDetailsBaseOrgPostMan(targetCont.Dimension, targetCont.Id, oldDetailsCont.Id, 0, targetCont.Type, 2, 2, orgPostMan)
syncSeting.Wait()
publicmethod.Result(0, err, c)
}