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.
1792 lines
54 KiB
1792 lines
54 KiB
package departmentweb
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"key_performance_indicators/models/modelshr"
|
|
"key_performance_indicators/models/modelskpi"
|
|
"key_performance_indicators/overall"
|
|
"key_performance_indicators/overall/publicmethod"
|
|
"math"
|
|
"sort"
|
|
"time"
|
|
|
|
"strconv"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-11 08:40:44
|
|
@ 功能: 指标列表
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (a *ApiMethod) TargetListForDepartment(c *gin.Context) {
|
|
var receivedValue GetDepartTargetCont
|
|
err := c.ShouldBindJSON(&receivedValue)
|
|
if err != nil {
|
|
publicmethod.Result(100, err, c)
|
|
return
|
|
}
|
|
if receivedValue.Id == "" {
|
|
publicmethod.Result(1, err, c, "未知行政组织结构!")
|
|
return
|
|
}
|
|
var targetCont modelskpi.EvaluationTarget
|
|
gormDb := overall.CONSTANT_DB_KPI.Table(fmt.Sprintf("%s et", targetCont.TableName())).Where("et.`et_state` = 1 ")
|
|
if receivedValue.Attribute != 0 {
|
|
gormDb = gormDb.Where("et.`et_type` = ?", receivedValue.Attribute)
|
|
}
|
|
gormDb = gormDb.Joins("JOIN target_department td ON et.et_id = td.target_id AND td.target_sun_id = 0 AND td.target_bylaws = 0 AND td.`type` = 1 AND td.`post_id` = 0 AND td.state = 1 AND td.level = 1 AND td.`department_id` = ?", receivedValue.Id)
|
|
var targetIdAry []int64
|
|
err = gormDb.Distinct("et.et_id").Find(&targetIdAry).Error
|
|
if err != nil || len(targetIdAry) < 1 {
|
|
publicmethod.Result(105, err, c)
|
|
return
|
|
}
|
|
var departmentTargetList []modelskpi.EvaluationTarget
|
|
err = overall.CONSTANT_DB_KPI.Model(&modelskpi.EvaluationTarget{}).Select("et_id,et_title").Where("et_id IN ?", targetIdAry).Order("`et_id` ASC").Find(&departmentTargetList).Error
|
|
if err != nil || len(departmentTargetList) < 1 {
|
|
publicmethod.Result(105, err, c)
|
|
return
|
|
}
|
|
var outputContent []SendTargetCont
|
|
for _, v := range departmentTargetList {
|
|
var outCont SendTargetCont
|
|
outCont.Id = strconv.FormatInt(v.Id, 10)
|
|
outCont.Name = v.Title
|
|
outputContent = append(outputContent, outCont)
|
|
}
|
|
publicmethod.Result(0, outputContent, c)
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-11 11:14:41
|
|
@ 功能: 根据部门、指标、年份统计每月的目标值、实际值、达成率
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (a *ApiMethod) BasisDepartTargetTimeStatistics(c *gin.Context) {
|
|
var receivedValue BaseDepartTargetTime
|
|
err := c.ShouldBindJSON(&receivedValue)
|
|
if err != nil {
|
|
publicmethod.Result(100, err, c)
|
|
return
|
|
}
|
|
if receivedValue.OrgId == "" {
|
|
publicmethod.Result(1, err, c, "未知行政组织!无法统计!")
|
|
return
|
|
}
|
|
if receivedValue.TargetId == "" {
|
|
publicmethod.Result(1, err, c, "未知指标!无法统计!")
|
|
return
|
|
}
|
|
tarWhere := publicmethod.MapOut[string]()
|
|
tarWhere["et_id"] = receivedValue.TargetId
|
|
//获取指标信息
|
|
var targetCont modelskpi.EvaluationTarget
|
|
err = targetCont.GetCont(tarWhere)
|
|
if err != nil {
|
|
publicmethod.Result(1, err, c, "未知指标!无法统计!")
|
|
return
|
|
}
|
|
tadyTime := time.Now().Unix()
|
|
dateYear := publicmethod.UnixTimeToDay(tadyTime, 16)
|
|
dateMonthMAx := 12
|
|
if receivedValue.DateTime == "" {
|
|
receivedValue.DateTime = dateYear
|
|
dateMonthVal := publicmethod.UnixTimeToDay(tadyTime, 17)
|
|
dateMonthMAx, _ = strconv.Atoi(dateMonthVal)
|
|
} else {
|
|
if receivedValue.DateTime == dateYear {
|
|
dateMonthVal := publicmethod.UnixTimeToDay(tadyTime, 17)
|
|
dateMonthMAx, _ = strconv.Atoi(dateMonthVal)
|
|
}
|
|
}
|
|
mubiaozhiTitle := fmt.Sprintf("目标值(%v)", targetCont.Uniteing)
|
|
shijizhiTitle := fmt.Sprintf("实际值(%v)", targetCont.Uniteing)
|
|
dachenglvTitle := fmt.Sprintf("达成率(%v)", "%")
|
|
|
|
var sendCont DrawEcharStatisticsCont
|
|
sendCont.Legend = []string{mubiaozhiTitle, shijizhiTitle, dachenglvTitle}
|
|
var dttsbSync GetDttsb
|
|
for i := 1; i <= dateMonthMAx; i++ {
|
|
sendCont.XAxisVal = append(sendCont.XAxisVal, fmt.Sprintf("%v月", i))
|
|
SyncSeting.Add(1)
|
|
go dttsbSync.PerformCalculation(receivedValue.OrgId, receivedValue.TargetId, receivedValue.DateTime, i)
|
|
}
|
|
SyncSeting.Wait()
|
|
Target, Actuality, CompletionRate, axisLeftMax, axisLeftMin, axisRightMax, axisRightMin := dttsbSync.readPlanTaskData() //读取协程数据
|
|
|
|
//根据维度序号排序
|
|
sort.Slice(Target, func(i, j int) bool {
|
|
return Target[i].Sort < Target[j].Sort
|
|
})
|
|
sort.Slice(Actuality, func(i, j int) bool {
|
|
return Actuality[i].Sort < Actuality[j].Sort
|
|
})
|
|
sort.Slice(CompletionRate, func(i, j int) bool {
|
|
return CompletionRate[i].Sort < CompletionRate[j].Sort
|
|
})
|
|
var muBiaoVal Seriescont
|
|
muBiaoVal.Name = mubiaozhiTitle //名称
|
|
muBiaoVal.Type = "bar" //图像类型
|
|
muBiaoVal.Tooltip = targetCont.Uniteing //单位
|
|
for _, tv := range Target {
|
|
muBiaoVal.Data = append(muBiaoVal.Data, tv.Val)
|
|
}
|
|
sendCont.Series = append(sendCont.Series, muBiaoVal)
|
|
var siJiVal Seriescont
|
|
siJiVal.Name = shijizhiTitle //名称
|
|
siJiVal.Type = "bar" //图像类型
|
|
siJiVal.Tooltip = targetCont.Uniteing //单位
|
|
for _, av := range Actuality {
|
|
siJiVal.Data = append(siJiVal.Data, av.Val)
|
|
}
|
|
sendCont.Series = append(sendCont.Series, siJiVal)
|
|
var daChengLvVal Seriescont
|
|
daChengLvVal.Name = dachenglvTitle //名称
|
|
daChengLvVal.Type = "line" //图像类型
|
|
daChengLvVal.Tooltip = "%" //单位
|
|
for _, cv := range CompletionRate {
|
|
daChengLvVal.Data = append(daChengLvVal.Data, cv.Val)
|
|
}
|
|
sendCont.Series = append(sendCont.Series, daChengLvVal)
|
|
|
|
var yMaxValLeft float64
|
|
var yMinValLeft float64
|
|
var yMaxValRight float64
|
|
var yMinValRight float64
|
|
|
|
yMinValLeft = axisLeftMin
|
|
if axisLeftMin < 0 {
|
|
yMinValLeft = 0
|
|
}
|
|
if axisLeftMax == 0 && axisLeftMin == 0 {
|
|
yMaxValLeft = 10
|
|
} else {
|
|
yMaxValLeft = axisLeftMax
|
|
}
|
|
fmt.Printf("yMinValLeft:%v----------->yMinValLeft:%v----------->axisLeftMax:%v\n", yMinValLeft, yMinValLeft, axisLeftMax)
|
|
maxYZhiStr := strconv.FormatFloat(yMaxValLeft, 'f', 0, 64)
|
|
maxYZhiInt, _ := strconv.ParseInt(maxYZhiStr, 10, 64)
|
|
quyuzhi := maxYZhiInt % 10
|
|
if yMaxValLeft > 1000 {
|
|
yMaxValLeft = yMaxValLeft - float64(quyuzhi) + 100
|
|
} else {
|
|
if yMaxValLeft < 10 {
|
|
yMaxValLeft = yMaxValLeft + 1
|
|
} else {
|
|
yMaxValLeft = yMaxValLeft - float64(quyuzhi) + 10
|
|
}
|
|
|
|
}
|
|
|
|
fmt.Printf("maxYZhiStr:%v----------->maxYZhiInt:%v----------->quyuzhi:%v----------->yMaxValLeft:%v\n", maxYZhiStr, maxYZhiInt, quyuzhi, yMaxValLeft)
|
|
|
|
yMinValRight = axisRightMin
|
|
if axisRightMin < 0 {
|
|
yMinValRight = 0
|
|
}
|
|
if axisRightMax == 0 && axisRightMin == 0 {
|
|
yMaxValRight = 10
|
|
} else {
|
|
yMaxValRight = axisRightMax
|
|
}
|
|
|
|
fmt.Printf("yMaxValRight:%v----------->yMinValRight:%v----------->axisRightMax:%v\n", yMaxValRight, yMinValRight, axisRightMax)
|
|
|
|
maxYZhiStrRight := strconv.FormatFloat(yMaxValRight, 'f', 0, 64)
|
|
maxYZhiIntRight, _ := strconv.ParseInt(maxYZhiStrRight, 10, 64)
|
|
quyuzhiRight := maxYZhiIntRight % 10
|
|
if yMaxValRight < 10 {
|
|
yMaxValRight = yMaxValRight + 1
|
|
} else {
|
|
yMaxValRight = yMaxValRight - float64(quyuzhiRight) + 10
|
|
}
|
|
|
|
// if yMaxValRight > 100 {
|
|
// yMaxValRight = 100
|
|
// }
|
|
|
|
fmt.Printf("maxYZhiStrRight:%v----------->maxYZhiIntRight:%v----------->quyuzhiRight:%v\n", maxYZhiStrRight, maxYZhiIntRight, quyuzhiRight)
|
|
|
|
var yAxisOne YaxisStruct
|
|
yAxisOne.Name = "目标值 / 实际值 / 单位"
|
|
// yAxisOne.Name = fmt.Sprintf("目标值(%v)/实际值(%v)/单位(%v)", targetCont.Uniteing, targetCont.Uniteing, "%")
|
|
yAxisOne.Type = "value" //图像类型
|
|
yAxisOne.Min = publicmethod.DecimalEs(yMinValLeft, 3) //最小值
|
|
yAxisOne.Max = publicmethod.DecimalEs(yMaxValLeft, 3) //最大值
|
|
yAxisOne.FormAtter = targetCont.Uniteing
|
|
sendCont.YAxis = append(sendCont.YAxis, yAxisOne)
|
|
var yAxisTwo YaxisStruct
|
|
yAxisTwo.Name = "达成率"
|
|
yAxisTwo.Type = "value" //图像类型
|
|
yAxisTwo.Min = publicmethod.DecimalEs(yMinValRight, 3) //最小值
|
|
yAxisTwo.Max = publicmethod.DecimalEs(yMaxValRight, 3) //最大值
|
|
yAxisTwo.FormAtter = "%"
|
|
sendCont.YAxis = append(sendCont.YAxis, yAxisTwo)
|
|
fmt.Printf("%v---------->%v------------->%v------------->%v------------->%v------------->%v------------->%v\n", axisLeftMax, axisLeftMin, axisRightMax, axisRightMin, yAxisOne, yAxisTwo, yMaxValLeft)
|
|
publicmethod.Result(0, sendCont, c)
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-11 14:42:20
|
|
@ 功能: 计算目标值,实际值,达成率
|
|
@ 参数
|
|
|
|
#orgId 行政组织
|
|
#targetId 指标
|
|
#years 年
|
|
#month 月
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (g *GetDttsb) PerformCalculation(orgId, targetId, years string, month int) {
|
|
g.mutext.Lock()
|
|
defer g.mutext.Unlock()
|
|
var listCont []modelskpi.FlowDataLogType
|
|
err := overall.CONSTANT_DB_KPI.Where("`department` = ? AND `targetid` = ? AND `year` = ? AND `month` = ?", orgId, targetId, years, month).Find(&listCont).Error
|
|
var maxAllPrize float64
|
|
var minZeroPrize float64
|
|
var maxCappingPrize float64
|
|
var sumScore float64
|
|
if err == nil && len(listCont) > 0 {
|
|
for _, v := range listCont { //遍历数据
|
|
minZeroPrize, maxAllPrize, maxCappingPrize = GetTargetSetUp(v.Baseline, orgId, targetId, years, month, 3)
|
|
|
|
if v.ScoringMethod == 1 {
|
|
sumScore = sumScore + float64(v.Score)
|
|
} else {
|
|
sumScore = sumScore + float64(v.ScoringScore)
|
|
}
|
|
}
|
|
}
|
|
|
|
maxAllPrizeChuLi := publicmethod.DecimalEs(maxAllPrize/100, 2)
|
|
sumScoreChuLi := publicmethod.DecimalEs(sumScore/100, 2)
|
|
|
|
if g.AxisLeftMax < maxAllPrizeChuLi {
|
|
g.AxisLeftMax = maxAllPrizeChuLi
|
|
}
|
|
if g.AxisLeftMax < sumScoreChuLi {
|
|
g.AxisLeftMax = sumScoreChuLi
|
|
}
|
|
if g.AxisLeftMin > maxAllPrizeChuLi {
|
|
g.AxisLeftMin = maxAllPrizeChuLi
|
|
}
|
|
if g.AxisLeftMin > sumScoreChuLi {
|
|
g.AxisLeftMin = sumScoreChuLi
|
|
}
|
|
//目标值
|
|
var targetConfig GetDttsbCont
|
|
targetConfig.Val = publicmethod.DecimalEs(maxAllPrize/100, 2)
|
|
targetConfig.Sort = month
|
|
g.Target = append(g.Target, targetConfig)
|
|
//实际值
|
|
var actualityConfig GetDttsbCont
|
|
actualityConfig.Val = publicmethod.DecimalEs(sumScore/100, 2)
|
|
actualityConfig.Sort = month
|
|
g.Actuality = append(g.Actuality, actualityConfig)
|
|
//达成率
|
|
dachenglv := DepartTargetCompletionRate(sumScore, minZeroPrize, maxAllPrize, maxCappingPrize)
|
|
var completionRateConfig GetDttsbCont
|
|
completionRateConfig.Val = dachenglv
|
|
completionRateConfig.Sort = month
|
|
g.CompletionRate = append(g.CompletionRate, completionRateConfig)
|
|
|
|
if g.AxisRightMax < dachenglv {
|
|
g.AxisRightMax = dachenglv
|
|
}
|
|
if g.AxisRightMin > dachenglv {
|
|
g.AxisRightMin = dachenglv
|
|
}
|
|
|
|
SyncSeting.Done()
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-11 15:56:21
|
|
@ 功能: 计算达成率
|
|
@ 参数
|
|
|
|
#actualValue 实际值
|
|
#zeroPrize 零奖值
|
|
#allPrize 全奖值
|
|
#cappingPrize 封顶值
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func DepartTargetCompletionRate(actualValue, zeroPrize, allPrize, cappingPrize float64) (percentageComplete float64) {
|
|
// fmt.Printf("计算达成率------->%v------->%v------->%v------->%v\n", actualValue, zeroPrize, allPrize, cappingPrize)
|
|
if allPrize == 0 && zeroPrize == 0 { //全奖值与零奖值都为0 那么达成率 100
|
|
percentageComplete = 10000
|
|
} else {
|
|
if allPrize > zeroPrize { //如果全奖值大于零奖值 执行一下操作
|
|
if actualValue <= zeroPrize { //实际结算值小于零奖值 那么达成率0
|
|
percentageComplete = 0
|
|
} else { //实际结算值大于零奖值
|
|
chushu := actualValue - zeroPrize
|
|
beiChuShu := allPrize - zeroPrize
|
|
// fmt.Printf("计算达成率-----2-->%v------->%v\n", chushu, beiChuShu)
|
|
if beiChuShu != 0 {
|
|
// percentageComplete = publicmethod.DecimalEs(chushu/beiChuShu, 4)
|
|
percentageComplete = chushu / beiChuShu
|
|
// fmt.Printf("计算达成率-----3-->%v------->%v------->%v\n", chushu, beiChuShu, percentageComplete)
|
|
if percentageComplete > 0 {
|
|
percentageComplete = percentageComplete * 10000
|
|
// fmt.Printf("计算达成率-----4-->%v------->%v------->%v\n", chushu, beiChuShu, percentageComplete)
|
|
if percentageComplete > cappingPrize {
|
|
if cappingPrize != 0 {
|
|
percentageComplete = cappingPrize
|
|
} else {
|
|
percentageComplete = 10000
|
|
}
|
|
|
|
}
|
|
// fmt.Printf("计算达成率-----6-->%v------->%v------->%v------->%v\n", chushu, beiChuShu, percentageComplete, cappingPrize)
|
|
}
|
|
} else { //被除数为0时 那么达成率0
|
|
percentageComplete = 0
|
|
}
|
|
// fmt.Printf("计算达成率-----5-->%v------->%v------->%v\n", chushu, beiChuShu, percentageComplete)
|
|
}
|
|
} else { //如果全奖值小于零奖值 执行一下操作
|
|
if actualValue >= zeroPrize { //实际结算值大于零奖值 那么达成率0
|
|
percentageComplete = 0
|
|
} else { //实际值小于零奖值
|
|
chushu := actualValue - zeroPrize
|
|
beiChuShu := allPrize - zeroPrize
|
|
if beiChuShu != 0 {
|
|
percentageComplete = publicmethod.DecimalEs(chushu/beiChuShu, 4)
|
|
if percentageComplete > 0 {
|
|
percentageComplete = percentageComplete * 10000
|
|
if percentageComplete > cappingPrize {
|
|
percentageComplete = cappingPrize
|
|
}
|
|
}
|
|
} else { //被除数为0时 那么达成率0
|
|
percentageComplete = 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
fmt.Printf("计算达成率-----1-->%v------->%v------->%v------->%v------->%v\n", actualValue, zeroPrize, allPrize, cappingPrize, percentageComplete)
|
|
percentageComplete = publicmethod.DecimalEs(percentageComplete/100, 2)
|
|
return
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-11 15:55:35
|
|
@ 功能: 获取目标设置
|
|
@ 参数
|
|
|
|
#targetConfigStr 当前数据记录的全奖值、零奖值、封顶值
|
|
#orgId 行政组织
|
|
#targetId 指标
|
|
#years 年
|
|
#month 月
|
|
|
|
@ 返回值
|
|
|
|
#zeroPrize 零奖值
|
|
#allPrize 全奖值
|
|
#cappingPrize 封顶值
|
|
|
|
@ 方法原型
|
|
|
|
#func GetTargetSetUp(targetConfigStr, orgId, targetId, years string, month, class int) (zeroPrize, allPrize, cappingPrize float64)
|
|
*/
|
|
func GetTargetSetUp(targetConfigStr, orgId, targetId, years string, month, class int) (zeroPrize, allPrize, cappingPrize float64) {
|
|
var targetConfig []FlowLogAllZreo
|
|
jsonErr := json.Unmarshal([]byte(targetConfigStr), &targetConfig)
|
|
|
|
if jsonErr != nil || len(targetConfig) < 1 {
|
|
var qualConfig modelskpi.QuantitativeConfig
|
|
where := publicmethod.MapOut[string]()
|
|
where["departmentid"] = orgId
|
|
where["target"] = orgId
|
|
where["type"] = class
|
|
where["year"] = years
|
|
where["timecopy"] = month
|
|
where["`state`"] = 1
|
|
qualConfig.GetCont(where, "`zeroprize`", "`allprize`", "`capping_val`")
|
|
zeroPrize = qualConfig.Zeroprize
|
|
allPrize = qualConfig.Allprize
|
|
cappingPrize = qualConfig.CappingVal
|
|
}
|
|
for _, v := range targetConfig {
|
|
if v.TargetId == targetId {
|
|
zeroPrize = v.Zeroprize
|
|
allPrize = v.Allprize
|
|
cappingPrize = v.Capping
|
|
// return
|
|
}
|
|
}
|
|
// fmt.Printf("这是获取目标值数据------------>targetConfigStr:%v----------->orgId:%v----------->targetId:%v----------->years:%v----------->month:%v----------->class:%v----------->jsonErr:%v----------->targetConfig:%v----------->zeroPrize:%v----------->allPrize:%v----------->cappingPrize:%v\n", targetConfigStr, orgId, targetId, years, month, class, jsonErr, targetConfig, zeroPrize, allPrize, cappingPrize)
|
|
return
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-13 13:42:07
|
|
@ 功能: 历史同比根据部门、指标、年份统计每月的目标值、实际值、达成率
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (a *ApiMethod) BasisDepartTargetTimeStatisticsYOY(c *gin.Context) {
|
|
var receivedValue BaseDepartTargetTimeYOY
|
|
err := c.ShouldBindJSON(&receivedValue)
|
|
if err != nil {
|
|
publicmethod.Result(100, err, c)
|
|
return
|
|
}
|
|
if receivedValue.OrgId == "" {
|
|
publicmethod.Result(1, err, c, "未知行政组织!无法统计!")
|
|
return
|
|
}
|
|
if receivedValue.TargetId == "" {
|
|
publicmethod.Result(1, err, c, "未知指标!无法统计!")
|
|
return
|
|
}
|
|
tarWhere := publicmethod.MapOut[string]()
|
|
tarWhere["et_id"] = receivedValue.TargetId
|
|
//获取指标信息
|
|
var targetCont modelskpi.EvaluationTarget
|
|
err = targetCont.GetCont(tarWhere)
|
|
if err != nil {
|
|
publicmethod.Result(1, err, c, "未知指标!无法统计!")
|
|
return
|
|
}
|
|
tadyTime := time.Now().Unix()
|
|
dateYear, _ := strconv.Atoi(publicmethod.UnixTimeToDay(tadyTime, 16))
|
|
dateMonthMAx := 12
|
|
if len(receivedValue.DateTime) > 0 {
|
|
if len(receivedValue.DateTime) == 1 {
|
|
if receivedValue.DateTime[0] == dateYear {
|
|
dateMonthVal := publicmethod.UnixTimeToDay(tadyTime, 17)
|
|
dateMonthMAx, _ = strconv.Atoi(dateMonthVal)
|
|
}
|
|
} else {
|
|
sort.Slice(receivedValue.DateTime, func(i, j int) bool {
|
|
return receivedValue.DateTime[i] < receivedValue.DateTime[j]
|
|
})
|
|
}
|
|
} else {
|
|
dateMonthVal := publicmethod.UnixTimeToDay(tadyTime, 17)
|
|
dateMonthMAx, _ = strconv.Atoi(dateMonthVal)
|
|
receivedValue.DateTime = append(receivedValue.DateTime, dateYear)
|
|
}
|
|
var sendData SendYOYData
|
|
sendData.YAxis.Type = "value"
|
|
sendData.YAxis.Name = "实际值"
|
|
sendData.YAxis.FormAtter = targetCont.Uniteing
|
|
var goSyncData GeteveryYearDttsb
|
|
//获取X轴数据
|
|
for i := 1; i <= dateMonthMAx; i++ {
|
|
sendData.XAxisVal = append(sendData.XAxisVal, fmt.Sprintf("%v月", i))
|
|
}
|
|
//获取Y轴数据
|
|
for _, v := range receivedValue.DateTime {
|
|
SyncSeting.Add(1)
|
|
go goSyncData.getOrgBylawsTime(receivedValue.OrgId, receivedValue.TargetId, v, dateMonthMAx)
|
|
}
|
|
|
|
SyncSeting.Wait()
|
|
targetData, maxVal, minVal := goSyncData.readPlanTaskData()
|
|
if maxVal == 0 && minVal == 0 {
|
|
sendData.YAxis.Max = 10
|
|
sendData.YAxis.Min = 0
|
|
} else {
|
|
chaYiZhi := math.Ceil((maxVal - minVal) / 5)
|
|
if maxVal < 0 {
|
|
sendData.YAxis.Max = maxVal - chaYiZhi
|
|
} else {
|
|
sendData.YAxis.Max = maxVal + chaYiZhi
|
|
}
|
|
}
|
|
maxYZhiStr := strconv.FormatFloat(sendData.YAxis.Max, 'f', 0, 64)
|
|
maxYZhiInt, _ := strconv.ParseInt(maxYZhiStr, 10, 64)
|
|
quyuzhi := maxYZhiInt % 10
|
|
sendData.YAxis.Max = sendData.YAxis.Max - float64(quyuzhi) + 10
|
|
|
|
fmt.Printf("maxYZhiStr:%v------------------>maxYZhiInt:%v---------------->quyuzhi:%v\n", maxYZhiStr, maxYZhiInt, quyuzhi)
|
|
//根据维度月份排序
|
|
sort.Slice(targetData, func(i, j int) bool {
|
|
return targetData[i].Months < targetData[j].Months
|
|
})
|
|
for _, v := range targetData {
|
|
var serInfo Seriescont
|
|
serInfo.Name = v.MonthStr
|
|
serInfo.Type = "bar"
|
|
serInfo.Tooltip = targetCont.Uniteing
|
|
serInfo.Data = v.MonthDataList
|
|
sendData.Series = append(sendData.Series, serInfo)
|
|
}
|
|
fmt.Printf("targetData:%v------------------>maxVal:%v---------------->minVal:%v---------------->Max:%v\n", targetData, maxVal, minVal, sendData.YAxis.Max)
|
|
publicmethod.Result(0, sendData, c)
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-13 14:33:07
|
|
@ 功能: 协程计算月份历史值
|
|
@ 参数
|
|
|
|
#orgId 行政组织
|
|
#targetId 指标
|
|
#years 时间(年)
|
|
#months 时间(月)
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#(g *GeteveryYearDttsb) getOrgBylawsTime(orgId, targetId string, dateTime []int, months int)
|
|
*/
|
|
func (g *GeteveryYearDttsb) getOrgBylawsTime(orgId, targetId string, years, months int) {
|
|
g.mutext.Lock()
|
|
defer g.mutext.Unlock()
|
|
var dataCont HistorMonthData
|
|
dataCont.Months = years
|
|
dataCont.MonthStr = fmt.Sprintf("%v年", years)
|
|
for i := 1; i <= months; i++ {
|
|
// SyncSetinges.Add(1)
|
|
// go g.CalculateYearMonthData(orgId, targetId, v, months)
|
|
|
|
var listCont []modelskpi.FlowDataLogType
|
|
err := overall.CONSTANT_DB_KPI.Model(&modelskpi.FlowDataLogType{}).Select("`score`,`method`,`scoring_score`").Where("`department` = ? AND `targetid` = ? AND `year` = ? AND `month` = ?", orgId, targetId, years, i).Find(&listCont).Error
|
|
if err != nil {
|
|
|
|
dataCont.MonthDataList = append(dataCont.MonthDataList, 0)
|
|
} else {
|
|
var fenScore float64
|
|
for _, v := range listCont {
|
|
if v.ScoringMethod == 1 {
|
|
fenScore = fenScore + float64(v.Score)
|
|
} else {
|
|
fenScore = fenScore + float64(v.ScoringScore)
|
|
}
|
|
}
|
|
fenScore = publicmethod.DecimalEs(fenScore/100, 2)
|
|
dataCont.MonthDataList = append(dataCont.MonthDataList, fenScore)
|
|
if g.AxisMax < fenScore {
|
|
g.AxisMax = fenScore
|
|
}
|
|
if g.AxisMin > fenScore {
|
|
g.AxisMin = fenScore
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
g.Target = append(g.Target, dataCont)
|
|
// SyncSetinges.Wait()
|
|
|
|
SyncSeting.Done()
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-14 16:11:04
|
|
@ 功能: 通过时间获取组织总分
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (a *ApiMethod) TotalScoreOFOrgComesFromTimeSearch(c *gin.Context) {
|
|
var receivedValue OrgSecrcFormTime
|
|
err := c.ShouldBindJSON(&receivedValue)
|
|
if err != nil {
|
|
publicmethod.Result(100, err, c)
|
|
return
|
|
}
|
|
if receivedValue.OrgId == "" {
|
|
myCont, myErr := publicmethod.LoginMyCont(c)
|
|
if myErr != nil {
|
|
receivedValue.OrgId = "309"
|
|
} else {
|
|
if myCont.Company != 0 {
|
|
receivedValue.OrgId = strconv.FormatInt(myCont.Company, 10)
|
|
} else {
|
|
receivedValue.OrgId = "309"
|
|
}
|
|
}
|
|
}
|
|
|
|
tayTime := time.Now().Unix()
|
|
currentYears := publicmethod.UnixTimeToDay(tayTime, 16)
|
|
currentMonths := publicmethod.UnixTimeToDay(tayTime, 17)
|
|
if receivedValue.DateTimes != "" {
|
|
var dayTime publicmethod.DateTimeTotimes
|
|
dayTime.BaisStrToTime(receivedValue.DateTimes)
|
|
if dayTime.Years != "" {
|
|
currentYears = dayTime.Years
|
|
}
|
|
if dayTime.Months != "" {
|
|
currentMonths = dayTime.Months
|
|
}
|
|
}
|
|
//获取行政组织列表
|
|
var orgListCont []modelshr.AdministrativeOrganization
|
|
err = overall.CONSTANT_DB_HR.Model(&modelshr.AdministrativeOrganization{}).Select("`id`,`number`,`name`,`ispower`,`sort`").Where("ispower = 1 AND state = 1 AND organization_type > 2 AND superior = ? AND `id` NOT IN ?", receivedValue.OrgId, []int{281, 163}).Find(&orgListCont).Error
|
|
if err != nil || len(orgListCont) < 1 {
|
|
publicmethod.Result(107, err, c)
|
|
return
|
|
}
|
|
//获取一级主部门下是否由二级主部门
|
|
var allOrgListCont []modelshr.AdministrativeOrganization
|
|
for _, ov := range orgListCont {
|
|
sunOrgListCont, sunOrgErr := publicmethod.GetSunOrgList(ov.Id)
|
|
if sunOrgErr == nil && len(sunOrgListCont) > 0 {
|
|
for _, sv := range sunOrgListCont {
|
|
allOrgListCont = append(allOrgListCont, sv)
|
|
}
|
|
} else {
|
|
allOrgListCont = append(allOrgListCont, ov)
|
|
}
|
|
}
|
|
//根据维度序号排序
|
|
sort.Slice(allOrgListCont, func(i, j int) bool {
|
|
return allOrgListCont[i].Sort < allOrgListCont[j].Sort
|
|
})
|
|
var sendData SendTimeOfOrgSumScore
|
|
//开启协程,分别获取行政组织时间总分
|
|
var syncOrgTimeScore SyncOrgTimeAllScore
|
|
for _, v := range allOrgListCont {
|
|
// if v.Id == 354 {
|
|
sendData.XAxisVal = append(sendData.XAxisVal, v.Name)
|
|
SyncSeting.Add(1)
|
|
// go syncOrgTimeScore.OrgCalculateScore(v, currentYears, currentMonths)
|
|
go syncOrgTimeScore.TallyUpOrgCalculateScore(v, currentYears, currentMonths)
|
|
// }
|
|
|
|
}
|
|
SyncSeting.Wait()
|
|
scoreList, maxScore, minSchor := syncOrgTimeScore.readPlanTaskData()
|
|
// sendDataMap := publicmethod.MapOut[string]()
|
|
var suo []Seriescont
|
|
for _, ov := range allOrgListCont {
|
|
var seriesInfo Seriescont
|
|
seriesInfo.Name = ov.Name
|
|
seriesInfo.Type = "bar"
|
|
orgScore := GetAryValue(ov.Id, scoreList)
|
|
seriesInfo.Data = append(seriesInfo.Data, orgScore)
|
|
sendData.Series = append(sendData.Series, orgScore)
|
|
suo = append(suo, seriesInfo)
|
|
}
|
|
|
|
if maxScore > 0 && minSchor < 0 {
|
|
if maxScore < 10 {
|
|
maxScore = maxScore + 1
|
|
} else {
|
|
maxScore = maxScore + maxScore/5
|
|
}
|
|
if minSchor > -10 {
|
|
minSchor = minSchor - 1
|
|
} else {
|
|
minSchor = minSchor + minSchor/5
|
|
}
|
|
} else if maxScore > 0 && minSchor > 0 {
|
|
maxScore = maxScore + (maxScore-minSchor)/5
|
|
minSchor = float64(int64(minSchor/10)) * 10
|
|
}
|
|
|
|
sendData.YAxis.Min = math.Ceil(minSchor)
|
|
sendData.YAxis.Max = math.Ceil(maxScore)
|
|
// sendDataMap["sendData"] = sendData
|
|
// sendDataMap["receivedValue"] = receivedValue
|
|
// sendDataMap["currentYears"] = currentYears
|
|
// sendDataMap["currentMonths"] = currentMonths
|
|
// sendDataMap["allOrgListCont"] = allOrgListCont
|
|
// sendDataMap["syncOrgTimeScore"] = syncOrgTimeScore
|
|
// sendDataMap["suo"] = suo
|
|
// sendDataMap["maxScore"] = maxScore
|
|
// sendDataMap["minSchor"] = minSchor
|
|
|
|
publicmethod.Result(0, sendData, c)
|
|
}
|
|
|
|
// 获取数值值
|
|
func GetAryValue(orgId int64, orgScoreList []SyncOTASVal) float64 {
|
|
for _, v := range orgScoreList {
|
|
if orgId == v.OrgId {
|
|
return v.Score
|
|
}
|
|
}
|
|
return 0
|
|
}
|
|
|
|
// 获取数值值
|
|
func GetAryValueMonth(months int, orgScoreList []SyncOTASVal) float64 {
|
|
for _, v := range orgScoreList {
|
|
if months == v.Months {
|
|
return v.Score
|
|
}
|
|
}
|
|
return 0
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-15 11:14:37
|
|
@ 功能: 计算行政组织成绩
|
|
@ 参数
|
|
|
|
#orgCont 行政组织薪资
|
|
#years 年
|
|
#months 月
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (s *SyncOrgTimeAllScore) OrgCalculateScore(orgCont modelshr.AdministrativeOrganization, years, months string) {
|
|
//锁操作
|
|
s.mutext.Lock()
|
|
defer s.mutext.Unlock()
|
|
tayTime := time.Now().Unix()
|
|
currentYears := publicmethod.UnixTimeToDay(tayTime, 16)
|
|
currentMonth := publicmethod.UnixTimeToDay(tayTime, 17)
|
|
//获取执行的考核方案
|
|
var schemeCont modelskpi.PlanVersio
|
|
var err error
|
|
if currentYears == years {
|
|
where := publicmethod.MapOut[string]()
|
|
where["`state`"] = 1
|
|
where["`department`"] = orgCont.Id
|
|
err = schemeCont.GetCont(where)
|
|
} else {
|
|
err = overall.CONSTANT_DB_KPI.Where("state = 2 AND department = ? AND yeares = ?", orgCont.Id, years).Order("addtime desc").First(&schemeCont).Error
|
|
if err != nil {
|
|
err = overall.CONSTANT_DB_KPI.Where("state = 3 AND department = ? AND yeares = ?", orgCont.Id, years).Order("addtime desc").First(&schemeCont).Error
|
|
}
|
|
}
|
|
var getPoints float64
|
|
if err == nil {
|
|
//将考核方案解析
|
|
var schemeInfoCont []SchemeInfo
|
|
jsonErr := json.Unmarshal([]byte(schemeCont.Content), &schemeInfoCont)
|
|
if jsonErr == nil {
|
|
for _, v := range schemeInfoCont { //维度层面
|
|
for _, sv := range v.Child { //指标
|
|
//判断是不是观察指标
|
|
if sv.Status == 3 {
|
|
getPoints = getPoints + float64(sv.ReferenceScore)
|
|
// fmt.Printf("sv-1-->%v--->%v--->%v\n", sv.Id, sv.Name, sv.ReferenceScore)
|
|
} else {
|
|
if sv.Status == 1 && sv.Status != 3 { //判断指标是否启用并且不是观察指标
|
|
//获取指标内容
|
|
var targetInfo modelskpi.EvaluationTarget
|
|
targetInfo.GetCont(map[string]interface{}{"`et_id`": sv.Id}, "et_id", "et_type", "et_cycle")
|
|
if sv.Cycles == 0 { //判断统计方式
|
|
sv.Cycles = targetInfo.Cycles
|
|
}
|
|
//判断指标类型
|
|
if targetInfo.Type == 1 {
|
|
//定性考核
|
|
dingXingScore := OrgSchemeDingXing(orgCont.Id, sv.ReferenceScore, targetInfo.Id, sv.Cycles, sv.Status, years, months)
|
|
getPoints = getPoints + dingXingScore
|
|
// fmt.Printf("sv-2-->%v--->%v--->%v\n", sv.Id, sv.Name, dingXingScore)
|
|
} else {
|
|
//定量考核
|
|
dingLiangScore := OrgSchemeDingLiang(orgCont.Id, sv.ReferenceScore, targetInfo.Id, sv.Cycles, sv.Status, years, months)
|
|
getPoints = getPoints + dingLiangScore
|
|
// fmt.Printf("sv-3-->%v--->%v--->%v\n", sv.Id, sv.Name, dingLiangScore)
|
|
}
|
|
}
|
|
}
|
|
// fmt.Printf("sv--->%v--->%v--->%v\n", sv.Id, sv.Name, getPoints)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
currentYearsInt, _ := strconv.Atoi(currentYears)
|
|
yearsInt, _ := strconv.Atoi(years)
|
|
monthsInt, _ := strconv.Atoi(months)
|
|
currentMonthInt, _ := strconv.Atoi(currentMonth)
|
|
if currentYearsInt == yearsInt && monthsInt > currentMonthInt {
|
|
getPoints = 0
|
|
// fmt.Printf("currentYears:%v---->years:%v---->months:%v---->currentMonth:%v---->getPoints:%v\n", currentYearsInt, yearsInt, monthsInt, currentMonthInt, getPoints)
|
|
}
|
|
|
|
if s.AxisMax < getPoints {
|
|
s.AxisMax = getPoints
|
|
}
|
|
if s.AxisMin == 0 {
|
|
s.AxisMin = getPoints
|
|
} else {
|
|
if s.AxisMin > getPoints {
|
|
s.AxisMin = getPoints
|
|
}
|
|
}
|
|
|
|
var orgScore SyncOTASVal
|
|
orgScore.OrgId = orgCont.Id
|
|
orgScore.Score = publicmethod.DecimalEs(getPoints, 2)
|
|
orgScore.Months, _ = strconv.Atoi(months)
|
|
s.OrgScore = append(s.OrgScore, orgScore)
|
|
SyncSeting.Done()
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-15 14:35:59
|
|
@ 功能: 计算行政组织考核方案指定时间内定量指标得分
|
|
@ 参数
|
|
|
|
#orgId 行政组织
|
|
#targetWeight 指标权重
|
|
#targetId 指标Id
|
|
#cycles 周期(1:班;2:天;3:周;4:月;5:季度;6:年)
|
|
#attribute 属性(1:启用;2:禁用;3:观察)
|
|
#years 年
|
|
#months 月
|
|
|
|
@ 返回值
|
|
|
|
#score 最终得分
|
|
|
|
@ 方法原型
|
|
|
|
#func OrgSchemeDingLiang(orgId, targetWeight, targetId int64, cycles, attribute int, years, months string) (score float64)
|
|
*/
|
|
func OrgSchemeDingLiang(orgId, targetWeight, targetId int64, cycles, attribute int, years, months string) (score float64) {
|
|
//获取定量考核记录
|
|
var examineListCont []modelskpi.FlowDataLogType
|
|
err := overall.CONSTANT_DB_KPI.Where("`department` = ? AND `year` = ? AND `month` = ? AND `targetid` = ?", orgId, years, months, targetId).Find(&examineListCont).Error
|
|
if err != nil || len(examineListCont) < 1 {
|
|
score = float64(targetWeight)
|
|
return
|
|
}
|
|
var actualValue float64 //实际值
|
|
var resultValue float64 //得分
|
|
for _, v := range examineListCont {
|
|
actualValue = actualValue + float64(v.Score)
|
|
//判断自动还是手动
|
|
if v.ScoringMethod == 1 {
|
|
classVal := 3
|
|
switch cycles {
|
|
case 5:
|
|
classVal = 1
|
|
case 6:
|
|
classVal = 2
|
|
default:
|
|
classVal = 3
|
|
}
|
|
|
|
monthsInt, _ := strconv.Atoi(months)
|
|
//自动计算
|
|
zeroPrize, allPrize, cappingPrize := GetTargetSetUp(v.Baseline, strconv.FormatInt(orgId, 10), strconv.FormatInt(targetId, 10), years, monthsInt, classVal)
|
|
//达成率
|
|
dachenglv := DepartTargetCompletionRate(float64(v.Score), zeroPrize, allPrize, cappingPrize)
|
|
score = float64(targetWeight) * (dachenglv / 100)
|
|
resultValue = resultValue + score
|
|
fmt.Printf("自动得分------->%v------->%v------->%v------->%v------->%v------->%v------->%v------->%v\n", orgId, resultValue, dachenglv, score, zeroPrize, allPrize, cappingPrize, v.Score)
|
|
} else {
|
|
resultValue = resultValue + publicmethod.DecimalEs(v.ScoringScore/100, 2)
|
|
}
|
|
}
|
|
// score = publicmethod.DecimalEs(resultValue, 2)
|
|
score = resultValue
|
|
if attribute == 3 {
|
|
score = float64(targetWeight)
|
|
} else {
|
|
switch cycles {
|
|
case 5:
|
|
if publicmethod.IsInTrue[string](months, []string{"3", "6", "9", "12"}) == false {
|
|
score = float64(targetWeight)
|
|
}
|
|
case 6:
|
|
if months != "12" {
|
|
score = float64(targetWeight)
|
|
}
|
|
case 7:
|
|
if publicmethod.IsInTrue[string](months, []string{"6", "12"}) == false {
|
|
score = float64(targetWeight)
|
|
}
|
|
default:
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-15 13:09:16
|
|
@ 功能: 计算行政组织考核方案指定时间内定性指标得分
|
|
@ 参数
|
|
|
|
#orgId 行政组织
|
|
#targetWeight 指标权重
|
|
#targetId 指标Id
|
|
#cycles 周期(1:班;2:天;3:周;4:月;5:季度;6:年)
|
|
#attribute 属性(1:启用;2:禁用;3:观察)
|
|
#years 年
|
|
#months 月
|
|
|
|
@ 返回值
|
|
|
|
#score 最终得分
|
|
|
|
@ 方法原型
|
|
|
|
#func OrgSchemeDingXing(orgId, targetWeight, targetId int64, cycles, attribute int, years, months string) (score float64)
|
|
*/
|
|
func OrgSchemeDingXing(orgId, targetWeight, targetId int64, cycles, attribute int, years, months string) (score float64) {
|
|
//获取指定指标的所有满足条件的定性考核记录
|
|
var examineListCont []modelskpi.ScoreFlow
|
|
err := overall.CONSTANT_DB_KPI.Model(&modelskpi.ScoreFlow{}).Select("sf_score,sf_plus_reduce_score,sf_count").Where("sf_reply IN ? AND sf_duty_department = ? AND sf_year = ? AND sf_month = ? AND sf_target_id = ?", []int{2, 3}, orgId, years, months, targetId).Find(&examineListCont).Error
|
|
if err == nil && len(examineListCont) > 0 {
|
|
var minusPoints float64 //减分
|
|
var bonusPoint float64 //加分
|
|
for _, v := range examineListCont {
|
|
if v.PlusReduceScore == 1 {
|
|
//加分操作
|
|
bonusPoint = bonusPoint + (float64(v.Score) * float64(v.Count)) //分值=原分值+(评分乘以发生次数)
|
|
} else {
|
|
//减分操作
|
|
minusPoints = minusPoints + (float64(v.Score) * float64(v.Count)) //分值=原分值+(评分乘以发生次数)
|
|
}
|
|
}
|
|
resultVal := (float64(targetWeight) + bonusPoint/100) - minusPoints/100
|
|
// score = publicmethod.DecimalEs(resultVal, 3)
|
|
score = resultVal
|
|
if attribute == 3 {
|
|
score = float64(targetWeight)
|
|
} else {
|
|
switch cycles {
|
|
case 5:
|
|
if publicmethod.IsInTrue[string](months, []string{"3", "6", "9", "12"}) == false {
|
|
score = float64(targetWeight)
|
|
}
|
|
case 6:
|
|
if months != "12" {
|
|
score = float64(targetWeight)
|
|
}
|
|
case 7:
|
|
if publicmethod.IsInTrue[string](months, []string{"6", "12"}) == false {
|
|
score = float64(targetWeight)
|
|
}
|
|
default:
|
|
}
|
|
}
|
|
|
|
} else {
|
|
score = float64(targetWeight)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-16 08:40:24
|
|
@ 功能: 获取关键指标
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (a *ApiMethod) GetHingeTarget(c *gin.Context) {
|
|
var receivedValue HingeTarget
|
|
err := c.ShouldBindJSON(&receivedValue)
|
|
if err != nil {
|
|
publicmethod.Result(100, err, c)
|
|
return
|
|
}
|
|
if len(receivedValue.Id) < 1 {
|
|
publicmethod.Result(107, err, c)
|
|
return
|
|
}
|
|
tayTime := time.Now().Unix()
|
|
currentYears := publicmethod.UnixTimeToDay(tayTime, 16)
|
|
currentMonths := publicmethod.UnixTimeToDay(tayTime, 17)
|
|
if receivedValue.DateTime != "" {
|
|
var dayTime publicmethod.DateTimeTotimes
|
|
dayTime.BaisStrToTime(receivedValue.DateTime)
|
|
if dayTime.Years != "" {
|
|
currentYears = dayTime.Years
|
|
}
|
|
if dayTime.Months != "" {
|
|
currentMonths = dayTime.Months
|
|
}
|
|
}
|
|
|
|
var targetListCont []modelskpi.EvaluationTarget
|
|
err = overall.CONSTANT_DB_KPI.Model(&modelskpi.EvaluationTarget{}).Select("`et_id`,`et_title`,`et_type`,`et_key`").Where("`et_id` IN ?", receivedValue.Id).Find(&targetListCont).Error
|
|
if err != nil && len(targetListCont) < 1 {
|
|
publicmethod.Result(107, err, c)
|
|
return
|
|
}
|
|
var sendListCont []OutPutHingeTarget
|
|
for _, v := range targetListCont {
|
|
var sendCont OutPutHingeTarget
|
|
sendCont.Id = strconv.FormatInt(v.Id, 10)
|
|
sendCont.Title = fmt.Sprintf("%v年%v月份 %v", currentYears, currentMonths, v.Title)
|
|
sendCont.CharKey = fmt.Sprintf("chars_%v", v.Key)
|
|
if len(receivedValue.OrgId) > 1 {
|
|
sendCont.DataList, sendCont.XAxisVal, sendCont.YAxis.Max, sendCont.YAxis.Min = GetOrgHingeTarget(v.Id, v.Type, currentYears, currentMonths, receivedValue.OrgId)
|
|
}
|
|
fmt.Printf("最小值:%v\n", sendCont.YAxis.Min)
|
|
sendCont.YAxis.Max, sendCont.YAxis.Min = publicmethod.NewJudjeMaxOfMinVal(sendCont.YAxis.Max, sendCont.YAxis.Min)
|
|
// sendCont.DataList []float64 `json:"datalist"`
|
|
// sendCont.XAxisVal []string `json:"xaxis"` //X轴坐标值
|
|
sendListCont = append(sendListCont, sendCont)
|
|
}
|
|
publicmethod.Result(0, sendListCont, c)
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-16 09:21:11
|
|
@ 功能: 获取行政组织指标指定时间内的得分·
|
|
@ 参数
|
|
|
|
#targetId 指标Id
|
|
#attribute 属性(1:定性考核;2:定量考核)
|
|
#ysers 年
|
|
#months 月
|
|
#orgId 行政组织
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func GetOrgHingeTarget(targetId int64, attribute int, ysers, months string, orgId []string) (dataList []float64, titleList []string, maxVal, minVal float64) {
|
|
if len(orgId) < 0 {
|
|
return
|
|
}
|
|
var orgCont []modelshr.AdministrativeOrganization
|
|
err := overall.CONSTANT_DB_HR.Model(&modelshr.AdministrativeOrganization{}).Select("`id`,`name`,`sort`").Where("`id` IN ?", orgId).Order("`sort`").Find(&orgCont).Error
|
|
if err != nil || len(orgCont) < 1 {
|
|
return
|
|
}
|
|
var syncListCont SyncOrgTimeAllScore
|
|
for _, v := range orgCont {
|
|
titleList = append(titleList, v.Name)
|
|
SyncSeting.Add(1)
|
|
go syncListCont.GetOrgTargetVal(v.Id, targetId, attribute, ysers, months)
|
|
}
|
|
SyncSeting.Wait()
|
|
orgScore, maxVal, minVal := syncListCont.readPlanTaskData()
|
|
|
|
for _, ov := range orgCont {
|
|
orgScore := GetAryValue(ov.Id, orgScore)
|
|
dataList = append(dataList, orgScore)
|
|
}
|
|
maxVal = publicmethod.DecimalEs(maxVal, 2)
|
|
minVal = publicmethod.DecimalEs(minVal, 2)
|
|
// fmt.Printf("orgScore------->%v------->%v------->%v\n", orgScore, maxVal, minVal)
|
|
return
|
|
}
|
|
|
|
func (s *SyncOrgTimeAllScore) GetOrgTargetVal(orgId, targetId int64, attribute int, ysers, months string) {
|
|
//锁操作
|
|
s.mutext.Lock()
|
|
defer s.mutext.Unlock()
|
|
var tirgetScore SyncOTASVal
|
|
if attribute == 1 {
|
|
tirgetScore.Score = AuxiliaryCalculationSumNature(orgId, targetId, ysers, months)
|
|
tirgetScore.OrgId = orgId
|
|
s.OrgScore = append(s.OrgScore, tirgetScore)
|
|
} else {
|
|
tirgetScore.Score = AuxiliaryCalculationSum(orgId, targetId, attribute, ysers, months)
|
|
tirgetScore.OrgId = orgId
|
|
s.OrgScore = append(s.OrgScore, tirgetScore)
|
|
}
|
|
// fmt.Printf("tirgetScore.Score---->%v\n", tirgetScore.Score)
|
|
if tirgetScore.Score >= 0 {
|
|
if s.AxisMin == 0 {
|
|
s.AxisMin = tirgetScore.Score
|
|
} else {
|
|
if s.AxisMin > tirgetScore.Score {
|
|
s.AxisMin = tirgetScore.Score
|
|
}
|
|
}
|
|
} else {
|
|
// fmt.Printf("tirgetScore.Score--1-->%v\n-->%v\n", tirgetScore.Score, s.AxisMin)
|
|
if s.AxisMin > tirgetScore.Score {
|
|
s.AxisMin = tirgetScore.Score
|
|
}
|
|
}
|
|
|
|
if s.AxisMax == 0 {
|
|
s.AxisMax = tirgetScore.Score
|
|
} else {
|
|
if s.AxisMax < tirgetScore.Score {
|
|
s.AxisMax = tirgetScore.Score
|
|
}
|
|
}
|
|
// fmt.Printf("计算最大====》%v=====>最小值=========>%v\n", s.AxisMax, s.AxisMin)
|
|
SyncSeting.Done()
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-16 10:00:53
|
|
@ 功能: 获取定量指标总值
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func AuxiliaryCalculationSum(orgId, targetId int64, attribute int, years, months string) (sumScore float64) {
|
|
//获取定量考核记录
|
|
var examineListCont []modelskpi.FlowDataLogType
|
|
err := overall.CONSTANT_DB_KPI.Where("`department` = ? AND `year` = ? AND `month` = ? AND `targetid` = ?", orgId, years, months, targetId).Find(&examineListCont).Error
|
|
if err != nil || len(examineListCont) < 1 {
|
|
sumScore = 0
|
|
return
|
|
}
|
|
for _, v := range examineListCont {
|
|
sumScore = sumScore + float64(v.Score)
|
|
}
|
|
sumScore = publicmethod.DecimalEs(sumScore/100, 2)
|
|
return
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-16 09:44:31
|
|
@ 功能: 获取定性指标总值
|
|
@ 参数
|
|
|
|
#orgId 行政组织
|
|
#targetId 指标ID
|
|
#years 年
|
|
#months 月
|
|
|
|
@ 返回值
|
|
|
|
#sumScore 加减分
|
|
|
|
@ 方法原型
|
|
|
|
#func AuxiliaryCalculationSumNature(orgId, targetId int64, years, months string) (sumScore float64)
|
|
*/
|
|
func AuxiliaryCalculationSumNature(orgId, targetId int64, years, months string) (sumScore float64) {
|
|
var examineListCont []modelskpi.ScoreFlow
|
|
err := overall.CONSTANT_DB_KPI.Model(&modelskpi.ScoreFlow{}).Select("sf_score,sf_plus_reduce_score,sf_count").Where("sf_reply IN ? AND sf_duty_department = ? AND sf_year = ? AND sf_month = ? AND sf_target_id = ?", []int{2, 3}, orgId, years, months, targetId).Find(&examineListCont).Error
|
|
if err == nil && len(examineListCont) > 0 {
|
|
var minusPoints float64 //减分
|
|
var bonusPoint float64 //加分
|
|
for _, v := range examineListCont {
|
|
if v.PlusReduceScore == 1 {
|
|
//加分操作
|
|
bonusPoint = bonusPoint + (float64(v.Score) * float64(v.Count)) //分值=原分值+(评分乘以发生次数)
|
|
} else {
|
|
//减分操作
|
|
minusPoints = minusPoints + (float64(v.Score) * float64(v.Count)) //分值=原分值+(评分乘以发生次数)
|
|
}
|
|
}
|
|
sumScore = (bonusPoint - minusPoints) / 100
|
|
}
|
|
return
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-16 15:50:20
|
|
@ 功能: 获取单一行政组织指定年度各月份成绩
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (a *ApiMethod) GetEveryOneOrgToMonthResult(c *gin.Context) {
|
|
var receivedValue OrgMonthResult
|
|
c.ShouldBindJSON(&receivedValue)
|
|
if receivedValue.OrgId == "" {
|
|
publicmethod.Result(107, receivedValue, c)
|
|
return
|
|
}
|
|
tayTime := time.Now().Unix()
|
|
tadyYear := publicmethod.UnixTimeToDay(tayTime, 16)
|
|
currentYears := tadyYear
|
|
currentMonths := 12
|
|
if receivedValue.DateTime != "" {
|
|
var dayTime publicmethod.DateTimeTotimes
|
|
dayTime.BaisStrToTime(receivedValue.DateTime)
|
|
if dayTime.Years != "" {
|
|
currentYears = dayTime.Years
|
|
}
|
|
}
|
|
if currentYears == tadyYear {
|
|
currentMonths, _ = strconv.Atoi(publicmethod.UnixTimeToDay(tayTime, 17))
|
|
}
|
|
var orgCont modelshr.AdministrativeOrganization
|
|
err := orgCont.GetCont(map[string]interface{}{"`id`": receivedValue.OrgId})
|
|
if err != nil {
|
|
publicmethod.Result(107, receivedValue, c)
|
|
return
|
|
}
|
|
fmt.Printf("年月---->%v---->%v\n", currentYears, currentMonths)
|
|
var sendData SendTimeOfOrgSumScore
|
|
//开启协程,分别获取行政组织时间总分
|
|
var syncOrgTimeScore SyncOrgTimeAllScore
|
|
for i := 1; i <= currentMonths; i++ {
|
|
iStr := strconv.Itoa(i)
|
|
iAxis := fmt.Sprintf("%v月", iStr)
|
|
sendData.XAxisVal = append(sendData.XAxisVal, iAxis)
|
|
SyncSeting.Add(1)
|
|
go syncOrgTimeScore.OrgCalculateScore(orgCont, currentYears, iStr)
|
|
}
|
|
SyncSeting.Wait()
|
|
scoreList, maxScore, minSchor := syncOrgTimeScore.readPlanTaskData()
|
|
//根据维度序号排序
|
|
sort.Slice(scoreList, func(i, j int) bool {
|
|
return scoreList[i].Months < scoreList[j].Months
|
|
})
|
|
var suo []Seriescont
|
|
for i := 1; i <= currentMonths; i++ {
|
|
var seriesInfo Seriescont
|
|
seriesInfo.Name = fmt.Sprintf("%v月", i)
|
|
seriesInfo.Type = "bar"
|
|
orgScore := GetAryValueMonth(i, scoreList)
|
|
seriesInfo.Data = append(seriesInfo.Data, orgScore)
|
|
sendData.Series = append(sendData.Series, orgScore)
|
|
suo = append(suo, seriesInfo)
|
|
}
|
|
sendData.YAxis.Max, sendData.YAxis.Min = publicmethod.JudjeMaxOfMinVal(maxScore, minSchor)
|
|
// outData := publicmethod.MapOut[string]()
|
|
// outData["scoreList"] = scoreList
|
|
// outData["maxScore"] = maxScore
|
|
// outData["minSchor"] = minSchor
|
|
// outData["sendData"] = sendData
|
|
// outData["suo"] = suo
|
|
publicmethod.Result(0, sendData, c)
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-17 09:04:49
|
|
@ 功能: 定性指标同比环比分析
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (a *ApiMethod) BasisDepartAttrTargetTimeStatistics(c *gin.Context) {
|
|
var receivedValue BaseDepartTargetTimeYOY
|
|
err := c.ShouldBindJSON(&receivedValue)
|
|
if err != nil {
|
|
publicmethod.Result(100, err, c)
|
|
return
|
|
}
|
|
if receivedValue.OrgId == "" {
|
|
publicmethod.Result(1, err, c, "未知行政组织!无法统计!")
|
|
return
|
|
}
|
|
if receivedValue.TargetId == "" {
|
|
publicmethod.Result(1, err, c, "未知指标!无法统计!")
|
|
return
|
|
}
|
|
tarWhere := publicmethod.MapOut[string]()
|
|
tarWhere["et_id"] = receivedValue.TargetId
|
|
//获取指标信息
|
|
var targetCont modelskpi.EvaluationTarget
|
|
err = targetCont.GetCont(tarWhere)
|
|
if err != nil {
|
|
publicmethod.Result(1, err, c, "未知指标!无法统计!")
|
|
return
|
|
}
|
|
tadyTime := time.Now().Unix()
|
|
dateYear, _ := strconv.Atoi(publicmethod.UnixTimeToDay(tadyTime, 16))
|
|
dateMonthMAx := 12
|
|
if len(receivedValue.DateTime) > 0 {
|
|
if len(receivedValue.DateTime) == 1 {
|
|
if receivedValue.DateTime[0] == dateYear {
|
|
dateMonthVal := publicmethod.UnixTimeToDay(tadyTime, 17)
|
|
dateMonthMAx, _ = strconv.Atoi(dateMonthVal)
|
|
}
|
|
} else {
|
|
sort.Slice(receivedValue.DateTime, func(i, j int) bool {
|
|
return receivedValue.DateTime[i] < receivedValue.DateTime[j]
|
|
})
|
|
}
|
|
} else {
|
|
dateMonthVal := publicmethod.UnixTimeToDay(tadyTime, 17)
|
|
dateMonthMAx, _ = strconv.Atoi(dateMonthVal)
|
|
receivedValue.DateTime = append(receivedValue.DateTime, dateYear)
|
|
}
|
|
var sendData SendYOYData
|
|
sendData.YAxis.Type = "value"
|
|
sendData.YAxis.Name = "实际值"
|
|
sendData.YAxis.FormAtter = targetCont.Uniteing
|
|
var goSyncData GeteveryYearDttsb
|
|
//获取X轴数据
|
|
for i := 1; i <= dateMonthMAx; i++ {
|
|
sendData.XAxisVal = append(sendData.XAxisVal, fmt.Sprintf("%v月", i))
|
|
}
|
|
//获取Y轴数据
|
|
for _, v := range receivedValue.DateTime {
|
|
SyncSeting.Add(1)
|
|
go goSyncData.GetOrgAttrtargetTime(receivedValue.OrgId, receivedValue.TargetId, v, dateMonthMAx)
|
|
}
|
|
|
|
SyncSeting.Wait()
|
|
targetData, maxVal, minVal := goSyncData.readPlanTaskData()
|
|
|
|
sendData.YAxis.Max, sendData.YAxis.Min = publicmethod.JudjeMaxOfMinVal(maxVal, minVal)
|
|
|
|
//根据维度月份排序
|
|
sort.Slice(targetData, func(i, j int) bool {
|
|
return targetData[i].Months < targetData[j].Months
|
|
})
|
|
for _, v := range targetData {
|
|
var serInfo Seriescont
|
|
serInfo.Name = v.MonthStr
|
|
serInfo.Type = "bar"
|
|
serInfo.Tooltip = targetCont.Uniteing
|
|
serInfo.Data = v.MonthDataList
|
|
sendData.Series = append(sendData.Series, serInfo)
|
|
}
|
|
// fmt.Printf("targetData:%v------------------>maxVal:%v---------------->minVal:%v---------------->Max:%v\n", targetData, maxVal, minVal, sendData.YAxis.Max)
|
|
publicmethod.Result(0, sendData, c)
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-13 14:33:07
|
|
@ 功能: 协程定性指标计算月份历史值
|
|
@ 参数
|
|
|
|
#orgId 行政组织
|
|
#targetId 指标
|
|
#years 时间(年)
|
|
#months 时间(月)
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#(g *GeteveryYearDttsb) getOrgBylawsTime(orgId, targetId string, dateTime []int, months int)
|
|
*/
|
|
func (g *GeteveryYearDttsb) GetOrgAttrtargetTime(orgId, targetId string, years, months int) {
|
|
g.mutext.Lock()
|
|
defer g.mutext.Unlock()
|
|
var dataCont HistorMonthData
|
|
dataCont.Months = years
|
|
dataCont.MonthStr = fmt.Sprintf("%v年", years)
|
|
for i := 1; i <= months; i++ {
|
|
|
|
orgIdInt, _ := strconv.ParseInt(orgId, 10, 64)
|
|
targetIdInt, _ := strconv.ParseInt(targetId, 10, 64)
|
|
yearsStr := strconv.Itoa(years)
|
|
monthsStr := strconv.Itoa(i)
|
|
scoreVal := AuxiliaryCalculationSumNature(orgIdInt, targetIdInt, yearsStr, monthsStr)
|
|
// scoreVal := 100 + AuxiliaryCalculationSumNature(orgIdInt, targetIdInt, yearsStr, monthsStr)
|
|
|
|
dataCont.MonthDataList = append(dataCont.MonthDataList, scoreVal)
|
|
|
|
if g.AxisMax < scoreVal {
|
|
g.AxisMax = scoreVal
|
|
}
|
|
if g.AxisMin > scoreVal {
|
|
g.AxisMin = scoreVal
|
|
}
|
|
|
|
}
|
|
g.Target = append(g.Target, dataCont)
|
|
// SyncSetinges.Wait()
|
|
|
|
SyncSeting.Done()
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-03-17 09:50:12
|
|
@ 功能: 获取单一行政组织多年度各月份成绩
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (a *ApiMethod) GetEveryOneOrgToMonthsResult(c *gin.Context) {
|
|
var receivedValue BaseDepartTimeYOY
|
|
err := c.ShouldBindJSON(&receivedValue)
|
|
if err != nil {
|
|
publicmethod.Result(100, err, c)
|
|
return
|
|
}
|
|
if receivedValue.OrgId == "" {
|
|
publicmethod.Result(1, err, c, "未知行政组织!无法统计!")
|
|
return
|
|
}
|
|
tarWhere := publicmethod.MapOut[string]()
|
|
tarWhere["`id`"] = receivedValue.OrgId
|
|
//获取指标信息
|
|
var orgCont modelshr.AdministrativeOrganization
|
|
err = orgCont.GetCont(tarWhere)
|
|
if err != nil {
|
|
publicmethod.Result(1, err, c, "未知指标!无法统计!")
|
|
return
|
|
}
|
|
tadyTime := time.Now().Unix()
|
|
dateYear, _ := strconv.Atoi(publicmethod.UnixTimeToDay(tadyTime, 16))
|
|
dateMonthMAx := 12
|
|
if len(receivedValue.DateTime) > 0 {
|
|
if len(receivedValue.DateTime) == 1 {
|
|
if receivedValue.DateTime[0] == dateYear {
|
|
dateMonthVal := publicmethod.UnixTimeToDay(tadyTime, 17)
|
|
dateMonthMAx, _ = strconv.Atoi(dateMonthVal)
|
|
}
|
|
} else {
|
|
sort.Slice(receivedValue.DateTime, func(i, j int) bool {
|
|
return receivedValue.DateTime[i] < receivedValue.DateTime[j]
|
|
})
|
|
}
|
|
} else {
|
|
dateMonthVal := publicmethod.UnixTimeToDay(tadyTime, 17)
|
|
dateMonthMAx, _ = strconv.Atoi(dateMonthVal)
|
|
receivedValue.DateTime = append(receivedValue.DateTime, dateYear)
|
|
}
|
|
var sendData SendYOYData
|
|
sendData.YAxis.Type = "value"
|
|
sendData.YAxis.Name = "成绩"
|
|
sendData.YAxis.FormAtter = "分"
|
|
|
|
//获取X轴数据
|
|
for i := 1; i <= dateMonthMAx; i++ {
|
|
sendData.XAxisVal = append(sendData.XAxisVal, fmt.Sprintf("%v月", i))
|
|
}
|
|
var goSyncData GeteveryYearDttsb
|
|
//获取Y轴数据
|
|
for _, v := range receivedValue.DateTime {
|
|
SyncSetinges.Add(1)
|
|
go goSyncData.GetOrgMoreTimeScore(orgCont, v, dateMonthMAx)
|
|
}
|
|
|
|
SyncSetinges.Wait()
|
|
targetData, maxVal, minVal := goSyncData.readPlanTaskData()
|
|
|
|
sendData.YAxis.Max, sendData.YAxis.Min = publicmethod.JudjeMaxOfMinVal(maxVal, minVal)
|
|
|
|
//根据维度月份排序
|
|
sort.Slice(targetData, func(i, j int) bool {
|
|
return targetData[i].Months < targetData[j].Months
|
|
})
|
|
for _, v := range targetData {
|
|
var serInfo Seriescont
|
|
serInfo.Name = v.MonthStr
|
|
serInfo.Type = "bar"
|
|
serInfo.Tooltip = "分"
|
|
serInfo.Data = v.MonthDataList
|
|
sendData.Series = append(sendData.Series, serInfo)
|
|
}
|
|
// fmt.Printf("targetData:%v------------------>maxVal:%v---------------->minVal:%v---------------->Max:%v\n", targetData, maxVal, minVal, sendData.YAxis.Max)
|
|
publicmethod.Result(0, sendData, c)
|
|
}
|
|
|
|
// 获取
|
|
func (g *GeteveryYearDttsb) GetOrgMoreTimeScore(orgCont modelshr.AdministrativeOrganization, years, months int) {
|
|
//锁操作
|
|
g.mutext.Lock()
|
|
defer g.mutext.Unlock()
|
|
yearsStr := strconv.Itoa(years)
|
|
var syncOrgTimeScore SyncOrgTimeAllScore
|
|
for i := 1; i <= months; i++ {
|
|
monthStr := strconv.Itoa(i)
|
|
SyncSeting.Add(1)
|
|
// go syncOrgTimeScore.OrgCalculateScore(orgCont, yearsStr, monthStr)
|
|
go syncOrgTimeScore.TallyUpOrgCalculateScore(orgCont, yearsStr, monthStr)
|
|
}
|
|
SyncSeting.Wait()
|
|
scoreList, maxScore, minSchor := syncOrgTimeScore.readPlanTaskData()
|
|
//根据维度序号排序
|
|
sort.Slice(scoreList, func(i, j int) bool {
|
|
return scoreList[i].Months < scoreList[j].Months
|
|
})
|
|
|
|
if g.AxisMax == 0 {
|
|
g.AxisMax = maxScore
|
|
} else {
|
|
if g.AxisMax < maxScore {
|
|
g.AxisMax = maxScore
|
|
}
|
|
}
|
|
|
|
if g.AxisMin == 0 {
|
|
g.AxisMin = minSchor
|
|
} else {
|
|
if g.AxisMin > minSchor {
|
|
g.AxisMin = minSchor
|
|
}
|
|
}
|
|
var dataCont HistorMonthData
|
|
dataCont.Months = years
|
|
dataCont.MonthStr = fmt.Sprintf("%v年", years)
|
|
for _, v := range scoreList {
|
|
dataCont.MonthDataList = append(dataCont.MonthDataList, v.Score)
|
|
}
|
|
g.Target = append(g.Target, dataCont)
|
|
// fmt.Printf("获取:%v------------------>%v------------------>%v------------------>scoreList:%v------------------>maxScore:%v---------------->minSchor:%v\n", orgCont.Name, years, months, scoreList, maxScore, minSchor)
|
|
SyncSetinges.Done()
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-04-21 16:30:26
|
|
@ 功能: 相关提报人定性考核细则列表(web使用)
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (a *ApiMethod) GetQualityBylawsTasks(c *gin.Context) {
|
|
var receivedValue BylawsAboutPeopleDime
|
|
c.ShouldBindJSON(&receivedValue)
|
|
if receivedValue.OrgId == "" || receivedValue.TargetId == "" {
|
|
publicmethod.Result(101, receivedValue, c)
|
|
return
|
|
}
|
|
|
|
//获取登录人信息
|
|
myLoginCont, _ := publicmethod.LoginMyCont(c)
|
|
var qualEvaCont modelskpi.QualitativeEvaluationView
|
|
gormDb := overall.CONSTANT_DB_KPI.Table(fmt.Sprintf("%s qe", qualEvaCont.TableName())).Select("qe.qe_id,qe.qe_target_sun,qe.qe_detailed_target,qe.qe_content,qe.qe_censor_cont,qe.qe_min_score,qe.qe_max_score,qe.qe_unit,qe.qe_target_sun").Where("qe.`qe_type` = 1 AND qe.`qe_state` = 1 AND qe.`qe_accept_evaluation` = ? AND qe.`qe_target` = ?", receivedValue.OrgId, receivedValue.TargetId)
|
|
gormDb = gormDb.Joins("JOIN target_report td ON qe.qe_target = td.target_id AND qe.qe_accept_evaluation = td.`department_id` AND td.target_bylaws = qe.`qe_detailed_target` AND td.`type` = 1 AND td.`post_id` = 0 AND td.state = 1 AND td.type_level = 3 AND td.`man_key` = ?", myLoginCont.Key)
|
|
// if receivedValue.OrgId != "" {
|
|
// gormDb = gormDb.Where("`qe_accept_evaluation` = ?", receivedValue.OrgId)
|
|
// }
|
|
var qualEvaList []modelskpi.QualitativeEvaluationView
|
|
err := gormDb.Order("qe_accept_evaluation ASC,qe_target ASC").Find(&qualEvaList).Error
|
|
if err != nil {
|
|
publicmethod.Result(105, err, c)
|
|
return
|
|
}
|
|
var tableId []int64
|
|
var sendContList []OutDimList
|
|
for _, v := range qualEvaList {
|
|
if !publicmethod.IsInTrue[int64](v.TargetSun, tableId) {
|
|
tableId = append(tableId, v.TargetSun)
|
|
var sendCont OutDimList
|
|
sendCont.Id = strconv.FormatInt(v.TargetSun, 10)
|
|
var tableCont modelskpi.QualitativeTarget
|
|
tableCont.GetCont(map[string]interface{}{"q_id": v.TargetSun}, "q_title")
|
|
sendCont.Name = tableCont.Title
|
|
sendCont.OrgId = receivedValue.OrgId
|
|
sendCont.TargetId = receivedValue.TargetId
|
|
sendContList = append(sendContList, sendCont)
|
|
}
|
|
}
|
|
publicmethod.Result(0, sendContList, c)
|
|
}
|
|
|
|
/*
|
|
*
|
|
@ 作者: 秦东
|
|
@ 时间: 2023-04-22 08:22:01
|
|
@ 功能: 根据栏目获取获取相关指标
|
|
@ 参数
|
|
|
|
#
|
|
|
|
@ 返回值
|
|
|
|
#
|
|
|
|
@ 方法原型
|
|
|
|
#
|
|
*/
|
|
func (a *ApiMethod) BasePostTableHaveTarget(c *gin.Context) {
|
|
var receivedValue BaseTableGetTargetWeb
|
|
c.ShouldBindJSON(&receivedValue)
|
|
if receivedValue.OrgId == "" || receivedValue.TargetId == "" {
|
|
publicmethod.Result(101, receivedValue, c)
|
|
return
|
|
}
|
|
if receivedValue.Page == 0 {
|
|
receivedValue.Page = 1
|
|
}
|
|
if receivedValue.PageSize == 0 {
|
|
receivedValue.PageSize = 15
|
|
}
|
|
//获取登录人信息
|
|
myLoginCont, _ := publicmethod.LoginMyCont(c)
|
|
var qualEvaCont modelskpi.QualitativeEvaluationView
|
|
gormDb := overall.CONSTANT_DB_KPI.Table(fmt.Sprintf("%s qe", qualEvaCont.TableName())).Select("qe.qe_id,qe.qe_target_sun,qe.qe_detailed_target,qe.qe_content,qe.qe_censor_cont,qe.qe_min_score,qe.qe_max_score,qe.qe_unit").Where("qe.`qe_type` = 1 AND qe.`qe_state` = 1 AND qe.`qe_accept_evaluation` = ? AND qe.`qe_target` = ? AND qe.`qe_target_sun` = ?", receivedValue.OrgId, receivedValue.TargetId, receivedValue.TableId)
|
|
gormDb = gormDb.Joins("JOIN target_report td ON qe.qe_target = td.target_id AND qe.qe_accept_evaluation = td.`department_id` AND td.target_bylaws = qe.`qe_detailed_target` AND td.`type` = 1 AND td.`post_id` = 0 AND td.state = 1 AND td.type_level = 3 AND td.`man_key` = ?", myLoginCont.Key)
|
|
|
|
var total int
|
|
var qualEvaListCount []modelskpi.QualitativeEvaluationView
|
|
totalErr := gormDb.Find(&qualEvaListCount).Error
|
|
if totalErr != nil {
|
|
total = 0
|
|
} else {
|
|
total = len(qualEvaListCount)
|
|
}
|
|
var qualEvaList []modelskpi.QualitativeEvaluationView
|
|
gormDb = publicmethod.PageTurningSettings(gormDb, receivedValue.Page, receivedValue.PageSize)
|
|
err := gormDb.Order("qe_accept_evaluation ASC,qe_target ASC").Find(&qualEvaList).Error
|
|
if err != nil {
|
|
publicmethod.Result(105, err, c)
|
|
return
|
|
}
|
|
var sendContList []OutPutBylawsCont
|
|
for _, v := range qualEvaList {
|
|
var sendCont OutPutBylawsCont
|
|
sendCont.Id = strconv.FormatInt(v.Id, 10)
|
|
var bylawsCont modelskpi.DetailedTarget
|
|
bylawsCont.GetCont(map[string]interface{}{"`dt_id`": v.DetailedTarget}, "`dt_title`", "`dt_content`", `dt_add_reduce`)
|
|
var columnCont modelskpi.QualitativeTarget
|
|
columnCont.GetCont(map[string]interface{}{"`q_id`": v.TargetSun}, "`q_title`")
|
|
sendCont.ColumnTitle = columnCont.Title
|
|
sendCont.Title = bylawsCont.Title //考核项目
|
|
sendCont.Content = bylawsCont.Content //考核内容
|
|
if v.Content != "" {
|
|
sendCont.Content = v.Content
|
|
}
|
|
if v.CensorCont != "" {
|
|
sendCont.Content = v.CensorCont
|
|
}
|
|
sendCont.MaxScore = publicmethod.DecimalEs(float64(v.MaxScore)/100, 2)
|
|
sendCont.MinScore = publicmethod.DecimalEs(float64(v.MinScore)/100, 2)
|
|
if sendCont.MinScore > 0 && sendCont.MaxScore > 0 {
|
|
sendCont.Standard = fmt.Sprintf("%v-%v", sendCont.MinScore, sendCont.MaxScore) //标准
|
|
sendCont.ScoreType = 2
|
|
} else if sendCont.MinScore > 0 && sendCont.MaxScore <= 0 {
|
|
sendCont.Standard = fmt.Sprintf("%v", sendCont.MinScore)
|
|
sendCont.ScoreType = 1
|
|
} else if sendCont.MinScore <= 0 && sendCont.MaxScore > 0 {
|
|
sendCont.Standard = fmt.Sprintf("%v", sendCont.MaxScore)
|
|
sendCont.ScoreType = 1
|
|
} else {
|
|
sendCont.Standard = "0"
|
|
sendCont.ScoreType = 3
|
|
}
|
|
sendCont.Unit = v.Unit //单位
|
|
sendCont.PlusMinusScore = bylawsCont.AddReduce //加减分
|
|
sendContList = append(sendContList, sendCont)
|
|
}
|
|
publicmethod.ResultList(0, receivedValue.Page, receivedValue.PageSize, int64(total), int64(len(sendContList)), sendContList, c)
|
|
}
|
|
|