package quantification
import (
"fmt"
"strconv"
"gin_server_admin/commonus"
"gin_server_admin/global"
"gin_server_admin/model/assessmentmodel"
"gin_server_admin/model/common/response"
"gin_server_admin/model/hrsystem"
"github.com/gin-gonic/gin"
)
// 量化考核图标
func ( a * ApiGroup ) GetQuantEChartOrgAndYear ( c * gin . Context ) {
isTrue , _ := commonus . ClientIdentity ( )
if isTrue != true {
response . Result ( 1001 , isTrue , "您的身份令牌已经失效!请重新登录获取身份令牌!" , c )
return
}
var requestData getTargetId [ string ]
err := c . ShouldBindJSON ( & requestData )
if err != nil {
response . Result ( 102 , err , "数据获取失败!" , c )
return
}
if len ( requestData . TargetId ) < 1 {
response . Result ( 102 , err , "未获取到指标" , c )
return
}
// var accDepart []string
var yearTime [ ] string
var orgMap [ ] orgModelsAry
var orgMapGuodu [ ] orgModelsAry
for _ , v := range requestData . TargetId {
var targetInfoAry assessmentmodel . EvaluationTarget
targetInfoErr := global . GVA_DB_Performanceappraisal . Model ( & assessmentmodel . EvaluationTarget { } ) . Select ( "et_type,et_dimension" ) . Where ( "et_id = ?" , v ) . First ( & targetInfoAry ) . Error
if targetInfoErr == nil {
// var taskIdAry []int64
// global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.QualitativeEvaluation{}).Select("qe_id").Where("qe_state = 1 AND qe_dimension = ? AND qe_target = ? ", targetInfoAry.Dimension, v).Find(&taskIdAry)
// fmt.Printf("%v----------1----@--->%v----%v\n", len(taskIdAry), targetInfoAry.Type, taskIdAry)
// panic(taskIdAry)
// if len(taskIdAry) > 0 {
var timeOrDemper dataLockStatistics
// for _, rikv := range taskIdAry {
targetId , _ := strconv . ParseInt ( v , 10 , 64 )
if targetInfoAry . Type == 1 {
//定性考核
// fmt.Printf("%v----------1--1--------%v\n", len(taskIdAry), rikv)
synergeticProcess . Add ( 1 )
go timeOrDemper . StatisticalQueryCriteriaXin ( targetId )
} else {
//定量考核
// fmt.Printf("%v----------1--2--------%v\n", len(taskIdAry), rikv)
synergeticProcess . Add ( 1 )
go timeOrDemper . StatisticalQueryCriteria ( targetId )
}
// }
synergeticProcess . Wait ( )
orgMapGo , yearTimeGo := timeOrDemper . readDataLock ( )
for _ , gtv := range yearTimeGo {
if commonus . IsInTrue [ string ] ( gtv , yearTime ) == false {
yearTime = append ( yearTime , gtv )
}
}
orgMapGuodu = append ( orgMapGuodu , orgMapGo ... )
// }
}
}
for _ , gv := range orgMapGuodu {
if len ( orgMap ) > 0 {
for gvi , gvm := range orgMap {
if gv . Id == gvm . Id {
orgMap [ gvi ] . Child = bianLiOrg ( gv . Child , gvm . Child )
} else {
orgMap = append ( orgMap , gv )
}
}
} else {
orgMap = append ( orgMap , gv )
}
}
outMap := commonus . MapOut ( )
outMap [ "grouplist" ] = orgMap
outMap [ "timelist" ] = yearTime
response . Result ( 0 , outMap , "数据获取失败!" , c )
}
func bianLiOrg ( guoDuOrm , outOrm [ ] orgModels ) ( ormAry [ ] orgModels ) {
for _ , v := range guoDuOrm {
for _ , ov := range outOrm {
if v . Id != ov . Id {
outOrm = append ( outOrm , v )
}
}
}
ormAry = outOrm
return
}
// 量化考核图标
func ( a * ApiGroup ) QuantEChart ( c * gin . Context ) {
isTrue , _ := commonus . ClientIdentity ( )
if isTrue != true {
response . Result ( 1001 , isTrue , "您的身份令牌已经失效!请重新登录获取身份令牌!" , c )
return
}
var requestData natureParameter
c . ShouldBindJSON ( & requestData )
// err := c.ShouldBindJSON(&requestData)
// if err != nil {
// response.Result(102, err, "数据获取失败!", c)
// return
// }
if len ( requestData . TargetId ) < 1 {
response . Result ( 103 , requestData , "未获取到指标" , c )
return
}
if requestData . AnalysisAngle == 0 {
requestData . AnalysisAngle = 1
}
outMap := commonus . MapOut ( )
var graphicStatistics GraphicStatistics
for _ , v := range requestData . TargetId {
if requestData . AnalysisAngle == 1 {
// getStatistics, gstErr := OrgDimensionStatistics(v, requestData)
getStatistics , gstErr := OrgDimensionStatisticsNew ( v , requestData )
outMap [ "TimeDimension_" + v ] = getStatistics
if gstErr == true {
for _ , gsv := range getStatistics . XLine {
if commonus . IsItTrueString ( gsv , graphicStatistics . XLine ) == false {
graphicStatistics . XLine = append ( graphicStatistics . XLine , gsv )
}
}
for _ , cilv := range getStatistics . Cylindrical {
if commonus . IsItTrueString ( cilv , graphicStatistics . Cylindrical ) == false {
graphicStatistics . Cylindrical = append ( graphicStatistics . Cylindrical , cilv )
for _ , cdv := range getStatistics . CylindricalData {
// fmt.Printf("%v\n", cdv)
if cdv . Name == cilv {
graphicStatistics . CylindricalData = append ( graphicStatistics . CylindricalData , cdv )
}
}
}
}
}
} else {
//时间维度
// getStatistics, gstErr := TimeDimensionStatistics(v, requestData)
getStatistics , gstErr := TimeDimensionStatisticsNew ( v , requestData )
outMap [ "TimeDimension_" + v ] = getStatistics
if gstErr == true {
for _ , gsv := range getStatistics . XLine {
if commonus . IsItTrueString ( gsv , graphicStatistics . XLine ) == false {
graphicStatistics . XLine = append ( graphicStatistics . XLine , gsv )
}
}
for _ , cilv := range getStatistics . Cylindrical {
if commonus . IsItTrueString ( cilv , graphicStatistics . Cylindrical ) == false {
graphicStatistics . Cylindrical = append ( graphicStatistics . Cylindrical , cilv )
for _ , cdv := range getStatistics . CylindricalData {
if cdv . Name == cilv {
graphicStatistics . CylindricalData = append ( graphicStatistics . CylindricalData , cdv )
}
}
}
}
}
}
// getStatistics, gstErr := TimeDimensionStatistics(v, requestData)
// fmt.Println(gstErr)
}
outMap [ "graphicStatistics" ] = graphicStatistics
response . Result ( 0 , graphicStatistics , "图形数据" , c )
}
func getGroupOrgList ( orgAry [ ] string ) ( orgMap [ ] orgModelsAry , orgWherList [ ] orgModels ) {
var govMap [ ] OutGovCont
var orgErr error
if len ( orgAry ) > 0 {
orgErr = global . GVA_DB_HrDataBase . Model ( & hrsystem . AdministrativeOrganization { } ) . Select ( "administrative_organization.*,aot.name as classname,aot.level" ) . Joins ( "left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type" ) . Where ( "administrative_organization.`state` = 1 AND administrative_organization.id IN ?" , orgAry ) . Find ( & govMap ) . Error
} else {
var orgId [ ] int64
global . GVA_DB_HrDataBase . Model ( & hrsystem . AdministrativeOrganization { } ) . Select ( "id" ) . Where ( "`state` = 1 AND `superior` = 0" ) . Find ( & orgId )
orgErr = global . GVA_DB_HrDataBase . Model ( & hrsystem . AdministrativeOrganization { } ) . Select ( "administrative_organization.*,aot.name as classname,aot.level" ) . Joins ( "left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type" ) . Where ( "administrative_organization.`state` = 1 AND administrative_organization.superior IN ?" , orgId ) . Find ( & govMap ) . Error
}
if orgErr != nil {
return
}
for _ , v := range govMap {
if len ( orgMap ) > 0 {
for _ , gv := range orgMap {
if gv . Id != strconv . FormatInt ( v . Id , 10 ) {
var groupInfo orgModelsAry
groupInfo . Id = strconv . FormatInt ( v . Id , 10 )
groupInfo . Name = v . Name
if v . Abbreviation != "" {
groupInfo . Name = v . Abbreviation
}
groupInfo . Pid = strconv . FormatInt ( v . Superior , 10 )
groupInfo . Level = v . Level
orgMap = append ( orgMap , groupInfo )
}
}
} else {
var groupInfo orgModelsAry
groupInfo . Id = strconv . FormatInt ( v . Id , 10 )
groupInfo . Name = v . Name
if v . Abbreviation != "" {
groupInfo . Name = v . Abbreviation
}
groupInfo . Pid = strconv . FormatInt ( v . Superior , 10 )
groupInfo . Level = v . Level
orgMap = append ( orgMap , groupInfo )
}
}
if len ( orgMap ) > 0 {
for _ , ov := range orgMap {
isInGroup := true //界定是否写入
for _ , olv := range orgWherList {
if ov . Id == olv . Id {
isInGroup = false
}
}
if isInGroup == true {
var orgList orgModels
orgList . Id = ov . Id
orgList . Name = ov . Name
orgList . Pid = ov . Pid
orgList . Level = ov . Level
orgidInt , _ := strconv . ParseInt ( ov . Id , 10 , 64 )
orgList . SunOrg = commonus . DiGuiOrgSun ( orgidInt , orgList . SunOrg )
orgList . SunOrg = append ( orgList . SunOrg , orgidInt )
orgWherList = append ( orgWherList , orgList )
}
}
}
return
}
// 获取行政组织
func getGroupOrg ( orgAry [ ] string ) ( orgMap [ ] orgModelsAry , orgWherList [ ] orgModels ) {
var govMap [ ] OutGovCont
orgErr := global . GVA_DB_HrDataBase . Model ( & hrsystem . AdministrativeOrganization { } ) . Select ( "administrative_organization.*,aot.name as classname,aot.level" ) . Joins ( "left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type" ) . Where ( "administrative_organization.`state` = 1 AND administrative_organization.id IN ?" , orgAry ) . Find ( & govMap ) . Error
if orgErr != nil {
return
}
// fmt.Printf("%v\n", govMap)
for _ , v := range govMap {
if len ( orgMap ) > 0 {
if v . Level > 2 {
groupId , groupIsTrue := commonus . GetNewHrOrg ( v . Id )
if groupIsTrue == true {
newAdd := true
for gii , gvv := range orgMap {
if gvv . Id == strconv . FormatInt ( groupId , 10 ) {
newAdd = false
for _ , sgv := range orgMap [ gii ] . Child {
if sgv . Id != strconv . FormatInt ( v . Id , 10 ) {
var orgSun orgModels
orgSun . Id = strconv . FormatInt ( v . Id , 10 )
orgSun . Pid = strconv . FormatInt ( v . Superior , 10 )
orgSun . Name = v . Name
orgSun . Level = v . Level
if v . Abbreviation != "" {
orgSun . Name = v . Abbreviation
}
orgMap [ gii ] . Child = append ( orgMap [ gii ] . Child , orgSun )
}
}
}
}
if newAdd == true {
where := commonus . MapOut ( )
where [ "id" ] = groupId
orgGroupCont , orgGroupErr := commonus . GetNewOrgCont ( where , "name" , "organization_type" )
if orgGroupErr == nil {
var groupInfo orgModelsAry
groupInfo . Id = strconv . FormatInt ( groupId , 10 )
groupInfo . Name = orgGroupCont . Name
groupInfo . Pid = strconv . FormatInt ( v . Superior , 10 )
if orgGroupCont . Abbreviation != "" {
groupInfo . Name = orgGroupCont . Abbreviation
}
var aotModel hrsystem . AdministrativeOrganizationType
where := commonus . MapOut ( )
where [ "id" ] = orgGroupCont . OrganizationType
aotModel . GetCont ( where , "level" )
groupInfo . Level = aotModel . Level
var orgSun orgModels
orgSun . Id = strconv . FormatInt ( v . Id , 10 )
orgSun . Name = v . Name
if v . Abbreviation != "" {
orgSun . Name = v . Abbreviation
}
orgSun . Level = v . Level
orgSun . Pid = strconv . FormatInt ( v . Superior , 10 )
groupInfo . Child = append ( groupInfo . Child , orgSun )
orgMap = append ( orgMap , groupInfo )
}
}
}
} else {
for _ , gv := range orgMap {
if gv . Id != strconv . FormatInt ( v . Id , 10 ) {
var groupInfo orgModelsAry
groupInfo . Id = strconv . FormatInt ( v . Id , 10 )
groupInfo . Name = v . Name
if v . Abbreviation != "" {
groupInfo . Name = v . Abbreviation
}
groupInfo . Pid = strconv . FormatInt ( v . Superior , 10 )
groupInfo . Level = v . Level
orgMap = append ( orgMap , groupInfo )
}
}
}
} else {
if v . Level > 2 {
groupId , groupIsTrue := commonus . GetNewHrOrg ( v . Id )
if groupIsTrue == true {
where := commonus . MapOut ( )
where [ "id" ] = groupId
orgGroupCont , orgGroupErr := commonus . GetNewOrgCont ( where , "name" , "abbreviation" , "organization_type" )
if orgGroupErr == nil {
var groupInfo orgModelsAry
groupInfo . Id = strconv . FormatInt ( groupId , 10 )
groupInfo . Name = orgGroupCont . Name
if orgGroupCont . Abbreviation != "" {
groupInfo . Name = orgGroupCont . Abbreviation
}
groupInfo . Pid = strconv . FormatInt ( v . Superior , 10 )
var aotModel hrsystem . AdministrativeOrganizationType
where := commonus . MapOut ( )
where [ "id" ] = orgGroupCont . OrganizationType
aotModel . GetCont ( where , "level" )
groupInfo . Level = aotModel . Level
var orgSun orgModels
orgSun . Id = strconv . FormatInt ( v . Id , 10 )
orgSun . Name = v . Name
if v . Abbreviation != "" {
orgSun . Name = v . Abbreviation
}
orgSun . Level = v . Level
groupInfo . Child = append ( groupInfo . Child , orgSun )
orgMap = append ( orgMap , groupInfo )
}
}
} else {
var groupInfo orgModelsAry
groupInfo . Id = strconv . FormatInt ( v . Id , 10 )
groupInfo . Name = v . Name
if v . Abbreviation != "" {
groupInfo . Name = v . Abbreviation
}
groupInfo . Pid = strconv . FormatInt ( v . Superior , 10 )
groupInfo . Level = v . Level
orgMap = append ( orgMap , groupInfo )
}
}
}
if len ( orgMap ) > 0 {
for _ , ov := range orgMap {
if len ( orgWherList ) > 0 {
isInGroup := true //界定是否写入
for _ , olv := range orgWherList {
if ov . Id == olv . Id {
isInGroup = false
}
}
if isInGroup == true {
var orgList orgModels
orgList . Id = ov . Id
orgList . Name = ov . Name
orgList . Pid = ov . Pid
orgList . Level = ov . Level
orgWherList = append ( orgWherList , orgList )
}
} else {
var orgList orgModels
orgList . Id = ov . Id
orgList . Name = ov . Name
orgList . Pid = ov . Pid
orgList . Level = ov . Level
orgWherList = append ( orgWherList , orgList )
}
//判断是否有下级菜单
if len ( ov . Child ) > 0 {
for _ , ocv := range ov . Child {
if len ( orgWherList ) > 0 {
isIn := true //界定是否写入
for _ , olv := range orgWherList {
if ocv . Id == olv . Id {
isIn = false
}
}
if isIn == true {
var orgList orgModels
orgList . Id = ocv . Id
orgList . Pid = ov . Pid
orgList . Name = fmt . Sprintf ( "%v%v" , ov . Name , ocv . Name )
orgList . Level = ocv . Level
orgWherList = append ( orgWherList , orgList )
}
} else {
var orgList orgModels
orgList . Id = ocv . Id
orgList . Pid = ov . Pid
orgList . Name = fmt . Sprintf ( "%v%v" , ov . Name , ocv . Name )
orgList . Level = ocv . Level
orgWherList = append ( orgWherList , orgList )
}
}
}
}
}
return
}
//获取定量考核目标
/ *
@ targetScore 指标分值
@ resultval 结算值
@ group 集团
@ depart 部门
@ dimen 维度
@ target 指标
@ deaTarget 细则
@ year 年份
@ timecopy 辅助计数
@ typeClass 1 : 定性 ; 2 : 定量
返回说明
@ scoreVal 计算得分
@ allPrize 全奖值
@ zeroPrize 零奖值
@ CappingVal 封顶值
@ achievement 达成率
* /
func GetQuantitativeConfig ( targetScore int64 , resultval float64 , group , depart , dimen , target , deaTarget string , year int64 , timecopy , typeClass int ) ( scoreVal , allPrize , zeroPrize , CappingVal , achievement float64 ) {
scoreVal = 0
allPrize = 0
zeroPrize = 0
CappingVal = 0
achievement = 0
var qualConfig assessmentmodel . QuantitativeConfig
gormDb := global . GVA_DB_Performanceappraisal . Where ( "`group` = ? AND `departmentid` = ? AND `dimension` = ? AND `target` = ? AND `year` = ?" , group , depart , dimen , target , year )
if deaTarget != "0" {
gormDb = gormDb . Where ( "targetconfig = ?" , deaTarget )
}
// if timecopy != 0 {
// gormDb = gormDb.Where("timecopy = ?", timecopy)
// }
gormDb = gormDb . Where ( "timecopy = ?" , timecopy )
err := gormDb . First ( & qualConfig ) . Error
// fmt.Printf("达成率--0-->%v-->%v-->%v-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", group, depart, dimen, target, year, allPrize, zeroPrize, CappingVal, achievement, err)
if err != nil {
return
}
scoreVal , allPrize , zeroPrize , CappingVal , achievement = commonus . CalculateScore ( targetScore , resultval , qualConfig . Allprize , qualConfig . Zeroprize , qualConfig . CappingVal , typeClass )
return
// allPrize = qualConfig.Allprize / 100
// zeroPrize = qualConfig.Zeroprize / 100
// CappingVal = qualConfig.CappingVal / 100
// chuShu := resultval - zeroPrize
// beiChuShu := allPrize - zeroPrize
// // chuShu := resultval - float64(qualConfig.Zeroprize)
// // beiChuShu := float64(qualConfig.Allprize) - float64(qualConfig.Zeroprize)
// if beiChuShu > 0 {
// achievement = commonus.Decimal(chuShu / beiChuShu)
// // scoreVal = achievement * (resultval / 100)
// scoreVal = achievement * float64(targetScore)
// if achievement >= CappingVal {
// scoreVal = CappingVal * float64(targetScore)
// }
// } else {
// scoreVal = float64(targetScore)
// }
// // commonus.Decimal()
// scoreVal = commonus.Decimal(scoreVal)
// allPrize = commonus.Decimal(allPrize)
// zeroPrize = commonus.Decimal(zeroPrize)
// CappingVal = commonus.Decimal(CappingVal)
// achievement = commonus.Decimal(achievement) * 100
// if resultval <= 0 {
// achievement = 0
// scoreVal = 0
// }
// if qualConfig.CappingVal != 0 && resultval >= qualConfig.CappingVal {
// scoreVal = float64(targetScore)
// achievement = 100
// // fmt.Printf("达成率--1-->%v-->%v-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", group, depart, dimen, target, year, allPrize, zeroPrize, CappingVal, achievement)
// } else {
// chuShu := resultval - float64(qualConfig.Zeroprize)
// beiChuShu := float64(qualConfig.Allprize) - float64(qualConfig.Zeroprize)
// if beiChuShu > 0 {
// achievement = commonus.Decimal(chuShu / beiChuShu)
// scoreVal = achievement * (resultval / 100)
// fmt.Printf("达成率--2-->%v-->%v-->%v-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", group, depart, dimen, target, year, allPrize, zeroPrize, CappingVal, achievement, resultval)
// } else {
// scoreVal = float64(targetScore)
// // fmt.Printf("达成率--3-->%v-->%v-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", group, depart, dimen, target, year, allPrize, zeroPrize, CappingVal, achievement)
// }
// }targetScore int64, resultval float64, group, depart, dimen, target, deaTarget string, year int64, timecopy int scoreVal, allPrize, zeroPrize, CappingVal, achievement float64
// fmt.Printf("\n\n达成率--4-->targetScore---------->%v------------>resultval---------->%v------------>group---------->%v------------>depart---------->%v------------>dimen---------->%v------------>target---------->%v------------>deaTarget---------->%v------------>year---------->%v------------>timecopy---------->%v------------>scoreVal---------->%v------------>allPrize---------->%v------------>zeroPrize---------->%v------------>CappingVal---------->%v------------>achievement---------->%v\n\n", targetScore, resultval, group, depart, dimen, target, deaTarget, year, timecopy, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
return
}
//获取指标计算配置参数
/ *
@ targetScore 指标分值
@ resultval 结算值
@ group 集团
@ depart 部门
@ dimen 维度
@ target 指标
@ deaTarget 细则
@ year 年份
@ timecopy 辅助计数
@ typeClass 1 : 定性 ; 2 : 定量
返回说明
@ scoreVal 计算得分
@ allPrize 全奖值
@ zeroPrize 零奖值
@ CappingVal 封顶值
@ achievement 达成率
* /
func GetQuantitativeConfigEs ( targetScore int64 , resultval float64 , group , depart , dimen , target , deaTarget string , year int64 , timecopy int , typeClass int ) ( scoreVal , allPrize , zeroPrize , CappingVal , achievement float64 ) {
allPrize = 0
zeroPrize = 0
CappingVal = 0
achievement = 0
var qualConfig assessmentmodel . QuantitativeConfig
gormDb := global . GVA_DB_Performanceappraisal . Where ( "`group` = ? AND `departmentid` = ? AND `dimension` = ? AND `target` = ? AND `year` = ?" , group , depart , dimen , target , year )
if deaTarget != "0" {
gormDb = gormDb . Where ( "targetconfig = ?" , deaTarget )
}
if timecopy != 0 {
gormDb = gormDb . Where ( "timecopy = ?" , timecopy )
}
err := gormDb . First ( & qualConfig ) . Error
if err != nil {
return
}
scoreVal , allPrize , zeroPrize , CappingVal , achievement = commonus . CalculateScore ( targetScore , resultval , qualConfig . Allprize , qualConfig . Zeroprize , qualConfig . CappingVal , typeClass )
return
chuShu := resultval - float64 ( qualConfig . Zeroprize )
beiChuShu := float64 ( qualConfig . Allprize ) - float64 ( qualConfig . Zeroprize )
if beiChuShu > 0 {
achievement = commonus . Decimal ( chuShu / beiChuShu )
}
allPrize = qualConfig . Allprize / 100
zeroPrize = qualConfig . Zeroprize / 100
CappingVal = qualConfig . CappingVal / 100
return
}