/* * 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.tool.utils.StringUtil; import org.springblade.modules.assessment.wrapper.CandidateJsonObj; 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.List; /** * 评优结果 服务实现类 * * @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; @Override public IPage selectEvaluateResultPage(IPage page, EvaluateResultVO evaluateResult) { return page.setRecords(baseMapper.selectEvaluateResultPage(page, evaluateResult)); } @Override public IPage selectEvaluateResultGroupBeId(IPage page, EvaluateResultVO evaluateResult) { return page.setRecords(EvaluateResultWrapper.build().listVO(baseMapper.selectEvaluateResultGroupBeId(page, evaluateResult))); } @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); String deptIdsStr = ""; for (CandidateJsonObj obj:candidateJsonObjs) { if (StringUtil.isNotBlank(deptIdsStr)) { deptIdsStr += "," + obj.getDeptId(); } else { deptIdsStr = obj.getDeptId() + ""; } } //根据部门获取所有用户数量 QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.in("dept_id", deptIdsStr); // 拿到设置部门所有用户数量 Long userByDeptIdsCount = userService.count(queryWrapper); //用户数量和评优数据进行匹配 相同需要设置任务状态为已完成 QueryWrapper resultEntityQueryWrapper = new QueryWrapper<>(); 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 page = new Page<>(); page.setCurrent(1); page.setSize(val); EvaluateResultVO vo = new EvaluateResultVO(); vo.setType(0); vo.setEvaluateTaskId(evaluateResult.getEvaluateTaskId()); IPage evaluateResultVOIPage = selectEvaluateResultGroupBeId(page,vo); 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) { QueryWrapper resultEntityQueryWrapper = new QueryWrapper<>(); resultEntityQueryWrapper.eq("evaluate_task_id", evaluateResult.getEvaluateTaskId()); Long evaluateResultCount = count(resultEntityQueryWrapper); //部门评优数量和所有用户匹配 QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.in("user_type", 2);//员工用户 // 拿到设置部门所有用户数量 Long userByDeptIdsCount = userService.count(queryWrapper); // 相同需要设置任务状态为已完成 不同不处理 if (userByDeptIdsCount == evaluateResultCount) { taskPO.setEvaluateState(2);//结束 evaluateTaskService.updateById(taskPO); } } } return ret; } }