package postpc
import (
"fmt"
"key_performance_indicators/api/version1/departmentseting/departmentpc"
"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"
)
//岗位指标相关操作
// 获取岗位指标详情
func ( a * ApiMethod ) GetPostTarget ( c * gin . Context ) {
var receivedValue publicmethod . PublicId
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if receivedValue . Id == "" {
publicmethod . Result ( 101 , receivedValue , c )
return
}
var postTargetCont modelskpi . PostTarget
err = postTargetCont . GetCont ( map [ string ] interface { } { "`id`" : receivedValue . Id } )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
var sendData getPostOneTarget
sendData . Id = postTargetCont . Id
sendData . Title = postTargetCont . Title //标题"`
sendData . Type = postTargetCont . Type //1:定性考核;2:定量考核"`
sendData . State = postTargetCont . State //:状态(1:启用;2:禁用;3:删除)"`
sendData . Time = postTargetCont . Time //创建时间"`
sendData . Share = postTargetCont . Share //1:共用;2:私用"`
sendData . ReleDepart = postTargetCont . ReleDepart //相关部门"`
sendData . DepartmentsPost = postTargetCont . DepartmentsPost //相关岗位"`
sendData . Dimension = postTargetCont . Dimension //维度"`
sendData . DimensionStr = strconv . FormatInt ( postTargetCont . Dimension , 10 )
sendData . Key = postTargetCont . Key //UUID"`
sendData . Report = postTargetCont . Report //上报人"`
sendData . Unit = postTargetCont . Unit //单位"`
sendData . Cycle = postTargetCont . Cycle //1:班;2:天;3:周;4:月;5:季度;6:年"`
sendData . Cycleattr = postTargetCont . Cycleattr //辅助计数"`
sendData . ScoringMethod = postTargetCont . ScoringMethod //计分方式(1:自动;2:手动)"`
sendData . VisibleRange = postTargetCont . VisibleRange //可见范围"`
sendData . VisibleGroup = postTargetCont . VisibleGroup //可见范围(集团)"`
sendData . OtherPostTarget , sendData . PostName , _ = getOrgOfPostReport ( postTargetCont . Dimension , postTargetCont . Id , 0 , 0 , postTargetCont . State , 1 , 2 )
// _, sendData.RelevantPostsMan, _ = getTargetAboutPost(postTargetCont.ReleDepart, postTargetCont.Dimension, postTargetCont.Id, 2)
publicmethod . Result ( 0 , sendData , c )
}
/ *
获取行政组织及岗位提报人
# dimensionId 维度
# targetId 指标
# sunTargetId 栏目
# targetBylawsId 细则
# state 状态
# typeInt 类型 ( 1 : 指标 ; 2 : 子目标 ; 3 : 细则 )
# level 级别 ( 1 : 部门级 ; 2 : 岗位级 )
* /
func getOrgOfPostReport ( dimensionId , targetId , sunTargetId , targetBylawsId int64 , state , typeInt , level int ) ( postPeopleList [ ] OtherPostTargetCont , postName string , err error ) {
var tarDepartList [ ] modelskpi . TargetDepartment
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Select ( "`department_id`,`post_id`" ) . Where ( "`state` = ? AND `level` = ? AND `dimension_id` = ? AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ?" , state , level , dimensionId , targetId , sunTargetId , targetBylawsId ) . Find ( & tarDepartList ) . Error
var postIsAry [ ] int64
if err == nil && len ( tarDepartList ) > 0 {
var postId int64
for _ , v := range tarDepartList {
if publicmethod . IsInTrue [ int64 ] ( v . PostId , postIsAry ) == false {
postIsAry = append ( postIsAry , v . PostId )
var postPeopleCont OtherPostTargetCont
postPeopleCont . OrgId = v . DepartmentId
postPeopleCont . PostId = v . PostId
_ , postPeopleCont . Operator , _ = getTargetAboutPostMan ( v . DepartmentId , v . PostId , dimensionId , targetId , level , typeInt )
postPeopleList = append ( postPeopleList , postPeopleCont )
postId = v . PostId
}
}
if postId != 0 {
var postCont modelshr . Position
postCont . GetCont ( map [ string ] interface { } { "`id`" : postId } , "`name`" )
postName = postCont . Name
}
}
return
}
/ *
获取岗位指标相关岗位
@ departmentId 部门Id
@ dimensionId 维度
@ targetId 指标
@ typeInt 级别 ( 1 : 部门级 ; 2 : 岗位级 )
@ level 1 : 指标 ; 2 : 子目标 ; 3 : 细则
func getTargetAboutPost ( departmentId , dimensionId , targetId int64 , level int ) ( postId [ ] int64 , postPeopleList [ ] postPeople , err error )
* /
func getTargetAboutPost ( departmentId , dimensionId , targetId int64 , typeInt , level int ) ( postId [ ] int64 , postPeopleList [ ] postPeople , err error ) {
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Distinct ( "`post_id`" ) . Where ( "`state` = 1 AND `type` = ? AND `level` = ? AND `department_id` = ? AND `dimension_id` = ? AND `target_id` = ?" , level , typeInt , departmentId , dimensionId , targetId ) . Find ( & postId ) . Error
if len ( postId ) > 0 {
for i := 0 ; i < len ( postId ) ; i ++ {
var postmanCont postPeople
postmanCont . Id = strconv . FormatInt ( postId [ i ] , 10 )
var postCont modelshr . Position
postCont . GetCont ( map [ string ] interface { } { "`id`" : postId [ i ] } , "`name`" )
postmanCont . Name = postCont . Name
_ , postmanCont . Operator , _ = getTargetAboutPostMan ( departmentId , postId [ i ] , dimensionId , targetId , typeInt , level )
postPeopleList = append ( postPeopleList , postmanCont )
}
}
return
}
/ *
获取岗位指标相关岗位提报人
@ departmentId 部门Id
@ postid 岗位
@ dimensionId 维度
@ targetId 指标
@ type 级别 ( 1 : 部门级 ; 2 : 岗位级 )
@ level 1 : 指标 ; 2 : 子目标 ; 3 : 细则
* /
func getTargetAboutPostMan ( departmentId , postid , dimensionId , targetId int64 , typeInt , level int ) ( peopleId [ ] int64 , postPeople [ ] string , err error ) {
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Distinct ( "`man_key`" ) . Where ( "`state` = 1 AND `type` = ? AND `type_level` = ? AND `department_id` = ? AND `post_id` = ? AND `dimension_id` = ? AND `target_id` = ?" , typeInt , level , departmentId , postid , dimensionId , targetId ) . Find ( & peopleId ) . Error
if len ( peopleId ) > 0 {
for i := 0 ; i < len ( peopleId ) ; i ++ {
postPeople = append ( postPeople , strconv . FormatInt ( peopleId [ i ] , 10 ) )
}
}
return
}
// 添加岗位指标
func ( a * ApiMethod ) AddPostTarget ( c * gin . Context ) {
var receivedValue addPostTarget
c . ShouldBindJSON ( & receivedValue )
if receivedValue . Title == "" {
publicmethod . Result ( 1 , receivedValue , c , "请输入指标名称!" )
return
}
if receivedValue . Type == 0 {
receivedValue . Type = 2
}
if receivedValue . ScoringMethod == 0 {
receivedValue . ScoringMethod = 1
}
if receivedValue . RelevantDepartments == "" {
publicmethod . Result ( 1 , receivedValue , c , "请选择该指标归属部门!" )
return
}
if len ( receivedValue . RelevantPostsMan ) < 1 {
publicmethod . Result ( 1 , receivedValue , c , "请选择该指标归属岗位!" )
return
}
if receivedValue . Dimension == "" {
publicmethod . Result ( 1 , receivedValue , c , "请选择指标归属维度!" )
return
}
if receivedValue . Unit == "" {
publicmethod . Result ( 1 , receivedValue , c , "请输入该指标计算单位!" )
return
}
if receivedValue . Cycle == 0 {
receivedValue . Cycle = 1
}
if receivedValue . CycleAttr == 0 {
receivedValue . CycleAttr = 1
}
var saveData modelskpi . PostTarget
saveData . Title = receivedValue . Title //标题"`
saveData . Type = receivedValue . Type //1:定性考核;2:定量考核"`
saveData . State = 1 //状态(1:启用;2:禁用;3:删除)"`
saveData . Time = time . Now ( ) . Unix ( ) //创建时间"`
saveData . Share = 2 //1:共用;2:私用"`
departmentId , _ := strconv . ParseInt ( receivedValue . RelevantDepartments , 10 , 64 )
saveData . ReleDepart = departmentId //相关部门"`
// saveData.DepartmentsPost = strings.Join(receivedValue.DepartmentsPost, ",") //相关岗位"`
dimensionId , _ := strconv . ParseInt ( receivedValue . Dimension , 10 , 64 )
saveData . Dimension = dimensionId //维度"`
saveData . Key = publicmethod . GetUUid ( 1 ) //UUID"`
// saveData.Report = strings.Join(receivedValue.Report, ",") //上报人"`
saveData . Unit = receivedValue . Unit //单位"`
saveData . Cycle = receivedValue . Cycle //1:班;2:天;3:周;4:月;5:季度;6:年"`
saveData . Cycleattr = receivedValue . CycleAttr //辅助计数"`
saveData . ScoringMethod = receivedValue . ScoringMethod //计分方式(1:自动;2:手动)"`
saveData . VisibleRange = strings . Join ( receivedValue . VisibleRange , "," ) //可见范围"`
saveData . VisibleGroup = strings . Join ( receivedValue . VisibleGroup , "," ) //可见范围(集团)"`
//获取岗位与提报人
var departAny [ ] string
var peopletAny [ ] string
for _ , v := range receivedValue . RelevantPostsMan {
if publicmethod . IsInTrue [ string ] ( v . Id , departAny ) == false {
departAny = append ( departAny , v . Id )
}
if len ( v . Operator ) > 0 {
for _ , ov := range v . Operator {
if publicmethod . IsInTrue [ string ] ( ov , peopletAny ) == false {
peopletAny = append ( peopletAny , ov )
}
}
}
}
saveData . DepartmentsPost = strings . Join ( departAny , "," ) //相关岗位"`
saveData . Report = strings . Join ( peopletAny , "," ) //上报人"`
err := overall . CONSTANT_DB_KPI . Create ( & saveData ) . Error
if err != nil {
publicmethod . Result ( 104 , err , c )
return
}
//关联部门岗位
if len ( departAny ) > 0 {
syncSetinges . Add ( 1 )
go EditTargetTableDimenAboutPostOfDepart ( dimensionId , saveData . Id , 0 , 0 , departmentId , departAny , 2 , receivedValue . Type )
}
//关联考核岗位和提报人
for _ , dv := range receivedValue . RelevantPostsMan {
postid , _ := strconv . ParseInt ( dv . Id , 10 , 64 )
syncSetinges . Add ( 1 )
go DepartAboutPostTargetReport ( dimensionId , saveData . Id , 0 , 0 , departmentId , postid , dv . Operator , 2 , receivedValue . Type )
}
syncSetinges . Wait ( )
publicmethod . Result ( 0 , err , c )
}
/ *
编辑指标 、 栏目 、 细则关联部门
协程处理
部门指标岗位提报人关联通用函数
@ dimensionId 维度
@ targetId 指标ID
@ targetSunId 栏目ID
@ bylawsId 指标细则
@ departmentId 接受考核部门
@ postId 岗位
@ class 级别 ( 1 : 部门级 ; 2 : 岗位级 )
@ nature 1 : 定性考核 ; 2 : 定量考核
EditTargetTableDimenAboutPostOfDepart ( dimensionId , targetId , targetSunId , bylawsId , departmentId int64 , postId [ ] string , class , nature int )
* /
func EditTargetTableDimenAboutPostOfDepart ( dimensionId , targetId , targetSunId , bylawsId , departmentId int64 , postId [ ] string , class , nature int ) {
defer syncSetinges . Done ( )
//将不属于的信息禁用
otherSaveData := publicmethod . MapOut [ string ] ( )
otherSaveData [ "`state`" ] = 2
otherSaveData [ "`time`" ] = time . Now ( ) . Unix ( )
//判断岗位是否存在
where := publicmethod . MapOut [ string ] ( )
where [ "`type`" ] = class
if targetId != 0 {
where [ "`dimension_id`" ] = dimensionId
}
if targetId != 0 {
where [ "`target_id`" ] = targetId
}
if targetSunId != 0 {
where [ "`target_sun_id`" ] = targetSunId
}
if bylawsId != 0 {
where [ "`target_bylaws`" ] = bylawsId
}
if departmentId != 0 {
where [ "`department_id`" ] = departmentId
}
if len ( postId ) < 1 {
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Where ( where ) . Updates ( & otherSaveData )
} else {
//获取关联部门
var aboutDepartment [ ] string
for _ , v := range postId {
if publicmethod . IsInTrue [ string ] ( v , aboutDepartment ) == false {
aboutDepartment = append ( aboutDepartment , v )
//判断该岗位是否已经关联
var tarDeparCont modelskpi . TargetDepartment
judgeAboutErr := overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Select ( "`id`,`state`" ) . Where ( where ) . Where ( "`post_id` = ?" , v ) . First ( & tarDeparCont ) . Error
if judgeAboutErr == nil {
tarDeparCont . EiteCont ( map [ string ] interface { } { "`id`" : tarDeparCont . Id } , map [ string ] interface { } { "`state`" : 1 , "`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
}
tarDeparCont . Dimension = dimensionId //维度"`
tarDeparCont . TargetId = targetId //指标ID"`
tarDeparCont . TargetSunId = targetSunId //子目标"`
tarDeparCont . TargetBylaws = bylawsId //指标细则"`
tarDeparCont . Type = xiZe //类型(1:指标;2:子目标;3:细则)"`
tarDeparCont . DepartmentId = departmentId //部门ID"`
postIdInt64 , _ := strconv . ParseInt ( v , 10 , 64 )
tarDeparCont . PostId = postIdInt64 //岗位ID"`
tarDeparCont . State = 1 //状态(1:启用;2:禁用;3:删除)"`
tarDeparCont . Time = time . Now ( ) . Unix ( ) //写入时间"`
tarDeparCont . Class = nature //1:定性考核;2:定量考核"`
tarDeparCont . Level = class //级别(1:部门级;2:岗位级)"`
overall . CONSTANT_DB_KPI . Create ( & tarDeparCont )
}
}
}
//清除不需要关联的部门
if len ( aboutDepartment ) > 0 {
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Where ( where ) . Not ( map [ string ] interface { } { "`post_id`" : aboutDepartment } ) . Updates ( & otherSaveData )
}
}
}
// 编辑岗位指标
func ( a * ApiMethod ) EditPostTarget ( c * gin . Context ) {
var receivedValue editPostTargetCont
c . ShouldBindJSON ( & receivedValue )
if receivedValue . Id == "" {
publicmethod . Result ( 1 , receivedValue , c , "参数错误!" )
return
}
where := publicmethod . MapOut [ string ] ( )
where [ "`id`" ] = receivedValue . Id
var postTargetCont modelskpi . PostTarget
err := postTargetCont . GetCont ( where )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
saveData := publicmethod . MapOut [ string ] ( )
if receivedValue . Title != "" && receivedValue . Title != postTargetCont . Title {
saveData [ "title" ] = receivedValue . Title
}
if receivedValue . Type != 0 && receivedValue . Type != postTargetCont . Type {
saveData [ "type" ] = receivedValue . Type
}
if receivedValue . ScoringMethod != 0 && receivedValue . ScoringMethod != postTargetCont . ScoringMethod {
saveData [ "scoring_method" ] = receivedValue . ScoringMethod
}
if receivedValue . RelevantDepartments != "" {
departmentId , _ := strconv . ParseInt ( receivedValue . RelevantDepartments , 10 , 64 )
if departmentId != postTargetCont . ReleDepart {
saveData [ "rele_depart" ] = departmentId
}
}
if receivedValue . Dimension != "" {
dimensionId , _ := strconv . ParseInt ( receivedValue . Dimension , 10 , 64 )
if dimensionId != postTargetCont . Dimension {
saveData [ "dimension" ] = dimensionId
}
}
if receivedValue . Unit != "" && receivedValue . Unit != postTargetCont . Unit {
saveData [ "unit" ] = receivedValue . Unit
}
if receivedValue . Cycle != 0 && receivedValue . Cycle != postTargetCont . Cycle {
saveData [ "cycle" ] = receivedValue . Cycle
}
if receivedValue . CycleAttr != 0 && receivedValue . CycleAttr != postTargetCont . Cycleattr {
saveData [ "cycleattr" ] = receivedValue . CycleAttr
}
if len ( receivedValue . VisibleRange ) > 0 {
visibleRangeStr := strings . Join ( receivedValue . VisibleRange , "," )
if visibleRangeStr != postTargetCont . VisibleRange {
saveData [ "visible_range" ] = visibleRangeStr
}
}
if len ( receivedValue . VisibleGroup ) > 0 {
visibleGroupStr := strings . Join ( receivedValue . VisibleGroup , "," )
if visibleGroupStr != postTargetCont . VisibleGroup {
saveData [ "visible_group" ] = visibleGroupStr
}
}
//获取岗位与提报人
var departAny [ ] string
var peopletAny [ ] string
for _ , v := range receivedValue . RelevantPostsMan {
if publicmethod . IsInTrue [ string ] ( v . Id , departAny ) == false {
departAny = append ( departAny , v . Id )
}
if len ( v . Operator ) > 0 {
for _ , ov := range v . Operator {
if publicmethod . IsInTrue [ string ] ( ov , peopletAny ) == false {
peopletAny = append ( peopletAny , ov )
}
}
}
}
if len ( departAny ) > 0 {
departPostStr := strings . Join ( departAny , "," )
if departPostStr != postTargetCont . DepartmentsPost {
saveData [ "departments_post" ] = departPostStr
//关联部门岗位
if len ( departAny ) > 0 {
syncSetinges . Add ( 1 )
go EditTargetTableDimenAboutPostOfDepart ( postTargetCont . Dimension , postTargetCont . Id , 0 , 0 , postTargetCont . ReleDepart , departAny , 2 , postTargetCont . Type )
}
}
}
if len ( peopletAny ) > 0 {
reportStr := strings . Join ( peopletAny , "," )
if reportStr != postTargetCont . Report {
saveData [ "report" ] = reportStr
//关联考核岗位和提报人
for _ , dv := range receivedValue . RelevantPostsMan {
postid , _ := strconv . ParseInt ( dv . Id , 10 , 64 )
syncSetinges . Add ( 1 )
go DepartAboutPostTargetReport ( postTargetCont . Dimension , postTargetCont . Id , 0 , 0 , postTargetCont . ReleDepart , postid , dv . Operator , 2 , postTargetCont . Type )
}
}
}
if len ( saveData ) > 0 {
saveData [ "time" ] = time . Now ( ) . Unix ( )
saveErr := postTargetCont . EiteCont ( where , saveData )
if saveErr != nil {
publicmethod . Result ( 106 , saveErr , c )
} else {
publicmethod . Result ( 0 , saveErr , c )
}
} else {
publicmethod . Result ( 0 , err , c )
}
}
// 获取岗位指标关联部门相关岗位及提报人
func ( a * ApiMethod ) GetTargetAboutDepartToPostMan ( c * gin . Context ) {
var receivedValue publicmethod . PublicId
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if receivedValue . Id == "" {
publicmethod . Result ( 101 , receivedValue , c )
return
}
var postTargetCont modelskpi . PostTarget
err = postTargetCont . GetCont ( map [ string ] interface { } { "`id`" : receivedValue . Id } )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
_ , outData , _ := getTargetAboutPost ( postTargetCont . ReleDepart , postTargetCont . Dimension , postTargetCont . Id , 2 , 1 )
publicmethod . Result ( 0 , outData , c )
}
// 根据指标添加岗位细则
func ( a * ApiMethod ) AddPostTargetCont ( c * gin . Context ) {
var receivedValue addPostContTarget
c . ShouldBindJSON ( & receivedValue )
if receivedValue . TargetId == "" {
publicmethod . Result ( 1 , receivedValue , c , "请选择岗位指标!" )
return
}
if receivedValue . DepartmentId == "" {
publicmethod . Result ( 1 , receivedValue , c , "请选择行政组织!" )
return
}
if receivedValue . TargetSunTitle == "" {
publicmethod . Result ( 1 , receivedValue , c , "请输入子栏目名称!" )
return
}
if len ( receivedValue . PostId ) < 1 {
publicmethod . Result ( 1 , receivedValue , c , "请选择岗位!" )
return
}
if len ( receivedValue . List ) < 1 {
publicmethod . Result ( 1 , receivedValue , c , "请输入指标细则!" )
return
}
xiZeIsTrue := 1
for _ , v := range receivedValue . List {
if v . Title == "" {
xiZeIsTrue = 2
break
}
if v . ReferenceScore == "" {
xiZeIsTrue = 2
break
}
if v . Unit == "" {
xiZeIsTrue = 2
break
}
}
if xiZeIsTrue != 1 {
publicmethod . Result ( 1 , receivedValue , c , "请检查你输入的指标细则!其中有不符合标准的细则!" )
return
}
targetSunIdInt , _ := strconv . ParseInt ( receivedValue . TargetId , 10 , 64 )
deartmentIdInt , _ := strconv . ParseInt ( receivedValue . DepartmentId , 10 , 64 )
//获取指标信息
var getTargetCont modelskpi . PostTarget
getTargetCont . GetCont ( map [ string ] interface { } { "`id`" : receivedValue . TargetId } )
_ , postPeople , _ := getTargetAboutPost ( deartmentIdInt , getTargetCont . Dimension , getTargetCont . Id , 2 , 3 )
//指标子栏目
var sunTargetCont modelskpi . PostSonTarget
sunErr := sunTargetCont . GetCont ( map [ string ] interface { } { "`title`" : receivedValue . TargetSunTitle , "`parent_id`" : receivedValue . TargetId , "depart" : receivedValue . DepartmentId } , "`id`" )
if sunErr != nil {
sunTargetCont . Title = receivedValue . TargetSunTitle //标题"`
sunTargetCont . ParentId = targetSunIdInt //归属指标"`
sunTargetCont . Time = time . Now ( ) . Unix ( ) //创建时间"`
sunTargetCont . State = 1 //状态(1:启用;2:禁用;3:删除)"`
sunTargetCont . Depart = receivedValue . DepartmentId //关联部门"`
sunTargetCont . DepartPost = strings . Join ( receivedValue . PostId , "," )
sunTargetErr := overall . CONSTANT_DB_KPI . Create ( & sunTargetCont ) . Error
if sunTargetErr != nil {
publicmethod . Result ( 104 , sunTargetErr , c )
return
}
} else {
if sunTargetCont . State != 1 {
sunTargetCont . EiteCont ( map [ string ] interface { } { "`id`" : sunTargetCont . Id } , map [ string ] interface { } { "`state`" : 1 , "`time`" : time . Now ( ) . Unix ( ) } )
}
}
if sunTargetCont . Id == 0 {
publicmethod . Result ( 104 , sunTargetCont , c )
return
}
//考核细则写入
for _ , lv := range receivedValue . List {
if lv . Class == 0 {
lv . Class = 1
}
if len ( lv . Inspect ) == 0 {
lv . Inspect = append ( lv . Inspect , "1" )
}
if lv . Cycle == 0 {
lv . Cycle = getTargetCont . Cycle
}
if lv . CycleAttr == 0 {
lv . CycleAttr = getTargetCont . Cycleattr
}
if lv . Frequency == 0 {
lv . Frequency = 1
}
var minScoreInt int64
var maxScoreInt int64
scoreAry := strings . Split ( lv . 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
} 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
}
var minMoney int64 //罚款或奖励最高金额
var maxMoney int64 //罚款或奖励最新金额
moneyAry := strings . Split ( lv . CashStandard , "-" )
moneyAryLen := len ( moneyAry )
if moneyAryLen > 0 {
if moneyAryLen == 1 {
maxMoneyEs , _ := strconv . ParseFloat ( moneyAry [ 0 ] , 64 )
maxMoney , _ = strconv . ParseInt ( strconv . FormatFloat ( maxMoneyEs * 100 , 'f' , - 1 , 64 ) , 10 , 64 )
minMoney = 0
} else {
maxMoneyEs , _ := strconv . ParseFloat ( moneyAry [ moneyAryLen - 1 ] , 64 )
maxMoney , _ = strconv . ParseInt ( strconv . FormatFloat ( maxMoneyEs * 100 , 'f' , - 1 , 64 ) , 10 , 64 )
minMoneyEs , _ := strconv . ParseFloat ( moneyAry [ 0 ] , 64 )
minMoney , _ = strconv . ParseInt ( strconv . FormatFloat ( minMoneyEs * 100 , 'f' , - 1 , 64 ) , 10 , 64 )
}
} else {
minMoney = 0
maxMoney = 0
}
var saveCont modelskpi . PostTargetDetails
saveCont . Title = lv . Title //指标细则"`
saveCont . Content = lv . Explain //备注说明"`
saveCont . ParentId = targetSunIdInt //归属指标栏目"`
saveCont . ParentIdSun = sunTargetCont . Id //归属指标子栏目"`
saveCont . State = 1 //状态(1:启用;2:禁用;3:删除)"`
saveCont . AddTime = time . Now ( ) . Unix ( ) //制定时间"`
saveCont . MinScore = minScoreInt //最小分*100保存"`
saveCont . MaxScore = maxScoreInt //最大分*100保存"`
saveCont . Company = lv . Unit //单位"`
saveCont . AddReduce = lv . Class //1:减少;2:增加;3:无属性,现场确认加或减"`
saveCont . CensorType = strings . Join ( lv . Inspect , "," ) //检查方式"`
saveCont . CensorCont = lv . Evidence //客观证据"`
saveCont . CensorRate = lv . Frequency //检查频次"`
saveCont . Cycles = lv . Cycle //1:班;2:天;3:周;4:月;5:季度;6:年"`
saveCont . CycleAttres = lv . CycleAttr //辅助计数"`
saveCont . Paretment = strconv . FormatInt ( deartmentIdInt , 10 ) //接受考核的部门"`
// saveCont.ParetmentPost = strings.Join(requestData.PostId, ",") //接受考核的部门岗位"`
// saveCont.Reportary = strings.Join(lv.ReportAry, ",") //接受考核的部门岗位"`
saveCont . Punishmode = lv . PunishMode //处罚或奖励方式 1:分数;2:现金;3:分数加现金
saveCont . Minmoney = minMoney //最高罚款*100保存"`
saveCont . Maxmoney = maxMoney //最低罚款*100保存"`
syncSeting . Add ( 1 )
go addDetaonsCont ( saveCont , lv . RelevantPostsMan , postPeople , getTargetCont . Dimension )
}
syncSeting . Wait ( )
//获取子栏目关联岗位
var postIdInt64 [ ] int64
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Distinct ( "`post_id`" ) . Where ( "`state` = 1 AND `level` = ? AND `department_id` = ? AND `dimension_id` = ? AND `target_id` = ? AND `target_sun_id` = ?" , 2 , deartmentIdInt , getTargetCont . Dimension , getTargetCont . Id , sunTargetCont . Id ) . Find ( & postIdInt64 )
if len ( postIdInt64 ) > 0 {
var postIdStr [ ] string
for si := 0 ; si < len ( postIdInt64 ) ; si ++ {
postIdIntToStr := strconv . FormatInt ( postIdInt64 [ si ] , 10 )
postIdStr = append ( postIdStr , postIdIntToStr )
}
sunTargetCont . EiteCont ( map [ string ] interface { } { "`id`" : sunTargetCont . Id } , map [ string ] interface { } { "`depart_post`" : strings . Join ( postIdStr , "," ) , "`time`" : time . Now ( ) . Unix ( ) } )
}
publicmethod . Result ( 0 , postIdInt64 , c )
}
/ *
添加指标细则
@ saveCont 指标细则数据
@ postMan 指标细则岗位提报人键对
@ targetPostMan 指标设定提报人
@ dimensionId 维度
* /
func addDetaonsCont ( saveCont modelskpi . PostTargetDetails , postMan , targetPostMan [ ] postPeople , dimensionId int64 ) {
defer syncSeting . Done ( )
//获取岗位与提报人
var departAny [ ] string
var peopletAny [ ] string
var peoplePost [ ] postDeasiteMan
for _ , v := range postMan {
var peoPostCont postDeasiteMan
peoPostCont . Id = v . Id
if publicmethod . IsInTrue [ string ] ( v . Id , departAny ) == false {
departAny = append ( departAny , v . Id )
}
if len ( v . Operator ) > 0 {
for _ , ov := range v . Operator {
if publicmethod . IsInTrue [ string ] ( ov , peopletAny ) == false {
peopletAny = append ( peopletAny , ov )
peoPostCont . Operator = append ( peoPostCont . Operator , ov )
}
}
} else {
for _ , tarv := range targetPostMan {
if tarv . Id == v . Id {
for _ , otv := range tarv . Operator {
if publicmethod . IsInTrue [ string ] ( otv , peopletAny ) == false {
peopletAny = append ( peopletAny , otv )
peoPostCont . Operator = append ( peoPostCont . Operator , otv )
}
}
}
}
}
peoplePost = append ( peoplePost , peoPostCont )
}
saveCont . ParetmentPost = strings . Join ( departAny , "," ) //相关岗位"`
saveCont . Reportary = strings . Join ( peopletAny , "," ) //上报人"`
fmt . Printf ( "postMan------->%v--------targetPostMan------->%v--------departAny------->%v--------peopletAny------->%v\n" , postMan , targetPostMan , departAny , peopletAny )
overall . CONSTANT_DB_KPI . Create ( & saveCont )
fmt . Printf ( "postMan------->%v--------targetPostMan------->%v--------departAny------->%v--------peopletAny------->%v\n" , postMan , targetPostMan , departAny , peopletAny )
//关联部门岗位
if len ( departAny ) > 0 {
paretmentIdInt , _ := strconv . ParseInt ( saveCont . Paretment , 10 , 64 )
syncSetinges . Add ( 1 )
go EditTargetTableDimenAboutPostOfDepart ( dimensionId , saveCont . ParentId , saveCont . ParentIdSun , saveCont . Id , paretmentIdInt , departAny , 2 , 1 )
}
//关联考核岗位和提报人
for _ , dv := range peoplePost {
operatorList := dv . Operator
if len ( operatorList ) < 1 {
for _ , tarv := range targetPostMan {
if tarv . Id == dv . Id {
operatorList = tarv . Operator
}
}
}
postid , _ := strconv . ParseInt ( dv . Id , 10 , 64 )
paretmentIdInts , _ := strconv . ParseInt ( saveCont . Paretment , 10 , 64 )
syncSetinges . Add ( 1 )
go DepartAboutPostTargetReport ( dimensionId , saveCont . ParentId , saveCont . ParentIdSun , saveCont . Id , paretmentIdInts , postid , operatorList , 2 , 1 )
}
syncSetinges . Wait ( )
}
/ *
协程处理
部门指标岗位提报人关联通用函数
@ dimensionId 维度
@ targetId 指标ID
@ targetSunId 栏目ID
@ bylawsId 指标细则
@ departmentId 接受考核部门
@ postId 岗位
@ repart 提报人
@ class 级别 ( 1 : 部门级 ; 2 : 岗位级 )
@ nature 1 : 定性考核 ; 2 : 定量考核
func departAboutPostTargetReport ( dimensionId , targetId , targetSunId , bylawsId , departmentId , postId int64 , repart [ ] loopStruct , class , nature int )
* /
// 根据指标获取岗位定性指标细则列表
func ( a * ApiMethod ) PostTargetSunList ( c * gin . Context ) {
var requestData lookPostTargetDeta
c . ShouldBindJSON ( & requestData )
if requestData . Page == 0 {
requestData . Page = 1
}
if requestData . PageSize == 0 {
requestData . Page = 10
}
var postDetails [ ] modelskpi . PostTargetDetails
gormDb := overall . CONSTANT_DB_KPI . Model ( & modelskpi . PostTargetDetails { } ) . Where ( "`state` BETWEEN 1 AND 2" )
if requestData . Title != "" {
gormDb = gormDb . Where ( "`title` LIKE ?" , "%" + requestData . Title + "%" )
}
if requestData . DepartmentId != "" {
gormDb = gormDb . Where ( "`paretment` = ?" , requestData . DepartmentId )
}
if requestData . TargetId != "" {
gormDb = gormDb . Where ( "`parentid` = ?" , requestData . TargetId )
}
if requestData . Cycle != 0 {
gormDb = gormDb . Where ( "`cycle` = ?" , requestData . Cycle )
}
if len ( requestData . PostId ) > 0 {
var findInSet [ ] string
for _ , ctv := range requestData . PostId {
findWher := fmt . Sprintf ( "FIND_IN_SET(%v,`paretment_post`)" , ctv )
if publicmethod . IsInTrue [ string ] ( findWher , findInSet ) == false {
findInSet = append ( findInSet , findWher )
}
}
if len ( findInSet ) > 0 {
gormDb = gormDb . Where ( strings . Join ( findInSet , " OR " ) )
}
}
if len ( requestData . PostId ) > 0 {
var findInSetType [ ] string
for _ , ctvt := range requestData . Inspect {
findWherType := fmt . Sprintf ( "FIND_IN_SET(%v,`censor_type`)" , ctvt )
if publicmethod . IsInTrue [ string ] ( findWherType , findInSetType ) == false {
findInSetType = append ( findInSetType , findWherType )
}
}
if len ( findInSetType ) > 0 {
gormDb = gormDb . Where ( strings . Join ( findInSetType , " OR " ) )
}
}
gormDb = publicmethod . PageTurningSettings ( gormDb , requestData . Page , requestData . PageSize )
err := gormDb . Order ( "`parentid_sun` asc" ) . Order ( "`id` desc" ) . Find ( & postDetails ) . Error
if err != nil {
publicmethod . Result ( 107 , err . Error ( ) , c )
return
}
var total int64
totalErr := gormDb . Count ( & total ) . Error
if totalErr != nil {
total = 0
}
var sendDataAry [ ] sendNaitonTargetDeiment
for _ , v := range postDetails {
var sendDataCont sendNaitonTargetDeiment
sendDataCont . Id = v . Id
sendDataCont . Title = v . Title //指标细则"`
sendDataCont . Content = v . Content //指标说明"`
sendDataCont . ParentId = v . ParentId //归属指标栏目"`
sendDataCont . ParentIdSun = v . ParentIdSun //归属指标子栏目"`
sendDataCont . State = v . State //状态(1:启用;2:禁用;3:删除)"`
sendDataCont . AddTime = v . AddTime //制定时间"`
sendDataCont . MinScore = v . MinScore //最小分*100保存"`
sendDataCont . MaxScore = v . MaxScore //最大分*100保存"`
sendDataCont . Company = v . Company //单位"`
sendDataCont . AddReduce = v . AddReduce //1:减少;2:增加;3:无属性,现场确认加或减"`
sendDataCont . CensorType = v . CensorType //检查方式"`
sendDataCont . CensorCont = v . CensorCont //检查依据"`
sendDataCont . CensorRate = v . CensorRate // 检查频次"`
sendDataCont . Cycles = v . Cycles // 1:班;2:天;3:周;4:月;5:季度;6:年"`
sendDataCont . CycleAttres = v . CycleAttres //辅助计数"`
sendDataCont . Paretment = v . Paretment //接受考核的部门"`
sendDataCont . ParetmentPost = v . ParetmentPost //接受考核的部门岗位"`
sendDataCont . Reportary = v . Reportary //提报人"`
sendDataCont . Punishmode = v . Punishmode //处罚方式 1:扣分;2:现金处罚;3:扣分加现金"`
sendDataCont . Maxmoney = v . Maxmoney //最高罚款"`
sendDataCont . Minmoney = v . Minmoney //最低罚款"`
var sonTargetCont modelskpi . PostSonTarget
sonTargetCont . GetCont ( map [ string ] interface { } { "`id`" : v . ParentIdSun } , "`title`" )
sendDataCont . SonTargetTitle = sonTargetCont . Title
if v . MinScore != 0 {
sendDataCont . ReferenceScore = fmt . Sprintf ( "%v-%v" , publicmethod . DecimalEs ( float64 ( v . MinScore ) / 100 , 2 ) , publicmethod . DecimalEs ( float64 ( v . MaxScore ) / 100 , 2 ) )
} else {
sendDataCont . ReferenceScore = fmt . Sprintf ( "%v" , publicmethod . DecimalEs ( float64 ( v . MaxScore ) / 100 , 2 ) )
}
if v . Minmoney != 0 {
sendDataCont . CashStandard = fmt . Sprintf ( "%v-%v" , publicmethod . DecimalEs ( float64 ( v . Minmoney ) / 100 , 2 ) , publicmethod . DecimalEs ( float64 ( v . Maxmoney ) / 100 , 2 ) )
} else {
sendDataCont . CashStandard = fmt . Sprintf ( "%v" , publicmethod . DecimalEs ( float64 ( v . Maxmoney ) / 100 , 2 ) )
}
sendDataAry = append ( sendDataAry , sendDataCont )
}
publicmethod . ResultList ( 0 , requestData . Page , requestData . PageSize , total , int64 ( len ( sendDataAry ) ) , sendDataAry , c )
}
// 获取岗位子栏目详情
func ( a * ApiMethod ) GetSunTargetInfo ( c * gin . Context ) {
var receivedValue publicmethod . PublicId
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if receivedValue . Id == "" {
publicmethod . Result ( 101 , err , c )
return
}
var sonTargetCont modelskpi . PostSonTarget
err = sonTargetCont . GetCont ( map [ string ] interface { } { "`id`" : receivedValue . Id } )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
var sendData sendOneSonTargetCont
sendData . Id = sonTargetCont . Id
sendData . Title = sonTargetCont . Title //标题"`
sendData . ParentId = sonTargetCont . ParentId //归属指标"`
sendData . Time = sonTargetCont . Time //创建时间"`
sendData . State = sonTargetCont . State //状态(1:启用;2:禁用;3:删除)"`
sendData . Depart = sonTargetCont . Depart //关联部门"`
sendData . DepartPost = sonTargetCont . DepartPost //关联部门岗位"`
var departCont modelshr . AdministrativeOrganization
departCont . GetCont ( map [ string ] interface { } { "`id`" : sonTargetCont . Depart } , "`name`" )
sendData . Department = departCont . Name
sendData . IdStr = strconv . FormatInt ( sonTargetCont . Id , 10 )
//获取提报岗位
var reportPost [ ] int64
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Distinct ( "`post_id`" ) . Where ( "`state` = 1 AND `level` = 2 AND `department_id` = ? AND `target_id` = ? AND `target_sun_id` = ?" , sonTargetCont . Depart , sonTargetCont . ParentId , sonTargetCont . Id ) . Find ( & reportPost ) . Error
if err == nil && len ( reportPost ) > 0 {
for i := 0 ; i < len ( reportPost ) ; i ++ {
var postOfMan postOperator
postOfMan . Id = strconv . FormatInt ( reportPost [ i ] , 10 )
var postCont modelshr . Position
postCont . GetCont ( map [ string ] interface { } { "`id`" : reportPost [ i ] } , "`name`" )
postOfMan . Name = postCont . Name
var operList operatorList
reportWhere := publicmethod . MapOut [ string ] ( )
reportWhere [ "`target_id`" ] = sonTargetCont . ParentId
reportWhere [ "`target_sun_id`" ] = sonTargetCont . Id
reportWhere [ "`department_id`" ] = sonTargetCont . Depart
reportWhere [ "`post_id`" ] = reportPost [ i ]
reportWhere [ "`state`" ] = 1
_ , operList . UserKey , _ = departmentpc . GetAboutReport ( reportWhere , 2 )
if len ( operList . UserKey ) > 0 {
for _ , uv := range operList . UserKey {
var myCont modelshr . PersonArchives
myCont . GetCont ( map [ string ] interface { } { "`key`" : uv } , "`number`" , "`name`" , "`icon`" )
var myInfo UserContList
myInfo . Id = uv
myInfo . Name = myCont . Name
myInfo . Number = myCont . Number
myInfo . Icon = myCont . Icon
operList . UserList = append ( operList . UserList , myInfo )
}
}
postOfMan . Operator = operList
sendData . PostOfOperator = append ( sendData . PostOfOperator , postOfMan )
}
}
publicmethod . Result ( 0 , sendData , c )
}
// 编辑岗位子栏目
func ( a * ApiMethod ) EditSonTargetCont ( c * gin . Context ) {
var receivedValue editSonTargetPost
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if receivedValue . Id == "" {
publicmethod . Result ( 1 , receivedValue , c , "您输入的参数不正确!" )
return
}
where := map [ string ] interface { } { "`id`" : receivedValue . Id }
var sonTarCont modelskpi . PostSonTarget
err = sonTarCont . GetCont ( where )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
saveData := publicmethod . MapOut [ string ] ( )
if receivedValue . Name != "" && receivedValue . Name != sonTarCont . Title {
saveData [ "title" ] = sonTarCont . Title
}
saveData [ "time" ] = time . Now ( ) . Unix ( )
err = sonTarCont . EiteCont ( map [ string ] interface { } { "`id`" : sonTarCont . Id } , saveData )
var postTarCont modelskpi . PostTarget
postTarCont . GetCont ( map [ string ] interface { } { "`id`" : sonTarCont . ParentId } , "`dimension`" )
if len ( receivedValue . PostOfOperator ) > 0 {
syncSeting . Add ( 1 )
departInt , _ := strconv . ParseInt ( sonTarCont . Depart , 10 , 64 )
go postSonTargetAboutOrder ( postTarCont . Dimension , departInt , sonTarCont . ParentId , sonTarCont . Id , receivedValue . PostOfOperator )
}
syncSeting . Wait ( )
//获取子栏目关联岗位
var postIdInt64 [ ] int64
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Distinct ( "`post_id`" ) . Where ( "`state` = 1 AND `level` = ? AND `department_id` = ? AND `dimension_id` = ? AND `target_id` = ? AND `target_sun_id` = ?" , 2 , sonTarCont . Depart , postTarCont . Dimension , sonTarCont . ParentId , sonTarCont . Id ) . Find ( & postIdInt64 )
if len ( postIdInt64 ) > 0 {
var postIdStr [ ] string
for si := 0 ; si < len ( postIdInt64 ) ; si ++ {
postIdIntToStr := strconv . FormatInt ( postIdInt64 [ si ] , 10 )
postIdStr = append ( postIdStr , postIdIntToStr )
}
sonTarCont . EiteCont ( map [ string ] interface { } { "`id`" : sonTarCont . Id } , map [ string ] interface { } { "`depart_post`" : strings . Join ( postIdStr , "," ) , "`time`" : time . Now ( ) . Unix ( ) } )
}
if err != nil {
publicmethod . Result ( 106 , err , c )
return
}
publicmethod . Result ( 0 , err , c )
}
/ *
岗位子栏目关联岗位操作
@ dimensionId 维度
@ departmentId 部门
@ targetId 指标
@ sonTargetId 子栏目
@ postOfOperator 岗位与提报人
* /
func postSonTargetAboutOrder ( dimensionId , departmentId , targetId , sonTargetId int64 , postOfOperator [ ] postDeasiteMan ) {
defer syncSeting . Done ( )
wherePost := publicmethod . MapOut [ string ] ( )
// wherePost["`state`"] = 1
wherePost [ "`level`" ] = 2
wherePost [ "`department_id`" ] = departmentId
wherePost [ "`target_id`" ] = targetId
wherePost [ "`target_sun_id`" ] = sonTargetId
var sonTarDepartAddAry [ ] modelskpi . TargetDepartment
var postIdAry [ ] string
for _ , v := range postOfOperator {
if publicmethod . IsInTrue [ string ] ( v . Id , postIdAry ) == false {
postIdAry = append ( postIdAry , v . Id )
}
var tarDepartCont [ ] modelskpi . TargetDepartment
judgeErr := overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Where ( wherePost ) . Where ( "`post_id` = ?" , v . Id ) . Find ( & tarDepartCont ) . Error
if judgeErr == nil && len ( tarDepartCont ) > 0 {
for _ , tdcv := range tarDepartCont {
if tdcv . State != 1 {
var sonTargetContEdit modelskpi . TargetDepartment
sonTargetContEdit . EiteCont ( map [ string ] interface { } { "`id`" : tdcv . Id } , map [ string ] interface { } { "`state`" : 1 , "`time`" : time . Now ( ) . Unix ( ) } )
}
}
} else {
var sonTarDepartAdd modelskpi . TargetDepartment
sonTarDepartAdd . Dimension = dimensionId // 维度"`
sonTarDepartAdd . TargetId = targetId //指标ID"`
sonTarDepartAdd . TargetSunId = sonTargetId //子目标"`
sonTarDepartAdd . TargetBylaws = 0 //指标细则"`
sonTarDepartAdd . Type = 2 //类型(1:指标;2:子目标;3:细则)"`
sonTarDepartAdd . DepartmentId = departmentId //部门ID"`
idInt64 , _ := strconv . ParseInt ( v . Id , 10 , 64 )
sonTarDepartAdd . PostId = idInt64 //岗位ID"`
sonTarDepartAdd . State = 1 //状态(1:启用;2:禁用;3:删除)"`
sonTarDepartAdd . Time = time . Now ( ) . Unix ( ) //写入时间"`
sonTarDepartAdd . Class = 1 //1:定性考核;2:定量考核"`
sonTarDepartAdd . Level = 2 //级别(1:部门级;2:岗位级)"`
sonTarDepartAddAry = append ( sonTarDepartAddAry , sonTarDepartAdd )
}
//处理提报人
syncSetinges . Add ( 1 )
go sonPostTargetPeople ( dimensionId , departmentId , targetId , sonTargetId , v . Id , v . Operator )
}
if len ( sonTarDepartAddAry ) > 0 {
overall . CONSTANT_DB_KPI . Create ( & sonTarDepartAddAry )
}
//其他的岗位禁用
if len ( postIdAry ) > 0 {
//将不属于该指标细则的部门至禁用
otherSaveData := publicmethod . MapOut [ string ] ( )
otherSaveData [ "`state`" ] = 2
otherSaveData [ "`time`" ] = time . Now ( ) . Unix ( )
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Where ( wherePost ) . Not ( map [ string ] interface { } { "post_id" : postIdAry } ) . Updates ( & otherSaveData )
}
syncSetinges . Wait ( )
}
/ *
子栏目与提报人
@ dimensionId 维度
@ departmentId 部门
@ targetId 指标
@ sonTargetId 子栏目
@ postId 岗位
* /
func sonPostTargetPeople ( dimensionId , departmentId , targetId , sonTargetId int64 , postId string , operator [ ] string ) {
defer syncSetinges . Done ( )
var saveTarRepor [ ] modelskpi . TargetReport
if len ( operator ) > 0 {
wherePost := publicmethod . MapOut [ string ] ( )
// wherePost["`state`"] = 1
wherePost [ "`type`" ] = 2
wherePost [ "`department_id`" ] = departmentId
wherePost [ "`target_id`" ] = targetId
wherePost [ "`target_sun_id`" ] = sonTargetId
wherePost [ "`post_id`" ] = postId
for i := 0 ; i < len ( operator ) ; i ++ {
var tarReporList [ ] modelskpi . TargetReport
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Where ( wherePost ) . Where ( "`man_key` = ?" , operator [ i ] ) . Find ( & tarReporList )
if len ( tarReporList ) > 0 {
for _ , trlv := range tarReporList {
eidtSont := map [ string ] interface { } { "`state`" : 1 , "`time`" : time . Now ( ) . Unix ( ) }
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Where ( map [ string ] interface { } { "`id`" : trlv . Id } ) . Updates ( & eidtSont )
}
} else {
var saveData modelskpi . TargetReport
saveData . Dimension = dimensionId //维度"`
saveData . TargetId = targetId //指标ID"`
saveData . TargetSunId = sonTargetId //子目标"`
saveData . TargetBylaws = 0 //指标细则"`
saveData . DepartmentId = departmentId //部门ID"`
postIdInt64 , _ := strconv . ParseInt ( postId , 10 , 64 )
saveData . PostId = postIdInt64 //岗位ID"`
saveData . Type = 2 //类型(1:公司级;2:部门级)"`
saveData . State = 1 //状态(1:启用;2:禁用;3:删除)"`
var manCont modelshr . PersonArchives
manCont . GetCont ( map [ string ] interface { } { "`key`" : operator [ i ] } , "`key`" , "`admin_org`" )
saveData . ReportPerson = manCont . Key //上报人"`
saveData . ManDepartment = manCont . AdminOrg //提报人所在部门"`
saveData . Time = time . Now ( ) . Unix ( ) //写入时间"`
saveData . Class = 2 //定性考核;2:定量考核"`
saveData . Level = 2 //类型(1:指标;2:子目标;3:细则)"`
saveTarRepor = append ( saveTarRepor , saveData )
}
}
//将不属于该指标细则的部门至禁用
otherSaveData := publicmethod . MapOut [ string ] ( )
otherSaveData [ "`state`" ] = 2
otherSaveData [ "`time`" ] = time . Now ( ) . Unix ( )
overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Where ( wherePost ) . Not ( map [ string ] interface { } { "man_key" : operator } ) . Updates ( & otherSaveData )
}
if len ( saveTarRepor ) > 0 {
overall . CONSTANT_DB_KPI . Create ( & saveTarRepor )
}
}
// 删除子栏目
func ( a * ApiMethod ) DelSonTargetCont ( c * gin . Context ) {
var receivedValue publicmethod . PublicId
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if receivedValue . Id == "" {
publicmethod . Result ( 1 , receivedValue , c , "您输入的参数不正确!" )
return
}
where := map [ string ] interface { } { "`id`" : receivedValue . Id }
var sonTarCont modelskpi . PostSonTarget
err = sonTarCont . GetCont ( where )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
err = sonTarCont . EiteCont ( map [ string ] interface { } { "`id`" : sonTarCont . Id } , map [ string ] interface { } { "`state`" : 3 , "`time`" : time . Now ( ) . Unix ( ) } )
if err != nil {
publicmethod . Result ( 108 , err , c )
return
}
//处理指标细则
xiZeWhere := publicmethod . MapOut [ string ] ( )
xiZeWhere [ "`parentid`" ] = sonTarCont . ParentId
xiZeWhere [ "`parentid_sun`" ] = sonTarCont . Id
// xiZeWhere["`paretment`"] = sonTarCont.Depart
var postTarDetaCont modelskpi . PostTargetDetails
postTarDetaCont . EiteCont ( xiZeWhere , map [ string ] interface { } { "`state`" : 3 , "`time`" : time . Now ( ) . Unix ( ) } )
publicmethod . Result ( 0 , err , c )
}
// 添加单一定性指标细则
func ( a * ApiMethod ) AddOneTargetD ( c * gin . Context ) {
var receivedValue sonTargetAddDieastion
c . ShouldBindJSON ( & receivedValue )
if receivedValue . Id == "" {
publicmethod . Result ( 1 , receivedValue , c , "您输入的参数不正确!" )
return
}
where := map [ string ] interface { } { "`id`" : receivedValue . Id }
var sonTarCont modelskpi . PostSonTarget
err := sonTarCont . GetCont ( where )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
if sonTarCont . State != 1 {
sonTarCont . EiteCont ( where , map [ string ] interface { } { "`state`" : 1 , "`time`" : time . Now ( ) . Unix ( ) } )
}
if receivedValue . Title == "" {
publicmethod . Result ( 101 , receivedValue , c , "请输入细则名称" )
return
}
if receivedValue . PunishMode == 0 {
receivedValue . PunishMode = 1
}
var minScoreInt int64
var maxScoreInt int64
var minMoney int64 //罚款或奖励最高金额
var maxMoney int64 //罚款或奖励最新金额
switch receivedValue . PunishMode {
case 2 :
if receivedValue . CashStandard == "" {
publicmethod . Result ( 101 , receivedValue , c , "请输入考核现金标准" )
return
}
minMoney , maxMoney = caiFenStrint ( receivedValue . CashStandard )
case 3 :
if receivedValue . ReferenceScore == "" {
publicmethod . Result ( 101 , receivedValue , c , "请输入考核标准" )
return
}
minScoreInt , maxScoreInt = caiFenStrint ( receivedValue . ReferenceScore )
if receivedValue . CashStandard == "" {
publicmethod . Result ( 101 , receivedValue , c , "请输入考核现金标准" )
return
}
minMoney , maxMoney = caiFenStrint ( receivedValue . CashStandard )
if receivedValue . Unit == "" {
publicmethod . Result ( 101 , receivedValue , c , "请输入考核单位" )
return
}
default :
receivedValue . PunishMode = 1
if receivedValue . ReferenceScore == "" {
publicmethod . Result ( 101 , receivedValue , c , "请输入考核标准" )
return
}
if receivedValue . Unit == "" {
publicmethod . Result ( 101 , receivedValue , c , "请输入考核单位" )
return
}
minScoreInt , maxScoreInt = caiFenStrint ( receivedValue . ReferenceScore )
}
if receivedValue . Class == 0 {
receivedValue . Class = 1
}
if len ( receivedValue . Inspect ) < 1 {
receivedValue . Inspect = append ( receivedValue . Inspect , "1" )
}
if receivedValue . Cycle == 0 {
receivedValue . Cycle = 4
}
if receivedValue . CycleAttr == 0 {
receivedValue . CycleAttr = 1
}
if receivedValue . Frequency == 0 {
receivedValue . Frequency = 1
}
var saveCont modelskpi . PostTargetDetails
saveCont . Title = receivedValue . Title //指标细则"`
saveCont . Content = receivedValue . Explain //备注说明"`
saveCont . ParentId = sonTarCont . ParentId //归属指标栏目"`
saveCont . ParentIdSun = sonTarCont . Id //归属指标子栏目"`
saveCont . State = 1 //状态(1:启用;2:禁用;3:删除)"`
saveCont . AddTime = time . Now ( ) . Unix ( ) //制定时间"`
saveCont . MinScore = minScoreInt //最小分*100保存"`
saveCont . MaxScore = maxScoreInt //最大分*100保存"`
saveCont . Company = receivedValue . Unit //单位"`
saveCont . AddReduce = receivedValue . Class //1:减少;2:增加;3:无属性,现场确认加或减"`
saveCont . CensorType = strings . Join ( receivedValue . Inspect , "," ) //检查方式"`
saveCont . CensorCont = receivedValue . Evidence //客观证据"`
saveCont . CensorRate = receivedValue . Frequency //检查频次"`
saveCont . Cycles = receivedValue . Cycle //1:班;2:天;3:周;4:月;5:季度;6:年"`
saveCont . CycleAttres = receivedValue . CycleAttr //辅助计数"`
// saveCont.Paretment = strconv.FormatInt(sonTarCont.Depart, 10) //接受考核的部门"`
saveCont . Paretment = sonTarCont . Depart
// saveCont.ParetmentPost = strings.Join(requestData.PostId, ",") //接受考核的部门岗位"`
// saveCont.Reportary = strings.Join(receivedValue.ReportAry, ",") //接受考核的部门岗位"`
saveCont . Punishmode = receivedValue . PunishMode //处罚或奖励方式 1:分数;2:现金;3:分数加现金
saveCont . Minmoney = minMoney //最高罚款*100保存"`
saveCont . Maxmoney = maxMoney //最低罚款*100保存"`
//获取指标信息
var getTargetCont modelskpi . PostTarget
getTargetCont . GetCont ( map [ string ] interface { } { "`id`" : sonTarCont . ParentId } )
departInt , _ := strconv . ParseInt ( sonTarCont . Depart , 10 , 64 )
_ , postPeople , _ := getTargetSonAboutPost ( departInt , getTargetCont . Dimension , getTargetCont . Id , sonTarCont . Id , 2 )
syncSeting . Add ( 1 )
go addDetaonsCont ( saveCont , receivedValue . RelevantPostsMan , postPeople , getTargetCont . Dimension )
syncSeting . Wait ( )
publicmethod . Result ( 0 , receivedValue , c )
}
// 拆分细则标准或罚款
func caiFenStrint ( str string ) ( minData , maxData int64 ) {
moneyAry := strings . Split ( str , "-" )
moneyAryLen := len ( moneyAry )
if moneyAryLen > 0 {
if moneyAryLen == 1 {
maxMoneyEs , _ := strconv . ParseFloat ( moneyAry [ 0 ] , 64 )
maxData , _ = strconv . ParseInt ( strconv . FormatFloat ( maxMoneyEs * 100 , 'f' , - 1 , 64 ) , 10 , 64 )
minData = 0
} else {
maxMoneyEs , _ := strconv . ParseFloat ( moneyAry [ moneyAryLen - 1 ] , 64 )
maxData , _ = strconv . ParseInt ( strconv . FormatFloat ( maxMoneyEs * 100 , 'f' , - 1 , 64 ) , 10 , 64 )
minMoneyEs , _ := strconv . ParseFloat ( moneyAry [ 0 ] , 64 )
minData , _ = strconv . ParseInt ( strconv . FormatFloat ( minMoneyEs * 100 , 'f' , - 1 , 64 ) , 10 , 64 )
}
} else {
minData = 0
maxData = 0
}
return
}
/ *
获取岗位指标子栏目相关岗位
@ departmentId 部门Id
@ dimensionId 维度
@ targetId 指标
@ level 级别 ( 1 : 部门级 ; 2 : 岗位级 )
func getTargetAboutPost ( departmentId , dimensionId , targetId int64 , level int ) ( postId [ ] int64 , postPeopleList [ ] postPeople , err error )
* /
func getTargetSonAboutPost ( departmentId , dimensionId , targetId , sonTargetId int64 , level int ) ( postId [ ] int64 , postPeopleList [ ] postPeople , err error ) {
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Distinct ( "`post_id`" ) . Where ( "`state` = 1 AND `level` = ? AND `department_id` = ? AND `dimension_id` = ? AND `target_id` = ? AND `target_sun_id` = ?" , level , departmentId , dimensionId , targetId , sonTargetId ) . Find ( & postId ) . Error
if len ( postId ) > 0 {
for i := 0 ; i < len ( postId ) ; i ++ {
var postmanCont postPeople
postmanCont . Id = strconv . FormatInt ( postId [ i ] , 10 )
var postCont modelshr . Position
postCont . GetCont ( map [ string ] interface { } { "`id`" : postId [ i ] } , "`name`" )
postmanCont . Name = postCont . Name
_ , postmanCont . Operator , _ = getSonTargetAboutPostMan ( departmentId , postId [ i ] , dimensionId , targetId , sonTargetId , level )
if len ( postmanCont . Operator ) < 1 {
_ , postmanCont . Operator , _ = getTargetAboutPostMan ( departmentId , postId [ i ] , dimensionId , targetId , level , 1 )
}
postPeopleList = append ( postPeopleList , postmanCont )
}
}
return
}
/ *
获取岗位指标子栏目相关岗位提报人
@ departmentId 部门Id
@ postid 岗位
@ dimensionId 维度
@ targetId 指标
@ level 级别 ( 1 : 部门级 ; 2 : 岗位级 )
* /
func getSonTargetAboutPostMan ( departmentId , postid , dimensionId , targetId , sonTargetId int64 , level int ) ( peopleId [ ] int64 , postPeople [ ] string , err error ) {
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Distinct ( "`man_key`" ) . Where ( "`state` = 1 AND `type` = ? AND `department_id` = ? AND `post_id` = ? AND `dimension_id` = ? AND `target_id` = ? AND `target_sun_id` = ?" , level , departmentId , postid , dimensionId , targetId , sonTargetId ) . Find ( & peopleId ) . Error
if len ( peopleId ) > 0 {
for i := 0 ; i < len ( peopleId ) ; i ++ {
postPeople = append ( postPeople , strconv . FormatInt ( peopleId [ i ] , 10 ) )
}
}
return
}
// 删除指标细则
func ( a * ApiMethod ) EidtPostTarDetailsStrte ( c * gin . Context ) {
var requestData publicmethod . PublicState
c . ShouldBindJSON ( & requestData )
if requestData . Id == "" {
publicmethod . Result ( 1 , requestData , c , "请输入指标ID!" )
return
}
if requestData . State == 0 {
requestData . State = 1
}
if requestData . IsTrue == 0 {
requestData . IsTrue = 2
}
where := publicmethod . MapOut [ string ] ( )
where [ "`id`" ] = requestData . Id
var detaCont modelskpi . PostTargetDetails
detaErr := detaCont . GetCont ( where )
if detaErr != nil {
publicmethod . Result ( 1 , detaErr , c , "该指标细则不存在!" )
return
}
softDel := 1
if requestData . State != 3 {
saveData := publicmethod . MapOut [ string ] ( )
saveData [ "state" ] = requestData . State
saveData [ "time" ] = time . Now ( ) . Unix ( )
saveErr := detaCont . EiteCont ( where , saveData )
if saveErr != nil {
publicmethod . Result ( 1 , saveErr , c , "编辑失败!" )
return
}
} else {
if requestData . IsTrue != 1 {
saveData := publicmethod . MapOut [ string ] ( )
saveData [ "state" ] = requestData . State
saveData [ "time" ] = time . Now ( ) . Unix ( )
saveErr := detaCont . EiteCont ( where , saveData )
if saveErr != nil {
publicmethod . Result ( 1 , saveErr , c , "编辑失败!" )
return
}
} else {
softDel = 2
saveErr := detaCont . DelCont ( where )
if saveErr != nil {
publicmethod . Result ( 1 , saveErr , c , "编辑失败!" )
return
}
}
}
departmentpc . SyncSeting . Add ( 1 )
go departmentpc . TarDepartState ( detaCont . ParentId , detaCont . ParentIdSun , detaCont . Id , requestData . State , softDel , 2 , 3 ) // 处理关联部门
departmentpc . SyncSeting . Add ( 1 )
go departmentpc . TarAboutReport ( detaCont . ParentId , detaCont . ParentIdSun , detaCont . Id , requestData . State , softDel , 2 , 3 ) // 处理相关提报人
departmentpc . SyncSeting . Wait ( )
publicmethod . Result ( 0 , detaCont , c )
}
// 编辑定性指标细则内容
func ( a * ApiMethod ) EditDeatilsCont ( c * gin . Context ) {
var receivedValue sonTargetAddDieastion
c . ShouldBindJSON ( & receivedValue )
if receivedValue . Id == "" {
publicmethod . Result ( 1 , receivedValue , c , "请输入指标ID!" )
return
}
where := publicmethod . MapOut [ string ] ( )
where [ "`id`" ] = receivedValue . Id
var detaCont modelskpi . PostTargetDetails
detaErr := detaCont . GetCont ( where )
if detaErr != nil {
publicmethod . Result ( 1 , detaErr , c , "该指标细则不存在!" )
return
}
saveData := publicmethod . MapOut [ string ] ( )
if receivedValue . Title != "" && receivedValue . Title != detaCont . Title {
saveData [ "title" ] = receivedValue . Title
}
if receivedValue . PunishMode == 0 {
receivedValue . PunishMode = 1
}
if receivedValue . Class != 0 && receivedValue . Class != detaCont . AddReduce {
saveData [ "add_reduce" ] = receivedValue . Class
}
switch receivedValue . PunishMode {
case 2 :
if receivedValue . CashStandard == "" {
minMoney , maxMoney := caiFenStrint ( receivedValue . CashStandard )
if minMoney != detaCont . Minmoney {
saveData [ "minmoney" ] = minMoney
}
if maxMoney != detaCont . Maxmoney {
saveData [ "maxmoney" ] = maxMoney
}
}
if receivedValue . PunishMode != detaCont . Punishmode {
saveData [ "punishmode" ] = receivedValue . PunishMode
}
case 3 :
if receivedValue . PunishMode != detaCont . Punishmode {
saveData [ "punishmode" ] = receivedValue . PunishMode
}
if receivedValue . ReferenceScore != "" {
minScoreInt , maxScoreInt := caiFenStrint ( receivedValue . ReferenceScore )
if minScoreInt != detaCont . MinScore {
saveData [ "min_score" ] = minScoreInt
}
if maxScoreInt != detaCont . MaxScore {
saveData [ "max_score" ] = maxScoreInt
}
}
if receivedValue . CashStandard != "" {
minMoney , maxMoney := caiFenStrint ( receivedValue . CashStandard )
if minMoney != detaCont . Minmoney {
saveData [ "minmoney" ] = minMoney
}
if maxMoney != detaCont . Maxmoney {
saveData [ "maxmoney" ] = maxMoney
}
}
if receivedValue . Unit == "" && receivedValue . Unit != detaCont . Company {
saveData [ "company" ] = receivedValue . Unit
}
default :
receivedValue . PunishMode = 1
if receivedValue . ReferenceScore == "" {
minScoreInt , maxScoreInt := caiFenStrint ( receivedValue . ReferenceScore )
if minScoreInt != detaCont . MinScore {
saveData [ "min_score" ] = minScoreInt
}
if maxScoreInt != detaCont . MaxScore {
saveData [ "max_score" ] = maxScoreInt
}
}
if receivedValue . Unit == "" && receivedValue . Unit != detaCont . Company {
saveData [ "company" ] = receivedValue . Unit
}
if receivedValue . PunishMode != detaCont . Punishmode {
saveData [ "punishmode" ] = receivedValue . PunishMode
}
}
if len ( receivedValue . Inspect ) > 0 {
inspectStr := strings . Join ( receivedValue . Inspect , "," )
if inspectStr != detaCont . CensorType {
saveData [ "censor_type" ] = inspectStr
}
}
if receivedValue . Cycle != 0 && receivedValue . Cycle != detaCont . Cycles {
saveData [ "cycle" ] = receivedValue . Cycle
}
if receivedValue . CycleAttr != 0 && receivedValue . CycleAttr != detaCont . CycleAttres {
saveData [ "cycleattr" ] = receivedValue . CycleAttr
}
if receivedValue . Frequency != 0 && receivedValue . Frequency != detaCont . CensorRate {
saveData [ "censor_rate" ] = receivedValue . Frequency
}
if receivedValue . Evidence != "" && receivedValue . Evidence != detaCont . CensorCont {
saveData [ "censor_cont" ] = receivedValue . Evidence
}
if receivedValue . Explain != "" && receivedValue . Explain != detaCont . Content {
saveData [ "content" ] = receivedValue . Explain
}
if len ( saveData ) > 0 {
saveData [ "time" ] = time . Now ( ) . Unix ( )
saveErr := detaCont . EiteCont ( where , saveData )
if saveErr != nil {
publicmethod . Result ( 106 , saveErr , c )
return
}
}
var postTarCont modelskpi . PostTarget
postTarCont . GetCont ( map [ string ] interface { } { "`id`" : detaCont . ParentId } , "`dimension`" )
dimensionId := postTarCont . Dimension
paretmentIdInt , _ := strconv . ParseInt ( detaCont . Paretment , 10 , 64 )
var departAny [ ] string
for _ , v := range receivedValue . RelevantPostsMan {
if publicmethod . IsInTrue [ string ] ( v . Id , departAny ) == false {
departAny = append ( departAny , v . Id )
}
postid , _ := strconv . ParseInt ( v . Id , 10 , 64 )
if len ( v . Operator ) > 0 {
syncSetinges . Add ( 1 )
go DepartAboutPostTargetReport ( dimensionId , detaCont . ParentId , detaCont . ParentIdSun , detaCont . Id , paretmentIdInt , postid , v . Operator , 2 , 1 )
}
}
//关联部门岗位
if len ( departAny ) > 0 {
syncSetinges . Add ( 1 )
go EditTargetTableDimenAboutPostOfDepart ( dimensionId , detaCont . ParentId , detaCont . ParentIdSun , detaCont . Id , paretmentIdInt , departAny , 2 , 1 )
}
syncSetinges . Wait ( )
publicmethod . Result ( 0 , receivedValue , c )
}
// 获取指标细则内容
func ( a * ApiMethod ) GetDetailsCont ( c * gin . Context ) {
var receivedValue publicmethod . PublicId
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if receivedValue . Id == "" {
publicmethod . Result ( 101 , err , c )
return
}
where := publicmethod . MapOut [ string ] ( )
where [ "`id`" ] = receivedValue . Id
var detaCont modelskpi . PostTargetDetails
detaErr := detaCont . GetCont ( where )
if detaErr != nil {
publicmethod . Result ( 1 , detaErr , c , "该指标细则不存在!" )
return
}
var sendData sonTargetAddDieastion
sendData . Id = strconv . FormatInt ( detaCont . Id , 10 )
if detaCont . MinScore != 0 {
sendData . ReferenceScore = fmt . Sprintf ( "%v-%v" , publicmethod . DecimalEs ( float64 ( detaCont . MinScore ) / 100 , 2 ) , publicmethod . DecimalEs ( float64 ( detaCont . MaxScore ) / 100 , 2 ) )
} else {
sendData . ReferenceScore = fmt . Sprintf ( "%v" , publicmethod . DecimalEs ( float64 ( detaCont . MaxScore ) / 100 , 2 ) )
}
if detaCont . Minmoney != 0 {
sendData . CashStandard = fmt . Sprintf ( "%v-%v" , publicmethod . DecimalEs ( float64 ( detaCont . Minmoney ) / 100 , 2 ) , publicmethod . DecimalEs ( float64 ( detaCont . Maxmoney ) / 100 , 2 ) )
} else {
sendData . CashStandard = fmt . Sprintf ( "%v" , publicmethod . DecimalEs ( float64 ( detaCont . Maxmoney ) / 100 , 2 ) )
}
// paretmentIdInt, _ := strconv.ParseInt(detaCont.Paretment, 10, 64)
var postTarCont modelskpi . PostTarget
postTarCont . GetCont ( map [ string ] interface { } { "`id`" : detaCont . ParentId } , "`dimension`" )
// dimensionId := postTarCont.Dimension
sendData . Title = detaCont . Title
sendData . Unit = detaCont . Company //单位
sendData . Class = detaCont . AddReduce
var inspectInt [ ] int
inspectStrList := strings . Split ( detaCont . CensorType , "," )
for _ , iv := range inspectStrList {
ivInt , _ := strconv . Atoi ( iv )
inspectInt = append ( inspectInt , ivInt )
} //1:减少;2:增加;3:无属性,现场确认加或减
sendData . InspectItn = inspectInt
sendData . Inspect = inspectStrList //检查方式(1:现场检查;2:资料检查;3:事件触发)
sendData . Cycle = detaCont . Cycles //1:班;2:天;3:周;4:月;5:季度;6:年
sendData . CycleAttr = detaCont . CycleAttres //辅助计数
sendData . Frequency = detaCont . CensorRate //频次
sendData . Evidence = detaCont . CensorCont //客观证据
sendData . Explain = detaCont . Content //备注说明
// _, sendData.RelevantPostsMan, _ = getTargetAboutPostDeta(paretmentIdInt, dimensionId, detaCont.ParentId, detaCont.ParentIdSun, detaCont.Id, 2) //相关岗位与提报人
sendData . RelevantPostsMan = GetPostReportList ( detaCont . ParentId , detaCont . ParentIdSun , detaCont . Id , 3 , 2 )
sendData . PunishMode = detaCont . Punishmode //处罚方式 1:扣分;2:现金处罚;3:扣分加现金
publicmethod . Result ( 0 , sendData , c )
}
// 获取关联岗位及提报人
/ *
# targetId 指标ID
# tableId 栏目ID
# bylawsId 细则ID
# types 类型 ( 1 : 指标 ; 2 : 子目标 ; 3 : 细则 )
# level 级别 ( 1 : 部门级 ; 2 : 岗位级 )
* /
func GetPostReportList ( targetId , tableId , bylawsId int64 , types , level int ) ( listCont [ ] postPeople ) {
var postTarDepartList [ ] modelskpi . TargetDepartment
err := overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Select ( "`department_id`,`post_id`" ) . Where ( "`state` = 1 AND `type` = ? AND `level` = ? AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ?" , types , level , targetId , tableId , bylawsId ) . Find ( & postTarDepartList ) . Error
if err != nil {
return
}
for _ , v := range postTarDepartList {
var contInfo postPeople
contInfo . Id = strconv . FormatInt ( v . PostId , 10 )
contInfo . OrgId = strconv . FormatInt ( v . DepartmentId , 10 )
contInfo . Operator = GetRepostList ( targetId , tableId , bylawsId , v . DepartmentId , v . PostId , types , level )
listCont = append ( listCont , contInfo )
}
return
}
// 获取提报人
/ *
# targetId 指标ID
# tableId 栏目ID
# bylawsId 细则ID
# types 类型 ( 1 : 指标 ; 2 : 子目标 ; 3 : 细则 )
# level 级别 ( 1 : 部门级 ; 2 : 岗位级 )
* /
func GetRepostList ( targetId , tableId , bylawsId , orgId , postId int64 , types , level int ) ( userKey [ ] string ) {
var mankey [ ] int64
err := overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Select ( "`man_key`" ) . Where ( "`state` = 1 AND `type` = ? AND `type_level` = ? AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ? AND `department_id` = ? AND `post_id` = ?" , level , types , targetId , tableId , bylawsId , orgId , postId ) . Find ( & mankey ) . Error
if err != nil || len ( mankey ) < 1 {
return
}
for _ , v := range mankey {
manKeyStr := strconv . FormatInt ( v , 10 )
if publicmethod . IsInTrue [ string ] ( manKeyStr , userKey ) == false {
userKey = append ( userKey , manKeyStr )
}
}
return
}
/ *
获取岗位指标子细则相关岗位
@ departmentId 部门Id
@ dimensionId 维度
@ targetId 指标
@ bylaws 指标细则
@ level 级别 ( 1 : 部门级 ; 2 : 岗位级 )
func getTargetAboutPost ( departmentId , dimensionId , targetId int64 , level int ) ( postId [ ] int64 , postPeopleList [ ] postPeople , err error )
* /
func getTargetAboutPostDeta ( departmentId , dimensionId , targetId , sonTargetId , bylaws int64 , level int ) ( postId [ ] int64 , postPeopleList [ ] postPeople , err error ) {
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Distinct ( "`post_id`" ) . Where ( "`state` = 1 AND `level` = ? AND `department_id` = ? AND `dimension_id` = ? AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ?" , level , departmentId , dimensionId , targetId , sonTargetId , bylaws ) . Find ( & postId ) . Error
if len ( postId ) > 0 {
for i := 0 ; i < len ( postId ) ; i ++ {
var postmanCont postPeople
postmanCont . Id = strconv . FormatInt ( postId [ i ] , 10 )
var postCont modelshr . Position
postCont . GetCont ( map [ string ] interface { } { "`id`" : postId [ i ] } , "`name`" )
postmanCont . Name = postCont . Name
_ , postmanCont . Operator , _ = getTargetAboutPostDetalMan ( departmentId , postId [ i ] , dimensionId , targetId , sonTargetId , bylaws , level )
postPeopleList = append ( postPeopleList , postmanCont )
}
}
return
}
/ *
获取岗位指标细则相关岗位提报人
@ departmentId 部门Id
@ postid 岗位
@ dimensionId 维度
@ targetId 指标
@ level 级别 ( 1 : 部门级 ; 2 : 岗位级 )
* /
func getTargetAboutPostDetalMan ( departmentId , postid , dimensionId , targetId , sonTargetId , bylaws int64 , level int ) ( peopleId [ ] int64 , postPeople [ ] string , err error ) {
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Distinct ( "`man_key`" ) . Where ( "`state` = 1 AND `type` = ? AND `department_id` = ? AND `post_id` = ? AND `dimension_id` = ? AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ?" , level , departmentId , postid , dimensionId , targetId , sonTargetId , bylaws ) . Find ( & peopleId ) . Error
if len ( peopleId ) > 0 {
for i := 0 ; i < len ( peopleId ) ; i ++ {
postPeople = append ( postPeople , strconv . FormatInt ( peopleId [ i ] , 10 ) )
}
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 02 - 10 11 : 00 : 59
@ 功能 : 获取岗位指标列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) GetPostTargetList ( c * gin . Context ) {
var receivedValue GetPostTargetContList
c . ShouldBindJSON ( & receivedValue )
if receivedValue . PageSize == 0 {
receivedValue . PageSize = 20
}
if receivedValue . Page == 0 {
receivedValue . Page = 1
}
var postTargetCont modelskpi . PostTarget
gormDb := overall . CONSTANT_DB_KPI . Table ( fmt . Sprintf ( "%s pt" , postTargetCont . TableName ( ) ) ) . Where ( "pt.`state` BETWEEN 1 AND 2" )
if receivedValue . Title != "" {
gormDb = gormDb . Where ( "pt.`title` LIKE ?" , "%" + receivedValue . Title + "%" )
}
if receivedValue . Dimension != "" {
gormDb = gormDb . Where ( "pt.`dimension` = ?" , receivedValue . Dimension )
}
if receivedValue . Attribute != 0 {
gormDb = gormDb . Where ( "pt.`type` = ?" , receivedValue . Attribute )
}
if len ( receivedValue . PostIdList ) > 0 {
gormDb = gormDb . Joins ( "JOIN target_department td ON pt.`id` = td.`target_id` AND td.`target_sun_id` = 0 AND td.`target_bylaws` = 0 AND td.`type` = 1 AND td.`state` BETWEEN 1 AND 2 AND td.`level` = 2 AND td.`post_id` IN ?" , receivedValue . PostIdList )
}
var total int64
gormDbTotal := gormDb . Distinct ( "pt.id" )
totalErr := gormDbTotal . Count ( & total ) . Error
if totalErr != nil {
total = 0
}
var targetIdAry [ ] int64
gormDb = gormDb . Distinct ( "pt.id" )
gormDb = publicmethod . PageTurningSettings ( gormDb , receivedValue . Page , receivedValue . PageSize )
err := gormDb . Order ( "pt.`id` DESC" ) . Find ( & targetIdAry ) . Error
if err != nil || len ( targetIdAry ) < 1 {
publicmethod . Result ( 105 , err , c )
return
}
//获取指标信息列表
var postTargetList [ ] modelskpi . PostTarget
err = overall . CONSTANT_DB_KPI . Model ( & modelskpi . PostTarget { } ) . Where ( "`id` IN ?" , targetIdAry ) . Order ( "`id` DESC" ) . Find ( & postTargetList ) . Error
if err != nil {
publicmethod . Result ( 105 , err , c )
return
}
var sendPostTargetContList [ ] outPostTargetList
for _ , v := range postTargetList {
var postTargetCont outPostTargetList
postTargetCont . Id = v . Id
postTargetCont . Title = v . Title //标题"`
postTargetCont . Type = v . Type //定性考核;2:定量考核"`
postTargetCont . State = v . State //状态(1:启用;2:禁用;3:删除)"`
postTargetCont . Time = v . Time //创建时间"`
postTargetCont . Share = v . Share //共用;2:私用"`
postTargetCont . ReleDepart = v . ReleDepart //相关部门"`
postTargetCont . DepartmentsPost = v . DepartmentsPost //相关岗位"`
postTargetCont . Dimension = v . Dimension //维度"`
postTargetCont . Key = v . Key //UUID"`
postTargetCont . Report = v . Report //上报人"`
postTargetCont . Unit = v . Unit //单位"`
postTargetCont . Cycle = v . Cycle //1:班;2:天;3:周;4:月;5:季度;6:年"`
postTargetCont . Cycleattr = v . Cycleattr //n辅助计数"`
postTargetCont . ScoringMethod = v . ScoringMethod //计分方式(1:自动;2:手动)"`
postTargetCont . VisibleRange = v . VisibleRange //可见范围"`
postTargetCont . VisibleGroup = v . VisibleGroup //可见范围(集团)"`
var dimCont modelskpi . DutyClass
dimCont . GetCont ( map [ string ] interface { } { "`id`" : v . Dimension } , "`title`" )
postTargetCont . DimensionName = dimCont . Title
postTargetCont . PostAry = getSubimtPost ( v . Id , 0 , 0 , 1 , 2 )
postTargetCont . ReportAry = getSubimtPostReport ( v . Id , 0 , 0 , 2 , 1 )
sendPostTargetContList = append ( sendPostTargetContList , postTargetCont )
}
publicmethod . ResultList ( 0 , receivedValue . Page , receivedValue . PageSize , total , int64 ( len ( sendPostTargetContList ) ) , sendPostTargetContList , c )
}
// 获取提报岗位
/ *
# targetId 指标Id
# sunTargetId 栏目Id
# targetBylawsId 细则Id
# typeInt 类型 ( 1 : 指标 ; 2 : 子目标 ; 3 : 细则 )
# level 级别 ( 1 : 部门级 ; 2 : 岗位级 )
* /
func getSubimtPost ( targetId , sunTargetId , targetBylawsId int64 , typeInt , level int ) ( postTargetListCont [ ] idAndName ) {
var postIdList [ ] int64
err := overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetDepartment { } ) . Distinct ( "`post_id`" ) . Where ( "`state` = 1 AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ? AND `type` = ? AND `level` = ?" , targetId , sunTargetId , targetBylawsId , typeInt , level ) . Find ( & postIdList ) . Error
if err != nil {
return
}
if len ( postIdList ) > 0 {
for _ , v := range postIdList {
var postTarInfo modelshr . Position
errPost := postTarInfo . GetCont ( map [ string ] interface { } { "`id`" : v } , "`name`" )
if errPost == nil {
var contInfo idAndName
contInfo . Id = strconv . FormatInt ( v , 10 )
contInfo . Name = postTarInfo . Name
postTargetListCont = append ( postTargetListCont , contInfo )
}
}
}
return
}
// 获取岗位指标提报人
/ *
# targetId 指标Id
# sunTargetId 栏目Id
# targetBylawsId 细则Id
# typeInt 级别 ( 1 : 部门级 ; 2 : 岗位级 )
# level 类型 ( 1 : 指标 ; 2 : 子目标 ; 3 : 细则 )
* /
func getSubimtPostReport ( targetId , sunTargetId , targetBylawsId int64 , typeInt , level int ) ( manContList [ ] UserContList ) {
var userKey [ ] int64
err := overall . CONSTANT_DB_KPI . Model ( & modelskpi . TargetReport { } ) . Distinct ( "`man_key`" ) . Where ( "`state` = 1 AND `target_id` = ? AND `target_sun_id` = ? AND `target_bylaws` = ? AND `type` = ? AND `type_level` = ?" , targetId , sunTargetId , targetBylawsId , typeInt , level ) . Find ( & userKey ) . Error
if err != nil {
return
}
if len ( userKey ) > 0 {
for _ , v := range userKey {
var postTarInfo modelshr . PersonArchives
errPost := postTarInfo . GetCont ( map [ string ] interface { } { "`key`" : v } , "`number`" , "`name`" , "`icon`" , "`icon_photo`" )
if errPost == nil {
var contInfo UserContList
contInfo . Id = strconv . FormatInt ( v , 10 )
contInfo . Name = postTarInfo . Name
contInfo . Icon = postTarInfo . Icon
contInfo . IconImg = postTarInfo . IconPhoto
manContList = append ( manContList , contInfo )
}
}
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 02 - 10 14 : 45 : 00
@ 功能 : 设置岗位指标状态
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) SetPostTargetState ( 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 [ "id" ] = receivedValue . Id
var targetCont modelskpi . PostTarget
err := targetCont . GetCont ( where , "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 . PostWorkflowOrders { } ) . Select ( "`id`" ) . Where ( "FIND_IN_SET(?,`target`)" , receivedValue . Id ) . Find ( & epIdList )
if len ( epIdList ) > 0 {
softDel = 1
} else {
softDel = 2
}
}
var editTargetState modelskpi . PostTarget
if softDel == 1 {
//软删除
editTargetState . EiteCont ( where , map [ string ] interface { } { "`state`" : receivedValue . State , "`time`" : time . Now ( ) . Unix ( ) } )
} else {
//硬删除
editTargetState . DelCont ( where )
}
syncSeting . Add ( 1 )
go SunPostTargetState ( targetCont . Id , receivedValue . State , softDel ) //处理目标
syncSeting . Add ( 1 )
go PostTargetDatailedState ( targetCont . Id , 0 , receivedValue . State , softDel ) // 处理细则
syncSeting . Add ( 1 )
go PostTarDepartState ( targetCont . Id , 0 , 0 , receivedValue . State , softDel , 2 , 1 ) // 处理关联部门
syncSeting . Add ( 1 )
go PostTarAboutReport ( targetCont . Id , 0 , 0 , receivedValue . State , softDel , 2 , 1 ) // 处理相关提报人
syncSeting . Wait ( )
publicmethod . Result ( 0 , err , c )
}
//处理相关提报人
/ *
# parentId 指标ID
# sunID 栏目
# bylawsId 细则
# state 状态
# isTrue 1 软删 ; 非1 : 硬删除
# level 1 : 部门级 ; 2 : 岗位级
# typeInt 1 : 指标 ; 2 : 子目标 ; 3 : 细则
* /
func PostTarAboutReport ( 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 )
}
}
// 处理关联部门
/ *
# parentId 指标ID
# sunID 栏目
# bylawsId 细则
# state 状态
# isTrue 1 软删 ; 非1 : 硬删除
# level 1 : 部门级 ; 2 : 岗位级
# typeInt 1 : 指标 ; 2 : 子目标 ; 3 : 细则
* /
func PostTarDepartState ( 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 栏目
# state 状态
# isTrue 1 软删 ; 非1 : 硬删除
* /
func PostTargetDatailedState ( 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 [ "parentid" ] = ParentId
}
if SunID != 0 {
wheAry [ "parentid_sun" ] = SunID
}
var tarDataCont modelskpi . PostTargetDetails
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 . PostTargetDetails { } ) . Where ( "`state` BETWEEN 1 AND 2" ) . Where ( wheAry ) . Updates ( map [ string ] interface { } { "`state`" : state , "`time`" : time . Now ( ) . Unix ( ) } )
}
} else {
tarDataCont . DelCont ( wheAry )
}
}
// 处理目标
/ *
# ParentId 指标ID
# state 状态
# isTrue 1 软删 ; 非1 : 硬删除
* /
func SunPostTargetState ( ParentId int64 , state , isTrue int ) {
defer syncSeting . Done ( )
if state == 0 {
state = 1
}
if isTrue == 0 {
isTrue = 1
}
var sunTargetCont modelskpi . PostSonTarget
if isTrue == 1 {
//软删除
if state != 1 {
sunTargetCont . EiteCont ( map [ string ] interface { } { "`parent_id`" : ParentId } , map [ string ] interface { } { "`state`" : state , "`time`" : time . Now ( ) . Unix ( ) } )
} else {
overall . CONSTANT_DB_KPI . Model ( & modelskpi . PostSonTarget { } ) . Where ( "`state` BETWEEN 1 AND 2 AND `parent_id` = ?" , ParentId ) . Updates ( map [ string ] interface { } { "`state`" : state , "`time`" : time . Now ( ) . Unix ( ) } )
}
} else {
sunTargetCont . DelCont ( map [ string ] interface { } { "`parent_id`" : ParentId } )
}
}