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

220 lines
9.0 KiB

package departmentpc
import (
"fmt"
"key_performance_indicators/models/modelshr"
"key_performance_indicators/models/modelskpi"
"key_performance_indicators/overall"
"key_performance_indicators/overall/publicmethod"
"strconv"
"strings"
"time"
"github.com/gin-gonic/gin"
)
// 部门指标列表
func (a *ApiMethod) DepartmentTargetList(c *gin.Context) {
var receivedValue departListQuery
c.ShouldBindJSON(&receivedValue)
if receivedValue.Page == 0 {
receivedValue.Page = 1
}
if receivedValue.PageSize == 0 {
receivedValue.PageSize = 20
}
gormDb := overall.CONSTANT_DB_KPI.Model(&modelskpi.EvaluationTarget{})
if receivedValue.State != 0 { //状态(1:启用;2:禁用;3:删除)
gormDb = gormDb.Where("et_state = ?", receivedValue.State)
} else {
gormDb = gormDb.Where("et_state BETWEEN ? AND ?", 1, 2)
}
if receivedValue.Title != "" { //指标名称
gormDb = gormDb.Where("et_state LIKE ?", "%"+receivedValue.Title+"%")
}
if receivedValue.Class != 0 { //1:定性考核;2:定量考核
gormDb = gormDb.Where("et_type = ?", receivedValue.Class)
}
if receivedValue.DepartmentId != "" { //部门ID
gormDb = gormDb.Where("FIND_IN_SET(?,`departments_post`)", receivedValue.DepartmentId)
}
if receivedValue.DimensionId != "" { //维度ID
gormDb = gormDb.Where("et_dimension = ?", receivedValue.DimensionId)
}
if receivedValue.ReportPerson != "" { //上报人
gormDb = gormDb.Where("FIND_IN_SET(?,`et_report`)", receivedValue.ReportPerson)
}
if receivedValue.ScoringMethod != 0 { //计分方式(1:自动;2:手动)
gormDb = gormDb.Where("et_scoring_method = ?", receivedValue.ScoringMethod)
}
if receivedValue.Cycle != 0 { //1:班;2:天;3:周;4:月;5:季度;6:年
gormDb = gormDb.Where("et_cycle = ?", receivedValue.Cycle)
}
var total int64
totalErr := gormDb.Count(&total).Error
if totalErr != nil {
total = 0
}
var departmentTargetList []modelskpi.EvaluationTarget
gormDb = publicmethod.PageTurningSettings(gormDb, receivedValue.Page, receivedValue.PageSize)
err := gormDb.Order("`et_id` DESC").Find(&departmentTargetList).Error
if err != nil {
publicmethod.Result(105, err, c)
return
}
var targetList []printDepartmentTarget
for _, v := range departmentTargetList {
var targetCont printDepartmentTarget
targetCont.Id = v.Id
targetCont.Title = v.Title //指标名称"`
targetCont.Type = v.Type //1:定性考核;2:定量考核"`
targetCont.State = v.State //状态(1:启用;2:禁用;3:删除)"`
targetCont.AddTime = v.AddTime //制定时间"`
targetCont.Share = v.Share //1:共用;2:私用"`
targetCont.RelevantDepartments = v.RelevantDepartments //相关部门"`
targetCont.Dimension = v.Dimension //维度"`
targetCont.Key = v.Key //UUID"`
targetCont.Report = v.Report //上报人"`
targetCont.Uniteing = v.Uniteing //计量单位"`
targetCont.Cycles = v.Cycles //1:班;2:天;3:周;4:月;5:季度;6:年"`
targetCont.CycleAttres = v.CycleAttres //辅助计数"`
targetCont.VisibleRange = v.VisibleRange //可见范围"`
targetCont.VisibleRangeGroup = v.VisibleRangeGroup //可见范围(集团)"`
targetCont.ScoringMethod = v.ScoringMethod //计分方式(1:自动;2:手动)"`
var dutyClassCont modelskpi.DutyClass
dutyClassCont.GetCont(map[string]interface{}{"`id`": v.Dimension}, "`title`")
targetCont.DimensionTitle = dutyClassCont.Title
targetList = append(targetList, targetCont)
}
publicmethod.ResultList(0, receivedValue.Page, receivedValue.PageSize, total, int64(len(targetList)), targetList, c)
}
// 实验查询
func (a *ApiMethod) Shiyan(c *gin.Context) {
// var receivedValue departListQuery
// c.ShouldBindJSON(&receivedValue)
// if receivedValue.DepartmentId == "" {
// receivedValue.DepartmentId = "316"
// }
// if receivedValue.DimensionId == "" {
// receivedValue.DimensionId = "1"
// }
// var evalCont []modelskpi.EvaluationTarget
// // gormDb := overall.CONSTANT_DB_KPI.Model(&modelskpi.EvaluationTarget{}).Select("evaluationtarget.*,(?) AS tdm", overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetDepartment{}).Select("id").Where("department_id = ? AND target_id = et_id ", receivedValue.DepartmentId).Find(&modelskpi.TargetDepartment{})).Having("tdm IS NOT NULL").Find(&evalCont).Error
// // fmt.Printf("gormDb----->%v----->%v\n", gormDb, evalCont)
// err := overall.CONSTANT_DB_KPI.Raw("SELECT e.*,(SELECT id FROM target_department td WHERE td.department_id = ? AND td.post_id = ? AND td.target_id = e.et_id) as tdm FROM evaluationtarget e HAVING tdm IS NOT NULL", receivedValue.DepartmentId, receivedValue.DimensionId).Scan(&evalCont).Error
// fmt.Printf("gormDb----->%v----->%v\n", err, evalCont)
//校正部门级考核
var dimeTargetList []modelskpi.DetailedTarget
err := overall.CONSTANT_DB_KPI.Where("dt_state = 1").Find(&dimeTargetList).Error
if err != nil || len(dimeTargetList) < 1 {
publicmethod.Result(107, err, c)
return
}
// fmt.Printf("总数---->%v\n", len(dimeTargetList))
// var xieChengChuli []modelskpi.DetailedTarget
// for i, v := range dimeTargetList {
// if (i+1)%100 == 0 {
// xieChengChuli = append(xieChengChuli, v)
// fmt.Printf("循环--%v-->%v\n", i, len(xieChengChuli))
// xieChengChuli = []modelskpi.DetailedTarget{}
// } else {
// xieChengChuli = append(xieChengChuli, v)
// }
// }
for _, v := range dimeTargetList {
xiaoZhengBuMen(v)
}
fmt.Printf("jieshu---->%v\n", len(dimeTargetList))
}
// 校正部门定性考核关联关系
func xiaoZhengBuMen(detaTar modelskpi.DetailedTarget) {
if detaTar.Paretment != "" {
bumenAry := strings.Split(detaTar.Paretment, ",")
if len(bumenAry) > 0 {
for _, v := range bumenAry {
zbLmXzBm(detaTar.ParentId, detaTar.ParentIdSun, detaTar.Id, 3, v)
}
}
}
}
//编辑指标、栏目、细则关联部门
/*
@tarId 指标
@sunId 栏目
@lawsId 细则
@class 类型(1:指标;2:子目标;3:细则)
@bumenId 部门
*/
func zbLmXzBm(tarId, sunId, lawsId int64, class int, bumenId string) {
var tarDepCont modelskpi.TargetDepartment
where := publicmethod.MapOut[string]()
where["`target_id`"] = tarId
where["`target_sun_id`"] = sunId
where["`target_bylaws`"] = lawsId
where["`department_id`"] = bumenId
err := tarDepCont.GetCont(where, "`id`", "`state`")
if err == nil {
//存在,判断状态
if tarDepCont.State != 1 { //不是启用状态,改为启用
eidtWher := publicmethod.MapOut[string]()
eidtWher["``id``"] = tarDepCont.Id
saveErr := tarDepCont.EiteCont(eidtWher, map[string]interface{}{"`state`": 1, "`time`": time.Now().Unix()})
fmt.Printf("编辑---->tarId----%v---->sunId----%v---->lawsId----%v---->class----%v---->bumenId----%v------>saveErr----->%v\n", tarId, sunId, lawsId, class, bumenId, saveErr)
}
} else {
tarDepCont.TargetId = tarId //指标ID"`
tarDepCont.TargetSunId = sunId //子目标"`
tarDepCont.TargetBylaws = lawsId //指标细则"`
tarDepCont.Type = class //类型(1:指标;2:子目标;3:细则)"`
bumenIdInt, _ := strconv.ParseInt(bumenId, 10, 64)
tarDepCont.DepartmentId = bumenIdInt //部门ID"`
tarDepCont.PostId = 0 //岗位ID"`
tarDepCont.ReportPerson = "" //上报人"`
tarDepCont.State = 1 //状态(1:启用;2:禁用;3:删除)"`
tarDepCont.Time = time.Now().Unix() //写入时间"`
addErr := overall.CONSTANT_DB_KPI.Create(&tarDepCont).Error
fmt.Printf("编辑---->tarId----%v---->sunId----%v---->lawsId----%v---->class----%v---->bumenId----%v------>saveErr----->%v\n", tarId, sunId, lawsId, class, bumenId, addErr)
}
}
// 获取部门定性考核部门关联列表
func (a *ApiMethod) GetDepartAboutTarget(c *gin.Context) {
var receivedValue publicmethod.PublicId
err := c.ShouldBindJSON(&receivedValue)
if err != nil {
publicmethod.Result(100, err, c)
return
}
var targetDepartmentID []int64
disrErr := overall.CONSTANT_DB_KPI.Model(&modelskpi.TargetDepartment{}).Distinct("`department_id`").Where("`state` = 1 AND `target_id` = ?", receivedValue.Id).Find(&targetDepartmentID).Error
if disrErr != nil {
publicmethod.Result(107, err, c)
return
}
var departmentList []modelshr.AdministrativeOrganization
departErr := overall.CONSTANT_DB_HR.Model(&modelshr.AdministrativeOrganization{}).Select("`id`,`name`,`superior`,`ispower`").Where("`id` IN ?", targetDepartmentID).Find(&departmentList).Error
if departErr != nil || len(departmentList) < 1 {
publicmethod.Result(107, err, c)
return
}
var outList []departOutcome
for _, v := range departmentList {
var outCont departOutcome
outCont.Id = strconv.FormatInt(v.Id, 10)
outCont.Name = v.Name
outCont.Superior = strconv.FormatInt(v.Superior, 10)
outCont.Ispower = v.IsPower
outList = append(outList, outCont)
}
publicmethod.Result(0, outList, c)
}