xieb
2023-12-27 9d8243be2ea2f56259bc41b74daaa392a05f9a4a
src/main/java/org/springblade/modules/evaluate/service/impl/EvaluateResultServiceImpl.java
@@ -16,16 +16,42 @@
 */
package org.springblade.modules.evaluate.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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;
import org.springblade.modules.evaluate.entity.EvaluateCandidateEntity;
import org.springblade.modules.evaluate.entity.EvaluateResultEntity;
import org.springblade.modules.evaluate.entity.EvaluateTaskEntity;
import org.springblade.modules.evaluate.entity.EvaluateTaskSetEntity;
import org.springblade.modules.evaluate.service.IEvaluateCandidateService;
import org.springblade.modules.evaluate.service.IEvaluateTaskService;
import org.springblade.modules.evaluate.service.IEvaluateTaskSetService;
import org.springblade.modules.evaluate.vo.EvaluateResultVO;
import org.springblade.modules.evaluate.excel.EvaluateResultExcel;
import org.springblade.modules.evaluate.mapper.EvaluateResultMapper;
import org.springblade.modules.evaluate.service.IEvaluateResultService;
import org.springblade.modules.evaluate.wrapper.EvaluateResultWrapper;
import org.springblade.modules.system.entity.User;
import org.springblade.modules.system.service.IUserService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import static org.springblade.common.cache.CacheNames.EVALUATE_CANDIDATE_DEPT_KEY;
/**
 * 评优结果 服务实现类
@@ -34,13 +60,31 @@
 * @since 2023-12-18
 */
@Service
@AllArgsConstructor
public class EvaluateResultServiceImpl extends BaseServiceImpl<EvaluateResultMapper, EvaluateResultEntity> implements IEvaluateResultService {
   private final IEvaluateTaskService evaluateTaskService;
   private final IUserService userService;
   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));
   }
   @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
   public List<EvaluateResultExcel> exportEvaluateResult(Wrapper<EvaluateResultEntity> queryWrapper) {
@@ -51,4 +95,137 @@
      return evaluateResultList;
   }
   @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);
                     }
                  }
               }
            }
            //根据部门获取所有用户数量
            QueryWrapper<User> queryWrapper = new QueryWrapper();
            queryWrapper.in("dept_id", deptIds);
            // 拿到设置部门所有用户数量
            Long userByDeptIdsCount = userService.count(queryWrapper);
            //用户数量和评优数据进行匹配 相同需要设置任务状态为已完成
            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);
            }
         } else if (evaluateResult.getType() == 1) {
            QueryWrapper<EvaluateResultEntity> resultEntityQueryWrapper = new QueryWrapper<>();
            resultEntityQueryWrapper.eq("evaluate_task_id", evaluateResult.getEvaluateTaskId());
            Long evaluateResultCount = count(resultEntityQueryWrapper);
            //部门评优数量和所有用户匹配 修改为选定的评定人
            List<CandidateJsonObj> candidateJsonObjs = JSONArray.parseArray(JSON.toJSONString(taskPO.getCandidateNum()),CandidateJsonObj.class);
            int setUserCount = 0;
            for (CandidateJsonObj obj:candidateJsonObjs) {
               List<UserJsonObj> userJsonObjs = obj.getUsers();
               setUserCount += userJsonObjs.size();
            }
            // 相同需要设置任务状态为已完成 不同不处理
            if (setUserCount == evaluateResultCount) {
               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);
            }
         }
      }
      return ret;
   }
}