作者 Your Name

日常保存

@@ -4,7 +4,7 @@ type AssessSelfList struct { @@ -4,7 +4,7 @@ type AssessSelfList struct {
4 AssessId int `json:"assessId"` //用户执行的评估项id 4 AssessId int `json:"assessId"` //用户执行的评估项id
5 BeginTime string `json:"beginTime"` //开始时间 2006-01-02 15:04:05 5 BeginTime string `json:"beginTime"` //开始时间 2006-01-02 15:04:05
6 EndTime string `json:"endTime"` //开始时间 2006-01-02 15:04:05 6 EndTime string `json:"endTime"` //开始时间 2006-01-02 15:04:05
7 - CycleId int `json:"cycleId"` //周期id 7 + CycleId int64 `json:"cycleId"` //周期id
8 CycleName string `json:"cycleName"` //周期名称 8 CycleName string `json:"cycleName"` //周期名称
9 EvaluationProjectId int `json:"evaluationProjectId"` //项目id 9 EvaluationProjectId int `json:"evaluationProjectId"` //项目id
10 EvaluationProjectName string `json:"evaluationProjectName"` //项目名称 10 EvaluationProjectName string `json:"evaluationProjectName"` //项目名称
@@ -15,7 +15,7 @@ type AssessTaskStep struct { @@ -15,7 +15,7 @@ type AssessTaskStep struct {
15 LinkNodeName string `json:"linkNodeName"` //流程名称 15 LinkNodeName string `json:"linkNodeName"` //流程名称
16 BeginTime string `json:"beginTime"` //开始时间时间 16 BeginTime string `json:"beginTime"` //开始时间时间
17 EndTime string `json:"endTime"` //结束时间 17 EndTime string `json:"endTime"` //结束时间
18 - LinkNodeType string `json:"linkNodeType"` //流程类型 18 + LinkNodeType int `json:"linkNodeType"` //流程类型
19 Desc string `json:"desc"` //情况描述 19 Desc string `json:"desc"` //情况描述
20 - Status int `json:"status"` //流程是否完成 20 + Status string `json:"status"` //流程是否完成 "":未参加,"uncompleted":未完成,"completed":完成
21 } 21 }
  1 +package query
  2 +
  3 +type AssessSelfListQuery struct {
  4 + UserId int `json:"userId"` //用户id
  5 + CompanyId int `json:"companyId"` //公司Id
  6 + PageSize int `json:"pageSize"` //每页的记录数
  7 + PageNumber int `json:"pageNumber"` //页码
  8 +}
1 package service 1 package service
2 2
3 import ( 3 import (
  4 + "fmt"
  5 +
4 "github.com/linmadan/egglib-go/core/application" 6 "github.com/linmadan/egglib-go/core/application"
5 "github.com/linmadan/egglib-go/utils/tool_funs" 7 "github.com/linmadan/egglib-go/utils/tool_funs"
6 "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" 8 "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory"
7 "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/staff_assess/adapter" 9 "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/staff_assess/adapter"
8 "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/staff_assess/query" 10 "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/staff_assess/query"
  11 + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
  12 + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/log"
9 ) 13 )
10 14
  15 +// 员工评绩效评估
11 type StaffAssessServeice struct { 16 type StaffAssessServeice struct {
12 } 17 }
13 18
@@ -76,15 +81,130 @@ func (srv StaffAssessServeice) AssessTaskDesc(param query.AssessTaskDescQuery) ( @@ -76,15 +81,130 @@ func (srv StaffAssessServeice) AssessTaskDesc(param query.AssessTaskDescQuery) (
76 defer func() { 81 defer func() {
77 _ = transactionContext.RollbackTransaction() 82 _ = transactionContext.RollbackTransaction()
78 }() 83 }()
  84 + // 获取评估任务
  85 + staffAssessTaskRepo := factory.CreateStaffAssessTaskRepository(map[string]interface{}{
  86 + "transactionContext": transactionContext,
  87 + })
  88 + //获取个人参与的评估流程
  89 + staffAssessRepo := factory.CreateStaffAssessRepository(map[string]interface{}{
  90 + "transactionContext": transactionContext,
  91 + })
  92 + assessTaskData, err := staffAssessTaskRepo.FindOne(map[string]interface{}{
  93 + "id": param.AssessTaskId,
  94 + })
  95 + if err != nil {
  96 + return nil, application.ThrowError(application.TRANSACTION_ERROR, "评估任务不存在,"+err.Error())
  97 + }
  98 + //返回的数据结果
  99 + result := adapter.AssessTaskDescResp{
  100 + AssessTaskId: assessTaskData.Id,
  101 + EvaluationProjectId: assessTaskData.EvaluationProjectId,
  102 + EvaluationProjectName: assessTaskData.EvaluationProjectName,
  103 + CycleName: assessTaskData.CycleName,
  104 + BeginTime: assessTaskData.BeginTime.Local().Format("2006-01-02 15:04-05"),
  105 + EndTime: assessTaskData.EndTime.Local().Format("2006-01-02 15:04-05"),
  106 + StepList: []adapter.AssessTaskStep{},
  107 + }
79 108
  109 + for _, v := range assessTaskData.StepList {
  110 + stepItem := adapter.AssessTaskStep{
  111 + SortBy: v.SortBy,
  112 + LinkNodeName: v.LinkNodeName,
  113 + BeginTime: v.BeginTime.Local().Format("2006-01-02 15:04:05"),
  114 + EndTime: v.EndTime.Local().Format("2006-01-02 15:04:05"),
  115 + LinkNodeType: v.LinkNodeType,
  116 + Desc: fmt.Sprintf("截止日期:%s", v.EndTime.Local().Format("2006-01-02 15:04:05")),
  117 + Status: "",
  118 + }
  119 + switch v.LinkNodeType {
  120 + case domain.LinkNodeSelfAssessment:
  121 + //个人自评完成情况
  122 + _, assessSelfData, err := staffAssessRepo.Find(map[string]interface{}{
  123 + "staffAssessTaskId": assessTaskData.Id,
  124 + "executorId": param.UserId,
  125 + "typesList": []string{string(domain.AssessSelf)},
  126 + })
  127 + if err != nil {
  128 + return nil, application.ThrowError(application.TRANSACTION_ERROR, "获取个人的评估环节"+err.Error())
  129 + }
  130 + if len(assessSelfData) > 0 {
  131 + stepItem.Status = string(assessSelfData[0].Status)
  132 + }
  133 + stepItem.Desc = fmt.Sprintf("截止日期:%s", stepItem.EndTime)
  134 + case domain.LinkNodeAllInvite:
  135 + //邀请别人评估自己
  136 + _, assessInviteData, err := staffAssessRepo.Find(map[string]interface{}{
  137 + "staffAssessTaskId": assessTaskData.Id,
  138 + "targetUserId": param.UserId,
  139 + "typesList": []string{string(domain.AssessInviteDiffSuper), string(domain.AssessInviteSameSuper)},
  140 + "limit": 5,
  141 + })
  142 + if err != nil {
  143 + return nil, application.ThrowError(application.TRANSACTION_ERROR, "获取个人的评估环节"+err.Error())
  144 + }
  145 + //待邀请人数,为5人减去已邀请的人数。若邀请人数已等于或大于5人,则只显示截止日期即可
  146 + if len(assessInviteData) > 5 {
  147 + stepItem.Desc = fmt.Sprintf("截止日期:%s", stepItem.EndTime)
  148 + stepItem.Status = string(domain.StaffAssessCompleted)
  149 + } else {
  150 + stepItem.Desc = fmt.Sprintf("截止日期:%s 待邀请%d人", stepItem.EndTime, 5-len(assessInviteData))
  151 + stepItem.Status = string(domain.StaffAssessUncompleted)
  152 + }
  153 + case domain.LinkNodeAllAssessment:
  154 + //我评估别人,被邀请评估
  155 + _, assessInviteList, err := staffAssessRepo.Find(map[string]interface{}{
  156 + "staffAssessTaskId": assessTaskData.Id,
  157 + "executorId": param.UserId,
  158 + "typesList": []string{string(domain.AssessInviteDiffSuper), string(domain.AssessInviteSameSuper)},
  159 + })
  160 + if err != nil {
  161 + return nil, application.ThrowError(application.TRANSACTION_ERROR, "获取个人的评估环节"+err.Error())
  162 + }
  163 +
  164 + if len(assessInviteList) > 0 {
  165 + stepItem.Status = string(domain.StaffAssessCompleted)
  166 + stepItem.Desc = fmt.Sprintf("截止日期:%s", stepItem.EndTime)
  167 + for _, v := range assessInviteList {
  168 + if v.Status == domain.StaffAssessUncompleted {
  169 + stepItem.Status = string(domain.StaffAssessUncompleted)
  170 + break
  171 + }
  172 + }
  173 + }
  174 + case domain.LinkNodeSuperiorAssessment:
  175 + //我评估别人,上级评估
  176 + _, assessSupperList, err := staffAssessRepo.Find(map[string]interface{}{
  177 + "staffAssessTaskId": assessTaskData.Id,
  178 + "executorId": param.UserId,
  179 + "typesList": []string{string(domain.AssessSuper)},
  180 + })
  181 + if err != nil {
  182 + return nil, application.ThrowError(application.TRANSACTION_ERROR, "获取个人的评估环节"+err.Error())
  183 + }
  184 + if len(assessSupperList) > 0 {
  185 + stepItem.Status = string(domain.StaffAssessCompleted)
  186 + stepItem.Desc = fmt.Sprintf("截止日期:%s", stepItem.EndTime)
  187 + uncompletedNum := 0
  188 + for _, v := range assessSupperList {
  189 + if v.Status == domain.StaffAssessUncompleted {
  190 + uncompletedNum += 1
  191 + }
  192 + }
  193 + if uncompletedNum > 0 {
  194 + stepItem.Desc = fmt.Sprintf("截止日期:%s 待评估%d人", stepItem.EndTime, uncompletedNum)
  195 + }
  196 + }
  197 + }
  198 + result.StepList = append(result.StepList, stepItem)
  199 + }
80 if err := transactionContext.CommitTransaction(); err != nil { 200 if err := transactionContext.CommitTransaction(); err != nil {
81 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 201 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
82 } 202 }
83 - return nil, nil 203 + return &result, nil
84 } 204 }
85 205
86 -// 获取自评反馈列表  
87 -func (srv StaffAssessServeice) AssessSelfList(param query.AssessTaskDescQuery) (map[string]interface{}, error) { 206 +// 获取个人的自评反馈历史记录列表
  207 +func (srv StaffAssessServeice) AssessSelfList(param query.AssessSelfListQuery) (map[string]interface{}, error) {
88 transactionContext, err := factory.CreateTransactionContext(nil) 208 transactionContext, err := factory.CreateTransactionContext(nil)
89 if err != nil { 209 if err != nil {
90 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 210 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
@@ -95,14 +215,81 @@ func (srv StaffAssessServeice) AssessSelfList(param query.AssessTaskDescQuery) ( @@ -95,14 +215,81 @@ func (srv StaffAssessServeice) AssessSelfList(param query.AssessTaskDescQuery) (
95 defer func() { 215 defer func() {
96 _ = transactionContext.RollbackTransaction() 216 _ = transactionContext.RollbackTransaction()
97 }() 217 }()
  218 + //获取个人参与的评估流程
  219 + staffAssessRepo := factory.CreateStaffAssessRepository(map[string]interface{}{
  220 + "transactionContext": transactionContext,
  221 + })
  222 + var limit int = 20
  223 + var offset int = 0
  224 + if param.PageSize > 0 {
  225 + limit = param.PageSize
  226 + }
  227 + offset = (param.PageNumber - 1) * param.PageSize
  228 + condition := map[string]interface{}{
  229 + "executorId": param.UserId,
  230 + "companyId": param.CompanyId,
  231 + "typesList": []string{string(domain.AssessSelf)},
  232 + "limit": limit,
  233 + "status": string(domain.StaffAssessCompleted),
  234 + }
  235 + if offset > 0 {
  236 + condition["offset"] = offset
  237 + }
  238 + //获取历史列表
  239 + cnt, assessList, err := staffAssessRepo.Find(condition)
  240 + if err != nil {
  241 + return nil, application.ThrowError(application.TRANSACTION_ERROR, "获取评估任务列表,"+err.Error())
  242 + }
  243 +
  244 + //获取公司数据
  245 + companyRep := factory.CreateCompanyRepository(map[string]interface{}{
  246 + "transactionContext": transactionContext,
  247 + })
  248 +
  249 + companyData, err := companyRep.FindOne(map[string]interface{}{
  250 + "id": param.CompanyId,
  251 + })
  252 + if err != nil {
  253 + log.Logger.Error("获取公司信息," + err.Error())
  254 + return nil, application.ThrowError(application.TRANSACTION_ERROR, "获取公司信息,"+err.Error())
  255 + }
  256 +
  257 + //获取用户数据
  258 + userRep := factory.CreateUserRepository(map[string]interface{}{
  259 + "transactionContext": transactionContext,
  260 + })
  261 + userData, err := userRep.FindOne(map[string]interface{}{
  262 + "id": param.UserId,
  263 + })
  264 + if err != nil {
  265 + log.Logger.Error("获取用户信息," + err.Error())
  266 + return nil, application.ThrowError(application.TRANSACTION_ERROR, "获取用户信息,"+err.Error())
  267 + }
98 268
99 if err := transactionContext.CommitTransaction(); err != nil { 269 if err := transactionContext.CommitTransaction(); err != nil {
100 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 270 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
101 } 271 }
102 - var cnt int64  
103 - var listData []adapter.AssessSelfList  
104 - var userInfo adapter.StaffInfo  
105 - result := tool_funs.SimpleWrapGridMap(cnt, listData) 272 + listData := make([]adapter.AssessSelfList, 0, len(assessList))
  273 + var itemTemp adapter.AssessSelfList
  274 + for _, v := range assessList {
  275 + itemTemp = adapter.AssessSelfList{
  276 + AssessId: v.Id,
  277 + BeginTime: v.BeginTime.Local().Format("2006-01-02 15:04:05"),
  278 + EndTime: v.EndTime.Local().Format("2006-01-02 15:04:05"),
  279 + CycleId: v.CycleId,
  280 + CycleName: v.CycleName,
  281 + EvaluationProjectId: v.EvaluationProjectId,
  282 + EvaluationProjectName: v.EvaluationProjectName,
  283 + }
  284 + listData = append(listData, itemTemp)
  285 + }
  286 + userInfo := adapter.StaffInfo{
  287 + UserName: userData.Name,
  288 + CompanyName: companyData.Name,
  289 + SupperUserName: "",
  290 + DutyTime: userData.CreateAt.Local().Format("2006-01-02 15:04:05"),
  291 + }
  292 + result := tool_funs.SimpleWrapGridMap(int64(cnt), listData)
106 result["userInfo"] = userInfo 293 result["userInfo"] = userInfo
107 return result, nil 294 return result, nil
108 } 295 }
@@ -125,3 +312,8 @@ func (srv StaffAssessServeice) CreateStaffAssessTask() error { @@ -125,3 +312,8 @@ func (srv StaffAssessServeice) CreateStaffAssessTask() error {
125 } 312 }
126 return nil 313 return nil
127 } 314 }
  315 +
  316 +func (srv StaffAssessServeice) getStaffDesc(userId int) *domain.StaffDesc {
  317 +
  318 + return &domain.StaffDesc{}
  319 +}
@@ -28,7 +28,7 @@ type StaffAssess struct { @@ -28,7 +28,7 @@ type StaffAssess struct {
28 EvaluationProjectId int `json:"evaluationProjectId"` //对应的项目id 28 EvaluationProjectId int `json:"evaluationProjectId"` //对应的项目id
29 EvaluationProjectName string `json:"evaluationProjectName"` //对应的项目名称 29 EvaluationProjectName string `json:"evaluationProjectName"` //对应的项目名称
30 CycleId int64 `json:"cycleId"` //对应的周期id 30 CycleId int64 `json:"cycleId"` //对应的周期id
31 - CycleName int64 `json:"cycleName"` //对应的周期名称 31 + CycleName string `json:"cycleName"` //对应的周期名称
32 StaffAssessTaskId int `json:"staffAssessTaskId"` //执行评估的任务id 32 StaffAssessTaskId int `json:"staffAssessTaskId"` //执行评估的任务id
33 TargetUser StaffDesc `json:"targetUser"` //被评估的目标用户 33 TargetUser StaffDesc `json:"targetUser"` //被评估的目标用户
34 TargetDepartment []StaffDepartment `json:"targetDepartment"` //被评估的目标用户所在的部门 34 TargetDepartment []StaffDepartment `json:"targetDepartment"` //被评估的目标用户所在的部门
@@ -34,10 +34,12 @@ type StaffAssessTask struct { @@ -34,10 +34,12 @@ type StaffAssessTask struct {
34 34
35 //考评的流程 35 //考评的流程
36 type AssessTaskStep struct { 36 type AssessTaskStep struct {
37 - SortBy int `json:"sortBy"` //排序  
38 - LinkNodeId int `json:"linkNodeId"` //考评的流程id  
39 - LinkNodeName string `json:"linkNodeName"` //流程名称  
40 - LinkNodeType int `json:"linkNodeType"` //流程类型 同evaluation_template.go->LinkNode.Type 37 + SortBy int `json:"sortBy"` //排序
  38 + LinkNodeId int `json:"linkNodeId"` //考评的流程id
  39 + LinkNodeName string `json:"linkNodeName"` //流程名称
  40 + LinkNodeType int `json:"linkNodeType"` //流程类型 同evaluation_template.go->LinkNode.Type
  41 + BeginTime time.Time `json:"beginTime"` //绩效考核开始时间
  42 + EndTime time.Time `json:"endTime"` //绩效考核截止时间
41 } 43 }
42 44
43 type StaffAssessTaskRepository interface { 45 type StaffAssessTaskRepository interface {
@@ -127,6 +127,16 @@ func (repo *StaffAssessRepository) Find(queryOptions map[string]interface{}) (in @@ -127,6 +127,16 @@ func (repo *StaffAssessRepository) Find(queryOptions map[string]interface{}) (in
127 if v, ok := queryOptions["cycleId"].(int64); ok && v > 0 { 127 if v, ok := queryOptions["cycleId"].(int64); ok && v > 0 {
128 query.Where(`cycle_id=?`, v) 128 query.Where(`cycle_id=?`, v)
129 } 129 }
  130 + if v, ok := queryOptions["staffAssessTaskId"]; ok {
  131 + query.Where(`staff_assess_task_id=?`, v)
  132 + }
  133 +
  134 + if v, ok := queryOptions["typesList"].([]string); ok && len(v) > 0 {
  135 + query.Where("types in(?)", pg.Array(v))
  136 + }
  137 + if v, ok := queryOptions["status"].(string); ok && len(v) > 0 {
  138 + query.Where("status=?", v)
  139 + }
130 count, err := query.SelectAndCount() 140 count, err := query.SelectAndCount()
131 if err != nil { 141 if err != nil {
132 return 0, nil, err 142 return 0, nil, err