作者 郑周

1.周期模型 重构

  1 +package command
  2 +
  3 +import (
  4 + "github.com/beego/beego/v2/core/validation"
  5 + "time"
  6 +)
  7 +
  8 +type CreateCycleCommand struct {
  9 + CompanyId int64 `cname:"公司ID" json:"companyId"`
  10 + CreatorId int64 `cname:"创建人ID" json:"creatorId"`
  11 + Name string `cname:"周期名称" json:"name" valid:"Required"`
  12 + TimeStart *time.Time `cname:"起始时间" json:"timeStart"`
  13 + TimeEnd *time.Time `cname:"截至时间" json:"timeEnd"`
  14 + KpiCycle int `cname:"考核周期(0日、1周、2月)" json:"kpiCycle" valid:"Required"`
  15 + TemplateIds []string `cname:"周期使用模板ID" json:"templateIds"`
  16 +}
  17 +
  18 +func (in *CreateCycleCommand) Valid(validation *validation.Validation) {
  19 + if in.CompanyId == 0 {
  20 + validation.SetError("companyId", "公司ID无效")
  21 + return
  22 + }
  23 + if in.CreatorId == 0 {
  24 + validation.SetError("creatorId", "创建人ID无效")
  25 + return
  26 + }
  27 + if len(in.Name) > 40 {
  28 + validation.SetError("name", "角色名称最大长度40个字符")
  29 + return
  30 + }
  31 + if in.TimeStart == nil {
  32 + validation.SetError("timeStart", "请选择考核周期的开始时间")
  33 + return
  34 + }
  35 + if in.TimeEnd == nil {
  36 + validation.SetError("timeEnd", "请选择考核周期的结束时间")
  37 + return
  38 + }
  39 + if len(in.TemplateIds) == 0 {
  40 + validation.SetError("templates", "请选择周期内使用的评估模板")
  41 + return
  42 + }
  43 +}
  1 +package command
  2 +
  3 +import "github.com/beego/beego/v2/core/validation"
  4 +
  5 +type DeleteCycleCommand struct {
  6 + Id int64 `cname:"周期ID" json:"id,string" valid:"Required"`
  7 +}
  8 +
  9 +func (in *DeleteCycleCommand) Valid(*validation.Validation) {
  10 +
  11 +}
  1 +package command
  2 +
  3 +import "github.com/beego/beego/v2/core/validation"
  4 +
  5 +type GetCycleCommand struct {
  6 + Id int64 `cname:"周期Id" json:"id,string" valid:"Required"`
  7 +}
  8 +
  9 +func (in *GetCycleCommand) Valid(*validation.Validation) {
  10 +
  11 +}
  1 +package command
  2 +
  3 +import "github.com/beego/beego/v2/core/validation"
  4 +
  5 +type QueryCycleCommand struct {
  6 + CompanyId int64 `cname:"公司ID" json:"companyId"`
  7 + PageNumber int `cname:"分页页码" json:"pageNumber" valid:"Required"`
  8 + PageSize int `cname:"分页数量" json:"pageSize" valid:"Required"`
  9 +}
  10 +
  11 +func (in *QueryCycleCommand) Valid(validation *validation.Validation) {
  12 + if in.CompanyId == 0 {
  13 + validation.SetError("companyId", "公司ID无效")
  14 + return
  15 + }
  16 +}
  1 +package command
  2 +
  3 +import (
  4 + "github.com/beego/beego/v2/core/validation"
  5 + "time"
  6 +)
  7 +
  8 +type UpdateCycleCommand struct {
  9 + CompanyId int64 `cname:"公司ID" json:"companyId"`
  10 + Id int64 `cname:"周期ID" json:"id,string" valid:"Required"`
  11 + Name string `cname:"周期名称" json:"name" valid:"Required"`
  12 + TimeStart *time.Time `cname:"起始时间" json:"timeStart"`
  13 + TimeEnd *time.Time `cname:"截至时间" json:"timeEnd"`
  14 + KpiCycle int `cname:"考核周期(0日、1周、2月)" json:"kpiCycle" valid:"Required"`
  15 + TemplateIds []string `cname:"周期使用模板ID" json:"templateIds"`
  16 +}
  17 +
  18 +func (in *UpdateCycleCommand) Valid(validation *validation.Validation) {
  19 + if len(in.Name) > 40 {
  20 + validation.SetError("name", "角色名称最大长度40个字符")
  21 + return
  22 + }
  23 + if in.TimeStart == nil {
  24 + validation.SetError("timeStart", "请选择考核周期的开始时间")
  25 + return
  26 + }
  27 + if in.TimeEnd == nil {
  28 + validation.SetError("timeEnd", "请选择考核周期的结束时间")
  29 + return
  30 + }
  31 + if len(in.TemplateIds) == 0 {
  32 + validation.SetError("templates", "请选择周期内使用的评估模板")
  33 + return
  34 + }
  35 +}
  1 +package service
  2 +
  3 +import (
  4 + "github.com/linmadan/egglib-go/core/application"
  5 + "github.com/linmadan/egglib-go/utils/tool_funs"
  6 + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/evaluation_cycle/command"
  7 + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory"
  8 + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
  9 + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/utils"
  10 +)
  11 +
  12 +type EvaluationCycleService struct {
  13 +}
  14 +
  15 +func NewEvaluationCycleService() *EvaluationCycleService {
  16 + newRoleService := &EvaluationCycleService{}
  17 + return newRoleService
  18 +}
  19 +
  20 +// Create 创建
  21 +func (rs *EvaluationCycleService) Create(in *command.CreateCycleCommand) (interface{}, error) {
  22 + transactionContext, err := factory.ValidateStartTransaction(in)
  23 + if err != nil {
  24 + return nil, err
  25 + }
  26 + defer func() {
  27 + transactionContext.RollbackTransaction()
  28 + }()
  29 + cycleRepository := factory.CreateEvaluationCycleRepository(map[string]interface{}{"transactionContext": transactionContext})
  30 + templateRepository := factory.CreateEvaluationTemplateRepository(map[string]interface{}{"transactionContext": transactionContext})
  31 +
  32 + // 检测名称重复
  33 + count, err := cycleRepository.Count(map[string]interface{}{"name": in.Name, "companyId": in.CompanyId})
  34 + if err != nil {
  35 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  36 + }
  37 + if count > 0 {
  38 + return nil, application.ThrowError(application.BUSINESS_ERROR, "名称已存在")
  39 + }
  40 +
  41 + _, templates, err := templateRepository.Find(map[string]interface{}{"companyId": in.CompanyId, "ids": in.TemplateIds})
  42 + if err != nil {
  43 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  44 + }
  45 + if len(templates) == 0 {
  46 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "模板不存在, 请重新选择")
  47 + }
  48 +
  49 + newCycle := &domain.EvaluationCycle{
  50 + Id: 0,
  51 + Name: in.Name,
  52 + TimeStart: in.TimeStart,
  53 + TimeEnd: in.TimeEnd,
  54 + CompanyId: in.CompanyId,
  55 + CreatorId: in.CreatorId,
  56 + KpiCycle: in.KpiCycle,
  57 + Templates: templates,
  58 + }
  59 + rule, err := cycleRepository.Insert(newCycle)
  60 + if err != nil {
  61 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  62 + }
  63 + if err := transactionContext.CommitTransaction(); err != nil {
  64 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  65 + }
  66 + return rule, nil
  67 +
  68 +}
  69 +
  70 +func (rs *EvaluationCycleService) Update(in *command.UpdateCycleCommand) (interface{}, error) {
  71 + transactionContext, err := factory.ValidateStartTransaction(in)
  72 + if err != nil {
  73 + return nil, err
  74 + }
  75 + defer func() {
  76 + transactionContext.RollbackTransaction()
  77 + }()
  78 +
  79 + cycleRepository := factory.CreateEvaluationCycleRepository(map[string]interface{}{"transactionContext": transactionContext})
  80 + templateRepository := factory.CreateEvaluationTemplateRepository(map[string]interface{}{"transactionContext": transactionContext})
  81 +
  82 + // 检测名称重复(排除自己)
  83 + count, err := cycleRepository.Count(map[string]interface{}{"name": in.Name, "companyId": in.CompanyId, "notId": in.Id})
  84 + if err != nil {
  85 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  86 + }
  87 + if count > 0 {
  88 + return nil, application.ThrowError(application.BUSINESS_ERROR, "名称已存在")
  89 + }
  90 +
  91 + cycle, err := cycleRepository.FindOne(map[string]interface{}{"id": in.Id})
  92 + if err != nil {
  93 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  94 + }
  95 +
  96 + _, templates, err := templateRepository.Find(map[string]interface{}{"companyId": in.CompanyId, "ids": in.TemplateIds})
  97 + if err != nil {
  98 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  99 + }
  100 + if len(templates) == 0 {
  101 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "模板不存在, 请重新选择")
  102 + }
  103 + cycle.Name = in.Name
  104 + cycle.TimeStart = in.TimeStart
  105 + cycle.TimeEnd = in.TimeEnd
  106 + cycle.KpiCycle = in.KpiCycle
  107 + cycle.Templates = templates
  108 +
  109 + cycle, err = cycleRepository.Insert(cycle)
  110 + if err != nil {
  111 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  112 + }
  113 + if err := transactionContext.CommitTransaction(); err != nil {
  114 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  115 + }
  116 + return cycle, nil
  117 +}
  118 +
  119 +func (rs *EvaluationCycleService) Get(in *command.GetCycleCommand) (interface{}, error) {
  120 + // Get 不需要事务
  121 + if err := utils.ValidateCommand(in); err != nil {
  122 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  123 + }
  124 + transactionContext, err := factory.CreateTransactionContext(nil)
  125 + if err != nil {
  126 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  127 + }
  128 + cycleRepository := factory.CreateEvaluationCycleRepository(map[string]interface{}{"transactionContext": transactionContext})
  129 + cycle, err := cycleRepository.FindOne(map[string]interface{}{"id": in.Id})
  130 + if err != nil {
  131 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  132 + }
  133 + return cycle, nil
  134 +}
  135 +
  136 +func (rs *EvaluationCycleService) Remove(in *command.DeleteCycleCommand) (interface{}, error) {
  137 + transactionContext, err := factory.ValidateStartTransaction(in)
  138 + if err != nil {
  139 + return nil, err
  140 + }
  141 + defer func() {
  142 + transactionContext.RollbackTransaction()
  143 + }()
  144 +
  145 + cycleRepository := factory.CreateEvaluationCycleRepository(map[string]interface{}{"transactionContext": transactionContext})
  146 +
  147 + cycle, err := cycleRepository.FindOne(map[string]interface{}{"id": in.Id})
  148 + if err != nil {
  149 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  150 + }
  151 + if _, err := cycleRepository.Remove(cycle); err != nil {
  152 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  153 + }
  154 +
  155 + if err := transactionContext.CommitTransaction(); err != nil {
  156 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  157 + }
  158 + return cycle, nil
  159 +}
  160 +
  161 +func (rs *EvaluationCycleService) List(in *command.QueryCycleCommand) (interface{}, error) {
  162 + transactionContext, err := factory.StartTransaction()
  163 + if err != nil {
  164 + return nil, err
  165 + }
  166 + defer func() {
  167 + transactionContext.RollbackTransaction()
  168 + }()
  169 + cycleRepository := factory.CreateEvaluationCycleRepository(map[string]interface{}{"transactionContext": transactionContext})
  170 + // FIXME 总数量是否使用Count获取一个总数量
  171 + count, cycles, err := cycleRepository.Find(tool_funs.SimpleStructToMap(in), "templates")
  172 + if err != nil {
  173 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  174 + }
  175 + return tool_funs.SimpleWrapGridMap(count, cycles), nil
  176 +}
@@ -3,9 +3,10 @@ package command @@ -3,9 +3,10 @@ package command
3 import "github.com/beego/beego/v2/core/validation" 3 import "github.com/beego/beego/v2/core/validation"
4 4
5 type QueryRuleCommand struct { 5 type QueryRuleCommand struct {
6 - CompanyId int64 `cname:"公司ID" json:"companyId"`  
7 - PageNumber int `cname:"分页页码" json:"pageNumber" valid:"Required"`  
8 - PageSize int `cname:"分页数量" json:"pageSize" valid:"Required"` 6 + CompanyId int64 `cname:"公司ID" json:"companyId"`
  7 + NameOrRemark string `cname:"规则名称或备注" json:"nameOrRemark"`
  8 + PageNumber int `cname:"分页页码" json:"pageNumber" valid:"Required"`
  9 + PageSize int `cname:"分页数量" json:"pageSize" valid:"Required"`
9 } 10 }
10 11
11 func (in *QueryRuleCommand) Valid(validation *validation.Validation) { 12 func (in *QueryRuleCommand) Valid(validation *validation.Validation) {
@@ -150,8 +150,12 @@ func (rs *EvaluationRuleService) List(in *command.QueryRuleCommand) (interface{} @@ -150,8 +150,12 @@ func (rs *EvaluationRuleService) List(in *command.QueryRuleCommand) (interface{}
150 transactionContext.RollbackTransaction() 150 transactionContext.RollbackTransaction()
151 }() 151 }()
152 ruleRepository := factory.CreateEvaluationRuleRepository(map[string]interface{}{"transactionContext": transactionContext}) 152 ruleRepository := factory.CreateEvaluationRuleRepository(map[string]interface{}{"transactionContext": transactionContext})
  153 + inMap := tool_funs.SimpleStructToMap(in)
  154 + if len(in.NameOrRemark) > 0 {
  155 + inMap["nameOrRemark"] = "%" + in.NameOrRemark + "%"
  156 + }
153 // FIXME 总数量是否使用Count获取一个总数量 157 // FIXME 总数量是否使用Count获取一个总数量
154 - count, rules, err := ruleRepository.Find(tool_funs.SimpleStructToMap(in)) 158 + count, rules, err := ruleRepository.Find(inMap)
155 if err != nil { 159 if err != nil {
156 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 160 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
157 } 161 }
@@ -3,9 +3,10 @@ package command @@ -3,9 +3,10 @@ package command
3 import "github.com/beego/beego/v2/core/validation" 3 import "github.com/beego/beego/v2/core/validation"
4 4
5 type QueryTemplateCommand struct { 5 type QueryTemplateCommand struct {
6 - CompanyId int64 `cname:"公司ID" json:"companyId"`  
7 - PageNumber int `cname:"分页页码" json:"pageNumber" valid:"Required"`  
8 - PageSize int `cname:"分页数量" json:"pageSize" valid:"Required"` 6 + CompanyId int64 `cname:"公司ID" json:"companyId"`
  7 + Name string `cname:"模板名称" json:"name"`
  8 + PageNumber int `cname:"分页页码" json:"pageNumber" valid:"Required"`
  9 + PageSize int `cname:"分页数量" json:"pageSize" valid:"Required"`
9 } 10 }
10 11
11 func (in *QueryTemplateCommand) Valid(validation *validation.Validation) { 12 func (in *QueryTemplateCommand) Valid(validation *validation.Validation) {
@@ -6,12 +6,12 @@ import ( @@ -6,12 +6,12 @@ import (
6 ) 6 )
7 7
8 type UpdateTemplateCommand struct { 8 type UpdateTemplateCommand struct {
9 - Id int64 `cname:"模板ID" json:"id,string" valid:"Required"`  
10 - CompanyId int64 `cname:"公司ID" json:"companyId"`  
11 - CreatorId int64 `cname:"创建人ID" json:"creatorId"`  
12 - Name string `cname:"模板名称" json:"name" valid:"Required"`  
13 - Describe string `cname:"模板描述" json:"remark"`  
14 - LinkNodes []domain.LinkNode `cname:"评估流程" json:"linkNodes"` 9 + Id int64 `cname:"模板ID" json:"id,string" valid:"Required"`
  10 + CompanyId int64 `cname:"公司ID" json:"companyId"`
  11 + CreatorId int64 `cname:"创建人ID" json:"creatorId"`
  12 + Name string `cname:"模板名称" json:"name" valid:"Required"`
  13 + Describe string `cname:"模板描述" json:"remark"`
  14 + LinkNodes []*domain.LinkNode `cname:"评估流程" json:"linkNodes"`
15 } 15 }
16 16
17 func (in *UpdateTemplateCommand) Valid(validation *validation.Validation) { 17 func (in *UpdateTemplateCommand) Valid(validation *validation.Validation) {
@@ -37,28 +37,28 @@ func (rs *EvaluationTemplateService) Create(in *command.CreateTemplateCommand) ( @@ -37,28 +37,28 @@ func (rs *EvaluationTemplateService) Create(in *command.CreateTemplateCommand) (
37 return nil, application.ThrowError(application.BUSINESS_ERROR, "名称已存在") 37 return nil, application.ThrowError(application.BUSINESS_ERROR, "名称已存在")
38 } 38 }
39 39
40 - linkNodes := make([]domain.LinkNode, 0)  
41 - linkNodes = append(linkNodes, domain.LinkNode{ 40 + linkNodes := make([]*domain.LinkNode, 0)
  41 + linkNodes = append(linkNodes, &domain.LinkNode{
42 Type: domain.LinkNodeAssessment, 42 Type: domain.LinkNodeAssessment,
43 Name: "填写自评反馈", 43 Name: "填写自评反馈",
44 KpiCycle: domain.KpiCycleDay, 44 KpiCycle: domain.KpiCycleDay,
45 }) 45 })
46 - linkNodes = append(linkNodes, domain.LinkNode{ 46 + linkNodes = append(linkNodes, &domain.LinkNode{
47 Type: domain.LinkNodeAllInvite, 47 Type: domain.LinkNodeAllInvite,
48 Name: "360°邀请", 48 Name: "360°邀请",
49 KpiCycle: domain.KpiCycleDay, 49 KpiCycle: domain.KpiCycleDay,
50 }) 50 })
51 - linkNodes = append(linkNodes, domain.LinkNode{ 51 + linkNodes = append(linkNodes, &domain.LinkNode{
52 Type: domain.LinkNodeAssessment, 52 Type: domain.LinkNodeAssessment,
53 Name: "360°评估", 53 Name: "360°评估",
54 KpiCycle: domain.KpiCycleDay, 54 KpiCycle: domain.KpiCycleDay,
55 }) 55 })
56 - linkNodes = append(linkNodes, domain.LinkNode{ 56 + linkNodes = append(linkNodes, &domain.LinkNode{
57 Type: domain.LinkNodeAssessment, 57 Type: domain.LinkNodeAssessment,
58 Name: "上级评估", 58 Name: "上级评估",
59 KpiCycle: domain.KpiCycleDay, 59 KpiCycle: domain.KpiCycleDay,
60 }) 60 })
61 - linkNodes = append(linkNodes, domain.LinkNode{ 61 + linkNodes = append(linkNodes, &domain.LinkNode{
62 Type: domain.LinkNodeViewResult, 62 Type: domain.LinkNodeViewResult,
63 Name: "绩效结果查看", 63 Name: "绩效结果查看",
64 KpiCycle: domain.KpiCycleDay, 64 KpiCycle: domain.KpiCycleDay,
@@ -174,8 +174,13 @@ func (rs *EvaluationTemplateService) List(in *command.QueryTemplateCommand) (int @@ -174,8 +174,13 @@ func (rs *EvaluationTemplateService) List(in *command.QueryTemplateCommand) (int
174 transactionContext.RollbackTransaction() 174 transactionContext.RollbackTransaction()
175 }() 175 }()
176 templateRepository := factory.CreateEvaluationTemplateRepository(map[string]interface{}{"transactionContext": transactionContext}) 176 templateRepository := factory.CreateEvaluationTemplateRepository(map[string]interface{}{"transactionContext": transactionContext})
  177 +
  178 + inMap := tool_funs.SimpleStructToMap(in)
  179 + if len(in.Name) > 0 {
  180 + inMap["name"] = "%" + in.Name + "%"
  181 + }
177 // FIXME 总数量是否使用Count获取一个总数量 182 // FIXME 总数量是否使用Count获取一个总数量
178 - count, templates, err := templateRepository.Find(tool_funs.SimpleStructToMap(in), true) 183 + count, templates, err := templateRepository.Find(inMap, "linkNodes")
179 if err != nil { 184 if err != nil {
180 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 185 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
181 } 186 }
@@ -197,7 +202,7 @@ func (rs *EvaluationTemplateService) ListForEnable(in *command.AllEnableTemplate @@ -197,7 +202,7 @@ func (rs *EvaluationTemplateService) ListForEnable(in *command.AllEnableTemplate
197 "state": domain.TemplateStateEnable, 202 "state": domain.TemplateStateEnable,
198 "offset": 0, 203 "offset": 0,
199 "limit": 9999999, 204 "limit": 9999999,
200 - }, true) 205 + }, "linkNodes")
201 if err != nil { 206 if err != nil {
202 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 207 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
203 } 208 }
@@ -5,23 +5,23 @@ import ( @@ -5,23 +5,23 @@ import (
5 ) 5 )
6 6
7 type EvaluationCycle struct { 7 type EvaluationCycle struct {
8 - Id int64 `json:"id,string" comment:"ID"`  
9 - Name string `json:"name" comment:"名称"`  
10 - TimeStart *time.Time `json:"timeStart" comment:"起始时间"`  
11 - TimeEnd *time.Time `json:"timeEnd" comment:"截至时间"`  
12 - CompanyId int64 `json:"companyId,string" comment:"公司ID"`  
13 - CreatorId int64 `json:"creatorId,string" comment:"创建人ID"`  
14 - KpiCycle int `json:"state" comment:"考核周期(0日、1周、2月)"`  
15 - Template []EvaluationTemplate `json:"template" comment:"周期使用模板"`  
16 - CreatedAt time.Time `json:"createdAt" comment:"创建时间"`  
17 - UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"`  
18 - DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"` 8 + Id int64 `json:"id,string" comment:"ID"`
  9 + Name string `json:"name" comment:"名称"`
  10 + TimeStart *time.Time `json:"timeStart" comment:"起始时间"`
  11 + TimeEnd *time.Time `json:"timeEnd" comment:"截至时间"`
  12 + CompanyId int64 `json:"companyId,string" comment:"公司ID"`
  13 + CreatorId int64 `json:"creatorId,string" comment:"创建人ID"`
  14 + KpiCycle int `json:"state" comment:"考核周期(0日、1周、2月)"`
  15 + Templates []*EvaluationTemplate `json:"templates" comment:"周期使用模板"`
  16 + CreatedAt time.Time `json:"createdAt" comment:"创建时间"`
  17 + UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"`
  18 + DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"`
19 } 19 }
20 20
21 type EvaluationCycleRepository interface { 21 type EvaluationCycleRepository interface {
22 Insert(cycle *EvaluationCycle) (*EvaluationCycle, error) 22 Insert(cycle *EvaluationCycle) (*EvaluationCycle, error)
23 Remove(cycle *EvaluationCycle) (*EvaluationCycle, error) 23 Remove(cycle *EvaluationCycle) (*EvaluationCycle, error)
24 FindOne(queryOptions map[string]interface{}) (*EvaluationCycle, error) 24 FindOne(queryOptions map[string]interface{}) (*EvaluationCycle, error)
25 - Find(queryOptions map[string]interface{}) (int64, []*EvaluationCycle, error) 25 + Find(queryOptions map[string]interface{}, excludeColumns ...string) (int64, []*EvaluationCycle, error)
26 Count(queryOptions map[string]interface{}) (int64, error) 26 Count(queryOptions map[string]interface{}) (int64, error)
27 } 27 }
@@ -10,7 +10,7 @@ const ( @@ -10,7 +10,7 @@ const (
10 ) 10 )
11 11
12 type Rating struct { 12 type Rating struct {
13 - Levels []RatingLevel `json:"levels" comment:"配置等级"` 13 + Levels []*RatingLevel `json:"levels" comment:"配置等级"`
14 } 14 }
15 15
16 type RatingLevel struct { 16 type RatingLevel struct {
@@ -21,11 +21,11 @@ type RatingLevel struct { @@ -21,11 +21,11 @@ type RatingLevel struct {
21 } 21 }
22 22
23 type Score struct { 23 type Score struct {
24 - Min float64 `json:"min" comment:"评分下限"`  
25 - Max float64 `json:"max" comment:"评分上限"`  
26 - IntervalState int `json:"intervalState" comment:"按分数子区间匹配等级(0关闭、1开启)"`  
27 - DecimalPlaces int `json:"decimalPlaces" comment:"保留小数点(0不保留、1保留一位、以此类推)"`  
28 - Levels []ScoreLevel `json:"levels" comment:"配置等级区间"` 24 + Min float64 `json:"min" comment:"评分下限"`
  25 + Max float64 `json:"max" comment:"评分上限"`
  26 + IntervalState int `json:"intervalState" comment:"按分数子区间匹配等级(0关闭、1开启)"`
  27 + DecimalPlaces int `json:"decimalPlaces" comment:"保留小数点(0不保留、1保留一位、以此类推)"`
  28 + Levels []*ScoreLevel `json:"levels" comment:"配置等级区间"`
29 } 29 }
30 30
31 type ScoreLevel struct { 31 type ScoreLevel struct {
@@ -66,16 +66,16 @@ type LinkNode struct { @@ -66,16 +66,16 @@ type LinkNode struct {
66 } 66 }
67 67
68 type EvaluationTemplate struct { 68 type EvaluationTemplate struct {
69 - Id int64 `json:"id,string" comment:"ID"`  
70 - Name string `json:"name" comment:"名称"`  
71 - Describe string `json:"describe" comment:"描述"`  
72 - CompanyId int64 `json:"companyId,string" comment:"公司ID"`  
73 - CreatorId int64 `json:"creatorId,string" comment:"创建人ID"`  
74 - State int `json:"state" comment:"状态(0待完成配置、1待启用、2启用、3停用)"`  
75 - LinkNodes []LinkNode `json:"linkNodes" comment:"评估流程"`  
76 - CreatedAt time.Time `json:"createdAt" comment:"创建时间"`  
77 - UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"`  
78 - DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"` 69 + Id int64 `json:"id,string" comment:"ID"`
  70 + Name string `json:"name" comment:"名称"`
  71 + Describe string `json:"describe" comment:"描述"`
  72 + CompanyId int64 `json:"companyId,string" comment:"公司ID"`
  73 + CreatorId int64 `json:"creatorId,string" comment:"创建人ID"`
  74 + State int `json:"state" comment:"状态(0待完成配置、1待启用、2启用、3停用)"`
  75 + LinkNodes []*LinkNode `json:"linkNodes" comment:"评估流程"`
  76 + CreatedAt time.Time `json:"createdAt" comment:"创建时间"`
  77 + UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"`
  78 + DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"`
79 } 79 }
80 80
81 //type EvaluationLink struct { 81 //type EvaluationLink struct {
@@ -90,6 +90,6 @@ type EvaluationTemplateRepository interface { @@ -90,6 +90,6 @@ type EvaluationTemplateRepository interface {
90 Insert(template *EvaluationTemplate) (*EvaluationTemplate, error) 90 Insert(template *EvaluationTemplate) (*EvaluationTemplate, error)
91 Remove(template *EvaluationTemplate) (*EvaluationTemplate, error) 91 Remove(template *EvaluationTemplate) (*EvaluationTemplate, error)
92 FindOne(queryOptions map[string]interface{}) (*EvaluationTemplate, error) 92 FindOne(queryOptions map[string]interface{}) (*EvaluationTemplate, error)
93 - Find(queryOptions map[string]interface{}, simplify bool) (int64, []*EvaluationTemplate, error) 93 + Find(queryOptions map[string]interface{}, excludeColumns ...string) (int64, []*EvaluationTemplate, error)
94 Count(queryOptions map[string]interface{}) (int64, error) 94 Count(queryOptions map[string]interface{}) (int64, error)
95 } 95 }
@@ -6,16 +6,16 @@ import ( @@ -6,16 +6,16 @@ import (
6 ) 6 )
7 7
8 type EvaluationCycle struct { 8 type EvaluationCycle struct {
9 - tableName struct{} `pg:"evaluation_cycle" comment:"评估周期"`  
10 - Id int64 `pg:"pk:id" comment:"周期ID"`  
11 - Name string `comment:"名称"`  
12 - TimeStart *time.Time `comment:"起始时间"`  
13 - TimeEnd *time.Time `comment:"截至时间"`  
14 - CompanyId int64 `comment:"公司ID"`  
15 - CreatorId int64 `comment:"创建人ID"`  
16 - KpiCycle int `comment:"考核周期(0日、1周、2月)"`  
17 - Template []domain.EvaluationTemplate `comment:"周期使用模板"`  
18 - CreatedAt time.Time `comment:"创建时间"`  
19 - UpdatedAt time.Time `comment:"更新时间"`  
20 - DeletedAt *time.Time `comment:"删除时间"` 9 + tableName struct{} `pg:"evaluation_cycle" comment:"评估周期"`
  10 + Id int64 `pg:"pk:id" comment:"周期ID"`
  11 + Name string `comment:"名称"`
  12 + TimeStart *time.Time `comment:"起始时间"`
  13 + TimeEnd *time.Time `comment:"截至时间"`
  14 + CompanyId int64 `comment:"公司ID"`
  15 + CreatorId int64 `comment:"创建人ID"`
  16 + KpiCycle int `comment:"考核周期(0日、1周、2月)"`
  17 + Templates []*domain.EvaluationTemplate `comment:"周期使用模板"`
  18 + CreatedAt time.Time `comment:"创建时间"`
  19 + UpdatedAt time.Time `comment:"更新时间"`
  20 + DeletedAt *time.Time `comment:"删除时间"`
21 } 21 }
@@ -6,15 +6,15 @@ import ( @@ -6,15 +6,15 @@ import (
6 ) 6 )
7 7
8 type EvaluationTemplate struct { 8 type EvaluationTemplate struct {
9 - tableName struct{} `pg:"evaluation_template" comment:"评估模板"`  
10 - Id int64 `comment:"ID"`  
11 - Name string `comment:"名称"`  
12 - Describe string `comment:"描述"`  
13 - CompanyId int64 `comment:"公司ID"`  
14 - CreatorId int64 `comment:"创建人ID"`  
15 - State int `comment:"状态(0待完成配置、1待启用、2启用、3停用)"`  
16 - LinkNodes []domain.LinkNode `comment:"评估流程"`  
17 - CreatedAt time.Time `comment:"创建时间"`  
18 - UpdatedAt time.Time `comment:"更新时间"`  
19 - DeletedAt *time.Time `comment:"删除时间"` 9 + tableName struct{} `pg:"evaluation_template" comment:"评估模板"`
  10 + Id int64 `comment:"ID"`
  11 + Name string `comment:"名称"`
  12 + Describe string `comment:"描述"`
  13 + CompanyId int64 `comment:"公司ID"`
  14 + CreatorId int64 `comment:"创建人ID"`
  15 + State int `comment:"状态(0待完成配置、1待启用、2启用、3停用)"`
  16 + LinkNodes []*domain.LinkNode `comment:"评估流程"`
  17 + CreatedAt time.Time `comment:"创建时间"`
  18 + UpdatedAt time.Time `comment:"更新时间"`
  19 + DeletedAt *time.Time `comment:"删除时间"`
20 } 20 }
@@ -29,7 +29,7 @@ func (repo *EvaluationCycleRepository) TransformToDomain(m *models.EvaluationCyc @@ -29,7 +29,7 @@ func (repo *EvaluationCycleRepository) TransformToDomain(m *models.EvaluationCyc
29 CompanyId: m.CompanyId, 29 CompanyId: m.CompanyId,
30 CreatorId: m.CreatorId, 30 CreatorId: m.CreatorId,
31 KpiCycle: m.KpiCycle, 31 KpiCycle: m.KpiCycle,
32 - Template: m.Template, 32 + Templates: m.Templates,
33 CreatedAt: m.CreatedAt, 33 CreatedAt: m.CreatedAt,
34 UpdatedAt: m.UpdatedAt, 34 UpdatedAt: m.UpdatedAt,
35 DeletedAt: m.DeletedAt, 35 DeletedAt: m.DeletedAt,
@@ -45,7 +45,7 @@ func (repo *EvaluationCycleRepository) TransformToModel(d *domain.EvaluationCycl @@ -45,7 +45,7 @@ func (repo *EvaluationCycleRepository) TransformToModel(d *domain.EvaluationCycl
45 CompanyId: d.CompanyId, 45 CompanyId: d.CompanyId,
46 CreatorId: d.CreatorId, 46 CreatorId: d.CreatorId,
47 KpiCycle: d.KpiCycle, 47 KpiCycle: d.KpiCycle,
48 - Template: d.Template, 48 + Templates: d.Templates,
49 CreatedAt: d.CreatedAt, 49 CreatedAt: d.CreatedAt,
50 UpdatedAt: d.UpdatedAt, 50 UpdatedAt: d.UpdatedAt,
51 DeletedAt: d.DeletedAt, 51 DeletedAt: d.DeletedAt,
@@ -114,12 +114,16 @@ func (repo *EvaluationCycleRepository) FindOne(queryOptions map[string]interface @@ -114,12 +114,16 @@ func (repo *EvaluationCycleRepository) FindOne(queryOptions map[string]interface
114 return &u, nil 114 return &u, nil
115 } 115 }
116 116
117 -func (repo *EvaluationCycleRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.EvaluationCycle, error) { 117 +func (repo *EvaluationCycleRepository) Find(queryOptions map[string]interface{}, excludeColumns ...string) (int64, []*domain.EvaluationCycle, error) {
118 tx := repo.transactionContext.PgTx 118 tx := repo.transactionContext.PgTx
119 var m []*models.EvaluationCycle 119 var m []*models.EvaluationCycle
120 - query := tx.Model(&m).  
121 - Where("deleted_at isnull").  
122 - Limit(20) 120 +
  121 + // 排除掉保存模板的列[templates], 减少数据赋值
  122 + query := tx.Model(&m).Where("deleted_at isnull").Limit(20)
  123 +
  124 + if len(excludeColumns) > 0 {
  125 + query.ExcludeColumn(excludeColumns...)
  126 + }
123 127
124 if name, ok := queryOptions["name"]; ok { 128 if name, ok := queryOptions["name"]; ok {
125 query.Where("name = ?", name) 129 query.Where("name = ?", name)
@@ -119,6 +119,10 @@ func (repo *EvaluationRuleRepository) Find(queryOptions map[string]interface{}) @@ -119,6 +119,10 @@ func (repo *EvaluationRuleRepository) Find(queryOptions map[string]interface{})
119 var m []*models.EvaluationRule 119 var m []*models.EvaluationRule
120 query := tx.Model(&m).Where("deleted_at isnull").Limit(20) 120 query := tx.Model(&m).Where("deleted_at isnull").Limit(20)
121 121
  122 + if nameOrRemark, ok := queryOptions["nameOrRemark"]; ok && len(nameOrRemark.(string)) > 0 {
  123 + query.Where("name LIKE ? or remark LIKE ?", nameOrRemark, nameOrRemark)
  124 + }
  125 +
122 if name, ok := queryOptions["name"]; ok { 126 if name, ok := queryOptions["name"]; ok {
123 query.Where("name = ?", name) 127 query.Where("name = ?", name)
124 } 128 }
@@ -112,15 +112,23 @@ func (repo *EvaluationTemplateRepository) FindOne(queryOptions map[string]interf @@ -112,15 +112,23 @@ func (repo *EvaluationTemplateRepository) FindOne(queryOptions map[string]interf
112 return &u, nil 112 return &u, nil
113 } 113 }
114 114
115 -func (repo *EvaluationTemplateRepository) Find(queryOptions map[string]interface{}, simplify bool) (int64, []*domain.EvaluationTemplate, error) { 115 +func (repo *EvaluationTemplateRepository) Find(queryOptions map[string]interface{}, excludeColumns ...string) (int64, []*domain.EvaluationTemplate, error) {
116 tx := repo.transactionContext.PgTx 116 tx := repo.transactionContext.PgTx
117 var m []*models.EvaluationTemplate 117 var m []*models.EvaluationTemplate
118 query := tx.Model(&m). 118 query := tx.Model(&m).
119 Where("deleted_at isnull"). 119 Where("deleted_at isnull").
120 Limit(20) 120 Limit(20)
121 121
122 - if name, ok := queryOptions["name"]; ok {  
123 - query.Where("name = ?", name) 122 + if len(excludeColumns) > 0 {
  123 + query.ExcludeColumn(excludeColumns...)
  124 + }
  125 +
  126 + if v, ok := queryOptions["ids"]; ok {
  127 + query.Where("id in(?)", pg.In(v))
  128 + }
  129 +
  130 + if name, ok := queryOptions["name"]; ok && len(name.(string)) > 0 {
  131 + query.Where("name LIKE ?", name)
124 } 132 }
125 133
126 if companyId, ok := queryOptions["companyId"]; ok { 134 if companyId, ok := queryOptions["companyId"]; ok {
@@ -145,9 +153,6 @@ func (repo *EvaluationTemplateRepository) Find(queryOptions map[string]interface @@ -145,9 +153,6 @@ func (repo *EvaluationTemplateRepository) Find(queryOptions map[string]interface
145 var arrays []*domain.EvaluationTemplate 153 var arrays []*domain.EvaluationTemplate
146 for _, v := range m { 154 for _, v := range m {
147 d := repo.TransformToDomain(v) 155 d := repo.TransformToDomain(v)
148 - if simplify { // 去掉流程数据避免数据量过大  
149 - d.LinkNodes = make([]domain.LinkNode, 0)  
150 - }  
151 arrays = append(arrays, &d) 156 arrays = append(arrays, &d)
152 } 157 }
153 return int64(count), arrays, nil 158 return int64(count), arrays, nil