正在显示
12 个修改的文件
包含
637 行增加
和
9 行删除
| @@ -263,3 +263,11 @@ func CreateTaskAnomalyRepository(options map[string]interface{}) domain.TaskAnom | @@ -263,3 +263,11 @@ func CreateTaskAnomalyRepository(options map[string]interface{}) domain.TaskAnom | ||
| 263 | } | 263 | } |
| 264 | return repository.NewTaskAnomalyRepository(transactionContext) | 264 | return repository.NewTaskAnomalyRepository(transactionContext) |
| 265 | } | 265 | } |
| 266 | + | ||
| 267 | +func CreateLogOptRepository(options map[string]interface{}) domain.LogOptRepository { | ||
| 268 | + var transactionContext *pg.TransactionContext | ||
| 269 | + if value, ok := options["transactionContext"]; ok { | ||
| 270 | + transactionContext = value.(*pg.TransactionContext) | ||
| 271 | + } | ||
| 272 | + return repository.NewLogOptRepository(transactionContext) | ||
| 273 | +} |
| 1 | +package command | ||
| 2 | + | ||
| 3 | +import "github.com/beego/beego/v2/core/validation" | ||
| 4 | + | ||
| 5 | +type QueryLogCommand struct { | ||
| 6 | + CompanyId int64 `cname:"公司ID" json:"-"` | ||
| 7 | + TaskId int `cname:"任务ID" json:"taskId,string" valid:"Required"` | ||
| 8 | + PageNumber int64 `cname:"分页页码" json:"pageNumber" valid:"Required"` | ||
| 9 | + PageSize int64 `cname:"分页数量" json:"pageSize" valid:"Required"` | ||
| 10 | +} | ||
| 11 | + | ||
| 12 | +func (in *QueryLogCommand) Valid(*validation.Validation) { | ||
| 13 | + | ||
| 14 | +} |
pkg/application/log_opt/log_opt.go
0 → 100644
| 1 | +package log_opt | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "github.com/linmadan/egglib-go/core/application" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/log" | ||
| 9 | + "strconv" | ||
| 10 | + "time" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +func CreateTask(u *domain.UserAuth, task domain.Task) error { | ||
| 14 | + transactionContext, err := factory.StartTransaction() | ||
| 15 | + if err != nil { | ||
| 16 | + return err | ||
| 17 | + } | ||
| 18 | + defer func() { | ||
| 19 | + _ = transactionContext.RollbackTransaction() | ||
| 20 | + if err := recover(); err != nil { | ||
| 21 | + log.Logger.Error(application.ThrowError(application.BUSINESS_ERROR, fmt.Sprintf("创建任务日志异常:%s", err)).Error()) | ||
| 22 | + } | ||
| 23 | + }() | ||
| 24 | + logOptRepo := factory.CreateLogOptRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 25 | + | ||
| 26 | + logOpt := createdLogOpt(u, strconv.Itoa(task.Id)) | ||
| 27 | + logOpt.OptMethod = domain.CREATE | ||
| 28 | + logOpt.OptField = "创建了任务" | ||
| 29 | + logOpt.OptValue = task.Alias | ||
| 30 | + | ||
| 31 | + _, err = logOptRepo.Insert(logOpt) | ||
| 32 | + if err != nil { | ||
| 33 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 34 | + } | ||
| 35 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 36 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 37 | + } | ||
| 38 | + return nil | ||
| 39 | +} | ||
| 40 | + | ||
| 41 | +func UpdateTask(u *domain.UserAuth, | ||
| 42 | + srcTask *domain.Task, | ||
| 43 | + newTask *domain.Task, | ||
| 44 | + srcStage []*domain.TaskStage, | ||
| 45 | + newStage []*domain.TaskStage, | ||
| 46 | +) error { | ||
| 47 | + transactionContext, err := factory.StartTransaction() | ||
| 48 | + if err != nil { | ||
| 49 | + return err | ||
| 50 | + } | ||
| 51 | + defer func() { | ||
| 52 | + _ = transactionContext.RollbackTransaction() | ||
| 53 | + if err := recover(); err != nil { | ||
| 54 | + log.Logger.Error(application.ThrowError(application.BUSINESS_ERROR, fmt.Sprintf("更新任务日志异常:%s", err)).Error()) | ||
| 55 | + } | ||
| 56 | + }() | ||
| 57 | + logOptRepo := factory.CreateLogOptRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 58 | + | ||
| 59 | + var logArray = compareTask(u, srcTask, newTask) | ||
| 60 | + var logArray2 = compareStage(u, newTask.Id, srcStage, newStage) | ||
| 61 | + logArray = append(logArray, logArray2...) | ||
| 62 | + if len(logArray) == 0 { | ||
| 63 | + return nil | ||
| 64 | + } | ||
| 65 | + for _, v := range logArray { | ||
| 66 | + _, err = logOptRepo.Insert(v) | ||
| 67 | + if err != nil { | ||
| 68 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 72 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 73 | + } | ||
| 74 | + return nil | ||
| 75 | +} | ||
| 76 | + | ||
| 77 | +func compareTask(u *domain.UserAuth, srcTask *domain.Task, newTask *domain.Task) []*domain.LogOpt { | ||
| 78 | + var taskId = strconv.Itoa(newTask.Id) | ||
| 79 | + logArray := make([]*domain.LogOpt, 0) | ||
| 80 | + if srcTask.Alias != newTask.Alias { | ||
| 81 | + logOpt := createdLogOpt(u, taskId) | ||
| 82 | + logOpt.OptField = "修改了任务名称" | ||
| 83 | + logOpt.OptValue = newTask.Alias | ||
| 84 | + logArray = append(logArray, logOpt) | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + if srcTask.EndTime != newTask.EndTime { | ||
| 88 | + logOpt := createdLogOpt(u, taskId) | ||
| 89 | + logOpt.OptField = "修改了任务截止时间" | ||
| 90 | + if newTask.EndTime == 0 { | ||
| 91 | + logOpt.OptValue = "未设置时间" | ||
| 92 | + } else { | ||
| 93 | + logOpt.OptValue = time.Unix(newTask.EndTime, 0).Local().Format("2006-01-02 15:04:05") | ||
| 94 | + } | ||
| 95 | + logArray = append(logArray, logOpt) | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + if srcTask.UseEndTime != newTask.UseEndTime { | ||
| 99 | + logOpt := createdLogOpt(u, taskId) | ||
| 100 | + logOpt.OptField = "修改了任务截止时间应用到日评中" | ||
| 101 | + if newTask.UseEndTime == 0 { | ||
| 102 | + logOpt.OptValue = "不应用" | ||
| 103 | + } else { | ||
| 104 | + logOpt.OptValue = "应用" | ||
| 105 | + } | ||
| 106 | + logArray = append(logArray, logOpt) | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + if srcTask.LevelName != newTask.LevelName { | ||
| 110 | + logOpt := createdLogOpt(u, taskId) | ||
| 111 | + logOpt.OptField = "修改了任务类型" | ||
| 112 | + logOpt.OptValue = newTask.LevelName | ||
| 113 | + logArray = append(logArray, logOpt) | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + if srcTask.SortBy != newTask.SortBy { | ||
| 117 | + logOpt := createdLogOpt(u, taskId) | ||
| 118 | + logOpt.OptField = "修改了任务优先级" | ||
| 119 | + logOpt.OptValue = newTask.SortBy.Named() | ||
| 120 | + logArray = append(logArray, logOpt) | ||
| 121 | + } | ||
| 122 | + | ||
| 123 | + if srcTask.AssistFlagMax != newTask.AssistFlagMax { | ||
| 124 | + logOpt := createdLogOpt(u, taskId) | ||
| 125 | + logOpt.OptField = "修改了上级辅导时间" | ||
| 126 | + logOpt.OptValue = strconv.Itoa(newTask.AssistFlagMax) | ||
| 127 | + logArray = append(logArray, logOpt) | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + // 新的任务相关方 | ||
| 131 | + uidNewMap := map[int]int{} | ||
| 132 | + for _, id := range newTask.RelatedUser { | ||
| 133 | + uidNewMap[id] = id | ||
| 134 | + } | ||
| 135 | + // 被移除的任务相关方 | ||
| 136 | + removedIds := make([]int, 0) | ||
| 137 | + for _, id := range srcTask.RelatedUser { | ||
| 138 | + if _, ok := uidNewMap[id]; ok { | ||
| 139 | + delete(uidNewMap, id) // 删除后,剩余的都是新增的 | ||
| 140 | + } else { | ||
| 141 | + removedIds = append(removedIds, id) | ||
| 142 | + } | ||
| 143 | + } | ||
| 144 | + | ||
| 145 | + // 变动的任务相关方 | ||
| 146 | + changeIds := make([]int, 0) | ||
| 147 | + for _, v := range removedIds { | ||
| 148 | + changeIds = append(changeIds, v) | ||
| 149 | + } | ||
| 150 | + for _, v := range uidNewMap { | ||
| 151 | + changeIds = append(changeIds, v) | ||
| 152 | + } | ||
| 153 | + userMap, _ := getUserMap(changeIds) | ||
| 154 | + | ||
| 155 | + for _, v := range removedIds { | ||
| 156 | + logOpt := createdLogOpt(u, taskId) | ||
| 157 | + logOpt.OptMethod = domain.DELETE | ||
| 158 | + logOpt.OptField = "移除了任务相关方" | ||
| 159 | + if v, ok := userMap[v]; ok { | ||
| 160 | + logOpt.OptValue = v.Name | ||
| 161 | + } | ||
| 162 | + logArray = append(logArray, logOpt) | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | + for _, v := range uidNewMap { | ||
| 166 | + logOpt := createdLogOpt(u, taskId) | ||
| 167 | + logOpt.OptMethod = domain.CREATE | ||
| 168 | + logOpt.OptField = "添加了任务相关方" | ||
| 169 | + if v, ok := userMap[v]; ok { | ||
| 170 | + logOpt.OptValue = v.Name | ||
| 171 | + } | ||
| 172 | + logArray = append(logArray, logOpt) | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + return logArray | ||
| 176 | +} | ||
| 177 | + | ||
| 178 | +func compareStage(u *domain.UserAuth, id int, srcStage []*domain.TaskStage, newStage []*domain.TaskStage) []*domain.LogOpt { | ||
| 179 | + taskId := strconv.Itoa(id) | ||
| 180 | + logArray := make([]*domain.LogOpt, 0) | ||
| 181 | + srcMap := map[int]*domain.TaskStage{} | ||
| 182 | + for i := range srcStage { | ||
| 183 | + it := srcStage[i] | ||
| 184 | + srcMap[it.Id] = it | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + for i := range newStage { | ||
| 188 | + it := newStage[i] | ||
| 189 | + if it.DeletedAt != nil { | ||
| 190 | + logOpt := createdLogOpt(u, taskId) | ||
| 191 | + logOpt.OptMethod = domain.DELETE | ||
| 192 | + logOpt.OptField = "删除了里程碑" | ||
| 193 | + logOpt.OptValue = it.Name | ||
| 194 | + logArray = append(logArray, logOpt) | ||
| 195 | + continue | ||
| 196 | + } | ||
| 197 | + | ||
| 198 | + // 新旧比对 | ||
| 199 | + if v, ok := srcMap[it.Id]; ok { | ||
| 200 | + if it.Name != v.Name { | ||
| 201 | + logOpt := createdLogOpt(u, taskId) | ||
| 202 | + logOpt.OptField = "修改了里程碑名称" | ||
| 203 | + logOpt.OptValue = it.Name | ||
| 204 | + logArray = append(logArray, logOpt) | ||
| 205 | + } | ||
| 206 | + if it.PlanCompletedAt != v.PlanCompletedAt { | ||
| 207 | + logOpt := createdLogOpt(u, taskId) | ||
| 208 | + logOpt.OptField = "修改了里程碑" + it.Name + "计划完成时间" | ||
| 209 | + if it.PlanCompletedAt == 0 { | ||
| 210 | + logOpt.OptValue = "未设置时间" | ||
| 211 | + } else { | ||
| 212 | + logOpt.OptValue = time.Unix(it.PlanCompletedAt, 0).Local().Format("2006-01-02 15:04:05") | ||
| 213 | + } | ||
| 214 | + logArray = append(logArray, logOpt) | ||
| 215 | + } | ||
| 216 | + } else { | ||
| 217 | + logOpt := createdLogOpt(u, taskId) | ||
| 218 | + logOpt.OptMethod = domain.CREATE | ||
| 219 | + logOpt.OptField = "创建了里程碑" | ||
| 220 | + logOpt.OptValue = it.Name | ||
| 221 | + logArray = append(logArray, logOpt) | ||
| 222 | + } | ||
| 223 | + } | ||
| 224 | + | ||
| 225 | + return logArray | ||
| 226 | +} | ||
| 227 | + | ||
| 228 | +func getUserMap(ids []int) (map[int]*domain.User, error) { | ||
| 229 | + userMap := map[int]*domain.User{} | ||
| 230 | + if len(ids) == 0 { | ||
| 231 | + return userMap, nil | ||
| 232 | + } | ||
| 233 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
| 234 | + if err != nil { | ||
| 235 | + return userMap, err | ||
| 236 | + } | ||
| 237 | + userRepo := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 238 | + _, users, err := userRepo.Find(map[string]interface{}{"ids": ids, "limit": len(ids)}) | ||
| 239 | + if err != nil { | ||
| 240 | + return userMap, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 241 | + } | ||
| 242 | + for i := range users { | ||
| 243 | + user := users[i] | ||
| 244 | + userMap[int(user.Id)] = user | ||
| 245 | + } | ||
| 246 | + return userMap, nil | ||
| 247 | +} | ||
| 248 | + | ||
| 249 | +func createdLogOpt(u *domain.UserAuth, taskId string) *domain.LogOpt { | ||
| 250 | + var createdAt = time.Now() | ||
| 251 | + var updatedAt = createdAt | ||
| 252 | + operator := domain.StaffDesc{ | ||
| 253 | + UserId: int(u.UserId), | ||
| 254 | + CompanyName: u.CompanyName, | ||
| 255 | + Account: u.Phone, | ||
| 256 | + UserName: u.Name, | ||
| 257 | + } | ||
| 258 | + return &domain.LogOpt{ | ||
| 259 | + Id: 0, | ||
| 260 | + CompanyId: int(u.CompanyId), | ||
| 261 | + Operator: operator, | ||
| 262 | + OptMethod: domain.UPDATE, | ||
| 263 | + OptTargetId: taskId, | ||
| 264 | + OptField: "", | ||
| 265 | + OptValue: "", | ||
| 266 | + CreatedAt: createdAt, | ||
| 267 | + UpdatedAt: updatedAt, | ||
| 268 | + } | ||
| 269 | +} |
pkg/application/log_opt/log_opt_service.go
0 → 100644
| 1 | +package log_opt | ||
| 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/factory" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/log_opt/command" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +type LogOptService struct { | ||
| 11 | +} | ||
| 12 | + | ||
| 13 | +func NewLogOptService() *LogOptService { | ||
| 14 | + newRoleService := &LogOptService{} | ||
| 15 | + return newRoleService | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +func (rs *LogOptService) List(in *command.QueryLogCommand) (interface{}, error) { | ||
| 19 | + transactionContext, err := factory.ValidateStartTransaction(in) | ||
| 20 | + if err != nil { | ||
| 21 | + return nil, err | ||
| 22 | + } | ||
| 23 | + defer func() { | ||
| 24 | + transactionContext.RollbackTransaction() | ||
| 25 | + }() | ||
| 26 | + | ||
| 27 | + ssMap := tool_funs.SimpleStructToMap(in) | ||
| 28 | + ssMap["companyId"] = in.CompanyId | ||
| 29 | + ssMap["optTargetId"] = in.TaskId | ||
| 30 | + | ||
| 31 | + logRepository := factory.CreateLogOptRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 32 | + total, logList, err := logRepository.Find(ssMap) | ||
| 33 | + if err != nil { | ||
| 34 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 38 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + return tool_funs.SimpleWrapGridMap(total, logList), nil | ||
| 42 | +} |
| @@ -9,7 +9,7 @@ type UpdateTaskCommand struct { | @@ -9,7 +9,7 @@ type UpdateTaskCommand struct { | ||
| 9 | RelatedUserId []string `json:"relatedUserId"` // 相关人员id | 9 | RelatedUserId []string `json:"relatedUserId"` // 相关人员id |
| 10 | SortBy int `json:"sortBy"` // 优先级排序;值越小优先级越高 | 10 | SortBy int `json:"sortBy"` // 优先级排序;值越小优先级越高 |
| 11 | EndTime int64 `json:"endTime"` // 任务截止的时间戳,单位:秒;等于0时表示未设置时间 | 11 | EndTime int64 `json:"endTime"` // 任务截止的时间戳,单位:秒;等于0时表示未设置时间 |
| 12 | - UseEndtime int `json:"useEndTime"` // 是否应用任务截止的时间;默认值0:不应用,1:应用 | 12 | + UseEndTime int `json:"useEndTime"` // 是否应用任务截止的时间;默认值0:不应用,1:应用 |
| 13 | StageList []struct { | 13 | StageList []struct { |
| 14 | Id int `json:"id,string"` | 14 | Id int `json:"id,string"` |
| 15 | Name string `json:"name"` //里程碑名称 | 15 | Name string `json:"name"` //里程碑名称 |
| @@ -2,6 +2,7 @@ package service | @@ -2,6 +2,7 @@ package service | ||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "fmt" | 4 | "fmt" |
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/log_opt" | ||
| 5 | "strconv" | 6 | "strconv" |
| 6 | "strings" | 7 | "strings" |
| 7 | "time" | 8 | "time" |
| @@ -116,8 +117,8 @@ func (srv TaskService) CreateTaskByProject(transactionContext application.Transa | @@ -116,8 +117,8 @@ func (srv TaskService) CreateTaskByProject(transactionContext application.Transa | ||
| 116 | return nil | 117 | return nil |
| 117 | } | 118 | } |
| 118 | 119 | ||
| 119 | -// 创建任务 | ||
| 120 | -func (srv TaskService) CreateTask(param *command.CreateTaskCommand) (map[string]interface{}, error) { | 120 | +// CreateTask 创建任务 |
| 121 | +func (srv TaskService) CreateTask(param *command.CreateTaskCommand, userReq *domain.UserAuth) (map[string]interface{}, error) { | ||
| 121 | sortNamed := domain.TaskSortBy(param.SortBy) | 122 | sortNamed := domain.TaskSortBy(param.SortBy) |
| 122 | if sortNamed.Named() == "" { | 123 | if sortNamed.Named() == "" { |
| 123 | return nil, application.ThrowError(application.TRANSACTION_ERROR, "优先级设置错误") | 124 | return nil, application.ThrowError(application.TRANSACTION_ERROR, "优先级设置错误") |
| @@ -220,11 +221,15 @@ func (srv TaskService) CreateTask(param *command.CreateTaskCommand) (map[string] | @@ -220,11 +221,15 @@ func (srv TaskService) CreateTask(param *command.CreateTaskCommand) (map[string] | ||
| 220 | if err := transactionContext.CommitTransaction(); err != nil { | 221 | if err := transactionContext.CommitTransaction(); err != nil { |
| 221 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 222 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 222 | } | 223 | } |
| 224 | + | ||
| 225 | + // 生成创建日志 | ||
| 226 | + _ = log_opt.CreateTask(userReq, newTask) | ||
| 227 | + | ||
| 223 | return map[string]interface{}{"id": newTask.Id}, nil | 228 | return map[string]interface{}{"id": newTask.Id}, nil |
| 224 | } | 229 | } |
| 225 | 230 | ||
| 226 | -// 更新任务 | ||
| 227 | -func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string]interface{}, error) { | 231 | +// UpdateTask 更新任务 |
| 232 | +func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand, userReq *domain.UserAuth) (map[string]interface{}, error) { | ||
| 228 | transactionContext, err := factory.CreateTransactionContext(nil) | 233 | transactionContext, err := factory.CreateTransactionContext(nil) |
| 229 | if err != nil { | 234 | if err != nil { |
| 230 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 235 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| @@ -274,6 +279,14 @@ func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string] | @@ -274,6 +279,14 @@ func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string] | ||
| 274 | if leaderList[0].CompanyId != int64(param.CompanyId) { | 279 | if leaderList[0].CompanyId != int64(param.CompanyId) { |
| 275 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "负责人数据验证不通过") | 280 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "负责人数据验证不通过") |
| 276 | } | 281 | } |
| 282 | + | ||
| 283 | + // 拷贝数据 | ||
| 284 | + var copyTask = taskData.Copy() | ||
| 285 | + var copyStageList = make([]*domain.TaskStage, 0) | ||
| 286 | + for _, v := range stageList { | ||
| 287 | + copyStageList = append(copyStageList, v) | ||
| 288 | + } | ||
| 289 | + | ||
| 277 | //更新任务的相关人员 | 290 | //更新任务的相关人员 |
| 278 | relatedUserIds := []int{} | 291 | relatedUserIds := []int{} |
| 279 | for _, val := range param.RelatedUserId { | 292 | for _, val := range param.RelatedUserId { |
| @@ -382,7 +395,7 @@ func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string] | @@ -382,7 +395,7 @@ func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string] | ||
| 382 | } else { | 395 | } else { |
| 383 | taskData.EndTime = dayEndTime(time.Unix(param.EndTime, 10)).Unix() | 396 | taskData.EndTime = dayEndTime(time.Unix(param.EndTime, 10)).Unix() |
| 384 | } | 397 | } |
| 385 | - taskData.UseEndTime = param.UseEndtime | 398 | + taskData.UseEndTime = param.UseEndTime |
| 386 | taskData.AssistFlagMax = param.AssistFlagMax | 399 | taskData.AssistFlagMax = param.AssistFlagMax |
| 387 | err = taskRepo.Save(taskData) | 400 | err = taskRepo.Save(taskData) |
| 388 | if err != nil { | 401 | if err != nil { |
| @@ -420,6 +433,10 @@ func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string] | @@ -420,6 +433,10 @@ func (srv TaskService) UpdateTask(param *command.UpdateTaskCommand) (map[string] | ||
| 420 | if err := transactionContext.CommitTransaction(); err != nil { | 433 | if err := transactionContext.CommitTransaction(); err != nil { |
| 421 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 434 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 422 | } | 435 | } |
| 436 | + | ||
| 437 | + // 生成更新日志 | ||
| 438 | + _ = log_opt.UpdateTask(userReq, ©Task, taskData, copyStageList, stageList) | ||
| 439 | + | ||
| 423 | return map[string]interface{}{ | 440 | return map[string]interface{}{ |
| 424 | "id": param.Id, | 441 | "id": param.Id, |
| 425 | }, nil | 442 | }, nil |
pkg/domain/log_opt.go
0 → 100644
| 1 | +package domain | ||
| 2 | + | ||
| 3 | +import "time" | ||
| 4 | + | ||
| 5 | +type OptMethod int | ||
| 6 | + | ||
| 7 | +const ( | ||
| 8 | + CREATE OptMethod = 1 // 创建 | ||
| 9 | + UPDATE OptMethod = 2 // 更新 | ||
| 10 | + DELETE OptMethod = 3 // 删除 | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +// LogOpt 操作日志 | ||
| 14 | +type LogOpt struct { | ||
| 15 | + //OptModule string `json:"optModule" comment:"操作模块"` | ||
| 16 | + Id int `json:"id,string" comment:"ID" pg:"id,pk"` | ||
| 17 | + CompanyId int `json:"companyId" comment:"公司ID"` | ||
| 18 | + Operator StaffDesc `json:"operator" comment:"操作人"` | ||
| 19 | + OptMethod OptMethod `json:"optMethod" comment:"操作方法"` | ||
| 20 | + OptTargetId string `json:"optTargetId" comment:"操作目标ID"` | ||
| 21 | + OptField string `json:"optField" comment:"操作字段"` | ||
| 22 | + OptValue string `json:"optValue" comment:"操作字段值"` | ||
| 23 | + CreatedAt time.Time `json:"createdAt" comment:"创建时间"` | ||
| 24 | + UpdatedAt time.Time `json:"updatedAt" comment:"更新时间"` | ||
| 25 | + DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"` | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +type LogOptRepository interface { | ||
| 29 | + Insert(opt *LogOpt) (*LogOpt, error) | ||
| 30 | + Remove(opt *LogOpt) (*LogOpt, error) | ||
| 31 | + FindOne(queryOptions map[string]interface{}) (*LogOpt, error) | ||
| 32 | + Find(queryOptions map[string]interface{}) (int64, []*LogOpt, error) | ||
| 33 | + Count(queryOptions map[string]interface{}) (int64, error) | ||
| 34 | +} |
pkg/infrastructure/pg/models/log_opt.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 5 | + "time" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +// LogOpt 操作日志 | ||
| 9 | +type LogOpt struct { | ||
| 10 | + //OptModule string `comment:"操作模块"` | ||
| 11 | + tableName struct{} `comment:"操作日志" pg:"log_opt"` | ||
| 12 | + Id int `comment:"ID" pg:"id,pk"` | ||
| 13 | + CompanyId int `comment:"公司ID"` | ||
| 14 | + Operator domain.StaffDesc `comment:"操作人"` | ||
| 15 | + OptMethod domain.OptMethod `comment:"操作方法"` | ||
| 16 | + OptTargetId string `comment:"操作目标ID"` | ||
| 17 | + OptField string `comment:"操作字段"` | ||
| 18 | + OptValue string `comment:"操作字段值"` | ||
| 19 | + CreatedAt time.Time `comment:"创建时间"` | ||
| 20 | + UpdatedAt time.Time `comment:"更新时间"` | ||
| 21 | + DeletedAt *time.Time `comment:"删除时间"` | ||
| 22 | +} |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "time" | ||
| 7 | + | ||
| 8 | + "github.com/go-pg/pg/v10" | ||
| 9 | + "github.com/linmadan/egglib-go/persistent/pg/sqlbuilder" | ||
| 10 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 12 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/pg/models" | ||
| 13 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/utils" | ||
| 14 | +) | ||
| 15 | + | ||
| 16 | +type LogOptRepository struct { | ||
| 17 | + transactionContext *pgTransaction.TransactionContext | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func NewLogOptRepository(transactionContext *pgTransaction.TransactionContext) *LogOptRepository { | ||
| 21 | + return &LogOptRepository{transactionContext: transactionContext} | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func (repo *LogOptRepository) TransformToDomain(m *models.LogOpt) domain.LogOpt { | ||
| 25 | + return domain.LogOpt{ | ||
| 26 | + Id: m.Id, | ||
| 27 | + CompanyId: m.CompanyId, | ||
| 28 | + Operator: m.Operator, | ||
| 29 | + OptMethod: m.OptMethod, | ||
| 30 | + OptTargetId: m.OptTargetId, | ||
| 31 | + OptField: m.OptField, | ||
| 32 | + OptValue: m.OptValue, | ||
| 33 | + CreatedAt: m.CreatedAt.Local(), | ||
| 34 | + UpdatedAt: m.UpdatedAt.Local(), | ||
| 35 | + DeletedAt: m.DeletedAt, | ||
| 36 | + } | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +func (repo *LogOptRepository) TransformToModel(d *domain.LogOpt) models.LogOpt { | ||
| 40 | + return models.LogOpt{ | ||
| 41 | + Id: d.Id, | ||
| 42 | + CompanyId: d.CompanyId, | ||
| 43 | + Operator: d.Operator, | ||
| 44 | + OptMethod: d.OptMethod, | ||
| 45 | + OptTargetId: d.OptTargetId, | ||
| 46 | + OptField: d.OptField, | ||
| 47 | + OptValue: d.OptValue, | ||
| 48 | + CreatedAt: d.CreatedAt, | ||
| 49 | + UpdatedAt: d.UpdatedAt, | ||
| 50 | + DeletedAt: d.DeletedAt, | ||
| 51 | + } | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +func (repo *LogOptRepository) Insert(d *domain.LogOpt) (*domain.LogOpt, error) { | ||
| 55 | + var isCreate = d.Id == 0 | ||
| 56 | + if isCreate { | ||
| 57 | + id, err := utils.NewSnowflakeId() | ||
| 58 | + if err != nil { | ||
| 59 | + return d, err | ||
| 60 | + } | ||
| 61 | + d.Id = int(id) | ||
| 62 | + d.CreatedAt = time.Now() | ||
| 63 | + d.UpdatedAt = d.CreatedAt | ||
| 64 | + } else { | ||
| 65 | + d.UpdatedAt = time.Now() | ||
| 66 | + } | ||
| 67 | + m := repo.TransformToModel(d) | ||
| 68 | + tx := repo.transactionContext.PgTx | ||
| 69 | + var err error | ||
| 70 | + if isCreate { | ||
| 71 | + _, err = tx.Model(&m).Returning("id").Insert() | ||
| 72 | + } else { | ||
| 73 | + _, err = tx.Model(&m).Returning("id").WherePK().Update() // 更新和删除必须增加条件 | ||
| 74 | + } | ||
| 75 | + if err != nil { | ||
| 76 | + return nil, err | ||
| 77 | + } | ||
| 78 | + d.Id = m.Id | ||
| 79 | + return d, nil | ||
| 80 | +} | ||
| 81 | + | ||
| 82 | +func (repo *LogOptRepository) Remove(d *domain.LogOpt) (*domain.LogOpt, error) { | ||
| 83 | + tx := repo.transactionContext.PgTx | ||
| 84 | + nowTime := time.Now() | ||
| 85 | + m := repo.TransformToModel(d) | ||
| 86 | + m.DeletedAt = &nowTime | ||
| 87 | + if _, err := tx.Model(&m).WherePK().Update(); err != nil { | ||
| 88 | + return d, err | ||
| 89 | + } | ||
| 90 | + return d, nil | ||
| 91 | +} | ||
| 92 | + | ||
| 93 | +func (repo *LogOptRepository) FindOne(queryOptions map[string]interface{}) (*domain.LogOpt, error) { | ||
| 94 | + tx := repo.transactionContext.PgTx | ||
| 95 | + m := new(models.LogOpt) | ||
| 96 | + query := tx.Model(m) | ||
| 97 | + query.Where("deleted_at isnull") | ||
| 98 | + if id, ok := queryOptions["id"]; ok { | ||
| 99 | + query.Where("id=?", id) | ||
| 100 | + } | ||
| 101 | + if err := query.First(); err != nil { | ||
| 102 | + if errors.Is(err, pg.ErrNoRows) { | ||
| 103 | + return nil, fmt.Errorf("没有此资源") | ||
| 104 | + } else { | ||
| 105 | + return nil, err | ||
| 106 | + } | ||
| 107 | + } | ||
| 108 | + u := repo.TransformToDomain(m) | ||
| 109 | + return &u, nil | ||
| 110 | +} | ||
| 111 | + | ||
| 112 | +func (repo *LogOptRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.LogOpt, error) { | ||
| 113 | + tx := repo.transactionContext.PgTx | ||
| 114 | + var m []*models.LogOpt | ||
| 115 | + | ||
| 116 | + query := tx.Model(&m).Where("deleted_at isnull") | ||
| 117 | + | ||
| 118 | + if v, ok := queryOptions["ids"]; ok { | ||
| 119 | + query.Where("id in (?)", pg.In(v)) | ||
| 120 | + } | ||
| 121 | + | ||
| 122 | + if v, ok := queryOptions["id"]; ok { | ||
| 123 | + query.Where("id=?", v) | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + if v, ok := queryOptions["companyId"]; ok { | ||
| 127 | + query.Where("company_id = ?", v) | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + if v, ok := queryOptions["optTargetId"]; ok { | ||
| 131 | + query.Where("opt_target_id = ?", v) | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + if v, ok := queryOptions["limit"].(int64); ok { | ||
| 135 | + query.Limit(int(v)) | ||
| 136 | + } | ||
| 137 | + if v, ok := queryOptions["offset"].(int64); ok { | ||
| 138 | + query.Offset(int(v)) | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + // 按创建时间降序 | ||
| 142 | + query.Order("created_at DESC") | ||
| 143 | + | ||
| 144 | + count, err := query.SelectAndCount() | ||
| 145 | + if err != nil { | ||
| 146 | + return 0, nil, err | ||
| 147 | + } | ||
| 148 | + var arrays []*domain.LogOpt | ||
| 149 | + for _, v := range m { | ||
| 150 | + d := repo.TransformToDomain(v) | ||
| 151 | + arrays = append(arrays, &d) | ||
| 152 | + } | ||
| 153 | + return int64(count), arrays, nil | ||
| 154 | +} | ||
| 155 | + | ||
| 156 | +func (repo *LogOptRepository) Count(queryOptions map[string]interface{}) (int64, error) { | ||
| 157 | + tx := repo.transactionContext.PgTx | ||
| 158 | + m := new(models.LogOpt) | ||
| 159 | + query := sqlbuilder.BuildQuery(tx.Model(m), queryOptions) | ||
| 160 | + query.Where("deleted_at isnull") | ||
| 161 | + | ||
| 162 | + if id, ok := queryOptions["id"]; ok { | ||
| 163 | + query.Where("id = ?", id) | ||
| 164 | + } | ||
| 165 | + | ||
| 166 | + if notId, ok := queryOptions["notId"]; ok { | ||
| 167 | + query.Where("id != ?", notId) | ||
| 168 | + } | ||
| 169 | + | ||
| 170 | + if v, ok := queryOptions["companyId"]; ok { | ||
| 171 | + query.Where("company_id = ?", v) | ||
| 172 | + } | ||
| 173 | + | ||
| 174 | + count, err := query.Count() | ||
| 175 | + if err != nil { | ||
| 176 | + return 0, err | ||
| 177 | + } | ||
| 178 | + return int64(count), nil | ||
| 179 | +} |
| 1 | +package controllers | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/linmadan/egglib-go/core/application" | ||
| 5 | + "github.com/linmadan/egglib-go/web/beego" | ||
| 6 | + service "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/log_opt" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/log_opt/command" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/port/beego/middlewares" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +type LogOptController struct { | ||
| 12 | + beego.BaseController | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +func (controller *LogOptController) ListLog() { | ||
| 16 | + logService := service.NewLogOptService() | ||
| 17 | + in := &command.QueryLogCommand{} | ||
| 18 | + if err := controller.Unmarshal(in); err != nil { | ||
| 19 | + controller.Response(nil, application.ThrowError(application.ARG_ERROR, err.Error())) | ||
| 20 | + } else { | ||
| 21 | + ua := middlewares.GetUser(controller.Ctx) | ||
| 22 | + in.CompanyId = ua.CompanyId | ||
| 23 | + controller.Response(logService.List(in)) | ||
| 24 | + } | ||
| 25 | +} |
| @@ -41,7 +41,7 @@ func (c *TaskController) UpdateTask() { | @@ -41,7 +41,7 @@ func (c *TaskController) UpdateTask() { | ||
| 41 | } | 41 | } |
| 42 | userReq := middlewares.GetUser(c.Ctx) | 42 | userReq := middlewares.GetUser(c.Ctx) |
| 43 | paramReq.CompanyId = int(userReq.CompanyId) | 43 | paramReq.CompanyId = int(userReq.CompanyId) |
| 44 | - data, err := srv.UpdateTask(paramReq) | 44 | + data, err := srv.UpdateTask(paramReq, userReq) |
| 45 | c.Response(data, err) | 45 | c.Response(data, err) |
| 46 | } | 46 | } |
| 47 | 47 | ||
| @@ -55,8 +55,9 @@ func (c *TaskController) CreateTask() { | @@ -55,8 +55,9 @@ func (c *TaskController) CreateTask() { | ||
| 55 | c.Response(nil, e) | 55 | c.Response(nil, e) |
| 56 | return | 56 | return |
| 57 | } | 57 | } |
| 58 | - | ||
| 59 | - resp, err := srv.CreateTask(paramReq) | 58 | + userReq := middlewares.GetUser(c.Ctx) |
| 59 | + paramReq.CompanyId = int(userReq.CompanyId) | ||
| 60 | + resp, err := srv.CreateTask(paramReq, userReq) | ||
| 60 | c.Response(resp, err) | 61 | c.Response(resp, err) |
| 61 | } | 62 | } |
| 62 | 63 |
pkg/port/beego/routers/log_opt_router.go
0 → 100644
| 1 | +package routers | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/beego/beego/v2/server/web" | ||
| 5 | + "github.com/linmadan/egglib-go/web/beego/filters" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/port/beego/controllers" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/port/beego/middlewares" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +func init() { | ||
| 11 | + ns := web.NewNamespace("/v1/log-opt", | ||
| 12 | + web.NSBefore(filters.AllowCors(), middlewares.CheckAdminToken()), | ||
| 13 | + web.NSRouter("/list", &controllers.LogOptController{}, "Post:ListLog"), | ||
| 14 | + ) | ||
| 15 | + | ||
| 16 | + web.AddNamespace(ns) | ||
| 17 | +} |
-
请 注册 或 登录 后发表评论