yxm
2024-07-12 cf9153ef98e367c9590027369529760b5bd96265
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgProgressReportServiceImpl.java
@@ -4,6 +4,7 @@
import cn.gistack.sm.sg.DTO.ApprovalDTO;
import cn.gistack.sm.sg.DTO.ProjectSearchDTO;
import cn.gistack.sm.sg.VO.SgProgressReportVO;
import cn.gistack.sm.sg.VO.SgReportVO;
import cn.gistack.sm.sg.VO.SgStepReportVO;
import cn.gistack.sm.sg.mapper.*;
import cn.gistack.sm.sg.service.SgProgressReportService;
@@ -183,43 +184,40 @@
      Long userId = approvalDTO.getUserId();
      Long id = approvalDTO.getId();
      SgProgressReportDO sgProgressReportDO = sgProgressReportMapper.selectById(id);
      List<SgReportUserDO> list = new LambdaQueryChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getReportId, id).eq(SgReportUserDO::getIsHis,0)
         .eq(SgReportUserDO::getApprovalStatus, 0).orderByDesc(SgReportUserDO::getApprovalOrder).list();
      List<SgReportUserDO> sgReportUserDOS = new LambdaQueryChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getReportId, id).ne(SgReportUserDO::getApprovalOrder,0).eq(SgReportUserDO::getIsHis,0)
         .orderByAsc(SgReportUserDO::getApprovalOrder).list();
      //审批者
      SgReportUserDO sgReportUserDO = list.stream().filter(s -> s.getUserId().equals(Long.parseLong(sgProgressReportDO.getAuditPerson()))).findFirst().get();
      SgReportUserDO sgReportUserDO = new SgReportUserDO();
      if (isReject==1 && sgProgressReportDO.getStatus().equals(2)){
         sgReportUserDO = sgReportUserDOS.get(0);
      }else {
         sgReportUserDO = sgReportUserDOS.stream().filter(s -> s.getUserId().equals(Long.parseLong(sgProgressReportDO.getAuditPerson()))).findFirst().get();
      }
      Date date = new Date();
      LambdaUpdateChainWrapper<SgProgressReportDO> updateChainWrapper = new LambdaUpdateChainWrapper<>(sgProgressReportMapper).eq(SgProgressReportDO::getId, id);
      LambdaUpdateChainWrapper<SgReportUserDO> userUpdate = new LambdaUpdateChainWrapper<>(sgReportUserMapper)
         .eq(SgReportUserDO::getId, sgReportUserDO.getId()).set(SgReportUserDO::getApprovalContent,approvalDTO.getApprovalContent()).set(SgReportUserDO::getApprovalTime,date);
      if (approvalDTO.getStatus()==1){
         Integer approvalOrder = sgReportUserDO.getApprovalOrder();
         userUpdate.set(SgReportUserDO::getApprovalStatus,1).update();
         if (sgReportUserDO.getId()==list.get(0).getId()){
            updateChainWrapper.set(SgProgressReportDO::getStatus,2).set(SgProgressReportDO::getAuditPerson,null).update();
            //工序审核完成后 进行项目和设备状态的判断
            cachedThreadPool.execute(new Runnable(){
               @Override
               public  void  run(){
                  setProgramAndDeviceStatus(sgProgressReportMapper.selectById(approvalDTO.getId()).getProframId());
               }
            });
         }else {
            SgReportUserDO nextUser = list.stream().filter(s -> s.getApprovalOrder()==sgReportUserDO.getApprovalOrder()+1).findFirst().get();
            updateChainWrapper.set(SgProgressReportDO::getStatus,1).set(SgProgressReportDO::getAuditPerson,nextUser.getUserId()).update();
         }
      Optional<SgReportUserDO> next = sgReportUserDOS.stream().filter(s -> s.getApprovalOrder() == approvalOrder + 1).findFirst();
      //如果存在下一个审批人,则继续审批
      if (next.isPresent()){
         SgReportUserDO nextUser = next.get();
         updateChainWrapper.set(SgProgressReportDO::getStatus,1).set(SgProgressReportDO::getAuditPerson,nextUser.getUserId()).update();
      }else {
         updateChainWrapper.set(SgProgressReportDO::getStatus,2).set(SgProgressReportDO::getAuditPerson,null).update();
         //工序审核完成后 进行项目和设备状态的判断
         cachedThreadPool.execute(new Runnable(){
            @Override
            public  void  run(){
               setProgramAndDeviceStatus(sgProgressReportMapper.selectById(approvalDTO.getId()).getProframId());
            }
         });
      }
      }else {
         updateChainWrapper.set(SgProgressReportDO::getStatus,3);
         List<SgReportUserDO> sgReportUserDOS = new LambdaQueryChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getReportId, id).eq(SgReportUserDO::getIsHis,0)
            .orderByAsc(SgReportUserDO::getApprovalOrder).list()
//            .stream().distinct()
//            .stream().filter(s->s.getApprovalOrder()!=0 && s.getApprovalOrder()<= sgReportUserDO.getApprovalOrder()).collect(Collectors.toList())
            ;
            userUpdate.set(SgReportUserDO::getApprovalStatus,2);
         userUpdate.set(SgReportUserDO::getApprovalStatus,2);
         if (isReject==1){
            userUpdate.set(SgReportUserDO::getUserId,userId);
         }
@@ -228,10 +226,7 @@
            if (reportUserDO.getApprovalOrder()<=sgReportUserDO.getApprovalOrder()&&reportUserDO.getApprovalOrder()!=0){
               //更新为历史数据
               new LambdaUpdateChainWrapper<>(sgReportUserMapper).eq(SgReportUserDO::getId,reportUserDO.getId()).set(SgReportUserDO::getIsHis,1).update();
               reportUserDO.setId(null);
               reportUserDO.setApprovalStatus(0);
               reportUserDO.setIsHis(0);
               reportUserDO.setApprovalTime(date);
               setReportUser(date, reportUserDO);
               sgReportUserMapper.insert(reportUserDO);
               try {
                  Thread.sleep(100);
@@ -240,10 +235,7 @@
               }
            }else if (reportUserDO.getApprovalOrder()>sgReportUserDO.getApprovalOrder()){
               sgReportUserMapper.deleteById(reportUserDO.getId());
               reportUserDO.setId(null);
               reportUserDO.setApprovalStatus(0);
               reportUserDO.setIsHis(0);
               reportUserDO.setApprovalTime(date);
               setReportUser(date, reportUserDO);
               sgReportUserMapper.insert(reportUserDO);
               try {
                  Thread.sleep(100);
@@ -259,6 +251,14 @@
      }
   }
   private  void setReportUser(Date date, SgReportUserDO reportUserDO) {
      reportUserDO.setId(null);
      reportUserDO.setApprovalStatus(0);
      reportUserDO.setIsHis(0);
      reportUserDO.setApprovalTime(date);
      reportUserDO.setApprovalContent(null);
   }
@@ -413,6 +413,59 @@
      }
      return null;
   }
   @Override
   public SgReportVO getDeviceReportcopy(Long deviceId, Long stepId) {
      SgReportVO sgReportVO = new SgReportVO();
      QueryWrapper<SgProgressReportDO> wrapper = new QueryWrapper<>();
      wrapper.eq("gx_device_id", deviceId).ne("status", 4);
      if (stepId!= null) {
         wrapper.eq("gx_step_id", stepId);
      }
      List<SgProgressReportDO> sgProgressReportDOS = sgProgressReportMapper.selectList(wrapper);
      // 先检查列表是否为空,进行后续操作
      if (CollectionUtils.isNotEmpty(sgProgressReportDOS)) {
         sgProgressReportDOS.sort((u1, u2) -> u2.getCreateTime().compareTo(u1.getCreateTime()));
         SgProgressReportDO firstReport = sgProgressReportDOS.get(0);
         if (firstReport.getReportUser().equals(AuthUtil.getUserId()) && firstReport.getStatus().equals(3)) {
            sgReportVO.setGxDeviceId(deviceId);
            sgReportVO.setGxStepId(stepId);
            sgReportVO.setId(firstReport.getId());
            sgReportVO.setProframId(firstReport.getProframId());
            return sgReportVO;
         } else {
            sgReportVO.setId(firstReport.getId());
            return sgReportVO;
         }
      } else {
         Long prevStepId = stepId - 1;
         QueryWrapper<SgProgressReportDO> wrappers = new QueryWrapper<>();
         wrappers.eq("gx_device_id", deviceId).ne("status", 4).eq("gx_step_id", prevStepId);
         sgProgressReportDOS = sgProgressReportMapper.selectList(wrappers);
         if (CollectionUtils.isNotEmpty(sgProgressReportDOS)) {
            sgProgressReportDOS.sort((u1, u2) -> u2.getCreateTime().compareTo(u1.getCreateTime()));
            SgProgressReportDO firstReport = sgProgressReportDOS.get(0);
            if (firstReport.getReportUser().equals(AuthUtil.getUserId()) && firstReport.getStatus().equals(2)) {
               sgReportVO.setGxDeviceId(deviceId);
               sgReportVO.setGxStepId(stepId);
               sgReportVO.setProframId(firstReport.getProframId());
               return sgReportVO;
            } else {
               throw new ServiceException("上一工序未审批完,当前不能上报");
            }
         } else {
            throw new ServiceException("未找到相关审批资料");
         }
      }
   }
}