scheduled.go 9.5 KB
package service

// sendSummaryEvaluafionTask 根据评估项目设置,确认是否下发评估任务
// project 需要处理的项目
// userList 全体的员工数据 map[id]=>domain.User
// departmetList 全部的部门数据 map[id]=>domain.Department
// func sendSummaryEvaluation(project *domain.EvaluationProject,
// 	userMap map[int64]*domain.User, departmentMap map[int64]*domain.Department) ([]domain.SummaryEvaluation, error) {
// 	//自评的时间范围
// 	beginTimeSelf := project.EndTime
// 	endTimeSelf := dayZeroTime(project.EndTime).Add(4*24*time.Hour - time.Second)
// 	//人资、360评估的时间范围
// 	beginTime360 := endTimeSelf
// 	endTime360 := endTimeSelf.Add(2 * 24 * time.Hour)
// 	//上级评估的是时间范围
// 	beginTimeSuper := endTime360
// 	endTimeSuper := endTime360.Add(2 * 24 * time.Hour)
// 	//
// 	transactionContext, err := factory.CreateTransactionContext(nil)
// 	if err != nil {
// 		return nil, err
// 	}
// 	if err := transactionContext.StartTransaction(); err != nil {
// 		return nil, err
// 	}
// 	defer func() {
// 		_ = transactionContext.RollbackTransaction()
// 	}()
// 	cycleRepo := factory.CreateEvaluationCycleRepository(map[string]interface{}{"transactionContext": transactionContext})

// 	evaluationItemRepo := factory.CreateEvaluationItemUsedRepository(map[string]interface{}{"transactionContext": transactionContext})

// 	cycleData, err := cycleRepo.FindOne(map[string]interface{}{"id": project.CycleId})
// 	if err != nil {
// 		return nil, err
// 	}
// 	//确定 被评估的人
// 	targetUserId := []int64{}
// 	for _, v := range project.Recipients {
// 		id, err := strconv.ParseInt(v, 10, 64)
// 		if err == nil {
// 			targetUserId = append(targetUserId, id)
// 		}
// 	}
// 	if len(targetUserId) == 0 {
// 		return nil, nil
// 	}
// 	//被评估的员工
// 	targetUserMap := map[int64]*domain.User{}

// 	for _, v := range targetUserId {
// 		u, ok := userMap[v]
// 		if ok {
// 			targetUserMap[v] = u
// 		}
// 	}
// 	//确定360评估的执行人
// 	_, itemList, err := evaluationItemRepo.Find(map[string]interface{}{"evaluationProjectId": project.Id, "nodeType": int(domain.LinkNodeSelfAssessment)})
// 	if err != nil {
// 		return nil, err
// 	}
// 	nodeId := 0
// 	executor360Map := map[int64]*domain.User{}
// 	hrbpExist := false
// 	for _, v := range itemList {
// 		nodeId = v.NodeId
// 		if v.EvaluatorId < 0 {
// 			hrbpExist = true
// 		}
// 		if v.EvaluatorId <= 0 {
// 			continue
// 		}
// 		if u, ok := userMap[int64(v.EvaluatorId)]; ok {
// 			executor360Map[u.Id] = u
// 		}
// 	}
// 	//创建周期评估任务
// 	var newEvaluationList []domain.SummaryEvaluation
// 	evaluationTemp := domain.SummaryEvaluation{
// 		Id:                    0,
// 		CompanyId:             int(project.CompanyId),
// 		EvaluationProjectId:   int(project.Id),
// 		EvaluationProjectName: project.Name,
// 		CycleId:               cycleData.Id,
// 		CycleName:             cycleData.Name,
// 		NodeId:                nodeId,
// 		TargetUser:            domain.StaffDesc{},
// 		TargetDepartment:      []domain.StaffDepartment{},
// 		Executor:              domain.StaffDesc{},
// 		Types:                 0,
// 		Status:                domain.EvaluationUncompleted,
// 		CheckResult:           domain.EvaluationCheckUncompleted,
// 		BeginTime:             time.Time{},
// 		EndTime:               time.Time{},
// 		TotalScore:            "",
// 		CreatedAt:             time.Now(),
// 		UpdatedAt:             time.Now(),
// 		DeletedAt:             nil,
// 	}

// 	//确定周期评估

// 	for _, v := range targetUserMap {
// 		//处理自评
// 		evaluationTemp.TargetUser = domain.StaffDesc{
// 			UserId:   int(v.Id),
// 			Account:  v.Account,
// 			UserName: v.Name,
// 		}
// 		evaluationTemp.Executor = domain.StaffDesc{
// 			UserId:   int(v.Id),
// 			Account:  v.Account,
// 			UserName: v.Name,
// 		}
// 		evaluationTemp.BeginTime = beginTimeSelf
// 		evaluationTemp.EndTime = endTimeSelf
// 		evaluationTemp.TargetDepartment = []domain.StaffDepartment{}
// 		evaluationTemp.Types = domain.EvaluationSelf
// 		for _, departId := range v.DepartmentId {
// 			depart, ok := departmentMap[int64(departId)]
// 			if !ok {
// 				continue
// 			}
// 			evaluationTemp.TargetDepartment = append(evaluationTemp.TargetDepartment, domain.StaffDepartment{
// 				DepartmentId:   int(depart.Id),
// 				DepartmentName: depart.Name,
// 			})
// 		}
// 		newEvaluationList = append(newEvaluationList, evaluationTemp)
// 		if hrbpExist {
// 			//处理人资评估
// 			evaluationTemp.BeginTime = beginTime360
// 			evaluationTemp.EndTime = endTime360
// 			evaluationTemp.Executor = domain.StaffDesc{}
// 			evaluationTemp.Types = domain.EvaluationHrbp
// 			newEvaluationList = append(newEvaluationList, evaluationTemp)
// 		}
// 		//处理360 评估
// 		for _, v2 := range executor360Map {
// 			evaluationTemp.BeginTime = beginTime360
// 			evaluationTemp.EndTime = endTime360
// 			evaluationTemp.Executor = domain.StaffDesc{
// 				UserId:   int(v2.Id),
// 				Account:  v2.Account,
// 				UserName: v2.Name,
// 			}
// 			evaluationTemp.Types = domain.Evaluation360
// 			newEvaluationList = append(newEvaluationList, evaluationTemp)
// 		}

// 		//处理上级评估
// 		superUser, ok := userMap[v.ParentId]
// 		if ok {
// 			evaluationTemp.Types = domain.EvaluationSuper
// 			evaluationTemp.Executor = domain.StaffDesc{
// 				UserId:   int(superUser.Id),
// 				Account:  superUser.Account,
// 				UserName: superUser.Name,
// 			}
// 			evaluationTemp.BeginTime = beginTimeSuper
// 			evaluationTemp.EndTime = endTimeSuper
// 			//确定上级评估
// 			newEvaluationList = append(newEvaluationList, evaluationTemp)
// 		}
// 		// 确定 考核结果 的评估记录
// 		evaluationTemp.Types = domain.EvaluationFinish
// 		evaluationTemp.Executor = domain.StaffDesc{}
// 		evaluationTemp.BeginTime = endTimeSuper
// 		evaluationTemp.EndTime = endTimeSuper.Add(2 * 24 * time.Hour)
// 		newEvaluationList = append(newEvaluationList, evaluationTemp)
// 	}
// 	summaryEvaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{"transactionContext": transactionContext})
// 	for i := range newEvaluationList {
// 		err = summaryEvaluationRepo.Save(&newEvaluationList[i])
// 		if err != nil {
// 			return nil, err
// 		}
// 	}
// 	//回填 项目的状态
// 	projectDao := dao.NewEvaluationProjectDao(map[string]interface{}{"transactionContext": transactionContext})
// 	err = projectDao.UpdateSummaryState(project.Id, domain.ProjectSummaryStateYes)
// 	if err != nil {
// 		return nil, err
// 	}
// 	if err := transactionContext.CommitTransaction(); err != nil {
// 		return nil, err
// 	}
// 	return newEvaluationList, nil
// }

// func dayZeroTime(t time.Time) time.Time {
// 	y, m, d := t.Local().Date()
// 	t2 := time.Date(y, m, d, 0, 0, 0, 0, time.Local)
// 	return t2
// }

// // 下发周期评估
// func TaskSendSummaryEvaluation() error {
// 	nowTime := time.Now()
// 	defer func() {
// 		str := fmt.Sprintf("下发周期评估耗时%.2f s", time.Since(nowTime).Seconds())
// 		log.Logger.Info(str)
// 	}()
// 	transactionContext, err := factory.CreateTransactionContext(nil)
// 	if err != nil {
// 		return err
// 	}
// 	if err := transactionContext.StartTransaction(); err != nil {
// 		return err
// 	}
// 	defer func() {
// 		_ = transactionContext.RollbackTransaction()
// 	}()

// 	projectRepo := factory.CreateEvaluationProjectRepository(map[string]interface{}{
// 		"transactionContext": transactionContext,
// 	})

// 	userRepo := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext})

// 	departmentRepo := factory.CreateDepartmentRepository(map[string]interface{}{"transactionContext": transactionContext})

// 	_, projectList, err := projectRepo.Find(map[string]interface{}{
// 		"endTime":      time.Now(),
// 		"summaryState": domain.ProjectSummaryStateNo,
// 		"state":        domain.ProjectStateEnable,
// 	}, "template")
// 	if err != nil {
// 		return fmt.Errorf("获取可用的项目数据,%s", err)
// 	}
// 	companyIdMap := map[int64]struct{}{}
// 	for _, v := range projectList {
// 		companyIdMap[v.CompanyId] = struct{}{}
// 	}

// 	var createdEvalationList []domain.SummaryEvaluation

// 	//获取可执行的项目
// 	for companyId := range companyIdMap {
// 		//获取员工数据,部门数据
// 		_, userList, err := userRepo.Find(map[string]interface{}{"companyId": companyId})
// 		if err != nil {
// 			log.Logger.Error("TaskSendSummaryEvaluation 获取员工数据:" + err.Error())
// 			continue
// 		}
// 		_, departmentList, err := departmentRepo.Find(map[string]interface{}{"companyId": companyId})
// 		if err != nil {
// 			log.Logger.Error("TaskSendSummaryEvaluation 获取部门数据:" + err.Error())
// 			continue
// 		}
// 		//转map
// 		userMap := map[int64]*domain.User{}
// 		for _, v := range userList {
// 			userMap[v.Id] = v
// 		}
// 		departmentMap := map[int64]*domain.Department{}
// 		for _, v := range departmentList {
// 			departmentMap[v.Id] = v
// 		}
// 		for _, v := range projectList {
// 			if v.CompanyId != companyId {
// 				continue
// 			}
// 			evalationList, err := sendSummaryEvaluation(v, userMap, departmentMap)
// 			if err != nil {
// 				log.Logger.Error("TaskSendSummaryEvaluation 下发评估任务:" + err.Error())
// 				continue
// 			}
// 			createdEvalationList = append(createdEvalationList, evalationList...)
// 		}
// 	}
// 	if err := transactionContext.CommitTransaction(); err != nil {
// 		return err
// 	}
// 	//添加待发送的短信通知
// 	err = sendSmsEvalation(createdEvalationList)
// 	return err
// }