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.
360 lines
13 KiB
360 lines
13 KiB
package statistics
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"gin_server_admin/api/statistics/quantification"
|
|
"gin_server_admin/commonus"
|
|
"gin_server_admin/global"
|
|
"gin_server_admin/model/assessmentmodel"
|
|
"gin_server_admin/model/common/response"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// 考核入口
|
|
func (a *ApiGroup) Index(c *gin.Context) {
|
|
outPut := commonus.MapOut()
|
|
response.Result(0, outPut, "方案数据表格获取成功", c)
|
|
}
|
|
|
|
// 方案数据表格统计
|
|
func (a *ApiGroup) PlanVersioStatistics(c *gin.Context) {
|
|
var requestData commonus.SetIds
|
|
err := c.ShouldBindJSON(&requestData)
|
|
if err != nil {
|
|
response.Result(101, err, "参数错误!请重新提交!", c)
|
|
return
|
|
}
|
|
if requestData.Id == 0 && requestData.OutId == "" {
|
|
response.Result(102, err, "参数错误!请重新提交!", c)
|
|
return
|
|
}
|
|
if requestData.OutId != "" && requestData.Id == 0 {
|
|
idInt, _ := strconv.ParseInt(requestData.OutId, 10, 64)
|
|
requestData.Id = idInt
|
|
}
|
|
var planVersioCont DutyPlanVersioOut
|
|
contErr := global.GVA_DB_Performanceappraisal.Where("`id` = ?", requestData.Id).First(&planVersioCont).Error
|
|
if contErr != nil {
|
|
response.Result(103, contErr, "没有查询到数据", c)
|
|
return
|
|
}
|
|
var planInfo []AddDutyNewCont
|
|
jsonErr := json.Unmarshal([]byte(planVersioCont.Content), &planInfo)
|
|
if jsonErr != nil {
|
|
response.Result(104, contErr, "没有查询到数据", c)
|
|
return
|
|
}
|
|
|
|
outCont := commonus.MapOut()
|
|
outCont["planInfo"] = planInfo
|
|
outCont["jsonErr"] = jsonErr
|
|
outCont["Content"] = planVersioCont.Content
|
|
response.Result(0, outCont, "获取成功", c)
|
|
}
|
|
|
|
// 根据部门获取绩效考核数据统计表格
|
|
func (a *ApiGroup) DepartPerAppDataStatistics(c *gin.Context) {
|
|
isTrue, userCont := commonus.ClientIdentity()
|
|
if isTrue != true {
|
|
response.Result(1001, isTrue, "您的身份令牌已经失效!请重新登录获取身份令牌!", c)
|
|
return
|
|
}
|
|
var requestData DutyPlanVersio
|
|
c.ShouldBindJSON(&requestData)
|
|
if requestData.Year == "" {
|
|
requestData.Year = commonus.TimeStampToDate(time.Now().Unix(), 11)
|
|
}
|
|
var planVersioCont []assessmentmodel.PlanVersio
|
|
gormDb := global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.PlanVersio{}).Where("`state` = 1")
|
|
switch userCont.IsAdmin {
|
|
case "2":
|
|
if requestData.DeaprtId != "" {
|
|
gormDb = gormDb.Where("`department` = ? ", userCont.Deparment)
|
|
}
|
|
gormDb = gormDb.Where("`group` = ? ", userCont.Company)
|
|
case "3":
|
|
if requestData.Group != "" {
|
|
gormDb = gormDb.Where("`group` = ? ", requestData.Group)
|
|
}
|
|
if requestData.DeaprtId != "" {
|
|
gormDb = gormDb.Where("`department` = ? ", requestData.DeaprtId)
|
|
}
|
|
case "4":
|
|
if requestData.Group != "" {
|
|
gormDb = gormDb.Where("`group` = ? ", requestData.Group)
|
|
}
|
|
if requestData.DeaprtId != "" {
|
|
gormDb = gormDb.Where("`department` = ? ", requestData.DeaprtId)
|
|
}
|
|
default:
|
|
// gormDb = gormDb.Where("`group` = ? AND `department` = ?", userCont.Company, userCont.Deparment)
|
|
}
|
|
err := gormDb.Find(&planVersioCont).Error
|
|
if err != nil {
|
|
response.Result(102, err, "没有查询到数据", c)
|
|
return
|
|
}
|
|
// response.Result(102, planVersioCont, "没有查询到数据", c)
|
|
// return
|
|
var statisticsAry []OrgStatics
|
|
for _, v := range planVersioCont {
|
|
var statisticsCont OrgStatics
|
|
idStr := strconv.FormatInt(v.Group, 10)
|
|
if judgeOrgStatic(idStr, statisticsAry) == true {
|
|
strDepartment := strconv.FormatInt(v.Department, 10)
|
|
if judegOrgDeparStatic(idStr, strDepartment, statisticsAry) == false {
|
|
var departInfo OrgStaticsDepary
|
|
departInfo.Id = strDepartment
|
|
whereDepart := commonus.MapOut()
|
|
whereDepart["id"] = strDepartment
|
|
orgContDer, _ := commonus.GetNewOrgCont(whereDepart, "id", "name")
|
|
departInfo.Name = orgContDer.Name
|
|
sunChild, sunChildErr := StaticDataOperation(v.Key, idStr, strDepartment, v.Content, requestData.Year)
|
|
if sunChildErr == true {
|
|
departInfo.Child = sunChild
|
|
}
|
|
for ori, orv := range statisticsAry {
|
|
fmt.Printf("opp---------->%v---------->%v\n", orv.Id, idStr)
|
|
if orv.Id == idStr {
|
|
statisticsAry[ori].Child = append(statisticsAry[ori].Child, departInfo)
|
|
}
|
|
}
|
|
// statisticsCont.Child = append(statisticsCont.Child, departInfo)
|
|
}
|
|
// fmt.Printf("kkkkkk------1--------->%v\n", v)
|
|
} else {
|
|
// fmt.Printf("kkkkkk------2--------->%v\n", v)
|
|
statisticsCont.Id = idStr
|
|
where := commonus.MapOut()
|
|
where["id"] = idStr
|
|
orgCont, _ := commonus.GetNewOrgCont(where, "id", "name")
|
|
statisticsCont.Name = orgCont.Name
|
|
|
|
strDepartment := strconv.FormatInt(v.Department, 10)
|
|
if judegOrgDeparStatic(idStr, strDepartment, statisticsAry) == false {
|
|
var departInfo OrgStaticsDepary
|
|
departInfo.Id = strDepartment
|
|
whereDepart := commonus.MapOut()
|
|
whereDepart["id"] = strDepartment
|
|
orgContDer, _ := commonus.GetNewOrgCont(whereDepart, "id", "name")
|
|
departInfo.Name = orgContDer.Name
|
|
sunChild, sunChildErr := StaticDataOperation(v.Key, idStr, strDepartment, v.Content, requestData.Year)
|
|
if sunChildErr == true {
|
|
departInfo.Child = sunChild
|
|
}
|
|
statisticsCont.Child = append(statisticsCont.Child, departInfo)
|
|
}
|
|
statisticsAry = append(statisticsAry, statisticsCont)
|
|
}
|
|
|
|
}
|
|
response.Result(0, statisticsAry, "查询完成", c)
|
|
}
|
|
|
|
// 判断集团是否存在
|
|
func judgeOrgStatic(id string, orgAry []OrgStatics) bool {
|
|
for _, v := range orgAry {
|
|
if id == v.Id {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// 判断部门是否存在
|
|
func judegOrgDeparStatic(id, departId string, orgAry []OrgStatics) bool {
|
|
for _, v := range orgAry {
|
|
if id == v.Id {
|
|
for _, cv := range v.Child {
|
|
if departId == cv.Id {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// 统计值
|
|
func StaticDataOperation(key, group, depart, staticFrame, year string) (staticDataAry []ProgrammeStatisticsCallBack, isTrue bool) {
|
|
isTrue = false
|
|
var planInfo []AddDutyNewCont
|
|
jsonErr := json.Unmarshal([]byte(staticFrame), &planInfo)
|
|
if jsonErr != nil {
|
|
return
|
|
}
|
|
yserInt, _ := strconv.ParseInt(year, 10, 64)
|
|
//统计
|
|
// var staticData ProgrammeStatisticsCallBack
|
|
for _, v := range planInfo {
|
|
var staticData ProgrammeStatisticsCallBack
|
|
staticData.Id = v.Id
|
|
staticData.Name = v.Name
|
|
for _, cv := range v.Child {
|
|
if cv.Status == 1 {
|
|
var tarCont EvaluProssCall
|
|
tarCont.Id = cv.Id
|
|
tarCont.Name = cv.Name
|
|
tarCont.Content = cv.Content
|
|
tarCont.ReferenceScore = cv.ReferenceScore
|
|
|
|
taskId, _, departName, cycle, cycleattr, isDuty, isDutyErr := getDepartTarget(key, v.Id, cv.Id, group, depart)
|
|
if isDutyErr == nil {
|
|
tarCont.ExecuteDepart = departName
|
|
tarCont.Cycles = cycle
|
|
tarCont.CycleAttres = cycleattr
|
|
if isDuty == 1 {
|
|
} else {
|
|
switch cycle {
|
|
case 1:
|
|
//按班统计
|
|
allYearDays := 365
|
|
// yserInt, _ := strconv.ParseInt(year, 10, 64)
|
|
if commonus.IsLeapYear(yserInt) == true {
|
|
allYearDays = 366
|
|
}
|
|
|
|
for i := 1; i <= allYearDays; i++ {
|
|
wherStr := fmt.Sprintf("fld_evaluation_id = %v AND `fl_year` = %v AND `fl_duty_group` = %v AND `fl_duty_department` = %v AND `fl_day` = %v", taskId, year, group, depart, i)
|
|
|
|
resultData := commonus.Decimal(quantification.AuxiliaryCalculationSum(wherStr) / 100)
|
|
|
|
ActualScore, _, _, _, _ := quantification.GetQuantitativeConfig(cv.ReferenceScore, resultData, group, depart, v.Id, cv.Id, "0", yserInt, i, 2)
|
|
tarCont.TimeData = append(tarCont.TimeData, ActualScore)
|
|
// tarCont.TimeData = append(tarCont.TimeData, quantification.GetQuantitativeConfig(resultData, group, depart, v.Id, cv.Id, "0", yserInt, 0))
|
|
|
|
// tarCont.TimeData = append(tarCont.TimeData, commonus.Decimal(quantification.AuxiliaryCalculationSum(wherStr)/100))
|
|
|
|
}
|
|
|
|
case 2:
|
|
//按天统计
|
|
allYearDays := 365
|
|
// yserInt, _ := strconv.ParseInt(year, 10, 64)
|
|
if commonus.IsLeapYear(yserInt) == true {
|
|
allYearDays = 366
|
|
}
|
|
|
|
for i := 1; i <= allYearDays; i++ {
|
|
wherStr := fmt.Sprintf("fld_evaluation_id = %v AND `fl_year` = %v AND `fl_duty_group` = %v AND `fl_duty_department` = %v AND `fl_day` = %v", taskId, year, group, depart, i)
|
|
|
|
resultData := commonus.Decimal(quantification.AuxiliaryCalculationSum(wherStr) / 100)
|
|
|
|
ActualScore, _, _, _, _ := quantification.GetQuantitativeConfig(cv.ReferenceScore, resultData, group, depart, v.Id, cv.Id, "0", yserInt, i, 2)
|
|
tarCont.TimeData = append(tarCont.TimeData, ActualScore)
|
|
// tarCont.TimeData = append(tarCont.TimeData, quantification.GetQuantitativeConfig(resultData, group, depart, v.Id, cv.Id, "0", yserInt, 0))
|
|
|
|
// tarCont.TimeData = append(tarCont.TimeData, commonus.Decimal(quantification.AuxiliaryCalculationSum(wherStr)/100))
|
|
}
|
|
case 3:
|
|
case 4:
|
|
monthValue := commonus.TimeStampToDate(time.Now().Unix(), 12)
|
|
if commonus.TimeStampToDate(time.Now().Unix(), 11) != year {
|
|
monthValue = "12"
|
|
}
|
|
monthValueInt, _ := strconv.Atoi(monthValue)
|
|
for i := 1; i <= monthValueInt; i++ {
|
|
wherStr := fmt.Sprintf("fld_evaluation_id = %v AND `fl_year` = %v AND `fl_duty_group` = %v AND `fl_duty_department` = %v AND `fl_month` = %v", taskId, year, group, depart, i)
|
|
|
|
resultData := commonus.Decimal(quantification.AuxiliaryCalculationSum(wherStr) / 100)
|
|
|
|
ActualScore, _, _, _, _ := quantification.GetQuantitativeConfig(cv.ReferenceScore, resultData, group, depart, v.Id, cv.Id, "0", yserInt, i, 2)
|
|
tarCont.TimeData = append(tarCont.TimeData, ActualScore)
|
|
// tarCont.TimeData = append(tarCont.TimeData, quantification.GetQuantitativeConfig(resultData, group, depart, v.Id, cv.Id, "0", yserInt, i))
|
|
|
|
// tarCont.TimeData = append(tarCont.TimeData, commonus.Decimal(quantification.AuxiliaryCalculationSum(wherStr)/100))
|
|
}
|
|
case 5:
|
|
for i := 1; i <= 4; i++ {
|
|
wherStr := fmt.Sprintf("fld_evaluation_id = %v AND `fl_year` = %v AND `fl_duty_group` = %v AND `fl_duty_department` = %v AND `fl_quarter` = %v", taskId, year, group, depart, i)
|
|
|
|
resultData := commonus.Decimal(quantification.AuxiliaryCalculationSum(wherStr) / 100)
|
|
|
|
ActualScore, _, _, _, _ := quantification.GetQuantitativeConfig(cv.ReferenceScore, resultData, group, depart, v.Id, cv.Id, "0", yserInt, i, 2)
|
|
tarCont.TimeData = append(tarCont.TimeData, ActualScore)
|
|
// tarCont.TimeData = append(tarCont.TimeData, quantification.GetQuantitativeConfig(resultData, group, depart, v.Id, cv.Id, "0", yserInt, i))
|
|
|
|
// tarCont.TimeData = append(tarCont.TimeData, commonus.Decimal(quantification.AuxiliaryCalculationSum(wherStr)/100))
|
|
}
|
|
default:
|
|
wherStr := fmt.Sprintf("fld_evaluation_id = %v AND `fl_year` = %v AND `fl_duty_group` = %v AND `fl_duty_department` = %v ", taskId, year, group, depart)
|
|
resultData := commonus.Decimal(quantification.AuxiliaryCalculationSum(wherStr) / 100)
|
|
ActualScore, _, _, _, _ := quantification.GetQuantitativeConfig(cv.ReferenceScore, resultData, group, depart, v.Id, cv.Id, "0", yserInt, 0, 2)
|
|
tarCont.TimeData = append(tarCont.TimeData, ActualScore)
|
|
// tarCont.TimeData = append(tarCont.TimeData, quantification.GetQuantitativeConfig(resultData, group, depart, v.Id, cv.Id, "0", yserInt, 0))
|
|
}
|
|
}
|
|
}
|
|
|
|
// tarCont.ExecuteDepart = cv.ExecuteDepart
|
|
staticData.Child = append(staticData.Child, tarCont)
|
|
}
|
|
}
|
|
staticDataAry = append(staticDataAry, staticData)
|
|
}
|
|
isTrue = true
|
|
return
|
|
}
|
|
|
|
//获取执行部门及指标性质
|
|
/*
|
|
@key 方案版本号
|
|
@dimeId 维度
|
|
@targetId 指标
|
|
@accDepartId 接收考核的部门
|
|
|
|
outPut
|
|
|
|
@qualId //方案ID
|
|
@departId 执行部门ID
|
|
@departName 执行部门名称
|
|
@cycle 1:班;2:天;3:周;4:月;5:季度;6:年
|
|
@cycleattr 辅助计数
|
|
@isDuty 1:定性考核;2:定量考核
|
|
*/
|
|
func getDepartTarget(key, dimeId, targetId, group, accDepartId string) (qualId int64, departId, departName []string, cycle, cycleattr, isDuty int, err error) {
|
|
var qualEvalCont assessmentmodel.QualitativeEvaluation
|
|
err = global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.QualitativeEvaluation{}).Select("qe_id,qe_department_id,qe_type,qe_cycle,qe_cycleattr,qe_operator").Where("qe_qual_eval_id = ? AND qe_dimension = ? AND qe_target = ? AND qe_accept_evaluation = ? AND qe_group = ? AND qe_state = 1", key, dimeId, targetId, accDepartId, group).First(&qualEvalCont).Error
|
|
departId = strings.Split(qualEvalCont.DepartmentId, ",")
|
|
if len(departId) > 0 {
|
|
for _, v := range departId {
|
|
// fmt.Printf("部门Id =====>%v\n", v)
|
|
where := commonus.MapOut()
|
|
where["id"] = v
|
|
orgCont, _ := commonus.GetNewOrgCont(where, "id", "name")
|
|
departName = append(departName, orgCont.Name)
|
|
}
|
|
}
|
|
// if qualEvalCont.Operator != "" {
|
|
// zxrId := strings.Split(qualEvalCont.Operator, ",")
|
|
// var zxbm []string
|
|
// global.GVA_DB_HrDataBase.Model(&hrsystem.Personnel{}).Select("`deparment`").Where("`key` IN ?", zxrId).Find(&zxbm)
|
|
// if len(zxbm) > 0 {
|
|
// var buMenIdAry []string
|
|
// for _, dv := range zxbm {
|
|
// zxmbid := strings.Split(dv, ",")
|
|
// if len(zxmbid) > 0 {
|
|
// for _, zv := range zxmbid {
|
|
// if commonus.IsItTrueString(zv, buMenIdAry) == false {
|
|
// buMenIdAry = append(buMenIdAry, zv)
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// if len(buMenIdAry) > 0 {
|
|
// global.GVA_DB_HrDataBase.Model(&hrsystem.AdministrativeOrganization{}).Select("`name`").Where("`id` IN ?", buMenIdAry).Find(&departName)
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
isDuty = qualEvalCont.Type
|
|
cycle = qualEvalCont.Cycles
|
|
cycleattr = qualEvalCont.CycleAttres
|
|
qualId = qualEvalCont.Id
|
|
return
|
|
}
|
|
|