package com.ruoyi.zhdd.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.PagePlus; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.zhdd.domain.IncidentTask; import com.ruoyi.zhdd.domain.IncidentTaskCommand; import com.ruoyi.zhdd.domain.IncidentTaskPerson; import com.ruoyi.zhdd.domain.bo.IncidentTaskBo; import com.ruoyi.zhdd.domain.bo.IncidentTasksBo; import com.ruoyi.zhdd.domain.vo.IncidentTaskVo; import com.ruoyi.zhdd.mapper.IncidentTaskMapper; import com.ruoyi.zhdd.service.IIncidentProcessService; import com.ruoyi.zhdd.service.IIncidentTaskCommandService; import com.ruoyi.zhdd.service.IIncidentTaskPersonService; import com.ruoyi.zhdd.service.IIncidentTaskService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Collection; import java.util.List; import java.util.Map; /** * 事件处置流程Service业务层处理 * * @author xitong * @date 2021-09-28 */ @Service @Slf4j public class IncidentTaskServiceImpl extends ServicePlusImpl implements IIncidentTaskService { @Autowired private IIncidentTaskPersonService incidentTaskPersonService; @Autowired private IIncidentTaskCommandService incidentTaskCommandService; @Autowired private IIncidentProcessService incidentProcessService; @Override public IncidentTaskVo queryById(String id) { return getVoById(id); } @Override public TableDataInfo queryPageList(IncidentTaskBo bo) { PagePlus result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo)); return PageUtils.buildDataInfo(result); } @Override public List queryList(IncidentTaskBo bo) { return listVo(buildQueryWrapper(bo)); } private LambdaQueryWrapper buildQueryWrapper(IncidentTaskBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getIncidentId() != null, IncidentTask::getIncidentId, bo.getIncidentId()); return lqw; } @Override @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(IncidentTasksBo bo) { // 新增之前删除之前的内容 String insertOrUpdateFlag = "新增"; if (StrUtil.isNotBlank(bo.getId())) { removeById(bo.getId()); incidentTaskPersonService.remove(Wrappers.lambdaQuery().eq(IncidentTaskPerson::getIncidentTaskId, bo.getId())); incidentTaskCommandService.remove(Wrappers.lambdaQuery().eq(IncidentTaskCommand::getIncidentTaskId, bo.getId())); insertOrUpdateFlag = "编辑"; } IncidentTask add = BeanUtil.toBean(bo, IncidentTask.class); add.setId(null); add.setExprJson(JSONUtil.toJsonStr(bo.getMessagePushUsers())); save(add); // 新增指令和人员 if (bo.getIncidentTaskCommands() != null) { for (IncidentTaskCommand incidentTaskCommand : bo.getIncidentTaskCommands()) { incidentTaskCommand.setId(null); incidentTaskCommand.setIncidentTaskId(add.getId()); } } if (bo.getIncidentTaskPeoples() != null) { for (IncidentTaskPerson incidentTaskPeople : bo.getIncidentTaskPeoples()) { incidentTaskPeople.setId(null); incidentTaskPeople.setIncidentTaskId(add.getId()); } } incidentTaskCommandService.saveAll(bo.getIncidentTaskCommands()); incidentTaskPersonService.saveAll(bo.getIncidentTaskPeoples()); // 发送消息 if (bo.isSendFlag()) { // A:事件接报。B:处置方案 RedisUtils.publish(Constants.NOTICE_PUSH, "B" + add.getId(), msg -> { log.info("发布应急方案消息 => " + msg); }); } else { JSONObject jsonObject = new JSONObject(); jsonObject.set("des", insertOrUpdateFlag + "处置方案:" + bo.getTaskName()); jsonObject.set("incidentId", bo.getIncidentId()); jsonObject.set("incidentStatus", 3); RedisUtils.publish(Constants.PROCESS_RECORD, jsonObject, msg -> { log.info("事件处置方案新增消息 => " + msg); }); } return true; } @Override public Boolean updateByBo(IncidentTaskBo bo) { IncidentTask update = BeanUtil.toBean(bo, IncidentTask.class); validEntityBeforeSave(update); return updateById(update); } @Override public List listTaskInfo(String id) { List incidentTaskVo = listVo(Wrappers.lambdaQuery().eq(IncidentTask::getIncidentId, id).orderByAsc(IncidentTask::getCreateTime)); if (incidentTaskVo != null) { // 查询指令和人员 for (IncidentTaskVo taskVo : incidentTaskVo) { taskVo.setTaskCommandVos(incidentTaskCommandService.listVo(Wrappers.lambdaQuery().eq(IncidentTaskCommand::getIncidentTaskId, taskVo.getId()))); taskVo.setTaskPersonVos(incidentTaskPersonService.listVo(Wrappers.lambdaQuery().eq(IncidentTaskPerson::getIncidentTaskId, taskVo.getId()))); } } return incidentTaskVo; } /** * 保存前的数据校验 * * @param entity 实体类数据 */ private void validEntityBeforeSave(IncidentTask entity) { //TODO 做一些数据校验,如唯一约束 } @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } // 查询处置方案。默认这边只有一个id String id = ids.iterator().next(); IncidentTaskVo incidentTaskVo = queryById(id); if (incidentTaskVo != null) { JSONObject jsonObject = new JSONObject(); jsonObject.set("des", "处置方案:" + incidentTaskVo.getTaskName() + "删除"); jsonObject.set("incidentId", incidentTaskVo.getIncidentId()); jsonObject.set("incidentStatus", 3); RedisUtils.publish(Constants.PROCESS_RECORD, jsonObject, msg -> { log.info("事件处置方案删除消息 => " + msg); }); } return removeByIds(ids); } }