package assessment import ( "fmt" "strconv" "strings" "time" "github.com/flipped-aurora/gin-vue-admin/server/api/v1/archiveapi" "github.com/flipped-aurora/gin-vue-admin/server/commonus" "github.com/flipped-aurora/gin-vue-admin/server/global" "github.com/flipped-aurora/gin-vue-admin/server/model/assessmentmodel" "github.com/flipped-aurora/gin-vue-admin/server/model/common/response" "github.com/flipped-aurora/gin-vue-admin/server/model/testpage" "github.com/gin-gonic/gin" ) /* 定量考核 */ //添加定量考核 func (d *DutyHandle) AddRation(c *gin.Context) { var requestData AddRationCont err := c.ShouldBindJSON(&requestData) if err != nil { response.Result(101, err, "数据获取失败!", c) return } if requestData.Group == "" { response.Result(102, err, "请选择归属集团", c) return } if len(requestData.AcceptDepartmentId) <= 0 { response.Result(102, err, "请选择接受考核的部门!", c) return } if requestData.Dimension == "" { response.Result(102, err, "请选择考核维度", c) return } if len(requestData.RationList) <= 0 { response.Result(102, err, "请添加测评详情!", c) return } var synergeticProcess dataLockStatistics for _, deparmentId := range requestData.AcceptDepartmentId { addDepartDimension(requestData.Group, deparmentId, requestData.Dimension, 2) syncProcess.Add(1) go synergeticProcess.addRationContList(deparmentId, requestData) } syncProcess.Wait() returData := commonus.MapOut() readDataMap, readBaoJinf := synergeticProcess.readMyDayData() returData["istrue"] = readDataMap returData["isfalse"] = readBaoJinf if len(readBaoJinf) > 0 && len(readDataMap) == 0 { response.Result(112, returData, "有未处理失败的数据!请检查", c) } else if len(readBaoJinf) > 0 && len(readDataMap) > 0 { response.Result(1, returData, "有部门数据处理失败!请针对性输入!", c) } else { response.Result(0, returData, "数据处理完成!", c) } } //关联集团部门考核维度 /* @groupID 集团 @departId 部门 @dimensionId 维度 @key 1:定性考核;2:定量考核 */ func addDepartDimension(groupID, departId, dimensionId string, key int64) { judgeMap := commonus.MapOut() judgeErr := global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.DepartmentDimension{}).Select("dd_id").Where("`dd_group` = ? AND `dd_department` = ? AND `dd_dimension` = ?", groupID, departId, dimensionId).First(&judgeMap).Error if judgeErr != nil { var saveData assessmentmodel.DepartmentDimension saveData.Key = key departIdVal, _ := strconv.ParseInt(departId, 10, 64) saveData.DepartmentId = departIdVal dimensionIdVal, _ := strconv.ParseInt(dimensionId, 10, 64) saveData.Dimension = dimensionIdVal groupIDVal, _ := strconv.ParseInt(groupID, 10, 64) saveData.Group = groupIDVal saveData.Addtime = time.Now().Unix() insetErr := global.GVA_DB_Performanceappraisal.Create(&saveData).Error if insetErr == nil { } } } func (d *dataLockStatistics) addRationContList(deparmentId string, addData AddRationCont) { d.mutext.Lock() defer d.mutext.Unlock() var saveDataAry []assessmentmodel.QualitativeEvaluation for _, v := range addData.RationList { var saveData assessmentmodel.QualitativeEvaluation juadgeMap := commonus.MapOut() juadgeInsetErr := global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.QualitativeEvaluation{}).Select("qe_id").Where("`qe_accept_evaluation` = ? AND `qe_dimension` = ? AND `qe_target` = ? ", deparmentId, addData.Dimension, v.Target).First(&juadgeMap).Error if juadgeInsetErr != nil { groupInt, groupIntErr := strconv.ParseInt(addData.Group, 10, 64) if groupIntErr == nil { saveData.Group = groupInt } saveData.Type = addData.Type // departidInt, departinIntErr := strconv.ParseInt(v.DepartmentId, 10, 64) // if departinIntErr == nil { // saveData.DepartmentId = departidInt // } dimensionInt, departinIntErr := strconv.ParseInt(addData.Dimension, 10, 64) if departinIntErr == nil { saveData.Dimension = dimensionInt } targetInt, targetIntErr := strconv.ParseInt(v.Target, 10, 64) if targetIntErr == nil { saveData.Target = targetInt } saveData.Unit = v.Unit saveData.ReferenceScore = v.ReferenceScore saveData.Cycles = v.Cycles saveData.CycleAttres = v.CycleAttres saveData.State = 1 saveData.Addtime = time.Now().Unix() saveData.Eitetime = time.Now().Unix() departmentIdInt, departmentIdIntErr := strconv.ParseInt(deparmentId, 10, 64) if departmentIdIntErr == nil { saveData.AcceptEvaluation = departmentIdInt } // operatorInt, operatorIntErr := strconv.ParseInt(v.Operator, 10, 64) // if operatorIntErr == nil { // saveData.Operator = operatorInt // } saveData.Operator = strings.Join(v.Operator, ",") saveData.DepartmentId = strings.Join(GetDepartmentByUserBast(v.Operator), ",") saveDataAry = append(saveDataAry, saveData) msg := commonus.MapOut() msg["msg"] = saveData d.dataMap = append(d.dataMap, msg) } else { detailedTargetInts, _ := strconv.ParseInt(v.Target, 10, 64) dtCont, dtIsTrue := commonus.GetTargetInfo(detailedTargetInts) groupInt, _ := strconv.ParseInt(addData.Group, 10, 64) departidInt, _ := strconv.ParseInt(deparmentId, 10, 64) _, groupCont := commonus.GetGroupCont(groupInt) _, deparConCont := commonus.GetBranchFactory(departidInt) msg := commonus.MapOut() if dtIsTrue == true { msg["msg"] = fmt.Sprintf("%v-%v定量考核《%v》考核项目已经存在!请重新处理此方案!->ID:%v", groupCont.Name, deparConCont.Name, dtCont.Title, detailedTargetInts) } else { msg["msg"] = fmt.Sprintf("%v-%v定量考核《%v》考核项目已经存在!请重新处理此方案!", groupCont.Name, deparConCont.Name, detailedTargetInts) } d.dataErrMap = append(d.dataErrMap, msg) } } if len(saveDataAry) > 0 { addErr := global.GVA_DB_Performanceappraisal.Create(&saveDataAry).Error if addErr != nil { msg := commonus.MapOut() msg["data"] = saveDataAry msg["msg"] = fmt.Sprintf("《%v》考核维度录入失败!请重新处理此方案", addData.Dimension) d.dataErrMap = append(d.dataErrMap, msg) } } syncProcess.Done() } //批量获取相关人员部门id func GetDepartmentByUserBast(userKey []string) (userDepartmentId []string) { if len(userKey) < 1 { return } var usDepartId []int64 usDepartErr := global.GVA_DB_Master.Model(&testpage.WorkMan{}).Select("wm_bf_id").Where("`wm_key` IN ?", userKey).Group("wm_bf_id").Find(&usDepartId).Error if usDepartErr != nil { return } if len(usDepartId) < 1 { return } for _, v := range usDepartId { userDepartmentId = append(userDepartmentId, strconv.FormatInt(v, 10)) } return } //定量考核方案列表 func (d *DutyHandle) RationList(c *gin.Context) { var requestData rationSelect c.ShouldBindJSON(&requestData) //归档集团 gormDb := global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.QualitativeEvaluation{}).Select("qe_group").Where("qe_type = 2").Group("qe_group") if requestData.Group != "" { gormDb = gormDb.Having("qe_group = ?", requestData.Group) } var fileAry []int64 listErr := gormDb.Find(&fileAry).Error if listErr != nil { response.Result(101, listErr, "没有数据!", c) return } if len(fileAry) < 1 { response.Result(102, listErr, "没有数据!", c) return } var aualEvalArrtAry []QualEvalRationListOut for _, v := range fileAry { var aualEvalArrtCont QualEvalRationListOut groupErr, groupCont := commonus.GetGroupCont(v) if groupErr == true { aualEvalArrtCont.Id = strconv.FormatInt(v, 10) aualEvalArrtCont.Name = groupCont.Name // 归档分厂-部室 departAry, departAryErr := deparmentRationList(v, requestData.DepartmentId) if departAryErr == true { //分厂部室列表 aualEvalArrtCont.Child = departAry } //组合集团 aualEvalArrtAry = append(aualEvalArrtAry, aualEvalArrtCont) } } response.Result(0, aualEvalArrtAry, "查询完成!", c) } //归档部门 func deparmentRationList(groupID int64, departmentIDStr string) (contentList []QualEvalRationListOutDepart, isTrue bool) { isTrue = false gormDbDepart := global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.QualitativeEvaluation{}).Select("qe_accept_evaluation").Where("qe_type = 2 AND `qe_group` = ?", groupID).Group("qe_accept_evaluation") if departmentIDStr != "" { gormDbDepart = gormDbDepart.Having("qe_accept_evaluation = ?", departmentIDStr) } var fileDepartAry []int64 listDepartErr := gormDbDepart.Find(&fileDepartAry).Error if listDepartErr == nil { for _, v := range fileDepartAry { deparConErr, deparConCont := commonus.GetBranchFactory(v) var deparCont QualEvalRationListOutDepart if deparConErr == true { deparCont.Id = strconv.FormatInt(v, 10) deparCont.Name = deparConCont.Name //归档维度 dimensionAry, dimensionAryErr := dimensionRationList(groupID, v) if dimensionAryErr == true { //维度列表 deparCont.Child = dimensionAry } } //组合分厂部室 contentList = append(contentList, deparCont) } } if len(contentList) > 0 { isTrue = true } return } //归档维度 func dimensionRationList(groupID, departmentID int64) (contentList []DimensionRationList, isTrue bool) { isTrue = false var fileDimensionAry []int64 listDimensionErr := global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.QualitativeEvaluation{}).Select("qe_dimension").Where("qe_type = 2 AND `qe_group` = ? AND `qe_accept_evaluation` = ?", groupID, departmentID).Group("qe_dimension").Find(&fileDimensionAry).Error if listDimensionErr == nil { for _, v := range fileDimensionAry { dutyClassCont, dutyClassErr := commonus.GetDutyClassInfo(v) var dimenCont DimensionRationList if dutyClassErr == true { dimenCont.Id = strconv.FormatInt(v, 10) dimenCont.Name = dutyClassCont.Title //归档指标 targerAry, targerAryErr := targetRationList(groupID, departmentID, v) if targerAryErr == true { //定性考核指标列表 dimenCont.Child = targerAry } //组合维度 contentList = append(contentList, dimenCont) } } } if len(contentList) > 0 { isTrue = true } return } //查询归档定性指标 func targetRationList(groupID, departmentID, dimension int64) (contentList []taskDetails, isTrue bool) { isTrue = false var fileTargetAry []assessmentmodel.QualitativeEvaluation listTargetErr := global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.QualitativeEvaluation{}).Where("qe_type = 2 AND `qe_group` = ? AND `qe_accept_evaluation` = ? AND `qe_dimension` = ?", groupID, departmentID, dimension).Find(&fileTargetAry).Error if listTargetErr != nil { return } for _, v := range fileTargetAry { var content taskDetails targetInfo, targetErr := commonus.GetTargetInfo(v.Target) if targetErr == true { content.Id = strconv.FormatInt(v.Target, 10) content.Name = targetInfo.Title content.QeId = strconv.FormatInt(v.Id, 10) content.Unit = v.Unit content.ReferenceScore = v.ReferenceScore content.Cycles = v.Cycles content.CycleAttres = v.CycleAttres content.State = v.State contentList = append(contentList, content) } } if len(contentList) > 0 { isTrue = true } return } //删除定量考核 func (d *DutyHandle) DelRationList(c *gin.Context) { var requestData DelQualitative err := c.ShouldBindJSON(&requestData) if err != nil { response.Result(101, err, "数据获取失败!", c) return } if requestData.Group == "" { response.Result(102, err, "请选择归属集团", c) return } if requestData.DepartmentId == "" { response.Result(103, err, "请选择接受考核的部门!", c) return } if requestData.Dimension == "" { response.Result(104, err, "请选择考核维度", c) return } if requestData.Target == "" { response.Result(105, err, "请选择考核指标", c) return } if requestData.Type == 0 { requestData.Type = 2 } delOldContErr := global.GVA_DB_Performanceappraisal.Where("`qe_type` = 1 AND `qe_group` = ? AND `qe_accept_evaluation` = ? AND `qe_dimension` = ? AND `qe_target` = ?", requestData.Group, requestData.DepartmentId, requestData.Dimension, requestData.Target).Delete(&assessmentmodel.QualitativeEvaluation{}).Error if delOldContErr == nil { response.Result(0, delOldContErr, "删除成功!", c) } else { response.Result(102, delOldContErr, "删除失败!", c) } } //获取定量考核 func (d *DutyHandle) GetRationList(c *gin.Context) { var requestData QualitativeEite err := c.ShouldBindJSON(&requestData) if err != nil { response.Result(101, err, "数据获取失败!", c) return } if requestData.Group == "" { response.Result(102, err, "请选择归属集团", c) return } if requestData.DepartmentId == "" { response.Result(102, requestData, "请选择接受考核的部门!", c) return } if requestData.Dimension == "" { response.Result(102, err, "请选择考核维度", c) return } var quaAry []assessmentmodel.QualitativeEvaluation var quaOutAry QualitativeEiteOut quaOutAry.Group = requestData.Group quaOutAry.DepartmentId = requestData.DepartmentId quaOutAry.Dimension = requestData.Dimension // quaOutAry.List = requestData.List quaErr := global.GVA_DB_Performanceappraisal.Where("`qe_type` = 2 AND `qe_group` = ? AND `qe_accept_evaluation` = ? AND `qe_dimension` = ?", requestData.Group, requestData.DepartmentId, requestData.Dimension).Find(&quaAry).Error if quaErr != nil { response.Result(102, quaErr, "数据获取失败!", c) return } // var targetInfo assessmentmodel.EvaluationTarget // targetInfoErr := global.GVA_DB_Performanceappraisal.Where("`et_id` = ?", requestData.Target).First(&targetInfo).Error for _, v := range quaAry { // detTarCont, detTarContErr := commonus.GetDetailedTargetInfo(v.DetailedTarget) targetInfo, targetErr := commonus.GetTargetInfo(v.Target) if targetErr == true { var outCont taskDetailsLinkage outCont.Id = strconv.FormatInt(v.Id, 10) outCont.Name = targetInfo.Title // outCont.Content = targetInfo.Content outCont.State = v.State // if targetInfoErr == nil { outCont.Unit = v.Unit // outCont.ReferenceScore = v.Content outCont.Cycles = v.Cycles outCont.CycleAttres = v.CycleAttres if targetInfo.Report != "" { userKeyAry := strings.Split(v.Operator, ",") if len(userKeyAry) > 0 { outCont.UserList = userKeyAry for _, u_v := range userKeyAry { usCont, usErr := archiveapi.GetUserInfo([]string{"worker_man.wm_number", "worker_man_data.wmd_name"}, map[string]interface{}{"wm_key": u_v}) if usErr == true { var userCont QualEvalArrt userCont.Id = u_v userCont.Name = usCont.Name outCont.UserListAry = append(outCont.UserListAry, userCont) } } } } // } quaOutAry.List = append(quaOutAry.List, outCont) } } response.Result(0, quaOutAry, "数据获取成功!", c) } //修改定量考核 func (d *DutyHandle) EiteRationList(c *gin.Context) { var requestData QualitativeEiteOut err := c.ShouldBindJSON(&requestData) if err != nil { response.Result(101, err, "数据获取失败!", c) return } if requestData.Group == "" { response.Result(102, err, "请选择归属集团", c) return } if requestData.DepartmentId == "" { response.Result(102, err, "请选择接受考核的部门!", c) return } if requestData.Dimension == "" { response.Result(102, err, "请选择考核维度", c) return } if len(requestData.List) < 1 { response.Result(102, err, "考核细则不能为空", c) return } //开启事务处理 affairDb := global.GVA_DB_Performanceappraisal.Begin() delOldContErr := affairDb.Where("`qe_type` = 2 AND `qe_group` = ? AND `qe_accept_evaluation` = ? AND `qe_dimension` = ?", requestData.Group, requestData.DepartmentId, requestData.Dimension).Delete(&assessmentmodel.QualitativeEvaluation{}).Error var quaEvaCont []assessmentmodel.QualitativeEvaluation for _, v := range requestData.List { var saveData assessmentmodel.QualitativeEvaluation groupInt, groupIntErr := strconv.ParseInt(requestData.Group, 10, 64) if groupIntErr == nil { saveData.Group = groupInt } saveData.Type = 1 dimensionInt, departinIntErr := strconv.ParseInt(requestData.Dimension, 10, 64) if departinIntErr == nil { saveData.Dimension = dimensionInt } targetInt, targetIntErr := strconv.ParseInt(v.Id, 10, 64) if targetIntErr == nil { saveData.Target = targetInt } saveData.Unit = v.Unit saveData.ReferenceScore = v.ReferenceScore saveData.Cycles = v.Cycles saveData.CycleAttres = v.CycleAttres saveData.State = 1 saveData.Addtime = time.Now().Unix() saveData.Eitetime = time.Now().Unix() departmentIdInt, departmentIdIntErr := strconv.ParseInt(requestData.DepartmentId, 10, 64) if departmentIdIntErr == nil { saveData.AcceptEvaluation = departmentIdInt } saveData.Operator = strings.Join(v.UserList, ",") // fmt.Printf("%v-------->%v\n", GetDepartmentByUserBast(v.UserList), strings.Join(GetDepartmentByUserBast(v.UserList), ",")) saveData.DepartmentId = strings.Join(GetDepartmentByUserBast(v.UserList), ",") // operatorInt, operatorIntErr := strconv.ParseInt(v.Operator, 10, 64) // if operatorIntErr == nil { // saveData.Operator = strings.Join(v.Operator,",") // } // saveData.AcceptEvaluation = departmentIdInt quaEvaCont = append(quaEvaCont, saveData) } var infoAttrErr error if len(quaEvaCont) > 0 { infoAttrErr = affairDb.Create(&quaEvaCont).Error } if delOldContErr == nil && infoAttrErr == nil { delOldContErr = affairDb.Commit().Error if delOldContErr != nil { delOldContErr = affairDb.Rollback().Error response.Result(102, err, "数据写入失败!请重新提交!", c) return } response.Result(0, err, "数据写入成功!", c) } else { delOldContErr = affairDb.Rollback().Error response.Result(102, err, "数据写入失败!请重新提交!", c) } }