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

597 lines
19 KiB

package assessment
import (
"encoding/json"
"fmt"
"strconv"
"strings"
"time"
"gin_server_admin/commonus"
"gin_server_admin/global"
"gin_server_admin/model/assessmentmodel"
"gin_server_admin/model/common/response"
"gin_server_admin/model/hrsystem"
"gin_server_admin/model/testpage"
"github.com/gin-gonic/gin"
)
// 获取指标列表
func (d *DutyHandle) GetTargetList(c *gin.Context) {
var requestData listTarget
err := c.ShouldBindJSON(&requestData)
if err != nil {
// response.Result(101, err, "参数错误!请重新提交!", c)
// return
}
if requestData.PageSize == 0 {
requestData.PageSize = 20
}
if requestData.Page <= 0 {
requestData.Page = 1
}
offSetPage := commonus.CalculatePages(requestData.Page, requestData.PageSize)
gormDb := global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.EvaluationTarget{})
if requestData.State == 0 {
gormDb = gormDb.Where("`et_state` IN (1,2)")
} else {
gormDb = gormDb.Where("`et_state` = ?", requestData.State)
}
if requestData.Type != 0 {
gormDb = gormDb.Where("`et_type` = ?", requestData.Type)
}
if requestData.Share != 0 {
gormDb = gormDb.Where("`et_share` = ?", requestData.Share)
}
if requestData.Dimension != "" {
gormDb = gormDb.Where("`et_dimension` = ?", requestData.Dimension)
}
if requestData.Title != "" {
gormDb = gormDb.Where("(`et_title` LIKE ?)", "%"+requestData.Title+"%")
}
if len(requestData.RelevantDepartments) > 0 {
var sqlOrStr string = ""
for s_i, s_v := range requestData.RelevantDepartments {
if s_i == 0 {
sqlOrStr = fmt.Sprintf("FIND_IN_SET(%v,`et_relevant_departments`)", s_v)
} else {
sqlOrStr = fmt.Sprintf("%v OR FIND_IN_SET(%v,`et_relevant_departments`)", sqlOrStr, s_v)
}
}
gormDb = gormDb.Where(sqlOrStr)
}
if len(requestData.VisibleRangeGroup) > 0 {
var sqlOrStrGroup string = ""
for s_i, s_v := range requestData.VisibleRangeGroup {
if s_i == 0 {
sqlOrStrGroup = fmt.Sprintf("FIND_IN_SET(%v,`et_visible_range`)", s_v)
} else {
sqlOrStrGroup = fmt.Sprintf("%v OR FIND_IN_SET(%v,`et_visible_range`)", sqlOrStrGroup, s_v)
}
}
gormDb = gormDb.Where(sqlOrStrGroup)
}
if len(requestData.VisibleRangeDepart) > 0 {
var sqlOrStrDepart string = ""
for s_i, s_v := range requestData.VisibleRangeDepart {
if s_i == 0 {
sqlOrStrDepart = fmt.Sprintf("FIND_IN_SET(%v,`et_visible_range`)", s_v)
} else {
sqlOrStrDepart = fmt.Sprintf("%v OR FIND_IN_SET(%v,`et_visible_range`)", sqlOrStrDepart, s_v)
}
}
gormDb = gormDb.Where(sqlOrStrDepart)
}
var total int64
totalErr := gormDb.Count(&total).Error
if totalErr != nil {
total = 0
}
// response.Result(0, requestData, "查询成功!", c)
var dataList []assessmentmodel.EvaluationTarget
dataListerr := gormDb.Order("et_id DESC").Limit(requestData.PageSize).Offset(offSetPage).Find(&dataList).Error
if dataListerr != nil {
response.Result(103, dataList, "数据获取失败!", c)
return
}
var outMap []outTargetList
for _, tg_val := range dataList {
var outMapCont outTargetList
outMapCont.Id = tg_val.Id
outMapCont.OutId = strconv.FormatInt(tg_val.Id, 10)
outMapCont.Title = tg_val.Title
outMapCont.Type = tg_val.Type
outMapCont.State = tg_val.State
outMapCont.AddTime = tg_val.AddTime
outMapCont.Share = 2
outMapCont.RelevantDepartments = tg_val.RelevantDepartments
if tg_val.RelevantDepartments != "" {
departIdAry := strings.Split(tg_val.RelevantDepartments, ",")
for _, dia_val := range departIdAry {
where := commonus.MapOut()
where["id"] = dia_val
orgCont, orgErr := commonus.GetNewOrgCont(where, "id", "name")
if orgErr == nil {
var bfCont outTargetAttr
bfCont.Key = dia_val
bfCont.Title = orgCont.Name
outMapCont.RelevantDepartmentMap = append(outMapCont.RelevantDepartmentMap, bfCont)
}
// diaInt, diaIntErr := strconv.ParseInt(dia_val, 10, 64)
// if diaIntErr == nil {
// diaValErr, diaVal := GetBranchFactory(diaInt)
// if diaValErr == true {
// var bfCont outTargetAttr
// bfCont.Key = dia_val
// bfCont.Title = diaVal.Name
// outMapCont.RelevantDepartmentMap = append(outMapCont.RelevantDepartmentMap, bfCont)
// }
// }
}
}
outMapCont.Dimension = tg_val.Dimension
dimClass, dimClassErr := commonus.GetDutyClassInfo(tg_val.Dimension)
if dimClassErr == true {
outMapCont.DimensionName = dimClass.Title
}
outMapCont.Key = tg_val.Key
outMapCont.Report = tg_val.Report
if tg_val.Report != "" {
userIdAry := strings.Split(tg_val.Report, ",")
for _, u_val := range userIdAry {
uidInt, uidIntErr := strconv.ParseInt(u_val, 10, 64)
if uidIntErr == nil {
// whe := commonus.MapOut()
// whe["wm_key"] = uidInt
// uidVal, uidValErr := commonus.GetUserInfoPublic("worker_man.*,worker_man_data.*", whe)
var myContInfo hrsystem.PersonArchives
uidValErr := myContInfo.GetCont(map[string]interface{}{"`key`": uidInt}, "`key`", "`name`")
if uidValErr == nil {
var bfContUser outTargetAttr
bfContUser.Key = u_val
bfContUser.Title = myContInfo.Name
outMapCont.ReportMap = append(outMapCont.ReportMap, bfContUser)
}
}
}
}
outMapCont.Uniteing = tg_val.Uniteing
outMapCont.Cycles = tg_val.Cycles
outMapCont.CycleAttres = tg_val.CycleAttres
outMapCont.VisibleRange = tg_val.VisibleRange
if tg_val.VisibleRange != "" {
rangeIdAry := strings.Split(tg_val.VisibleRange, ",")
for _, rge_val := range rangeIdAry {
rgeInt, rgeIntErr := strconv.ParseInt(rge_val, 10, 64)
if rgeIntErr == nil {
rgeValErr, rgeVal := GetBranchFactory(rgeInt)
if rgeValErr == true {
var bfContRge outTargetAttr
bfContRge.Key = rge_val
bfContRge.Title = rgeVal.Name
outMapCont.VisibleRangeDepartMap = append(outMapCont.VisibleRangeDepartMap, bfContRge)
}
}
}
}
outMapCont.VisibleRangeGroup = tg_val.VisibleRangeGroup
outMapCont.ScoringMethod = tg_val.ScoringMethod
if tg_val.VisibleRangeGroup != "" {
rangeGroupIdAry := strings.Split(tg_val.VisibleRangeGroup, ",")
for _, rgeup_val := range rangeGroupIdAry {
rgeIntGup, rgeIntGupErr := strconv.ParseInt(rgeup_val, 10, 64)
if rgeIntGupErr == nil {
where := commonus.MapOut()
where["id"] = rgeIntGup
orgCont, rgeValGupErr := commonus.GetNewOrgCont(where, "id", "name")
// outCont.GroupName = orgCont.Name
// rgeValGupErr, rgeValGup := GetGroupCont(rgeIntGup)
if rgeValGupErr == nil {
var bfContRge outTargetAttr
bfContRge.Key = rgeup_val
bfContRge.Title = orgCont.Name
outMapCont.VisibleRangeGroupMap = append(outMapCont.VisibleRangeGroupMap, bfContRge)
}
}
}
}
outMap = append(outMap, outMapCont)
}
countSum := len(outMap)
printData := commonus.OutPutList(total, int64(countSum), requestData.Page, requestData.PageSize, outMap)
response.Result(0, printData, "查询成功!", c)
}
// 添加指标
func (d *DutyHandle) AddTarget(c *gin.Context) {
var requestData addTargetType
err := c.ShouldBindJSON(&requestData)
if err != nil {
response.Result(101, err, "参数错误!请重新提交!", c)
return
}
if requestData.Title == "" {
response.Result(102, err, "请输入指标名称!", c)
return
}
if requestData.Type == 0 {
requestData.Type = 1
}
if requestData.Share == 0 {
requestData.Share = 1
} else {
if requestData.Share > 1 {
if len(requestData.RelevantDepartments) == 0 {
response.Result(103, err, "您选择了此指标为指定部门使用!但您未指定具体使用部门!请指定相关使用部门!", c)
return
}
}
}
if requestData.Uniteing == "" {
response.Result(104, err, "请输入计量单位!", c)
return
}
if requestData.Cycles == 0 {
requestData.Cycles = 4
}
if requestData.CycleAttres == 0 {
requestData.CycleAttres = 1
}
if requestData.ScoringMethod == 0 {
requestData.ScoringMethod = 1
}
gormDb := global.GVA_DB_Performanceappraisal
gormDb = gormDb.Model(&assessmentmodel.EvaluationTarget{}).Select("et_title").Where("`et_title` = ? AND `et_type` = ?", requestData.Title, requestData.Type)
dimensionId, dimensionErr := strconv.ParseInt(requestData.Dimension, 10, 64)
if dimensionErr == nil && dimensionId != 0 {
gormDb = gormDb.Where("`et_dimension` = ?", requestData.Dimension)
}
judgeOut := commonus.MapOut()
judgeErr := gormDb.First(&judgeOut).Error
if judgeErr == nil {
response.Result(105, err, "此考核指标已经存在!请不要重复添加!", c)
return
}
var saveData assessmentmodel.EvaluationTarget
saveData.Title = requestData.Title
saveData.Type = requestData.Type
saveData.State = 1
saveData.AddTime = time.Now().Unix()
saveData.Share = requestData.Share
if len(requestData.RelevantDepartments) > 0 {
saveData.RelevantDepartments = strings.Join(requestData.RelevantDepartments, ",")
}
if dimensionErr == nil {
saveData.Dimension = dimensionId
}
saveData.Key = commonus.GetFileNumberEs()
if len(requestData.Report) > 0 {
saveData.Report = strings.Join(requestData.Report, ",")
}
saveData.Uniteing = requestData.Uniteing
saveData.Cycles = requestData.Cycles
saveData.CycleAttres = requestData.CycleAttres
if len(requestData.VisibleRangeGroup) > 0 {
saveData.VisibleRangeGroup = strings.Join(requestData.VisibleRangeGroup, ",")
}
if len(requestData.VisibleRangeDepart) > 0 {
saveData.VisibleRange = strings.Join(requestData.VisibleRangeDepart, ",")
}
saveData.ScoringMethod = requestData.ScoringMethod
dutyInfoErr := global.GVA_DB_Performanceappraisal.Create(&saveData).Error
if dutyInfoErr != nil {
response.Result(106, saveData, "数据写入失败!", c)
} else {
response.Result(0, saveData, "数据写入成功!", c)
}
}
// 计算可见范围
func calculVisibleRange(groupStr, depart []string) (visibleRange string) {
if len(depart) > 0 {
for d_index, d_val := range depart {
if d_index == 0 {
visibleRange = d_val
} else {
visibleRange = visibleRange + "," + d_val
}
}
return
} else {
if len(groupStr) > 0 {
for g_index, g_val := range groupStr {
if g_index == 0 {
visibleRange = getBranchFactoryList(g_val)
} else {
visibleRange = visibleRange + "," + getBranchFactoryList(g_val)
}
}
return
}
}
return
}
// 获得分厂列表
func getBranchFactoryList(id string) (bfIdStr string) {
var ContInfo []testpage.BranchFactory
err := global.GVA_DB_Master.Select("bf_id").Where("bf_group = ? AND `bf_set` = 1", id).Find(&ContInfo).Error
if err != nil {
return
}
for b_index, b_val := range ContInfo {
if b_index == 0 {
bfIdStr = strconv.FormatInt(b_val.Id, 10)
} else {
bfIdStr = bfIdStr + "," + strconv.FormatInt(b_val.Id, 10)
}
}
return
}
// 获取考核指标详情
func (d *DutyHandle) GetTarget(c *gin.Context) {
var requestData commonus.SetIds
err := c.ShouldBindJSON(&requestData)
if err != nil {
response.Result(101, err, "数据获取失败!", c)
return
}
if requestData.Id == 0 && requestData.OutId == "" {
response.Result(102, err, "参数错误!请重新提交!", c)
return
}
if requestData.OutId != "" {
idInt, inIntErr := strconv.ParseInt(requestData.OutId, 10, 64)
if inIntErr == nil {
requestData.Id = idInt
}
}
var systemEvalCont outTargetInfo
contErr := global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.EvaluationTarget{}).Where("`et_id` = ?", requestData.Id).First(&systemEvalCont).Error
if contErr != nil {
response.Result(103, err, "数据获取失败!", c)
return
}
if systemEvalCont.RelevantDepartments != "" {
systemEvalCont.RelevantDepartmentMap = strings.Split(systemEvalCont.RelevantDepartments, ",")
systemEvalCont.GroupMap = commonus.GetDuboDepart(strings.Split(systemEvalCont.RelevantDepartments, ","))
}
if systemEvalCont.Report != "" {
systemEvalCont.ReportMap = strings.Split(systemEvalCont.Report, ",")
}
if systemEvalCont.VisibleRangeGroup != "" {
systemEvalCont.VisibleRangeGroupMap = strings.Split(systemEvalCont.VisibleRangeGroup, ",")
}
if systemEvalCont.VisibleRange != "" {
systemEvalCont.VisibleRangeDepartMap = strings.Split(systemEvalCont.VisibleRange, ",")
}
systemEvalCont.Share = 2
systemEvalCont.DimensionIdStr = strconv.FormatInt(systemEvalCont.Dimension, 10)
response.Result(0, systemEvalCont, "数据获取成功!", c)
}
// 编辑指标数据处理
func eiteTargetInfoes(saveId int64, saveData map[string]interface{}) (isTrue bool, infoErr error) {
isTrue = false
infoErr = global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.EvaluationTarget{}).Where("`et_id` = ?", saveId).Updates(saveData).Error
if infoErr != nil {
return
}
isTrue = true
return
}
// 删除工段内容
func (d *DutyHandle) DelTarget(c *gin.Context) {
var requestData dutyClassState
err := c.ShouldBindJSON(&requestData)
if err != nil {
response.Result(101, requestData, "数据获取失败!", c)
return
}
if requestData.Id == 0 && requestData.OutId == "" {
response.Result(102, err, "参数错误!请重新提交!", c)
return
}
if requestData.OutId != "" {
idInt, inIntErr := strconv.ParseInt(requestData.OutId, 10, 64)
if inIntErr == nil {
requestData.Id = idInt
}
}
if requestData.State == 0 {
requestData.State = 1
}
//判断该指标是否已经被使用过
// var qualitativeEvaluationAry []assessmentmodel.QualitativeEvaluation
var qeId int64 = 0
judgeErrQe := global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.QualitativeEvaluation{}).Select("qe_id").Where("`qe_state` IN (1,2) AND `qe_target` = ?", requestData.Id).Find(&qeId)
if judgeErrQe == nil {
if qeId != 0 {
response.Result(103, qeId, "该指标已经再考核方案中使用!请先解除使用关系,再进行删除操作!", c)
return
}
}
saveData := commonus.MapOut()
saveData["et_state"] = requestData.State
saveData["et_time"] = time.Now().Unix()
if requestData.IsDel != 1 {
roleIsTrue, roleErr := eiteTargetInfoes(requestData.Id, saveData)
if roleIsTrue != true {
response.Result(103, roleErr, "修改失败!", c)
return
}
response.Result(0, requestData, "修改成功!", c)
} else {
if requestData.State == 3 {
roleErr := global.GVA_DB_Performanceappraisal.Where("et_id = ?", requestData.Id).Delete(&assessmentmodel.EvaluationTarget{}).Error
if roleErr != nil {
response.Result(104, saveData, "删除失败!", c)
return
}
response.Result(0, saveData, "删除成功!", c)
} else {
roleIsTrue, roleErr := eiteTargetInfoes(requestData.Id, saveData)
if roleIsTrue != true {
response.Result(103, roleErr, "修改失败!", c)
return
}
response.Result(0, requestData, "修改成功!", c)
}
}
}
// 修改指标内容
func (d *DutyHandle) EiteTarget(c *gin.Context) {
var requestData eiteTargetTypeCont
err := c.ShouldBindJSON(&requestData)
if err != nil {
response.Result(101, err, "数据获取失败!", c)
return
}
if requestData.Id == 0 && requestData.OutId == "" {
response.Result(102, err, "参数错误!请重新提交!", c)
return
}
if requestData.OutId != "" {
idInt, inIntErr := strconv.ParseInt(requestData.OutId, 10, 64)
if inIntErr == nil {
requestData.Id = idInt
}
}
saveData := commonus.MapOut()
var oldTargetCont assessmentmodel.EvaluationTarget
targetInfoErr := global.GVA_DB_Performanceappraisal.Where("`et_id` = ?", requestData.Id).First(&oldTargetCont).Error
if targetInfoErr != nil {
response.Result(102, err, "该指标不存在!请检查您的参数!", c)
return
}
if requestData.Title == "" {
response.Result(102, err, "请输入指标名称!", c)
return
} else {
if requestData.Title != oldTargetCont.Title {
judgeTargetErr := global.GVA_DB_Performanceappraisal.Where("`et_title` = ? AND `et_type` = ?", requestData.Title, oldTargetCont.Type).First(&oldTargetCont).Error
if judgeTargetErr == nil {
response.Result(102, err, "该指标名称已经存在!请不要重复输入!", c)
return
}
}
saveData["et_title"] = requestData.Title
}
if requestData.Type != 0 {
saveData["et_type"] = requestData.Type
}
if len(requestData.RelevantDepartments) > 0 {
saveData["et_relevant_departments"] = strings.Join(requestData.RelevantDepartments, ",")
saveData["et_share"] = 2
} else {
saveData["et_relevant_departments"] = ""
saveData["et_share"] = 1
}
// if requestData.Share != 0 {
// saveData["et_share"] = requestData.Share
// if requestData.Share > 1 {
// if len(requestData.RelevantDepartments) == 0 {
// response.Result(103, err, "您选择了此指标为指定部门使用!但您未指定具体使用部门!请指定相关使用部门!", c)
// return
// }
// saveData["et_relevant_departments"] = strings.Join(requestData.RelevantDepartments, ",")
// } else {
// saveData["et_relevant_departments"] = ""
// }
// }
if requestData.Dimension != "" {
saveData["et_dimension"] = requestData.Dimension
}
if len(requestData.Report) > 0 {
saveData["et_report"] = strings.Join(requestData.Report, ",")
}
if requestData.Uniteing != "" {
saveData["et_unit"] = requestData.Uniteing
}
if requestData.Cycles != 0 {
saveData["et_cycle"] = requestData.Cycles
}
if requestData.CycleAttres != 0 {
saveData["et_cycleattr"] = requestData.CycleAttres
}
if len(requestData.VisibleRangeGroup) > 0 {
saveData["et_visible_group"] = strings.Join(requestData.VisibleRangeGroup, ",")
}
if len(requestData.VisibleRangeDepart) > 0 {
saveData["et_visible_range"] = strings.Join(requestData.VisibleRangeDepart, ",")
}
if requestData.ScoringMethod != 0 {
saveData["et_scoring_method"] = requestData.ScoringMethod
}
saveData["et_time"] = time.Now().Unix()
roleIsTrue, roleErr := eiteTargetInfoes(requestData.Id, saveData)
if roleIsTrue != true {
response.Result(106, roleErr, "编辑失败!", c)
} else {
assTarEite := commonus.MapOut()
assTarEite["departmentmap"] = saveData["et_relevant_departments"]
assTarEite["time"] = time.Now().Unix()
global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.Assesstarget{}).Where("`targetid` = ?", requestData.Id).Updates(assTarEite)
if len(requestData.Report) > 0 {
//获取原来的指标指定审批人
var assessInfo []assessmentmodel.Assesstarget
assessErr := global.GVA_DB_Performanceappraisal.Where("`targetid` = ?", requestData.Id).Find(&assessInfo).Error
if assessErr == nil {
for _, aev := range assessInfo {
var assUser []DutyAssEssTarget
assJsonErr := json.Unmarshal([]byte(aev.Content), &assUser)
if assJsonErr == nil {
var eiteAssUser []DutyAssEssTarget
for _, ajv := range assUser {
var eiteAssUserInfo DutyAssEssTarget
eiteAssUserInfo.Id = ajv.Id
eiteAssUserInfo.Operator = requestData.Report
eiteAssUser = append(eiteAssUser, eiteAssUserInfo)
}
assTarEiteCont := commonus.MapOut()
jsonAssUser, jsonAssUserErr := json.Marshal(eiteAssUser)
if jsonAssUserErr == nil {
assTarEiteCont["content"] = string(jsonAssUser)
assTarEiteCont["time"] = time.Now().Unix()
global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.Assesstarget{}).Where("`at_id` = ?", aev.Id).Updates(assTarEiteCont)
}
}
}
}
}
qualTarEite := commonus.MapOut()
qualTarEite["q_depart"] = saveData["et_relevant_departments"]
qualTarEite["q_time"] = time.Now().Unix()
global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.QualitativeTarget{}).Where("`q_parent_id` = ?", requestData.Id).Updates(qualTarEite)
response.Result(0, saveData, "编辑成功!", c)
}
}