From 9d8243be2ea2f56259bc41b74daaa392a05f9a4a Mon Sep 17 00:00:00 2001
From: xieb <vip_xiaobin810@163.com>
Date: Wed, 27 Dec 2023 09:16:18 +0800
Subject: [PATCH] 评优结果

---
 src/main/java/org/springblade/modules/evaluate/service/impl/EvaluateResultServiceImpl.java |  119 +++++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 87 insertions(+), 32 deletions(-)

diff --git a/src/main/java/org/springblade/modules/evaluate/service/impl/EvaluateResultServiceImpl.java b/src/main/java/org/springblade/modules/evaluate/service/impl/EvaluateResultServiceImpl.java
index 2f0f5da..35009ae 100644
--- a/src/main/java/org/springblade/modules/evaluate/service/impl/EvaluateResultServiceImpl.java
+++ b/src/main/java/org/springblade/modules/evaluate/service/impl/EvaluateResultServiceImpl.java
@@ -23,6 +23,8 @@
 import lombok.AllArgsConstructor;
 import org.springblade.common.cache.SysCache;
 import org.springblade.common.cache.UserCache;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.modules.assessment.wrapper.CandidateJsonObj;
 import org.springblade.modules.assessment.wrapper.UserJsonObj;
@@ -49,6 +51,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import static org.springblade.common.cache.CacheNames.EVALUATE_CANDIDATE_DEPT_KEY;
+
 /**
  * 评优结果 服务实现类
  *
@@ -65,6 +69,8 @@
 
 	private final IEvaluateCandidateService evaluateCandidateService;
 
+	private final BladeRedis bladeRedis;
+
 	@Override
 	public IPage<EvaluateResultVO> selectEvaluateResultPage(IPage<EvaluateResultVO> page, EvaluateResultVO evaluateResult) {
 		return page.setRecords(baseMapper.selectEvaluateResultPage(page, evaluateResult));
@@ -73,6 +79,11 @@
 	@Override
 	public IPage<EvaluateResultVO> selectEvaluateResultGroupBeId(IPage<EvaluateResultVO> page, EvaluateResultVO evaluateResult,List<Long> userIds) {
 		return page.setRecords(EvaluateResultWrapper.build().listVO(baseMapper.selectEvaluateResultGroupBeId(page, evaluateResult, userIds)));
+	}
+
+	@Override
+	public IPage<EvaluateResultVO> selectEvaluateResultByScoreIdsGroupBeId(IPage<EvaluateResultVO> page, EvaluateResultVO evaluateResult, List<Long> scoreUserIds) {
+		return page.setRecords(EvaluateResultWrapper.build().listVO(baseMapper.selectEvaluateResultGroupBeId(page, evaluateResult, scoreUserIds)));
 	}
 
 	@Override
@@ -87,18 +98,76 @@
 	@Override
 	@Transactional
 	public boolean saveOrUpdate(EvaluateResultEntity evaluateResult) {
+
 		boolean ret = super.saveOrUpdate(evaluateResult);
 
 		// 是否评分完成判断此操作
 		if (ret) {
+
 			EvaluateTaskEntity taskPO = evaluateTaskService.getById(evaluateResult.getEvaluateTaskId());
 
 			//判断评分是否完成   0:type 判断设置的部门员工是否完成评分    1:type 判断设置的部门是否完成评分
 			if (evaluateResult.getType() == 0) {
+
 				List<CandidateJsonObj> candidateJsonObjs = JSONArray.parseArray(JSON.toJSONString(taskPO.getCandidateNum()),CandidateJsonObj.class);
+
 				List<Long> deptIds = new ArrayList<>();
 				for (CandidateJsonObj obj:candidateJsonObjs) {
+
+					// 用户判断是否所有部门所有用户投票完成,改变任务状态使用
 					deptIds.add(obj.getDeptId());
+
+					//该部门是否投票完成,投票完成增加候选人信息   isAddCandidate已经增加了候选人信息不在增加数据
+					Boolean isAddCandidate = Func.toBoolean(bladeRedis.get(EVALUATE_CANDIDATE_DEPT_KEY + evaluateResult.getEvaluateTaskId() + obj.getDeptId()));
+					if (null == isAddCandidate || !isAddCandidate) {
+						//根据部门获取所有用户数量
+						QueryWrapper<User> queryWrapper = new QueryWrapper();
+						queryWrapper.eq("dept_id", obj.getDeptId());
+						List<User> deptUsers = userService.list(queryWrapper);
+						// 拿到设置部门所有用户数量
+						int userByDeptIdCount = deptUsers.size();
+
+						// 拿到该部门的所有投票结果
+						List<Long> userIds = new ArrayList<>();
+						for (User deptUser:deptUsers) {
+							userIds.add(deptUser.getId());
+						}
+
+						//部门所有用户数量和部门的所有投票结果
+						QueryWrapper<EvaluateResultEntity> resultEntityQueryWrapper = new QueryWrapper<>();
+						resultEntityQueryWrapper.eq("evaluate_task_id", evaluateResult.getEvaluateTaskId());
+						resultEntityQueryWrapper.in("score_user_id", userIds); //评分人
+						Long evaluateResultCount = count(resultEntityQueryWrapper);
+
+						if (userByDeptIdCount == evaluateResultCount) { //如果相等表示该部门所有人都投票完成 开始增加候选人
+
+							//开始增加候选人
+							Integer val = obj.getVal();
+
+							Page<EvaluateResultVO> page = new Page<>();
+							page.setCurrent(1);
+							page.setSize(val);
+							EvaluateResultVO vo = new EvaluateResultVO();
+							vo.setType(0);
+							vo.setEvaluateTaskId(evaluateResult.getEvaluateTaskId());
+
+							IPage<EvaluateResultVO> evaluateResultVOIPage = selectEvaluateResultByScoreIdsGroupBeId(page,vo,userIds);
+							for (EvaluateResultVO resultVO:evaluateResultVOIPage.getRecords()) {
+								EvaluateCandidateEntity evaluateCandidate = new EvaluateCandidateEntity();
+								evaluateCandidate.setEvaluateTaskId(evaluateResult.getEvaluateTaskId());
+								evaluateCandidate.setEvaluateTaskName(taskPO.getTaskName());
+								User user = UserCache.getUser(resultVO.getBeId());
+								evaluateCandidate.setUserId(user.getId());
+								evaluateCandidate.setUserName(user.getName());
+								evaluateCandidate.setDeptName(SysCache.getDeptName(Long.valueOf(user.getDeptId())));
+								evaluateCandidate.setPostName(SysCache.getPostName(Long.valueOf(user.getPostId())));
+								evaluateCandidateService.save(evaluateCandidate);
+								// 不加会重复处理候选人信息
+								bladeRedis.set(EVALUATE_CANDIDATE_DEPT_KEY + evaluateResult.getEvaluateTaskId() + obj.getDeptId(), true);
+							}
+						}
+					}
+
 				}
 
 				//根据部门获取所有用户数量
@@ -110,43 +179,13 @@
 				//用户数量和评优数据进行匹配 相同需要设置任务状态为已完成
 				QueryWrapper<EvaluateResultEntity> resultEntityQueryWrapper = new QueryWrapper<>();
 				resultEntityQueryWrapper.eq("evaluate_task_id", evaluateResult.getEvaluateTaskId());
+				resultEntityQueryWrapper.eq("type", 0);
 				Long evaluateResultCount = count(resultEntityQueryWrapper);
 
-				// 相同需要设置任务状态为已完成 不同不处理
+				// 相同需要设置任务状态为已完成 不同不处理    修改为一个部门投票结束就增加候选人
 				if (userByDeptIdsCount == evaluateResultCount) {
 					taskPO.setCandidateState(2);//结束
 					evaluateTaskService.updateById(taskPO);
-
-					//保存候选人信息
-					for (CandidateJsonObj obj:candidateJsonObjs) {
-						Integer val = obj.getVal();
-
-						Page<EvaluateResultVO> page = new Page<>();
-						page.setCurrent(1);
-						page.setSize(val);
-						EvaluateResultVO vo = new EvaluateResultVO();
-						vo.setType(0);
-						vo.setEvaluateTaskId(evaluateResult.getEvaluateTaskId());
-						List<Long> userIds = new ArrayList<>();
-						for (UserJsonObj userJsonObj:obj.getUsers()) {
-							userIds.add(userJsonObj.getId());
-						}
-
-						IPage<EvaluateResultVO> evaluateResultVOIPage = selectEvaluateResultGroupBeId(page,vo,userIds);
-
-						for (EvaluateResultVO resultVO:evaluateResultVOIPage.getRecords()) {
-							EvaluateCandidateEntity evaluateCandidate = new EvaluateCandidateEntity();
-							evaluateCandidate.setEvaluateTaskId(evaluateResult.getEvaluateTaskId());
-							evaluateCandidate.setEvaluateTaskName(taskPO.getTaskName());
-							User user = UserCache.getUser(resultVO.getBeId());
-							evaluateCandidate.setUserId(user.getId());
-							evaluateCandidate.setUserName(user.getName());
-							evaluateCandidate.setDeptName(SysCache.getDeptName(Long.valueOf(user.getDeptId())));
-							evaluateCandidate.setPostName(SysCache.getPostName(Long.valueOf(user.getPostId())));
-							evaluateCandidateService.save(evaluateCandidate);
-						}
-					}
-
 				}
 
 			} else if (evaluateResult.getType() == 1) {
@@ -167,6 +206,22 @@
 					taskPO.setEvaluateState(2);//结束
 					evaluateTaskService.updateById(taskPO);
 				}
+			} else if (evaluateResult.getType() == 2) {
+				QueryWrapper<EvaluateResultEntity> resultEntityQueryWrapper = new QueryWrapper<>();
+				resultEntityQueryWrapper.eq("evaluate_task_id", evaluateResult.getEvaluateTaskId());
+				resultEntityQueryWrapper.eq("type", 2);
+				Long evaluateResultCount = count(resultEntityQueryWrapper);
+
+				//公司评优数量和所有员工用户数量比对,相同则表示评分完成
+				QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
+				userQueryWrapper.eq("user_type", 2);
+				Long setUserCount = userService.count(userQueryWrapper);
+
+				// 相同需要设置任务状态为已完成 不同不处理
+				if (setUserCount == evaluateResultCount) {
+					taskPO.setEvaluateState(2);//结束
+					evaluateTaskService.updateById(taskPO);
+				}
 			}
 		}
 

--
Gitblit v1.9.3