|  |  | 
 |  |  | package com.doumee.service.business.impl; | 
 |  |  |  | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
 |  |  | import com.doumee.biz.system.SystemDictDataBiz; | 
 |  |  | import com.doumee.core.constants.ResponseStatus; | 
 |  |  | import com.doumee.core.exception.BusinessException; | 
 |  |  | 
 |  |  | import com.doumee.core.haikang.model.param.request.ParkReservationDelRequest; | 
 |  |  | import com.doumee.core.haikang.model.param.respose.ParkReservationAddResponse; | 
 |  |  | import com.doumee.core.haikang.service.HKService; | 
 |  |  | import com.doumee.service.business.third.WmsService; | 
 |  |  | import com.doumee.dao.business.dao.UserActionMapper; | 
 |  |  | import com.doumee.service.business.third.model.LoginUserInfo; | 
 |  |  | import com.doumee.service.business.third.model.PageData; | 
 |  |  | import com.doumee.service.business.third.model.PageWrap; | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private PlatformJobMapper platformJobMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private UserActionMapper userActionMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private TmsService tmsService; | 
 |  |  |  | 
 |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     @Transactional(rollbackFor = {BusinessException.class}) | 
 |  |  |     public  void deleteById(Integer id,LoginUserInfo user) { | 
 |  |  |         Date date = new Date(); | 
 |  |  |         PlatformJob job = platformJobMapper.selectById(id); | 
 |  |  |         if(job==null ||Constants.equalsInteger(Constants.ONE,job.getIsdeleted())){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |         if(! Constants.equalsInteger(Constants.PlatformJobStatus.CANCEL.getKey(),job.getStatus())){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,只能删除已取消的作业任务!"); | 
 |  |  |         } | 
 |  |  |         platformJobMapper.update(null,new UpdateWrapper<PlatformJob>().lambda() | 
 |  |  |                         .set(PlatformJob::getIsdeleted,Constants.ONE) | 
 |  |  |                         .set(PlatformJob::getEditDate,date) | 
 |  |  |                         .set(PlatformJob::getEditor,user.getId()) | 
 |  |  |                         .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CANCEL.getKey()) | 
 |  |  |                         .eq(PlatformJob::getId,id)); | 
 |  |  |         String[] params = new String[3]; | 
 |  |  |         params[0] = user.getRealname(); | 
 |  |  |         params[1]=DateUtil.getPlusTime2(date); | 
 |  |  |         params[2]="【运单号:"+job.getBillCode()+"】-【司机:"+job.getDriverName()+" "+job.getDrivierPhone()+"】-【车牌号:"+job.getCarCodeFront()+"】"; | 
 |  |  |         //记录删除日志 | 
 |  |  |         UserActionServiceImpl.saveUserActionBiz(user,id,Constants.UserActionType.PLATFROM_JOB_DEL,userActionMapper,date,params,JSONObject.toJSONString(job)); | 
 |  |  |     } | 
 |  |  |     @Override | 
 |  |  |     public void delete(Integer id) { | 
 |  |  |         platformJobMapper.update(null,new UpdateWrapper<PlatformJob>().lambda() | 
 |  |  |                         .set(PlatformJob::getIsdeleted,Constants.ONE) | 
 |  |  | 
 |  |  |         IPage<PlatformJob> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); | 
 |  |  |         MPJLambdaWrapper<PlatformJob> queryWrapper = new MPJLambdaWrapper<>(); | 
 |  |  |         Utils.MP.blankToNull(pageWrap.getModel()); | 
 |  |  |         pageWrap.getModel().setIsdeleted(Constants.ZERO); | 
 |  |  |         queryWrapper | 
 |  |  |                 .selectAll(PlatformJob.class) | 
 |  |  |                 .selectAs(Platform::getName,PlatformJob::getPlatformName) | 
 |  |  | 
 |  |  |                 .apply(pageWrap.getModel().getQueryStatus() != null, " find_in_set(t.`STATUS`,'"+pageWrap.getModel().getQueryStatus()+"')") | 
 |  |  |                 .apply(pageWrap.getModel().getQueryStatusForPower() != null, " find_in_set(t.`STATUS`,'"+pageWrap.getModel().getQueryStatusForPower()+"')") | 
 |  |  |                 .apply(pageWrap.getModel().getQueryType() != null, " find_in_set(t.TYPE,'"+pageWrap.getModel().getQueryType()+"')") | 
 |  |  |                 .ge(pageWrap.getModel().getCreateDateStart() != null, PlatformJob::getCreateDate,  pageWrap.getModel().getCreateDateStart()) | 
 |  |  |                 .le(pageWrap.getModel().getCreateDateEnd() != null, PlatformJob::getCreateDate,  pageWrap.getModel().getCreateDateEnd()) | 
 |  |  |                 .ge(pageWrap.getModel().getBeginWorkDateStart() != null, PlatformJob::getStartDate, Utils.Date.getStart(pageWrap.getModel().getBeginWorkDateStart())) | 
 |  |  |                 .le(pageWrap.getModel().getBeginWorkDateEnd() != null, PlatformJob::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getBeginWorkDateEnd())) | 
 |  |  |                 .ge(pageWrap.getModel().getBeginDoneDateStart() != null, PlatformJob::getDoneDate, Utils.Date.getStart(pageWrap.getModel().getBeginDoneDateStart())) | 
 |  |  |                 .le(pageWrap.getModel().getBeginDoneDateEnd() != null, PlatformJob::getDoneDate, Utils.Date.getEnd(pageWrap.getModel().getBeginDoneDateEnd())) | 
 |  |  |  | 
 |  |  |                 .ge(pageWrap.getModel().getCreateDateStart() != null, PlatformWmsJob::getIoCreatedate, Utils.Date.getStart(pageWrap.getModel().getCreateDateStart())) | 
 |  |  |                 .le(pageWrap.getModel().getCreateDateEnd() != null, PlatformWmsJob::getIoCreatedate, Utils.Date.getEnd(pageWrap.getModel().getCreateDateEnd())) | 
 |  |  |                 .isNotNull(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ONE,pageWrap.getModel().getJobType()), PlatformJob::getContractNum) | 
 |  |  |                 .isNull(pageWrap.getModel().getJobType() != null && Constants.equalsInteger(Constants.ZERO,pageWrap.getModel().getJobType()), PlatformJob::getContractNum) | 
 |  |  |                 .exists(StringUtils.isNotBlank(pageWrap.getModel().getWmsContractNum()),"select tt.id from platfrom_wms_detail tt where tt.isdeleted=0 and tt.job_id=t.id"); | 
 |  |  |  | 
 |  |  |         for(PageWrap.SortData sortData: pageWrap.getSorts()) { | 
 |  |  |                 .exists(StringUtils.isNotBlank(pageWrap.getModel().getWmsContractNum()), | 
 |  |  |                         "select tt.id from platform_wms_detail tt where tt.isdeleted=0 and tt.contract_num='"+pageWrap.getModel().getWmsContractNum()+"' and  tt.job_id=t.id"); | 
 |  |  |         queryWrapper.orderByDesc(PlatformJob::getCreateDate); | 
 |  |  |         /*for(PageWrap.SortData sortData: pageWrap.getSorts()) { | 
 |  |  |             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { | 
 |  |  |                 queryWrapper.orderByDesc(sortData.getProperty()); | 
 |  |  |             } else { | 
 |  |  |                 queryWrapper.orderByAsc(sortData.getProperty()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         }*/ | 
 |  |  |        IPage<PlatformJob> platformJobIPage = platformJobJoinMapper.selectJoinPage(page,PlatformJob.class,queryWrapper); | 
 |  |  |         platformJobIPage.getRecords().forEach(i->{ | 
 |  |  |             i.dealTime(); | 
 |  |  | 
 |  |  |                 .selectAs(Platform::getName,PlatformJob::getPlatformName) | 
 |  |  |                 .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) | 
 |  |  |                 .selectAs(PlatformWmsJob::getCarrierName,PlatformJob::getCarrierName) | 
 |  |  |                 .select(" case when t.total_num is null  then ( select sum(pwd.IO_QTY) from platform_wms_detail pwd where pwd.JOB_ID = t.id  ) else t.total_num end ioQty ") | 
 |  |  |                 .select(" (select GROUP_CONCAT(distinct(tt.contract_num ))  from platform_wms_detail tt where tt.isdeleted=0 and tt.contract_num is not null   and  tt.job_id=t.id )as wmsContractNum") | 
 |  |  | //                .select(" case when t.total_num is null  then ( select sum(pwd.IO_QTY) from platform_wms_detail pwd where pwd.JOB_ID = t.id  ) else t.total_num end ioQty ") | 
 |  |  |                 .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) | 
 |  |  |                 .leftJoin(PlatformWmsJob.class,PlatformWmsJob::getCarryBillCode,PlatformJob::getBillCode) | 
 |  |  |                 .leftJoin(PlatformBooks.class,PlatformBooks::getJobId,PlatformJob::getId) | 
 |  |  | 
 |  |  |                 .apply("(  t1.isdeleted = 0 or t.PLATFORM_ID is null  )") | 
 |  |  |                 .eq(pageWrap.getModel().getPlatformGroupId() != null, PlatformJob::getPlatformGroupId, pageWrap.getModel().getPlatformGroupId()) | 
 |  |  |                 .like(pageWrap.getModel().getCarCodeFront() != null, PlatformJob::getCarCodeFront, pageWrap.getModel().getCarCodeFront()) | 
 |  |  |  | 
 |  |  |                 .apply(Objects.nonNull(pageWrap.getModel().getCallType()) | 
 |  |  |                                 &&Constants.equalsInteger(pageWrap.getModel().getCallType(),Constants.ONE), | 
 |  |  |                         " ( " + | 
 |  |  |                                 " ( t.`STATUS` = "+Constants.PlatformJobStatus.WAIT_CALL.getKey()+" and t.PLATFORM_GROUP_ID = ( SELECT p.group_id FROM platform p WHERE p.id = "+pageWrap.getModel().getPlatformId()+" LIMIT 1 )  )" + | 
 |  |  |                                 ") " | 
 |  |  |                 ) | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                 .apply(Objects.nonNull(pageWrap.getModel().getCallType()) | 
 |  |  |                                 &&Constants.equalsInteger(pageWrap.getModel().getCallType(),Constants.TWO), | 
 |  |  |                                  " ( " + | 
 |  |  | 
 |  |  |                                          "  (t.`STATUS` = "+Constants.PlatformJobStatus.TRANSFERING.getKey()+" and t.PLATFORM_ID = "+pageWrap.getModel().getPlatformId()+" )  " + | 
 |  |  |                                          ") " | 
 |  |  |                 ) | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                 .and(Objects.nonNull(pageWrap.getModel().getCallType()) | 
 |  |  |                                 &&Constants.equalsInteger(pageWrap.getModel().getCallType(),Constants.THREE), | 
 |  |  |                         i->i.eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey()).or() | 
 |  |  | 
 |  |  |                 ) | 
 |  |  | //                .like(PlatformJob::getArriveDate,DateUtil.dateTypeToString(new Date(),"yyyy-MM-dd")) | 
 |  |  |                 .orderByDesc(PlatformJob::getStatus) | 
 |  |  |                 .orderByAsc(PlatformJob::getSignDate) | 
 |  |  |         ; | 
 |  |  |         IPage<PlatformJob> platformJobIPage = platformJobJoinMapper.selectJoinPage(page,PlatformJob.class,queryWrapper); | 
 |  |  |         platformJobIPage.getRecords().forEach(i->{ | 
 |  |  |             i.dealTime(); | 
 |  |  |             i.setTotalNum(i.getIoQty()); | 
 |  |  |             if(Constants.equalsInteger(i.getOrigin(),Constants.ZERO)){ | 
 |  |  |                 i.setWmsContractNum(i.getContractNum()); | 
 |  |  |             } | 
 |  |  | //            i.setTotalNum(i.getIoQty()); | 
 |  |  | //            this.getWmsJobData(i); | 
 |  |  | //            this.queryWaitNum(i); | 
 |  |  |         }); | 
 |  |  | 
 |  |  |             } | 
 |  |  |         }  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public void queryWaitNum(PlatformJob platformJob){ | 
 |  |  |         if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())){ | 
 |  |  |             //查询当前所有排队数量 | 
 |  |  | 
 |  |  |                     .eq(PlatformJob::getPlatformGroupId,platformJob.getPlatformGroupId()) | 
 |  |  | //                    .like(PlatformJob::getArriveDate,DateUtil.dateTypeToString(platformJob.getArriveDate(),"yyyy-MM-dd")) | 
 |  |  |             ); | 
 |  |  |  | 
 |  |  |             for (PlatformJob linePlatformJob:lineUpAllList) { | 
 |  |  |                 this.getWmsJobData(linePlatformJob); | 
 |  |  |             } | 
 |  |  |             if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(lineUpAllList)){ | 
 |  |  |                 for (PlatformJob linePlatformJob:lineUpAllList) { | 
 |  |  |                     this.getWmsJobData(linePlatformJob); | 
 |  |  |                 } | 
 |  |  |                 //查询排队在我前面的数据 | 
 |  |  |                 List<PlatformJob> lineUpNum = lineUpAllList.stream().filter(i->Objects.nonNull(i.getSignDate())&&i.getSignDate().getTime()<platformJob.getSignDate().getTime()).collect(Collectors.toList()); | 
 |  |  |                 platformJob.setLineUpNum(lineUpNum.size()); | 
 |  |  |                 BigDecimal sumWorkRate = platformJob.getTotalNum(); | 
 |  |  |                 BigDecimal sumWorkRate = Constants.formatBigdecimal(platformJob.getTotalNum()); | 
 |  |  |                 for (PlatformJob linePlatformJob:lineUpNum) { | 
 |  |  |                     sumWorkRate = sumWorkRate.add(linePlatformJob.getTotalNum()); | 
 |  |  |                     sumWorkRate = sumWorkRate.add(Constants.formatBigdecimal(linePlatformJob.getTotalNum())); | 
 |  |  |                 } | 
 |  |  |                 //计算预计等待时间 | 
 |  |  |                 List<Platform> platformList = platformJoinMapper.selectList(new QueryWrapper<Platform>().lambda() | 
 |  |  |                         .eq(Platform::getIsdeleted,Constants.ZERO).eq(Platform::getGroupId,platformJob.getPlatformGroupId())); | 
 |  |  |                 BigDecimal workRate = platformList.stream().map(m->m.getWorkRate()).reduce(BigDecimal.ZERO,BigDecimal::add); | 
 |  |  |                 BigDecimal workRate = new BigDecimal(0); | 
 |  |  |                 if(platformList!=null){ | 
 |  |  |                       workRate = platformList.stream().map(m->Constants.formatBigdecimal(m.getWorkRate())).reduce(BigDecimal.ZERO,BigDecimal::add); | 
 |  |  |                 } | 
 |  |  |                 if(sumWorkRate.compareTo(BigDecimal.ZERO) > Constants.ZERO && workRate.compareTo(BigDecimal.ZERO)  > Constants.ZERO ){ | 
 |  |  |                     BigDecimal sumMinute = sumWorkRate.divide(workRate,1, RoundingMode.HALF_DOWN).multiply(BigDecimal.valueOf(60L)); | 
 |  |  |                     Integer sumMinuteInteger = sumMinute.intValue(); | 
 |  |  | 
 |  |  |                 platformJob.setWaitTime("预计等待:-小时-分钟"); | 
 |  |  |             } | 
 |  |  |         }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey()) | 
 |  |  |         || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.DONE.getKey())){ | 
 |  |  |         || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.DONE.getKey()) | 
 |  |  |                 || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()) | 
 |  |  |                 || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.LEAVED.getKey())){ | 
 |  |  |             //查询最后开始任务的月台记录  日志表  因为存在异常挂起 转移 等问题 | 
 |  |  |             PlatformLog platformLog = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda() | 
 |  |  |                     .eq(PlatformLog::getJobId,platformJob.getId()) | 
 |  |  | 
 |  |  |                     .orderByDesc(PlatformLog::getCreateDate) | 
 |  |  |                     .last(" limit 1") | 
 |  |  |             ); | 
 |  |  |             if(Objects.nonNull(platformLog)){ | 
 |  |  |             if(Objects.nonNull(platformLog) && platformJob.getWorkRate()!=null && platformJob.getWorkRate().compareTo(new BigDecimal(0))>0){ | 
 |  |  |                 BigDecimal sumMinute = platformJob.getTotalNum().divide(platformJob.getWorkRate(),1, RoundingMode.HALF_DOWN).multiply(BigDecimal.valueOf(60L)); | 
 |  |  |                 platformJob.setFinishTimeStr(DateUtil.DateToStr(DateUtil.afterMinutesDate(platformLog.getCreateDate(),sumMinute.intValue()),"HH:mm")); | 
 |  |  |             } | 
 |  |  | 
 |  |  |                     .isNotNull(PlatformLog::getParam3) | 
 |  |  |                     .ne(PlatformLog::getParam3,Constants.ZERO+"") | 
 |  |  |                     .orderByDesc(PlatformLog::getCreateDate)); | 
 |  |  |             platformJob.setWorkTime(platformLogList.stream().map(m->Long.valueOf(m.getParam3())).reduce(Long.valueOf(0),Long::sum)); | 
 |  |  |             if(platformLogList!=null){ | 
 |  |  |                 platformJob.setWorkTime(platformLogList.stream().map(m->Long.valueOf(StringUtils.defaultString(m.getParam3(),"0"))).reduce(Long.valueOf(0),Long::sum)); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |         platformJob.setWorkTimeStr(DateUtil.getTimeStrBySecond(platformJob.getWorkTime())); | 
 |  |  |     } | 
 |  |  |      | 
 |  |  |      | 
 |  |  | 
 |  |  |             //查询前方排队数量 | 
 |  |  |             this.queryWaitNum(platformJob); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         driverHomeVO.setPlatformJobList(platformJobList); | 
 |  |  |         // 园区导览图  图片 | 
 |  |  |         driverHomeVO.setReservationMap(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.PLATFORM_GUIDEMAP).getCode()); | 
 |  |  | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         PlatformJob platformJob = platformJobMapper.selectById(confirmTaskDTO.getId()); | 
 |  |  |         if(Objects.isNull(platformJob)){ | 
 |  |  |         if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |         if(!Constants.equalsInteger(platformJob.getStatus(),Constants.ZERO)){ | 
 |  |  | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         PlatformJob platformJob = platformJobMapper.selectById(signInDTO.getJobId()); | 
 |  |  |         if(Objects.isNull(platformJob)){ | 
 |  |  |         if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |         BeanUtils.copyProperties(platformJob,oldPlatformJob); | 
 |  |  |  | 
 |  |  |         if(Constants.equalsInteger(signInDTO.getSignType(),Constants.ZERO)){ | 
 |  |  |             if(!StringUtils.equals(platformJob.getDrivierPhone(),signInDTO.getLoginUserInfo().getMobile())){ | 
 |  |  |                 throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |             } | 
 |  |  |             if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){ | 
 |  |  |                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转,请刷新查看"); | 
 |  |  |             } | 
 |  |  |             this.distanceSignIn(signInDTO,platformJob); | 
 |  |  |         }else if(Constants.equalsInteger(signInDTO.getSignType(),Constants.ONE)){ | 
 |  |  |             if(!StringUtils.equals(platformJob.getDrivierPhone(),signInDTO.getLoginUserInfo().getMobile())){ | 
 |  |  |                 throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |             } | 
 |  |  |             if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){ | 
 |  |  |                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"业务状态已流转,请刷新查看"); | 
 |  |  |             } | 
 |  |  | 
 |  |  |         } | 
 |  |  |         //查询今日最大的签到数 | 
 |  |  |         List<PlatformJob> signList = platformJobMapper.selectList(new QueryWrapper<PlatformJob>().lambda() | 
 |  |  |                 .eq(PlatformJob::getIsdeleted,Constants.ZERO) | 
 |  |  |                 .apply(" DATE(SIGN_DATE) = DATE(NOW()) and sign_date is not null  ")); | 
 |  |  |         if(CollectionUtils.isEmpty(signList)){ | 
 |  |  |             platformJob.setSignNum(Constants.ONE); | 
 |  |  | 
 |  |  |                 || Objects.isNull(signInDTO.getLnt())){ | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"经纬度信息异常"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         //获取签到点的经纬度 | 
 |  |  |         Double lat = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LAT).getCode()); | 
 |  |  |         Double lnt = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LNT).getCode()); | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public PlatformJob getDetail(JobDetailDTO jobDetailDTO){ | 
 |  |  |         if(Objects.isNull(jobDetailDTO) | 
 |  |  |         || Objects.isNull(jobDetailDTO.getJobId())){ | 
 |  |  |         if(Objects.isNull(jobDetailDTO)   || Objects.isNull(jobDetailDTO.getJobId())){ | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         PlatformJob platformJob  = platformJobMapper.selectById(jobDetailDTO.getJobId()); | 
 |  |  |         if(Objects.isNull(platformJob)){ | 
 |  |  |         if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |         if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){ | 
 |  |  |             //待签到 计算距离 | 
 |  |  |             if(Objects.nonNull(jobDetailDTO.getLnt())&&Objects.nonNull(jobDetailDTO.getLat())){ | 
 |  |  |                 //获取签到点的经纬度 | 
 |  |  |                 Double lat = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LAT).getCode()); | 
 |  |  |                 Double lnt = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LNT).getCode()); | 
 |  |  |                 //获取2个点的距离X米 | 
 |  |  |                 Double getDistanceDouble = PositionUtil.getDistance(jobDetailDTO.getLnt(),jobDetailDTO.getLat(),lnt,lat); | 
 |  |  |                 //转换km | 
 |  |  |                 BigDecimal getDistance = BigDecimal.valueOf(getDistanceDouble).divide(new BigDecimal(1000),2,BigDecimal.ROUND_HALF_UP); | 
 |  |  |                 platformJob.setGetDistance(getDistance); | 
 |  |  |                 if(jobDetailDTO.getLat()!=null && jobDetailDTO.getLnt()!=null){ | 
 |  |  |                     //获取签到点的经纬度 | 
 |  |  |                     Double lat = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LAT).getCode()); | 
 |  |  |                     Double lnt = Double.parseDouble(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_PLACE_LNT).getCode()); | 
 |  |  |                     //获取2个点的距离X米 | 
 |  |  |                     Double getDistanceDouble = PositionUtil.getDistance(jobDetailDTO.getLnt(),jobDetailDTO.getLat(),lnt,lat); | 
 |  |  |                     //转换km | 
 |  |  |                     BigDecimal getDistance = BigDecimal.valueOf(getDistanceDouble).divide(new BigDecimal(1000),2,BigDecimal.ROUND_HALF_UP); | 
 |  |  |                     platformJob.setGetDistance(getDistance); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }else if( Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey()) | 
 |  |  |                 || Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.IN_WAIT.getKey()) | 
 |  |  | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); | 
 |  |  |         if(Objects.isNull(platformJob)){ | 
 |  |  |         if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |         if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())){ | 
 |  |  | 
 |  |  |         ); | 
 |  |  |          | 
 |  |  |         //公众号模板消息 | 
 |  |  |         if(Objects.nonNull(platformJob.getDriverId())) { | 
 |  |  |         if(Objects.nonNull(platformJob.getDrivierPhone())) { | 
 |  |  |           this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobCallIn,platformJob); | 
 |  |  |         } | 
 |  |  |         return platformJob; | 
 |  |  | 
 |  |  |     public void sendWxNotice(String objCode,PlatformJob platformJob){ | 
 |  |  |         SystemUser driver = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda() | 
 |  |  |                 .eq(SystemUser::getDeleted, Constants.ZERO) | 
 |  |  |                 .eq(SystemUser::getType, Constants.ZERO) | 
 |  |  |                 .in(SystemUser::getType, Constants.ZERO,Constants.TWO) | 
 |  |  |                 .eq(SystemUser::getMobile,platformJob.getDrivierPhone()) | 
 |  |  |                 .last(" limit 1 ")); | 
 |  |  |         if (Objects.nonNull(driver) && StringUtils.isNotBlank(driver.getOpenid())) { | 
 |  |  | 
 |  |  |                             .eq(PlatformJob::getId,platformJob.getId()) | 
 |  |  |                             .last(" limit 1") | 
 |  |  |             ); | 
 |  |  |  | 
 |  |  |             WxPlatNotice wxPlatNotice = new WxPlatNotice(); | 
 |  |  |             wxPlatNotice.sendPlatformJobTemplateNotice(systemDictDataBiz, | 
 |  |  |                     wxNoticeConfigMapper, p, | 
 |  |  | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); | 
 |  |  |         if(Objects.isNull(platformJob)){ | 
 |  |  |         if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |         if(!(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey()) | 
 |  |  | 
 |  |  |         //查询月台任务等待作业数量 | 
 |  |  |         if(platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda() | 
 |  |  |                 .eq(PlatformJob::getPlatformId,platform.getId()) | 
 |  |  |                 .eq(PlatformJob::getIsdeleted,Constants.ZERO) | 
 |  |  |                 .in(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey(),Constants.PlatformJobStatus.WORKING.getKey()) | 
 |  |  |         )>=platform.getWorkingNum()){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"超出月台可同时作业数量["+platform.getWorkingNum()+"辆]"); | 
 |  |  | 
 |  |  |         ); | 
 |  |  |  | 
 |  |  |         //公众号模板消息 | 
 |  |  |         if(Objects.nonNull(platformJob.getDriverId())){  | 
 |  |  |         if(Objects.nonNull(platformJob.getDrivierPhone())){ | 
 |  |  |             this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobSingIn,platformJob); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |         //广播 led通知 | 
 |  |  |         platformJob.setPlatformName(platform.getName()); | 
 |  |  |         this.broadcastAndLEed(platformJob,Constants.PlatformLedContent.CALLING.getInfo(), | 
 |  |  |                 Constants.PlatformBroadcastContent.CALLING.getInfo() | 
 |  |  |                 Constants.PlatformBroadcastContent.CALLING.getInfo()+ Constants.PlatformBroadcastContent.CALLING.getInfo() + Constants.PlatformBroadcastContent.CALLING.getInfo() | 
 |  |  |         ); | 
 |  |  |  | 
 |  |  |         platformJob.setPlatformWmsCode(platform.getCode()); | 
 |  |  | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); | 
 |  |  |         if(Objects.isNull(platformJob)){ | 
 |  |  |         if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |         if( !( Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey()) | 
 |  |  | 
 |  |  |         ); | 
 |  |  |  | 
 |  |  |         //公众号模板消息 | 
 |  |  |         if(Objects.nonNull(platformJob.getDriverId())) {  | 
 |  |  |         if(Objects.nonNull(platformJob.getDrivierPhone())) { | 
 |  |  |             this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobMove,platformJob); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); | 
 |  |  |         if(Objects.isNull(platformJob)){ | 
 |  |  |         if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |         ); | 
 |  |  |  | 
 |  |  |         //公众号模板消息 | 
 |  |  |         if(Objects.nonNull(platformJob.getDriverId())){ | 
 |  |  |         if(Objects.nonNull(platformJob.getDrivierPhone())){ | 
 |  |  |             this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobOverNum,platformJob); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); | 
 |  |  |         if(Objects.isNull(platformJob)){ | 
 |  |  |         if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |         if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){ | 
 |  |  | 
 |  |  |         ); | 
 |  |  |  | 
 |  |  |         //公众号模板消息 | 
 |  |  |         if(Objects.nonNull(platformJob.getDriverId())) { | 
 |  |  |         if(Objects.nonNull(platformJob.getDrivierPhone())) { | 
 |  |  |             this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobError,platformJob); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); | 
 |  |  |         if(Objects.isNull(platformJob)){ | 
 |  |  |         if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |         if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())){ | 
 |  |  | 
 |  |  |                 SmsConstants.platformJobContent.platformJobWorking,platform.getName(),null | 
 |  |  |         ); | 
 |  |  |         //公众号模板消息 | 
 |  |  |         if(Objects.nonNull(platformJob.getDriverId())) { | 
 |  |  |         if(Objects.nonNull(platformJob.getDrivierPhone())) { | 
 |  |  |             this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobWorking,platformJob); | 
 |  |  |         } | 
 |  |  |         //广播 led通知 | 
 |  |  | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); | 
 |  |  |         if(Objects.isNull(platformJob)){ | 
 |  |  |         if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |         if(! (Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.WORKING.getKey()) | 
 |  |  | 
 |  |  |         ); | 
 |  |  |  | 
 |  |  |         //公众号模板消息 | 
 |  |  |         if(Objects.nonNull(platformJob.getDriverId())) { | 
 |  |  |         if(Objects.nonNull(platformJob.getDrivierPhone())) { | 
 |  |  |             this.sendWxNotice(WxPlatConstants.platformJobContent.platformJobFinish,platformJob); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |            if(jobIds.size()>0){ | 
 |  |  |                List<PlatformJob> list = platformJobMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() | 
 |  |  |                        .selectAll(PlatformJob.class) | 
 |  |  |                        .eq(PlatformJob::getIsdeleted,Constants.ZERO) | 
 |  |  |                        .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey()) | 
 |  |  |                        .in(PlatformJob::getId,jobIds) | 
 |  |  |                ); | 
 |  |  | 
 |  |  |             throw new BusinessException(ResponseStatus.BAD_REQUEST); | 
 |  |  |         } | 
 |  |  |         PlatformJob platformJob = platformJobMapper.selectById(jobOperateDTO.getJobId()); | 
 |  |  |         if(Objects.isNull(platformJob)){ | 
 |  |  |         if(Objects.isNull(platformJob)||Constants.equalsInteger(platformJob.getIsdeleted(),Constants.ONE)){ | 
 |  |  |             throw new BusinessException(ResponseStatus.DATA_EMPTY); | 
 |  |  |         } | 
 |  |  |         if(!Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.DONE.getKey())){ | 
 |  |  | 
 |  |  |         PlatformJob platformJob =  platformJobMapper.selectOne(new QueryWrapper<PlatformJob>().lambda() | 
 |  |  |                 .eq(PlatformJob::getPlatformId,platformDevice.getPlatformId()) | 
 |  |  |                 .eq(PlatformJob::getCarCodeBack,jobOperateDTO.getCarCodeBack()) | 
 |  |  |                 .eq(PlatformJob::getIsdeleted,Constants.ZERO) | 
 |  |  |                 .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey()) | 
 |  |  |                 .last(" limit 1 ") | 
 |  |  |         ); | 
 |  |  | 
 |  |  |                 .select(" ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = "+Constants.PlatformJobLogType.WORKING.getKey()+" order by pl.CREATE_DATE desc  limit 1  ) as newStartDate  ") | 
 |  |  |                 .select(" ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = "+Constants.PlatformJobLogType.CALLED.getKey()+" order by pl.CREATE_DATE desc  limit 1  ) as newCallDate  ") | 
 |  |  |                 .select(" case when t.total_num is null  then ( select sum(pwd.IO_QTY) from platform_wms_detail pwd where pwd.JOB_ID = t.id  ) else t.total_num end ioQty ") | 
 |  |  |                 .select(" (select GROUP_CONCAT(distinct(tt.contract_num )) from platform_wms_detail tt where tt.isdeleted=0 and tt.contract_num is not null  and  tt.job_id=t.id )as wmsContractNum") | 
 |  |  |                 .selectAs(Platform::getName,PlatformJob::getPlatformName) | 
 |  |  |                 .selectAs(Platform::getWorkRate,PlatformJob::getWorkRate) | 
 |  |  |                 .selectAs(PlatformWmsJob::getCarrierName,PlatformJob::getCarrierName) | 
 |  |  | 
 |  |  |         ); | 
 |  |  |         //查询今日完成任务 | 
 |  |  |         platformOrderNumByDateResponse.setDoneNum( | 
 |  |  |                 platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda() | 
 |  |  |                 platformJobMapper.selectCount(new MPJLambdaWrapper<PlatformJob>() | 
 |  |  |                         .eq(PlatformJob::getIsdeleted,Constants.ZERO) | 
 |  |  |                         .like(PlatformJob::getDoneDate,queryDateStr) | 
 |  |  |                         .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey()) | 
 |  |  |                         .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey() | 
 |  |  |                                 ,Constants.PlatformJobStatus.AUTHED_LEAVE.getKey() | 
 |  |  |                                 ,Constants.PlatformJobStatus.LEAVED.getKey()) | 
 |  |  |                 ) | 
 |  |  |         ); | 
 |  |  |         return platformOrderNumByDateResponse; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public List<PlatformDataListResponse> platformWorkingDataList(PlatformDataListRequest param){ | 
 |  |  | 
 |  |  |             List<PlatformJob> calledList = platformJobList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())).collect(Collectors.toList()); | 
 |  |  |             largeScreenDataVO.setWaitWorkList(calledList); | 
 |  |  |         } | 
 |  |  | //        String u = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.BIGSCREEN_UUID); | 
 |  |  | //        if(StringUtils.isBlank(u)){ | 
 |  |  |         String u =  UUID.randomUUID().toString(); | 
 |  |  |         redisTemplate.opsForValue().set(Constants.RedisKeys.BIGSCREEN_UUID,u,3, TimeUnit.MINUTES); | 
 |  |  | //        } | 
 |  |  |         String url = Constants.getWxUrl(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.WX_REDIRECT_URL).getCode(),Constants.WxUrlParams.BISCREEN_CODE,u); | 
 |  |  |         largeScreenDataVO.setQrCode(url); | 
 |  |  |         largeScreenDataVO.setAttention(systemDictDataBiz.queryByCode(Constants.PLATFORM,Constants.SIGN_IN_ATTENTION).getCode()); |