package dutyassess
import (
"encoding/json"
"fmt"
"strconv"
"strings"
"time"
"github.com/flipped-aurora/gin-vue-admin/server/commonus"
"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/model/assessmentmodel"
"github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
"github.com/gin-gonic/gin"
"github.com/mitchellh/mapstructure"
)
//判断考核细则是否存在(新规则)
/ *
参数说明
@ ascription 归属指标栏目
@ title 指标细则
@ explain 指标说明 '
@ explainId 指标明细ID
@ ReferenceScore 分数
@ CompanyCont 单位
@ sunTargetId 子栏目
* /
// func JudgeDetailsCopy(ascription, title, explain, explainId, ReferenceScore, CompanyCont string, sunTargetId int64, addReduce int) (content assessmentmodel.DetailedTarget, isTrue bool)
// detailedTargetInfo, dtiIsTrue := commonus.JudgeDetailsCopy(requestData.Target, v.Title, v.Content, v.DetailedTarget, v.ReferenceScore, v.Unit, sunTargetCont.Id, v.AddOrReduce)
/ *
参数说明
@ ascription 归属指标栏目
@ departStr 接受考核的部门
@ sunTargetId 子栏目
@ detailedTarget 考核细则
* /
func JudgeDetailsCopyEs ( ascription , departStr string , sunTargetId int64 , detailedTarget QualEvalSunList ) ( content assessmentmodel . DetailedTarget , isTrue bool ) {
if detailedTarget . AddOrReduce == 0 {
detailedTarget . AddOrReduce = 1
}
var minScoreInt int64
var maxScoreInt int64
scoreAry := strings . Split ( detailedTarget . ReferenceScore , "-" )
scoreLen := len ( scoreAry )
// fmt.Printf("ScoreAry:%v----------->%v------------>%v------------>%v\n", ReferenceScore, scoreLen, scoreAry[0], scoreAry)
if scoreLen > 0 {
if scoreLen == 1 {
maxScore , _ := strconv . ParseFloat ( scoreAry [ 0 ] , 64 )
zhhh := maxScore * 100
zhuanStr := strconv . FormatFloat ( zhhh , 'f' , - 1 , 64 )
maxScoreInt , _ = strconv . ParseInt ( strconv . FormatFloat ( maxScore * 100 , 'f' , - 1 , 64 ) , 10 , 64 )
minScoreInt = 0
fmt . Printf ( "ScoreAry--1-----:%v----------->%v------------>%v------------>%v\n" , maxScore , maxScoreInt , zhuanStr , zhhh )
} else {
minScore , _ := strconv . ParseFloat ( scoreAry [ 0 ] , 64 )
maxScore , _ := strconv . ParseFloat ( scoreAry [ scoreLen - 1 ] , 64 )
minScoreInt , _ = strconv . ParseInt ( strconv . FormatFloat ( minScore * 100 , 'f' , - 1 , 64 ) , 10 , 64 )
maxScoreInt , _ = strconv . ParseInt ( strconv . FormatFloat ( maxScore * 100 , 'f' , - 1 , 64 ) , 10 , 64 )
}
} else {
minScoreInt = 0
maxScoreInt = 0
}
isTrue = false
if detailedTarget . DetailedTarget != "" {
judgeIdErr := global . GVA_DB_Performanceappraisal . Where ( "`dt_id` = ?" , detailedTarget . DetailedTarget ) . First ( & content ) . Error
if judgeIdErr == nil {
eiteCont := commonus . MapOut ( )
if minScoreInt > maxScoreInt {
eiteCont [ "dt_min_score" ] = maxScoreInt
eiteCont [ "dt_max_score" ] = minScoreInt
} else {
eiteCont [ "dt_min_score" ] = minScoreInt
eiteCont [ "dt_max_score" ] = maxScoreInt
}
eiteCont [ "dt_title" ] = detailedTarget . Title
eiteCont [ "dt_content" ] = detailedTarget . Content
eiteCont [ "dt_company" ] = detailedTarget . Unit
if detailedTarget . AddOrReduce > 0 {
eiteCont [ "dt_add_reduce" ] = detailedTarget . AddOrReduce
}
eiteCont [ "dt_time" ] = time . Now ( ) . Unix ( )
// if detailedTarget.Cycles != 0 {
// eiteCont["dt_cycle"] = detailedTarget.Cycles
// }
// if detailedTarget.Cycles != "" {
eiteCont [ "dt_cycle" ] = detailedTarget . Cycles
// }
if detailedTarget . CycleAttres != 0 {
eiteCont [ "dt_cycleattr" ] = detailedTarget . CycleAttres
}
if len ( detailedTarget . CensorType ) > 0 {
eiteCont [ "dt_censor_type" ] = strings . Join ( detailedTarget . CensorType , "," )
}
eiteCont [ "dt_censor_cont" ] = detailedTarget . CensorCont
if detailedTarget . CensorRate != 0 {
eiteCont [ "dt_censor_rate" ] = detailedTarget . CensorRate
}
if departStr != "" {
eiteCont [ "dt_paretment" ] = departStr
}
global . GVA_DB_Performanceappraisal . Model ( & content ) . Where ( "`dt_id` = ?" , detailedTarget . DetailedTarget ) . Updates ( & eiteCont )
// fmt.Printf("echo --------------1---------->%v\n", content)
isTrue = true
return
}
}
judgeErr := global . GVA_DB_Performanceappraisal . Where ( "`dt_parentid` = ? AND `dt_title` = ?" , ascription , detailedTarget . Title ) . First ( & content ) . Error
if judgeErr == nil {
isTrue = true
eiteCont := commonus . MapOut ( )
if minScoreInt > maxScoreInt {
eiteCont [ "dt_min_score" ] = maxScoreInt
eiteCont [ "dt_max_score" ] = minScoreInt
} else {
eiteCont [ "dt_min_score" ] = minScoreInt
eiteCont [ "dt_max_score" ] = maxScoreInt
}
eiteCont [ "dt_content" ] = detailedTarget . Content
eiteCont [ "dt_company" ] = detailedTarget . Unit
if detailedTarget . AddOrReduce > 0 {
eiteCont [ "dt_add_reduce" ] = detailedTarget . AddOrReduce
}
eiteCont [ "dt_time" ] = time . Now ( ) . Unix ( )
// if detailedTarget.Cycles != "" {
// eiteCont["dt_cycle"] = detailedTarget.Cycles
// }
// if detailedTarget.Cycles != 0 {
eiteCont [ "dt_cycle" ] = detailedTarget . Cycles
// }
if detailedTarget . CycleAttres != 0 {
eiteCont [ "dt_cycleattr" ] = detailedTarget . CycleAttres
}
if len ( detailedTarget . CensorType ) > 0 {
eiteCont [ "dt_censor_type" ] = strings . Join ( detailedTarget . CensorType , "," )
}
eiteCont [ "dt_censor_cont" ] = detailedTarget . CensorCont
if detailedTarget . CensorRate != 0 {
eiteCont [ "dt_censor_rate" ] = detailedTarget . CensorRate
}
if departStr != "" {
eiteCont [ "dt_paretment" ] = departStr
}
global . GVA_DB_Performanceappraisal . Model ( & content ) . Where ( "`dt_id` = ?" , content . Id ) . Updates ( & eiteCont )
// fmt.Printf("echo --------------2---------->%v\n", content)
return
}
ascriptionId , ascriptionErr := strconv . ParseInt ( ascription , 10 , 64 )
if ascriptionErr != nil {
ascriptionId = 0
}
var minScoreIsTrue int64 = 0
var maxScoreIsTrue int64 = 0
if minScoreInt > maxScoreInt {
minScoreIsTrue = maxScoreInt
maxScoreIsTrue = minScoreInt
} else {
minScoreIsTrue = minScoreInt
maxScoreIsTrue = maxScoreInt
}
// fmt.Printf("ScoreAry---KKKK:%v----------->%v------------>%v------------>%v", minScoreIsTrue, maxScoreIsTrue, minScoreIsTrue, maxScoreIsTrue)
var saveColumEs assessmentmodel . DetailedTarget
saveColumEs . Title = detailedTarget . Title
saveColumEs . Content = detailedTarget . Content
saveColumEs . ParentId = ascriptionId
saveColumEs . ParentIdSun = sunTargetId
saveColumEs . State = 1
saveColumEs . AddTime = time . Now ( ) . Unix ( )
saveColumEs . MinScore = minScoreIsTrue
saveColumEs . MaxScore = maxScoreIsTrue
saveColumEs . Company = detailedTarget . Unit
if detailedTarget . AddOrReduce > 0 {
saveColumEs . AddReduce = detailedTarget . AddOrReduce
} else {
saveColumEs . AddReduce = 1
}
if len ( detailedTarget . CensorType ) > 0 {
saveColumEs . CensorType = strings . Join ( detailedTarget . CensorType , "," )
} else {
saveColumEs . CensorType = "1"
}
saveColumEs . CensorCont = detailedTarget . CensorCont
if detailedTarget . CensorRate > 0 {
saveColumEs . CensorRate = detailedTarget . CensorRate
} else {
saveColumEs . CensorRate = 1
}
var targetInfoCont assessmentmodel . EvaluationTarget
tarEvlWhe := commonus . MapOut ( )
tarEvlWhe [ "et_id" ] = ascriptionId
targetInfoCont . GetCont ( tarEvlWhe , "et_cycle" , "et_cycleattr" )
// intCycles, _ := strconv.Atoi(detailedTarget.Cycles)
// if intCycles > 0 {
// saveColumEs.Cycles = intCycles
// } else {
// if targetInfoCont.Cycles > 1 {
// saveColumEs.Cycles = targetInfoCont.Cycles
// } else {
// saveColumEs.Cycles = 4
// }
// }
if detailedTarget . Cycles > 0 {
saveColumEs . Cycles = detailedTarget . Cycles
} else {
if targetInfoCont . Cycles > 1 {
saveColumEs . Cycles = targetInfoCont . Cycles
} else {
saveColumEs . Cycles = 0
}
}
if detailedTarget . CycleAttres > 0 {
saveColumEs . CycleAttres = detailedTarget . CycleAttres
} else {
if targetInfoCont . CycleAttres > 1 {
saveColumEs . CycleAttres = targetInfoCont . CycleAttres
} else {
saveColumEs . CycleAttres = 1
}
}
saveColumEs . Paretment = departStr
addErr := global . GVA_DB_Performanceappraisal . Create ( & saveColumEs ) . Error
// saveColum := assessmentmodel.DetailedTarget{
// Title: detailedTarget.Title,
// Content: detailedTarget.CensorCont,
// ParentId: ascriptionId,
// ParentIdSun: sunTargetId,
// State: 1,
// AddTime: time.Now().Unix(),
// Company: detailedTarget.Unit,
// MinScore: minScoreIsTrue,
// MaxScore: maxScoreIsTrue,
// AddReduce: detailedTarget.AddOrReduce,
// Cycles: detailedTarget.Cycles,
// CycleAttres: detailedTarget.CycleAttres,
// }
// addErr := global.GVA_DB_Performanceappraisal.Create(&saveColum).Error
if addErr != nil {
// fmt.Printf("echo --------------3---------->%v\n", saveColum.Id)
return
}
// fmt.Printf("echo --------------4---------->%v\n", saveColum.Id)
isTrue = true
// content = saveColum
content = saveColumEs
return
}
//解析考核关系
/ *
@ group 集团
@ dimeId 维度
@ target 指标
* /
func jieXiDutyList ( group , dimeId , target int64 ) ( departIdAry [ ] string , departAry [ ] DepartmentAryType , userIdContStr [ ] string , userContAry [ ] QualEvalArrt ) {
var targetAssessAry [ ] assessmentmodel . Assesstarget
errGroup := global . GVA_DB_Performanceappraisal . Model ( & assessmentmodel . Assesstarget { } ) . Select ( "`departmentmap`,`content`" ) . Where ( "`group` = ? AND `dimension`= ? AND `targetid` = ?" , group , dimeId , target ) . Find ( & targetAssessAry ) . Error
if errGroup != nil {
return
}
// var departIdAry []int64
// var departAry []DepartmentAryType
// var userIdCont []int64
// var userIdContStr []string
// var userContAry []QualEvalArrt
// DutyAssEssTarget
for _ , v := range targetAssessAry {
// var huiXianDepartId []int64
// jsonDepartErr := json.Unmarshal([]byte(v.Departmentmap), &huiXianDepartId)
huiXianDepartId := strings . Split ( v . Departmentmap , "," )
// fmt.Printf("jsonDepartErr----->%v\n", jsonDepartErr)
// if jsonDepartErr == nil {
if len ( huiXianDepartId ) > 0 {
// 获取集团信息
for _ , derv := range huiXianDepartId {
if commonus . IsItTrueString ( derv , departIdAry ) == false {
where := commonus . MapOut ( )
where [ "id" ] = derv
orgCont , orgErr := commonus . GetNewOrgCont ( where , "id" , "name" )
if orgErr == nil {
departIdAry = append ( departIdAry , derv )
var departcont DepartmentAryType
departcont . Parentname = orgCont . Name
departcont . Parentid = derv
departAry = append ( departAry , departcont )
}
}
}
}
var huiXianUser [ ] DutyAssEssTarget
jsonUsertErr := json . Unmarshal ( [ ] byte ( v . Content ) , & huiXianUser )
if jsonUsertErr == nil {
//获取人员信息
for _ , usv := range huiXianUser {
for _ , uskeyv := range usv . Operator {
if commonus . IsItTrueString ( uskeyv , userIdContStr ) == false {
userWher := commonus . MapOut ( )
userWher [ "key" ] = uskeyv
usCont , usErr := commonus . GetNewHrPeopleInfo ( userWher )
if usErr == true {
userIdContStr = append ( userIdContStr , uskeyv )
var userCont QualEvalArrt
userCont . Id = uskeyv
userCont . Name = usCont . Name
userCont . Icon = usCont . Icon
where := commonus . MapOut ( )
where [ "id" ] = usCont . Company
orgCont , _ := commonus . GetNewOrgCont ( where , "id" , "name" , "abbreviation" )
userCont . GroupName = orgCont . Name
if orgCont . Abbreviation != "" {
userCont . GroupName = orgCont . Abbreviation
}
whereDepart := commonus . MapOut ( )
whereDepart [ "id" ] = usCont . Deparment
orgContDepart , _ := commonus . GetNewOrgCont ( whereDepart , "id" , "name" )
userCont . DepartmentName = orgContDepart . Name
userCont . Number = usCont . Number
userContAry = append ( userContAry , userCont )
}
}
}
}
}
}
// syncProcess.Wait()
return
}
//查看定性考核项目详情(New)
func ( d * DutyAssessApi ) LookDutyTargetInfo ( c * gin . Context ) {
var requestData LookTargetContList
err := c . ShouldBindJSON ( & requestData )
if err != nil {
response . Result ( 101 , err , "数据获取失败!" , c )
return
}
if requestData . Group == "" {
response . Result ( 102 , err , "参数错误!无法获取数据" , c )
return
}
if requestData . Dimension == "" {
response . Result ( 103 , err , "参数错误!无法获取数据" , c )
return
}
if requestData . TargetId == "" {
response . Result ( 104 , err , "参数错误!无法获取数据" , c )
return
}
var assessInfoList [ ] assessmentmodel . Assesstarget
goromDb := global . GVA_DB_Performanceappraisal . Model ( & assessmentmodel . Assesstarget { } )
goromDb = goromDb . Where ( "`group` = ? AND `dimension` = ? AND `targetid` = ?" , requestData . Group , requestData . Dimension , requestData . TargetId )
assErr := goromDb . Find ( & assessInfoList ) . Error
if assErr != nil {
response . Result ( 105 , assErr , "没有获取到数据!" , c )
return
}
var xieCheng dataLockStatistics
for _ , v := range assessInfoList {
syncProcess . Add ( 1 )
go xieCheng . jieXieZiLanMu ( v . Id , v . SunTargetId , v . Content , requestData )
}
syncProcess . Wait ( )
readDingXingDataMap , _ := xieCheng . readMyDayData ( )
var outList [ ] scanDutyOutList
mapstructure . Decode ( readDingXingDataMap , & outList )
response . Result ( 0 , outList , "获取成功!" , c )
}
//解析相关指标
func ( d * dataLockStatistics ) jieXieZiLanMu ( dutyAssessId , sunTargetId int64 , sunCont string , selectData LookTargetContList ) {
d . mutext . Lock ( )
defer d . mutext . Unlock ( )
var huiXianUser [ ] DutyAssEssTarget
jsonUsertErr := json . Unmarshal ( [ ] byte ( sunCont ) , & huiXianUser )
if jsonUsertErr != nil {
return
}
if len ( huiXianUser ) < 1 {
return
}
var detailId [ ] int64
for _ , v := range huiXianUser {
if commonus . IsItTrue ( v . Id , detailId ) == false {
detailId = append ( detailId , v . Id )
}
}
if len ( detailId ) < 1 {
return
}
var detailedList [ ] assessmentmodel . DetailedTarget
gormDb := global . GVA_DB_Performanceappraisal . Where ( "`dt_state` = 1 AND `dt_id` IN ?" , detailId )
if selectData . DepartId != "" {
gormDb = gormDb . Where ( "FIND_IN_SET(?,`dt_paretment`)" , selectData . DepartId )
}
if selectData . CensorRate != 0 {
gormDb = gormDb . Where ( "dt_cycle = ?" , selectData . CensorRate )
}
if selectData . CensorCont != "" {
gormDb = gormDb . Where ( "dt_censor_cont LIKE ?" , "%" + selectData . CensorCont + "%" )
}
if len ( selectData . CensorType ) > 0 {
if commonus . IsItTrueString ( "1" , selectData . CensorType ) == true && commonus . IsItTrueString ( "2" , selectData . CensorType ) == true {
gormDb = gormDb . Where ( "FIND_IN_SET(1,`dt_censor_type`) OR FIND_IN_SET(2,`dt_censor_type`)" )
} else if commonus . IsItTrueString ( "1" , selectData . CensorType ) == true {
gormDb = gormDb . Where ( "FIND_IN_SET(1,`dt_censor_type`)" )
} else {
gormDb = gormDb . Where ( "FIND_IN_SET(2,`dt_censor_type`)" )
}
}
detaErr := gormDb . Find ( & detailedList ) . Error
if detaErr != nil {
return
}
for _ , v := range detailedList {
detaildMap := commonus . MapOut ( )
detaildMap [ "id" ] = strconv . FormatInt ( v . Id , 10 )
detaildMap [ "group" ] = selectData . Group
//维度
detaildMap [ "dimension" ] = selectData . Dimension
//指标
targetInfo , _ := commonus . GetTargetInfo ( v . ParentId )
detaildMap [ "target" ] = strconv . FormatInt ( v . ParentId , 10 )
detaildMap [ "targetname" ] = targetInfo . Title
//栏目
targetSunInfo , _ := commonus . GetQualitativeTargetInfo ( v . ParentIdSun )
detaildMap [ "targetsun" ] = strconv . FormatInt ( v . ParentIdSun , 10 )
detaildMap [ "targetsunname" ] = targetSunInfo . Title
detaildMap [ "departidmap" ] = strings . Split ( targetSunInfo . Depart , "," )
// _, DepartmentAry := commonus.GetNewOrgList(strings.Split(targetSunInfo.Depart, ","))
var depNameMap [ ] string
// for _, sep_v := range DepartmentAry {
// depNameMap = append(depNameMap, sep_v.Parentname)
// }
detaildMap [ "departnamemap" ] = strings . Join ( depNameMap , "," )
detaildMap [ "detailedtarget" ] = strconv . FormatInt ( v . Id , 10 )
detaildMap [ "detailedtargetname" ] = v . Title
detaildMap [ "detailedtargetcontent" ] = v . Content
if v . MinScore > 0 && v . MaxScore > 0 {
detaildMap [ "score" ] = fmt . Sprintf ( "%v-%v" , float64 ( v . MinScore ) / 100 , float64 ( v . MaxScore ) / 100 )
} else if v . MinScore > 0 && v . MaxScore <= 0 {
detaildMap [ "score" ] = fmt . Sprintf ( "%v" , float64 ( v . MinScore ) / 100 )
} else if v . MinScore <= 0 && v . MaxScore > 0 {
detaildMap [ "score" ] = fmt . Sprintf ( "%v" , float64 ( v . MaxScore ) / 100 )
} else {
detaildMap [ "score" ] = "0"
}
detaildMap [ "cycledettar" ] = fmt . Sprintf ( "%v" , v . Cycles )
detaildMap [ "cycleattrdettar" ] = fmt . Sprintf ( "%v" , v . CycleAttres )
detaildMap [ "censortype" ] = strings . Split ( v . CensorType , "," )
detaildMap [ "censorcont" ] = v . CensorCont
detaildMap [ "censorrate" ] = fmt . Sprintf ( "%v" , v . CensorRate )
detaildMap [ "dutyassessid" ] = strconv . FormatInt ( dutyAssessId , 10 )
detaildMap [ "unit" ] = v . Company
d . dataMap = append ( d . dataMap , detaildMap )
}
syncProcess . Done ( )
}