|  |  | 
 |  |  | import com.doumee.core.exception.BusinessException; | 
 |  |  | import com.doumee.core.model.PageData; | 
 |  |  | import com.doumee.core.model.PageWrap; | 
 |  |  | import com.doumee.core.utils.DateUtil; | 
 |  |  | import com.doumee.core.utils.Utils; | 
 |  |  | import com.doumee.dao.business.*; | 
 |  |  | import com.doumee.dao.business.model.*; | 
 |  |  | import com.doumee.dao.web.dto.CloseDTO; | 
 |  |  | import com.doumee.dao.web.dto.DCANoProblemDTO; | 
 |  |  | import com.doumee.service.business.WorkorderService; | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; | 
 |  |  | 
 |  |  | import com.github.yulichang.wrapper.MPJLambdaWrapper; | 
 |  |  | import org.apache.catalina.Manager; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.data.redis.core.RedisTemplate; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | import org.springframework.util.CollectionUtils; | 
 |  |  | import org.springframework.util.StringUtils; | 
 |  |  |  | 
 |  |  | import java.util.Arrays; | 
 |  |  | import java.util.Date; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Objects; | 
 |  |  | import javax.annotation.Resource; | 
 |  |  | import java.io.Serializable; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.concurrent.TimeUnit; | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private ManagersMapper managersMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private CategoryMapper categoryMapper; | 
 |  |  |  | 
 |  |  |     @Resource(name="sessionRedisTemplate") | 
 |  |  |     private RedisTemplate<Object, Serializable> redisTemplate; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public Integer create(Workorder workorder) { | 
 |  |  |         this.isValidBaseParam(workorder); | 
 |  |  | 
 |  |  |         workorder.setMemberId(workorder.getMemberId()); | 
 |  |  |         workorder.setIsdeleted(Constants.ZERO); | 
 |  |  |         workorder.setStatus(Constants.ZERO); | 
 |  |  |         //跌绊滑事件上报 查询SHE负责人 | 
 |  |  |         if(Constants.equalsInteger(workorder.getType(),Constants.THREE)){ | 
 |  |  |             List<Managers> managersList = managersMapper.selectList(new QueryWrapper<Managers>().lambda().eq(Managers::getIsdeleted,Constants.ZERO) | 
 |  |  |                     .eq(Managers::getType,Constants.ZERO).orderByAsc(Managers::getSortnum) | 
 |  |  |             ); | 
 |  |  |             if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(managersList)){ | 
 |  |  |                 workorder.setQwnoticeMemberIds(managersList.stream().map(i->i.getMemberId().toString()).collect(Collectors.joining(","))); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         workorder.setCode(this.getNextCode(workorder.getType())); | 
 |  |  |         //处理人员类信息 | 
 |  |  |         this.dealNoticeData(workorder); | 
 |  |  |         workorderMapper.insert(workorder); | 
 |  |  |         //存储DCA 问题记录表 | 
 |  |  |         this.saveProblemData(workorder); | 
 |  |  |         //存储附件信息 | 
 |  |  |         this.saveMutiFile(workorder); | 
 |  |  |         //处理上报日志 | 
 |  |  |         this.saveLog(null,workorder,Constants.ZERO,workorder.getMemberId()); | 
 |  |  |         //TODO 发送通知 | 
 |  |  |  | 
 |  |  |         return workorder.getId(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 存储附件信息 | 
 |  |  |      * @param workorder | 
 |  |  |      */ | 
 |  |  |     public void saveMutiFile(Workorder workorder){ | 
 |  |  |         List<Multifile> multifileList = workorder.getMultifileList(); | 
 |  |  |         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ | 
 |  |  |             for (Multifile multifile:multifileList) { | 
 |  |  |                 multifile.setObjId(workorder.getId()); | 
 |  |  |                 multifile.setCreateDate(new Date()); | 
 |  |  |                 //TODO 后续整理处理 | 
 |  |  |                 if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){//SHE事件上报图片 | 
 |  |  |                     multifile.setObjType(Constants.ZERO); | 
 |  |  |                     multifile.setObjType(Constants.multiFileType.sheUpload); | 
 |  |  |                 }else if(Constants.equalsInteger(workorder.getType(),Constants.THREE)){//跌绊滑事件上报图片 | 
 |  |  |                     multifile.setObjType(Constants.ONE); | 
 |  |  |                     multifile.setObjType(Constants.multiFileType.dbhUpload); | 
 |  |  |                 }else if(Constants.equalsInteger(workorder.getType(),Constants.ONE)){//DCA事件上报 | 
 |  |  |                     multifile.setObjType(Constants.multiFileType.dcaUpload); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             multifileMapper.insert(multifileList); | 
 |  |  |         } | 
 |  |  |         //处理上报日志 | 
 |  |  |         this.saveLog(null,workorder,Constants.ZERO,workorder.getMemberId()); | 
 |  |  |         return workorder.getId(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 处理 DCA 提报 问题数据 | 
 |  |  |      * @param workorder | 
 |  |  |      */ | 
 |  |  |     public void saveProblemData(Workorder workorder){ | 
 |  |  |         if(Constants.equalsInteger(workorder.getType(),Constants.TWO)){ | 
 |  |  |             List<DCANoProblemDTO> dcaNoProblemDTOList = workorder.getDcaNoProblemDTOList(); | 
 |  |  |             if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(dcaNoProblemDTOList)){ | 
 |  |  |                 for (DCANoProblemDTO dcaNoProblemDTO:dcaNoProblemDTOList) { | 
 |  |  |                     Category problem = categoryMapper.selectById(dcaNoProblemDTO.getProblemId()); | 
 |  |  |                     Workorder dcaWorkOrder = new Workorder(); | 
 |  |  |                     dcaWorkOrder.setCreateDate(new Date()); | 
 |  |  |                     dcaWorkOrder.setEditDate(new Date()); | 
 |  |  |                     dcaWorkOrder.setMemberId(workorder.getMemberId()); | 
 |  |  |                     dcaWorkOrder.setTypeId(dcaNoProblemDTO.getProblemId()); | 
 |  |  |                     dcaWorkOrder.setType(Constants.TWO); | 
 |  |  |                     dcaWorkOrder.setStatus(Constants.ZERO); | 
 |  |  |                     dcaWorkOrder.setIsdeleted(Constants.ZERO); | 
 |  |  |                     dcaWorkOrder.setProblemTitle(problem.getName()); | 
 |  |  |                     dcaWorkOrder.setProblemId(problem.getId()); | 
 |  |  |                     dcaWorkOrder.setProblemInfo(problem.getRemark()); | 
 |  |  |                     dcaWorkOrder.setDcaRecordId(workorder.getId()); | 
 |  |  |                     workorderMapper.insert(dcaWorkOrder); | 
 |  |  |                     List<Multifile> multifileList = dcaNoProblemDTO.getMultifileList(); | 
 |  |  |                     if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ | 
 |  |  |                         for (Multifile multifile:multifileList) { | 
 |  |  |                             multifile.setObjId(dcaWorkOrder.getId()); | 
 |  |  |                             multifile.setCreateDate(new Date()); | 
 |  |  |                             multifile.setObjType(Constants.multiFileType.dcaWorkOrder); | 
 |  |  |                         } | 
 |  |  |                         multifileMapper.insert(multifileList); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 处理通知类人员信息 | 
 |  |  |      * @param workorder | 
 |  |  |      */ | 
 |  |  |     public void dealNoticeData(Workorder workorder){ | 
 |  |  |         //SHE上报 提交类型为同事 处理同事信息 | 
 |  |  |         if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)&&Constants.equalsInteger(workorder.getMemberType(),Constants.ONE)){ | 
 |  |  |             List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).in(Member::getQwId,workorder.getMemberQwids().split(","))); | 
 |  |  |             if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){ | 
 |  |  |                 workorder.setMemberNames(memberList.stream().map(i->i.getName()).collect(Collectors.joining(","))); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         //跌绊滑事件上报 查询SHE负责人 | 
 |  |  |         if(Constants.equalsInteger(workorder.getType(),Constants.THREE) || Constants.equalsInteger(workorder.getType(),Constants.ONE)){ | 
 |  |  |             List<Managers> managersList = managersMapper.selectJoinList(Managers.class,new MPJLambdaWrapper<Managers>().selectAll(Managers.class) | 
 |  |  |                     .selectAs(Member::getName,Managers::getMemberName) | 
 |  |  |                     .leftJoin(Member.class,Member::getId,Managers::getMemberId) | 
 |  |  |                     .eq(Managers::getIsdeleted,Constants.ZERO) | 
 |  |  |                     .eq(Managers::getType,Constants.ZERO).orderByAsc(Managers::getSortnum) | 
 |  |  |             ); | 
 |  |  |             if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(managersList)){ | 
 |  |  |                 workorder.setQwnoticeMemberIds(managersList.stream().map(i->i.getMemberId().toString()).collect(Collectors.joining(","))); | 
 |  |  |                 if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){ | 
 |  |  |                     workorder.setEmialMemberIds(managersList.stream().map(i->i.getMemberId().toString()).collect(Collectors.joining(","))); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | 
 |  |  |         || Objects.isNull(workorder.getSubmitDate()) | 
 |  |  |         || Objects.isNull(workorder.getHappenTime()) | 
 |  |  |         || Objects.isNull(workorder.getType()) | 
 |  |  |         || !( Constants.equalsInteger(workorder.getType(),Constants.ZERO) || Constants.equalsInteger(workorder.getType(),Constants.ONE) | 
 |  |  |             || Constants.equalsInteger(workorder.getType(),Constants.TWO) || Constants.equalsInteger(workorder.getType(),Constants.THREE) | 
 |  |  |         || Objects.isNull(workorder.getTypeId()) | 
 |  |  |         || Objects.isNull(workorder.getLocaltionId()) | 
 |  |  |         || !( Constants.equalsInteger(workorder.getType(),Constants.ZERO) || Constants.equalsInteger(workorder.getType(),Constants.ONE) ||Constants.equalsInteger(workorder.getType(),Constants.THREE) | 
 |  |  |         )){ | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         //SHE 事件上报 | 
 |  |  |         if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){ | 
 |  |  |             if(Objects.isNull(workorder.getMemberType()) | 
 |  |  |                     || Objects.isNull(workorder.getLocaltionId()) | 
 |  |  |                     || Objects.isNull(workorder.getOutJiuyi()) | 
 |  |  |                     || (Constants.equalsInteger(workorder.getOutJiuyi(),Constants.ZERO) && Objects.isNull(workorder.getIsYiwushi())) | 
 |  |  |                     || (Constants.equalsInteger(workorder.getIsYiwushi(),Constants.ZERO) && Objects.isNull(workorder.getIsHurted())) | 
 |  |  |                     || Objects.isNull(workorder.getCategoryId()) | 
 |  |  |                     || Objects.isNull(workorder.getWorkRelated()) | 
 |  |  |                     || (Constants.equalsInteger(workorder.getMemberType(),Constants.TWO) && StringUtils.isEmpty(workorder.getMemberNames())) | 
 |  |  |                     || (Constants.equalsInteger(workorder.getMemberType(),Constants.ZERO) && StringUtils.isEmpty(workorder.getMemberQwids())) | 
 |  |  |                     || (Constants.equalsInteger(workorder.getMemberType(),Constants.ONE) && StringUtils.isEmpty(workorder.getMemberQwids())) | 
 |  |  |                     || org.apache.commons.lang3.StringUtils.isBlank(workorder.getEventInfo()) | 
 |  |  |             ){ | 
 |  |  |                 throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  | 
 |  |  |         } | 
 |  |  |         //跌绊滑 事件上报 | 
 |  |  |         if(Constants.equalsInteger(workorder.getType(),Constants.THREE)){ | 
 |  |  |             if(Objects.isNull(workorder.getTypeId()) | 
 |  |  |                 || Objects.isNull(workorder.getLocaltionId()) | 
 |  |  |                 || org.apache.commons.lang3.StringUtils.isBlank(workorder.getEventInfo()) | 
 |  |  |             if(org.apache.commons.lang3.StringUtils.isBlank(workorder.getRiskInfo()) | 
 |  |  |             ){ | 
 |  |  |                 throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         //DCA 事件上报 | 
 |  |  |         if(Constants.equalsInteger(workorder.getType(),Constants.ONE)){ | 
 |  |  |             if(Objects.isNull(workorder.getDcaYesNum()) | 
 |  |  |                 || Objects.isNull(workorder.getDcaNoNum()) | 
 |  |  |             ){ | 
 |  |  |                 throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         //数据库数据校验 | 
 |  |  |         Category typeCategory = categoryMapper.selectById(workorder.getTypeId()); | 
 |  |  |         if(Objects.isNull(typeCategory)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         Category locationCategory = categoryMapper.selectById(workorder.getLocaltionId()); | 
 |  |  |         if(Objects.isNull(locationCategory)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         workorder.setLocationName(locationCategory.getNamePath()); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  | 
 |  |  |                         .last(" limit 1 ") | 
 |  |  |         ); | 
 |  |  |         if(Objects.nonNull(workorder)){ | 
 |  |  |             //如果是SHE事件上报 SHE涉及人员类型为同事信息 需要查询同事名称 | 
 |  |  |             if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)&&Constants.equalsInteger(workorder.getMemberType(),Constants.ONE)){ | 
 |  |  |                 List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).in(Member::getQwId, Arrays.asList(workorder.getMemberQwids().split(",")))); | 
 |  |  |                 if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){ | 
 |  |  |                     workorder.setColleague(memberList.stream().map(i->i.getName()).collect(Collectors.joining(","))); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             //查询附件信息 | 
 |  |  |             List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getIsdeleted,Constants.ZERO) | 
 |  |  |                     .eq(Multifile::getObjId,workorder).orderByAsc(Multifile::getId)); | 
 |  |  | 
 |  |  |                 workorder.setMultifileList(multifileList); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         return workorder; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  | 
 |  |  |                 .eq(pageWrap.getModel().getEmialMemberIds() != null, Workorder::getEmialMemberIds, pageWrap.getModel().getEmialMemberIds()) | 
 |  |  |                 .eq(pageWrap.getModel().getQwnoticeMemberIds() != null, Workorder::getQwnoticeMemberIds, pageWrap.getModel().getQwnoticeMemberIds()) | 
 |  |  |                 .eq(pageWrap.getModel().getHappenTime() != null, Workorder::getHappenTime, pageWrap.getModel().getHappenTime()) | 
 |  |  |                 .ge(pageWrap.getModel().getTypeId() != null, Workorder::getTypeId, Utils.Date.getStart(pageWrap.getModel().getTypeId())) | 
 |  |  |                 .le(pageWrap.getModel().getTypeId() != null, Workorder::getTypeId, Utils.Date.getEnd(pageWrap.getModel().getTypeId())) | 
 |  |  |                 .eq(pageWrap.getModel().getRiskInfo() != null, Workorder::getRiskInfo, pageWrap.getModel().getRiskInfo()) | 
 |  |  |                 .eq(pageWrap.getModel().getManagerId() != null, Workorder::getManagerId, pageWrap.getModel().getManagerId()) | 
 |  |  |                 .eq(pageWrap.getModel().getDealerId() != null, Workorder::getDealerId, pageWrap.getModel().getDealerId()) | 
 |  |  | 
 |  |  |         return workorderMapper.selectCount(wrapper); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public String getNextCode(Integer type){ | 
 |  |  |         String date = DateUtil.getFomartDate(new Date(),"yyyyMMddHHmmss"); | 
 |  |  |         String key = "S"; | 
 |  |  |         if(Constants.equalsInteger(type,Constants.ONE)){ | 
 |  |  |             key = "D"; | 
 |  |  |         }else if(Constants.equalsInteger(type,Constants.THREE)){ | 
 |  |  |             key = "A"; | 
 |  |  |         } | 
 |  |  |         String code = redisTemplate.opsForValue().get(key+"_CODE").toString(); | 
 |  |  |         if(StringUtils.isEmpty(code)){ | 
 |  |  |             code = "01"; | 
 |  |  |         } | 
 |  |  |         redisTemplate.opsForValue().set(key+"_CODE",Integer.valueOf(code)+1); | 
 |  |  |         return key + date + org.apache.commons.lang3.StringUtils.leftPad(code,2,"0"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public void initializationCode(){ | 
 |  |  |         redisTemplate.opsForValue().set("A_CODE",1); | 
 |  |  |         redisTemplate.opsForValue().set("S_CODE",1); | 
 |  |  |         redisTemplate.opsForValue().set("D_CODE",1); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public void  closeWorkOrder(CloseDTO closeDTO){ | 
 |  |  |         if(Objects.isNull(closeDTO) | 
 |  |  |         || Objects.isNull(closeDTO.getWorkorderId()) | 
 |  |  |         || org.apache.commons.lang3.StringUtils.isBlank(closeDTO.getInfo()) | 
 |  |  |         || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(closeDTO.getMultifileList())){ | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         Workorder workorder = workorderMapper.selectById(closeDTO.getWorkorderId()); | 
 |  |  |         if(Objects.isNull(workorder)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到工单数据"); | 
 |  |  |         } | 
 |  |  |         if(!(Constants.equalsInteger(workorder.getStatus(),Constants.ZERO) | 
 |  |  |             || Constants.equalsInteger(workorder.getStatus(),Constants.ONE) | 
 |  |  |             || Constants.equalsInteger(workorder.getStatus(),Constants.TWO))){ | 
 |  |  |             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"工单状态已流转无法进行操作"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  |