作者 tangxvhui

日常保存

1 package service 1 package service
2 2
3 import ( 3 import (
  4 + "fmt"
  5 + "strconv"
  6 + "time"
  7 +
4 "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" 8 "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory"
5 "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" 9 "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
6 ) 10 )
7 11
8 // sendSummaryEvaluafionTask 根据评估项目设置,确认是否下发评估任务 12 // sendSummaryEvaluafionTask 根据评估项目设置,确认是否下发评估任务
9 -func sendSummaryEvaluafionTask(param *domain.EvaluationProject) error { 13 +// project 需要处理的项目
  14 +// userList 全体的员工数据 map[id]=>domain.User
  15 +// departmetList 全部的部门数据 map[id]=>domain.Department
  16 +func sendSummaryEvaluation(project *domain.EvaluationProject, cycleData *domain.EvaluationCycle,
  17 + userMap map[int64]*domain.User, departmentMap map[int64]*domain.Department) ([]domain.SummaryEvaluation, error) {
  18 + //自评的时间范围
  19 + beginTimeSelf := project.EndTime
  20 + endTimeSelf := dayZeroTime(project.EndTime).Add(4*24*time.Hour - time.Second)
  21 + //人资、360评估的时间范围
  22 + beginTime360 := beginTimeSelf
  23 + endTime360 := endTimeSelf.Add(2 * 24 * time.Hour)
  24 + //上级评估的是时间范围
  25 + beginTimeSuper := endTime360
  26 + endTimeSuper := endTime360.Add(2 * 24 * time.Hour)
  27 + //
10 transactionContext, err := factory.CreateTransactionContext(nil) 28 transactionContext, err := factory.CreateTransactionContext(nil)
11 if err != nil { 29 if err != nil {
12 - return err 30 + return nil, err
13 } 31 }
14 if err := transactionContext.StartTransaction(); err != nil { 32 if err := transactionContext.StartTransaction(); err != nil {
15 - return err 33 + return nil, err
16 } 34 }
17 defer func() { 35 defer func() {
18 _ = transactionContext.RollbackTransaction() 36 _ = transactionContext.RollbackTransaction()
19 }() 37 }()
  38 +
  39 + evaluationItemRepo := factory.CreateEvaluationItemUsedRepository(map[string]interface{}{"transactionContext": transactionContext})
  40 +
20 //确定 被评估的人 41 //确定 被评估的人
  42 + targetUserId := []int64{}
  43 + for _, v := range project.Recipients {
  44 + id, err := strconv.ParseInt(v, 10, 64)
  45 + if err == nil {
  46 + targetUserId = append(targetUserId, id)
  47 + }
  48 + }
  49 + if len(targetUserId) == 0 {
  50 + return nil, nil
  51 + }
  52 + //被评估的员工
  53 + targetUserMap := map[int64]*domain.User{}
21 54
  55 + for _, v := range targetUserId {
  56 + u, ok := userMap[v]
  57 + if ok {
  58 + targetUserMap[v] = u
  59 + }
  60 + }
  61 + //确定360评估的执行人
  62 + _, itemList, err := evaluationItemRepo.Find(map[string]interface{}{"evaluationProjectId": project.Id})
  63 + if err != nil {
  64 + return nil, err
  65 + }
  66 + nodeId := 0
  67 + executor360Map := map[int64]*domain.User{}
  68 + for _, v := range itemList {
  69 + nodeId = v.NodeId
  70 + if v.EvaluatorId <= 0 {
  71 + continue
  72 + }
  73 + if u, ok := userMap[int64(v.EvaluatorId)]; ok {
  74 + executor360Map[u.Id] = u
  75 + }
  76 + }
  77 + //创建周期评估任务
  78 + var newEvaluationList []domain.SummaryEvaluation
  79 + evaluationTemp := domain.SummaryEvaluation{
  80 + Id: 0,
  81 + CompanyId: int(project.CompanyId),
  82 + EvaluationProjectId: int(project.Id),
  83 + EvaluationProjectName: project.Name,
  84 + CycleId: cycleData.Id,
  85 + CycleName: cycleData.Name,
  86 + NodeId: nodeId,
  87 + TargetUser: domain.StaffDesc{},
  88 + TargetDepartment: []domain.StaffDepartment{},
  89 + Executor: domain.StaffDesc{},
  90 + Types: 0,
  91 + Status: domain.EvaluationUncompleted,
  92 + CheckResult: domain.EvaluationCheckUncompleted,
  93 + BeginTime: time.Time{},
  94 + EndTime: time.Time{},
  95 + TotalScore: "",
  96 + CreatedAt: time.Now(),
  97 + UpdatedAt: time.Now(),
  98 + DeletedAt: nil,
  99 + }
  100 +
  101 + //确定自评
22 //确定 被评估人的 上级评估 102 //确定 被评估人的 上级评估
  103 + for _, v := range targetUserMap {
  104 + //处理自评
  105 + evaluationTemp.TargetUser = domain.StaffDesc{
  106 + UserId: int(v.Id),
  107 + Account: v.Account,
  108 + UserName: v.Name,
  109 + }
  110 + evaluationTemp.Executor = domain.StaffDesc{
  111 + UserId: int(v.Id),
  112 + Account: v.Account,
  113 + UserName: v.Name,
  114 + }
  115 + evaluationTemp.BeginTime = beginTimeSelf
  116 + evaluationTemp.EndTime = endTimeSelf
  117 + evaluationTemp.TargetDepartment = []domain.StaffDepartment{}
  118 + evaluationTemp.Types = domain.EvaluationSelf
  119 + for _, departId := range v.DepartmentId {
  120 + depart, ok := departmentMap[int64(departId)]
  121 + if !ok {
  122 + continue
  123 + }
  124 + evaluationTemp.TargetDepartment = append(evaluationTemp.TargetDepartment, domain.StaffDepartment{
  125 + DepartmentId: int(depart.Id),
  126 + DepartmentName: depart.Name,
  127 + })
  128 + }
  129 + //确定自评
  130 + newEvaluationList = append(newEvaluationList, evaluationTemp)
  131 + //处理人资评估
  132 + evaluationTemp.BeginTime = beginTime360
  133 + evaluationTemp.EndTime = endTime360
  134 + evaluationTemp.Executor = domain.StaffDesc{}
  135 + evaluationTemp.Types = domain.EvaluationHrbp
  136 + //确定人资评估
  137 + newEvaluationList = append(newEvaluationList, evaluationTemp)
  138 + //处理360 评估
  139 + for _, v2 := range executor360Map {
  140 + evaluationTemp.BeginTime = beginTime360
  141 + evaluationTemp.EndTime = endTime360
  142 + evaluationTemp.Executor = domain.StaffDesc{
  143 + UserId: int(v2.Id),
  144 + Account: v2.Account,
  145 + UserName: v2.Name,
  146 + }
  147 + evaluationTemp.Types = domain.Evaluation360
  148 + //确定人资评估
  149 + newEvaluationList = append(newEvaluationList, evaluationTemp)
  150 + }
23 151
24 - //确定 被评估人的 人资评估 152 + //处理上级评估
  153 + superUser, ok := userMap[v.ParentId]
  154 + if ok {
  155 + evaluationTemp.Types = domain.EvaluationSuper
  156 + evaluationTemp.Executor = domain.StaffDesc{
  157 + UserId: int(superUser.Id),
  158 + Account: superUser.Account,
  159 + UserName: superUser.Name,
  160 + }
  161 + evaluationTemp.BeginTime = beginTimeSuper
  162 + evaluationTemp.EndTime = endTimeSuper
  163 + //确定上级评估
  164 + newEvaluationList = append(newEvaluationList, evaluationTemp)
  165 + }
  166 + }
  167 + summaryEvaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{"transactionContext": transactionContext})
  168 + for i := range newEvaluationList {
  169 + err = summaryEvaluationRepo.Save(&newEvaluationList[i])
  170 + if err != nil {
  171 + return nil, err
  172 + }
  173 + }
  174 + //回填 项目的状态
  175 + evaluationProjectRepo := factory.CreateEvaluationProjectRepository(map[string]interface{}{"transactionContext": transactionContext})
  176 + project.SummaryState = domain.ProjectSummaryStateYes
  177 + _, err = evaluationProjectRepo.Insert(project)
  178 + if err != nil {
  179 + return nil, err
  180 + }
  181 + if err := transactionContext.CommitTransaction(); err != nil {
  182 + return nil, err
  183 + }
  184 + return newEvaluationList, nil
  185 +}
25 186
26 - //确定 被评估人的 360 评估 187 +func dayZeroTime(t time.Time) time.Time {
  188 + y, m, d := t.UTC().Date()
  189 + t2 := time.Date(y, m, d, 0, 0, 0, 0, time.UTC)
  190 + return t2
  191 +}
27 192
28 - //回填 项目的状态 193 +// 下发周期评估
  194 +func TaskSendSummaryEvaluation() error {
  195 + transactionContext, err := factory.CreateTransactionContext(nil)
  196 + if err != nil {
  197 + return err
  198 + }
  199 + if err := transactionContext.StartTransaction(); err != nil {
  200 + return err
  201 + }
  202 + defer func() {
  203 + _ = transactionContext.RollbackTransaction()
  204 + }()
  205 +
  206 + projectRepo := factory.CreateEvaluationProjectRepository(map[string]interface{}{
  207 + "transactionContext": transactionContext,
  208 + })
  209 +
  210 + userRepo := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext})
  211 +
  212 + departmentRepo := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext})
  213 +
  214 + _, projectList, err := projectRepo.Find(map[string]interface{}{
  215 + "endTime": time.Now(),
  216 + "summaryState": domain.ProjectSummaryStateNo,
  217 + "state": domain.ProjectStateEnable,
  218 + }, "template")
  219 + if err != nil {
  220 + return fmt.Errorf("获取可用的项目数据,%s", err)
  221 + }
  222 + companyIdMap := map[int64]struct{}{}
  223 + for _, v := range projectList {
  224 + companyIdMap[v.CompanyId] = struct{}{}
  225 + }
  226 + //获取可执行的项目
  227 + for companyId := range companyIdMap {
  228 + //获取员工数据,部门数据
  229 +
  230 + for _, v := range projectList {
  231 + if v.CompanyId != companyId {
  232 + continue
  233 + }
  234 +
  235 + }
  236 + }
  237 + //获取员工数据
  238 +
  239 + //获取部门数据
29 240
30 if err := transactionContext.CommitTransaction(); err != nil { 241 if err := transactionContext.CommitTransaction(); err != nil {
31 return err 242 return err
32 } 243 }
  244 +
33 return nil 245 return nil
34 } 246 }
@@ -36,8 +36,8 @@ type EvaluationProject struct { @@ -36,8 +36,8 @@ type EvaluationProject struct {
36 type ProjectSummaryState int 36 type ProjectSummaryState int
37 37
38 const ( 38 const (
39 - ProjectSummaryStateNo int = 0 //未下发  
40 - ProjectSummaryStateYes int = 1 //已经下发 39 + ProjectSummaryStateNo ProjectSummaryState = 0 //未下发
  40 + ProjectSummaryStateYes ProjectSummaryState = 1 //已经下发
41 ) 41 )
42 42
43 type EvaluationProjectRepository interface { 43 type EvaluationProjectRepository interface {
  1 +package dao
  2 +
  3 +import pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  4 +
  5 +type EvaluationProjectDao struct {
  6 + transactionContext *pgTransaction.TransactionContext
  7 +}
  8 +
  9 +func NewEvaluationProjectDao(options map[string]interface{}) *EvaluationProjectDao {
  10 + var transactionContext *pgTransaction.TransactionContext
  11 + if value, ok := options["transactionContext"]; ok {
  12 + transactionContext = value.(*pgTransaction.TransactionContext)
  13 + }
  14 + return &EvaluationProjectDao{
  15 + transactionContext: transactionContext,
  16 + }
  17 +}
@@ -170,6 +170,20 @@ func (repo *EvaluationProjectRepository) Find(queryOptions map[string]interface{ @@ -170,6 +170,20 @@ func (repo *EvaluationProjectRepository) Find(queryOptions map[string]interface{
170 query.Where("state = ?", v) 170 query.Where("state = ?", v)
171 } 171 }
172 172
  173 + if v, ok := queryOptions["summaryState"]; ok {
  174 + query.Where("summary_state=?", v)
  175 + }
  176 +
  177 + if v, ok := queryOptions["beginTime"]; ok {
  178 + t := v.(time.Time)
  179 + query.Where("begin_time>=?", t)
  180 + }
  181 +
  182 + if v, ok := queryOptions["endTime"]; ok {
  183 + t := v.(time.Time)
  184 + query.Where("end_time<=?", t)
  185 + }
  186 +
173 if v, ok := queryOptions["pmpIds"].([]string); ok && len(v) > 0 { 187 if v, ok := queryOptions["pmpIds"].([]string); ok && len(v) > 0 {
174 query.WhereGroup(func(query *pg.Query) (*pg.Query, error) { 188 query.WhereGroup(func(query *pg.Query) (*pg.Query, error) {
175 for i := range v { 189 for i := range v {