package postweb
import (
"encoding/json"
"fmt"
"key_performance_indicators/api/version1/flowchart"
"key_performance_indicators/middleware/wechatapp/wechatcallback"
"key_performance_indicators/middleware/wechatapp/wechatsendmsg"
"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 getPostManTargetList
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if receivedValue . Id == "" {
publicmethod . Result ( 101 , receivedValue , c )
return
}
if receivedValue . Class == 0 {
receivedValue . Class = 1
}
//获取被考核人基本西悉尼
var userCont modelshr . PersonArchives
err = userCont . GetCont ( map [ string ] interface { } { "`key`" : receivedValue . Id } , "`company`" , "`maindeparment`" , "`admin_org`" , "`position`" )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
//获取登录人信息
context , _ := publicmethod . LoginMyCont ( c )
var qualitSchemeList [ ] modelskpi . QualitativeEvaluationScheme
err = overall . CONSTANT_DB_KPI . Raw ( "SELECT q.* FROM qualitative_evaluation_scheme q Where q.state = 1 AND `attribute` = ? AND q.target_id = some (SELECT target_id FROM target_report tr WHERE tr.type = 2 AND tr.department_id = ? AND tr.post_id = ? AND tr.man_key = ?)" , receivedValue . Class , userCont . MainDeparment , userCont . Position , context . Key ) . Scan ( & qualitSchemeList ) . Error
if err != nil || len ( qualitSchemeList ) < 1 {
publicmethod . Result ( 107 , err , c )
return
}
var outDataAry [ ] outPostManTargetList
for _ , v := range qualitSchemeList {
// jsonStr, _ := json.Marshal(v)
// fmt.Printf("v----------->%v\n", string(jsonStr))
var outCont outPostManTargetList
outCont . Id = strconv . FormatInt ( v . Id , 10 )
outCont . Class = v . Attribute
outCont . Title = v . Title
if v . Attribute == 1 {
if v . Source == 1 { //岗位
var postTarDeta modelskpi . PostTargetDetails
postTarDeta . GetCont ( map [ string ] interface { } { "`id`" : v . DetailsId } , "`punishmode`" )
outCont . AddReduce = postTarDeta . Punishmode
} else { //部门
var departTarDeta modelskpi . DetailedTarget
departTarDeta . GetCont ( map [ string ] interface { } { "`dt_id`" : v . DetailsId } , "`dt_add_reduce`" )
outCont . AddReduce = departTarDeta . AddReduce
}
}
outDataAry = append ( outDataAry , outCont )
}
publicmethod . Result ( 0 , outDataAry , c )
}
// 定性指标列表
func ( a * ApiMethod ) GetPostNature ( 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 userCont modelshr . PersonArchives
err = userCont . GetCont ( map [ string ] interface { } { "`key`" : receivedValue . Id } , "`company`" , "`maindeparment`" , "`admin_org`" , "`position`" )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
//获取登录人信息
context , _ := publicmethod . LoginMyCont ( c )
//获取被考核人本岗位的考核项目
var itemList [ ] modelskpi . ShemePeople
err = overall . CONSTANT_DB_KPI . Where ( "`state` = 1 AND `tr_type` = 2 AND `attribute` = 1 AND `run_state` <> 2 AND `org_id` = ? AND `post_id` = ? AND `man_key` = ?" , userCont . AdminOrg , userCont . Position , context . Key ) . Find ( & itemList ) . Error
if err != nil || len ( itemList ) < 1 {
publicmethod . Result ( 107 , err , c )
return
}
var targetId [ ] int64
//获取指标内容
var outDataAry [ ] outPostManTargetList
for _ , v := range itemList {
if publicmethod . IsInTrue [ int64 ] ( v . TargetId , targetId ) == false {
var tarCont modelskpi . PostTarget
tarCont . GetCont ( map [ string ] interface { } { "`id`" : v . TargetId } , "`title`" )
var outCont outPostManTargetList
outCont . Id = strconv . FormatInt ( v . TargetId , 10 )
outCont . Title = tarCont . Title
outCont . Class = v . Attribute
if v . Source == 1 { //岗位
var postTarDeta modelskpi . PostTargetDetails
postTarDeta . GetCont ( map [ string ] interface { } { "`id`" : v . DetailsId } , "`add_reduce`" )
outCont . AddReduce = postTarDeta . AddReduce
} else { //部门
var departTarDeta modelskpi . DetailedTarget
departTarDeta . GetCont ( map [ string ] interface { } { "`dt_id`" : v . DetailsId } , "`dt_add_reduce`" )
outCont . AddReduce = departTarDeta . AddReduce
}
outCont . UserKey = receivedValue . Id
outCont . DimensionId = strconv . FormatInt ( v . DimensionId , 10 )
outDataAry = append ( outDataAry , outCont )
targetId = append ( targetId , v . TargetId )
}
}
publicmethod . Result ( 0 , outDataAry , c )
}
// 获取定性指标子栏目列表
func ( a * ApiMethod ) GetPostNatureSonTarget ( c * gin . Context ) {
var receivedValue getSonTarList
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if receivedValue . Id == "" {
publicmethod . Result ( 101 , receivedValue , c )
return
}
var sonTargetList [ ] modelskpi . PostSonTarget
gormDb := overall . CONSTANT_DB_KPI . Model ( & modelskpi . PostSonTarget { } ) . Where ( "`parent_id` = ?" , receivedValue . Id )
if receivedValue . OrgId != "" {
gormDb = gormDb . Where ( "`depart` = ?" , receivedValue . OrgId )
}
if receivedValue . PostId != "" {
gormDb = gormDb . Where ( "`depart_post` = ?" , receivedValue . PostId )
}
err = gormDb . Find ( & sonTargetList ) . Error
if err != nil || len ( sonTargetList ) < 1 {
publicmethod . Result ( 104 , err , c )
return
}
publicmethod . Result ( 0 , sonTargetList , c )
}
// 获取定量指标列表
func ( a * ApiMethod ) GetPostRation ( 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 userCont modelshr . PersonArchives
err = userCont . GetCont ( map [ string ] interface { } { "`key`" : receivedValue . Id } , "`company`" , "`maindeparment`" , "`admin_org`" , "`position`" )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
//获取登录人信息
context , _ := publicmethod . LoginMyCont ( c )
//获取被考核人本岗位的考核项目
var itemList [ ] modelskpi . ShemePeople
err = overall . CONSTANT_DB_KPI . Where ( "`state` = 1 AND `tr_type` = 2 AND `attribute` = 2 AND `run_state` <> 2 AND `org_id` = ? AND `post_id` = ? AND `man_key` = ?" , userCont . AdminOrg , userCont . Position , context . Key ) . Find ( & itemList ) . Error
if err != nil || len ( itemList ) < 1 {
publicmethod . Result ( 107 , err , c )
return
}
var targetId [ ] int64
//获取指标内容
var outDataAry [ ] outPostRation
for _ , v := range itemList {
if publicmethod . IsInTrue [ int64 ] ( v . TargetId , targetId ) == false {
var outCont outPostRation
outCont . Id = strconv . FormatInt ( v . TargetId , 10 )
outCont . ShemeId = strconv . FormatInt ( v . Id , 10 )
outCont . Title = v . Title
outCont . UserKey = receivedValue . Id
outCont . DimensionId = strconv . FormatInt ( v . DimensionId , 10 )
outDataAry = append ( outDataAry , outCont )
}
}
publicmethod . Result ( 0 , outDataAry , c )
}
// 获取岗位定性考核指标细则列表
func ( a * ApiMethod ) GetPostDeimensoInfo ( c * gin . Context ) {
var receivedValue getNatureDimeList
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if receivedValue . UserKey == "" {
publicmethod . Result ( 101 , receivedValue , c )
return
}
if receivedValue . DimensionId == "" {
publicmethod . Result ( 101 , receivedValue , c )
return
}
if receivedValue . TargetId == "" {
publicmethod . Result ( 101 , receivedValue , c )
return
}
if receivedValue . PageSize < 1 {
receivedValue . PageSize = 20
}
//获取被考核人基本信息
var userCont modelshr . PersonArchives
err = userCont . GetCont ( map [ string ] interface { } { "`key`" : receivedValue . UserKey } , "`company`" , "`maindeparment`" , "`admin_org`" , "`position`" )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
//获取登录人信息
context , _ := publicmethod . LoginMyCont ( c )
//获取被考核人本岗位的考核项目
var itemList [ ] modelskpi . ShemePeople
//SELECT * FROM `sheme_people` WHERE `state` = 1 AND `tr_type` = 2 AND `attribute` = 1 AND `run_state` <> 2 AND `dimension_id` = '16468024054665111' AND `target_id` = '3' AND `org_id` = 272 AND `post_id` = 794 AND `man_key` = 15993815826844528 AND `son_target_id` = '2' ORDER BY `son_target_id` DESC LIMIT 20 OFFSET 20
sqlStrList := "SELECT * FROM `sheme_people`"
sqlListCount := "SELECT count(*) FROM `sheme_people`"
sqlStr := "WHERE `state` = 1 AND `tr_type` = 2 AND `attribute` = 1 AND `run_state` <> 2"
if receivedValue . DimensionId != "" {
sqlStr = fmt . Sprintf ( "%v AND `dimension_id` = %v" , sqlStr , receivedValue . DimensionId )
}
if receivedValue . TargetId != "" {
sqlStr = fmt . Sprintf ( "%v AND `target_id` = %v" , sqlStr , receivedValue . TargetId )
}
if receivedValue . Sontargetid != "" {
sqlStr = fmt . Sprintf ( "%v AND `son_target_id` = %v" , sqlStr , receivedValue . Sontargetid )
}
if userCont . AdminOrg != 0 {
sqlStr = fmt . Sprintf ( "%v AND `org_id` = %v" , sqlStr , userCont . AdminOrg )
}
if userCont . Position != 0 {
sqlStr = fmt . Sprintf ( "%v AND `post_id` = %v" , sqlStr , userCont . Position )
}
if context . Key != 0 {
sqlStr = fmt . Sprintf ( "%v AND `man_key` = %v" , sqlStr , context . Key )
}
sqlStr = fmt . Sprintf ( "%v ORDER BY `son_target_id` DESC" , sqlStr )
if receivedValue . Page <= 1 {
sqlStr = fmt . Sprintf ( "%v LIMIT %v" , sqlStr , receivedValue . PageSize )
} else {
sqlStr = fmt . Sprintf ( "%v LIMIT %v OFFSET %v" , sqlStr , receivedValue . PageSize , publicmethod . LimitPage ( receivedValue . Page , receivedValue . PageSize ) )
}
var total int64
selectSqlStr := fmt . Sprintf ( "%v %v" , sqlStrList , sqlStr )
selectSqlStrCount := fmt . Sprintf ( "%v %v" , sqlListCount , sqlStr )
//原生查询
errGormEaw := overall . CONSTANT_DB_KPI . Raw ( selectSqlStr ) . Scan ( & itemList ) . Error
overall . CONSTANT_DB_KPI . Raw ( selectSqlStrCount ) . Scan ( & total )
// fmt.Printf("errGormEaw------------------->%v----------->%v----------->%v\n", itemList, errGormEaw, total)
// gormDb := overall.CONSTANT_DB_KPI.Model(&modelskpi.ShemePeople{})
// // gormDb = gormDb.Where("`state` = 1 AND `tr_type` = 2 AND `attribute` = 1")
// // gormDb = gormDb.Where("`dimension_id` = ? AND `target_id` = ? ", receivedValue.DimensionId, receivedValue.TargetId)
// // gormDb = gormDb.Where("`org_id` = ? AND `post_id` = ? AND `man_key` = ?", userCont.AdminOrg, userCont.Position, context.Key)
// gormDb = gormDb.Where("`state` = 1 AND `tr_type` = 2 AND `attribute` = 1 AND `run_state` <> 2 AND `dimension_id` = ? AND `target_id` = ? AND `org_id` = ? AND `post_id` = ? AND `man_key` = ?", receivedValue.DimensionId, receivedValue.TargetId, userCont.AdminOrg, userCont.Position, context.Key)
// if receivedValue.Sontargetid != "" {
// gormDb = gormDb.Where("`son_target_id` = ?", receivedValue.Sontargetid)
// }
// gormDb = publicmethod.PageTurningSettings(gormDb, receivedValue.Page, receivedValue.PageSize)
// errGorm := gormDb.Order("`son_target_id` DESC").Find(&itemList).Error
// totalErr := gormDb.Count(&total).Error
// if totalErr != nil {
// total = 0
// }
// fmt.Printf("outList------------------->%v----------->%v\n", itemList, total)
if errGormEaw != nil || total < 1 {
publicmethod . Result ( 107 , err , c )
return
}
var outList [ ] outNatureDimeCont
for _ , v := range itemList {
var outCont outNatureDimeCont
outCont . Id = v . Id
outCont . VersionNumber = v . VersionNumber // 版本编号"`
outCont . CompanyId = v . CompanyId // 归属公司"`
outCont . DepartmentId = v . DepartmentId // 归属部门"`
outCont . OrgId = v . OrgId // 归属行政组织"`
outCont . PostId = v . PostId // 归属岗位"`
outCont . Title = v . Title //考核项名称"`
outCont . DimensionId = v . DimensionId //维度"`
outCont . TargetId = v . TargetId // 指标"`
outCont . SonTargetId = v . SonTargetId //子栏目"`
outCont . DetailsId = v . DetailsId //细则"`
outCont . Attribute = v . Attribute // 属性 1:定性考核;2:定量考核"`
outCont . MinScore = publicmethod . DecimalEs ( v . MinScore / 100 , 2 ) // 最小分*100保存"`
outCont . MaxScore = publicmethod . DecimalEs ( v . MaxScore / 100 , 2 ) //最大分*100保存"`
outCont . ScoringMethod = v . ScoringMethod //计分方式(1:自动;2:手动)"`
outCont . State = v . State //状态(1:启用;2:禁用;3:删除)"`
outCont . Addtime = v . Addtime //添加时间"`
outCont . Eitetime = v . Eitetime // 编辑时间"`
outCont . CensorType = v . CensorType //检查方式(1:现场检查;2:资料检查;3:事件触发)"`
outCont . Source = v . Source //来源(1:岗位;2:部门引用)"`
outCont . RunState = v . RunState //运行状态(1:启用;2:禁用;3:观察)"`
outCont . Type = v . Type //类型(1:公司级;2:部门级)"`
outCont . ReportPerson = v . ReportPerson //上报人"`
outCont . ManDepartment = v . ManDepartment //提报人所在部门"`
outCont . Class = v . Class //1:定性考核;2:定量考核"`
outCont . Level = v . Level //类型(1:指标;2:子目标;3:细则)"`
outCont . Punishmode = v . Punishmode //处罚方式 1:扣分;2:现金处罚;3:扣分加现金
outCont . Maxmoney = publicmethod . DecimalEs ( v . Maxmoney / 100 , 2 ) //最高罚款
outCont . Minmoney = publicmethod . DecimalEs ( v . Minmoney / 100 , 2 ) //最低罚款
if v . CensorType != "" {
outCont . CensorTypeAry = strings . Split ( v . CensorType , "," )
}
if v . DetailsId != 0 {
//获取指标信息
if v . Source == 1 { //岗位
var targetCont modelskpi . PostTargetDetails
targetCont . GetCont ( map [ string ] interface { } { "`id`" : v . DetailsId } , "`content`" , "`add_reduce`" , "`censor_cont`" , "`company`" )
outCont . Context = targetCont . Content //指标说明"`
outCont . AddReduce = targetCont . AddReduce //1:减少;2:增加;3:无属性,现场确认加或减"`
outCont . CensorCont = targetCont . CensorCont //检查依据"`
outCont . Unity = targetCont . Company
} else { //部门
var departTarDeta modelskpi . DetailedTarget
departTarDeta . GetCont ( map [ string ] interface { } { "`dt_id`" : v . DetailsId } , "`dt_add_reduce`" , "`dt_company`" )
outCont . Context = departTarDeta . Content //指标说明"`
outCont . AddReduce = departTarDeta . AddReduce //1:减少;2:增加;3:无属性,现场确认加或减"`
outCont . CensorCont = departTarDeta . CensorCont //检查依据"`
outCont . Unity = departTarDeta . Company
}
}
if v . MinScore != 0 {
outCont . ScoreStr = fmt . Sprintf ( "%v-%v" , publicmethod . DecimalEs ( v . MinScore / 100 , 2 ) , publicmethod . DecimalEs ( v . MaxScore / 100 , 2 ) )
} else {
outCont . ScoreStr = fmt . Sprintf ( "%v" , publicmethod . DecimalEs ( v . MaxScore / 100 , 2 ) )
}
if v . Minmoney != 0 {
outCont . MoneyStr = fmt . Sprintf ( "%v-%v" , publicmethod . DecimalEs ( v . Minmoney / 100 , 2 ) , publicmethod . DecimalEs ( v . Maxmoney / 100 , 2 ) )
} else {
outCont . MoneyStr = fmt . Sprintf ( "%v" , publicmethod . DecimalEs ( v . Maxmoney / 100 , 2 ) )
}
outCont . UserKey = receivedValue . UserKey
outList = append ( outList , outCont )
}
// fmt.Printf("outList------------------->%v\n", outList)
publicmethod . ResultList ( 0 , receivedValue . Page , receivedValue . PageSize , total , int64 ( len ( outList ) ) , outList , c )
}
// 获取被考核人定性指标细则详细内容
func ( a * ApiMethod ) GetNaturePostDimerons ( c * gin . Context ) {
var receivedValue postNaturcInfo
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if receivedValue . UserKey == "" {
publicmethod . Result ( 101 , receivedValue , c )
return
}
if receivedValue . Id == "" {
publicmethod . Result ( 101 , receivedValue , c )
return
}
var shemeCont modelskpi . QualitativeEvaluationScheme
errSheme := shemeCont . GetCont ( map [ string ] interface { } { "`id`" : receivedValue . Id } )
if errSheme != nil {
publicmethod . Result ( 107 , receivedValue , c )
return
}
var outCont outNatureDimePostCont
outCont . Id = shemeCont . Id
outCont . VersionNumber = shemeCont . VersionNumber // 版本编号"`
outCont . CompanyId = shemeCont . CompanyId // 归属公司"`
outCont . DepartmentId = shemeCont . DepartmentId // 归属部门"`
outCont . OrgId = shemeCont . OrgId // 归属行政组织"`
outCont . PostId = shemeCont . PostId // 归属岗位"`
outCont . Title = shemeCont . Title //考核项名称"`
outCont . DimensionId = shemeCont . DimensionId //维度"`
outCont . TargetId = shemeCont . TargetId // 指标"`
outCont . SonTargetId = shemeCont . SonTargetId //子栏目"`
outCont . DetailsId = shemeCont . DetailsId //细则"`
outCont . Attribute = shemeCont . Attribute // 属性 1:定性考核;2:定量考核"`
outCont . MinScore = shemeCont . MinScore // 最小分*100保存"`
outCont . MaxScore = shemeCont . MaxScore //最大分*100保存"`
outCont . ScoringMethod = shemeCont . ScoringMethod //计分方式(1:自动;2:手动)"`
outCont . State = shemeCont . State //状态(1:启用;2:禁用;3:删除)"`
outCont . Addtime = shemeCont . Addtime //添加时间"`
outCont . Eitetime = shemeCont . Eitetime // 编辑时间"`
outCont . CensorType = shemeCont . CensorType //检查方式(1:现场检查;2:资料检查;3:事件触发)"`
outCont . Source = shemeCont . Source //来源(1:岗位;2:部门引用)"`
outCont . RunState = shemeCont . RunState //运行状态(1:启用;2:禁用;3:观察)"`
outCont . Punishmode = shemeCont . Punishmode //处罚方式 1:扣分;2:现金处罚;3:扣分加现金
outCont . Maxmoney = shemeCont . Maxmoney //最高罚款
outCont . Minmoney = shemeCont . Minmoney //最低罚款
if shemeCont . CensorType != "" {
outCont . CensorTypeAry = strings . Split ( shemeCont . CensorType , "," )
}
if shemeCont . DetailsId != 0 {
//获取指标信息
if shemeCont . Source == 1 { //岗位
var targetCont modelskpi . PostTargetDetails
targetCont . GetCont ( map [ string ] interface { } { "`id`" : shemeCont . DetailsId } , "content" , "add_reduce" , "censor_cont" )
outCont . Context = targetCont . Content //指标说明"`
outCont . AddReduce = targetCont . AddReduce //1:减少;2:增加;3:无属性,现场确认加或减"`
outCont . CensorCont = targetCont . CensorCont //检查依据"`
} else { //部门
var departTarDeta modelskpi . DetailedTarget
departTarDeta . GetCont ( map [ string ] interface { } { "`dt_id`" : shemeCont . DetailsId } , "`dt_add_reduce`" )
outCont . Context = departTarDeta . Content //指标说明"`
outCont . AddReduce = departTarDeta . AddReduce //1:减少;2:增加;3:无属性,现场确认加或减"`
outCont . CensorCont = departTarDeta . CensorCont //检查依据"`
}
}
if shemeCont . MinScore != 0 {
outCont . ScoreStr = fmt . Sprintf ( "%v-%v" , shemeCont . MinScore , shemeCont . MaxScore )
outCont . ScoreState = 2
} else if shemeCont . MinScore > 0 && shemeCont . MaxScore <= 0 {
outCont . ScoreStr = fmt . Sprintf ( "%v" , float64 ( shemeCont . MinScore ) / 100 )
outCont . ScoreState = 1
} else if shemeCont . MinScore <= 0 && shemeCont . MaxScore > 0 {
outCont . ScoreStr = fmt . Sprintf ( "%v" , float64 ( shemeCont . MaxScore ) / 100 )
outCont . ScoreState = 1
} else {
outCont . ScoreStr = "0"
outCont . ScoreState = 3
}
if shemeCont . Minmoney != 0 {
outCont . MoneyStr = fmt . Sprintf ( "%v-%v" , shemeCont . Minmoney , shemeCont . Maxmoney )
outCont . MoneyState = 2
} else if shemeCont . Minmoney > 0 && shemeCont . Maxmoney <= 0 {
outCont . MoneyStr = fmt . Sprintf ( "%v" , float64 ( shemeCont . Minmoney ) / 100 )
outCont . MoneyState = 1
} else if shemeCont . Minmoney <= 0 && shemeCont . Maxmoney > 0 {
outCont . MoneyStr = fmt . Sprintf ( "%v" , float64 ( shemeCont . Maxmoney ) / 100 )
outCont . MoneyState = 1
} else {
outCont . MoneyStr = "0"
outCont . MoneyState = 3
}
// if shemeCont.Minmoney != 0 {
// outCont.MoneyStr = fmt.Sprintf("%v-%v", shemeCont.Minmoney, shemeCont.Maxmoney)
// } else {
// outCont.MoneyStr = fmt.Sprintf("%v", shemeCont.Maxmoney)
// }
outCont . UserKey = receivedValue . UserKey
publicmethod . Result ( 0 , outCont , c )
}
// 提交个人岗位定性考核数据
func ( a * ApiMethod ) SendUsNatureEvaluation ( c * gin . Context ) {
var receivedValue sendMyEvaluationData
err := c . ShouldBindJSON ( & receivedValue )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if receivedValue . Id == "" {
publicmethod . Result ( 101 , receivedValue , c )
return
}
var postShemeCont modelskpi . QualitativeEvaluationScheme
err = postShemeCont . GetCont ( map [ string ] interface { } { "`id`" : receivedValue . Id } )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
//获取指标单位
var unitTitle string
var postTargetDetailInfo modelskpi . PostTargetDetails
overall . CONSTANT_DB_KPI . Where ( map [ string ] interface { } { "`id`" : postShemeCont . DetailsId } ) . First ( & postTargetDetailInfo )
unitTitle = postTargetDetailInfo . Company
var targetUnit modelskpi . PostTarget
overall . CONSTANT_DB_KPI . Model ( & modelskpi . PostTarget { } ) . Select ( "`unit`,`title`" ) . Where ( map [ string ] interface { } { "`id`" : postShemeCont . TargetId } ) . First ( & targetUnit )
if unitTitle == "" {
unitTitle = targetUnit . Unit
}
if receivedValue . UserKey == "" {
publicmethod . Result ( 101 , receivedValue , c )
return
}
//获取被考核人基本信息
var userCont modelshr . PersonArchives
err = userCont . GetCont ( map [ string ] interface { } { "`key`" : receivedValue . UserKey } , "`company`" , "`maindeparment`" , "`admin_org`" , "`position`" , "`wechat`" , "`work_wechat`" , "`key`" )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
if receivedValue . AddOrDecrease == 0 {
receivedValue . AddOrDecrease = 2
}
if receivedValue . Punishmode == 0 {
receivedValue . Punishmode = 1
}
var scoreVal float64 = 0
var moneyVal float64 = 0
isTrue := false
var msg string
switch receivedValue . Punishmode {
case 1 :
scoreVal , isTrue , msg = judgeScoreOrMoneyIsTrue ( receivedValue . ScoreState , receivedValue . Score , float64 ( postShemeCont . MaxScore ) , float64 ( postShemeCont . MinScore ) )
if isTrue != true {
publicmethod . Result ( 1 , isTrue , c , msg )
return
}
case 2 :
moneyVal , isTrue , msg = judgeScoreOrMoneyIsTrue ( receivedValue . MoneyState , receivedValue . Money , float64 ( postShemeCont . Maxmoney ) , float64 ( postShemeCont . Minmoney ) )
if isTrue != true {
publicmethod . Result ( 1 , isTrue , c , msg )
return
}
case 3 :
scoreVal , isTrue , msg = judgeScoreOrMoneyIsTrue ( receivedValue . ScoreState , receivedValue . Score , float64 ( postShemeCont . MaxScore ) , float64 ( postShemeCont . MinScore ) )
if isTrue != true {
publicmethod . Result ( 1 , isTrue , c , msg )
return
}
moneyVal , isTrue , msg = judgeScoreOrMoneyIsTrue ( receivedValue . MoneyState , receivedValue . Money , float64 ( postShemeCont . Maxmoney ) , float64 ( postShemeCont . Minmoney ) )
if isTrue != true {
publicmethod . Result ( 1 , isTrue , c , msg )
return
}
}
if receivedValue . Count == 0 {
receivedValue . Count = 1
}
currentTime := time . Now ( ) . Unix ( )
if receivedValue . HappenTime != "" {
happTime , timeErr := publicmethod . DateToTimeStamp ( receivedValue . HappenTime )
if timeErr == true {
currentTime = happTime
}
}
if receivedValue . Rectification == 0 {
receivedValue . Rectification = 2
}
var correctionTime int64 = 0
if receivedValue . Rectification == 1 {
if receivedValue . CorrectionPeriod == "" {
publicmethod . Result ( 1 , isTrue , c , "请选择什么时间前整改完成!" )
return
}
var corrTimeErr bool = false
correctionTime , corrTimeErr = publicmethod . DateToTimeStamp ( receivedValue . CorrectionPeriod )
if corrTimeErr == false {
publicmethod . Result ( 1 , corrTimeErr , c , "请输入整改期限时间格式不对,谢谢!" )
return
}
}
//获取登录人信息
context , _ := publicmethod . LoginMyCont ( c )
uuId := publicmethod . GetUUid ( 1 )
addTime := time . Now ( ) . Unix ( )
//生成工作流
wechatOpenId := context . Wechat
if context . WorkWechat != "" {
wechatOpenId = context . WorkWechat
}
var reviewFlowCont flowchart . ReviewFlow
reviewFlowCont . Id = receivedValue . Id
reviewFlowCont . IsCorrection = receivedValue . Rectification
reviewFlowCont . PlusReduction = receivedValue . AddOrDecrease
reviewFlowCont . PeopleList = append ( reviewFlowCont . PeopleList , receivedValue . UserKey )
flowMap , _ := flowchart . SetUpWorkFlow ( wechatOpenId , context . MainDeparment , reviewFlowCont , 1 )
var sendUserList [ ] string //审批人列表
var sendTitle string //标题
//获取下一个节点审批人
for _ , v := range flowMap {
if v . Step == 2 {
sendTitle = v . NodeName
for _ , vu := range v . UserList {
// fmt.Printf("vu------------>%v\n", vu)
if publicmethod . IsInTrue [ string ] ( vu . Wechat , sendUserList ) == false {
sendUserList = append ( sendUserList , vu . Wechat )
}
}
}
}
//流程列表
var flowCont modelskpi . PostWorkflowOrders
flowCont . OrderId = uuId //审批单ID"`
flowCont . Step = 1 //当前执行到第几步"`
flowCont . NextStep = 2 //下一步执行哪个步骤"`
sumStep := len ( flowMap )
if sumStep - 1 > 0 {
sumStep = sumStep - 1
} else {
sumStep = 1
}
flowCont . CountStep = sumStep
flowMapJson , _ := json . Marshal ( flowMap )
flowCont . WorkFlow = string ( flowMapJson ) //工作流(审批json字符串)"`
flowCont . CompanyId = userCont . Company //公司"`
flowCont . DepartmentId = userCont . MainDeparment //部门"`
flowCont . OrgId = userCont . AdminOrg //行政组织"`
flowCont . PostId = userCont . Position //岗位"`
flowCont . Class = postShemeCont . Attribute //属性1、定性;2、定量"`
flowCont . Dimension = postShemeCont . DimensionId //维度"`
flowCont . Target = postShemeCont . TargetId //指标"`
flowCont . SonTarget = postShemeCont . SonTargetId //指标子栏目"`
flowCont . Detailed = postShemeCont . DetailsId //指标细则"`
flowCont . Executor = context . Key //执行人"`
flowCont . ExecutorDepartment = context . MainDeparment //执行人部门"`
flowCont . State = 3 //流程状态 1:草稿;2:驳回;3:审批中;4:归档;5:废弃;6:删除"`
flowCont . StartTime = time . Now ( ) . Unix ( ) //流程开始时间"`
flowCont . Time = time . Now ( ) . Unix ( ) //时间"`
if len ( receivedValue . Enclosure ) > 0 {
jsonFileList , _ := json . Marshal ( receivedValue . Enclosure )
flowCont . EnclosureFormat = string ( jsonFileList ) //附件"`
}
//定性考核流水
var postNatureFlowCont modelskpi . PostNatureFlow
postNatureFlowCont . OrderId = uuId //审批单ID"`
postNatureFlowCont . AddOrDecrease = receivedValue . AddOrDecrease //增加或减少(1:增加;2:减少)"`
postNatureFlowCont . Score = scoreVal //分值(*100保存)"`
postNatureFlowCont . Money = moneyVal //钱(扣款或奖励)*100保存"`
postNatureFlowCont . Reason = receivedValue . Reason //这样操作的原因"`
postNatureFlowCont . ShemeId = postShemeCont . Id //方案ID"`
postNatureFlowCont . ShemeVersion = postShemeCont . VersionNumber //方案版本编号"`
postNatureFlowCont . Dimension = postShemeCont . DimensionId //维度"`
postNatureFlowCont . Target = postShemeCont . TargetId //指标"`
postNatureFlowCont . SonTarget = postShemeCont . SonTargetId //指标子栏目"`
postNatureFlowCont . Detailed = postShemeCont . DetailsId //指标细则"`
postNatureFlowCont . Year = publicmethod . ComputingTime ( currentTime , 1 ) //年"`
postNatureFlowCont . Quarter = publicmethod . ComputingTime ( currentTime , 2 ) //季度"`
postNatureFlowCont . Month = publicmethod . ComputingTime ( currentTime , 3 ) //月"`
postNatureFlowCont . Week = publicmethod . ComputingTime ( currentTime , 4 ) //周"`
postNatureFlowCont . PersonLiable = userCont . Key //责任人"`
postNatureFlowCont . CompanyId = userCont . Company //公司"`
postNatureFlowCont . DepartmentId = userCont . MainDeparment //部门"`
postNatureFlowCont . OrgId = userCont . AdminOrg //行政组织"`
postNatureFlowCont . PostId = userCont . Position //岗位"`
postNatureFlowCont . Executor = context . Key //执行人"`
postNatureFlowCont . ExecutorDepartment = context . MainDeparment //执行人部门"`
postNatureFlowCont . Rectification = receivedValue . Rectification //是否需要整改 1、需要整改;2:无需整改"`
postNatureFlowCont . CorrectionTime = correctionTime //整改期限"`
postNatureFlowCont . HappenTime = currentTime //发生时间"`
postNatureFlowCont . HappenCount = receivedValue . Count //发生次数"`
postNatureFlowCont . Time = time . Now ( ) . Unix ( ) //时间"`
// publicmethod.Result(1, postNatureFlowCont, c, msg)
// return
//开启事务提交
gormDbAffair := overall . CONSTANT_DB_KPI . Begin ( )
passorErr := gormDbAffair . Create ( & flowCont ) . Error
flowErr := gormDbAffair . Create ( & postNatureFlowCont ) . Error
// openAppChangeErr := gormDbAffair.Create(&openAppChangeLog).Error
if passorErr == nil && flowErr == nil {
addErr := gormDbAffair . Commit ( ) . Error
publicmethod . Result ( 0 , addErr , c )
if len ( sendUserList ) > 0 {
//项下一个审批节点发送审批通知
//头部信息
var sourceText wechatsendmsg . SourceText
sourceText . IconUrl = "https://docu.hxgk.group/images/2022_01/3f7a1120a559e9bee3991b85eb34d103.png"
sourceText . Desc = fmt . Sprintf ( "恒信高科-%v" , sendTitle )
sourceText . DescColor = 1
//考核标准
var sunTextCont string
var quoteTextCont string
switch postTargetDetailInfo . Punishmode {
case 2 :
var moneyTitle string
if receivedValue . AddOrDecrease == 1 {
moneyTitle = "现金奖励标准"
quoteTextCont = fmt . Sprintf ( "奖励现金:%v元" , receivedValue . Money )
} else {
moneyTitle = "现金罚款标准"
quoteTextCont = fmt . Sprintf ( "罚款现金:%v元" , receivedValue . Money )
}
var scoreStr string
if postTargetDetailInfo . Minmoney != 0 {
scoreStr = fmt . Sprintf ( "%v元-%v元" , publicmethod . DecimalEs ( float64 ( postTargetDetailInfo . Minmoney ) / 100 , 2 ) , publicmethod . DecimalEs ( float64 ( postTargetDetailInfo . Maxmoney ) / 100 , 2 ) )
} else {
scoreStr = fmt . Sprintf ( "%v元" , publicmethod . DecimalEs ( float64 ( postTargetDetailInfo . Maxmoney ) / 100 , 2 ) )
}
sunTextCont = fmt . Sprintf ( "%v:%v" , moneyTitle , scoreStr )
if receivedValue . Reason != "" {
quoteTextCont = fmt . Sprintf ( "%v\n备注:%v" , quoteTextCont , receivedValue . Reason )
}
case 3 :
var moneyTitle string
var scoreTitle string
if receivedValue . AddOrDecrease == 1 {
moneyTitle = "现金奖励标准"
scoreTitle = "考核扣分标准"
quoteTextCont = fmt . Sprintf ( "考核加:%v%v\n奖励现金:%v元" , receivedValue . Score , unitTitle , receivedValue . Money )
} else {
moneyTitle = "现金罚款标准"
scoreTitle = "考核加分标准"
quoteTextCont = fmt . Sprintf ( "考核扣:%v%v\n罚款现金:%v元" , receivedValue . Score , unitTitle , receivedValue . Money )
}
var scoreStr string
if postTargetDetailInfo . MinScore != 0 {
scoreStr = fmt . Sprintf ( "%v%v-%v%v" , publicmethod . DecimalEs ( float64 ( postTargetDetailInfo . MinScore ) / 100 , 2 ) , unitTitle , publicmethod . DecimalEs ( float64 ( postTargetDetailInfo . MaxScore ) / 100 , 2 ) , unitTitle )
} else {
scoreStr = fmt . Sprintf ( "%v%v" , publicmethod . DecimalEs ( float64 ( postTargetDetailInfo . MaxScore ) / 100 , 2 ) , unitTitle )
}
sunTextCont = fmt . Sprintf ( "%v:%v" , scoreTitle , scoreStr )
if postTargetDetailInfo . Minmoney != 0 {
sunTextCont = fmt . Sprintf ( "%v\n%v:%v元-%v元" , sunTextCont , moneyTitle , publicmethod . DecimalEs ( float64 ( postTargetDetailInfo . Minmoney ) / 100 , 2 ) , publicmethod . DecimalEs ( float64 ( postTargetDetailInfo . Maxmoney ) / 100 , 2 ) )
} else {
sunTextCont = fmt . Sprintf ( "%v\n%v:%v元" , sunTextCont , moneyTitle , publicmethod . DecimalEs ( float64 ( postTargetDetailInfo . Maxmoney ) / 100 , 2 ) )
}
if receivedValue . Reason != "" {
quoteTextCont = fmt . Sprintf ( "%v\n备注:%v" , quoteTextCont , receivedValue . Reason )
}
default :
var scoreTitle string
if receivedValue . AddOrDecrease == 1 {
scoreTitle = "考核加分标准"
quoteTextCont = fmt . Sprintf ( "考核加:%v%v" , receivedValue . Score , unitTitle )
} else {
scoreTitle = "考核扣分标准"
quoteTextCont = fmt . Sprintf ( "考核扣:%v%v" , receivedValue . Score , unitTitle )
}
var scoreStr string
if postTargetDetailInfo . MinScore != 0 {
scoreStr = fmt . Sprintf ( "%v%v-%v%v" , publicmethod . DecimalEs ( float64 ( postTargetDetailInfo . MinScore ) / 100 , 2 ) , unitTitle , publicmethod . DecimalEs ( float64 ( postTargetDetailInfo . MaxScore ) / 100 , 2 ) , unitTitle )
} else {
scoreStr = fmt . Sprintf ( "%v%v" , publicmethod . DecimalEs ( float64 ( postTargetDetailInfo . MaxScore ) / 100 , 2 ) , unitTitle )
}
sunTextCont = fmt . Sprintf ( "%v:%v" , scoreTitle , scoreStr )
if receivedValue . Reason != "" {
quoteTextCont = fmt . Sprintf ( "%v\n备注:%v" , quoteTextCont , receivedValue . Reason )
}
}
//引用文献
var quoteAreaInfo wechatsendmsg . QuoteAreaCont
quoteAreaInfo . Type = 0
quoteAreaInfo . Title = "考核明细"
quoteAreaInfo . QuoteText = quoteTextCont
//按钮
var buttonList [ ] wechatsendmsg . ButtonListCont
var buttonList1 wechatsendmsg . ButtonListCont
buttonList1 . Text = "批准"
buttonList1 . Style = 1
buttonList1 . Key = fmt . Sprintf ( "KPI_post_%v_%v_%v" , uuId , 1 , 2 )
buttonList = append ( buttonList , buttonList1 )
var buttonList2 wechatsendmsg . ButtonListCont
buttonList2 . Text = "驳回"
buttonList2 . Style = 3
buttonList2 . Key = fmt . Sprintf ( "KPI_post_%v_%v_%v" , uuId , 2 , 2 )
buttonList = append ( buttonList , buttonList2 )
//二级标题+文本列表
var twoTitleTextList [ ] wechatsendmsg . HorizontalContentListInfo
//发送人
var horizontalContentLis3 wechatsendmsg . HorizontalContentListInfo
horizontalContentLis3 . KeyName = "申请人:"
horizontalContentLis3 . Value = "点击查看"
horizontalContentLis3 . Type = 3
horizontalContentLis3 . Userid = wechatOpenId
twoTitleTextList = append ( twoTitleTextList , horizontalContentLis3 )
//被考核人
if userCont . Wechat != "" || userCont . WorkWechat != "" {
weChatStrs := userCont . Wechat
if userCont . WorkWechat != "" {
weChatStrs = userCont . WorkWechat
}
var twoTitleTextCont wechatsendmsg . HorizontalContentListInfo
twoTitleTextCont . KeyName = "被考核人:"
twoTitleTextCont . Value = "点击查看"
twoTitleTextCont . Type = 3
twoTitleTextCont . Userid = weChatStrs
twoTitleTextList = append ( twoTitleTextList , twoTitleTextCont )
}
//卡片跳转地址
var cardActionContStr wechatsendmsg . CardActionCont
cardActionContStr . Type = 1
cardActionContStr . Url = fmt . Sprintf ( "http://new.hxgk.group/#/quantitativeList?id=%v" , uuId )
var sendButtionMsg wechatsendmsg . SendButtonInteractionSimplify
sendButtionMsg . Touser = strings . Join ( sendUserList , "|" )
// sendButtionMsg.Touser = "KaiXinGuo" //指定接收消息的成员,成员ID列表;特殊情况:指定为
sendButtionMsg . Msgtype = "template_card"
agentIdInt , _ := strconv . ParseInt ( overall . CONSTANT_CONFIG . WechatKpi . Agentid , 10 , 64 )
sendButtionMsg . Agentid = agentIdInt
sendButtionMsg . EnableDuplicateCheck = 0
sendButtionMsg . DuplicateCheckInterval = 1800
sendButtionMsg . EnableIdTrans = 0
sendButtionMsg . TemplateCard . CardType = "button_interaction"
sendButtionMsg . TemplateCard . Source = sourceText
sendButtionMsg . TemplateCard . TaskId = fmt . Sprintf ( "KPI_%v" , uuId )
sendButtionMsg . TemplateCard . MainTitle . Title = targetUnit . Title
descInfo := postTargetDetailInfo . Title
// if postTargetDetailInfo.CensorCont != "" {
// descInfo = fmt.Sprintf("%v\n检查依据:%v", descInfo, postTargetDetailInfo.CensorCont)
// }
// if postTargetDetailInfo.Content != "" {
// if descInfo != "" {
// descInfo = fmt.Sprintf("%v\n备注:%v", descInfo, postTargetDetailInfo.Content)
// } else {
// descInfo = fmt.Sprintf("备注:%v", postTargetDetailInfo.Content)
// }
// }
sendButtionMsg . TemplateCard . MainTitle . Desc = descInfo
sendButtionMsg . TemplateCard . QuoteArea = quoteAreaInfo
sendButtionMsg . TemplateCard . SubTitleText = sunTextCont
sendButtionMsg . TemplateCard . ButtonList = buttonList
sendButtionMsg . TemplateCard . HorizontalContentList = twoTitleTextList
sendButtionMsg . TemplateCard . CardAction = cardActionContStr
callData , err := sendButtionMsg . SendMsg ( "kpi" )
if err == nil {
if callData . Errcode == 0 {
// var operatorIsTrueCont modelskpi.OperatorIsTrue
// operatorIsTrueCont.OrderId = uuId //订单ID"`
// operatorIsTrueCont.Step = 1 //审批到第几步"`
// operatorIsTrueCont.State = 1 //:状态:1:可操作;2:不可操作"`
// operatorIsTrueCont.Time = addTime //操作时间"`
// operatorIsTrueCont.Msgid = callData.Msgid //:消息id,用于撤回应用消息"`
// operatorIsTrueCont.ResponseCode = callData.ResponseCode //仅消息类型为“按钮交互型”,“投票选择型”和“多项选择型”的模板卡片消息返回,应用可使用response_code调用更新模版卡片消息接口,24小时内有效,且只能使用一次"`
// operatorIsTrueCont.Stepper = 1
// overall.CONSTANT_DB_KPI.Create(&operatorIsTrueCont)
var openAppChangeLog modelskpi . OpenApprovalChangeLog
openAppChangeLog . Type = 2
openAppChangeLog . Title = "创建申请"
openAppChangeLog . Operator = context . Key
openAppChangeLog . OrderId = uuId // 审批单ID"`
openAppChangeLog . OperatorTime = addTime
openAppChangeLog . Step = 1
openAppChangeLog . OperatorType = 2
openAppChangeLog . Msgid = callData . Msgid //:消息id,用于撤回应用消息"`
openAppChangeLog . ResponseCode = callData . ResponseCode //仅消息类型为“按钮交互型”,“投票选择型”和“多项选择型”的模板卡片消息返回,应用可使用response_code调用更新模版卡片消息接口,24小时内有效,且只能使用一次"`
openAppChangeLog . Stepper = 1
openAppChangeLog . ChangeIsTrue = 1 //是否可变更(1:可变更;2:不可变更)"`
openAppChangeLog . Eiteyime = addTime
openAppChangeLog . YesOrNo = 1
overall . CONSTANT_DB_KPI . Create ( & openAppChangeLog )
}
}
// jsonstr, _ := json.Marshal(callData)
// fmt.Printf("callData------>%v--------err--------->%v--------->%v\n", callData, err, string(jsonstr))
}
} else {
addErr := gormDbAffair . Rollback ( ) . Error
publicmethod . Result ( 104 , addErr , c )
}
// fmt.Printf("%v---%v---%v---%v---%v\n", currentTime, uuId, flowCont, scoreVal, moneyVal)
}
/ *
判断分数是否符合要求
@ scoreState 1 、 定分 ; 2 、 区间分 ; 3 、 不定性分值
@ score 要操作的数值
@ MaxScore 最大值
@ minScore 最小值
* /
func judgeScoreOrMoneyIsTrue ( scoreState int , score string , maxScore , minScore float64 ) ( scoreInt64 float64 , isTrue bool , msg string ) {
isTrue = false
// fmt.Printf("\n\nscoreState:%v\n\nscore:%v\n\nmaxScore:%v\n\nminScore:%v\n\n", scoreState, score, maxScore, minScore)
switch scoreState {
case 2 , 3 :
if score == "" {
return
}
scoreInt64 , _ = strconv . ParseFloat ( score , 64 )
scoreInt64 = scoreInt64 * 100
if scoreInt64 > maxScore {
msg = fmt . Sprintf ( "您提交的数值超过允许提交的最大值(最大值:%v)!" , float64 ( maxScore ) / 100 )
return
}
if scoreInt64 < minScore {
msg = fmt . Sprintf ( "您提交的数值低于允许提交的最小值(最小值:%v)!" , float64 ( minScore ) / 100 )
return
}
isTrue = true
case 1 :
scoreInt64 , _ = strconv . ParseFloat ( score , 64 )
scoreInt64 = scoreInt64 * 100
isTrue = true
default :
msg = "请您输入要操作的数据,谢谢!"
return
}
// fmt.Printf("\nscoreInt64:%v\n\nisTrue:%v\n\nmsg:%v\n\n", scoreInt64, isTrue, msg)
return
}
// 整改措施
func ( a * ApiMethod ) PostRectificationMeasures ( c * gin . Context ) {
var receivedValue publicmethod . CorrectiveMeasuresType
c . ShouldBindJSON ( & receivedValue )
if receivedValue . OrderId == "" || receivedValue . Register == "" || receivedValue . Content == "" {
publicmethod . Result ( 101 , receivedValue , c )
return
}
//判断此号码是否可以使用
var setUpRegister modelskpi . Register
err := setUpRegister . GetCont ( map [ string ] interface { } { "`number`" : receivedValue . Register } , "`state`" , "`id`" )
if err != nil {
publicmethod . Result ( 1 , err , c , "你们不是此考核项整改的责任人!您无权进行此项操作!" )
return
}
if setUpRegister . State != 1 {
publicmethod . Result ( 1 , err , c , "此考核项已经提交过整改方案!" )
return
}
syncSeting . Add ( 1 )
go UpdateRegister ( setUpRegister . Id , 2 )
//获取登录人信息
context , _ := publicmethod . LoginMyCont ( c )
//获取审批流
var pwoCont modelskpi . PostWorkflowOrders
err = pwoCont . GetCont ( map [ string ] interface { } { "`order_id`" : receivedValue . OrderId } )
if err != nil {
publicmethod . Result ( 1 , err , c , "不存在的审批整改项目!" )
return
}
if pwoCont . State != 3 {
publicmethod . Result ( 1 , err , c , "此考核项目已经审批结束!请不要重复提交整改措施!" )
return
}
if pwoCont . Class == 1 { //定性
var pnfCont modelskpi . PostNatureFlow
err = pnfCont . GetCont ( map [ string ] interface { } { "`order_id`" : receivedValue . OrderId } )
if err != nil {
publicmethod . Result ( 1 , err , c , "不存在的审批整改项目!" )
return
}
if pnfCont . PersonLiable != context . Key {
publicmethod . Result ( 1 , err , c , "你们不是此考核项整改的责任人!您无权进行此项操作!" )
return
}
} else { //定量
var pnfCont modelskpi . PostMeteringFlow
err = pnfCont . GetCont ( map [ string ] interface { } { "`order_id`" : receivedValue . OrderId } )
if err != nil {
publicmethod . Result ( 1 , err , c , "不存在的审批整改项目!" )
return
}
if pnfCont . PersonLiable != context . Key {
publicmethod . Result ( 1 , err , c , "你们不是此考核项整改的责任人!您无权进行此项操作!" )
return
}
}
//提交整改内容
var addRecMeas modelskpi . RectificationMeasures
addRecMeas . UserKey = context . Key
addRecMeas . Department = context . MainDeparment
addRecMeas . Group = context . Company
addRecMeas . OrderKey = pwoCont . OrderId
addRecMeas . State = 1
addRecMeas . Time = time . Now ( ) . Unix ( )
addRecMeas . EiteTime = time . Now ( ) . Unix ( )
addRecMeas . Content = receivedValue . Content
if len ( receivedValue . Enclosure ) > 0 {
enclosure , enclosureErr := json . Marshal ( receivedValue . Enclosure )
if enclosureErr == nil {
addRecMeas . Enclosure = string ( enclosure ) //附件
}
}
err = overall . CONSTANT_DB_KPI . Create ( & addRecMeas ) . Error
if err != nil {
publicmethod . Result ( 104 , err , c )
return
}
//发送下一步审批信息
stepIng := pwoCont . NextStep
if stepIng == 0 {
if pwoCont . CountStep - 1 > 0 {
stepIng = pwoCont . CountStep - 1
} else {
stepIng = 1
}
}
flowMap , flowOneCont , _ := wechatcallback . GetOneNodeCont ( pwoCont . WorkFlow , stepIng ) //获取流程图
nextStep := 0 //下一步执行哪个步骤
flowState := 3 //判断流程状态
switch flowOneCont . RunType {
case 1 :
flowState = 3
case 2 :
flowState = 3
case 3 :
flowState = 4
case 4 :
flowState = 4
default :
flowState = 1
}
//判断下一个当前节点是否为最后一个节点
if flowState == 4 {
nextStep = 0
} else {
nextStep = flowOneCont . Step + 1
}
//更新审批流状态
syncSeting . Add ( 1 )
go UpdateStateFlow ( pwoCont . Id , nextStep , flowState )
//更新审批工作流json内容
wechatName := context . Wechat
if context . WorkWechat != "" {
wechatName = context . WorkWechat
}
syncSeting . Add ( 1 )
go EidtPostFlowLog ( pwoCont . Id , flowMap , flowOneCont , wechatName , 2 , stepIng )
//获取下一个执行点位
var nextClickStep int
overall . CONSTANT_DB_KPI . Model ( & modelskpi . OpenApprovalChangeLog { } ) . Select ( "stepper" ) . Where ( "`orderid` = ?" , pwoCont . OrderId ) . Order ( "stepper DESC" ) . First ( & nextClickStep )
//执行下一步审批
nextClickStep = nextClickStep + 1
syncSeting . Add ( 1 )
go ApproveFlow ( "kpi" , flowMap , flowOneCont , nextClickStep , pwoCont )
var operatorIsTreu modelskpi . OpenApprovalChangeLog
operatorIsTreu . Type = 2
operatorIsTreu . Title = flowOneCont . NodeName
operatorIsTreu . Operator = context . Key
operatorIsTreu . OrderId = pwoCont . OrderId
operatorIsTreu . OperatorTime = time . Now ( ) . Unix ( )
operatorIsTreu . Step = flowOneCont . Step
operatorIsTreu . OperatorType = 2
operatorIsTreu . Msgid = ""
operatorIsTreu . ResponseCode = ""
operatorIsTreu . Stepper = nextClickStep
operatorIsTreu . ChangeIsTrue = 2
operatorIsTreu . YesOrNo = 1
operatorIsTreu . Eiteyime = time . Now ( ) . Unix ( )
overall . CONSTANT_DB_KPI . Create ( & operatorIsTreu )
syncSeting . Wait ( )
sendMap := publicmethod . MapOut [ string ] ( )
sendMap [ "flowMap" ] = flowMap
sendMap [ "flowOneCont" ] = flowOneCont
publicmethod . Result ( 0 , sendMap , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 10 - 0 9 16 : 48 : 0 9
@ 功能 : 更新挂号单
@ 参数
#
@ 返回值
#
* /
func UpdateRegister ( id int64 , state int ) {
defer syncSeting . Done ( )
var setUpRegister modelskpi . Register
setUpRegister . EiteCont ( map [ string ] interface { } { "`id`" : id } , map [ string ] interface { } { "`state`" : state , "`time`" : time . Now ( ) . Unix ( ) } )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 10 - 0 8 11 : 20 : 38
@ 功能 : 同意
@ 参数
# systemApp 系统
# pwoCont 岗位审批工作流
# flowMap 流程结构体
# flowOneCont 当前节点构体
# step 记录值
# liangOrXing 属性1 、 定性 ; 2 、 定量
ApproveFlow ( systemApp string , flowMap [ ] publicmethod . FlowChartList , flowOneCont publicmethod . FlowChartList , step int , pwoContOld modelskpi . PostWorkflowOrders )
@ 返回值
#
* /
func ApproveFlow ( systemApp string , flowMap [ ] publicmethod . FlowChartList , flowOneCont publicmethod . FlowChartList , step int , pwoContOld modelskpi . PostWorkflowOrders ) {
defer syncSeting . Done ( )
nextStep := 0
flowState := 3 //判断流程状态
switch flowOneCont . RunType {
case 1 :
flowState = 3
case 2 :
flowState = 3
case 3 :
flowState = 4
case 4 :
flowState = 4
default :
flowState = 1
}
//判断下一个当前节点是否为最后一个节点
if flowState == 4 {
nextStep = 0
} else {
nextStep = flowOneCont . Step + 1
}
//更新审批流状态
var pwoCont modelskpi . PostWorkflowOrders
pwoCont . EiteCont ( map [ string ] interface { } { "`order_id`" : pwoContOld . OrderId } , map [ string ] interface { } { "`next_step`" : nextStep , "`state`" : flowState , "`time`" : time . Now ( ) . Unix ( ) } ) //改变审批流状态
//获取下一部操作
for _ , fv := range flowMap {
if fv . Step == flowOneCont . Step + 1 {
var sendToUserList [ ] string //获取发送人
for _ , fvu := range fv . UserList {
if publicmethod . IsInTrue [ string ] ( fvu . Wechat , sendToUserList ) == false {
sendToUserList = append ( sendToUserList , fvu . Wechat )
}
}
if len ( sendToUserList ) > 0 { //存在接收人执行以下操作
var postTarDeta modelskpi . PostTarget
postTarDeta . GetCont ( map [ string ] interface { } { "`id`" : pwoContOld . Target } , "`title`" )
if fv . Class < 3 {
sendNextStep := step + 1
//发送按钮信息
if pwoContOld . Class == 1 { //定性操作
var postTarDetailsDeta modelskpi . PostTargetDetails
postTarDetailsDeta . GetCont ( map [ string ] interface { } { "`id`" : pwoContOld . Detailed } , "`title`" , "`punishmode`" , "`company`" )
unitTitle := postTarDetailsDeta . Company
if unitTitle == "" {
unitTitle = postTarDeta . Unit
}
var postNatuerFlowCont modelskpi . PostNatureFlow
postNatuerFlowCont . GetCont ( map [ string ] interface { } { "`order_id`" : pwoContOld . OrderId } )
if fv . Class == 2 { //需要填写信息,发送相关信息
//挂号
registerNum := publicmethod . GetUUid ( 2 )
var setUpRegister modelskpi . Register
setUpRegister . Number = registerNum
setUpRegister . State = 1
setUpRegister . Time = time . Now ( ) . Unix ( )
setUpRegister . AddCont ( )
//抄送信息
markDowmStr := "整改通知"
markDowmStr = fmt . Sprintf ( "%v\n>**事项详情** " , markDowmStr )
markDowmStr = fmt . Sprintf ( "%v\n>指标: %v" , markDowmStr , postTarDeta . Title )
markDowmStr = fmt . Sprintf ( "%v\n>指标详情: %v" , markDowmStr , postTarDetailsDeta . Title )
markDowmStr = fmt . Sprintf ( "%v\n><font color=\"info\">发生时间: %v</font> " , markDowmStr , publicmethod . UnixTimeToDay ( postNatuerFlowCont . HappenTime , 1 ) )
switch postTarDetailsDeta . Punishmode {
case 1 :
if postNatuerFlowCont . Score != 0 {
scoreFloat := ( float64 ( postNatuerFlowCont . Score ) * float64 ( postNatuerFlowCont . HappenCount ) ) / 100
if postNatuerFlowCont . AddOrDecrease == 1 {
//增加
markDowmStr = fmt . Sprintf ( "%v\n>奖励: %v%v" , markDowmStr , publicmethod . DecimalEs ( scoreFloat , 2 ) , postTarDetailsDeta . Company )
} else {
//减少
markDowmStr = fmt . Sprintf ( "%v\n>减少: %v%v" , markDowmStr , publicmethod . DecimalEs ( scoreFloat , 2 ) , postTarDetailsDeta . Company )
}
}
case 2 :
if postNatuerFlowCont . Money != 0 {
moneyFloat := float64 ( postNatuerFlowCont . Money ) / 100
if postNatuerFlowCont . AddOrDecrease == 1 {
//增加
markDowmStr = fmt . Sprintf ( "%v\n>奖励: %v元" , markDowmStr , publicmethod . DecimalEs ( moneyFloat , 2 ) )
} else {
//减少
markDowmStr = fmt . Sprintf ( "%v\n>减少: %v元" , markDowmStr , publicmethod . DecimalEs ( moneyFloat , 2 ) )
}
}
default :
if postNatuerFlowCont . Score != 0 {
scoreFloat := ( float64 ( postNatuerFlowCont . Score ) * float64 ( postNatuerFlowCont . HappenCount ) ) / 100
if postNatuerFlowCont . AddOrDecrease == 1 {
//增加
markDowmStr = fmt . Sprintf ( "%v\n>增奖励: %v%v" , markDowmStr , publicmethod . DecimalEs ( scoreFloat , 2 ) , postTarDetailsDeta . Company )
} else {
//减少
markDowmStr = fmt . Sprintf ( "%v\n>减少: %v%v" , markDowmStr , publicmethod . DecimalEs ( scoreFloat , 2 ) , postTarDetailsDeta . Company )
}
}
if postNatuerFlowCont . Money != 0 {
moneyFloat := float64 ( postNatuerFlowCont . Money ) / 100
if postNatuerFlowCont . AddOrDecrease == 1 {
//增加
markDowmStr = fmt . Sprintf ( "%v\n>奖励: %v元" , markDowmStr , publicmethod . DecimalEs ( moneyFloat , 2 ) )
} else {
//减少
markDowmStr = fmt . Sprintf ( "%v\n>减少: %v元" , markDowmStr , publicmethod . DecimalEs ( moneyFloat , 2 ) )
}
}
}
//获取提报人信息
var zeRenRenCont modelshr . PersonArchives
zeRenRenCont . GetCont ( map [ string ] interface { } { "`key`" : postNatuerFlowCont . Executor } , "`name`" , "`number`" )
markDowmStr = fmt . Sprintf ( "%v\n> \n><font color=\"warning\">提报人: %v(%v)</font>" , markDowmStr , zeRenRenCont . Name , zeRenRenCont . Number )
markDowmStr = fmt . Sprintf ( "%v\n>\n>[填写整改措施](http://new.hxgk.group/#/rectification?id=%v&num=%v)" , markDowmStr , pwoContOld . OrderId , registerNum )
//发送同通信息
wechatcallback . SendNoticeMsg ( sendToUserList , markDowmStr , systemApp )
} else { //无需填写信息。继续发送
//考核标准
var sunTextCont string
var quoteTextCont string
switch postTarDetailsDeta . Punishmode {
case 2 :
var moneyTitle string
if postNatuerFlowCont . AddOrDecrease == 1 {
moneyTitle = "现金奖励标准"
quoteTextCont = fmt . Sprintf ( "奖励现金:%v元" , postNatuerFlowCont . Money )
} else {
moneyTitle = "现金罚款标准"
quoteTextCont = fmt . Sprintf ( "罚款现金:%v元" , postNatuerFlowCont . Money )
}
var scoreStr string
if postTarDetailsDeta . Minmoney != 0 {
scoreStr = fmt . Sprintf ( "%v元-%v元" , publicmethod . DecimalEs ( float64 ( postTarDetailsDeta . Minmoney ) / 100 , 2 ) , publicmethod . DecimalEs ( float64 ( postTarDetailsDeta . Maxmoney ) / 100 , 2 ) )
} else {
scoreStr = fmt . Sprintf ( "%v元" , publicmethod . DecimalEs ( float64 ( postTarDetailsDeta . Maxmoney ) / 100 , 2 ) )
}
sunTextCont = fmt . Sprintf ( "%v:%v" , moneyTitle , scoreStr )
if postNatuerFlowCont . Reason != "" {
quoteTextCont = fmt . Sprintf ( "%v\n备注:%v" , quoteTextCont , postNatuerFlowCont . Reason )
}
case 3 :
var moneyTitle string
var scoreTitle string
if postNatuerFlowCont . AddOrDecrease == 1 {
moneyTitle = "现金奖励标准"
scoreTitle = "考核扣分标准"
quoteTextCont = fmt . Sprintf ( "考核加:%v%v\n奖励现金:%v元" , postNatuerFlowCont . Score , unitTitle , postNatuerFlowCont . Money )
} else {
moneyTitle = "现金罚款标准"
scoreTitle = "考核加分标准"
quoteTextCont = fmt . Sprintf ( "考核扣:%v%v\n罚款现金:%v元" , postNatuerFlowCont . Score , unitTitle , postNatuerFlowCont . Money )
}
var scoreStr string
if postTarDetailsDeta . MinScore != 0 {
scoreStr = fmt . Sprintf ( "%v%v-%v%v" , publicmethod . DecimalEs ( float64 ( postTarDetailsDeta . MinScore ) / 100 , 2 ) , unitTitle , publicmethod . DecimalEs ( float64 ( postTarDetailsDeta . MaxScore ) / 100 , 2 ) , unitTitle )
} else {
scoreStr = fmt . Sprintf ( "%v%v" , publicmethod . DecimalEs ( float64 ( postTarDetailsDeta . MaxScore ) / 100 , 2 ) , unitTitle )
}
sunTextCont = fmt . Sprintf ( "%v:%v" , scoreTitle , scoreStr )
if postTarDetailsDeta . Minmoney != 0 {
sunTextCont = fmt . Sprintf ( "%v\n%v:%v元-%v元" , sunTextCont , moneyTitle , publicmethod . DecimalEs ( float64 ( postTarDetailsDeta . Minmoney ) / 100 , 2 ) , publicmethod . DecimalEs ( float64 ( postTarDetailsDeta . Maxmoney ) / 100 , 2 ) )
} else {
sunTextCont = fmt . Sprintf ( "%v\n%v:%v元" , sunTextCont , moneyTitle , publicmethod . DecimalEs ( float64 ( postTarDetailsDeta . Maxmoney ) / 100 , 2 ) )
}
if postNatuerFlowCont . Reason != "" {
quoteTextCont = fmt . Sprintf ( "%v\n备注:%v" , quoteTextCont , postNatuerFlowCont . Reason )
}
default :
var scoreTitle string
if postNatuerFlowCont . AddOrDecrease == 1 {
scoreTitle = "考核加分标准"
quoteTextCont = fmt . Sprintf ( "考核加:%v%v" , postNatuerFlowCont . Score , unitTitle )
} else {
scoreTitle = "考核扣分标准"
quoteTextCont = fmt . Sprintf ( "考核扣:%v%v" , postNatuerFlowCont . Score , unitTitle )
}
var scoreStr string
if postTarDetailsDeta . MinScore != 0 {
scoreStr = fmt . Sprintf ( "%v%v-%v%v" , publicmethod . DecimalEs ( float64 ( postTarDetailsDeta . MinScore ) / 100 , 2 ) , unitTitle , publicmethod . DecimalEs ( float64 ( postTarDetailsDeta . MaxScore ) / 100 , 2 ) , unitTitle )
} else {
scoreStr = fmt . Sprintf ( "%v%v" , publicmethod . DecimalEs ( float64 ( postTarDetailsDeta . MaxScore ) / 100 , 2 ) , unitTitle )
}
sunTextCont = fmt . Sprintf ( "%v:%v" , scoreTitle , scoreStr )
if postNatuerFlowCont . Reason != "" {
quoteTextCont = fmt . Sprintf ( "%v\n备注:%v" , quoteTextCont , postNatuerFlowCont . Reason )
}
}
var quoteAreaInfo wechatsendmsg . QuoteAreaCont
quoteAreaInfo . Type = 0
quoteAreaInfo . Title = "考核明细"
quoteAreaInfo . QuoteText = quoteTextCont
//二级标题+文本列表
var twoTitleTextList [ ] wechatsendmsg . HorizontalContentListInfo
var shenQingRen modelshr . PersonArchives
shenQingRen . GetCont ( map [ string ] interface { } { "`key`" : postNatuerFlowCont . Executor } , "`wechat`" , "`work_wechat`" )
if shenQingRen . Wechat != "" || shenQingRen . WorkWechat != "" {
wechatOpenId := shenQingRen . Wechat
if shenQingRen . WorkWechat != "" {
wechatOpenId = shenQingRen . WorkWechat
}
//发送人
var horizontalContentLis3 wechatsendmsg . HorizontalContentListInfo
horizontalContentLis3 . KeyName = "申请人:"
horizontalContentLis3 . Value = "点击查看"
horizontalContentLis3 . Type = 3
horizontalContentLis3 . Userid = wechatOpenId
twoTitleTextList = append ( twoTitleTextList , horizontalContentLis3 )
}
var beiKaoHeRen modelshr . PersonArchives
beiKaoHeRen . GetCont ( map [ string ] interface { } { "`key`" : postNatuerFlowCont . Executor } , "`wechat`" , "`work_wechat`" )
//被考核人
if beiKaoHeRen . Wechat != "" || beiKaoHeRen . WorkWechat != "" {
weChatStrs := beiKaoHeRen . Wechat
if beiKaoHeRen . WorkWechat != "" {
weChatStrs = beiKaoHeRen . WorkWechat
}
var twoTitleTextCont wechatsendmsg . HorizontalContentListInfo
twoTitleTextCont . KeyName = "被考核人:"
twoTitleTextCont . Value = "点击查看"
twoTitleTextCont . Type = 3
twoTitleTextCont . Userid = weChatStrs
twoTitleTextList = append ( twoTitleTextList , twoTitleTextCont )
}
wechatcallback . SendButtonCard ( systemApp , postTarDeta . Title , postTarDetailsDeta . Title , sunTextCont , fv . NodeName , pwoContOld . OrderId , sendNextStep , sendToUserList , quoteAreaInfo , twoTitleTextList )
}
} else { //定量操作
//定量操作
var postMeterFlowCont modelskpi . PostMeteringFlow
postMeterFlowCont . GetCont ( map [ string ] interface { } { "`order_id`" : pwoContOld . OrderId } )
//获取考核项目信息
var postShemeCont modelskpi . QualitativeEvaluationScheme
postShemeCont . GetCont ( map [ string ] interface { } { "`id`" : postMeterFlowCont . ShemeId } )
//引用文献
var quoteAreaInfo wechatsendmsg . QuoteAreaCont
quoteAreaInfo . Type = 0
quoteAreaInfo . Title = "数据详细"
quoteAreaInfo . QuoteText = fmt . Sprintf ( "数值:%v%v\n备注:%v" , publicmethod . DecimalEs ( postMeterFlowCont . Score , 2 ) , postTarDeta . Unit , postMeterFlowCont . Reason )
//二级标题+文本列表
var twoTitleTextList [ ] wechatsendmsg . HorizontalContentListInfo
var shenQingRen modelshr . PersonArchives
shenQingRen . GetCont ( map [ string ] interface { } { "`key`" : postMeterFlowCont . Executor } , "`wechat`" , "`work_wechat`" )
if shenQingRen . Wechat != "" || shenQingRen . WorkWechat != "" {
wechatOpenId := shenQingRen . Wechat
if shenQingRen . WorkWechat != "" {
wechatOpenId = shenQingRen . WorkWechat
}
//发送人
var horizontalContentLis3 wechatsendmsg . HorizontalContentListInfo
horizontalContentLis3 . KeyName = "申请人:"
horizontalContentLis3 . Value = "点击查看"
horizontalContentLis3 . Type = 3
horizontalContentLis3 . Userid = wechatOpenId
twoTitleTextList = append ( twoTitleTextList , horizontalContentLis3 )
}
var beiKaoHeRen modelshr . PersonArchives
beiKaoHeRen . GetCont ( map [ string ] interface { } { "`key`" : postMeterFlowCont . Executor } , "`wechat`" , "`work_wechat`" )
//被考核人
if beiKaoHeRen . Wechat != "" || beiKaoHeRen . WorkWechat != "" {
weChatStrs := beiKaoHeRen . Wechat
if beiKaoHeRen . WorkWechat != "" {
weChatStrs = beiKaoHeRen . WorkWechat
}
var twoTitleTextCont wechatsendmsg . HorizontalContentListInfo
twoTitleTextCont . KeyName = "被考核人:"
twoTitleTextCont . Value = "点击查看"
twoTitleTextCont . Type = 3
twoTitleTextCont . Userid = weChatStrs
twoTitleTextList = append ( twoTitleTextList , twoTitleTextCont )
}
wechatcallback . SendButtonCard ( systemApp , postShemeCont . Title , postShemeCont . Content , "" , fv . NodeName , pwoContOld . OrderId , sendNextStep , sendToUserList , quoteAreaInfo , twoTitleTextList )
}
} else {
//抄送信息
markDowmStr := "审批通过-抄送"
markDowmStr = fmt . Sprintf ( "%v\n>**事项详情** " , markDowmStr )
markDowmStr = fmt . Sprintf ( "%v\n>指标: %v" , markDowmStr , postTarDeta . Title )
if pwoContOld . Class == 1 {
//定性操作
var postTarDetailsDeta modelskpi . PostTargetDetails
postTarDetailsDeta . GetCont ( map [ string ] interface { } { "`id`" : pwoContOld . Detailed } , "`title`" , "`punishmode`" , "`company`" )
markDowmStr = fmt . Sprintf ( "%v\n>指标详情: %v" , markDowmStr , postTarDetailsDeta . Title )
var postNatuerFlowCont modelskpi . PostNatureFlow
postNatuerFlowCont . GetCont ( map [ string ] interface { } { "`order_id`" : pwoContOld . OrderId } )
switch postTarDetailsDeta . Punishmode {
case 1 :
if postNatuerFlowCont . Score != 0 {
scoreFloat := ( float64 ( postNatuerFlowCont . Score ) * float64 ( postNatuerFlowCont . HappenCount ) ) / 100
if postNatuerFlowCont . AddOrDecrease == 1 {
//增加
markDowmStr = fmt . Sprintf ( "%v\n>奖励: %v%v" , markDowmStr , publicmethod . DecimalEs ( scoreFloat , 2 ) , postTarDetailsDeta . Company )
} else {
//减少
markDowmStr = fmt . Sprintf ( "%v\n>减少: %v%v" , markDowmStr , publicmethod . DecimalEs ( scoreFloat , 2 ) , postTarDetailsDeta . Company )
}
}
case 2 :
if postNatuerFlowCont . Money != 0 {
moneyFloat := float64 ( postNatuerFlowCont . Money ) / 100
if postNatuerFlowCont . AddOrDecrease == 1 {
//增加
markDowmStr = fmt . Sprintf ( "%v\n>奖励: %v元" , markDowmStr , publicmethod . DecimalEs ( moneyFloat , 2 ) )
} else {
//减少
markDowmStr = fmt . Sprintf ( "%v\n>减少: %v元" , markDowmStr , publicmethod . DecimalEs ( moneyFloat , 2 ) )
}
}
default :
if postNatuerFlowCont . Score != 0 {
scoreFloat := ( float64 ( postNatuerFlowCont . Score ) * float64 ( postNatuerFlowCont . HappenCount ) ) / 100
if postNatuerFlowCont . AddOrDecrease == 1 {
//增加
markDowmStr = fmt . Sprintf ( "%v\n>增奖励: %v%v" , markDowmStr , publicmethod . DecimalEs ( scoreFloat , 2 ) , postTarDetailsDeta . Company )
} else {
//减少
markDowmStr = fmt . Sprintf ( "%v\n>减少: %v%v" , markDowmStr , publicmethod . DecimalEs ( scoreFloat , 2 ) , postTarDetailsDeta . Company )
}
}
if postNatuerFlowCont . Money != 0 {
moneyFloat := float64 ( postNatuerFlowCont . Money ) / 100
if postNatuerFlowCont . AddOrDecrease == 1 {
//增加
markDowmStr = fmt . Sprintf ( "%v\n>奖励: %v元" , markDowmStr , publicmethod . DecimalEs ( moneyFloat , 2 ) )
} else {
//减少
markDowmStr = fmt . Sprintf ( "%v\n>减少: %v元" , markDowmStr , publicmethod . DecimalEs ( moneyFloat , 2 ) )
}
}
}
//获取责任信息
var zeRenRenCont modelshr . PersonArchives
zeRenRenCont . GetCont ( map [ string ] interface { } { "`key`" : postNatuerFlowCont . PersonLiable } , "`name`" , "`number`" )
markDowmStr = fmt . Sprintf ( "%v\n> \n><font color=\"warning\">被考核人: %v(%v)</font>" , markDowmStr , zeRenRenCont . Name , zeRenRenCont . Number )
markDowmStr = fmt . Sprintf ( "%v\n><font color=\"info\">发生时间: %v</font> " , markDowmStr , publicmethod . UnixTimeToDay ( postNatuerFlowCont . HappenTime , 1 ) )
markDowmStr = fmt . Sprintf ( "%v\n>\n>[查看审批详情](http://new.hxgk.group/#/quantitativeList?id=%v)" , markDowmStr , pwoContOld . OrderId )
} else {
//定量操作
var postMeterFlowCont modelskpi . PostMeteringFlow
postMeterFlowCont . GetCont ( map [ string ] interface { } { "`order_id`" : pwoContOld . OrderId } )
markDowmStr = fmt . Sprintf ( "%v\n>%v年" , markDowmStr , postMeterFlowCont . Year )
switch postTarDeta . Cycle {
case 5 :
markDowmStr = fmt . Sprintf ( "%v\n>%v季度上报数值%v%v" , markDowmStr , postMeterFlowCont . Quarter , publicmethod . DecimalEs ( postMeterFlowCont . Score , 2 ) , postTarDeta . Unit )
case 6 :
markDowmStr = fmt . Sprintf ( "%v\n>上报数值%v%v" , markDowmStr , publicmethod . DecimalEs ( postMeterFlowCont . Score , 2 ) , postTarDeta . Unit )
default :
markDowmStr = fmt . Sprintf ( "%v\n>%v月上报数值%v%v" , markDowmStr , postMeterFlowCont . Month , publicmethod . DecimalEs ( postMeterFlowCont . Score , 2 ) , postTarDeta . Unit )
}
//获取责任信息
var zeRenRenCont modelshr . PersonArchives
zeRenRenCont . GetCont ( map [ string ] interface { } { "`key`" : postMeterFlowCont . PersonLiable } , "`name`" , "`number`" )
markDowmStr = fmt . Sprintf ( "%v\n> \n><font color=\"warning\">被考核人: %v(%v)</font>" , markDowmStr , zeRenRenCont . Name , zeRenRenCont . Number )
markDowmStr = fmt . Sprintf ( "%v\n>\n>[查看审批详情](http://new.hxgk.group/#/quantitativeList?id=%v)" , markDowmStr , pwoContOld . OrderId )
}
//发送抄送信息
wechatcallback . SendNoticeMsg ( sendToUserList , markDowmStr , systemApp )
}
}
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 10 - 0 9 16 : 15 : 56
@ 功能 : 更新审批流
@ 参数
# pwoId 岗位审批工作流ID
# flowMap 流程结构体
# operatorWechat 操作人
# clickEnter 操作
# step 执行的哪一步
@ 返回值
#
* /
func EidtPostFlowLog ( pwoId int64 , flowMap [ ] publicmethod . FlowChartList , oneFlowCont publicmethod . FlowChartList , operatorWechat string , clickEnter , step int ) {
defer syncSeting . Done ( )
var newFlowMap [ ] publicmethod . FlowChartList
for _ , v := range flowMap {
var newFlowMapCont publicmethod . FlowChartList
newFlowMapCont . Step = v . Step //步伐
newFlowMapCont . NodeName = v . NodeName //节点名称
newFlowMapCont . Class = v . Class //节点类型 1、普通节点;2、运行中指定节点
newFlowMapCont . RunType = v . RunType //运行状态(1:开始;2:操作点;3:结束)
newFlowMapCont . NodeRelationship = v . NodeRelationship
if v . Step == oneFlowCont . Step { //获取到当前执行的节点
newFlowMapCont . State = 2 //状态 1、不点亮;2、点亮
for _ , uv := range v . UserList { //遍历审批人列表
if uv . Wechat == operatorWechat { //当前操作人
var logCont publicmethod . LogList
switch clickEnter {
case 1 :
logCont . State = 2
case 2 :
logCont . State = 3
default :
logCont . State = 1
}
logCont . TimeVal = publicmethod . UnixTimeToDay ( time . Now ( ) . Unix ( ) , 1 )
uv . LogList = append ( uv . LogList , logCont )
}
newFlowMapCont . UserList = append ( newFlowMapCont . UserList , uv )
}
} else {
newFlowMapCont . State = v . Class //状态 1、不点亮;2、点亮
newFlowMapCont . UserList = v . UserList
}
newFlowMap = append ( newFlowMap , newFlowMapCont )
}
jsonStr , _ := json . Marshal ( newFlowMap )
var pwoCont modelskpi . PostWorkflowOrders
pwoCont . EiteCont ( map [ string ] interface { } { "`id`" : pwoId } , map [ string ] interface { } { "`work_flow`" : string ( jsonStr ) , "`time`" : time . Now ( ) . Unix ( ) } )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 10 - 0 9 16 : 0 9 : 35
@ 功能 : 更新审批状态
@ 参数
# pwoId 审批流ID
# nextStep 下一步
# flowState 流程状态
@ 返回值
#
* /
func UpdateStateFlow ( pwoId int64 , nextStep , flowState int ) {
defer syncSeting . Done ( )
var pwoCont modelskpi . PostWorkflowOrders
pwoCont . EiteCont ( map [ string ] interface { } { "`id`" : pwoId } , map [ string ] interface { } { "`next_step`" : nextStep , "`state`" : flowState , "`time`" : time . Now ( ) . Unix ( ) } ) //改变审批流状态
}