KPI绩效考核系统
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.

729 lines
25 KiB

package departmentpc
import (
"encoding/json"
"fmt"
"key_performance_indicators/models/modelshr"
"key_performance_indicators/models/modelskpi"
"key_performance_indicators/overall"
"key_performance_indicators/overall/publicmethod"
"strconv"
"strings"
"time"
"github.com/gin-gonic/gin"
)
//部门级考核方案
/*
*
@ 作者: 秦东
@ 时间: 2022-12-14 13:58:18
@ 功能: 部门考核方案列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) DepartmentProgramme(c *gin.Context) {
var receivedValue DepartPrograList
c.ShouldBindJSON(&receivedValue)
gormDb := overall.CONSTANT_DB_KPI.Where("`state` BETWEEN ? AND ?", 1, 2)
if receivedValue.OrgId != "" {
orgIdInt, _ := strconv.ParseInt(receivedValue.OrgId, 10, 64)
orgAllSunId := publicmethod.GetDepartmentSun(orgIdInt, []int64{})
orgAllSunId = append(orgAllSunId, orgIdInt)
if len(orgAllSunId) > 0 {
gormDb = gormDb.Where("`department` IN ?", orgAllSunId)
}
}
if receivedValue.Year != "" {
gormDb = gormDb.Where("`yeares` = ?", receivedValue.Year)
}
if receivedValue.Version != "" {
gormDb = gormDb.Where("`key` LIKE ?", "%"+receivedValue.Version+"%")
}
var planVersionList []modelskpi.PlanVersio
err := gormDb.Order("`group` ASC").Order("`department` ASC").Order("`state` ASC").Order("`addtime` DESC").Find(&planVersionList).Error
if err != nil {
publicmethod.Result(105, err, c)
return
}
var sendList []SendDepartPrograList
for _, v := range planVersionList {
var sendCont SendDepartPrograList
sendCont.Id = v.Id //
sendCont.Group = v.Group //集团ID"`
sendCont.Department = v.Department //部门ID"`
sendCont.Year = v.Year //年度"`
sendCont.Versio = v.Versio //版本号"`
sendCont.Key = v.Key //编码"`
sendCont.State = v.State //状态(1:启用;2:禁用;3:删除)"`
if v.State == 1 {
sendCont.States = true
} else {
sendCont.States = false
}
sendCont.AddTime = v.AddTime //创建时间"`
sendCont.EiteTime = v.EiteTime //l修改时间"`
// sendCont.Content = v.Content //版本内容"`
json.Unmarshal([]byte(v.Content), &sendCont.VersionCont)
var companyCont modelshr.AdministrativeOrganization
companyCont.GetCont(map[string]interface{}{"`id`": v.Group}, "`name`")
sendCont.GroupName = companyCont.Name
var dempartCont modelshr.AdministrativeOrganization
dempartCont.GetCont(map[string]interface{}{"`id`": v.Department}, "`name`")
sendCont.DeaprtName = dempartCont.Name
sendCont.Time = publicmethod.UnixTimeToDay(v.AddTime, 11)
sendList = append(sendList, sendCont)
}
publicmethod.Result(0, sendList, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2022-12-14 16:38:02
@ 功能: 编辑部门方案状态
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) EditDepartPrograState(c *gin.Context) {
var receivedValue publicmethod.PublicState
err := c.ShouldBindJSON(&receivedValue)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if receivedValue.Id == "" {
publicmethod.Result(101, receivedValue, c)
return
}
if receivedValue.State == 0 {
receivedValue.State = 2
}
if receivedValue.IsTrue == 0 {
receivedValue.IsTrue = 2
}
//判断该方案是否存在
var planVersionCont modelskpi.PlanVersio
err = planVersionCont.GetCont(map[string]interface{}{"`key`": receivedValue.Id})
if err != nil {
publicmethod.Result(107, receivedValue, c)
return
}
//判断是否可执行操作
if editDepartStateIsTrue(planVersionCont, receivedValue.State) {
msg := "要操作的方案还有未走完的审批流程!请不要进行此操作!"
if receivedValue.State == 1 {
msg = "当前激活的方案中还有未走完的审批流程!请不要进行此操作!"
}
publicmethod.Result(1, receivedValue, c, msg)
return
}
//根据操作不同执行相应函数
editState := publicmethod.MapOut[string]()
editState["`state`"] = 2
editState["`eitetime`"] = time.Now().Unix()
switch receivedValue.State {
case 1:
//执行启用操作
//1、获取已经启用的方案西信息
var planIsRun modelskpi.PlanVersio
err = planIsRun.GetCont(map[string]interface{}{"`group`": planVersionCont.Group, "`department`": planVersionCont.Department, "`state`": 1}, "`id`", "`key`")
if err == nil {
planIsRun.EiteCont(map[string]interface{}{"`id`": planIsRun.Id}, editState)
var qualEval modelskpi.QualitativeEvaluation
qualEval.EiteCont(map[string]interface{}{"`qe_qual_eval_id`": planIsRun.Key}, map[string]interface{}{"`qe_state`": 2, "`qe_eitetime`": time.Now().Unix()})
}
err = planVersionCont.EiteCont(map[string]interface{}{"`id`": planVersionCont.Id}, map[string]interface{}{"`state`": 1, "`eitetime`": time.Now().Unix()})
var qualEvalMain modelskpi.QualitativeEvaluation
qualEvalMain.EiteCont(map[string]interface{}{"`qe_qual_eval_id`": planVersionCont.Key}, map[string]interface{}{"`qe_state`": 1, "`qe_eitetime`": time.Now().Unix()})
case 3:
if receivedValue.IsTrue == 1 {
var qualEval modelskpi.QualitativeEvaluation
qualEval.DelCont(map[string]interface{}{"`qe_qual_eval_id`": planVersionCont.Key})
err = planVersionCont.DelCont(map[string]interface{}{"`id`": planVersionCont.Id})
} else {
var qualEval modelskpi.QualitativeEvaluation
qualEval.EiteCont(map[string]interface{}{"`qe_qual_eval_id`": planVersionCont.Key}, map[string]interface{}{"`qe_state`": 3, "`qe_eitetime`": time.Now().Unix()})
err = planVersionCont.EiteCont(map[string]interface{}{"`id`": planVersionCont.Id}, map[string]interface{}{"`state`": 3, "`eitetime`": time.Now().Unix()})
}
default:
var qualEval modelskpi.QualitativeEvaluation
qualEval.EiteCont(map[string]interface{}{"`qe_qual_eval_id`": planVersionCont.Key}, map[string]interface{}{"`qe_state`": 2, "`qe_eitetime`": time.Now().Unix()})
err = planVersionCont.EiteCont(map[string]interface{}{"`id`": planVersionCont.Id}, editState)
}
if err != nil {
publicmethod.Result(106, err, c)
return
}
publicmethod.Result(0, err, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2022-12-14 16:48:55
@ 功能: 判断是否可执行部门方案状态更改操作
@ 参数
#planVersionCont 要操作的方案主体
#state 状态1:启用;2:禁用;3:删除
@ 返回值
#
@ 方法原型
#
*/
func editDepartStateIsTrue(planVersionCont modelskpi.PlanVersio, state int) (isTrue bool) {
isTrue = false
//判断是否启用
if state == 1 {
//1、判断同部门是否有已经启用的方案
var planRuning modelskpi.PlanVersio
err := planRuning.GetCont(map[string]interface{}{"`group`": planVersionCont.Group, "`department`": planVersionCont.Department, "`state`": 1}, "`id`", "`key`")
if err != nil {
return
}
isTrue = SearchPlanVersion(planRuning.Key)
} else {
//执行非启用状态,判断该方案主体是否有政治执行的操作
isTrue = SearchPlanVersion(planVersionCont.Key)
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2022-12-14 16:54:44
@ 功能: 查询方案正在执行的操作
@ 参数
#
@ 返回值
#isTrue true:存在正在执行的操作;false:不存在正在执行的操作
@ 方法原型
#
*/
func SearchPlanVersion(key string) (isTrue bool) {
isTrue = false
//获取本方案中的所有内容
var planContList []modelskpi.QualitativeEvaluation
err := overall.CONSTANT_DB_KPI.Model(&modelskpi.QualitativeEvaluation{}).Select("qe_id,qe_type").Where("`qe_state` = 1 AND `qe_qual_eval_id` = ?", key).Find(&planContList).Error
if err != nil {
return
}
//分别获取定性和定量的项目Id列表
var dingXing []int64
var dingLiang []int64
for _, v := range planContList {
if v.Type == 1 {
if publicmethod.IsInTrue[int64](v.Id, dingXing) == false {
dingXing = append(dingXing, v.Id)
}
} else {
if publicmethod.IsInTrue[int64](v.Id, dingLiang) == false {
dingLiang = append(dingLiang, v.Id)
}
}
}
var syncListCont judgePlanTask
syncSeting.Add(1)
go syncListCont.SearchDingXingPlan(dingXing)
syncSeting.Add(1)
go syncListCont.SearchDingLiangPlan(dingLiang)
syncSeting.Wait()
readDingXingMap, readDingLiangMap := syncListCont.readPlanTaskData()
if len(readDingXingMap) > 0 || len(readDingLiangMap) > 0 {
isTrue = true
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2022-12-14 17:24:37
@ 功能: 判断方案中是否有正在执行的定性考核项
@ 参数
#id 方案中定性考核项
@ 返回值
#
@ 方法原型
#(j *judgePlanTask) SearchDingXingPlan(id []int64)
*/
func (j *judgePlanTask) SearchDingXingPlan(id []int64) {
j.mutext.Lock()
defer j.mutext.Unlock()
if len(id) > 0 {
//获取该方案在执行中的数据
var dingXingTask []bingFaOut
err := overall.CONSTANT_DB_KPI.Model(&modelskpi.ScoreFlow{}).Select("sf_id,sf_key,sf_evaluation_plan,ep_order_key,ep_state").Joins("left join evaluation_process on ep_order_key = sf_key").Where("`sf_evaluation_plan` IN ? AND ep_state IN (1,2)", id).Find(&dingXingTask).Error
if err == nil {
for _, v := range dingXingTask {
isIn := publicmethod.MapOut[string]()
isIn["id"] = v.Id
isIn["key"] = v.Key
isIn["state"] = v.State
j.dingXingTask = append(j.dingXingTask, isIn)
}
}
}
syncSeting.Done()
}
/*
*
@ 作者: 秦东
@ 时间: 2022-12-15 08:34:42
@ 功能: 判断方案中是否有正在执行的定量考核项
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (j *judgePlanTask) SearchDingLiangPlan(id []int64) {
j.mutext.Lock()
defer j.mutext.Unlock()
if len(id) > 0 {
//获取该方案在执行中的数据
var stateIsTrue []bingFaOutDingLiang
err := overall.CONSTANT_DB_KPI.Model(&modelskpi.FlowLog{}).Select("fl_id,fl_key,fl_evaluation_id,fl_reply,ep_order_key,ep_state").Where("`fl_key` IN ? AND ep_state IN (1,2)", id).Joins("left join evaluation_process on ep_order_key = fl_key").Find(&stateIsTrue).Error
if err == nil {
for _, v := range stateIsTrue {
isIn := publicmethod.MapOut[string]()
isIn["id"] = v.Id
isIn["key"] = v.Key
isIn["state"] = v.State
j.dingLiangTask = append(j.dingLiangTask, isIn)
}
}
}
syncSeting.Done()
}
/*
*
@ 作者: 秦东
@ 时间: 2022-12-15 10:49:36
@ 功能: 添加方案
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) CreateSchemeForDeparment(c *gin.Context) {
var receivedValue AddDutyNewContGroup
err := c.ShouldBindJSON(&receivedValue)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if receivedValue.Group == "" {
publicmethod.Result(101, receivedValue, c)
return
}
if receivedValue.DepartmentId == "" {
publicmethod.Result(101, receivedValue, c)
return
}
if receivedValue.Year == "" {
publicmethod.Result(1, receivedValue, c, "请选择年份")
return
}
if len(receivedValue.Child) < 1 {
publicmethod.Result(1, receivedValue, c, "没有要添加的数据")
return
}
departId, _ := strconv.ParseInt(receivedValue.DepartmentId, 10, 64) //部门ID
yearInt, _ := strconv.ParseInt(receivedValue.Year, 10, 64) //年
//获取编号首字母
groupId, groupErr := strconv.ParseInt(receivedValue.Group, 10, 64) //集团ID
if groupErr != nil {
groupId = 0
}
var groupCont modelshr.AdministrativeOrganization
groupCont.GetCont(map[string]interface{}{"`id`": groupId}, "`id`", "`name`", "`abbreviation`")
nameCont := groupCont.Abbreviation
if nameCont == "" {
nameCont = groupCont.Name
}
companyFirstWord := publicmethod.ChineseFirstWordCapitalize(nameCont) //公司首字母
//判断当前部门是否已经有正启用得方案
judgeState := 1
var judgePlanState modelskpi.PlanVersio
err = judgePlanState.GetCont(map[string]interface{}{"`state`": 1, "`group`": groupId, "`department`": departId}, "`id`")
if err == nil {
judgeState = 2
}
//判断年度是否存在版本
var versioNum string //版本号
var sumVerson float64 //已经存在得方案数量
err = overall.CONSTANT_DB_KPI.Model(&modelskpi.PlanVersio{}).Select("`id`").Where("`group` = ? AND `yeares` = ?", groupId, yearInt).Pluck("COALESCE(COUNT(id), 0) as countid", &sumVerson).Error
if err != nil {
versioNum = "0001"
} else {
if sumVerson == 0 {
versioNum = "0001"
} else {
versioNum = fmt.Sprintf("%04v", sumVerson)
}
}
//统一编辑时间
todyTime := time.Now().Unix()
//方案编号
keyStr := fmt.Sprintf("%v%v%v", companyFirstWord, publicmethod.UnixTimeToDay(todyTime, 20), versioNum)
//合成方案主数据
var savePlanVersionCont modelskpi.PlanVersio
savePlanVersionCont.Group = groupId
savePlanVersionCont.Department = departId
savePlanVersionCont.Year = yearInt
savePlanVersionCont.Versio = versioNum
savePlanVersionCont.Key = keyStr
savePlanVersionCont.State = judgeState
savePlanVersionCont.AddTime = todyTime
savePlanVersionCont.EiteTime = todyTime
//组装方案结构体,转换json数据
if len(receivedValue.Child) > 0 {
var planListCont []AddDutyNewCont
for _, v := range receivedValue.Child {
var planCont AddDutyNewCont
//第一层;纬度操作
planCont.Id = v.Id
planCont.Name = v.Name
planCont.ZhiFraction = v.ZhiFraction
for _, cv := range v.Child {
//第二层;指标操作
var targetCont EvaluPross
targetCont.Id = cv.Id //指标ID
targetCont.Name = cv.Name //指标名称
targetCont.Content = cv.Content //指标说明
targetCont.Unit = cv.Unit //单位"`
targetCont.ReferenceScore = cv.ReferenceScore //标准分值"`
targetCont.State = cv.State // `json:"state"`
targetCont.Status = cv.Status // 1:使用;2:禁用;3:观察
targetCont.Score = cv.Score // `json:"state"`
targetCont.QualEvalId = cv.QualEvalId // `json:"state"`
//获取指标统计属性
var getTarCont modelskpi.EvaluationTarget
err = getTarCont.GetCont(map[string]interface{}{"et_id": cv.Id}, "et_cycle,et_cycleattr")
if err == nil {
targetCont.Cycles = getTarCont.Cycles //1:班;2:天;3:周;4:月;5:季度;6:年"`
targetCont.CycleAttres = getTarCont.CycleAttres //辅助计数"`
}
planCont.Child = append(planCont.Child, targetCont)
}
planListCont = append(planListCont, planCont)
}
planJsonCont, planJsonErr := json.Marshal(planListCont)
if planJsonErr == nil {
savePlanVersionCont.Content = string(planJsonCont)
}
}
//往考核方案中写入考核数据
var qualEvalList []modelskpi.QualitativeEvaluation
//解析方案结构体
for _, v := range receivedValue.Child {
//维度操作
AddWeight(receivedValue.Group, v.Id, receivedValue.DepartmentId, "", int64(v.ZhiFraction), 1) //添加维度权重
for _, cv := range v.Child {
//指标操作
if cv.Status != 2 { //操作非禁用得指标
//获取指标定义
var targetInfo modelskpi.EvaluationTarget
err := targetInfo.GetCont(map[string]interface{}{"`et_id`": cv.Id})
if err == nil { //判断指标是否存在
//判断指标是定性还是定量
if targetInfo.Type == 2 {
//定量指标
AddWeight(receivedValue.Group, v.Id, receivedValue.DepartmentId, cv.Id, cv.ReferenceScore, 2)
var qualEvalContXing modelskpi.QualitativeEvaluation
qualEvalContXing.Dimension, _ = strconv.ParseInt(v.Id, 10, 64)
qualEvalContXing.Target, _ = strconv.ParseInt(cv.Id, 10, 64) //指标
qualEvalContXing.Type = targetInfo.Type //类型
qualEvalContXing.Unit = targetInfo.Uniteing //单位
qualEvalContXing.ReferenceScore = cv.ReferenceScore //分值
qualEvalContXing.State = judgeState //状态
qualEvalContXing.Addtime = time.Now().Unix()
qualEvalContXing.Eitetime = time.Now().Unix()
qualEvalContXing.Group = groupId //集团
qualEvalContXing.Cycles = targetInfo.Cycles //单位
qualEvalContXing.CycleAttres = targetInfo.CycleAttres //辅助计数
qualEvalContXing.AcceptEvaluation = departId //接受考核部门
qualEvalContXing.Content = cv.Content //描述
qualEvalContXing.Operator = targetInfo.Report //执行考核人
qualEvalContXing.QualEvalId = keyStr
qualEvalContXing.Observer = cv.Status
var departAry []string
userKeyAry := strings.Split(targetInfo.Report, ",")
if len(userKeyAry) > 0 {
for _, u_v := range userKeyAry {
var userCont modelshr.PersonArchives
err = userCont.GetCont(map[string]interface{}{"`key`": u_v}, "`maindeparment`")
mainDepartStr := strconv.FormatInt(userCont.MainDeparment, 10)
if publicmethod.IsInTrue[string](mainDepartStr, departAry) == false {
departAry = append(departAry, mainDepartStr)
}
}
}
qualEvalContXing.DepartmentId = strings.Join(departAry, ",") //处理关联部门
qualEvalList = append(qualEvalList, qualEvalContXing)
} else {
//定性指标
AddWeight(receivedValue.Group, v.Id, receivedValue.DepartmentId, cv.Id, cv.ReferenceScore, 1)
//获取定性指标得关联关系
var assessList []modelskpi.Assesstarget
err = overall.CONSTANT_DB_KPI.Model(&modelskpi.Assesstarget{}).Where("`state` = 1 AND `group` = ? AND `dimension` = ? AND `targetid` = ? AND FIND_IN_SET(?,`departmentmap`)", groupId, v.Id, cv.Id, departId).Find(&assessList).Error
if err == nil {
var sunTarget []int64
for _, sv := range assessList { //遍历与此部门相关得子栏目
if publicmethod.IsInTrue[int64](sv.Id, sunTarget) == false { //次子栏目未操作过
//拆解指标详情
var detailedList []DutyAssEssTarget
json.Unmarshal([]byte(sv.Content), &detailedList)
sunTarget = append(sunTarget, sv.Id)
//获取指标细则列表
var targetDetailsList []modelskpi.DetailedTarget
err = overall.CONSTANT_DB_KPI.Model(&modelskpi.DetailedTarget{}).Where("`dt_state` = 1 AND `dt_parentid` = ? AND `dt_parentid_sun` = ? AND (FIND_IN_SET(?,`dt_paretment`) OR `dt_paretment` = '')", cv.Id, sv.SunTargetId, departId).Find(&targetDetailsList).Error
fmt.Printf("获取指标细则列表-------->%v-------->%v-------->%v-------->%v\n", cv.Id, sv.Id, departId, len(targetDetailsList))
if err == nil {
for _, tv := range targetDetailsList { //指标细则
//写入新的定性考核细则
var saveData modelskpi.QualitativeEvaluation
saveData.Dimension = sv.Dimension //纬度
saveData.Target = targetInfo.Id //指标
saveData.Type = 1 //类型
saveData.TargetSun = sv.SunTargetId //子栏目
saveData.DetailedTarget = tv.Id //指标细则
if tv.Company != "" {
saveData.Unit = tv.Company
} else {
saveData.Unit = targetInfo.Uniteing
}
saveData.ReferenceScore = 0 //分值
saveData.MinScore = tv.MinScore //最低分
saveData.MaxScore = tv.MaxScore //最高分
saveData.CensorType = tv.CensorType //检查方式
saveData.CensorCont = tv.CensorCont //检查依据
saveData.CensorRate = tv.CensorRate //检查频次
saveData.State = judgeState //状态
saveData.Addtime = time.Now().Unix()
saveData.Eitetime = time.Now().Unix()
saveData.Group = groupId //集团
if tv.Cycles > 0 {
saveData.Cycles = tv.Cycles //1:班;2:天;3:周;4:月;5:季度;6:年
saveData.CycleAttres = tv.CycleAttres //辅助计数
} else {
saveData.Cycles = targetInfo.Cycles //1:班;2:天;3:周;4:月;5:季度;6:年
saveData.CycleAttres = targetInfo.CycleAttres //辅助计数
}
saveData.AcceptEvaluation = departId //接受考核部门
saveData.Content = tv.Content //描述
reportStr := tv.Reportary
if tv.Reportary != "" {
saveData.Operator = tv.Reportary //执行考核人
} else {
if len(detailedList) > 0 {
for _, dev := range detailedList {
if dev.Id == tv.Id {
saveData.Operator = strings.Join(dev.Operator, ",") //执行考核人 //执行考核人
reportStr = strings.Join(dev.Operator, ",")
saveData.DepartmentId = strings.Join(dev.Department, ",")
}
}
}
}
var departAry []string
userKeyAry := strings.Split(reportStr, ",")
if len(userKeyAry) > 0 {
for _, u_v := range userKeyAry {
var userCont modelshr.PersonArchives
err = userCont.GetCont(map[string]interface{}{"`key`": u_v}, "`maindeparment`")
mainDepartStr := strconv.FormatInt(userCont.MainDeparment, 10)
if publicmethod.IsInTrue[string](mainDepartStr, departAry) == false {
departAry = append(departAry, mainDepartStr)
}
}
}
saveData.DepartmentId = strings.Join(departAry, ",") //处理关联部门
saveData.QualEvalId = keyStr
saveData.Observer = cv.Status
qualEvalList = append(qualEvalList, saveData)
}
}
}
}
}
}
}
}
}
}
//判断是否有要写入得内容
if len(qualEvalList) > 0 {
affairDb := overall.CONSTANT_DB_KPI.Begin()
addSysAdminContErr := affairDb.Create(&savePlanVersionCont).Error
addSysAdminAttrContErr := affairDb.Create(&qualEvalList).Error
if addSysAdminContErr == nil && addSysAdminAttrContErr == nil {
affairDbErr := affairDb.Commit().Error
if affairDbErr == nil {
publicmethod.Result(0, affairDbErr, c, "数据写入成功!")
return
} else {
publicmethod.Result(108, affairDbErr, c, "数据写入失败!")
return
}
} else {
affairDbErr := affairDb.Rollback().Error
publicmethod.Result(109, affairDbErr, c, "数据写入失败!")
return
}
}
publicmethod.Result(1, qualEvalList, c, "数据写入失败!")
}
/*
*
@ 作者: 秦东
@ 时间: 2022-12-15 13:42:54
@ 功能: 写入权重操作
@ 参数
#group 集团
#dimension 维度
#derpatment 部门
#target 指标
#class 1:定性考核;2:定量考核
@ 返回值
#isTrue
@ 方法原型
#
*/
func AddWeight(group, dimension, derpatment, target string, score, class int64) (isTrue bool) {
isTrue = false
//判断指标是否为空
if target != "" {
var departSionWeightCont modelskpi.DepartmentDimensionWeight
err := departSionWeightCont.GetCont(map[string]interface{}{"`ddw_hierarchy`": 2, "`ddw_group`": group, "`ddw_derpatment`": derpatment, "`ddw_dimension`": dimension, "`ddw_target`": target, "`ddw_type`": class}, "`ddw_id`")
if err == nil {
//存在,进行更新
editCont := publicmethod.MapOut[string]()
editCont["ddw_time"] = time.Now().Unix()
editCont["ddw_weight"] = score
err = departSionWeightCont.EiteCont(map[string]interface{}{"`ddw_id`": departSionWeightCont.Id}, editCont)
if err == nil {
isTrue = true
}
} else {
//不存在,进行新增
var addCont modelskpi.DepartmentDimensionWeight
groupId, _ := strconv.ParseInt(group, 10, 64)
addCont.Group = groupId
derpatmentId, _ := strconv.ParseInt(derpatment, 10, 64)
addCont.DepartmentId = derpatmentId
dimensionId, _ := strconv.ParseInt(dimension, 10, 64)
addCont.Dimension = dimensionId
targetId, _ := strconv.ParseInt(target, 10, 64)
addCont.Target = targetId
addCont.Weight = score
addCont.Addtime = time.Now().Unix()
addCont.Type = class
addCont.Hierarchy = 2
err = overall.CONSTANT_DB_KPI.Create(&addCont).Error
if err == nil {
isTrue = true
}
}
} else {
//写入纬度操作
var departSionWeightCont modelskpi.DepartmentDimensionWeight
err := departSionWeightCont.GetCont(map[string]interface{}{"`ddw_hierarchy`": 1, "`ddw_group`": group, "`ddw_derpatment`": derpatment, "`ddw_dimension`": dimension}, "`ddw_id`")
if err == nil {
//存在,进行更新
editCont := publicmethod.MapOut[string]()
editCont["ddw_time"] = time.Now().Unix()
editCont["ddw_weight"] = score
err = departSionWeightCont.EiteCont(map[string]interface{}{"`ddw_id`": departSionWeightCont.Id}, editCont)
if err == nil {
isTrue = true
}
} else {
//不存在,进行新增
var addCont modelskpi.DepartmentDimensionWeight
groupId, _ := strconv.ParseInt(group, 10, 64)
addCont.Group = groupId
derpatmentId, _ := strconv.ParseInt(derpatment, 10, 64)
addCont.DepartmentId = derpatmentId
dimensionId, _ := strconv.ParseInt(dimension, 10, 64)
addCont.Dimension = dimensionId
addCont.Target = 0
addCont.Weight = score
addCont.Addtime = time.Now().Unix()
addCont.Type = 1
addCont.Hierarchy = 1
err = overall.CONSTANT_DB_KPI.Create(&addCont).Error
if err == nil {
isTrue = true
}
}
}
return
}