package com.ycl.platform.service.impl; import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.exception.job.TaskException; import com.ycl.platform.base.BaseSelect; import com.ycl.platform.domain.entity.CheckTemplate; import com.ycl.platform.domain.entity.CheckTemplateRule; import com.ycl.platform.domain.query.CheckTemplateQuery; import com.ycl.platform.mapper.CheckTemplateMapper; import com.ycl.platform.mapper.CheckTemplateRuleMapper; import com.ycl.platform.service.ICheckTemplateRuleService; import com.ycl.platform.service.ICheckTemplateService; import com.ycl.system.AjaxResult; import com.ycl.system.Result; import com.ycl.system.domain.SysJob; import com.ycl.system.entity.SysDept; import com.ycl.system.service.ISysDeptService; import com.ycl.system.service.ISysJobService; import com.ycl.utils.SecurityUtils; import constant.CheckConstants; import org.quartz.SchedulerException; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import utils.DateUtils; import utils.StringUtils; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * 考核模板Service业务层处理 * * @author ruoyi * @date 2024-04-01 */ @Service public class CheckTemplateServiceImpl extends ServiceImpl implements ICheckTemplateService { @Autowired private CheckTemplateMapper checkTemplateMapper; @Autowired private ICheckTemplateRuleService templateRuleServicee; @Autowired private CheckTemplateRuleMapper checkTemplateRuleMapper; @Autowired private ISysJobService jobService; /** * 查询考核模板 * * @param id 考核模板主键 * @return 考核模板 */ @Override public CheckTemplateQuery selectCheckTemplateById(Integer id) { CheckTemplate checkTemplate = checkTemplateMapper.selectCheckTemplateById(id); CheckTemplateQuery checkTemplateQuery = new CheckTemplateQuery(); BeanUtils.copyProperties(checkTemplate, checkTemplateQuery); List deptIds = JSONArray.parseArray(checkTemplate.getDeptId(), Integer.class); checkTemplateQuery.setDeptId(deptIds) .setAdjustCoefficient(checkTemplate.getAdjustCoefficient() + "") .setAlarmScore(checkTemplate.getAlarmScore() + ""); //查询规则权重 List templateRuleList = checkTemplateRuleMapper.selectListByTemplateId(checkTemplate.getId()); List> list = new ArrayList<>(); for (CheckTemplateRule checkTemplateRule : templateRuleList) { Map map = new HashMap<>(); map.put("ruleId", checkTemplateRule.getCheckRuleId()); map.put("weight", checkTemplateRule.getWeight()); list.add(map); } checkTemplateQuery.setRuleFormList(list); return checkTemplateQuery; } /** * 查询考核模板列表 * * @param checkTemplateDTO 考核模板 * @return 考核模板 */ @Override public List selectCheckTemplateList(CheckTemplateQuery checkTemplateDTO) { List checkTemplates = checkTemplateMapper.selectCheckTemplateList(checkTemplateDTO); List checkTemplateList = new ArrayList<>(); //转换部门id为集合,转换alarmScore为string for (CheckTemplate template : checkTemplates) { List deptIds = JSONArray.parseArray(template.getDeptId(), Integer.class); CheckTemplateQuery checkTemplateQuery = new CheckTemplateQuery(); BeanUtils.copyProperties(template, checkTemplateQuery); checkTemplateQuery.setDeptId(deptIds) .setAdjustCoefficient(template.getAdjustCoefficient() + ""); checkTemplateList.add(checkTemplateQuery); } return checkTemplateList; } /** * 新增考核模板 * * @param checkTemplateDTO 考核模板 * @return 结果 */ @Override @Transactional(rollbackFor = Exception.class) public int insertCheckTemplate(CheckTemplateQuery checkTemplateDTO) throws SchedulerException, TaskException { String username = SecurityUtils.getUsername(); /** 插入t_template */ CheckTemplate checkTemplate = new CheckTemplate(); BeanUtils.copyProperties(checkTemplateDTO, checkTemplate); //从小到大排序 List deptId = checkTemplateDTO.getDeptId(); Collections.sort(deptId); Date nowDate = DateUtils.getNowDate(); checkTemplate.setDeptId(JSONArray.toJSONString(deptId)) .setUpdateUserName(username) .setCreateUserName(username) .setAdjustCoefficient(new BigDecimal(checkTemplateDTO.getAdjustCoefficient() + "")) //不填报警分数---->零分---->不报警 .setAlarmScore(new BigDecimal(checkTemplateDTO.getAlarmScore() == null ? "" : checkTemplateDTO.getAlarmScore())); int i = checkTemplateMapper.insertCheckTemplate(checkTemplate); //新增定时任务,状态同模板,然后赋值jobId给template SysJob sysJob = addJob(checkTemplateDTO.setId(checkTemplate.getId())); checkTemplate.setJobId(Integer.parseInt(sysJob.getJobId() + "")); checkTemplateMapper.updateCheckTemplate(checkTemplate); /** t_template_rule新增权重 */ insertTemlpateRule(checkTemplateDTO, checkTemplate); return i; } /** * 复制考核模板 * * @param checkTemplate 考核模板 * @return 结果 */ @Override @Transactional(rollbackFor = Exception.class) public int copyCheckTemplate(CheckTemplateQuery checkTemplateDTO) throws SchedulerException, TaskException { //插入模板表 CheckTemplate checkTemplate = checkTemplateMapper.selectCheckTemplateById(checkTemplateDTO.getId()); String username = SecurityUtils.getUsername(); checkTemplate.setUpdateUserName(username) .setCreateUserName(username) .setStatus(CheckConstants.Status_Stop) .setId(null); int i = checkTemplateMapper.insertCheckTemplate(checkTemplate); //插入template_rule表 List templateRuleList = checkTemplateRuleMapper.selectListByTemplateId(checkTemplateDTO.getId()); templateRuleList.forEach(checkTemplateRule -> checkTemplateRule.setCheckTemplateId(checkTemplate.getId()).setId(null)); templateRuleServicee.saveBatch(templateRuleList); //新增定时任务,状态同模板,然后赋值jobId给template SysJob sysJob = addJob(checkTemplateDTO.setId(checkTemplate.getId())); checkTemplate.setJobId(Integer.parseInt(sysJob.getJobId() + "")); checkTemplateMapper.updateCheckTemplate(checkTemplate); return i; } /** * 修改考核模板 * * @param checkTemplate 考核模板 * @return 结果 */ @Override @Transactional(rollbackFor = Exception.class) public AjaxResult updateCheckTemplate(CheckTemplateQuery checkTemplateDTO) throws SchedulerException, TaskException { CheckTemplate checkTemplate = new CheckTemplate(); BeanUtils.copyProperties(checkTemplateDTO, checkTemplate); checkTemplate.setUpdateUserName(SecurityUtils.getUsername()); List deptId = checkTemplateDTO.getDeptId(); Collections.sort(deptId); checkTemplate.setDeptId(JSONArray.toJSONString(deptId)) .setAdjustCoefficient(new BigDecimal(checkTemplateDTO.getAdjustCoefficient() + "")); checkTemplateMapper.updateCheckTemplate(checkTemplate); /** t_template_rule修改权重 */ if (!CollectionUtils.isEmpty(checkTemplateDTO.getRuleFormList())) { //先删除原数据 checkTemplateRuleMapper.deleteByTemplateId(checkTemplate.getId()); //插入新规则数据 insertTemlpateRule(checkTemplateDTO, checkTemplate); } //调整job表里的状态 SysJob job = jobService.selectJobById(Long.valueOf(checkTemplateDTO.getJobId())); job.setStatus(checkTemplateDTO.getStatus()); jobService.updateJob(job); return AjaxResult.success(); } /** * 删除考核模板信息 * * @param id 考核模板主键 * @return 结果 */ @Override public int deleteCheckTemplateById(Integer id) throws SchedulerException { CheckTemplate checkTemplate = checkTemplateMapper.selectCheckTemplateById(id); //删除定时任务 SysJob job = new SysJob(); if (checkTemplate.getJobId() != null) { job.setJobId(Long.valueOf(checkTemplate.getJobId())); job.setJobGroup("CHECK"); jobService.deleteJob(job); } return checkTemplateMapper.deleteCheckTemplateById(id); } @Override public Result pullList() { List checkTemplates = checkTemplateMapper.selectCheckTemplateList(new CheckTemplateQuery()); return Result.ok().data(checkTemplates); } private void insertTemlpateRule(CheckTemplateQuery checkTemplateDTO, CheckTemplate checkTemplate) { List> ruleFormList = checkTemplateDTO.getRuleFormList(); if (!CollectionUtils.isEmpty(ruleFormList)) { List templateRuleList = new ArrayList<>(); for (Map map : ruleFormList) { templateRuleList.add(new CheckTemplateRule() .setCheckRuleId((Integer) map.get("ruleId")) .setCheckTemplateId(checkTemplate.getId()) .setWeight(new BigDecimal(map.get("weight").toString()))); } //批量插入数据库 templateRuleServicee.saveBatch(templateRuleList); } } private SysJob addJob(CheckTemplateQuery checkTemplateDTO) throws SchedulerException, TaskException { SysJob job = new SysJob(); job.setCreateBy(SecurityUtils.getLoginUser().getUsername()); //调用方法名 job.setInvokeTarget("checkScoreTask.executeTemplate(" + checkTemplateDTO.getId() + ")"); job.setConcurrent("1"); job.setStatus(checkTemplateDTO.getStatus()); job.setJobGroup("CHECK"); job.setCronExpression("0 0 8 * * ?"); job.setJobName(checkTemplateDTO.getTemplateName()); int i = jobService.insertJob(job); return job; } // /** // * 批量删除考核模板 // * // * @param ids 需要删除的考核模板主键 // * @return 结果 // */ // @Override // public int deleteCheckTemplateByIds(Integer[] ids) { // return checkTemplateMapper.deleteCheckTemplateByIds(ids); // } }