package departmentpc
import (
"encoding/json"
"fmt"
"key_performance_indicators/middleware/snowflake"
"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 - 0 8 11 : 33 : 0 9
@ 功能 : 添加部门指标 ( 新版 )
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) NewAddDepartmentTarget ( c * gin . Context ) {
var receivedValue addTargetContDepart
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if receivedValue . Name == "" {
publicmethod . Result ( 101 , err , c , "请输入指标名称!!" )
return
}
if receivedValue . Nature == 0 {
receivedValue . Nature = 1
}
if receivedValue . Share == 0 {
if len ( receivedValue . AcceptDepartmentId ) > 0 {
receivedValue . Share = 2
} else {
receivedValue . Share = 1
}
} else {
if receivedValue . Share > 1 {
if len ( receivedValue . AcceptDepartmentId ) < 1 {
publicmethod . Result ( 101 , err , c , "您选择了此指标为指定部门使用!但您未指定具体使用部门!请指定相关使用部门!" )
return
}
}
}
if receivedValue . Unit == "" {
publicmethod . Result ( 101 , err , c , "请输入计量单位!" )
return
}
if receivedValue . Cycles == 0 {
receivedValue . Cycles = 4
}
if receivedValue . CycleAttres == 0 {
receivedValue . CycleAttres = 1
}
if receivedValue . ScoringMethod == 0 {
receivedValue . ScoringMethod = 1
}
JudgeIsTrue := publicmethod . MapOut [ string ] ( )
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . EvaluationTarget { } ) . Select ( "et_title" ) . Where ( "`et_title` = ? AND `et_type` = ? AND `et_dimension` = ?" , receivedValue . Name , receivedValue . Nature , receivedValue . Dimension ) . First ( & JudgeIsTrue ) . Error
if err == nil {
publicmethod . Result ( 101 , err , c , "此考核指标已经存在!请不要重复添加!" )
return
}
var uuId int64 = 0
snowflakeId , snowflakeErr := snowflake . NewWorker ( 1 )
if snowflakeErr != nil {
uuId = publicmethod . TableNumber ( )
} else {
uuId = snowflakeId . GetId ( )
}
var saveData modelskpi . EvaluationTarget
saveData . Title = receivedValue . Name //指标名称"`
saveData . Type = receivedValue . Nature //1:定性考核;2:定量考核"`
saveData . State = 1 //状态(1:启用;2:禁用;3:删除)"`
saveData . AddTime = time . Now ( ) . Unix ( ) //制定时间"`
saveData . Share = 1 //1:共用;2:私用"`
saveData . RelevantDepartments = strings . Join ( receivedValue . AcceptDepartmentId , "," ) //相关部门"`
dimensionId , _ := strconv . ParseInt ( receivedValue . Dimension , 10 , 64 )
saveData . Dimension = dimensionId //维度"`
saveData . Key = uuId //UUID"`
saveData . Report = strings . Join ( receivedValue . Operator , "," ) //上报人"`
saveData . Uniteing = receivedValue . Unit //计量单位"`
saveData . Cycles = receivedValue . Cycles //1:班;2:天;3:周;4:月;5:季度;6:年"`
saveData . CycleAttres = receivedValue . CycleAttres //辅助计数"`
saveData . VisibleRange = strings . Join ( receivedValue . VisibleRangeDepart , "," ) //可见范围"`
saveData . VisibleRangeGroup = strings . Join ( receivedValue . VisibleRangeGroup , "," ) //可见范围(集团)"`
saveData . ScoringMethod = receivedValue . ScoringMethod //计分方式(1:自动;2:手动)"`
err = overall . CONSTANT_DB_KPI . Create ( & saveData ) . Error
if err != nil {
publicmethod . Result ( 104 , err , c )
return
}
SyncSeting . Add ( 1 )
go DepartAboutTarget ( dimensionId , saveData . Id , 0 , 0 , receivedValue . AcceptDepartmentId , 1 , receivedValue . Nature , 1 )
SyncSeting . Add ( 1 )
go DepartAndReportAboutTarget ( dimensionId , saveData . Id , 0 , 0 , receivedValue . AcceptDepartmentId , receivedValue . Operator , 1 , receivedValue . Nature , 1 )
SyncSeting . Wait ( )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 02 - 0 8 11 : 33 : 17
@ 功能 : 处理指标与部门关联关系
@ 参数
#
@ 返回值
# dimensionId 维度
# targetId 指标
# targetSunId 栏目
# targetBylaws 细则
# departmentId 部门
# postId 岗位
# typeInt 类型 ( 1 : 指标 ; 2 : 子目标 ; 3 : 细则 )
# class 属性1 : 定性考核 ; 2 : 定量考核
# level 级别 ( 1 : 部门级 ; 2 : 岗位级 )
@ 方法原型
# DepartAboutTarget ( dimensionId , targetId , targetSunId , targetBylaws int64 , departmentId [ ] string , typeInt , class , level int )
* /
func DepartAboutTarget ( dimensionId , targetId , targetSunId , targetBylaws int64 , departmentId [ ] string , typeInt , class , level int ) {
defer SyncSeting . Done ( )
if typeInt == 0 {
typeInt = 1
}
if class == 0 {
class = 1
}
if level == 0 {
level = 1
}
//将不属于该指标细则的部门至禁用
otherSaveData := publicmethod . MapOut [ string ] ( )
otherSaveData [ "`state`" ] = 2
otherSaveData [ "`time`" ] = time . Now ( ) . Unix ( )
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Where ( "`post_id` = 0 AND `level` = ? AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ? AND `type` = ?" , level , targetId , targetSunId , targetBylaws , typeInt ) . Not ( map [ string ] interface { } { "department_id" : departmentId } ) . Updates ( & otherSaveData )
//循环处理行政组织
for _ , v := range departmentId {
var tarDepartCont modelskpi . TargetDepartment
saveErr := tarDepartCont . GetCont ( map [ string ] interface { } { "`level`" : level , "`target_id`" : targetId , "`target_sun_id`" : targetSunId , "`target_bylaws`" : targetBylaws , "`department_id`" : v , "`post_id`" : 0 } , "`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 {
xiZe := 3
if targetId != 0 && targetSunId != 0 && targetBylaws == 0 {
xiZe = 2
} else if targetId != 0 && targetSunId == 0 && targetBylaws == 0 {
xiZe = 1
}
tarDepartCont . Dimension = dimensionId
tarDepartCont . TargetId = targetId //指标ID"`
tarDepartCont . TargetSunId = targetSunId //子目标"`
tarDepartCont . TargetBylaws = targetBylaws //指标细则"`
tarDepartCont . Type = xiZe //类型(1:指标;2:子目标;3:细则)"`
departId , _ := strconv . ParseInt ( v , 10 , 64 )
tarDepartCont . DepartmentId = departId //部门ID"`
tarDepartCont . PostId = 0 //岗位ID"`
tarDepartCont . State = 1 //状态(1:启用;2:禁用;3:删除)"`
tarDepartCont . Time = time . Now ( ) . Unix ( ) //写入时间"`
tarDepartCont . Class = class //1:定性考核;2:定量考核"`
tarDepartCont . Level = level //级别(1:部门级;2:岗位级)"`
overall . CONSTANT_DB_KPI . Create ( & tarDepartCont )
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 02 - 0 8 13 : 05 : 36
@ 功能 : 处理指标与部门和提报人关联关系
@ 参数
# dimensionId 维度
# targetId 指标
# targetSunId 栏目
# targetBylaws 细则
# departmentId 部门
# typeInt 类型 ( 1 : 公司级 ; 2 : 部门级 )
# manKey 用户Key
# class 属性1 : 定性考核 ; 2 : 定量考核
# typeLevel 级别 ( 1 : 指标 ; 2 : 子目标 ; 3 : 细则 )
@ 返回值
#
@ 方法原型
# DepartAndReportAboutTarget ( dimensionId , targetId , targetSunId , targetBylaws int64 , departmentId , manKey [ ] string , typeInt , class , typeLevel int )
* /
func DepartAndReportAboutTarget ( dimensionId , targetId , targetSunId , targetBylaws int64 , departmentId , manKey [ ] string , typeInt , class , typeLevel int ) {
defer SyncSeting . Done ( )
if typeInt == 0 {
typeInt = 1
}
if class == 0 {
class = 1
}
if typeLevel == 0 {
typeLevel = 1
}
fmt . Printf ( "管理部门提报人---->\ndimensionId------->%v\ntargetId------->%v\ntargetSunId------->%v\ntargetBylaws------->%v\ndepartmentId------->%v\nmanKey------->%v\ntypeInt------->%v\nclass------->%v\ntypeLevel------->%v\n" , dimensionId , targetId , targetSunId , targetBylaws , departmentId , manKey , typeInt , class , typeLevel )
//循环遍历部门
for _ , dv := range departmentId {
//将不属于该指标细则的部门至禁用
otherSaveData := publicmethod . MapOut [ string ] ( )
otherSaveData [ "`state`" ] = 2
otherSaveData [ "`time`" ] = time . Now ( ) . Unix ( )
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Where ( "`post_id` = 0 AND `type_level` = ? AND `type` = ? AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ? AND department_id = ?" , typeLevel , typeInt , targetId , targetSunId , targetBylaws , dv ) . Not ( map [ string ] interface { } { "man_key" : manKey } ) . Updates ( & otherSaveData )
//循环遍历人员
for _ , v := range manKey {
//获取评价人部门
var manCont modelshr . PersonArchives
manCont . GetCont ( map [ string ] interface { } { "`key`" : v } , "`maindeparment`" )
var tarReportCont modelskpi . TargetReport
saveErr := tarReportCont . GetCont ( map [ string ] interface { } { "`type_level`" : typeLevel , "`post_id`" : 0 , "`type`" : typeInt , "`target_id`" : targetId , "`target_sun_id`" : targetSunId , "`target_bylaws`" : targetBylaws , "`department_id`" : dv , "`man_key`" : v } , "`id`" , "`state`" )
if saveErr == nil {
if tarReportCont . State != 1 {
tarReportCont . EiteCont ( map [ string ] interface { } { "`id`" : tarReportCont . Id } , map [ string ] interface { } { "`state`" : 1 , "`man_department`" : manCont . MainDeparment , "`time`" : time . Now ( ) . Unix ( ) } )
}
// fmt.Printf("获取评价人部门----编辑------>%v\n", tarReportCont)
} else {
xiZe := 3
if targetId != 0 && targetSunId != 0 && targetBylaws == 0 {
xiZe = 2
} else if targetId != 0 && targetSunId == 0 && targetBylaws == 0 {
xiZe = 1
}
var tarReportContAdd modelskpi . TargetReport
tarReportContAdd . Dimension = dimensionId //维度
tarReportContAdd . TargetId = targetId //指标ID"`
tarReportContAdd . TargetSunId = targetSunId //子目标"`
tarReportContAdd . TargetBylaws = targetBylaws //指标细则"`
dvInt , _ := strconv . ParseInt ( dv , 10 , 64 )
tarReportContAdd . DepartmentId = dvInt //部门ID"`
tarReportContAdd . PostId = 0 //岗位ID"`
tarReportContAdd . Type = typeInt //类型(1:公司级;2:部门级)"`
tarReportContAdd . State = 1 //状态(1:启用;2:禁用;3:删除)"`
reportId , _ := strconv . ParseInt ( v , 10 , 64 )
tarReportContAdd . ReportPerson = reportId //上报人"`
tarReportContAdd . ManDepartment = manCont . MainDeparment //提报人所在部门"`
tarReportContAdd . Time = time . Now ( ) . Unix ( ) //写入时间"`
tarReportContAdd . Class = class //1:定性考核;2:定量考核"`
tarReportContAdd . Level = xiZe //1:指标;2:子目标;3:细则
overall . CONSTANT_DB_KPI . Create ( & tarReportContAdd )
// fmt.Printf("获取评价人部门----新增------>%v\n", tarReportContAdd)
}
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 02 - 0 8 13 : 47 : 54
@ 功能 : 删除部门指标
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) TargetChangeState ( c * gin . Context ) {
var receivedValue publicmethod . PublicState
c . ShouldBindJSON ( & receivedValue )
if receivedValue . Id == "" {
publicmethod . Result ( 101 , receivedValue , c , "参数错误!!" )
return
}
if receivedValue . State == 0 {
receivedValue . State = 1
}
if receivedValue . IsTrue == 0 {
receivedValue . IsTrue = 2
}
where := publicmethod . MapOut [ string ] ( )
where [ "et_id" ] = receivedValue . Id
var targetCont modelskpi . EvaluationTarget
err := targetCont . GetCont ( where , "et_id" )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
softDel := 1
if receivedValue . State == 3 && receivedValue . IsTrue == 1 {
//强制删除
//判断该指标是否在使用中,使用中的只能软删除
var epIdList [ ] int64
overall . CONSTANT_DB_KPI . Model ( & modelskpi . EvaluationProcess { } ) . Select ( "`ep_id`" ) . Where ( "FIND_IN_SET(?,`ep_target`)" , receivedValue . Id ) . Find ( & epIdList )
if len ( epIdList ) > 0 {
softDel = 1
} else {
softDel = 2
}
}
delTime := time . Now ( ) . Unix ( )
var editTargetState modelskpi . EvaluationTarget
if softDel == 1 {
//软删除
editTargetState . EiteCont ( where , map [ string ] interface { } { "`et_state`" : receivedValue . State , "`et_time`" : delTime } )
} else {
//硬删除
editTargetState . DelCont ( where )
}
SyncSeting . Add ( 1 )
go SunTargetState ( targetCont . Id , receivedValue . State , softDel ) // 处理目标
SyncSeting . Add ( 1 )
go TargetDatailedState ( targetCont . Id , 0 , receivedValue . State , softDel ) // 处理细则
SyncSeting . Add ( 1 )
go TarDepartState ( targetCont . Id , 0 , 0 , receivedValue . State , softDel , 1 , 1 ) // 处理关联部门
SyncSeting . Add ( 1 )
go TarAboutReport ( targetCont . Id , 0 , 0 , receivedValue . State , softDel , 1 , 1 ) // 处理相关提报人
SyncSeting . Wait ( )
publicmethod . Result ( 0 , err , c )
}
// 处理目标
/ *
# ParentId 指标ID
# state 状态
# isTrue 1 软删 ; 非1 : 硬删除
* /
func SunTargetState ( ParentId int64 , state , isTrue int ) {
defer SyncSeting . Done ( )
if state == 0 {
state = 1
}
if isTrue == 0 {
isTrue = 1
}
var sunTargetCont modelskpi . QualitativeTarget
if isTrue == 1 {
//软删除
if state != 1 {
sunTargetCont . EiteCont ( map [ string ] interface { } { "`q_parent_id`" : ParentId } , map [ string ] interface { } { "`q_state`" : state , "`q_time`" : time . Now ( ) . Unix ( ) } )
} else {
overall . CONSTANT_DB_KPI . Model ( & modelskpi . QualitativeTarget { } ) . Where ( "`q_state` BETWEEN 1 AND 2 AND `q_parent_id` = ?" , ParentId ) . Updates ( map [ string ] interface { } { "`q_state`" : state , "`q_time`" : time . Now ( ) . Unix ( ) } )
}
} else {
sunTargetCont . DelCont ( map [ string ] interface { } { "`q_parent_id`" : ParentId } )
}
}
// 处理细则
/ *
# ParentId 指标ID
# SunID 栏目
# state 状态
# isTrue 1 软删 ; 非1 : 硬删除
* /
func TargetDatailedState ( ParentId , SunID int64 , state , isTrue int ) {
defer SyncSeting . Done ( )
if state == 0 {
state = 1
}
if isTrue == 0 {
isTrue = 1
}
wheAry := publicmethod . MapOut [ string ] ( )
if ParentId != 0 {
wheAry [ "dt_parentid" ] = ParentId
}
if SunID != 0 {
wheAry [ "dt_parentid_sun" ] = SunID
}
var tarDataCont modelskpi . DetailedTarget
if isTrue == 1 {
//软删除
if state != 1 {
tarDataCont . EiteCont ( wheAry , map [ string ] interface { } { "`dt_state`" : state , "`dt_time`" : time . Now ( ) . Unix ( ) } )
} else {
overall . CONSTANT_DB_KPI . Model ( & modelskpi . DetailedTarget { } ) . Where ( "`dt_state` BETWEEN 1 AND 2" ) . Where ( wheAry ) . Updates ( map [ string ] interface { } { "`dt_state`" : state , "`dt_time`" : time . Now ( ) . Unix ( ) } )
}
} else {
tarDataCont . DelCont ( wheAry )
}
}
// 处理关联部门
/ *
# parentId 指标ID
# sunID 栏目
# bylawsId 细则
# state 状态
# isTrue 1 软删 ; 非1 : 硬删除
# level 1 : 部门级 ; 2 : 岗位级
# typeInt 1 : 指标 ; 2 : 子目标 ; 3 : 细则
* /
func TarDepartState ( parentId , sunID , bylawsId int64 , state , isTrue , level , typeInt int ) {
defer SyncSeting . Done ( )
if state == 0 {
state = 1
}
if isTrue == 0 {
isTrue = 1
}
wheAry := publicmethod . MapOut [ string ] ( )
wheAry [ "level" ] = level
wheAry [ "type" ] = typeInt
if parentId != 0 {
wheAry [ "target_id" ] = parentId
}
if sunID != 0 {
wheAry [ "target_sun_id" ] = sunID
}
if bylawsId != 0 {
wheAry [ "target_bylaws" ] = bylawsId
}
var tarDataCont modelskpi . TargetDepartment
if isTrue == 1 {
//软删除
if state != 1 {
tarDataCont . EiteCont ( wheAry , map [ string ] interface { } { "`state`" : state , "`time`" : time . Now ( ) . Unix ( ) } )
} else {
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Where ( "`state` BETWEEN 1 AND 2" ) . Where ( wheAry ) . Updates ( map [ string ] interface { } { "`state`" : state , "`time`" : time . Now ( ) . Unix ( ) } )
}
} else {
tarDataCont . DelCont ( wheAry )
}
}
//处理相关提报人
/ *
# parentId 指标ID
# sunID 栏目
# bylawsId 细则
# state 状态
# isTrue 1 软删 ; 非1 : 硬删除
# level 1 : 部门级 ; 2 : 岗位级
# typeInt 1 : 指标 ; 2 : 子目标 ; 3 : 细则
* /
func TarAboutReport ( parentId , sunID , bylawsId int64 , state , isTrue , level , typeInt int ) {
defer SyncSeting . Done ( )
if state == 0 {
state = 1
}
if isTrue == 0 {
isTrue = 1
}
if level == 0 {
level = 1
}
wheAry := publicmethod . MapOut [ string ] ( )
wheAry [ "type" ] = level
wheAry [ "type_level" ] = typeInt
if parentId != 0 {
wheAry [ "target_id" ] = parentId
}
if sunID != 0 {
wheAry [ "target_sun_id" ] = sunID
}
if bylawsId != 0 {
wheAry [ "target_bylaws" ] = bylawsId
}
var tarDataCont modelskpi . TargetReport
if isTrue == 1 {
//软删除
if state != 1 {
tarDataCont . EiteCont ( wheAry , map [ string ] interface { } { "`state`" : state , "`time`" : time . Now ( ) . Unix ( ) } )
} else {
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Where ( "`state` BETWEEN 1 AND 2" ) . Where ( wheAry ) . Updates ( map [ string ] interface { } { "`state`" : state , "`time`" : time . Now ( ) . Unix ( ) } )
}
} else {
tarDataCont . DelCont ( wheAry )
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 02 - 0 9 0 8 : 40 : 17
@ 功能 : 编辑单一部门指标 ( 新版 )
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) NewEditOneTarget ( c * gin . Context ) {
var receivedValue printOneTargetCont
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if receivedValue . Id == "" {
publicmethod . Result ( 101 , err , c , "请输入指标ID!!" )
return
}
where := publicmethod . MapOut [ string ] ( )
where [ "et_id" ] = receivedValue . Id
var targetCont modelskpi . EvaluationTarget
err = targetCont . GetCont ( where )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
if receivedValue . Name == "" {
publicmethod . Result ( 101 , err , c , "请输入指标名称!!" )
return
}
if receivedValue . Nature == 0 {
receivedValue . Nature = 1
}
if len ( receivedValue . AcceptDepartmentId ) < 1 {
publicmethod . Result ( 101 , err , c , "请指定相关使用部门!" )
return
}
if receivedValue . Unit == "" {
publicmethod . Result ( 101 , err , c , "请输入计量单位!" )
return
}
if receivedValue . Cycles == 0 {
receivedValue . Cycles = 4
}
if receivedValue . CycleAttres == 0 {
receivedValue . CycleAttres = 1
}
if receivedValue . ScoringMethod == 0 {
receivedValue . ScoringMethod = 1
}
saveData := publicmethod . MapOut [ string ] ( )
if receivedValue . Name != targetCont . Title {
JudgeIsTrue := publicmethod . MapOut [ string ] ( )
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . EvaluationTarget { } ) . Select ( "et_title" ) . Where ( "`et_title` = ? AND `et_type` = ? AND `et_dimension` = ?" , receivedValue . Name , receivedValue . Nature , receivedValue . Dimension ) . First ( & JudgeIsTrue ) . Error
if err == nil {
publicmethod . Result ( 101 , err , c , "此考核指标已经存在!请更换名称!" )
return
} else {
saveData [ "et_title" ] = receivedValue . Name
}
}
dimensionId := targetCont . Dimension
if receivedValue . Dimension != "" {
dimensionStr , _ := strconv . ParseInt ( receivedValue . Dimension , 10 , 64 )
if dimensionStr != targetCont . Dimension {
saveData [ "et_dimension" ] = dimensionStr
dimensionId = dimensionStr
}
}
natureVal := targetCont . Type
if receivedValue . Nature != targetCont . Type {
saveData [ "et_type" ] = receivedValue . Nature
natureVal = receivedValue . Nature
}
if receivedValue . Unit != targetCont . Uniteing {
saveData [ "et_unit" ] = receivedValue . Nature
}
if receivedValue . Cycles != targetCont . Cycles {
saveData [ "et_cycle" ] = receivedValue . Cycles
}
if receivedValue . CycleAttres != targetCont . CycleAttres {
saveData [ "et_cycleattr" ] = receivedValue . CycleAttres
}
if receivedValue . ScoringMethod != targetCont . ScoringMethod {
saveData [ "et_scoring_method" ] = receivedValue . ScoringMethod
}
visiblerangegroup := strings . Join ( receivedValue . VisibleRangeGroup , "," )
if visiblerangegroup != targetCont . VisibleRangeGroup {
saveData [ "et_visible_group" ] = visiblerangegroup
}
visiblerange := strings . Join ( receivedValue . VisibleRangeDepart , "," )
if visiblerange != targetCont . VisibleRange {
saveData [ "et_visible_range" ] = visiblerange
}
departIsTreu := false
reportIsTrue := false
//判断关联部门是否改变
if len ( receivedValue . AcceptDepartmentId ) > 0 {
departWhere := publicmethod . MapOut [ string ] ( )
departWhere [ "`target_id`" ] = receivedValue . Id
departWhere [ "`target_sun_id`" ] = 0
departWhere [ "`target_bylaws`" ] = 0
departWhere [ "`type`" ] = 1
departWhere [ "`state`" ] = 1
_ , departAry , _ := GetAboutDepartment ( departWhere , 1 )
departAryStr := strings . Join ( departAry , "," )
accDepart := strings . Join ( receivedValue . AcceptDepartmentId , "," )
if departAryStr != accDepart {
departIsTreu = true
saveData [ "et_relevant_departments" ] = accDepart
SyncSeting . Add ( 1 )
go DepartAboutTarget ( dimensionId , targetCont . Id , 0 , 0 , receivedValue . AcceptDepartmentId , 1 , natureVal , 1 )
}
}
//判断提报人是否改变
if len ( receivedValue . Operator ) > 0 {
reportWhere := publicmethod . MapOut [ string ] ( )
reportWhere [ "`target_id`" ] = receivedValue . Id
reportWhere [ "`target_sun_id`" ] = 0
reportWhere [ "`target_bylaws`" ] = 0
reportWhere [ "`post_id`" ] = 0
reportWhere [ "`type_level`" ] = 1
reportWhere [ "`state`" ] = 1
_ , report , _ := GetAboutReport ( reportWhere , 1 )
reportStr := strings . Join ( report , "," )
accDepart := strings . Join ( receivedValue . Operator , "," )
if reportStr != accDepart {
reportIsTrue = true
saveData [ "et_report" ] = accDepart
SyncSeting . Add ( 1 )
go DepartAndReportAboutTarget ( dimensionId , targetCont . Id , 0 , 0 , receivedValue . AcceptDepartmentId , receivedValue . Operator , 1 , natureVal , 1 )
}
}
if len ( saveData ) > 0 {
saveData [ "et_time" ] = time . Now ( ) . Unix ( )
err = targetCont . EiteCont ( where , saveData )
}
if err != nil {
publicmethod . Result ( 106 , err , c )
return
}
if reportIsTrue == true || departIsTreu == true {
SyncSeting . Wait ( )
}
publicmethod . Result ( 0 , err , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 02 - 0 9 11 : 52 : 32
@ 功能 : 指标关联岗位 ( 新版 )
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) NewDeparmentTargetAboutPost ( c * gin . Context ) {
var receivedValue depTarAboutPost
c . ShouldBindJSON ( & receivedValue )
if receivedValue . Id == "" {
publicmethod . Result ( 101 , receivedValue , c , "请输入指标ID!!" )
return
}
where := publicmethod . MapOut [ string ] ( )
where [ "et_id" ] = receivedValue . Id
var targetCont modelskpi . EvaluationTarget
err := targetCont . GetCont ( where )
jsonCont , _ := json . Marshal ( receivedValue )
fmt . Printf ( "targetCont--------->%v--------->%v\n" , string ( jsonCont ) , err )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
if len ( receivedValue . OrgList ) < 1 {
publicmethod . Result ( 101 , receivedValue , c , "请指定部岗位与指标关联关系!" )
return
}
for _ , v := range receivedValue . OrgList {
if v . Id == "" {
publicmethod . Result ( 1 , receivedValue , c , "存在未选择的部门!" )
return
} else {
if len ( v . Child ) < 1 {
publicmethod . Result ( 1 , receivedValue , c , "存在未选择的岗位!" )
return
} else {
for _ , vc := range v . Child {
if vc . Id == "" {
publicmethod . Result ( 1 , receivedValue , c , "存在未选择的岗位!" )
return
} else {
if len ( vc . Child ) < 1 {
publicmethod . Result ( 1 , receivedValue , c , "存在未选择的提报人!" )
return
} else {
for _ , vvc := range vc . Child {
if vvc . Id == "" {
publicmethod . Result ( 1 , receivedValue , c , "存在未选择的提报人!" )
return
}
}
}
}
}
}
}
}
for _ , v := range receivedValue . OrgList { //抽离部门数据
departId , _ := strconv . ParseInt ( v . Id , 10 , 64 )
var postListId [ ] int64
for _ , vc := range v . Child { //抽离岗位数据
postId , _ := strconv . ParseInt ( vc . Id , 10 , 64 )
postListId = append ( postListId , postId )
SyncSeting . Add ( 1 )
go DepartTargetAboutPost ( targetCont . Dimension , targetCont . Id , 0 , 0 , departId , postId , 1 , targetCont . Type , 1 )
var peopleListId [ ] int64
for _ , vvc := range vc . Child { //抽离人员
peoId , _ := strconv . ParseInt ( vvc . Id , 10 , 64 )
peopleListId = append ( peopleListId , peoId )
SyncSeting . Add ( 1 )
go BeparTargetAboutPostMan ( targetCont . Dimension , targetCont . Id , 0 , 0 , departId , postId , peoId , 1 , targetCont . Type , 1 )
}
if len ( peopleListId ) > 0 {
SyncSeting . Add ( 1 )
go ClearTargetDepartAboutPostMan ( targetCont . Dimension , targetCont . Id , 0 , 0 , departId , postId , peopleListId , 1 , targetCont . Type , 1 )
}
}
if len ( postListId ) > 0 {
//清理不需要的岗位关联
SyncSeting . Add ( 1 )
go ClearTargetDepartAboutPost ( targetCont . Dimension , targetCont . Id , 0 , 0 , departId , postListId , 1 , targetCont . Type , 1 )
}
}
SyncSeting . Wait ( )
publicmethod . Result ( 0 , err , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 02 - 0 9 13 : 55 : 26
@ 功能 : 清理部门指标不在关联的岗位提报人
@ 参数
# dimensionId 维度
# targetId 指标
# targetSunId 栏目
# targetBylaws 细则
# departmentId 部门
# postId 岗位
# manKey 岗位
# typeInt 级别 ( 1 : 部门级 ; 2 : 岗位级 )
# class 属性1 : 定性考核 ; 2 : 定量考核
# level 类型 ( 1 : 指标 ; 2 : 子目标 ; 3 : 细则 )
@ 返回值
#
@ 方法原型
# ClearTargetDepartAboutPostMan ( dimensionId , targetId , targetSunId , targetBylaws , departmentId , postId int64 , manKey [ ] int64 , typeInt , class , level int )
* /
func ClearTargetDepartAboutPostMan ( dimensionId , targetId , targetSunId , targetBylaws , departmentId , postId int64 , manKey [ ] int64 , typeInt , class , level int ) {
defer SyncSeting . Done ( )
if typeInt == 0 {
typeInt = 1
}
if class == 0 {
class = 1
}
if level == 0 {
level = 1
}
//将不属于该指标细则的部门至禁用
otherSaveData := publicmethod . MapOut [ string ] ( )
otherSaveData [ "`state`" ] = 2
otherSaveData [ "`time`" ] = time . Now ( ) . Unix ( )
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Where ( "`target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ? AND `department_id` = ? AND `post_id` = ? AND `type` = ? AND `type_level` = ?" , targetId , targetSunId , targetBylaws , departmentId , postId , typeInt , level ) . Not ( map [ string ] interface { } { "man_key" : manKey } ) . Updates ( & otherSaveData )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 02 - 0 9 14 : 0 9 : 41
@ 功能 : 处理部门指标关联岗位提报人关系
@ 参数
#
@ 返回值
# dimensionId 维度
# targetId 指标
# targetSunId 栏目
# targetBylaws 细则
# departmentId 部门
# postId 岗位
# typeInt 类型 ( 1 : 公司级 ; 2 : 部门级 )
# manKey 用户Key
# class 属性1 : 定性考核 ; 2 : 定量考核
# typeLevel 级别 ( 1 : 指标 ; 2 : 子目标 ; 3 : 细则 )
@ 方法原型
# func BeparTargetAboutPostMan ( dimensionId , targetId , targetSunId , targetBylaws , departmentId , postId , manKey int64 , typeInt , class , typeLevel int )
* /
func BeparTargetAboutPostMan ( dimensionId , targetId , targetSunId , targetBylaws , departmentId , postId , manKey int64 , typeInt , class , typeLevel int ) {
defer SyncSeting . Done ( )
if typeInt == 0 {
typeInt = 1
}
if class == 0 {
class = 1
}
if typeLevel == 0 {
typeLevel = 1
}
var manCont modelshr . PersonArchives
manCont . GetCont ( map [ string ] interface { } { "`key`" : manKey } , "`maindeparment`" )
var targetReporCont modelskpi . TargetReport
err := targetReporCont . GetCont ( map [ string ] interface { } { "`type_level`" : typeLevel , "`type`" : typeInt , "`target_id`" : targetId , "`target_sun_id`" : targetSunId , "`target_bylaws`" : targetBylaws , "`department_id`" : departmentId , "`post_id`" : postId , "man_key" : manKey } )
if err != nil {
//不存在,新增
var tarReportContAdd modelskpi . TargetReport
tarReportContAdd . Dimension = dimensionId //维度
tarReportContAdd . TargetId = targetId //指标ID"`
tarReportContAdd . TargetSunId = targetSunId //子目标"`
tarReportContAdd . TargetBylaws = targetBylaws //指标细则"`
tarReportContAdd . DepartmentId = departmentId //部门ID"`
tarReportContAdd . PostId = postId //岗位ID"`
tarReportContAdd . Type = typeInt //类型(1:公司级;2:部门级)"`
tarReportContAdd . State = 1 //状态(1:启用;2:禁用;3:删除)"`
tarReportContAdd . ReportPerson = manKey //上报人"`
tarReportContAdd . ManDepartment = manCont . MainDeparment //提报人所在部门"`
tarReportContAdd . Time = time . Now ( ) . Unix ( ) //写入时间"`
tarReportContAdd . Class = class //1:定性考核;2:定量考核"`
tarReportContAdd . Level = typeLevel //1:指标;2:子目标;3:细则
overall . CONSTANT_DB_KPI . Create ( & tarReportContAdd )
} else {
//存在编辑
if targetReporCont . State != 1 {
otherSaveData := publicmethod . MapOut [ string ] ( )
otherSaveData [ "`state`" ] = 2
if manCont . MainDeparment != targetReporCont . ManDepartment {
otherSaveData [ "`man_department`" ] = manCont . MainDeparment
}
otherSaveData [ "`time`" ] = time . Now ( ) . Unix ( )
var editTarReportCont modelskpi . TargetReport
editTarReportCont . EiteCont ( map [ string ] interface { } { "`id`" : targetReporCont . Id } , otherSaveData )
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 02 - 0 9 13 : 55 : 26
@ 功能 : 清理部门指标不在关联的岗位
@ 参数
# dimensionId 维度
# targetId 指标
# targetSunId 栏目
# targetBylaws 细则
# departmentId 部门
# postId 岗位
# typeInt 类型 ( 1 : 指标 ; 2 : 子目标 ; 3 : 细则 )
# class 属性1 : 定性考核 ; 2 : 定量考核
# level 级别 ( 1 : 部门级 ; 2 : 岗位级 )
@ 返回值
#
@ 方法原型
# ClearTargetDepartAboutPost ( dimensionId , targetId , targetSunId , targetBylaws , departmentId int64 , postId [ ] int64 , typeInt , class , level int )
* /
func ClearTargetDepartAboutPost ( dimensionId , targetId , targetSunId , targetBylaws , departmentId int64 , postId [ ] int64 , typeInt , class , level int ) {
defer SyncSeting . Done ( )
if typeInt == 0 {
typeInt = 1
}
if class == 0 {
class = 1
}
if level == 0 {
level = 1
}
//将不属于该指标细则的部门至禁用
otherSaveData := publicmethod . MapOut [ string ] ( )
otherSaveData [ "`state`" ] = 2
otherSaveData [ "`time`" ] = time . Now ( ) . Unix ( )
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Where ( "`post_id` > 0 AND `level` = ? AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ? AND `type` = ? AND department_id = ?" , level , targetId , targetSunId , targetBylaws , typeInt , departmentId ) . Not ( map [ string ] interface { } { "post_id" : postId } ) . Updates ( & otherSaveData )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 02 - 0 9 13 : 35 : 06
@ 功能 : 部门指标关联岗位
@ 参数
# dimensionId 维度
# targetId 指标
# targetSunId 栏目
# targetBylaws 细则
# departmentId 部门
# postId 岗位
# typeInt 类型 ( 1 : 指标 ; 2 : 子目标 ; 3 : 细则 )
# class 属性1 : 定性考核 ; 2 : 定量考核
# level 级别 ( 1 : 部门级 ; 2 : 岗位级 )
@ 返回值
#
@ 方法原型
# func DepartTargetAboutPost ( dimensionId , targetId , targetSunId , targetBylaws , departmentId , postId int64 , typeInt , class , level int )
* /
func DepartTargetAboutPost ( dimensionId , targetId , targetSunId , targetBylaws , departmentId , postId int64 , typeInt , class , level int ) {
defer SyncSeting . Done ( )
if typeInt == 0 {
typeInt = 1
}
if class == 0 {
class = 1
}
if level == 0 {
level = 1
}
var targetDeparCont modelskpi . TargetDepartment
err := targetDeparCont . GetCont ( map [ string ] interface { } { "`level`" : level , "`type`" : typeInt , "`target_id`" : targetId , "`target_sun_id`" : targetSunId , "`target_bylaws`" : targetBylaws , "`department_id`" : departmentId , "`post_id`" : postId } )
if err != nil {
//不存在新增
var tarDepartCont modelskpi . TargetDepartment
tarDepartCont . Dimension = dimensionId
tarDepartCont . TargetId = targetId //指标ID"`
tarDepartCont . TargetSunId = targetSunId //子目标"`
tarDepartCont . TargetBylaws = targetBylaws //指标细则"`
tarDepartCont . Type = typeInt //类型(1:指标;2:子目标;3:细则)"`
tarDepartCont . DepartmentId = departmentId //部门ID"`
tarDepartCont . PostId = postId //岗位ID"`
tarDepartCont . State = 1 //状态(1:启用;2:禁用;3:删除)"`
tarDepartCont . Time = time . Now ( ) . Unix ( ) //写入时间"`
tarDepartCont . Class = class //1:定性考核;2:定量考核"`
tarDepartCont . Level = level //级别(1:部门级;2:岗位级)"`
overall . CONSTANT_DB_KPI . Create ( & tarDepartCont )
} else {
//存在修改状态
if targetDeparCont . State != 1 {
otherSaveData := publicmethod . MapOut [ string ] ( )
otherSaveData [ "`state`" ] = 2
otherSaveData [ "`time`" ] = time . Now ( ) . Unix ( )
var editTarDepartCont modelskpi . TargetDepartment
editTarDepartCont . EiteCont ( map [ string ] interface { } { "`id`" : targetDeparCont . Id } , otherSaveData )
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 02 - 0 9 14 : 53 : 04
@ 功能 : 获取部门指标关联的岗位及提报人
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) GetTargetRelevantPostOfReport ( c * gin . Context ) {
var receivedValue publicmethod . PublicId
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , receivedValue , c )
return
}
if receivedValue . Id == "" {
publicmethod . Result ( 101 , receivedValue , c , "请输入指标ID!!" )
return
}
var targetCont modelskpi . EvaluationTarget
err = targetCont . GetCont ( map [ string ] interface { } { "`et_id`" : receivedValue . Id } , "`et_id`" , "`et_title`" )
if err != nil {
publicmethod . Result ( 107 , receivedValue , c )
return
}
var sendData [ ] LoopStructEs
// sendData.Id = receivedValue.Id
//获取关联岗位的部门
var departIdList [ ] int64
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Distinct ( "`department_id`" ) . Where ( "`state` = 1 AND `level` = 1 AND `type` = 1 AND `target_sun_id` = 0 AND `target_bylaws` = 0 AND `post_id` > 0 AND `target_id` = ?" , targetCont . Id ) . Find ( & departIdList ) . Error
if err != nil || len ( departIdList ) < 1 {
publicmethod . Result ( 107 , receivedValue , c )
return
}
for _ , v := range departIdList {
var departList LoopStructEs
departList . Id = strconv . FormatInt ( v , 10 )
var orgCont modelshr . AdministrativeOrganization
orgCont . GetCont ( map [ string ] interface { } { "`id`" : v } , "`number`" , "`name`" )
departList . Name = orgCont . Name
_ , _ , departmentId , _ , _ := publicmethod . GetOrgStructure ( v )
if departmentId != v {
var orgMainCont modelshr . AdministrativeOrganization
orgMainCont . GetCont ( map [ string ] interface { } { "`id`" : departmentId } , "`number`" , "`name`" )
departList . Name = fmt . Sprintf ( "%v-%v" , orgMainCont . Name , orgCont . Name )
}
departList . Number = orgCont . Number
departList . Child = departTargetPost ( targetCont . Id , v )
//获取相关岗位
sendData = append ( sendData , departList )
}
publicmethod . Result ( 0 , sendData , c )
}
// 获取部门指标关联岗位
/ *
# targetId 指标ID
# departId 部门ID
* /
func departTargetPost ( targetId , departId int64 ) ( postListCont [ ] LoopStructEs ) {
var postIdList [ ] int64
err := overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Distinct ( "`post_id`" ) . Where ( "`state` = 1 AND `level` = 1 AND `type` = 1 AND `target_sun_id` = 0 AND `target_bylaws` = 0 AND `post_id` > 0 AND `target_id` = ? AND `department_id` = ?" , targetId , departId ) . Find ( & postIdList ) . Error
if err != nil || len ( postIdList ) < 1 {
return
}
for _ , v := range postIdList {
var postList LoopStructEs
postList . Id = strconv . FormatInt ( v , 10 )
var orgCont modelshr . Position
orgCont . GetCont ( map [ string ] interface { } { "`id`" : v } , "`number`" , "`name`" )
postList . Number = orgCont . Number
postList . Name = orgCont . Name
postList . Child , _ = departTargetPostPrte ( targetId , departId , v )
postListCont = append ( postListCont , postList )
}
return
}
//获取关联岗位提报人员
/ *
# targetId 指标ID
# departId 部门ID
# postId 岗位Id
* /
func departTargetPostPrte ( targetId , departId , postId int64 ) ( manListCont [ ] LoopStructEs , manKeyList [ ] string ) {
var manKey [ ] int64
err := overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Distinct ( "`man_key`" ) . Where ( "`state` = 1 AND `type` = 1 AND `type_level` = 1 AND `target_sun_id` = 0 AND `target_bylaws` = 0 AND `post_id` > 0 AND `target_id` = ? AND `department_id` = ? AND `post_id` =?" , targetId , departId , postId ) . Find ( & manKey ) . Error
if err != nil || len ( manKey ) < 1 {
return
}
for _ , v := range manKey {
var postList LoopStructEs
idStr := strconv . FormatInt ( v , 10 )
postList . Id = idStr
var orgCont modelshr . PersonArchives
orgCont . GetCont ( map [ string ] interface { } { "`key`" : v } , "`number`" , "`name`" )
postList . Number = orgCont . Number
postList . Name = orgCont . Name
manKeyList = append ( manKeyList , idStr )
manListCont = append ( manListCont , postList )
}
return
}