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" "sort" "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, _, _, _ := publicmethod.GetOrgStructurees(departId) // 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 { // dimensionIdInt, _ := strconv.ParseInt(v.Id, 10, 64) //维度操作 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) //获取关联的细则Id tarIdIntSet, _ := strconv.ParseInt(cv.Id, 10, 64) targetIdAry, err := GetTargetDetailsInfoList(tarIdIntSet, 0, 0, departId, 0, 3, 1) var targetDetailsList []modelskpi.DetailedTarget err = overall.CONSTANT_DB_KPI.Model(&modelskpi.DetailedTarget{}).Where("`dt_state` = 1 AND `dt_id` IN ? ", targetIdAry).Find(&targetDetailsList).Error var detailedList []DutyAssEssTarget //写入指标细则 if err == nil { for _, tv := range targetDetailsList { //指标细则 //写入新的定性考核细则 var saveData modelskpi.QualitativeEvaluation saveData.Dimension = targetInfo.Dimension //纬度 saveData.Target = targetInfo.Id //指标 saveData.Type = 1 //类型 saveData.TargetSun = tv.ParentIdSun //子栏目 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) } } //获取定性指标得关联关系 // 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 } /* * @ 作者: 秦东 @ 时间: 2023-04-14 16:01:02 @ 功能: 查看部门考核方案详情 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) LookSchemeForDeparment(c *gin.Context) { var receivedValue publicmethod.PublicId err := c.ShouldBindJSON(&receivedValue) if err != nil { publicmethod.Result(100, err, c) return } if receivedValue.Id == "" { publicmethod.Result(1, err, c, "未知方案编号!不可操作") return } var schemeCont modelskpi.PlanVersio err = schemeCont.GetCont(map[string]interface{}{"`key`": receivedValue.Id}) if err != nil { publicmethod.Result(1, err, c, "未知方案编号!不可操作") return } var planVersioInfo []AddDutyNewCont jsonErr := json.Unmarshal([]byte(schemeCont.Content), &planVersioInfo) if jsonErr != nil { publicmethod.Result(1, err, c, "未知方案!不可操作") return } var sendContList []SchemeCont for _, dv := range planVersioInfo { for _, v := range dv.Child { if v.Status == 1 || v.Status == 3 { var sendCont SchemeCont sendCont.DimensionId = dv.Id //维度Id sendCont.DimensionName = dv.Name //维度名称 sendCont.DimensionStandard = float64(dv.ZhiFraction) //维度标准 sendCont.TargetId = v.Id //指标Id sendCont.TargetName = v.Name //指标名称 sendCont.TargetStandard = float64(v.ReferenceScore) //指标标准 sendCont.Content = v.Content //指标说明 sendCont.Unit = v.Unit //单位 var targetCont modelskpi.EvaluationTarget targetCont.GetCont(map[string]interface{}{"et_id": v.Id}, "et_type") sendCont.Attribute = targetCont.Type //指标性质 1:定量;2:定性 sendCont.State = v.Status //状态 1:使用;2:禁用;3:观察 sendCont.Cycle = v.Cycles //1:班;2:天;3:周;4:月;5:季度;6:年;7:半年 sendCont.Frequency = v.CycleAttres //频率 sendCont.PlantVersion = schemeCont.Key sendCont.OrgId = strconv.FormatInt(schemeCont.Department, 10) sendContList = append(sendContList, sendCont) } } } publicmethod.Result(0, sendContList, c) } /* * @ 作者: 秦东 @ 时间: 2023-04-17 10:46:18 @ 功能: 获取部门考核指标关联得细则 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) LookSchemeBylaws(c *gin.Context) { var receivedValue LookTargetToBylaws c.ShouldBindJSON(&receivedValue) if receivedValue.Id == "" { publicmethod.Result(1, receivedValue, c, "未知指标!不可操作") return } if receivedValue.OrgId == "" { publicmethod.Result(1, receivedValue, c, "未知行政组织!不可操作") return } if receivedValue.Type == 0 { receivedValue.Type = 1 } if receivedValue.Level == 2 { if receivedValue.PosId == "" { publicmethod.Result(1, receivedValue, c, "未知岗位!不可操作") return } } else { receivedValue.Level = 1 } var detailedList []modelskpi.TargetDetailedRelationDepartment gormDb := overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetDetailedRelationDepartment{}).Where("dt_state = 1 AND dt_parentid = ? AND tddepartment = ? AND tdtype = ? AND `level` = ?", receivedValue.Id, receivedValue.OrgId, receivedValue.Type, receivedValue.Level) if receivedValue.Level == 2 && receivedValue.PosId != "" { gormDb = gormDb.Where("postid = ?", receivedValue.PosId) } err := gormDb.Find(&detailedList).Error if err != nil || len(detailedList) < 1 { publicmethod.Result(105, err, c) return } var sendList []SendTargetToBylaws for _, v := range detailedList { var sendCont SendTargetToBylaws sendCont.TableId = v.ParentIdSun // var tableCont modelskpi.QualitativeTarget tableCont.GetCont(map[string]interface{}{"q_id": v.ParentIdSun}, "q_title") sendCont.TableName = tableCont.Title // sendCont.TargetId = strconv.FormatInt(v.Id, 10) // sendCont.TargetName = v.Title // maxVal := publicmethod.DecimalEs(float64(v.MaxScore)/100, 2) //最大分 minVal := publicmethod.DecimalEs(float64(v.MinScore)/100, 2) //最小分 if minVal != 0 && maxVal != 0 { sendCont.Criterion = fmt.Sprintf("%v-%v", minVal, maxVal) } else if minVal != 0 && maxVal == 0 { sendCont.Criterion = fmt.Sprintf("%v", minVal) } else if minVal == 0 && maxVal != 0 { sendCont.Criterion = fmt.Sprintf("%v", maxVal) } else { sendCont.Criterion = "" } sendCont.MaxScore = maxVal sendCont.MinScore = minVal //最小分 sendCont.Unit = v.Company //单位 sendCont.Content = v.Content //指标说明 sendList = append(sendList, sendCont) } //根据维度序号排序 sort.Slice(sendList, func(i, j int) bool { return sendList[i].TableId < sendList[j].TableId }) publicmethod.Result(0, sendList, c) } /* * @ 作者: 秦东 @ 时间: 2023-04-17 11:09:23 @ 功能: 查看执行人 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) GetRunManScheme(c *gin.Context) { var receivedValue LookTargetToBylaws c.ShouldBindJSON(&receivedValue) if receivedValue.Id == "" { publicmethod.Result(1, receivedValue, c, "未知指标!不可操作") return } if receivedValue.OrgId == "" { publicmethod.Result(1, receivedValue, c, "未知行政组织!不可操作") return } if receivedValue.Type == 0 { receivedValue.Type = 1 } if receivedValue.Level == 2 { if receivedValue.PosId == "" { publicmethod.Result(1, receivedValue, c, "未知岗位!不可操作") return } } else { receivedValue.Level = 1 } var userKey []int64 gormDb := overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetReport{}).Distinct("man_key").Where("`state` = 1 AND `target_id` = ? AND `department_id` = ? AND `type` = ?", receivedValue.Id, receivedValue.OrgId, receivedValue.Type) if receivedValue.Level == 2 && receivedValue.PosId != "" { gormDb = gormDb.Where("`post_id` = ?", receivedValue.PosId) } err := gormDb.Find(&userKey).Error if err != nil || len(userKey) < 1 { publicmethod.Result(105, err, c) return } var userListCont []modelshr.PersonArchives err = overall.CONSTANT_DB_HR.Model(&modelshr.PersonArchives{}).Select("`key`,`name`,`number`,`company`,`maindeparment`,`icon`,`icon_photo`").Where("`emp_type` BETWEEN 1 AND 10 AND `key` IN ?", userKey).Find(&userListCont).Error if err != nil || len(userListCont) < 1 { publicmethod.Result(105, err, c) return } var userListInfo []RunManCont for _, v := range userListCont { var userInfo RunManCont userInfo.Id = strconv.FormatInt(v.Key, 10) userInfo.Name = v.Name userInfo.Number = v.Number var comCont modelshr.AdministrativeOrganization comCont.GetCont(map[string]interface{}{"`id`": v.Company}, "`name`") userInfo.Company = comCont.Name var demperCont modelshr.AdministrativeOrganization demperCont.GetCont(map[string]interface{}{"`id`": v.MainDeparment}, "`name`") userInfo.Department = demperCont.Name userInfo.Icon = v.Icon userInfo.IconBase64 = v.IconPhoto userListInfo = append(userListInfo, userInfo) } publicmethod.Result(0, userListInfo, c) } /* * @ 作者: 秦东 @ 时间: 2023-04-17 16:03:16 @ 功能: 编辑方案指标内容 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) EditSchemeTargetCont(c *gin.Context) { var receivedValue EditSchemeContTarget err := c.ShouldBindJSON(&receivedValue) if err != nil { publicmethod.Result(100, err, c) return } if receivedValue.PlanVersionKey == "" { publicmethod.Result(1, err, c, "请输入版本号!") return } if receivedValue.TargetId == "" { publicmethod.Result(1, err, c, "请输入指标号!") return } if receivedValue.OrgId == "" { publicmethod.Result(1, err, c, "请输入行政组织!") return } eiteData := publicmethod.MapOut[string]() eiteData["qe_eitetime"] = time.Now().Unix() eiteData["qe_content"] = receivedValue.Content if receivedValue.State > 0 { // eiteData["qe_state"] = requestData.State eiteData["observer"] = receivedValue.State } else { eiteData["qe_state"] = 2 eiteData["observer"] = 2 } if len(receivedValue.Operator) > 0 { eiteData["qe_operator"] = strings.Join(receivedValue.Operator, ",") } err = overall.CONSTANT_DB_KPI.Model(&modelskpi.QualitativeEvaluation{}).Where("`qe_state` = 1 AND `qe_qual_eval_id` = ? AND `qe_accept_evaluation` = ? AND `qe_target` = ?", receivedValue.PlanVersionKey, receivedValue.OrgId, receivedValue.TargetId).Updates(eiteData).Error if err != nil { publicmethod.Result(1, err, c, "数据处理失败!") return } else { if receivedValue.State != 0 { eitePlanVersion(receivedValue.PlanVersionKey, receivedValue.TargetId, receivedValue.State, receivedValue.Content) } if len(receivedValue.Operator) > 0 { eiteOperatorPlanVersion(receivedValue.OrgId, receivedValue.TargetId, receivedValue.Operator) } publicmethod.Result(0, err, c) } } // 处理关联人 func eiteOperatorPlanVersion(orgId, targetId string, operator []string) { overTime := time.Now().Unix() delWher := publicmethod.MapOut[string]() delWher["target_id"] = targetId delWher["department_id"] = orgId delWher["type"] = 1 var targetReportCont modelskpi.TargetReport err := targetReportCont.DelCont(delWher) if err == nil { } var tarReportContList []modelskpi.TargetReport var targetDeparcContList []modelskpi.TargetDepartment err = overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetDepartment{}).Where("`level` = 1 AND `target_id` = ? AND `department_id` = ?", targetId, orgId).Find(&targetDeparcContList).Error if err == nil { for _, v := range targetDeparcContList { dimensId := v.Dimension if dimensId == 0 && v.TargetId != 0 { var targetCont modelskpi.EvaluationTarget targetCont.GetCont(map[string]interface{}{"et_id": v.TargetId}, "et_dimension") dimensId = targetCont.Dimension } for _, opev := range operator { var tarReportCont modelskpi.TargetReport tarReportCont.Dimension = dimensId //维度"` tarReportCont.TargetId = v.TargetId //指标ID"` tarReportCont.TargetSunId = v.TargetSunId //子目标"` tarReportCont.TargetBylaws = v.TargetBylaws //指标细则"` tarReportCont.DepartmentId = v.DepartmentId //部门ID"` tarReportCont.PostId = v.PostId //岗位ID"` tarReportCont.Type = v.Level //类型(1:公司级;2:部门级)"` tarReportCont.State = 1 //状态(1:启用;2:禁用;3:删除)"` opevInt, _ := strconv.ParseInt(opev, 10, 64) tarReportCont.ReportPerson = opevInt //上报人"` if opev != "" { var userCont modelshr.PersonArchives userCont.GetCont(map[string]interface{}{"`key`": opev}, "maindeparment") tarReportCont.ManDepartment = userCont.MainDeparment //提报人所在部门"` } tarReportCont.Time = overTime //写入时间"` tarReportCont.Class = v.Class //1:定性考核;2:定量考核"` tarReportCont.Level = v.Type //类型(1:指标;2:子目标;3:细则)"` tarReportContList = append(tarReportContList, tarReportCont) } } } if len(tarReportContList) > 0 { overall.CONSTANT_DB_KPI.Create(&tarReportContList) } } /* * @ 作者: 秦东 @ 时间: 2023-04-17 16:42:39 @ 功能: 处理方案主体 @ 参数 #key 方案编号 #tarId 指标 #state 状态 #contStr 指标说明 @ 返回值 # @ 方法原型 # */ func eitePlanVersion(key string, tarId string, state int, contStr string) { var planVersioCont modelskpi.PlanVersio err := planVersioCont.GetCont(map[string]interface{}{"`key`": key}) var planContSave []AddDutyNewCont // fmt.Printf("Plan--------1----------->%v\n", planErr) if err == nil { if planVersioCont.Content != "" { // fmt.Printf("Plan--------2----------->%v\n", planVersioCont) var planCont []AddDutyNewCont jsonErrPlan := json.Unmarshal([]byte(planVersioCont.Content), &planCont) // fmt.Printf("Plan--------3----------->%v\n", jsonErrPlan) if jsonErrPlan == nil { for _, v := range planCont { var saveCont AddDutyNewCont saveCont.Id = v.Id saveCont.Name = v.Name saveCont.ZhiFraction = v.ZhiFraction for _, cv := range v.Child { var chidCont EvaluPross if cv.Id == tarId { chidCont.Id = cv.Id chidCont.Name = cv.Name // `json:"name"` chidCont.Content = contStr // `json:"content"` //指标说明 chidCont.Unit = cv.Unit // `json:"unit"` //单位"` chidCont.ReferenceScore = cv.ReferenceScore // `json:"referencescore"` //标准分值"` chidCont.Cycles = cv.Cycles // `json:"cycle"` //1:班;2:天;3:周;4:月;5:季度;6:年"` chidCont.CycleAttres = cv.CycleAttres // `json:"cycleattr"` //辅助计数"` chidCont.State = state // `json:"state"` chidCont.Score = cv.Score // `json:"score"` //分数 chidCont.QualEvalId = cv.QualEvalId // `json:"qeid"` chidCont.Status = state // `json:"status"` } else { chidCont.Id = cv.Id chidCont.Name = cv.Name // `json:"name"` chidCont.Content = cv.Content // `json:"content"` //指标说明 chidCont.Unit = cv.Unit // `json:"unit"` //单位"` chidCont.ReferenceScore = cv.ReferenceScore // `json:"referencescore"` //标准分值"` chidCont.Cycles = cv.Cycles // `json:"cycle"` //1:班;2:天;3:周;4:月;5:季度;6:年"` chidCont.CycleAttres = cv.CycleAttres // `json:"cycleattr"` //辅助计数"` chidCont.State = cv.State // `json:"state"` chidCont.Score = cv.Score // `json:"score"` //分数 chidCont.QualEvalId = cv.QualEvalId // `json:"qeid"` chidCont.Status = cv.Status // `json:"status"` } saveCont.Child = append(saveCont.Child, chidCont) } planContSave = append(planContSave, saveCont) } } } } // fmt.Printf("Plan--------4----------->%v\n", len(planContSave)) if len(planContSave) > 0 { planContInfo, planJsonErr := json.Marshal(planContSave) if planJsonErr == nil { eitaData := publicmethod.MapOut[string]() eitaData["content"] = string(planContInfo) eitaData["eitetime"] = time.Now().Unix() overall.CONSTANT_DB_KPI.Model(&modelskpi.PlanVersio{}).Where("`key` = ?", key).Updates(eitaData) } } } /* * @ 作者: 秦东 @ 时间: 2023-04-19 09:18:39 @ 功能: 删除考核方案指标 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) DelSchemeTargetCont(c *gin.Context) { var receivedValue DelSchemeContTarget err := c.ShouldBindJSON(&receivedValue) if err != nil { publicmethod.Result(100, err, c) return } if receivedValue.PlanVersionKey == "" { publicmethod.Result(1, err, c, "请输入版本号!") return } if receivedValue.TargetId == "" { publicmethod.Result(1, err, c, "请输入指标号!") return } if receivedValue.OrgId == "" { publicmethod.Result(1, err, c, "请输入行政组织!") return } eiteData := publicmethod.MapOut[string]() eiteData["qe_eitetime"] = time.Now().Unix() eiteData["qe_state"] = 3 err = overall.CONSTANT_DB_KPI.Model(&modelskpi.QualitativeEvaluation{}).Where("`qe_state` = 1 AND `qe_qual_eval_id` = ? AND `qe_accept_evaluation` = ? AND `qe_target` = ?", receivedValue.PlanVersionKey, receivedValue.OrgId, receivedValue.TargetId).Updates(eiteData).Error if err != nil { publicmethod.Result(1, err, c, "数据处理失败!") return } else { delPlanVersion(receivedValue.PlanVersionKey, receivedValue.TargetId) delOperatorPlanVersion(receivedValue.OrgId, receivedValue.TargetId) } } /** @ 作者: 秦东 @ 时间: 2023-04-19 09:27:02 @ 功能: 软删除关联人 @ 参数 # @ 返回值 # @ 方法原型 # */ // 处理关联人 func delOperatorPlanVersion(orgId, targetId string) { delWher := publicmethod.MapOut[string]() delWher["target_id"] = targetId delWher["department_id"] = orgId delWher["type"] = 1 var targetReportCont modelskpi.TargetReport targetReportCont.DelCont(delWher) } /* * @ 作者: 秦东 @ 时间: 2023-04-19 09:24:21 @ 功能: 删除方案指标 @ 参数 #key 方案编号 #tarId 指标 @ 返回值 # @ 方法原型 # */ func delPlanVersion(key string, tarId string) { var planVersioCont modelskpi.PlanVersio err := planVersioCont.GetCont(map[string]interface{}{"`key`": key}) var planContSave []AddDutyNewCont // fmt.Printf("Plan--------1----------->%v\n", planErr) if err == nil { if planVersioCont.Content != "" { // fmt.Printf("Plan--------2----------->%v\n", planVersioCont) var planCont []AddDutyNewCont jsonErrPlan := json.Unmarshal([]byte(planVersioCont.Content), &planCont) // fmt.Printf("Plan--------3----------->%v\n", jsonErrPlan) if jsonErrPlan == nil { for _, v := range planCont { var saveCont AddDutyNewCont saveCont.Id = v.Id saveCont.Name = v.Name saveCont.ZhiFraction = v.ZhiFraction for _, cv := range v.Child { var chidCont EvaluPross if cv.Id != tarId { chidCont.Id = cv.Id chidCont.Name = cv.Name // `json:"name"` chidCont.Content = cv.Content // `json:"content"` //指标说明 chidCont.Unit = cv.Unit // `json:"unit"` //单位"` chidCont.ReferenceScore = cv.ReferenceScore // `json:"referencescore"` //标准分值"` chidCont.Cycles = cv.Cycles // `json:"cycle"` //1:班;2:天;3:周;4:月;5:季度;6:年"` chidCont.CycleAttres = cv.CycleAttres // `json:"cycleattr"` //辅助计数"` chidCont.State = cv.State // `json:"state"` chidCont.Score = cv.Score // `json:"score"` //分数 chidCont.QualEvalId = cv.QualEvalId // `json:"qeid"` chidCont.Status = cv.Status // `json:"status"` } saveCont.Child = append(saveCont.Child, chidCont) } planContSave = append(planContSave, saveCont) } } } } // fmt.Printf("Plan--------4----------->%v\n", len(planContSave)) if len(planContSave) > 0 { planContInfo, planJsonErr := json.Marshal(planContSave) if planJsonErr == nil { eitaData := publicmethod.MapOut[string]() eitaData["content"] = string(planContInfo) eitaData["eitetime"] = time.Now().Unix() overall.CONSTANT_DB_KPI.Model(&modelskpi.PlanVersio{}).Where("`key` = ?", key).Updates(eitaData) } } } /* * @ 作者: 秦东 @ 时间: 2023-04-19 10:15:39 @ 功能: 获取复制方案详情 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) GetCopySchemeCont(c *gin.Context) { var receivedValue publicmethod.PublicId err := c.ShouldBindJSON(&receivedValue) if err != nil { publicmethod.Result(100, err, c) return } if receivedValue.Id == "" { publicmethod.Result(1, err, c, "未知版本号!") return } var oldSchemeCont modelskpi.PlanVersio err = oldSchemeCont.GetCont(map[string]interface{}{"`key`": receivedValue.Id}) if err != nil { publicmethod.Result(105, err, c) return } var copyCont CopySchemeCont copyCont.OrgId = strconv.FormatInt(oldSchemeCont.Department, 10) copyCont.Year = fmt.Sprintf("%v", oldSchemeCont.Year) if oldSchemeCont.Content != "" { var planCont []AddDutyNewCont jsonErrPlan := json.Unmarshal([]byte(oldSchemeCont.Content), &planCont) if jsonErrPlan == nil { var copyInfoAry []CopyDutyNewCont for _, v := range planCont { var copyInfoXonr CopyDutyNewCont copyInfoXonr.Id = v.Id //维度ID copyInfoXonr.Name = v.Name copyInfoXonr.ZhiFraction = v.ZhiFraction var displayTargetId []string for _, cv := range v.Child { var copyEvalCont CopyEvaluPross copyEvalCont.Id = cv.Id //`json:"id"` //指标ID if publicmethod.IsInTrue[string](cv.Id, displayTargetId) == false { displayTargetId = append(displayTargetId, cv.Id) } var tarGetContent modelskpi.EvaluationTarget tarGetContentErr := tarGetContent.GetCont(map[string]interface{}{"et_id": cv.Id}, "et_title") if tarGetContentErr == nil { copyEvalCont.Name = tarGetContent.Title } else { copyEvalCont.Name = cv.Name //`json:"name"` } copyEvalCont.Content = cv.Content //`json:"content"` //指标说明 copyEvalCont.Unit = cv.Unit //`json:"unit"` //单位"` copyEvalCont.ReferenceScore = cv.ReferenceScore //`json:"referencescore"` //标准分值"` if cv.Status == 0 { copyEvalCont.State = 2 } else { copyEvalCont.State = cv.Status //`json:"state"` } copyEvalCont.Istrue = 2 //`json:"istrue"` //是否允许修改 copyInfoXonr.Child = append(copyInfoXonr.Child, copyEvalCont) } byTargetList, _ := HaveDepartBaseTarget(displayTargetId, oldSchemeCont.Department, 1) if len(byTargetList) > 0 { for _, cecfv := range byTargetList { var copyEvalCont CopyEvaluPross copyEvalCont.Id = cecfv.Id copyEvalCont.Name = cecfv.Name copyEvalCont.Content = cecfv.Content copyEvalCont.Unit = cecfv.Unit copyEvalCont.ReferenceScore = 0 copyEvalCont.State = cecfv.State copyEvalCont.Istrue = cecfv.IsTrue copyInfoXonr.Child = append(copyInfoXonr.Child, copyEvalCont) } } copyInfoAry = append(copyInfoAry, copyInfoXonr) } copyCont.Child = copyInfoAry } } publicmethod.Result(0, copyCont, c) } /* * @ 作者: 秦东 @ 时间: 2023-04-19 13:23:59 @ 功能: 获取部门管理的指标 @ 参数 #targetId 指标ID #orgId 行政组织 #attribute 类型(1:指标;2:子目标;3:细则) #level 级别(1:部门级;2:岗位级) @ 返回值 # @ 方法原型 # */ func HaveDepartBaseTarget(targetId []string, orgId int64, level int) (contAry []DepartTargetList, err error) { var targetIdList []int64 gormDb := overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetDepartment{}).Distinct("`target_id`").Where("`state` = 1 AND `level` = ? AND `department_id` = ?", level, orgId) if len(targetId) > 0 { gormDb = gormDb.Not(map[string]interface{}{"target_id": targetId}) } err = gormDb.Find(&targetIdList).Error if err != nil || len(targetIdList) < 1 { return } var targetListCont []modelskpi.EvaluationTarget err = overall.CONSTANT_DB_KPI.Where("`et_state` = 1 AND `et_id` IN ?", targetIdList).Find(&targetListCont).Error if err != nil || len(targetListCont) < 1 { return } for _, e_v := range targetListCont { var cont DepartTargetList cont.Id = strconv.FormatInt(e_v.Id, 10) cont.Name = e_v.Title cont.Content = "" cont.Unit = e_v.Uniteing cont.State = e_v.State cont.ReferenceScore = 0 cont.IsTrue = 2 contAry = append(contAry, cont) } return } /* * @ 作者: 秦东 @ 时间: 2023-04-19 15:12:26 @ 功能: 获取新增方案内容方案详情 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) GetAddSchemeCont(c *gin.Context) { var receivedValue publicmethod.PublicId err := c.ShouldBindJSON(&receivedValue) if err != nil { publicmethod.Result(100, err, c) return } if receivedValue.Id == "" { publicmethod.Result(1, err, c, "未知行政组织!") return } var targetIdList []int64 gormDb := overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetDepartment{}).Distinct("`target_id`").Where("`state` = 1 AND `level` = 1 AND `department_id` = ?", receivedValue.Id) err = gormDb.Find(&targetIdList).Error if err != nil || len(targetIdList) < 1 { return } var targetListCont []modelskpi.EvaluationTarget err = overall.CONSTANT_DB_KPI.Where("`et_state` = 1 AND `et_id` IN ?", targetIdList).Find(&targetListCont).Error if err != nil || len(targetListCont) < 1 { return } var dimensionId []int64 var dimListInfo []dimListCont var tagetList []targetListInfo for _, e_v := range targetListCont { if !publicmethod.IsInTrue[int64](e_v.Dimension, dimensionId) { dimensionId = append(dimensionId, e_v.Dimension) var dimInfo modelskpi.DutyClass dimInfo.GetCont(map[string]interface{}{"`id`": e_v.Dimension}, "`title`") var dimCont dimListCont dimCont.Id = strconv.FormatInt(e_v.Dimension, 10) dimCont.Name = dimInfo.Title dimListInfo = append(dimListInfo, dimCont) } var tarCont targetListInfo tarCont.Id = strconv.FormatInt(e_v.Id, 10) tarCont.Name = e_v.Title tarCont.Dimension = strconv.FormatInt(e_v.Dimension, 10) tagetList = append(tagetList, tarCont) } if len(dimListInfo) < 1 { publicmethod.Result(105, err, c) return } var schemeInfo []outNewScheme for _, v := range dimListInfo { var schemeCont outNewScheme schemeCont.Id = v.Id schemeCont.Name = v.Name if len(tagetList) > 0 { var sunCont []outNewSchemeTar for _, sv := range tagetList { if sv.Dimension == v.Id { var sunInfo outNewSchemeTar sunInfo.Id = sv.Id sunInfo.Name = sv.Name sunCont = append(sunCont, sunInfo) } } if len(sunCont) > 0 { schemeCont.Child = sunCont } } schemeInfo = append(schemeInfo, schemeCont) } publicmethod.Result(0, schemeInfo, c) }