/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ 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; /** * 评优结果 服务实现类 * * @author aix * @since 2023-12-18 */ @Service @AllArgsConstructor public class EvaluateResultServiceImpl extends BaseServiceImpl implements IEvaluateResultService { private final IEvaluateTaskService evaluateTaskService; private final IUserService userService; private final IEvaluateCandidateService evaluateCandidateService; private final BladeRedis bladeRedis; @Override public IPage selectEvaluateResultPage(IPage page, EvaluateResultVO evaluateResult) { return page.setRecords(baseMapper.selectEvaluateResultPage(page, evaluateResult)); } @Override public IPage selectEvaluateResultGroupBeId(IPage page, EvaluateResultVO evaluateResult,List userIds) { return page.setRecords(EvaluateResultWrapper.build().listVO(baseMapper.selectEvaluateResultGroupBeId(page, evaluateResult, userIds))); } @Override public IPage selectEvaluateResultByScoreIdsGroupBeId(IPage page, EvaluateResultVO evaluateResult, List scoreUserIds) { return page.setRecords(EvaluateResultWrapper.build().listVO(baseMapper.selectEvaluateResultGroupBeId(page, evaluateResult, scoreUserIds))); } @Override public List exportEvaluateResult(Wrapper queryWrapper) { List evaluateResultList = baseMapper.exportEvaluateResult(queryWrapper); //evaluateResultList.forEach(evaluateResult -> { // evaluateResult.setTypeName(DictCache.getValue(DictEnum.YES_NO, EvaluateResult.getType())); //}); 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 candidateJsonObjs = JSONArray.parseArray(JSON.toJSONString(taskPO.getCandidateNum()),CandidateJsonObj.class); List 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 queryWrapper = new QueryWrapper(); queryWrapper.eq("dept_id", obj.getDeptId()); List deptUsers = userService.list(queryWrapper); // 拿到设置部门所有用户数量 int userByDeptIdCount = deptUsers.size(); // 拿到该部门的所有投票结果 List userIds = new ArrayList<>(); for (User deptUser:deptUsers) { userIds.add(deptUser.getId()); } //部门所有用户数量和部门的所有投票结果 QueryWrapper 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 page = new Page<>(); page.setCurrent(1); page.setSize(val); EvaluateResultVO vo = new EvaluateResultVO(); vo.setType(0); vo.setEvaluateTaskId(evaluateResult.getEvaluateTaskId()); IPage 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 queryWrapper = new QueryWrapper(); queryWrapper.in("dept_id", deptIds); // 拿到设置部门所有用户数量 Long userByDeptIdsCount = userService.count(queryWrapper); //用户数量和评优数据进行匹配 相同需要设置任务状态为已完成 QueryWrapper 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 resultEntityQueryWrapper = new QueryWrapper<>(); resultEntityQueryWrapper.eq("evaluate_task_id", evaluateResult.getEvaluateTaskId()); Long evaluateResultCount = count(resultEntityQueryWrapper); //部门评优数量和所有用户匹配 修改为选定的评定人 List candidateJsonObjs = JSONArray.parseArray(JSON.toJSONString(taskPO.getCandidateNum()),CandidateJsonObj.class); int setUserCount = 0; for (CandidateJsonObj obj:candidateJsonObjs) { List userJsonObjs = obj.getUsers(); setUserCount += userJsonObjs.size(); } // 相同需要设置任务状态为已完成 不同不处理 if (setUserCount == evaluateResultCount) { taskPO.setEvaluateState(2);//结束 evaluateTaskService.updateById(taskPO); } } else if (evaluateResult.getType() == 2) { QueryWrapper resultEntityQueryWrapper = new QueryWrapper<>(); resultEntityQueryWrapper.eq("evaluate_task_id", evaluateResult.getEvaluateTaskId()); resultEntityQueryWrapper.eq("type", 2); Long evaluateResultCount = count(resultEntityQueryWrapper); //公司评优数量和所有员工用户数量比对,相同则表示评分完成 QueryWrapper userQueryWrapper = new QueryWrapper<>(); userQueryWrapper.eq("user_type", 2); Long setUserCount = userService.count(userQueryWrapper); // 相同需要设置任务状态为已完成 不同不处理 if (setUserCount == evaluateResultCount) { taskPO.setEvaluateState(2);//结束 evaluateTaskService.updateById(taskPO); } } } return ret; } }