正在显示
18 个修改的文件
包含
1078 行增加
和
11 行删除
| 1 | +package command | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/beego/beego/v2/core/validation" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +type CreateRuleCommand struct { | ||
| 9 | + CompanyId int64 `cname:"公司ID" json:"companyId"` | ||
| 10 | + CreatorId int64 `cname:"创建人ID" json:"creatorId"` | ||
| 11 | + Name string `cname:"规则名称" json:"name" valid:"Required"` | ||
| 12 | + Remark string `cname:"规则备注" json:"remark"` | ||
| 13 | + Type int `cname:"评估方式" json:"type"` | ||
| 14 | + Rating *domain.Rating `cname:"评级" json:"rating"` | ||
| 15 | + Score *domain.Score `cname:"评分" json:"score"` | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +func (in *CreateRuleCommand) 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 | + | ||
| 28 | + if len(in.Name) > 40 { | ||
| 29 | + validation.SetError("name", "角色名称最大长度40个字符") | ||
| 30 | + return | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + if in.Type == domain.EvaluationTypeRating { | ||
| 34 | + if nil == in.Rating || len(in.Rating.Levels) == 0 { | ||
| 35 | + validation.SetError("rating", "评级内容不能为空") | ||
| 36 | + return | ||
| 37 | + } | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + if in.Type == domain.EvaluationTypeScore { | ||
| 41 | + if nil == in.Score { | ||
| 42 | + validation.SetError("rating", "评分内容不能为空") | ||
| 43 | + return | ||
| 44 | + } | ||
| 45 | + } | ||
| 46 | +} |
| 1 | +package command | ||
| 2 | + | ||
| 3 | +import "github.com/beego/beego/v2/core/validation" | ||
| 4 | + | ||
| 5 | +type DeleteRuleCommand struct { | ||
| 6 | + CompanyId int64 `cname:"公司ID" json:"companyId"` | ||
| 7 | + Id int64 `cname:"规则ID" json:"id,string" valid:"Required"` | ||
| 8 | +} | ||
| 9 | + | ||
| 10 | +func (in *DeleteRuleCommand) Valid(validation *validation.Validation) { | ||
| 11 | + if in.CompanyId == 0 { | ||
| 12 | + validation.SetError("companyId", "公司ID无效") | ||
| 13 | + return | ||
| 14 | + } | ||
| 15 | +} |
| 1 | +package command | ||
| 2 | + | ||
| 3 | +import "github.com/beego/beego/v2/core/validation" | ||
| 4 | + | ||
| 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"` | ||
| 9 | +} | ||
| 10 | + | ||
| 11 | +func (in *QueryRuleCommand) 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 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +type UpdateRuleCommand 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 | + Remark string `cname:"规则备注" json:"remark"` | ||
| 14 | + Type int `cname:"评估方式" json:"type"` | ||
| 15 | + Rating *domain.Rating `cname:"评级" json:"rating"` | ||
| 16 | + Score *domain.Score `cname:"评分" json:"score"` | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +func (in *UpdateRuleCommand) Valid(validation *validation.Validation) { | ||
| 20 | + if in.CompanyId == 0 { | ||
| 21 | + validation.SetError("companyId", "公司ID无效") | ||
| 22 | + return | ||
| 23 | + } | ||
| 24 | + if in.CreatorId == 0 { | ||
| 25 | + validation.SetError("creatorId", "创建人ID无效") | ||
| 26 | + return | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + if len(in.Name) > 40 { | ||
| 30 | + validation.SetError("name", "角色名称最大长度40个字符") | ||
| 31 | + return | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + if in.Type == domain.EvaluationTypeRating { | ||
| 35 | + if nil == in.Rating || len(in.Rating.Levels) == 0 { | ||
| 36 | + validation.SetError("rating", "评级内容不能为空") | ||
| 37 | + return | ||
| 38 | + } | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + if in.Type == domain.EvaluationTypeScore { | ||
| 42 | + if nil == in.Score { | ||
| 43 | + validation.SetError("rating", "评分内容不能为空") | ||
| 44 | + return | ||
| 45 | + } | ||
| 46 | + } | ||
| 47 | +} |
| 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_rule/adapter" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/evaluation_rule/command" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type EvaluationRuleService struct { | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +func NewEvaluationRuleService() *EvaluationRuleService { | ||
| 16 | + newRoleService := &EvaluationRuleService{} | ||
| 17 | + return newRoleService | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +// Create 创建 | ||
| 21 | +func (rs *EvaluationRuleService) Create(in *command.CreateRuleCommand) (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 | + ruleRepository := factory.CreateEvaluationRuleRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 30 | + | ||
| 31 | + // 检测名称重复 | ||
| 32 | + count, err := ruleRepository.Count(map[string]interface{}{"name": in.Name, "companyId": in.CompanyId}) | ||
| 33 | + if err != nil { | ||
| 34 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 35 | + } | ||
| 36 | + if count > 0 { | ||
| 37 | + return nil, application.ThrowError(application.BUSINESS_ERROR, "名称已存在") | ||
| 38 | + } | ||
| 39 | + newRule := &domain.EvaluationRule{ | ||
| 40 | + Id: 0, | ||
| 41 | + Name: in.Name, | ||
| 42 | + Remark: in.Remark, | ||
| 43 | + CompanyId: in.CompanyId, | ||
| 44 | + CreatorId: in.CreatorId, | ||
| 45 | + Type: in.Type, | ||
| 46 | + Rating: in.Rating, | ||
| 47 | + Score: in.Score, | ||
| 48 | + } | ||
| 49 | + rule, err := ruleRepository.Insert(newRule) | ||
| 50 | + if err != nil { | ||
| 51 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 52 | + } | ||
| 53 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 54 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 55 | + } | ||
| 56 | + return rule, nil | ||
| 57 | + | ||
| 58 | +} | ||
| 59 | + | ||
| 60 | +func (rs *EvaluationRuleService) Update(in *command.UpdateRuleCommand) (interface{}, error) { | ||
| 61 | + transactionContext, err := factory.ValidateStartTransaction(in) | ||
| 62 | + if err != nil { | ||
| 63 | + return nil, err | ||
| 64 | + } | ||
| 65 | + defer func() { | ||
| 66 | + transactionContext.RollbackTransaction() | ||
| 67 | + }() | ||
| 68 | + | ||
| 69 | + ruleRepository := factory.CreateEvaluationRuleRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 70 | + | ||
| 71 | + // 检测名称重复(排除自己) | ||
| 72 | + count, err := ruleRepository.Count(map[string]interface{}{"name": in.Name, "companyId": in.CompanyId, "notId": in.Id}) | ||
| 73 | + if err != nil { | ||
| 74 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 75 | + } | ||
| 76 | + if count > 0 { | ||
| 77 | + return nil, application.ThrowError(application.BUSINESS_ERROR, "名称已存在") | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + rule, err := ruleRepository.FindOne(map[string]interface{}{"id": in.Id}) | ||
| 81 | + if err != nil { | ||
| 82 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + rule.Name = in.Name | ||
| 86 | + rule.Remark = in.Remark | ||
| 87 | + rule.Type = in.Type | ||
| 88 | + rule.Rating = in.Rating | ||
| 89 | + rule.Score = in.Score | ||
| 90 | + | ||
| 91 | + rule, err = ruleRepository.Insert(rule) | ||
| 92 | + if err != nil { | ||
| 93 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 94 | + } | ||
| 95 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 96 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 97 | + } | ||
| 98 | + return rule, nil | ||
| 99 | +} | ||
| 100 | + | ||
| 101 | +func (rs *EvaluationRuleService) Remove(in *command.DeleteRuleCommand) (interface{}, error) { | ||
| 102 | + transactionContext, err := factory.ValidateStartTransaction(in) | ||
| 103 | + if err != nil { | ||
| 104 | + return nil, err | ||
| 105 | + } | ||
| 106 | + defer func() { | ||
| 107 | + transactionContext.RollbackTransaction() | ||
| 108 | + }() | ||
| 109 | + | ||
| 110 | + ruleRepository := factory.CreateEvaluationRuleRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 111 | + | ||
| 112 | + rule, err := ruleRepository.FindOne(map[string]interface{}{"id": in.Id}) | ||
| 113 | + if err != nil { | ||
| 114 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 115 | + } | ||
| 116 | + if _, err := ruleRepository.Remove(rule); err != nil { | ||
| 117 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 121 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 122 | + } | ||
| 123 | + return rule, nil | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +func (rs *EvaluationRuleService) List(in *command.QueryRuleCommand) (interface{}, error) { | ||
| 127 | + transactionContext, err := factory.StartTransaction() | ||
| 128 | + if err != nil { | ||
| 129 | + return nil, err | ||
| 130 | + } | ||
| 131 | + defer func() { | ||
| 132 | + transactionContext.RollbackTransaction() | ||
| 133 | + }() | ||
| 134 | + ruleRepository := factory.CreateEvaluationRuleRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 135 | + userRepository := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 136 | + | ||
| 137 | + // Fixme 总数量是否使用Count获取一个总数量 | ||
| 138 | + count, rules, err := ruleRepository.Find(tool_funs.SimpleStructToMap(in)) | ||
| 139 | + if err != nil { | ||
| 140 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 141 | + } | ||
| 142 | + | ||
| 143 | + ras := make([]*adapter.RuleAdapter, 0) | ||
| 144 | + creatorIds := make([]int64, 0) | ||
| 145 | + for i := range rules { | ||
| 146 | + ra := &adapter.RuleAdapter{} | ||
| 147 | + ra.EvaluationRule = rules[i] | ||
| 148 | + ras = append(ras, ra) | ||
| 149 | + creatorIds = append(creatorIds, rules[i].CreatorId) | ||
| 150 | + } | ||
| 151 | + _, users, _ := userRepository.Find(map[string]interface{}{"ids": creatorIds, "limit": len(creatorIds)}) | ||
| 152 | + userNameMap := map[int64]string{} | ||
| 153 | + if users != nil { | ||
| 154 | + for i := range users { | ||
| 155 | + userNameMap[users[i].Id] = users[i].Name | ||
| 156 | + } | ||
| 157 | + } | ||
| 158 | + for i := range ras { | ||
| 159 | + if v, ok := userNameMap[ras[i].CreatorId]; ok { | ||
| 160 | + ras[i].CreatorName = v | ||
| 161 | + } | ||
| 162 | + } | ||
| 163 | + return tool_funs.SimpleWrapGridMap(count, ras), nil | ||
| 164 | +} |
| @@ -80,3 +80,35 @@ func CreateReceivedMessageRepository(options map[string]interface{}) domain.Rece | @@ -80,3 +80,35 @@ func CreateReceivedMessageRepository(options map[string]interface{}) domain.Rece | ||
| 80 | } | 80 | } |
| 81 | return repository.NewReceivedMessageRepository(transactionContext) | 81 | return repository.NewReceivedMessageRepository(transactionContext) |
| 82 | } | 82 | } |
| 83 | + | ||
| 84 | +func CreateEvaluationRuleRepository(options map[string]interface{}) domain.EvaluationRuleRepository { | ||
| 85 | + var transactionContext *pg.TransactionContext | ||
| 86 | + if value, ok := options["transactionContext"]; ok { | ||
| 87 | + transactionContext = value.(*pg.TransactionContext) | ||
| 88 | + } | ||
| 89 | + return repository.NewEvaluationRuleRepository(transactionContext) | ||
| 90 | +} | ||
| 91 | + | ||
| 92 | +func CreateEvaluationTemplateRepository(options map[string]interface{}) domain.EvaluationTemplateRepository { | ||
| 93 | + var transactionContext *pg.TransactionContext | ||
| 94 | + if value, ok := options["transactionContext"]; ok { | ||
| 95 | + transactionContext = value.(*pg.TransactionContext) | ||
| 96 | + } | ||
| 97 | + return repository.NewEvaluationTemplateRepository(transactionContext) | ||
| 98 | +} | ||
| 99 | + | ||
| 100 | +func CreateEvaluationCycleRepository(options map[string]interface{}) domain.EvaluationCycleRepository { | ||
| 101 | + var transactionContext *pg.TransactionContext | ||
| 102 | + if value, ok := options["transactionContext"]; ok { | ||
| 103 | + transactionContext = value.(*pg.TransactionContext) | ||
| 104 | + } | ||
| 105 | + return repository.NewEvaluationCycleRepository(transactionContext) | ||
| 106 | +} | ||
| 107 | + | ||
| 108 | +func CreateEvaluationProjectRepository(options map[string]interface{}) domain.EvaluationProjectRepository { | ||
| 109 | + var transactionContext *pg.TransactionContext | ||
| 110 | + if value, ok := options["transactionContext"]; ok { | ||
| 111 | + transactionContext = value.(*pg.TransactionContext) | ||
| 112 | + } | ||
| 113 | + return repository.NewEvaluationProjectRepository(transactionContext) | ||
| 114 | +} |
| @@ -4,13 +4,6 @@ import ( | @@ -4,13 +4,6 @@ import ( | ||
| 4 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | 4 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" |
| 5 | ) | 5 | ) |
| 6 | 6 | ||
| 7 | -//type RoleContainUser struct { | ||
| 8 | -// RoleId int64 `json:"roleId,string"` | ||
| 9 | -// UserId int64 `json:"userId,string"` | ||
| 10 | -// UserName string `json:"userName"` | ||
| 11 | -// UserEmail string `json:"userEmail"` | ||
| 12 | -//} | ||
| 13 | - | ||
| 14 | type RoleUserAdapter struct { | 7 | type RoleUserAdapter struct { |
| 15 | domain.Role | 8 | domain.Role |
| 16 | Users []*domain.RoleContainUser `json:"users"` | 9 | Users []*domain.RoleContainUser `json:"users"` |
| @@ -17,3 +17,11 @@ type EvaluationCycle struct { | @@ -17,3 +17,11 @@ type EvaluationCycle struct { | ||
| 17 | UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"` | 17 | UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"` |
| 18 | DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"` | 18 | DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"` |
| 19 | } | 19 | } |
| 20 | + | ||
| 21 | +type EvaluationCycleRepository interface { | ||
| 22 | + Insert(cycle *EvaluationCycle) (*EvaluationCycle, error) | ||
| 23 | + Remove(cycle *EvaluationCycle) (*EvaluationCycle, error) | ||
| 24 | + FindOne(queryOptions map[string]interface{}) (*EvaluationCycle, error) | ||
| 25 | + Find(queryOptions map[string]interface{}) (int64, []*EvaluationCycle, error) | ||
| 26 | + Count(queryOptions map[string]interface{}) (int64, error) | ||
| 27 | +} |
| @@ -18,3 +18,11 @@ type EvaluationProject struct { | @@ -18,3 +18,11 @@ type EvaluationProject struct { | ||
| 18 | UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"` | 18 | UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"` |
| 19 | DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"` | 19 | DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"` |
| 20 | } | 20 | } |
| 21 | + | ||
| 22 | +type EvaluationProjectRepository interface { | ||
| 23 | + Insert(project *EvaluationProject) (*EvaluationProject, error) | ||
| 24 | + Remove(project *EvaluationProject) (*EvaluationProject, error) | ||
| 25 | + FindOne(queryOptions map[string]interface{}) (*EvaluationProject, error) | ||
| 26 | + Find(queryOptions map[string]interface{}) (int64, []*EvaluationProject, error) | ||
| 27 | + Count(queryOptions map[string]interface{}) (int64, error) | ||
| 28 | +} |
| @@ -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 `comment:"配置等级"` | 13 | + Levels []RatingLevel `json:"levels" comment:"配置等级"` |
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | type RatingLevel struct { | 16 | type RatingLevel struct { |
| @@ -48,3 +48,11 @@ type EvaluationRule struct { | @@ -48,3 +48,11 @@ type EvaluationRule struct { | ||
| 48 | UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"` | 48 | UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"` |
| 49 | DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"` | 49 | DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"` |
| 50 | } | 50 | } |
| 51 | + | ||
| 52 | +type EvaluationRuleRepository interface { | ||
| 53 | + Insert(rule *EvaluationRule) (*EvaluationRule, error) | ||
| 54 | + Remove(rule *EvaluationRule) (*EvaluationRule, error) | ||
| 55 | + FindOne(queryOptions map[string]interface{}) (*EvaluationRule, error) | ||
| 56 | + Find(queryOptions map[string]interface{}) (int64, []*EvaluationRule, error) | ||
| 57 | + Count(queryOptions map[string]interface{}) (int64, error) | ||
| 58 | +} |
| @@ -68,6 +68,13 @@ type EvaluationTemplate struct { | @@ -68,6 +68,13 @@ type EvaluationTemplate struct { | ||
| 68 | CreatedAt time.Time `json:"createdAt" comment:"创建时间"` | 68 | CreatedAt time.Time `json:"createdAt" comment:"创建时间"` |
| 69 | UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"` | 69 | UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"` |
| 70 | DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"` | 70 | DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"` |
| 71 | - | ||
| 72 | //Link EvaluationLink `json:"link" comment:"评估流程"` | 71 | //Link EvaluationLink `json:"link" comment:"评估流程"` |
| 73 | } | 72 | } |
| 73 | + | ||
| 74 | +type EvaluationTemplateRepository interface { | ||
| 75 | + Insert(template *EvaluationTemplate) (*EvaluationTemplate, error) | ||
| 76 | + Remove(template *EvaluationTemplate) (*EvaluationTemplate, error) | ||
| 77 | + FindOne(queryOptions map[string]interface{}) (*EvaluationTemplate, error) | ||
| 78 | + Find(queryOptions map[string]interface{}) (int64, []*EvaluationTemplate, error) | ||
| 79 | + Count(queryOptions map[string]interface{}) (int64, error) | ||
| 80 | +} |
| 1 | package models | 1 | package models |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 4 | "time" | 5 | "time" |
| 5 | ) | 6 | ) |
| 6 | 7 | ||
| @@ -13,7 +14,7 @@ type EvaluationCycle struct { | @@ -13,7 +14,7 @@ type EvaluationCycle struct { | ||
| 13 | CompanyId int64 `comment:"公司ID"` | 14 | CompanyId int64 `comment:"公司ID"` |
| 14 | CreatorId int64 `comment:"创建人ID"` | 15 | CreatorId int64 `comment:"创建人ID"` |
| 15 | KpiCycle int `comment:"考核周期(0日、1周、2月)"` | 16 | KpiCycle int `comment:"考核周期(0日、1周、2月)"` |
| 16 | - Template []EvaluationTemplate `comment:"周期使用模板"` | 17 | + Template []domain.EvaluationTemplate `comment:"周期使用模板"` |
| 17 | CreatedAt time.Time `comment:"创建时间"` | 18 | CreatedAt time.Time `comment:"创建时间"` |
| 18 | UpdatedAt time.Time `comment:"更新时间"` | 19 | UpdatedAt time.Time `comment:"更新时间"` |
| 19 | DeletedAt *time.Time `comment:"删除时间"` | 20 | DeletedAt *time.Time `comment:"删除时间"` |
| 1 | package models | 1 | package models |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 4 | "time" | 5 | "time" |
| 5 | ) | 6 | ) |
| 6 | 7 | ||
| @@ -14,7 +15,7 @@ type EvaluationProject struct { | @@ -14,7 +15,7 @@ type EvaluationProject struct { | ||
| 14 | HrBp int `comment:"HR角色权限"` | 15 | HrBp int `comment:"HR角色权限"` |
| 15 | Pms []string `comment:"项目管理员ID"` | 16 | Pms []string `comment:"项目管理员ID"` |
| 16 | Recipients []string `comment:"被评估人ID"` | 17 | Recipients []string `comment:"被评估人ID"` |
| 17 | - Template *EvaluationTemplate `comment:"评估模板"` | 18 | + Template *domain.EvaluationTemplate `comment:"评估模板"` |
| 18 | CreatedAt time.Time `comment:"创建时间"` | 19 | CreatedAt time.Time `comment:"创建时间"` |
| 19 | UpdatedAt time.Time `comment:"更新时间"` | 20 | UpdatedAt time.Time `comment:"更新时间"` |
| 20 | DeletedAt *time.Time `comment:"删除时间"` | 21 | DeletedAt *time.Time `comment:"删除时间"` |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "github.com/go-pg/pg/v10" | ||
| 7 | + "github.com/linmadan/egglib-go/persistent/pg/sqlbuilder" | ||
| 8 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/pg/models" | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/utils" | ||
| 12 | + "time" | ||
| 13 | +) | ||
| 14 | + | ||
| 15 | +type EvaluationCycleRepository struct { | ||
| 16 | + transactionContext *pgTransaction.TransactionContext | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +func NewEvaluationCycleRepository(transactionContext *pgTransaction.TransactionContext) *EvaluationCycleRepository { | ||
| 20 | + return &EvaluationCycleRepository{transactionContext: transactionContext} | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (repo *EvaluationCycleRepository) TransformToDomain(m *models.EvaluationCycle) domain.EvaluationCycle { | ||
| 24 | + return domain.EvaluationCycle{ | ||
| 25 | + Id: m.Id, | ||
| 26 | + Name: m.Name, | ||
| 27 | + TimeStart: m.TimeStart, | ||
| 28 | + TimeEnd: m.TimeEnd, | ||
| 29 | + CompanyId: m.CompanyId, | ||
| 30 | + CreatorId: m.CreatorId, | ||
| 31 | + KpiCycle: m.KpiCycle, | ||
| 32 | + Template: m.Template, | ||
| 33 | + CreatedAt: m.CreatedAt, | ||
| 34 | + UpdatedAt: m.UpdatedAt, | ||
| 35 | + DeletedAt: m.DeletedAt, | ||
| 36 | + } | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +func (repo *EvaluationCycleRepository) TransformToModel(d *domain.EvaluationCycle) models.EvaluationCycle { | ||
| 40 | + return models.EvaluationCycle{ | ||
| 41 | + Id: d.Id, | ||
| 42 | + Name: d.Name, | ||
| 43 | + TimeStart: d.TimeStart, | ||
| 44 | + TimeEnd: d.TimeEnd, | ||
| 45 | + CompanyId: d.CompanyId, | ||
| 46 | + CreatorId: d.CreatorId, | ||
| 47 | + KpiCycle: d.KpiCycle, | ||
| 48 | + Template: d.Template, | ||
| 49 | + CreatedAt: d.CreatedAt, | ||
| 50 | + UpdatedAt: d.UpdatedAt, | ||
| 51 | + DeletedAt: d.DeletedAt, | ||
| 52 | + } | ||
| 53 | +} | ||
| 54 | + | ||
| 55 | +func (repo *EvaluationCycleRepository) nextIdentify() (int64, error) { | ||
| 56 | + return utils.NewSnowflakeId() | ||
| 57 | +} | ||
| 58 | + | ||
| 59 | +func (repo *EvaluationCycleRepository) Insert(d *domain.EvaluationCycle) (*domain.EvaluationCycle, error) { | ||
| 60 | + var isCreate = d.Id == 0 | ||
| 61 | + if isCreate { | ||
| 62 | + id, err := repo.nextIdentify() | ||
| 63 | + if err != nil { | ||
| 64 | + return d, err | ||
| 65 | + } | ||
| 66 | + d.Id = id | ||
| 67 | + d.CreatedAt = time.Now() | ||
| 68 | + d.UpdatedAt = d.CreatedAt | ||
| 69 | + } else { | ||
| 70 | + d.UpdatedAt = time.Now() | ||
| 71 | + } | ||
| 72 | + m := repo.TransformToModel(d) | ||
| 73 | + tx := repo.transactionContext.PgTx | ||
| 74 | + var err error | ||
| 75 | + if isCreate { | ||
| 76 | + _, err = tx.Model(&m).Returning("id").Insert() | ||
| 77 | + } else { | ||
| 78 | + _, err = tx.Model(&m).Returning("id").WherePK().Update() // 更新和删除必须增加条件 | ||
| 79 | + } | ||
| 80 | + if err != nil { | ||
| 81 | + return nil, err | ||
| 82 | + } | ||
| 83 | + d.Id = m.Id | ||
| 84 | + return d, nil | ||
| 85 | +} | ||
| 86 | + | ||
| 87 | +func (repo *EvaluationCycleRepository) Remove(d *domain.EvaluationCycle) (*domain.EvaluationCycle, error) { | ||
| 88 | + tx := repo.transactionContext.PgTx | ||
| 89 | + nowTime := time.Now() | ||
| 90 | + m := repo.TransformToModel(d) | ||
| 91 | + m.DeletedAt = &nowTime | ||
| 92 | + if _, err := tx.Model(&m).WherePK().Update(); err != nil { | ||
| 93 | + return d, err | ||
| 94 | + } | ||
| 95 | + return d, nil | ||
| 96 | +} | ||
| 97 | + | ||
| 98 | +func (repo *EvaluationCycleRepository) FindOne(queryOptions map[string]interface{}) (*domain.EvaluationCycle, error) { | ||
| 99 | + tx := repo.transactionContext.PgTx | ||
| 100 | + m := new(models.EvaluationCycle) | ||
| 101 | + query := tx.Model(m) | ||
| 102 | + query.Where("deleted_at isnull") | ||
| 103 | + if id, ok := queryOptions["id"]; ok { | ||
| 104 | + query.Where("id=?", id) | ||
| 105 | + } | ||
| 106 | + if err := query.First(); err != nil { | ||
| 107 | + if errors.Is(err, pg.ErrNoRows) { | ||
| 108 | + return nil, fmt.Errorf("没有此资源") | ||
| 109 | + } else { | ||
| 110 | + return nil, err | ||
| 111 | + } | ||
| 112 | + } | ||
| 113 | + u := repo.TransformToDomain(m) | ||
| 114 | + return &u, nil | ||
| 115 | +} | ||
| 116 | + | ||
| 117 | +func (repo *EvaluationCycleRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.EvaluationCycle, error) { | ||
| 118 | + tx := repo.transactionContext.PgTx | ||
| 119 | + var m []*models.EvaluationCycle | ||
| 120 | + query := tx.Model(&m). | ||
| 121 | + Where("deleted_at isnull"). | ||
| 122 | + Limit(20) | ||
| 123 | + | ||
| 124 | + if name, ok := queryOptions["name"]; ok { | ||
| 125 | + query.Where("name = ?", name) | ||
| 126 | + } | ||
| 127 | + | ||
| 128 | + if companyId, ok := queryOptions["companyId"]; ok { | ||
| 129 | + query.Where("company_id = ?", companyId) | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + if v, ok := queryOptions["limit"].(int); ok { | ||
| 133 | + query.Limit(v) | ||
| 134 | + } | ||
| 135 | + if v, ok := queryOptions["offset"].(int); ok { | ||
| 136 | + query.Offset(v) | ||
| 137 | + } | ||
| 138 | + | ||
| 139 | + count, err := query.SelectAndCount() | ||
| 140 | + if err != nil { | ||
| 141 | + return 0, nil, err | ||
| 142 | + } | ||
| 143 | + var arrays []*domain.EvaluationCycle | ||
| 144 | + for _, v := range m { | ||
| 145 | + d := repo.TransformToDomain(v) | ||
| 146 | + arrays = append(arrays, &d) | ||
| 147 | + } | ||
| 148 | + return int64(count), arrays, nil | ||
| 149 | +} | ||
| 150 | + | ||
| 151 | +func (repo *EvaluationCycleRepository) Count(queryOptions map[string]interface{}) (int64, error) { | ||
| 152 | + tx := repo.transactionContext.PgTx | ||
| 153 | + m := new(models.EvaluationCycle) | ||
| 154 | + query := sqlbuilder.BuildQuery(tx.Model(m), queryOptions) | ||
| 155 | + query.Where("deleted_at isnull") | ||
| 156 | + | ||
| 157 | + if id, ok := queryOptions["id"]; ok { | ||
| 158 | + query.Where("id = ?", id) | ||
| 159 | + } | ||
| 160 | + | ||
| 161 | + if notId, ok := queryOptions["notId"]; ok { | ||
| 162 | + query.Where("id != ?", notId) | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | + if name, ok := queryOptions["name"]; ok { | ||
| 166 | + query.Where("name = ?", name) | ||
| 167 | + } | ||
| 168 | + | ||
| 169 | + if companyId, ok := queryOptions["companyId"]; ok { | ||
| 170 | + query.Where("company_id = ?", companyId) | ||
| 171 | + } | ||
| 172 | + | ||
| 173 | + count, err := query.Count() | ||
| 174 | + if err != nil { | ||
| 175 | + return 0, err | ||
| 176 | + } | ||
| 177 | + return int64(count), nil | ||
| 178 | +} |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "github.com/go-pg/pg/v10" | ||
| 7 | + "github.com/linmadan/egglib-go/persistent/pg/sqlbuilder" | ||
| 8 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/pg/models" | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/utils" | ||
| 12 | + "time" | ||
| 13 | +) | ||
| 14 | + | ||
| 15 | +type EvaluationProjectRepository struct { | ||
| 16 | + transactionContext *pgTransaction.TransactionContext | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +func NewEvaluationProjectRepository(transactionContext *pgTransaction.TransactionContext) *EvaluationProjectRepository { | ||
| 20 | + return &EvaluationProjectRepository{transactionContext: transactionContext} | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (repo *EvaluationProjectRepository) TransformToDomain(m *models.EvaluationProject) domain.EvaluationProject { | ||
| 24 | + return domain.EvaluationProject{ | ||
| 25 | + Id: m.Id, | ||
| 26 | + Name: m.Name, | ||
| 27 | + Describe: m.Describe, | ||
| 28 | + CompanyId: m.CompanyId, | ||
| 29 | + CreatorId: m.CreatorId, | ||
| 30 | + HrBp: m.HrBp, | ||
| 31 | + Pms: m.Pms, | ||
| 32 | + Recipients: m.Recipients, | ||
| 33 | + Template: m.Template, | ||
| 34 | + CreatedAt: m.CreatedAt, | ||
| 35 | + UpdatedAt: m.UpdatedAt, | ||
| 36 | + DeletedAt: m.DeletedAt, | ||
| 37 | + } | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +func (repo *EvaluationProjectRepository) TransformToModel(d *domain.EvaluationProject) models.EvaluationProject { | ||
| 41 | + return models.EvaluationProject{ | ||
| 42 | + Id: d.Id, | ||
| 43 | + Name: d.Name, | ||
| 44 | + Describe: d.Describe, | ||
| 45 | + CompanyId: d.CompanyId, | ||
| 46 | + CreatorId: d.CreatorId, | ||
| 47 | + HrBp: d.HrBp, | ||
| 48 | + Pms: d.Pms, | ||
| 49 | + Recipients: d.Recipients, | ||
| 50 | + Template: d.Template, | ||
| 51 | + CreatedAt: d.CreatedAt, | ||
| 52 | + UpdatedAt: d.UpdatedAt, | ||
| 53 | + DeletedAt: d.DeletedAt, | ||
| 54 | + } | ||
| 55 | +} | ||
| 56 | + | ||
| 57 | +func (repo *EvaluationProjectRepository) nextIdentify() (int64, error) { | ||
| 58 | + return utils.NewSnowflakeId() | ||
| 59 | +} | ||
| 60 | + | ||
| 61 | +func (repo *EvaluationProjectRepository) Insert(d *domain.EvaluationProject) (*domain.EvaluationProject, error) { | ||
| 62 | + var isCreate = d.Id == 0 | ||
| 63 | + if isCreate { | ||
| 64 | + id, err := repo.nextIdentify() | ||
| 65 | + if err != nil { | ||
| 66 | + return d, err | ||
| 67 | + } | ||
| 68 | + d.Id = id | ||
| 69 | + d.CreatedAt = time.Now() | ||
| 70 | + d.UpdatedAt = d.CreatedAt | ||
| 71 | + } else { | ||
| 72 | + d.UpdatedAt = time.Now() | ||
| 73 | + } | ||
| 74 | + m := repo.TransformToModel(d) | ||
| 75 | + tx := repo.transactionContext.PgTx | ||
| 76 | + var err error | ||
| 77 | + if isCreate { | ||
| 78 | + _, err = tx.Model(&m).Returning("id").Insert() | ||
| 79 | + } else { | ||
| 80 | + _, err = tx.Model(&m).Returning("id").WherePK().Update() // 更新和删除必须增加条件 | ||
| 81 | + } | ||
| 82 | + if err != nil { | ||
| 83 | + return nil, err | ||
| 84 | + } | ||
| 85 | + d.Id = m.Id | ||
| 86 | + return d, nil | ||
| 87 | +} | ||
| 88 | + | ||
| 89 | +func (repo *EvaluationProjectRepository) Remove(d *domain.EvaluationProject) (*domain.EvaluationProject, error) { | ||
| 90 | + tx := repo.transactionContext.PgTx | ||
| 91 | + nowTime := time.Now() | ||
| 92 | + m := repo.TransformToModel(d) | ||
| 93 | + m.DeletedAt = &nowTime | ||
| 94 | + if _, err := tx.Model(&m).WherePK().Update(); err != nil { | ||
| 95 | + return d, err | ||
| 96 | + } | ||
| 97 | + return d, nil | ||
| 98 | +} | ||
| 99 | + | ||
| 100 | +func (repo *EvaluationProjectRepository) FindOne(queryOptions map[string]interface{}) (*domain.EvaluationProject, error) { | ||
| 101 | + tx := repo.transactionContext.PgTx | ||
| 102 | + m := new(models.EvaluationProject) | ||
| 103 | + query := tx.Model(m) | ||
| 104 | + query.Where("deleted_at isnull") | ||
| 105 | + if id, ok := queryOptions["id"]; ok { | ||
| 106 | + query.Where("id=?", id) | ||
| 107 | + } | ||
| 108 | + if err := query.First(); err != nil { | ||
| 109 | + if errors.Is(err, pg.ErrNoRows) { | ||
| 110 | + return nil, fmt.Errorf("没有此资源") | ||
| 111 | + } else { | ||
| 112 | + return nil, err | ||
| 113 | + } | ||
| 114 | + } | ||
| 115 | + u := repo.TransformToDomain(m) | ||
| 116 | + return &u, nil | ||
| 117 | +} | ||
| 118 | + | ||
| 119 | +func (repo *EvaluationProjectRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.EvaluationProject, error) { | ||
| 120 | + tx := repo.transactionContext.PgTx | ||
| 121 | + var m []*models.EvaluationProject | ||
| 122 | + query := tx.Model(&m). | ||
| 123 | + Where("deleted_at isnull"). | ||
| 124 | + Limit(20) | ||
| 125 | + | ||
| 126 | + if name, ok := queryOptions["name"]; ok { | ||
| 127 | + query.Where("name = ?", name) | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + if companyId, ok := queryOptions["companyId"]; ok { | ||
| 131 | + query.Where("company_id = ?", companyId) | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + if v, ok := queryOptions["limit"].(int); ok { | ||
| 135 | + query.Limit(v) | ||
| 136 | + } | ||
| 137 | + if v, ok := queryOptions["offset"].(int); ok { | ||
| 138 | + query.Offset(v) | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + count, err := query.SelectAndCount() | ||
| 142 | + if err != nil { | ||
| 143 | + return 0, nil, err | ||
| 144 | + } | ||
| 145 | + var arrays []*domain.EvaluationProject | ||
| 146 | + for _, v := range m { | ||
| 147 | + d := repo.TransformToDomain(v) | ||
| 148 | + arrays = append(arrays, &d) | ||
| 149 | + } | ||
| 150 | + return int64(count), arrays, nil | ||
| 151 | +} | ||
| 152 | + | ||
| 153 | +func (repo *EvaluationProjectRepository) Count(queryOptions map[string]interface{}) (int64, error) { | ||
| 154 | + tx := repo.transactionContext.PgTx | ||
| 155 | + m := new(models.EvaluationProject) | ||
| 156 | + query := sqlbuilder.BuildQuery(tx.Model(m), queryOptions) | ||
| 157 | + query.Where("deleted_at isnull") | ||
| 158 | + | ||
| 159 | + if id, ok := queryOptions["id"]; ok { | ||
| 160 | + query.Where("id = ?", id) | ||
| 161 | + } | ||
| 162 | + | ||
| 163 | + if notId, ok := queryOptions["notId"]; ok { | ||
| 164 | + query.Where("id != ?", notId) | ||
| 165 | + } | ||
| 166 | + | ||
| 167 | + if name, ok := queryOptions["name"]; ok { | ||
| 168 | + query.Where("name = ?", name) | ||
| 169 | + } | ||
| 170 | + | ||
| 171 | + if companyId, ok := queryOptions["companyId"]; ok { | ||
| 172 | + query.Where("company_id = ?", companyId) | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + count, err := query.Count() | ||
| 176 | + if err != nil { | ||
| 177 | + return 0, err | ||
| 178 | + } | ||
| 179 | + return int64(count), nil | ||
| 180 | +} |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "github.com/go-pg/pg/v10" | ||
| 7 | + "github.com/linmadan/egglib-go/persistent/pg/sqlbuilder" | ||
| 8 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/pg/models" | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/utils" | ||
| 12 | + "time" | ||
| 13 | +) | ||
| 14 | + | ||
| 15 | +type EvaluationRuleRepository struct { | ||
| 16 | + transactionContext *pgTransaction.TransactionContext | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +func NewEvaluationRuleRepository(transactionContext *pgTransaction.TransactionContext) *EvaluationRuleRepository { | ||
| 20 | + return &EvaluationRuleRepository{transactionContext: transactionContext} | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (repo *EvaluationRuleRepository) TransformToDomain(m *models.EvaluationRule) domain.EvaluationRule { | ||
| 24 | + return domain.EvaluationRule{ | ||
| 25 | + Id: m.Id, | ||
| 26 | + Name: m.Name, | ||
| 27 | + Remark: m.Remark, | ||
| 28 | + CompanyId: m.CompanyId, | ||
| 29 | + CreatorId: m.CreatorId, | ||
| 30 | + Type: m.Type, | ||
| 31 | + Rating: m.Rating, | ||
| 32 | + Score: m.Score, | ||
| 33 | + CreatedAt: m.CreatedAt, | ||
| 34 | + UpdatedAt: m.UpdatedAt, | ||
| 35 | + DeletedAt: m.DeletedAt, | ||
| 36 | + } | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +func (repo *EvaluationRuleRepository) TransformToModel(d *domain.EvaluationRule) models.EvaluationRule { | ||
| 40 | + return models.EvaluationRule{ | ||
| 41 | + Id: d.Id, | ||
| 42 | + Name: d.Name, | ||
| 43 | + Remark: d.Remark, | ||
| 44 | + CompanyId: d.CompanyId, | ||
| 45 | + CreatorId: d.CreatorId, | ||
| 46 | + Type: d.Type, | ||
| 47 | + Rating: d.Rating, | ||
| 48 | + Score: d.Score, | ||
| 49 | + CreatedAt: d.CreatedAt, | ||
| 50 | + UpdatedAt: d.UpdatedAt, | ||
| 51 | + DeletedAt: d.DeletedAt, | ||
| 52 | + } | ||
| 53 | +} | ||
| 54 | + | ||
| 55 | +func (repo *EvaluationRuleRepository) nextIdentify() (int64, error) { | ||
| 56 | + return utils.NewSnowflakeId() | ||
| 57 | +} | ||
| 58 | + | ||
| 59 | +func (repo *EvaluationRuleRepository) Insert(d *domain.EvaluationRule) (*domain.EvaluationRule, error) { | ||
| 60 | + var isCreate = d.Id == 0 | ||
| 61 | + if isCreate { | ||
| 62 | + id, err := repo.nextIdentify() | ||
| 63 | + if err != nil { | ||
| 64 | + return d, err | ||
| 65 | + } | ||
| 66 | + d.Id = id | ||
| 67 | + d.CreatedAt = time.Now() | ||
| 68 | + d.UpdatedAt = d.CreatedAt | ||
| 69 | + } else { | ||
| 70 | + d.UpdatedAt = time.Now() | ||
| 71 | + } | ||
| 72 | + m := repo.TransformToModel(d) | ||
| 73 | + tx := repo.transactionContext.PgTx | ||
| 74 | + var err error | ||
| 75 | + if isCreate { | ||
| 76 | + _, err = tx.Model(&m).Returning("id").Insert() | ||
| 77 | + } else { | ||
| 78 | + _, err = tx.Model(&m).Returning("id").WherePK().Update() // 更新和删除必须增加条件 | ||
| 79 | + } | ||
| 80 | + if err != nil { | ||
| 81 | + return nil, err | ||
| 82 | + } | ||
| 83 | + d.Id = m.Id | ||
| 84 | + return d, nil | ||
| 85 | +} | ||
| 86 | + | ||
| 87 | +func (repo *EvaluationRuleRepository) Remove(d *domain.EvaluationRule) (*domain.EvaluationRule, error) { | ||
| 88 | + tx := repo.transactionContext.PgTx | ||
| 89 | + nowTime := time.Now() | ||
| 90 | + m := repo.TransformToModel(d) | ||
| 91 | + m.DeletedAt = &nowTime | ||
| 92 | + if _, err := tx.Model(&m).WherePK().Update(); err != nil { | ||
| 93 | + return d, err | ||
| 94 | + } | ||
| 95 | + return d, nil | ||
| 96 | +} | ||
| 97 | + | ||
| 98 | +func (repo *EvaluationRuleRepository) FindOne(queryOptions map[string]interface{}) (*domain.EvaluationRule, error) { | ||
| 99 | + tx := repo.transactionContext.PgTx | ||
| 100 | + m := new(models.EvaluationRule) | ||
| 101 | + query := tx.Model(m) | ||
| 102 | + query.Where("deleted_at isnull") | ||
| 103 | + if id, ok := queryOptions["id"]; ok { | ||
| 104 | + query.Where("id=?", id) | ||
| 105 | + } | ||
| 106 | + if err := query.First(); err != nil { | ||
| 107 | + if errors.Is(err, pg.ErrNoRows) { | ||
| 108 | + return nil, fmt.Errorf("没有此资源") | ||
| 109 | + } else { | ||
| 110 | + return nil, err | ||
| 111 | + } | ||
| 112 | + } | ||
| 113 | + u := repo.TransformToDomain(m) | ||
| 114 | + return &u, nil | ||
| 115 | +} | ||
| 116 | + | ||
| 117 | +func (repo *EvaluationRuleRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.EvaluationRule, error) { | ||
| 118 | + tx := repo.transactionContext.PgTx | ||
| 119 | + var m []*models.EvaluationRule | ||
| 120 | + query := tx.Model(&m).Where("deleted_at isnull").Limit(20) | ||
| 121 | + | ||
| 122 | + if name, ok := queryOptions["name"]; ok { | ||
| 123 | + query.Where("name = ?", name) | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + if companyId, ok := queryOptions["companyId"]; ok { | ||
| 127 | + query.Where("company_id = ?", companyId) | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + if v, ok := queryOptions["limit"].(int); ok { | ||
| 131 | + query.Limit(v) | ||
| 132 | + } | ||
| 133 | + if v, ok := queryOptions["offset"].(int); ok { | ||
| 134 | + query.Offset(v) | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + query.Count() | ||
| 138 | + count, err := query.SelectAndCount() | ||
| 139 | + if err != nil { | ||
| 140 | + return 0, nil, err | ||
| 141 | + } | ||
| 142 | + var arrays []*domain.EvaluationRule | ||
| 143 | + for _, v := range m { | ||
| 144 | + d := repo.TransformToDomain(v) | ||
| 145 | + arrays = append(arrays, &d) | ||
| 146 | + } | ||
| 147 | + return int64(count), arrays, nil | ||
| 148 | +} | ||
| 149 | + | ||
| 150 | +func (repo *EvaluationRuleRepository) Count(queryOptions map[string]interface{}) (int64, error) { | ||
| 151 | + tx := repo.transactionContext.PgTx | ||
| 152 | + m := new(models.EvaluationRule) | ||
| 153 | + query := sqlbuilder.BuildQuery(tx.Model(m), queryOptions) | ||
| 154 | + query.Where("deleted_at isnull") | ||
| 155 | + | ||
| 156 | + if id, ok := queryOptions["id"]; ok { | ||
| 157 | + query.Where("id = ?", id) | ||
| 158 | + } | ||
| 159 | + | ||
| 160 | + if notId, ok := queryOptions["notId"]; ok { | ||
| 161 | + query.Where("id != ?", notId) | ||
| 162 | + } | ||
| 163 | + | ||
| 164 | + if name, ok := queryOptions["name"]; ok { | ||
| 165 | + query.Where("name = ?", name) | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + if companyId, ok := queryOptions["companyId"]; ok { | ||
| 169 | + query.Where("company_id = ?", companyId) | ||
| 170 | + } | ||
| 171 | + | ||
| 172 | + count, err := query.Count() | ||
| 173 | + if err != nil { | ||
| 174 | + return 0, err | ||
| 175 | + } | ||
| 176 | + return int64(count), nil | ||
| 177 | +} |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "github.com/go-pg/pg/v10" | ||
| 7 | + "github.com/linmadan/egglib-go/persistent/pg/sqlbuilder" | ||
| 8 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/pg/models" | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/utils" | ||
| 12 | + "time" | ||
| 13 | +) | ||
| 14 | + | ||
| 15 | +type EvaluationTemplateRepository struct { | ||
| 16 | + transactionContext *pgTransaction.TransactionContext | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +func NewEvaluationTemplateRepository(transactionContext *pgTransaction.TransactionContext) *EvaluationTemplateRepository { | ||
| 20 | + return &EvaluationTemplateRepository{transactionContext: transactionContext} | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (repo *EvaluationTemplateRepository) TransformToDomain(m *models.EvaluationTemplate) domain.EvaluationTemplate { | ||
| 24 | + return domain.EvaluationTemplate{ | ||
| 25 | + Id: m.Id, | ||
| 26 | + Name: m.Name, | ||
| 27 | + Describe: m.Describe, | ||
| 28 | + CompanyId: m.CompanyId, | ||
| 29 | + CreatorId: m.CreatorId, | ||
| 30 | + State: m.State, | ||
| 31 | + Link: m.Link, | ||
| 32 | + CreatedAt: m.CreatedAt, | ||
| 33 | + UpdatedAt: m.UpdatedAt, | ||
| 34 | + DeletedAt: m.DeletedAt, | ||
| 35 | + } | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +func (repo *EvaluationTemplateRepository) TransformToModel(d *domain.EvaluationTemplate) models.EvaluationTemplate { | ||
| 39 | + return models.EvaluationTemplate{ | ||
| 40 | + Id: d.Id, | ||
| 41 | + Name: d.Name, | ||
| 42 | + Describe: d.Describe, | ||
| 43 | + CompanyId: d.CompanyId, | ||
| 44 | + CreatorId: d.CreatorId, | ||
| 45 | + State: d.State, | ||
| 46 | + Link: d.Link, | ||
| 47 | + CreatedAt: d.CreatedAt, | ||
| 48 | + UpdatedAt: d.UpdatedAt, | ||
| 49 | + DeletedAt: d.DeletedAt, | ||
| 50 | + } | ||
| 51 | +} | ||
| 52 | + | ||
| 53 | +func (repo *EvaluationTemplateRepository) nextIdentify() (int64, error) { | ||
| 54 | + return utils.NewSnowflakeId() | ||
| 55 | +} | ||
| 56 | + | ||
| 57 | +func (repo *EvaluationTemplateRepository) Insert(d *domain.EvaluationTemplate) (*domain.EvaluationTemplate, error) { | ||
| 58 | + var isCreate = d.Id == 0 | ||
| 59 | + if isCreate { | ||
| 60 | + id, err := repo.nextIdentify() | ||
| 61 | + if err != nil { | ||
| 62 | + return d, err | ||
| 63 | + } | ||
| 64 | + d.Id = id | ||
| 65 | + d.CreatedAt = time.Now() | ||
| 66 | + d.UpdatedAt = d.CreatedAt | ||
| 67 | + } else { | ||
| 68 | + d.UpdatedAt = time.Now() | ||
| 69 | + } | ||
| 70 | + m := repo.TransformToModel(d) | ||
| 71 | + tx := repo.transactionContext.PgTx | ||
| 72 | + var err error | ||
| 73 | + if isCreate { | ||
| 74 | + _, err = tx.Model(&m).Returning("id").Insert() | ||
| 75 | + } else { | ||
| 76 | + _, err = tx.Model(&m).Returning("id").WherePK().Update() // 更新和删除必须增加条件 | ||
| 77 | + } | ||
| 78 | + if err != nil { | ||
| 79 | + return nil, err | ||
| 80 | + } | ||
| 81 | + d.Id = m.Id | ||
| 82 | + return d, nil | ||
| 83 | +} | ||
| 84 | + | ||
| 85 | +func (repo *EvaluationTemplateRepository) Remove(d *domain.EvaluationTemplate) (*domain.EvaluationTemplate, error) { | ||
| 86 | + tx := repo.transactionContext.PgTx | ||
| 87 | + nowTime := time.Now() | ||
| 88 | + m := repo.TransformToModel(d) | ||
| 89 | + m.DeletedAt = &nowTime | ||
| 90 | + if _, err := tx.Model(&m).WherePK().Update(); err != nil { | ||
| 91 | + return d, err | ||
| 92 | + } | ||
| 93 | + return d, nil | ||
| 94 | +} | ||
| 95 | + | ||
| 96 | +func (repo *EvaluationTemplateRepository) FindOne(queryOptions map[string]interface{}) (*domain.EvaluationTemplate, error) { | ||
| 97 | + tx := repo.transactionContext.PgTx | ||
| 98 | + m := new(models.EvaluationTemplate) | ||
| 99 | + query := tx.Model(m) | ||
| 100 | + query.Where("deleted_at isnull") | ||
| 101 | + if id, ok := queryOptions["id"]; ok { | ||
| 102 | + query.Where("id=?", id) | ||
| 103 | + } | ||
| 104 | + if err := query.First(); err != nil { | ||
| 105 | + if errors.Is(err, pg.ErrNoRows) { | ||
| 106 | + return nil, fmt.Errorf("没有此资源") | ||
| 107 | + } else { | ||
| 108 | + return nil, err | ||
| 109 | + } | ||
| 110 | + } | ||
| 111 | + u := repo.TransformToDomain(m) | ||
| 112 | + return &u, nil | ||
| 113 | +} | ||
| 114 | + | ||
| 115 | +func (repo *EvaluationTemplateRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.EvaluationTemplate, error) { | ||
| 116 | + tx := repo.transactionContext.PgTx | ||
| 117 | + var m []*models.EvaluationTemplate | ||
| 118 | + query := tx.Model(&m). | ||
| 119 | + Where("deleted_at isnull"). | ||
| 120 | + Limit(20) | ||
| 121 | + | ||
| 122 | + if name, ok := queryOptions["name"]; ok { | ||
| 123 | + query.Where("name = ?", name) | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + if companyId, ok := queryOptions["companyId"]; ok { | ||
| 127 | + query.Where("company_id = ?", companyId) | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + if v, ok := queryOptions["limit"].(int); ok { | ||
| 131 | + query.Limit(v) | ||
| 132 | + } | ||
| 133 | + if v, ok := queryOptions["offset"].(int); ok { | ||
| 134 | + query.Offset(v) | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + count, err := query.SelectAndCount() | ||
| 138 | + if err != nil { | ||
| 139 | + return 0, nil, err | ||
| 140 | + } | ||
| 141 | + var arrays []*domain.EvaluationTemplate | ||
| 142 | + for _, v := range m { | ||
| 143 | + d := repo.TransformToDomain(v) | ||
| 144 | + arrays = append(arrays, &d) | ||
| 145 | + } | ||
| 146 | + return int64(count), arrays, nil | ||
| 147 | +} | ||
| 148 | + | ||
| 149 | +func (repo *EvaluationTemplateRepository) Count(queryOptions map[string]interface{}) (int64, error) { | ||
| 150 | + tx := repo.transactionContext.PgTx | ||
| 151 | + m := new(models.EvaluationTemplate) | ||
| 152 | + query := sqlbuilder.BuildQuery(tx.Model(m), queryOptions) | ||
| 153 | + query.Where("deleted_at isnull") | ||
| 154 | + | ||
| 155 | + if id, ok := queryOptions["id"]; ok { | ||
| 156 | + query.Where("id = ?", id) | ||
| 157 | + } | ||
| 158 | + | ||
| 159 | + if notId, ok := queryOptions["notId"]; ok { | ||
| 160 | + query.Where("id != ?", notId) | ||
| 161 | + } | ||
| 162 | + | ||
| 163 | + if name, ok := queryOptions["name"]; ok { | ||
| 164 | + query.Where("name = ?", name) | ||
| 165 | + } | ||
| 166 | + | ||
| 167 | + if companyId, ok := queryOptions["companyId"]; ok { | ||
| 168 | + query.Where("company_id = ?", companyId) | ||
| 169 | + } | ||
| 170 | + | ||
| 171 | + count, err := query.Count() | ||
| 172 | + if err != nil { | ||
| 173 | + return 0, err | ||
| 174 | + } | ||
| 175 | + return int64(count), nil | ||
| 176 | +} |
-
请 注册 或 登录 后发表评论