@ -3,6 +3,7 @@ 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"
@ -662,6 +663,13 @@ func handleDetarildTargetRepart(targetId, targetSunId, bylawsId int64, repart []
tarReportCont . EiteCont ( map [ string ] interface { } { "`id`" : tarReportCont . Id } , map [ string ] interface { } { "`state`" : 1 , "`man_department`" : manCont . MainDeparment , "`time`" : time . Now ( ) . Unix ( ) } )
}
} else {
xiZe := 3
if targetId != 0 && targetSunId != 0 && bylawsId == 0 {
xiZe = 2
} else if targetId != 0 && targetSunId == 0 && bylawsId == 0 {
xiZe = 1
}
tarReportCont . TargetId = targetId //指标ID"`
tarReportCont . TargetSunId = targetSunId //子目标"`
tarReportCont . TargetBylaws = bylawsId //指标细则"`
@ -674,6 +682,7 @@ func handleDetarildTargetRepart(targetId, targetSunId, bylawsId int64, repart []
tarReportCont . ManDepartment = manCont . MainDeparment //提报人所在部门"`
tarReportCont . Time = time . Now ( ) . Unix ( ) //写入时间"`
tarReportCont . Class = 1 //1:定性考核;2:定量考核"`
tarReportCont . Level = xiZe //1:指标;2:子目标;3:细则
overall . CONSTANT_DB_KPI . Create ( & tarReportCont )
}
}
@ -1143,10 +1152,10 @@ func (a *ApiMethod) DelSonTarget(c *gin.Context) {
go softDetaildeCont ( sonTargetCont . ParentId , sonTargetCont . Id , delTime )
//软删除所有此子栏目相关的联部门
syncSeting . Add ( 1 )
go softDelTargetDepartment ( sonTargetCont . ParentId , sonTargetCont . Id , delTime )
go softDelTargetDepartment ( map [ string ] interface { } { "target_id" : sonTargetCont . ParentId , "target_sun_id" : sonTargetCont . Id , "`state`" : 1 } , delTime )
//软删除所有此子栏目相关联的提报人
syncSeting . Add ( 1 )
go softDelTargetReport ( sonTargetCont . ParentId , sonTargetCont . Id , delTime )
go softDelTargetReport ( map [ string ] interface { } { "`target_id`" : sonTargetCont . ParentId , "`target_sun_id`" : sonTargetCont . Id , "`state`" : 1 } , delTime )
//软删除此栏目
var delTargetSon modelskpi . QualitativeTarget
err = delTargetSon . EiteCont ( map [ string ] interface { } { "`q_id`" : sonTargetCont . Id } , map [ string ] interface { } { "`q_state`" : 3 , "`q_time`" : delTime } )
@ -1166,17 +1175,17 @@ func softDetaildeCont(targetId, sonTargetId, delTime int64) {
}
// 软删除所有此子栏目相关联的提报人
func softDelTargetReport ( targetId , sonTargetId , delTime int64 ) {
func softDelTargetReport ( where interface { } , delTime int64 ) {
defer syncSeting . Done ( )
var delTargetReport modelskpi . TargetReport
delTargetReport . EiteCont ( map [ string ] interface { } { "`target_id`" : targetId , "`target_sun_id`" : sonTargetId , "`state`" : 1 } , map [ string ] interface { } { "`state`" : 3 , "`time`" : delTime } )
delTargetReport . EiteCont ( where , map [ string ] interface { } { "`state`" : 3 , "`time`" : delTime } )
}
// 软删除所有此子栏目相关的联部门
func softDelTargetDepartment ( targetId , sonTargetId , delTime int64 ) {
func softDelTargetDepartment ( where interface { } , delTime int64 ) {
defer syncSeting . Done ( )
var delTargetDepartment modelskpi . TargetDepartment
delTargetDepartment . EiteCont ( map [ string ] interface { } { "target_id" : targetId , "target_sun_id" : sonTargetId , "`state`" : 1 } , map [ string ] interface { } { "`state`" : 3 , "`time`" : delTime } )
delTargetDepartment . EiteCont ( where , map [ string ] interface { } { "`state`" : 3 , "`time`" : delTime } )
}
// 获取单一指标细则内容
@ -1199,4 +1208,379 @@ func (a *ApiMethod) GetOneDetailedTarget(c *gin.Context) {
publicmethod . Result ( 107 , err , c )
return
}
var outDataCont NewOutPutDetailedTarget
outDataCont . Id = strconv . FormatInt ( detailedTargetCont . Id , 10 )
outDataCont . Title = detailedTargetCont . Title //考核内容
outDataCont . Content = detailedTargetCont . Content //备注说明
outDataCont . Unit = detailedTargetCont . Company //单位
biaoZhun := ""
if detailedTargetCont . MinScore != 0 {
biaoZhun = fmt . Sprintf ( "%v-%v" , detailedTargetCont . MinScore , detailedTargetCont . MaxScore )
} else {
biaoZhun = fmt . Sprintf ( "%v" , detailedTargetCont . MaxScore )
}
outDataCont . ReferenceScore = biaoZhun //考核标准
outDataCont . Cycles = detailedTargetCont . Cycles //1:班;2:天;3:周;4:月;5:季度;6:年
outDataCont . CycleAttres = detailedTargetCont . CycleAttres //辅助计数
outDataCont . Operator , outDataCont . ReportManList , _ = getDetailedReport ( detailedTargetCont . ParentId , detailedTargetCont . ParentIdSun , detailedTargetCont . Id , 1 ) //考核执行人
outDataCont . AddOrReduce = detailedTargetCont . AddReduce //操作类型 1:减少;2:增加;3:用户自定义
outDataCont . CensorType = strings . Split ( detailedTargetCont . CensorType , "," ) //检查方式(1:现场检查;2:资料检查;3:事件触发)
outDataCont . CensorCont = detailedTargetCont . CensorCont //客观证据
outDataCont . CensorRate = detailedTargetCont . CensorRate //检查频次
outDataCont . DepartmentList , _ , _ = getDetailedDepartment ( detailedTargetCont . ParentId , detailedTargetCont . ParentIdSun , detailedTargetCont . Id , 1 ) //接受考核的部门
publicmethod . Result ( 0 , outDataCont , c )
}
// 获取指标细则接受考核部门
func getDetailedDepartment ( targetId , targetSunId , bylawsId int64 , class int ) ( departmentStr [ ] string , departmentInfo [ ] departOutcome , err error ) {
if class == 0 {
class = 1
}
var departmentId [ ] int64
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Distinct ( "`department_id`" ) . Where ( "`state` = 1 AND `level` = ? AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ?" , class , targetId , targetSunId , bylawsId ) . Find ( & departmentId ) . Error
if err != nil || len ( departmentId ) < 1 {
return
}
var orgList [ ] modelshr . AdministrativeOrganization
gormDb := overall . CONSTANT_DB_HR . Model ( & modelshr . AdministrativeOrganization { } ) . Select ( "`id`,`name`,`superior`,`ispower`" )
if len ( departmentId ) > 1 {
gormDb = gormDb . Where ( "`id` IN ?" , departmentId )
} else {
gormDb = gormDb . Where ( "`id` = ?" , departmentId )
}
err = gormDb . Find ( & orgList ) . Error
if err != nil || len ( orgList ) < 1 {
return
}
for _ , v := range orgList {
departIdStr := strconv . FormatInt ( v . Id , 10 )
if publicmethod . IsInTrue [ string ] ( departIdStr , departmentStr ) == false {
var departCont departOutcome
departCont . Id = departIdStr
departCont . Name = v . Name
departCont . Superior = strconv . FormatInt ( v . Superior , 10 ) //上级
departCont . Ispower = v . IsPower //是否为主部门
departmentStr = append ( departmentStr , departIdStr )
departmentInfo = append ( departmentInfo , departCont )
}
}
return
}
// 获取指标细则执行人
func getDetailedReport ( targetId , targetSunId , bylawsId int64 , class int ) ( userKey [ ] string , userCont [ ] printReportCont , err error ) {
if class == 0 {
class = 1
}
var userKeyInt [ ] int64
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Distinct ( "`man_key`" ) . Where ( "`state` = 1 AND `type` = ? AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ?" , class , targetId , targetSunId , bylawsId ) . Find ( & userKeyInt ) . Error
if err != nil || len ( userKeyInt ) < 1 {
return
}
var userContList [ ] modelshr . PersonArchives
gormDb := overall . CONSTANT_DB_HR . Model ( & modelshr . PersonArchives { } ) . Select ( "`id`,`number`,`name`,`icon`,`company`,`maindeparment`" )
if len ( userKeyInt ) > 1 {
gormDb = gormDb . Where ( "`key` IN ?" , userKeyInt )
} else {
gormDb = gormDb . Where ( "`key` = ?" , userKeyInt )
}
err = gormDb . Find ( & userContList ) . Error
if err != nil || len ( userContList ) < 1 {
return
}
for _ , v := range userContList {
userKeyStr := strconv . FormatInt ( v . Id , 10 )
if publicmethod . IsInTrue [ string ] ( userKeyStr , userKey ) == false {
var userInfo printReportCont
userInfo . Id = userKeyStr
userInfo . Name = v . Name
var groupCont modelshr . AdministrativeOrganization
groupCont . GetCont ( map [ string ] interface { } { "`id`" : v . Company } , "`name`" )
userInfo . GroupName = groupCont . Name
var deparHrCont modelshr . AdministrativeOrganization
deparHrCont . GetCont ( map [ string ] interface { } { "`id`" : v . Company } , "`name`" )
userInfo . DepartmentName = deparHrCont . Name
userInfo . Icon = v . Icon
userInfo . Number = v . Number
userKey = append ( userKey , userKeyStr )
userCont = append ( userCont , userInfo )
}
}
return
}
// 编辑单一指标细则内容
func ( a * ApiMethod ) EditOneDetailedTarget ( c * gin . Context ) {
var receivedValue editOneDetailedTargetInfo
c . ShouldBindJSON ( & receivedValue )
var judgeDetaCont modelskpi . DetailedTarget
judgeDetaErr := judgeDetaCont . GetCont ( map [ string ] interface { } { "`dt_id`" : receivedValue . Id } )
if judgeDetaErr != nil {
publicmethod . Result ( 107 , receivedValue , c )
return
}
if receivedValue . Title == "" {
publicmethod . Result ( 1 , receivedValue , c , "请输入考核细则名称!" )
return
}
//判断指标细则是否符合规则
if receivedValue . ReferenceScore == "" {
publicmethod . Result ( 1 , receivedValue , c , "请输入考核细则相关考核标准!" )
return
} else {
scoreAry := strings . Split ( receivedValue . ReferenceScore , "-" )
scoreLen := len ( scoreAry )
if scoreLen < 1 {
publicmethod . Result ( 1 , receivedValue , c , "考核标准不符合要求!请仔细填写!" )
return
}
if scoreLen == 1 {
maxScore , maxErr := strconv . ParseFloat ( scoreAry [ 0 ] , 64 )
if maxErr != nil {
publicmethod . Result ( 1 , maxErr , c , "考核标准不符合要求!请仔细填写!" )
return
}
var maxIntErr error
_ , maxIntErr = strconv . ParseInt ( strconv . FormatFloat ( maxScore * 100 , 'f' , - 1 , 64 ) , 10 , 64 )
if maxIntErr != nil {
publicmethod . Result ( 1 , maxIntErr , c , "考核标准不符合要求!请仔细填写!" )
return
}
} else {
minScore , minErr := strconv . ParseFloat ( scoreAry [ 0 ] , 64 )
if minErr != nil {
publicmethod . Result ( 1 , minErr , c , "考核标准不符合要求!请仔细填写!" )
return
}
maxScore , maxErr := strconv . ParseFloat ( scoreAry [ scoreLen - 1 ] , 64 )
if maxErr != nil {
publicmethod . Result ( 1 , maxErr , c , "考核标准不符合要求!请仔细填写!" )
return
}
var minIntErr error
_ , minIntErr = strconv . ParseInt ( strconv . FormatFloat ( minScore * 100 , 'f' , - 1 , 64 ) , 10 , 64 )
if minIntErr != nil {
publicmethod . Result ( 1 , minIntErr , c , "考核标准不符合要求!请仔细填写!" )
return
}
var maxIntErr error
_ , maxIntErr = strconv . ParseInt ( strconv . FormatFloat ( maxScore * 100 , 'f' , - 1 , 64 ) , 10 , 64 )
if maxIntErr != nil {
publicmethod . Result ( 1 , maxIntErr , c , "考核标准不符合要求!请仔细填写!" )
return
}
}
}
if len ( receivedValue . DepartmentList ) < 1 {
//获取子栏目接受考核部门
var aboutTarDepList [ ] int64
aboutTDErr := overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Distinct ( "`department_id`" ) . Where ( "`state` = 1 AND `level` = 1 AND `target_id` = ? AND `target_sun_id` = ?" , judgeDetaCont . ParentId , judgeDetaCont . ParentIdSun ) . Find ( & aboutTarDepList ) . Error
if aboutTDErr == nil {
for _ , atdv := range aboutTarDepList {
receivedValue . DepartmentList = append ( receivedValue . DepartmentList , strconv . FormatInt ( atdv , 10 ) )
}
}
}
if len ( receivedValue . QualEvalSunList . Operator ) < 1 {
var aboutTarDepRepList [ ] int64
aboutReTDErr := overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Distinct ( "`man_key`" ) . Where ( "`state` = 1 AND `type` = 1 AND `target_id` = ? AND `target_sun_id` = ?" , judgeDetaCont . ParentId , judgeDetaCont . ParentIdSun ) . Find ( & aboutTarDepRepList ) . Error
if aboutReTDErr == nil {
for _ , atdv := range aboutTarDepRepList {
receivedValue . QualEvalSunList . Operator = append ( receivedValue . QualEvalSunList . Operator , strconv . FormatInt ( atdv , 10 ) )
}
}
}
err := editDetaAdd ( judgeDetaCont . ParentId , judgeDetaCont . ParentIdSun , receivedValue . QualEvalSunList , judgeDetaCont , receivedValue . DepartmentList )
if err != nil {
publicmethod . Result ( 106 , receivedValue , c )
return
}
publicmethod . Result ( 0 , err , c )
}
// 删除单一指标细则
func ( a * ApiMethod ) DelOneDetailedTarget ( 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 )
return
}
where := publicmethod . MapOut [ string ] ( )
where [ "dt_id" ] = receivedValue . Id
var detailedTargetCont modelskpi . DetailedTarget
err = detailedTargetCont . GetCont ( where )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
delTime := time . Now ( ) . Unix ( )
err = detailedTargetCont . EiteCont ( where , map [ string ] interface { } { "dt_state" : 3 , "dt_time" : delTime } )
if err != nil {
publicmethod . Result ( 106 , err , c )
return
}
//软删除所有此子栏目相关的联部门
syncSeting . Add ( 1 )
go softDelTargetDepartment ( map [ string ] interface { } { "target_id" : detailedTargetCont . ParentId , "`target_sun_id`" : detailedTargetCont . ParentIdSun , "target_bylaws" : detailedTargetCont . Id , "`state`" : 1 } , delTime )
//软删除所有此子栏目相关联的提报人
syncSeting . Add ( 1 )
go softDelTargetReport ( map [ string ] interface { } { "`target_id`" : detailedTargetCont . ParentId , "`target_sun_id`" : detailedTargetCont . ParentIdSun , "target_bylaws" : detailedTargetCont . Id , "`state`" : 1 } , delTime )
syncSeting . Wait ( )
publicmethod . Result ( 0 , err , c )
}
// 添加部门指标
func ( a * ApiMethod ) AddDepartmentTarget ( 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 {
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
}
if len ( receivedValue . AcceptDepartmentId ) > 0 {
syncSeting . Add ( 1 )
go handleDetarildTargetDepart ( saveData . Id , 0 , 0 , receivedValue . AcceptDepartmentId , 1 )
}
if len ( receivedValue . Operator ) > 0 {
syncSeting . Add ( 1 )
go handleDetarildTargetRepart ( saveData . Id , 0 , 0 , receivedValue . Operator , 1 )
}
syncSeting . Wait ( )
publicmethod . Result ( 0 , err , c )
}
// 获取关联部门
func GetAboutDepartment ( where interface { } , level int ) ( departmentId [ ] int64 , departmentIdStr [ ] string , err error ) {
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Distinct ( "`department_id`" ) . Where ( where ) . Find ( & departmentId ) . Error
if err == nil {
for _ , v := range departmentId {
departmentIdStr = append ( departmentIdStr , strconv . FormatInt ( v , 10 ) )
}
}
return
}
// 获取关联提报人
func GetAboutReport ( where interface { } , level int ) ( userKey [ ] int64 , userKeyStr [ ] string , err error ) {
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Distinct ( "`man_key`" ) . Where ( where ) . Find ( & userKey ) . Error
if err == nil {
for _ , v := range userKey {
userKeyStr = append ( userKeyStr , strconv . FormatInt ( v , 10 ) )
}
}
return
}
// 获取单一指标详细内容
func ( a * ApiMethod ) GetOneTergetInfo ( 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 )
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
}
var outCont printOneTargetCont
outCont . Id = strconv . FormatInt ( targetCont . Id , 10 )
outCont . Name = targetCont . Title
outCont . Share = targetCont . Share //1:共用;2:私用
outCont . AcceptDepartmentId = strings . Split ( targetCont . RelevantDepartments , "," ) //接受考核部门
outCont . Operator = strings . Split ( targetCont . Report , "," ) //考核执行人
outCont . Dimension = strconv . FormatInt ( targetCont . Dimension , 10 ) //维度
outCont . Nature = targetCont . Type //性质 1:定性考核;2:定量考核
outCont . Unit = targetCont . Uniteing //单位
outCont . Cycles = targetCont . Cycles //1:班;2:天;3:周;4:月;5:季度;6:年
outCont . CycleAttres = targetCont . CycleAttres //辅助计数
outCont . ScoringMethod = targetCont . ScoringMethod //计分方式(1:自动;2:手动)'
outCont . VisibleRangeGroup = strings . Split ( targetCont . VisibleRangeGroup , "," ) //可见范围(集团)
outCont . VisibleRangeDepart = strings . Split ( targetCont . VisibleRange , "," ) //可见范围(分厂)
publicmethod . Result ( 0 , outCont , c )
}