| package com.doumee.service.business.impl; | 
|   | 
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
| import com.doumee.core.constants.ResponseStatus; | 
| import com.doumee.core.exception.BusinessException; | 
| import com.doumee.core.utils.Constants; | 
| import com.doumee.dao.business.WarningMapper; | 
| import com.doumee.dao.business.WarningRuleDetailMapper; | 
| import com.doumee.dao.business.dao.MemberMapper; | 
| import com.doumee.dao.business.model.*; | 
| import com.doumee.service.business.third.model.LoginUserInfo; | 
| import com.doumee.service.business.third.model.PageData; | 
| import com.doumee.service.business.third.model.PageWrap; | 
| import com.doumee.core.utils.Utils; | 
| import com.doumee.dao.business.WarningRuleMapper; | 
| import com.doumee.service.business.WarningRuleService; | 
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
| import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; | 
| import com.baomidou.mybatisplus.core.metadata.IPage; | 
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
| import com.github.yulichang.wrapper.MPJLambdaWrapper; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.transaction.annotation.Transactional; | 
| import org.springframework.util.CollectionUtils; | 
|   | 
| import java.util.ArrayList; | 
| import java.util.Date; | 
| import java.util.List; | 
| import java.util.Objects; | 
|   | 
| /** | 
|  * 报警规则配置表Service实现 | 
|  * @author 江蹄蹄 | 
|  * @date 2025/09/28 09:01 | 
|  */ | 
| @Service | 
| public class WarningRuleServiceImpl implements WarningRuleService { | 
|   | 
|     @Autowired | 
|     private WarningRuleMapper warningRuleMapper; | 
|     @Autowired | 
|     private WarningMapper warningMapper; | 
|     @Autowired | 
|     private MemberMapper memberMapper; | 
|     @Autowired | 
|     private WarningRuleDetailMapper warningRuleDetailMapper; | 
|   | 
|     @Override | 
|     @Transactional | 
|     public Integer create(WarningRule warning) { | 
|         if(warning.getDetailList() == null | 
|                 ||warning.getMemberIds() == null | 
|                 ||warning.getDetailList().size() ==0){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
|         } | 
|         warning.setStatus(Constants.formatIntegerNum(warning.getStatus())); | 
|         warning.setIsdeleted(Constants.ZERO); | 
|         warning.setCreator(warning.getLoginUserInfo().getId()); | 
|         warning.setCreateDate(new Date()); | 
|         warning.setEditDate(warning.getCreateDate()); | 
|         warning.setEditor(warning.getCreator()); | 
|         String title = ""; | 
|         for(WarningRuleDetail detail : warning.getDetailList()){ | 
|             if(detail.getWarningId() == null){ | 
|                 throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
|             } | 
|             Warning  wModel = warningMapper.selectById(detail.getWarningId()); | 
|             if(wModel == null || Constants.equalsInteger(wModel.getIsdeleted(),Constants.ONE)){ | 
|                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请选择正确的报警类型"); | 
|             } | 
|             if(StringUtils.isNotBlank(detail.getRegionName())){ | 
|                 title+= detail.getRegionName()+"发生"; | 
|             } | 
|             title += wModel.getName()+"; "; | 
|             detail.setRuleId(warning.getId()); | 
|             detail.setIsdeleted(Constants.ZERO); | 
|             detail.setCreator(warning.getLoginUserInfo().getId()); | 
|             detail.setCreateDate(new Date()); | 
|             detail.setEditDate(warning.getCreateDate()); | 
|             detail.setEditor(warning.getCreator()); | 
|         } | 
|   | 
|         warning.setMemberNames( initMemberInfo(warning)); | 
|         warning.setTitle(title); | 
|         warningRuleMapper.insert(warning); | 
|         for(WarningRuleDetail detail : warning.getDetailList()){ | 
|             detail.setRuleId(warning.getId()); | 
|         } | 
|         warningRuleDetailMapper.insert(warning.getDetailList()); | 
|         return warning.getId(); | 
|     } | 
|   | 
|     private String initMemberInfo(WarningRule warning) { | 
|         String[] members = warning.getMemberIds().split(","); | 
|         List<Integer> mIds = new ArrayList<>(); | 
|         for(String str :members){ | 
|             try { | 
|                 mIds.add(Integer.parseInt(str)); | 
|             }catch (Exception e){ | 
|             } | 
|         } | 
|         if(mIds.size() ==0){ | 
|             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请选择正确的人员信息"); | 
|         } | 
|         List<Member> memberList = memberMapper.selectJoinList(Member.class,new MPJLambdaWrapper<Member>() | 
|                 .selectAll(Member.class ) | 
|                 .selectAs(Company::getName,Member::getCompanyName ) | 
|                 .leftJoin(Company.class,Company::getId,Member::getCompanyId) | 
|                 .eq(Member::getIsdeleted,Constants.ZERO ) | 
|                 .in(Member::getId,mIds )); | 
|         if(memberList == null || memberList.size() ==0){ | 
|             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请选择正确的人员信息!"); | 
|         } | 
|         String memberIds = ""; | 
|         String memberNames = ""; | 
|         for(Member m : memberList){ | 
|             memberIds += (StringUtils.isNotBlank(memberIds)?",":"")+m.getId(); | 
|             memberNames += StringUtils.defaultString(m.getName(),"")+"-"+StringUtils.defaultString(m.getCompanyName(),"" )+"; "; | 
|         } | 
|         warning.setMemberIds(memberIds); | 
|         warning.setMemberNames(memberNames); | 
|         return memberNames; | 
|     } | 
|   | 
|     @Override | 
|     public void deleteById(Integer id, LoginUserInfo user) { | 
|         warningRuleMapper.deleteById(id); | 
|         warningRuleMapper.update(null,new UpdateWrapper<WarningRule>().lambda() | 
|                 .set(WarningRule::getEditor,user.getId()) | 
|                 .set(WarningRule::getEditDate,new Date()) | 
|                 .set(WarningRule::getIsdeleted,Constants.ONE) | 
|                 .eq(WarningRule::getId,id) | 
|         ); | 
|         warningRuleDetailMapper.update(null,new UpdateWrapper<WarningRuleDetail>().lambda() | 
|                 .set(WarningRuleDetail::getEditor,user.getId()) | 
|                 .set(WarningRuleDetail::getEditDate,new Date()) | 
|                 .set(WarningRuleDetail::getIsdeleted,Constants.ONE) | 
|                 .eq(WarningRuleDetail::getRuleId,id) | 
|         ); | 
|     } | 
|   | 
|     @Override | 
|     public void delete(WarningRule warningRule) { | 
|         UpdateWrapper<WarningRule> deleteWrapper = new UpdateWrapper<>(warningRule); | 
|         warningRuleMapper.delete(deleteWrapper); | 
|     } | 
|   | 
|     @Override | 
|     @Transactional | 
|     public void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user) { | 
|         if (CollectionUtils.isEmpty(ids)) { | 
|             return; | 
|         } | 
|         warningRuleMapper.update(null,new UpdateWrapper<WarningRule>().lambda() | 
|                 .set(WarningRule::getEditor,user.getId()) | 
|                 .set(WarningRule::getEditDate,new Date()) | 
|                 .set(WarningRule::getIsdeleted,Constants.ONE) | 
|                 .in(WarningRule::getId,ids) | 
|         ); | 
|         warningRuleDetailMapper.update(null,new UpdateWrapper<WarningRuleDetail>().lambda() | 
|                 .set(WarningRuleDetail::getEditor,user.getId()) | 
|                 .set(WarningRuleDetail::getEditDate,new Date()) | 
|                 .set(WarningRuleDetail::getIsdeleted,Constants.ONE) | 
|                 .in(WarningRuleDetail::getRuleId,ids) | 
|         ); | 
|     } | 
|   | 
|     @Override | 
|     public void updateById(WarningRule warning) { | 
|         if(warning.getDetailList() == null | 
|                 ||warning.getId() == null | 
|                 ||warning.getMemberIds() == null | 
|                 || warning.getDetailList().size() ==0){ | 
|             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
|         } | 
|         warning.setEditDate(warning.getCreateDate()); | 
|         warning.setEditor(warning.getCreator()); | 
|         String title = ""; | 
|         for(WarningRuleDetail detail : warning.getDetailList()){ | 
|             if(detail.getWarningId() == null){ | 
|                 throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
|             } | 
|             Warning  wModel = warningMapper.selectById(detail.getWarningId()); | 
|             if(wModel == null || Constants.equalsInteger(wModel.getIsdeleted(),Constants.ONE)){ | 
|                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请选择正确的报警类型"); | 
|             } | 
|             if(StringUtils.isNotBlank(detail.getRegionName())){ | 
|                 title+= detail.getRegionName()+"发生"; | 
|             } | 
|             title += wModel.getName()+"; "; | 
|             detail.setRuleId(warning.getId()); | 
|             detail.setIsdeleted(Constants.ZERO); | 
|             detail.setCreator(warning.getLoginUserInfo().getId()); | 
|             detail.setCreateDate(new Date()); | 
|             detail.setEditDate(warning.getCreateDate()); | 
|             detail.setEditor(warning.getCreator()); | 
|         } | 
|         warning.setMemberNames( initMemberInfo(warning)); | 
|         warning.setTitle(title); | 
|         warningRuleMapper.updateById(warning); | 
|         for(WarningRuleDetail detail : warning.getDetailList()){ | 
|             detail.setRuleId(warning.getId()); | 
|         } | 
|         warningRuleDetailMapper.delete(new UpdateWrapper<WarningRuleDetail>() | 
|                         .lambda().eq(WarningRuleDetail::getRuleId,warning.getId())); | 
|         warningRuleDetailMapper.insert(warning.getDetailList()); | 
|     } | 
|   | 
|     @Override | 
|     public void updateByIdInBatch(List<WarningRule> warningRules) { | 
|         if (CollectionUtils.isEmpty(warningRules)) { | 
|             return; | 
|         } | 
|         for (WarningRule warningRule: warningRules) { | 
|             this.updateById(warningRule); | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public WarningRule findById(Integer id) { | 
|         WarningRule model =warningRuleMapper.selectById(id); | 
|         if(model == null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){ | 
|             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
|         } | 
|         model.setDetailList(warningRuleDetailMapper.selectList(new LambdaQueryWrapper<WarningRuleDetail>() | 
|                 .eq(WarningRuleDetail::getIsdeleted,Constants.ZERO) | 
|                 .eq(WarningRuleDetail::getRuleId,model.getId()))); | 
|         return model; | 
|     } | 
|   | 
|     @Override | 
|     public WarningRule findOne(WarningRule warningRule) { | 
|         QueryWrapper<WarningRule> wrapper = new QueryWrapper<>(warningRule); | 
|         return warningRuleMapper.selectOne(wrapper); | 
|     } | 
|   | 
|     @Override | 
|     public List<WarningRule> findList(WarningRule warningRule) { | 
|         QueryWrapper<WarningRule> wrapper = new QueryWrapper<>(warningRule); | 
|         return warningRuleMapper.selectList(wrapper); | 
|     } | 
|    | 
|     @Override | 
|     public PageData<WarningRule> findPage(PageWrap<WarningRule> pageWrap) { | 
|         IPage<WarningRule> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); | 
|   | 
|         MPJLambdaWrapper<WarningRule> queryWrapper = new MPJLambdaWrapper<>(); | 
|         Utils.MP.blankToNull(pageWrap.getModel()); | 
|         pageWrap.getModel().setIsdeleted(Constants.ZERO); | 
|         queryWrapper.selectAll(WarningRule.class ); | 
|         queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getMemberNames()),WarningRule::getMemberNames, pageWrap.getModel().getMemberNames()); | 
|         queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getTitle()),WarningRule::getTitle, pageWrap.getModel().getTitle()); | 
|   | 
|         if (pageWrap.getModel().getId() != null) { | 
|             queryWrapper.eq(WarningRule::getId, pageWrap.getModel().getId()); | 
|         } | 
|         if (pageWrap.getModel().getCreator() != null) { | 
|             queryWrapper.eq(WarningRule::getCreator, pageWrap.getModel().getCreator()); | 
|         } | 
|         if (pageWrap.getModel().getCreateDate() != null) { | 
|             queryWrapper.ge(WarningRule::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); | 
|             queryWrapper.le(WarningRule::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); | 
|         } | 
|         if (pageWrap.getModel().getEditor() != null) { | 
|             queryWrapper.eq(WarningRule::getEditor, pageWrap.getModel().getEditor()); | 
|         } | 
|         if (pageWrap.getModel().getEditDate() != null) { | 
|             queryWrapper.ge(WarningRule::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); | 
|             queryWrapper.le(WarningRule::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); | 
|         } | 
|         if (pageWrap.getModel().getIsdeleted() != null) { | 
|             queryWrapper.eq(WarningRule::getIsdeleted, pageWrap.getModel().getIsdeleted()); | 
|         } | 
|         if (pageWrap.getModel().getInfo() != null) { | 
|             queryWrapper.eq(WarningRule::getInfo, pageWrap.getModel().getInfo()); | 
|         } | 
|         if (pageWrap.getModel().getMemberIds() != null) { | 
|             queryWrapper.eq(WarningRule::getMemberIds, pageWrap.getModel().getMemberIds()); | 
|         } | 
|         if (pageWrap.getModel().getIntervalSec() != null) { | 
|             queryWrapper.eq(WarningRule::getIntervalSec, pageWrap.getModel().getIntervalSec()); | 
|         } | 
|         if (pageWrap.getModel().getSortnum() != null) { | 
|             queryWrapper.eq(WarningRule::getSortnum, pageWrap.getModel().getSortnum()); | 
|         } | 
|         if (pageWrap.getModel().getStatus() != null) { | 
|             queryWrapper.eq(WarningRule::getStatus, pageWrap.getModel().getStatus()); | 
|         } | 
|         if (pageWrap.getModel().getWarningId() != null) { | 
|             queryWrapper.eq(WarningRule::getWarningId, pageWrap.getModel().getWarningId()); | 
|         } | 
|         queryWrapper.orderByDesc(WarningRule::getCreateDate); | 
|         IPage<WarningRule> result = warningRuleMapper.selectJoinPage(page, WarningRule.class,queryWrapper); | 
|         if(result.getRecords()!=null && result.getRecords().size()>0){ | 
|             List<WarningRuleDetail> allList = warningRuleDetailMapper.selectList(new LambdaQueryWrapper<WarningRuleDetail>() | 
|                     .eq(WarningRuleDetail::getIsdeleted,Constants.ZERO)); | 
|             for(WarningRule model :result.getRecords()){ | 
|                 model.setDetailList(getDetailListFromAll(allList,model.getId())); | 
|             } | 
|         } | 
|         return PageData.from(result); | 
|     } | 
|   | 
|     private List<WarningRuleDetail> getDetailListFromAll(List<WarningRuleDetail> allList, Integer id) { | 
|         List<WarningRuleDetail> list = new ArrayList<>(); | 
|         if(allList!=null && allList.size()>0){ | 
|             for(WarningRuleDetail d :allList){ | 
|                 if(Constants.equalsInteger(d.getRuleId(),id)){ | 
|                     list.add(d); | 
|                 } | 
|             } | 
|         } | 
|         return list; | 
|     } | 
|   | 
|     @Override | 
|     public long count(WarningRule warningRule) { | 
|         QueryWrapper<WarningRule> wrapper = new QueryWrapper<>(warningRule); | 
|         return warningRuleMapper.selectCount(wrapper); | 
|     } | 
| } |