package assessment
import (
"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/flipped-aurora/gin-vue-admin/server/model/testpage"
"github.com/gin-gonic/gin"
)
//获取指标列表
func ( d * DutyHandle ) GetTargetList ( c * gin . Context ) {
var requestData listTarget
err := c . ShouldBindJSON ( & requestData )
if err != nil {
// response.Result(101, err, "参数错误!请重新提交!", c)
// return
}
if requestData . PageSize == 0 {
requestData . PageSize = 20
}
if requestData . Page <= 0 {
requestData . Page = 1
}
offSetPage := commonus . CalculatePages ( requestData . Page , requestData . PageSize )
gormDb := global . GVA_DB_Performanceappraisal . Model ( & assessmentmodel . EvaluationTarget { } )
if requestData . State == 0 {
gormDb = gormDb . Where ( "`et_state` IN (1,2)" )
} else {
gormDb = gormDb . Where ( "`et_state` = ?" , requestData . State )
}
if requestData . Type != 0 {
gormDb = gormDb . Where ( "`et_type` = ?" , requestData . Type )
}
if requestData . Share != 0 {
gormDb = gormDb . Where ( "`et_share` = ?" , requestData . Share )
}
if requestData . Dimension != "" {
gormDb = gormDb . Where ( "`et_dimension` = ?" , requestData . Dimension )
}
if requestData . Title != "" {
gormDb = gormDb . Where ( "(`et_title` LIKE ?)" , "%" + requestData . Title + "%" )
}
if len ( requestData . RelevantDepartments ) > 0 {
var sqlOrStr string = ""
for s_i , s_v := range requestData . RelevantDepartments {
if s_i == 0 {
sqlOrStr = fmt . Sprintf ( "FIND_IN_SET(%v,`et_relevant_departments`)" , s_v )
} else {
sqlOrStr = fmt . Sprintf ( "%v OR FIND_IN_SET(%v,`et_relevant_departments`)" , sqlOrStr , s_v )
}
}
gormDb = gormDb . Where ( sqlOrStr )
}
if len ( requestData . VisibleRangeGroup ) > 0 {
var sqlOrStrGroup string = ""
for s_i , s_v := range requestData . VisibleRangeGroup {
if s_i == 0 {
sqlOrStrGroup = fmt . Sprintf ( "FIND_IN_SET(%v,`et_visible_range`)" , s_v )
} else {
sqlOrStrGroup = fmt . Sprintf ( "%v OR FIND_IN_SET(%v,`et_visible_range`)" , sqlOrStrGroup , s_v )
}
}
gormDb = gormDb . Where ( sqlOrStrGroup )
}
if len ( requestData . VisibleRangeDepart ) > 0 {
var sqlOrStrDepart string = ""
for s_i , s_v := range requestData . VisibleRangeDepart {
if s_i == 0 {
sqlOrStrDepart = fmt . Sprintf ( "FIND_IN_SET(%v,`et_visible_range`)" , s_v )
} else {
sqlOrStrDepart = fmt . Sprintf ( "%v OR FIND_IN_SET(%v,`et_visible_range`)" , sqlOrStrDepart , s_v )
}
}
gormDb = gormDb . Where ( sqlOrStrDepart )
}
var total int64
totalErr := gormDb . Count ( & total ) . Error
if totalErr != nil {
total = 0
}
// response.Result(0, requestData, "查询成功!", c)
var dataList [ ] assessmentmodel . EvaluationTarget
dataListerr := gormDb . Limit ( requestData . PageSize ) . Offset ( offSetPage ) . Find ( & dataList ) . Error
if dataListerr != nil {
response . Result ( 103 , dataList , "数据获取失败!" , c )
return
}
var outMap [ ] outTargetList
for _ , tg_val := range dataList {
var outMapCont outTargetList
outMapCont . Id = tg_val . Id
outMapCont . OutId = strconv . FormatInt ( tg_val . Id , 10 )
outMapCont . Title = tg_val . Title
outMapCont . Type = tg_val . Type
outMapCont . State = tg_val . State
outMapCont . AddTime = tg_val . AddTime
outMapCont . Share = 2
outMapCont . RelevantDepartments = tg_val . RelevantDepartments
if tg_val . RelevantDepartments != "" {
departIdAry := strings . Split ( tg_val . RelevantDepartments , "," )
for _ , dia_val := range departIdAry {
diaInt , diaIntErr := strconv . ParseInt ( dia_val , 10 , 64 )
if diaIntErr == nil {
diaValErr , diaVal := GetBranchFactory ( diaInt )
if diaValErr == true {
var bfCont outTargetAttr
bfCont . Key = dia_val
bfCont . Title = diaVal . Name
outMapCont . RelevantDepartmentMap = append ( outMapCont . RelevantDepartmentMap , bfCont )
}
}
}
}
outMapCont . Dimension = tg_val . Dimension
dimClass , dimClassErr := commonus . GetDutyClassInfo ( tg_val . Dimension )
if dimClassErr == true {
outMapCont . DimensionName = dimClass . Title
}
outMapCont . Key = tg_val . Key
outMapCont . Report = tg_val . Report
if tg_val . Report != "" {
userIdAry := strings . Split ( tg_val . Report , "," )
for _ , u_val := range userIdAry {
uidInt , uidIntErr := strconv . ParseInt ( u_val , 10 , 64 )
if uidIntErr == nil {
whe := commonus . MapOut ( )
whe [ "wm_key" ] = uidInt
uidVal , uidValErr := commonus . GetUserInfoPublic ( "worker_man.*,worker_man_data.*" , whe )
if uidValErr == true {
var bfContUser outTargetAttr
bfContUser . Key = u_val
bfContUser . Title = uidVal . Name
outMapCont . ReportMap = append ( outMapCont . ReportMap , bfContUser )
}
}
}
}
outMapCont . Uniteing = tg_val . Uniteing
outMapCont . Cycles = tg_val . Cycles
outMapCont . CycleAttres = tg_val . CycleAttres
outMapCont . VisibleRange = tg_val . VisibleRange
if tg_val . VisibleRange != "" {
rangeIdAry := strings . Split ( tg_val . VisibleRange , "," )
for _ , rge_val := range rangeIdAry {
rgeInt , rgeIntErr := strconv . ParseInt ( rge_val , 10 , 64 )
if rgeIntErr == nil {
rgeValErr , rgeVal := GetBranchFactory ( rgeInt )
if rgeValErr == true {
var bfContRge outTargetAttr
bfContRge . Key = rge_val
bfContRge . Title = rgeVal . Name
outMapCont . VisibleRangeDepartMap = append ( outMapCont . VisibleRangeDepartMap , bfContRge )
}
}
}
}
outMapCont . VisibleRangeGroup = tg_val . VisibleRangeGroup
if tg_val . VisibleRangeGroup != "" {
rangeGroupIdAry := strings . Split ( tg_val . VisibleRangeGroup , "," )
for _ , rgeup_val := range rangeGroupIdAry {
rgeIntGup , rgeIntGupErr := strconv . ParseInt ( rgeup_val , 10 , 64 )
if rgeIntGupErr == nil {
rgeValGupErr , rgeValGup := GetGroupCont ( rgeIntGup )
if rgeValGupErr == true {
var bfContRge outTargetAttr
bfContRge . Key = rgeup_val
bfContRge . Title = rgeValGup . Name
outMapCont . VisibleRangeGroupMap = append ( outMapCont . VisibleRangeGroupMap , bfContRge )
}
}
}
}
outMap = append ( outMap , outMapCont )
}
countSum := len ( outMap )
printData := commonus . OutPutList ( total , int64 ( countSum ) , requestData . Page , requestData . PageSize , outMap )
response . Result ( 0 , printData , "查询成功!" , c )
}
//添加指标
func ( d * DutyHandle ) AddTarget ( c * gin . Context ) {
var requestData addTargetType
err := c . ShouldBindJSON ( & requestData )
if err != nil {
response . Result ( 101 , err , "参数错误!请重新提交!" , c )
return
}
if requestData . Title == "" {
response . Result ( 102 , err , "请输入指标名称!" , c )
return
}
if requestData . Type == 0 {
requestData . Type = 1
}
if requestData . Share == 0 {
requestData . Share = 1
} else {
if requestData . Share > 1 {
if len ( requestData . RelevantDepartments ) == 0 {
response . Result ( 103 , err , "您选择了此指标为指定部门使用!但您未指定具体使用部门!请指定相关使用部门!" , c )
return
}
}
}
if requestData . Uniteing == "" {
response . Result ( 104 , err , "请输入计量单位!" , c )
return
}
if requestData . Cycles == 0 {
requestData . Cycles = 4
}
if requestData . CycleAttres == 0 {
requestData . CycleAttres = 1
}
gormDb := global . GVA_DB_Performanceappraisal
gormDb = gormDb . Model ( & assessmentmodel . EvaluationTarget { } ) . Select ( "et_title" ) . Where ( "`et_title` = ? AND `et_type` = ?" , requestData . Title , requestData . Type )
dimensionId , dimensionErr := strconv . ParseInt ( requestData . Dimension , 10 , 64 )
if dimensionErr == nil && dimensionId != 0 {
gormDb = gormDb . Where ( "`et_dimension` = ?" , requestData . Dimension )
}
judgeOut := commonus . MapOut ( )
judgeErr := gormDb . First ( & judgeOut )
if judgeErr == nil {
response . Result ( 105 , err , "此考核指标已经存在!请不要重复添加!" , c )
return
}
var saveData assessmentmodel . EvaluationTarget
saveData . Title = requestData . Title
saveData . Type = requestData . Type
saveData . State = 1
saveData . AddTime = time . Now ( ) . Unix ( )
saveData . Share = requestData . Share
if len ( requestData . RelevantDepartments ) > 0 {
saveData . RelevantDepartments = strings . Join ( requestData . RelevantDepartments , "," )
}
if dimensionErr == nil {
saveData . Dimension = dimensionId
}
saveData . Key = commonus . GetFileNumberEs ( )
if len ( requestData . Report ) > 0 {
saveData . Report = strings . Join ( requestData . Report , "," )
}
saveData . Uniteing = requestData . Uniteing
saveData . Cycles = requestData . Cycles
saveData . CycleAttres = requestData . CycleAttres
if len ( requestData . VisibleRangeGroup ) > 0 {
saveData . VisibleRangeGroup = strings . Join ( requestData . VisibleRangeGroup , "," )
}
if len ( requestData . VisibleRangeDepart ) > 0 {
saveData . VisibleRange = strings . Join ( requestData . VisibleRangeDepart , "," )
}
dutyInfoErr := global . GVA_DB_Performanceappraisal . Create ( & saveData ) . Error
if dutyInfoErr != nil {
response . Result ( 106 , saveData , "数据写入失败!" , c )
} else {
response . Result ( 0 , saveData , "数据写入成功!" , c )
}
}
//计算可见范围
func calculVisibleRange ( groupStr , depart [ ] string ) ( visibleRange string ) {
if len ( depart ) > 0 {
for d_index , d_val := range depart {
if d_index == 0 {
visibleRange = d_val
} else {
visibleRange = visibleRange + "," + d_val
}
}
return
} else {
if len ( groupStr ) > 0 {
for g_index , g_val := range groupStr {
if g_index == 0 {
visibleRange = getBranchFactoryList ( g_val )
} else {
visibleRange = visibleRange + "," + getBranchFactoryList ( g_val )
}
}
return
}
}
return
}
//获得分厂列表
func getBranchFactoryList ( id string ) ( bfIdStr string ) {
var ContInfo [ ] testpage . BranchFactory
err := global . GVA_DB_Master . Select ( "bf_id" ) . Where ( "bf_group = ? AND `bf_set` = 1" , id ) . Find ( & ContInfo ) . Error
if err != nil {
return
}
for b_index , b_val := range ContInfo {
if b_index == 0 {
bfIdStr = strconv . FormatInt ( b_val . Id , 10 )
} else {
bfIdStr = bfIdStr + "," + strconv . FormatInt ( b_val . Id , 10 )
}
}
return
}
//获取考核指标详情
func ( d * DutyHandle ) GetTarget ( c * gin . Context ) {
var requestData commonus . SetIds
err := c . ShouldBindJSON ( & requestData )
if err != nil {
response . Result ( 101 , err , "数据获取失败!" , c )
return
}
if requestData . Id == 0 && requestData . OutId == "" {
response . Result ( 102 , err , "参数错误!请重新提交!" , c )
return
}
if requestData . OutId != "" {
idInt , inIntErr := strconv . ParseInt ( requestData . OutId , 10 , 64 )
if inIntErr == nil {
requestData . Id = idInt
}
}
var systemEvalCont outTargetInfo
contErr := global . GVA_DB_Performanceappraisal . Model ( & assessmentmodel . EvaluationTarget { } ) . Where ( "`et_id` = ?" , requestData . Id ) . First ( & systemEvalCont ) . Error
if contErr != nil {
response . Result ( 103 , err , "数据获取失败!" , c )
return
}
if systemEvalCont . RelevantDepartments != "" {
systemEvalCont . RelevantDepartmentMap = strings . Split ( systemEvalCont . RelevantDepartments , "," )
systemEvalCont . GroupMap = commonus . GetDuboDepart ( strings . Split ( systemEvalCont . RelevantDepartments , "," ) )
}
if systemEvalCont . Report != "" {
systemEvalCont . ReportMap = strings . Split ( systemEvalCont . Report , "," )
}
if systemEvalCont . VisibleRangeGroup != "" {
systemEvalCont . VisibleRangeGroupMap = strings . Split ( systemEvalCont . VisibleRangeGroup , "," )
}
if systemEvalCont . VisibleRange != "" {
systemEvalCont . VisibleRangeDepartMap = strings . Split ( systemEvalCont . VisibleRange , "," )
}
systemEvalCont . Share = 2
systemEvalCont . DimensionIdStr = strconv . FormatInt ( systemEvalCont . Dimension , 10 )
response . Result ( 0 , systemEvalCont , "数据获取成功!" , c )
}
//编辑指标数据处理
func eiteTargetInfoes ( saveId int64 , saveData map [ string ] interface { } ) ( isTrue bool , infoErr error ) {
isTrue = false
infoErr = global . GVA_DB_Performanceappraisal . Model ( & assessmentmodel . EvaluationTarget { } ) . Where ( "`et_id` = ?" , saveId ) . Updates ( saveData ) . Error
if infoErr != nil {
return
}
isTrue = true
return
}
//删除工段内容
func ( d * DutyHandle ) DelTarget ( c * gin . Context ) {
var requestData dutyClassState
err := c . ShouldBindJSON ( & requestData )
if err != nil {
response . Result ( 101 , requestData , "数据获取失败!" , c )
return
}
if requestData . Id == 0 && requestData . OutId == "" {
response . Result ( 102 , err , "参数错误!请重新提交!" , c )
return
}
if requestData . OutId != "" {
idInt , inIntErr := strconv . ParseInt ( requestData . OutId , 10 , 64 )
if inIntErr == nil {
requestData . Id = idInt
}
}
if requestData . State == 0 {
requestData . State = 1
}
//判断该指标是否已经被使用过
// var qualitativeEvaluationAry []assessmentmodel.QualitativeEvaluation
var qeId int64 = 0
judgeErrQe := global . GVA_DB_Performanceappraisal . Model ( & assessmentmodel . QualitativeEvaluation { } ) . Select ( "qe_id" ) . Where ( "`qe_state` IN (1,2) AND `qe_target` = ?" , requestData . Id ) . Find ( & qeId )
if judgeErrQe == nil {
if qeId != 0 {
response . Result ( 103 , qeId , "该指标已经再考核方案中使用!请先解除使用关系,再进行删除操作!" , c )
return
}
}
saveData := commonus . MapOut ( )
saveData [ "et_state" ] = requestData . State
saveData [ "et_time" ] = time . Now ( ) . Unix ( )
if requestData . IsDel != 1 {
roleIsTrue , roleErr := eiteTargetInfoes ( requestData . Id , saveData )
if roleIsTrue != true {
response . Result ( 103 , roleErr , "修改失败!" , c )
return
}
response . Result ( 0 , requestData , "修改成功!" , c )
} else {
if requestData . State == 3 {
roleErr := global . GVA_DB_Performanceappraisal . Where ( "et_id = ?" , requestData . Id ) . Delete ( & assessmentmodel . EvaluationTarget { } ) . Error
if roleErr != nil {
response . Result ( 104 , saveData , "删除失败!" , c )
return
}
response . Result ( 0 , saveData , "删除成功!" , c )
} else {
roleIsTrue , roleErr := eiteTargetInfoes ( requestData . Id , saveData )
if roleIsTrue != true {
response . Result ( 103 , roleErr , "修改失败!" , c )
return
}
response . Result ( 0 , requestData , "修改成功!" , c )
}
}
}
//修改指标内容
func ( d * DutyHandle ) EiteTarget ( c * gin . Context ) {
var requestData eiteTargetTypeCont
err := c . ShouldBindJSON ( & requestData )
if err != nil {
response . Result ( 101 , err , "数据获取失败!" , c )
return
}
if requestData . Id == 0 && requestData . OutId == "" {
response . Result ( 102 , err , "参数错误!请重新提交!" , c )
return
}
if requestData . OutId != "" {
idInt , inIntErr := strconv . ParseInt ( requestData . OutId , 10 , 64 )
if inIntErr == nil {
requestData . Id = idInt
}
}
saveData := commonus . MapOut ( )
var oldTargetCont assessmentmodel . EvaluationTarget
targetInfoErr := global . GVA_DB_Performanceappraisal . Where ( "`et_id` = ?" , requestData . Id ) . First ( & oldTargetCont ) . Error
if targetInfoErr != nil {
response . Result ( 102 , err , "该指标不存在!请检查您的参数!" , c )
return
}
if requestData . Title == "" {
response . Result ( 102 , err , "请输入指标名称!" , c )
return
} else {
if requestData . Title != oldTargetCont . Title {
judgeTargetErr := global . GVA_DB_Performanceappraisal . Where ( "`et_title` = ? AND `et_type` = ?" , requestData . Title , oldTargetCont . Type ) . First ( & oldTargetCont ) . Error
if judgeTargetErr == nil {
response . Result ( 102 , err , "该指标名称已经存在!请不要重复输入!" , c )
return
}
}
saveData [ "et_title" ] = requestData . Title
}
if requestData . Type != 0 {
saveData [ "et_type" ] = requestData . Type
}
if len ( requestData . RelevantDepartments ) > 0 {
saveData [ "et_relevant_departments" ] = strings . Join ( requestData . RelevantDepartments , "," )
saveData [ "et_share" ] = 2
} else {
saveData [ "et_relevant_departments" ] = ""
saveData [ "et_share" ] = 1
}
// if requestData.Share != 0 {
// saveData["et_share"] = requestData.Share
// if requestData.Share > 1 {
// if len(requestData.RelevantDepartments) == 0 {
// response.Result(103, err, "您选择了此指标为指定部门使用!但您未指定具体使用部门!请指定相关使用部门!", c)
// return
// }
// saveData["et_relevant_departments"] = strings.Join(requestData.RelevantDepartments, ",")
// } else {
// saveData["et_relevant_departments"] = ""
// }
// }
if requestData . Dimension != "" {
saveData [ "et_dimension" ] = requestData . Dimension
}
if len ( requestData . Report ) > 0 {
saveData [ "et_report" ] = strings . Join ( requestData . Report , "," )
}
if requestData . Uniteing != "" {
saveData [ "et_unit" ] = requestData . Uniteing
}
if requestData . Cycles != 0 {
saveData [ "et_cycle" ] = requestData . Cycles
}
if requestData . CycleAttres != 0 {
saveData [ "et_cycleattr" ] = requestData . CycleAttres
}
if len ( requestData . VisibleRangeGroup ) > 0 {
saveData [ "et_visible_group" ] = strings . Join ( requestData . VisibleRangeGroup , "," )
}
if len ( requestData . VisibleRangeDepart ) > 0 {
saveData [ "et_visible_range" ] = strings . Join ( requestData . VisibleRangeDepart , "," )
}
saveData [ "et_time" ] = time . Now ( ) . Unix ( )
roleIsTrue , roleErr := eiteTargetInfoes ( requestData . Id , saveData )
if roleIsTrue != true {
response . Result ( 106 , roleErr , "编辑失败!" , c )
} else {
response . Result ( 0 , saveData , "编辑成功!" , c )
}
}