xieb
2023-12-26 41b2f09be327c72a52e41f80dd3b56e7cac19681
部门投票完成立刻统计候选人
5 files modified
124 ■■■■ changed files
src/main/java/org/springblade/common/cache/CacheNames.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/evaluate/mapper/EvaluateResultMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/evaluate/mapper/EvaluateResultMapper.xml 16 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/evaluate/service/IEvaluateResultService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/evaluate/service/impl/EvaluateResultServiceImpl.java 102 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/common/cache/CacheNames.java
@@ -58,4 +58,6 @@
     */
    String USER_FAIL_KEY = "blade:user::blade:fail:";
    String EVALUATE_CANDIDATE_DEPT_KEY = "blade:evaluate::task:candidate:success";
}
src/main/java/org/springblade/modules/evaluate/mapper/EvaluateResultMapper.java
@@ -44,6 +44,8 @@
    List<EvaluateResultEntity> selectEvaluateResultGroupBeId(IPage page,EvaluateResultVO evaluateResult, List<Long> userIds);
    List<EvaluateResultEntity> selectEvaluateResultByScoreIdsGroupBeId(IPage page,EvaluateResultVO evaluateResult, List<Long> scoreUserIds);
    /**
     * 获取导出数据
src/main/java/org/springblade/modules/evaluate/mapper/EvaluateResultMapper.xml
@@ -42,6 +42,22 @@
        GROUP BY be_id ORDER BY count(*) desc
    </select>
    <select id="selectEvaluateResultByScoreIdsGroupBeId" resultMap="evaluateResultResultMap">
        select be_id,count(*) as temp_count from yw_evaluate_result where is_deleted = 0 AND type = 0
        <if test="evaluateResult.type !=null">
            AND type = #{evaluateResult.type}
        </if>
        <if test="evaluateResult.evaluateTaskId !=null and evaluateResult.evaluateTaskId!=''">
            AND evaluate_task_id = #{evaluateResult.evaluateTaskId}
        </if>
        AND score_user_id in
        <foreach collection="scoreUserIds" item="userId" index="index"
                 open="(" close=")" separator=",">
            #{userId}
        </foreach>
        GROUP BY be_id ORDER BY count(*) desc
    </select>
    <select id="exportEvaluateResult" resultType="org.springblade.modules.evaluate.excel.EvaluateResultExcel">
        SELECT * FROM yw_evaluate_result ${ew.customSqlSegment}
src/main/java/org/springblade/modules/evaluate/service/IEvaluateResultService.java
@@ -42,6 +42,8 @@
    IPage<EvaluateResultVO> selectEvaluateResultGroupBeId(IPage<EvaluateResultVO> page, EvaluateResultVO evaluateResult, List<Long> userIds);
    IPage<EvaluateResultVO> selectEvaluateResultByScoreIdsGroupBeId(IPage<EvaluateResultVO> page, EvaluateResultVO evaluateResult, List<Long> scoreUserIds);
    /**
     * 导出数据
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());
                    //该部门是否投票完成,投票完成增加候选人信息
                    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);
                            }
                        }
                    }
                }
                //根据部门获取所有用户数量
@@ -112,41 +181,10 @@
                resultEntityQueryWrapper.eq("evaluate_task_id", evaluateResult.getEvaluateTaskId());
                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) {