package positionkpi
import (
"strconv"
"strings"
"time"
"gin_server_admin/commonus"
"gin_server_admin/global"
"gin_server_admin/model/assessmentmodel"
"gin_server_admin/model/common/response"
"gin_server_admin/model/hrsystem"
"github.com/gin-gonic/gin"
)
// 岗位指标操作
// 入口
func ( a * ApiMethod ) Index ( c * gin . Context ) {
outPut := commonus . MapOut ( )
response . Result ( 0 , outPut , "角色管理入口获取成功" , c )
}
// 添加岗位指标
func ( a * ApiMethod ) AddPostTarget ( c * gin . Context ) {
var requestData addPostTarget
c . ShouldBindJSON ( & requestData )
if requestData . Title == "" {
response . Result ( 100 , requestData , "请输入指标名称!" , c )
return
}
if requestData . Type == 0 {
requestData . Type = 2
}
if requestData . ScoringMethod == 0 {
requestData . ScoringMethod = 1
}
if requestData . RelevantDepartments == "" {
response . Result ( 101 , requestData , "请选择该指标归属部门!" , c )
return
}
if len ( requestData . DepartmentsPost ) < 1 {
response . Result ( 102 , requestData , "请选择该指标归属岗位!" , c )
return
}
if requestData . Dimension == "" {
response . Result ( 103 , requestData , "请选择指标归属维度!" , c )
return
}
if requestData . Unit == "" {
response . Result ( 104 , requestData , "请输入该指标计算单位!" , c )
return
}
if requestData . Cycle == 0 {
requestData . Cycle = 1
}
if requestData . CycleAttr == 0 {
requestData . CycleAttr = 1
}
var saveData assessmentmodel . PostTarget
saveData . Title = requestData . Title //标题"`
saveData . Type = requestData . Type //1:定性考核;2:定量考核"`
saveData . State = 1 //状态(1:启用;2:禁用;3:删除)"`
saveData . Time = time . Now ( ) . Unix ( ) //创建时间"`
saveData . Share = 2 //1:共用;2:私用"`
departmentId , _ := strconv . ParseInt ( requestData . RelevantDepartments , 10 , 64 )
saveData . ReleDepart = departmentId //相关部门"`
saveData . DepartmentsPost = strings . Join ( requestData . DepartmentsPost , "," ) //相关岗位"`
dimensionId , _ := strconv . ParseInt ( requestData . Dimension , 10 , 64 )
saveData . Dimension = dimensionId //维度"`
saveData . Key = commonus . GetFileNumberEs ( ) //UUID"`
saveData . Report = strings . Join ( requestData . Report , "," ) //上报人"`
saveData . Unit = requestData . Unit //单位"`
saveData . Cycle = requestData . Cycle //1:班;2:天;3:周;4:月;5:季度;6:年"`
saveData . Cycleattr = requestData . CycleAttr //辅助计数"`
saveData . ScoringMethod = requestData . ScoringMethod //计分方式(1:自动;2:手动)"`
saveData . VisibleRange = strings . Join ( requestData . VisibleRange , "," ) //可见范围"`
saveData . VisibleGroup = strings . Join ( requestData . VisibleGroup , "," ) //可见范围(集团)"`
err := global . GVA_DB_Performanceappraisal . Create ( & saveData ) . Error
if err != nil {
response . Result ( 105 , err . Error ( ) , "数据写入失败!" , c )
return
}
response . Result ( 0 , saveData , "数据写入成功!" , c )
}
// 编辑岗位指标
func ( a * ApiMethod ) EditPostTarget ( c * gin . Context ) {
var requestData editPostTargetCont
c . ShouldBindJSON ( & requestData )
if requestData . Id == "" {
response . Result ( 100 , requestData , "请输入指标名称!" , c )
return
}
where := commonus . MapOut ( )
where [ "`id`" ] = requestData . Id
var postTargetCont assessmentmodel . PostTarget
err := postTargetCont . GetCont ( where )
if err != nil {
response . Result ( 100 , requestData , "该指标不存在!" , c )
return
}
saveData := commonus . MapOut ( )
if requestData . Title != "" && requestData . Title != postTargetCont . Title {
saveData [ "title" ] = requestData . Title
}
if requestData . Type != 0 && requestData . Type != postTargetCont . Type {
saveData [ "type" ] = requestData . Type
}
if requestData . ScoringMethod != 0 && requestData . ScoringMethod != postTargetCont . ScoringMethod {
saveData [ "scoring_method" ] = requestData . ScoringMethod
}
if requestData . RelevantDepartments != "" {
departmentId , _ := strconv . ParseInt ( requestData . RelevantDepartments , 10 , 64 )
if departmentId != postTargetCont . ReleDepart {
saveData [ "rele_depart" ] = departmentId
}
}
if len ( requestData . DepartmentsPost ) > 0 {
departPostStr := strings . Join ( requestData . DepartmentsPost , "," )
if departPostStr != postTargetCont . DepartmentsPost {
saveData [ "departments_post" ] = departPostStr
}
}
if requestData . Dimension != "" {
dimensionId , _ := strconv . ParseInt ( requestData . Dimension , 10 , 64 )
if dimensionId != postTargetCont . Dimension {
saveData [ "dimension" ] = dimensionId
}
}
if len ( requestData . Report ) > 0 {
reportStr := strings . Join ( requestData . Report , "," )
if reportStr != postTargetCont . Report {
saveData [ "report" ] = reportStr
}
}
if requestData . Unit != "" && requestData . Unit != postTargetCont . Unit {
saveData [ "unit" ] = requestData . Unit
}
if requestData . Cycle != 0 && requestData . Cycle != postTargetCont . Cycle {
saveData [ "cycle" ] = requestData . Cycle
}
if requestData . CycleAttr != 0 && requestData . CycleAttr != postTargetCont . Cycleattr {
saveData [ "cycleattr" ] = requestData . CycleAttr
}
if len ( requestData . VisibleRange ) > 0 {
visibleRangeStr := strings . Join ( requestData . VisibleRange , "," )
if visibleRangeStr != postTargetCont . VisibleRange {
saveData [ "visible_range" ] = visibleRangeStr
}
}
if len ( requestData . VisibleGroup ) > 0 {
visibleGroupStr := strings . Join ( requestData . VisibleGroup , "," )
if visibleGroupStr != postTargetCont . VisibleGroup {
saveData [ "visible_group" ] = visibleGroupStr
}
}
if len ( saveData ) > 0 {
saveData [ "time" ] = time . Now ( ) . Unix ( )
saveErr := postTargetCont . EditCont ( where , saveData )
if saveErr != nil {
response . Result ( 101 , saveErr , "数据编辑失败!" , c )
} else {
response . Result ( 0 , saveData , "数据编辑成功!" , c )
}
} else {
response . Result ( 0 , saveData , "数据编辑成功!" , c )
}
}
// 编辑岗位指标状态
func ( a * ApiMethod ) EditState ( c * gin . Context ) {
var requestData editState
c . ShouldBindJSON ( & requestData )
if requestData . Id == "" {
response . Result ( 100 , requestData , "请输入指标名称!" , c )
return
}
if requestData . State == 0 {
requestData . State = 1
}
if requestData . IsTrue == 0 {
requestData . IsTrue = 2
}
where := commonus . MapOut ( )
where [ "`id`" ] = requestData . Id
var postTargetCont assessmentmodel . PostTarget
err := postTargetCont . GetCont ( where )
if err != nil {
response . Result ( 100 , requestData , "该指标不存在!" , c )
return
}
saveData := commonus . MapOut ( )
saveData [ "`state`" ] = requestData . State
if requestData . State != 3 {
saveErr := postTargetCont . EditCont ( where , saveData )
if saveErr != nil {
response . Result ( 101 , saveErr , "数据编辑失败!" , c )
return
}
} else {
if requestData . IsTrue == 1 {
err := postTargetCont . DelCont ( where )
if err != nil {
response . Result ( 101 , err , "数据编辑失败!" , c )
return
}
} else {
saveErr := postTargetCont . EditCont ( where , saveData )
if saveErr != nil {
response . Result ( 101 , saveErr , "数据编辑失败!" , c )
return
}
}
}
if postTargetCont . Type == 1 {
if requestData . State != 3 {
eidtDingXing ( postTargetCont . Id , requestData . State )
} else {
if requestData . IsTrue == 1 {
var postSunTargetInfo assessmentmodel . PostSunTarget
postSunTargetInfo . DelCont ( map [ string ] interface { } { "`parent_id`" : postTargetCont . Id } )
var postDetailsInfo assessmentmodel . PostTargetDetails
postDetailsInfo . DelCont ( map [ string ] interface { } { "`parent_id`" : postTargetCont . Id } )
} else {
eidtDingXing ( postTargetCont . Id , requestData . State )
}
}
}
response . Result ( 0 , saveData , "数据编辑成功!" , c )
}
// 编辑定性考核关联项目
/ *
* /
func eidtDingXing ( postTarKey int64 , delVal int ) {
var postSunTargetInfo assessmentmodel . PostSunTarget
postSunTargetInfo . EditCont ( map [ string ] interface { } { "`parent_id`" : postTarKey } , map [ string ] interface { } { "`state`" : delVal , "`time`" : time . Now ( ) . Unix ( ) } )
var postDetailsInfo assessmentmodel . PostTargetDetails
postDetailsInfo . EditCont ( map [ string ] interface { } { "`parentid`" : postTarKey } , map [ string ] interface { } { "`state`" : delVal , "`time`" : time . Now ( ) . Unix ( ) } )
}
// 岗位指标列表
func ( a * ApiMethod ) PostTargetList ( c * gin . Context ) {
var requestData postTargetList
c . ShouldBindJSON ( & requestData )
if requestData . Page == 0 {
requestData . Page = 1
}
if requestData . PageSize == 0 {
requestData . PageSize = 20
}
var postTargetListAry [ ] outPostTargetList
gormDb := global . GVA_DB_Performanceappraisal . Model ( & assessmentmodel . PostTarget { } ) . Where ( "`state` BETWEEN 1 AND 2" )
if requestData . Title != "" {
gormDb = gormDb . Where ( "`title` LIKE ?" , "%" + requestData . Title + "%" )
}
if requestData . Type != 0 {
gormDb = gormDb . Where ( "`type` = ?" , requestData . Type )
}
if requestData . ScoringMethod != 0 {
gormDb = gormDb . Where ( "`scoring_method` = ?" , requestData . ScoringMethod )
}
if requestData . RelevantDepartments != "" {
gormDb = gormDb . Where ( "`rele_depart` = ?" , requestData . RelevantDepartments )
}
if requestData . DepartmentsPost != "" {
gormDb = gormDb . Where ( "FIND_IN_SET(?,`departments_post`)" , requestData . DepartmentsPost )
}
if requestData . Dimension != "" {
gormDb = gormDb . Where ( "`dimension` = ?" , requestData . Dimension )
}
if requestData . Report != "" {
gormDb = gormDb . Where ( "FIND_IN_SET(?,`report`)" , requestData . Report )
}
var total int64
totalErr := gormDb . Count ( & total ) . Error
if totalErr != nil {
total = 0
}
err := gormDb . Order ( "`id` desc" ) . Limit ( requestData . PageSize ) . Offset ( commonus . CalculatePages ( requestData . Page , requestData . PageSize ) ) . Find ( & postTargetListAry ) . Error
if err != nil {
response . Result ( 103 , err . Error ( ) , "没有数据!" , c )
}
for i , v := range postTargetListAry {
//关联维度
var dimCont assessmentmodel . DutyClass
dimCont . GetCont ( map [ string ] interface { } { "`id`" : v . Dimension } , "`title`" )
postTargetListAry [ i ] . DimensionName = dimCont . Title
//关联部门
var orgCont hrsystem . AdministrativeOrganization
orgCont . GetCont ( map [ string ] interface { } { "`id`" : v . ReleDepart } , "`name`" )
postTargetListAry [ i ] . DepartmentName = orgCont . Name
//岗位
if v . DepartmentsPost != "" {
postAry := strings . Split ( v . DepartmentsPost , "," )
if len ( postAry ) > 0 {
var postContLost [ ] hrsystem . AdministrativeOrganization
postErr := global . GVA_DB_HrDataBase . Model ( & hrsystem . AdministrativeOrganization { } ) . Select ( "`id`,`name`" ) . Where ( "`id` IN ?" , postAry ) . Find ( & postContLost ) . Error
if postErr == nil {
for _ , pv := range postContLost {
var postInfo idAndName
postInfo . Id = strconv . FormatInt ( pv . Id , 10 )
postInfo . Name = pv . Name
postTargetListAry [ i ] . PostAry = append ( postTargetListAry [ i ] . PostAry , postInfo )
}
}
}
}
//提报人
if v . Report != "" {
reportAry := strings . Split ( v . Report , "," )
if len ( reportAry ) > 0 {
var peopleList [ ] hrsystem . PersonArchives
peopleErr := global . GVA_DB_HrDataBase . Model ( & hrsystem . PersonArchives { } ) . Select ( "`key`,`number`,`name`,`icon`" ) . Where ( "`key` IN ?" , reportAry ) . Find ( & peopleList ) . Error
if peopleErr == nil {
for _ , manv := range peopleList {
var namCont reportUser
namCont . Id = strconv . FormatInt ( manv . Id , 10 )
namCont . Name = manv . Name
namCont . Number = manv . Number
namCont . Icon = manv . Icon
postTargetListAry [ i ] . ReportAry = append ( postTargetListAry [ i ] . ReportAry , namCont )
}
}
}
}
}
countSum := len ( postTargetListAry )
printData := commonus . OutPutList ( total , int64 ( countSum ) , requestData . Page , requestData . PageSize , postTargetListAry )
response . Result ( 0 , printData , "查询成功!" , c )
}