dddd
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

535 lines
17 KiB

package quantification
import (
"fmt"
"strconv"
"github.com/flipped-aurora/gin-vue-admin/server/commonus"
"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/model/assessmentmodel"
"github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
"github.com/flipped-aurora/gin-vue-admin/server/model/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
for _, v := range requestData.TargetId {
var flowLogList []assessmentmodel.FlowLog
floLogErr := global.GVA_DB_Performanceappraisal.Where("FIND_IN_SET(?,`fl_evaluation_id`)", v).Find(&flowLogList).Error
if floLogErr == nil {
for _, fv := range flowLogList {
fvDepartId := strconv.FormatInt(fv.DutyDepartment, 10)
if commonus.IsItTrueString(fvDepartId, accDepart) == false {
accDepart = append(accDepart, fvDepartId)
}
yearStr := strconv.FormatInt(int64(fv.Year), 10)
if commonus.IsItTrueString(yearStr, yearTime) == false {
yearTime = append(yearTime, yearStr)
}
//判断组织架构是否有数据
if len(orgMap) > 0 {
for oi, ov := range orgMap {
//判断公司是否已经存在
if ov.Id == strconv.FormatInt(fv.DutyGroup, 10) {
//判断是否有分厂数据
if len(ov.Child) > 0 {
isYes := true
for _, dv := range ov.Child {
if dv.Id == strconv.FormatInt(fv.DutyDepartment, 10) {
isYes = false //该部门分厂已经存在
}
}
if isYes == true {
//该部门分厂不存在是添加
//写入部门
whereDepart := commonus.MapOut()
whereDepart["id"] = fv.DutyDepartment
orgDepartCont, orgDepartErr := commonus.GetNewOrgCont(whereDepart, "name")
if orgDepartErr == nil {
var orgDepartMapCont orgModels
orgDepartMapCont.Id = strconv.FormatInt(fv.DutyDepartment, 10)
orgDepartMapCont.Name = orgDepartCont.Name
orgMap[oi].Child = append(orgMap[oi].Child, orgDepartMapCont)
}
}
} else {
//没有分厂数据,根据上级数据进行新增
if fv.DutyDepartment != 0 {
//写入部门
whereDepart := commonus.MapOut()
whereDepart["id"] = fv.DutyDepartment
orgDepartCont, orgDepartErr := commonus.GetNewOrgCont(whereDepart, "name")
if orgDepartErr == nil {
var orgDepartMapCont orgModels
orgDepartMapCont.Id = strconv.FormatInt(fv.DutyDepartment, 10)
orgDepartMapCont.Name = orgDepartCont.Name
orgMap[oi].Child = append(orgMap[oi].Child, orgDepartMapCont)
}
}
}
} else {
if fv.DutyGroup != 0 {
//写入集团信息
where := commonus.MapOut()
where["id"] = fv.DutyGroup
orgGroupCont, orgGroupErr := commonus.GetNewOrgCont(where, "name")
if orgGroupErr == nil {
var orgMapCont orgModelsAry
orgMapCont.Id = strconv.FormatInt(fv.DutyGroup, 10)
orgMapCont.Name = orgGroupCont.Name
if fv.DutyDepartment != 0 {
//写入部门
whereDepart := commonus.MapOut()
whereDepart["id"] = fv.DutyDepartment
orgDepartCont, orgDepartErr := commonus.GetNewOrgCont(whereDepart, "name")
if orgDepartErr == nil {
var orgDepartMapCont orgModels
orgDepartMapCont.Id = strconv.FormatInt(fv.DutyDepartment, 10)
orgDepartMapCont.Name = orgDepartCont.Name
orgMapCont.Child = append(orgMapCont.Child, orgDepartMapCont)
}
}
orgMap = append(orgMap, orgMapCont)
}
}
}
}
} else {
//没有数据的时候根据数值进行新增
if fv.DutyGroup != 0 {
//写入集团信息
where := commonus.MapOut()
where["id"] = fv.DutyGroup
orgGroupCont, orgGroupErr := commonus.GetNewOrgCont(where, "name")
if orgGroupErr == nil {
var orgMapCont orgModelsAry
orgMapCont.Id = strconv.FormatInt(fv.DutyGroup, 10)
orgMapCont.Name = orgGroupCont.Name
if fv.DutyDepartment != 0 {
//写入部门
whereDepart := commonus.MapOut()
whereDepart["id"] = fv.DutyDepartment
orgDepartCont, orgDepartErr := commonus.GetNewOrgCont(whereDepart, "name")
if orgDepartErr == nil {
var orgDepartMapCont orgModels
orgDepartMapCont.Id = strconv.FormatInt(fv.DutyDepartment, 10)
orgDepartMapCont.Name = orgDepartCont.Name
orgMapCont.Child = append(orgMapCont.Child, orgDepartMapCont)
}
}
orgMap = append(orgMap, orgMapCont)
}
}
}
}
}
}
outMap := commonus.MapOut()
outMap["grouplist"] = orgMap
outMap["timelist"] = yearTime
response.Result(0, outMap, "数据获取失败!", c)
}
//量化考核图标
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)
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)
}
}
}
} else {
//时间维度
getStatistics, gstErr := TimeDimensionStatistics(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 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 辅助计数
返回说明
@scoreVal 计算得分
@allPrize 全奖值
@zeroPrize 零奖值
@CappingVal 封顶值
@achievement 达成率
*/
func GetQuantitativeConfig(targetScore int64, resultval float64, group, depart, dimen, target, deaTarget string, year int64, timecopy 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
}
allPrize = qualConfig.Allprize / 100
zeroPrize = qualConfig.Zeroprize / 100
CappingVal = qualConfig.CappingVal / 100
chuShu := resultval - float64(qualConfig.Zeroprize)
beiChuShu := float64(qualConfig.Allprize) - float64(qualConfig.Zeroprize)
if beiChuShu > 0 {
achievement = commonus.Decimal(chuShu / beiChuShu)
scoreVal = achievement * (resultval / 100)
if achievement >= CappingVal {
scoreVal = CappingVal * float64(targetScore)
}
} else {
scoreVal = float64(targetScore)
}
// 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)
// }
// }
// fmt.Printf("达成率--4-->%v-->%v-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", group, depart, dimen, target, year, allPrize, zeroPrize, CappingVal, achievement)
return
}
//获取指标计算配置参数
/*
@targetScore 指标分值
@resultval 结算值
@group 集团
@depart 部门
@dimen 维度
@target 指标
@deaTarget 细则
@year 年份
@timecopy 辅助计数
返回说明
@scoreVal 计算得分
@allPrize 全奖值
@zeroPrize 零奖值
@CappingVal 封顶值
@achievement 达成率
*/
func GetQuantitativeConfigEs(resultval float64, group, depart, dimen, target, deaTarget string, year int64, timecopy int) (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
}
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
}