作者 郑周

1. 评估内容中,新增字段 项目主导人ID字段

2. excel文件解析 项目主导人名称->ID
... ... @@ -41,7 +41,7 @@ type NodeContent struct {
PromptText string `json:"promptText" comment:"提示项正文"`
EntryItems []*EntryItem `json:"entryItems" comment:"填写项"`
Required int `json:"required" comment:"必填项"`
LeaderId int64 `json:"leaderId,string" comment:"项目主导人"`
EvaluatorId int64 `json:"evaluatorId,string" comment:"项目评估人ID ( 0=无评估人、-1=HRBP )"`
}
// LinkNode 评估流程、环节
... ...
... ... @@ -6,26 +6,28 @@ import (
)
type PerformanceApplicationForm struct {
DimensionName string //维度名称
ModuleName string //模块名称
Weight string //权重
Standard string //标准
Task string //任务、指标
Definition string //定义
DimensionName string // 维度名称
ModuleName string // 模块名称
Weight string // 权重
Standard string // 标准
Task string // 任务、指标
Definition string // 定义
Required string // 是否必填 是 否
Evaluator string // 项目评估人
}
type PerformanceDimension struct {
Name string `json:"name"` //维度名称
PerformanceModule []*PerformanceModule `json:"performanceModule"` //模块
Name string `json:"name"` // 维度名称
PerformanceModule []*PerformanceModule `json:"performanceModule"` // 模块
}
type PerformanceModule struct {
ModuleName string `json:"moduleName"` //模块名称
Weight string `json:"weight"` //权重
Standard string `json:"standard"` //标准(结构化的成果描述)
Target []*PerformanceTarget `json:"performanceTarget"` //任务\指标
ModuleName string `json:"moduleName"` // 模块名称
Weight string `json:"weight"` // 权重
Standard string `json:"standard"` // 标准(结构化的成果描述)
Target []*PerformanceTarget `json:"performanceTarget"` // 任务\指标
Required int `json:"required"` // 是否必填
Evaluator string `json:"evaluator"` // 项目评估人
}
type PerformanceTarget struct {
... ... @@ -35,7 +37,7 @@ type PerformanceTarget struct {
func LoadPerformanceDimensions(rows [][]string) ([]*PerformanceDimension, error) {
formRows := make([]*PerformanceApplicationForm, 0)
var dimensionName, moduleName, taskName, weightName, standardName string
var dimensionName, moduleName, taskName, weightName, standardName, evaluator string
required := "是"
for key, item := range rows {
if key < 3 {
... ... @@ -88,6 +90,13 @@ func LoadPerformanceDimensions(rows [][]string) ([]*PerformanceDimension, error)
required = strings.TrimSpace(item[9])
}
form.Required = required
// 项目评估人
if len(item) > 10 && item[10] != "" {
evaluator = strings.TrimSpace(item[10])
}
form.Evaluator = evaluator
formRows = append(formRows, form)
}
dimensions := make([]*PerformanceDimension, 0)
... ... @@ -156,12 +165,17 @@ func loadPerformanceModule(forms []*PerformanceApplicationForm) ([]*PerformanceM
if err != nil {
return modules, err
}
evaluator, err := getEvaluator(item)
if err != nil {
return modules, err
}
module := &PerformanceModule{
ModuleName: moduleName,
Weight: weightName,
Standard: standardName,
Target: tasks,
Required: required,
Evaluator: evaluator,
}
modules = append(modules, module)
}
... ... @@ -235,6 +249,23 @@ func getRequired(items []*PerformanceApplicationForm) (int, error) {
}
}
// 获取项目评估人
func getEvaluator(items []*PerformanceApplicationForm) (string, error) {
if len(items) <= 0 {
return "", nil
}
var prevName string
for _, item := range items {
if prevName == "" {
prevName = item.Evaluator
}
if prevName != item.Evaluator {
return "", errors.New(item.ModuleName + " 对应的项目评估人填不一致")
}
}
return prevName, nil
}
// 获取任务
func getTasks(items []*PerformanceApplicationForm) ([]*PerformanceTarget, error) {
tasks := make([]*PerformanceTarget, 0)
... ...
... ... @@ -133,6 +133,9 @@ func (repo *UserRepository) Find(queryOptions map[string]interface{}) (int, []*d
if v, ok := queryOptions["name"].(string); ok && len(v) > 0 {
query.Where("name like ?", fmt.Sprintf("%%%v%%", v))
}
if v, ok := queryOptions["names"]; ok {
query.Where("name in(?)", pg.In(v))
}
if v, ok := queryOptions["offset"]; ok {
if value, ok := v.(int); ok {
query.Offset(value)
... ...
... ... @@ -65,6 +65,8 @@ func (controller *ImportController) parseTemplateNodeContent(data []*domain.Perf
}()
// 获取当前公司下的默认规则
ua := middlewares.GetUser(controller.Ctx)
// 系统默认规则确认
ruleRepository := factory.CreateEvaluationRuleRepository(map[string]interface{}{"transactionContext": transactionContext})
_, rules, err := ruleRepository.Find(map[string]interface{}{"companyId": ua.CompanyId, "sysType": domain.EvaluationSysTypeSystem, "limit": 1})
if err != nil {
... ... @@ -85,6 +87,10 @@ func (controller *ImportController) parseTemplateNodeContent(data []*domain.Perf
ruleId = rules[0].Id
}
// 评估内容主导人名称
evaluatorNames := make([]string, 0)
evaluatorMap := map[string]string{}
for i := range data {
dimension := data[i]
for i2 := range dimension.PerformanceModule {
... ... @@ -122,9 +128,46 @@ func (controller *ImportController) parseTemplateNodeContent(data []*domain.Perf
// 必填项
nc.Required = module.Required
// 项目评估人
if module.Evaluator == "HRBP" {
nc.EvaluatorId = -1
} else {
if len(module.Evaluator) > 0 {
evaluatorNames = append(evaluatorNames, module.Evaluator) // 项目评估人名称数组
evaluatorMap[nc.Category+nc.Name] = module.Evaluator // k,v = (类别+名称, 项目评估人名称)
}
}
nodeContents = append(nodeContents, nc)
}
}
if len(evaluatorNames) > 0 {
userRepository := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext})
_, users, err := userRepository.Find(map[string]interface{}{"companyId": ua.CompanyId, "names": evaluatorNames})
if err != nil {
return nodeContents
}
nameIdMap := map[string]int64{}
for i := range users {
nameIdMap[users[i].Name] = users[i].Id
}
// 名称 -> ID
var nc *domain.NodeContent
for i := range nodeContents {
nc = nodeContents[i]
if nc.EvaluatorId == -1 { // HRBP
continue
}
if evaluatorName, ok := evaluatorMap[nc.Category+nc.Name]; ok {
if userId, ok := nameIdMap[evaluatorName]; ok {
nc.EvaluatorId = userId
}
}
}
}
return nodeContents
}
... ...