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

339 lines
12 KiB

package positionkpi
import (
"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"
"github.com/gin-gonic/gin"
)
// 岗位指标操作
// 入口
func (a *ApiMethod) Index(c *gin.Context) {
outPut := commonus.MapOut()
response.Result(0, outPut, "角色管理入口获取成功", c)
}
// 添加岗位指标
func (a *ApiMethod) AddPostTarget(c *gin.Context) {
var requestData addPostTarget
c.ShouldBindJSON(&requestData)
if requestData.Title == "" {
response.Result(100, requestData, "请输入指标名称!", c)
return
}
if requestData.Type == 0 {
requestData.Type = 2
}
if requestData.ScoringMethod == 0 {
requestData.ScoringMethod = 1
}
if requestData.RelevantDepartments == "" {
response.Result(101, requestData, "请选择该指标归属部门!", c)
return
}
if len(requestData.DepartmentsPost) < 1 {
response.Result(102, requestData, "请选择该指标归属岗位!", c)
return
}
if requestData.Dimension == "" {
response.Result(103, requestData, "请选择指标归属维度!", c)
return
}
if requestData.Unit == "" {
response.Result(104, requestData, "请输入该指标计算单位!", c)
return
}
if requestData.Cycle == 0 {
requestData.Cycle = 1
}
if requestData.CycleAttr == 0 {
requestData.CycleAttr = 1
}
var saveData assessmentmodel.PostTarget
saveData.Title = requestData.Title //标题"`
saveData.Type = requestData.Type //1:定性考核;2:定量考核"`
saveData.State = 1 //状态(1:启用;2:禁用;3:删除)"`
saveData.Time = time.Now().Unix() //创建时间"`
saveData.Share = 2 //1:共用;2:私用"`
departmentId, _ := strconv.ParseInt(requestData.RelevantDepartments, 10, 64)
saveData.ReleDepart = departmentId //相关部门"`
saveData.DepartmentsPost = strings.Join(requestData.DepartmentsPost, ",") //相关岗位"`
dimensionId, _ := strconv.ParseInt(requestData.Dimension, 10, 64)
saveData.Dimension = dimensionId //维度"`
saveData.Key = commonus.GetFileNumberEs() //UUID"`
saveData.Report = strings.Join(requestData.Report, ",") //上报人"`
saveData.Unit = requestData.Unit //单位"`
saveData.Cycle = requestData.Cycle //1:班;2:天;3:周;4:月;5:季度;6:年"`
saveData.Cycleattr = requestData.CycleAttr //辅助计数"`
saveData.ScoringMethod = requestData.ScoringMethod //计分方式(1:自动;2:手动)"`
saveData.VisibleRange = strings.Join(requestData.VisibleRange, ",") //可见范围"`
saveData.VisibleGroup = strings.Join(requestData.VisibleGroup, ",") //可见范围(集团)"`
err := global.GVA_DB_Performanceappraisal.Create(&saveData).Error
if err != nil {
response.Result(105, err.Error(), "数据写入失败!", c)
return
}
response.Result(0, saveData, "数据写入成功!", c)
}
// 编辑岗位指标
func (a *ApiMethod) EditPostTarget(c *gin.Context) {
var requestData editPostTargetCont
c.ShouldBindJSON(&requestData)
if requestData.Id == "" {
response.Result(100, requestData, "请输入指标名称!", c)
return
}
where := commonus.MapOut()
where["`id`"] = requestData.Id
var postTargetCont assessmentmodel.PostTarget
err := postTargetCont.GetCont(where)
if err != nil {
response.Result(100, requestData, "该指标不存在!", c)
return
}
saveData := commonus.MapOut()
if requestData.Title != "" && requestData.Title != postTargetCont.Title {
saveData["title"] = requestData.Title
}
if requestData.Type != 0 && requestData.Type != postTargetCont.Type {
saveData["type"] = requestData.Type
}
if requestData.ScoringMethod != 0 && requestData.ScoringMethod != postTargetCont.ScoringMethod {
saveData["scoring_method"] = requestData.ScoringMethod
}
if requestData.RelevantDepartments != "" {
departmentId, _ := strconv.ParseInt(requestData.RelevantDepartments, 10, 64)
if departmentId != postTargetCont.ReleDepart {
saveData["rele_depart"] = departmentId
}
}
if len(requestData.DepartmentsPost) > 0 {
departPostStr := strings.Join(requestData.DepartmentsPost, ",")
if departPostStr != postTargetCont.DepartmentsPost {
saveData["departments_post"] = departPostStr
}
}
if requestData.Dimension != "" {
dimensionId, _ := strconv.ParseInt(requestData.Dimension, 10, 64)
if dimensionId != postTargetCont.Dimension {
saveData["dimension"] = dimensionId
}
}
if len(requestData.Report) > 0 {
reportStr := strings.Join(requestData.Report, ",")
if reportStr != postTargetCont.Report {
saveData["report"] = reportStr
}
}
if requestData.Unit != "" && requestData.Unit != postTargetCont.Unit {
saveData["unit"] = requestData.Unit
}
if requestData.Cycle != 0 && requestData.Cycle != postTargetCont.Cycle {
saveData["cycle"] = requestData.Cycle
}
if requestData.CycleAttr != 0 && requestData.CycleAttr != postTargetCont.Cycleattr {
saveData["cycleattr"] = requestData.CycleAttr
}
if len(requestData.VisibleRange) > 0 {
visibleRangeStr := strings.Join(requestData.VisibleRange, ",")
if visibleRangeStr != postTargetCont.VisibleRange {
saveData["visible_range"] = visibleRangeStr
}
}
if len(requestData.VisibleGroup) > 0 {
visibleGroupStr := strings.Join(requestData.VisibleGroup, ",")
if visibleGroupStr != postTargetCont.VisibleGroup {
saveData["visible_group"] = visibleGroupStr
}
}
if len(saveData) > 0 {
saveData["time"] = time.Now().Unix()
saveErr := postTargetCont.EditCont(where, saveData)
if saveErr != nil {
response.Result(101, saveErr, "数据编辑失败!", c)
} else {
response.Result(0, saveData, "数据编辑成功!", c)
}
} else {
response.Result(0, saveData, "数据编辑成功!", c)
}
}
// 编辑岗位指标状态
func (a *ApiMethod) EditState(c *gin.Context) {
var requestData editState
c.ShouldBindJSON(&requestData)
if requestData.Id == "" {
response.Result(100, requestData, "请输入指标名称!", c)
return
}
if requestData.State == 0 {
requestData.State = 1
}
if requestData.IsTrue == 0 {
requestData.IsTrue = 2
}
where := commonus.MapOut()
where["`id`"] = requestData.Id
var postTargetCont assessmentmodel.PostTarget
err := postTargetCont.GetCont(where)
if err != nil {
response.Result(100, requestData, "该指标不存在!", c)
return
}
saveData := commonus.MapOut()
saveData["`state`"] = requestData.State
if requestData.State != 3 {
saveErr := postTargetCont.EditCont(where, saveData)
if saveErr != nil {
response.Result(101, saveErr, "数据编辑失败!", c)
return
}
} else {
if requestData.IsTrue == 1 {
err := postTargetCont.DelCont(where)
if err != nil {
response.Result(101, err, "数据编辑失败!", c)
return
}
} else {
saveErr := postTargetCont.EditCont(where, saveData)
if saveErr != nil {
response.Result(101, saveErr, "数据编辑失败!", c)
return
}
}
}
if postTargetCont.Type == 1 {
if requestData.State != 3 {
eidtDingXing(postTargetCont.Id, requestData.State)
} else {
if requestData.IsTrue == 1 {
var postSunTargetInfo assessmentmodel.PostSunTarget
postSunTargetInfo.DelCont(map[string]interface{}{"`parent_id`": postTargetCont.Id})
var postDetailsInfo assessmentmodel.PostTargetDetails
postDetailsInfo.DelCont(map[string]interface{}{"`parent_id`": postTargetCont.Id})
} else {
eidtDingXing(postTargetCont.Id, requestData.State)
}
}
}
response.Result(0, saveData, "数据编辑成功!", c)
}
// 编辑定性考核关联项目
/*
*/
func eidtDingXing(postTarKey int64, delVal int) {
var postSunTargetInfo assessmentmodel.PostSunTarget
postSunTargetInfo.EditCont(map[string]interface{}{"`parent_id`": postTarKey}, map[string]interface{}{"`state`": delVal, "`time`": time.Now().Unix()})
var postDetailsInfo assessmentmodel.PostTargetDetails
postDetailsInfo.EditCont(map[string]interface{}{"`parentid`": postTarKey}, map[string]interface{}{"`state`": delVal, "`time`": time.Now().Unix()})
}
// 岗位指标列表
func (a *ApiMethod) PostTargetList(c *gin.Context) {
var requestData postTargetList
c.ShouldBindJSON(&requestData)
if requestData.Page == 0 {
requestData.Page = 1
}
if requestData.PageSize == 0 {
requestData.PageSize = 20
}
var postTargetListAry []outPostTargetList
gormDb := global.GVA_DB_Performanceappraisal.Model(&assessmentmodel.PostTarget{})
if requestData.Title != "" {
gormDb = gormDb.Where("`title` LIKE ?", "%"+requestData.Title+"%")
}
if requestData.Type != 0 {
gormDb = gormDb.Where("`type` = ?", requestData.Type)
}
if requestData.ScoringMethod != 0 {
gormDb = gormDb.Where("`scoring_method` = ?", requestData.ScoringMethod)
}
if requestData.RelevantDepartments != "" {
gormDb = gormDb.Where("`rele_depart` = ?", requestData.RelevantDepartments)
}
if requestData.DepartmentsPost != "" {
gormDb = gormDb.Where("FIND_IN_SET(?,`departments_post`)", requestData.DepartmentsPost)
}
if requestData.Dimension != "" {
gormDb = gormDb.Where("`dimension` = ?", requestData.Dimension)
}
if requestData.Report != "" {
gormDb = gormDb.Where("FIND_IN_SET(?,`report`)", requestData.Report)
}
var total int64
totalErr := gormDb.Count(&total).Error
if totalErr != nil {
total = 0
}
err := gormDb.Order("`id` desc").Limit(requestData.PageSize).Offset(commonus.CalculatePages(requestData.Page, requestData.PageSize)).Find(&postTargetListAry).Error
if err != nil {
response.Result(103, err.Error(), "没有数据!", c)
}
for i, v := range postTargetListAry {
//关联维度
var dimCont assessmentmodel.DutyClass
dimCont.GetCont(map[string]interface{}{"`id`": v.Dimension}, "`title`")
postTargetListAry[i].DimensionName = dimCont.Title
//关联部门
var orgCont hrsystem.AdministrativeOrganization
orgCont.GetCont(map[string]interface{}{"`id`": v.ReleDepart}, "`name`")
postTargetListAry[i].DepartmentName = orgCont.Name
//岗位
if v.DepartmentsPost != "" {
postAry := strings.Split(v.DepartmentsPost, ",")
if len(postAry) > 0 {
var postContLost []hrsystem.AdministrativeOrganization
postErr := global.GVA_DB_HrDataBase.Model(&hrsystem.AdministrativeOrganization{}).Select("`id`,`name`").Where("`id` IN ?", postAry).Find(&postContLost).Error
if postErr == nil {
for _, pv := range postContLost {
var postInfo idAndName
postInfo.Id = strconv.FormatInt(pv.Id, 10)
postInfo.Name = pv.Name
postTargetListAry[i].PostAry = append(postTargetListAry[i].PostAry, postInfo)
}
}
}
}
//提报人
if v.Report != "" {
reportAry := strings.Split(v.Report, ",")
if len(reportAry) > 0 {
var peopleList []hrsystem.PersonArchives
peopleErr := global.GVA_DB_HrDataBase.Model(&hrsystem.PersonArchives{}).Select("`key`,`number`,`name`,`icon`").Where("`key` IN ?", reportAry).Find(&peopleList).Error
if peopleErr == nil {
for _, manv := range peopleList {
var namCont reportUser
namCont.Id = strconv.FormatInt(manv.Id, 10)
namCont.Name = manv.Name
namCont.Number = manv.Number
namCont.Icon = manv.Icon
postTargetListAry[i].ReportAry = append(postTargetListAry[i].ReportAry, namCont)
}
}
}
}
}
countSum := len(postTargetListAry)
printData := commonus.OutPutList(total, int64(countSum), requestData.Page, requestData.PageSize, postTargetListAry)
response.Result(0, printData, "查询成功!", c)
}