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
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
|
|
}
|
|
|