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

555 lines
19 KiB

package assessment
import (
"fmt"
"strconv"
"strings"
"time"
"gin_server_admin/api/v1/archiveapi"
"gin_server_admin/commonus"
"gin_server_admin/global"
"gin_server_admin/model/assessmentmodel"
"gin_server_admin/model/common/response"
"gin_server_admin/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)
where := commonus.MapOut()
where["id"] = groupInt
orgCont, _ := commonus.GetNewOrgCont(where, "id", "name")
// outCont.GroupName = orgCont.Name
whereDepart := commonus.MapOut()
whereDepart["id"] = departidInt
orgContDepart, _ := commonus.GetNewOrgCont(whereDepart, "id", "name")
// _, 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)
// }
if dtIsTrue == true {
// msg["msg"] = fmt.Sprintf("%v-%v《%v》考核细则录入失败!请重新处理此方案!->ID:%v", groupCont.Name, deparConCont.Name, dtCont.Title, v.DetailedTarget)
msg["msg"] = fmt.Sprintf("%v-%v《%v》考核项目已经存在!请重新处理此方案!->ID:%v", orgCont.Name, orgContDepart.Name, dtCont.Title, detailedTargetInts)
} else {
// msg["msg"] = fmt.Sprintf("%v-%v《%v》考核细则录入失败!请重新处理此方案", groupCont.Name, deparConCont.Name, v.DetailedTarget)
msg["msg"] = fmt.Sprintf("%v-%v《%v》考核项目已经存在!请重新处理此方案!", orgCont.Name, orgContDepart.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
where := commonus.MapOut()
where["id"] = v
orgCont, groupErr := commonus.GetNewOrgCont(where, "id", "name")
// outCont.GroupName = orgCont.Name
// groupErr, groupCont := commonus.GetGroupCont(v)
if groupErr == nil {
aualEvalArrtCont.Id = strconv.FormatInt(v, 10)
aualEvalArrtCont.Name = orgCont.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 {
whereDepart := commonus.MapOut()
whereDepart["id"] = v
orgContDepart, deparConErr := commonus.GetNewOrgCont(whereDepart, "id", "name")
// outCont.DepartmentName = orgContDepart.Name
// deparConErr, deparConCont := commonus.GetBranchFactory(v)
var deparCont QualEvalRationListOutDepart
if deparConErr == nil {
deparCont.Id = strconv.FormatInt(v, 10)
deparCont.Name = orgContDepart.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)
}
}