|  |  | 
 |  |  | import com.doumee.core.haikang.model.param.respose.PageRegionInfoResponse; | 
 |  |  | import com.doumee.core.haikang.model.param.respose.PageSensorStatusResponse; | 
 |  |  | import com.doumee.core.haikang.service.HKService; | 
 |  |  | import com.doumee.core.model.ApiResponse; | 
 |  |  | import com.doumee.core.utils.Constants; | 
 |  |  | 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.reqeust.SavePlatformWarnEventDTO; | 
 |  |  | import com.doumee.dao.web.response.platformReport.*; | 
 |  |  | import com.doumee.service.business.impl.PlatformJobServiceImpl; | 
 |  |  | import com.doumee.service.business.third.BoardService; | 
 |  |  | import com.github.yulichang.wrapper.MPJLambdaWrapper; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  |  | 
 |  |  | import java.math.BigDecimal; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  | 
 |  |  |                 .in(PlatformJob::getStatus, Constants.PlatformJobStatus.DONE.getKey() | 
 |  |  |                         , Constants.PlatformJobStatus.AUTHED_LEAVE.getKey() | 
 |  |  |                         , Constants.PlatformJobStatus.LEAVED.getKey()) | 
 |  |  |                 .apply("to_days(t1.create_data) = to_days(now())") | 
 |  |  |                 .apply("to_days(t1.create_date) = to_days(now())") | 
 |  |  |                 .groupBy(PlatformGroup::getId) | 
 |  |  |         ); | 
 |  |  |         if(jobList!=null){ | 
 |  |  | 
 |  |  |         ); | 
 |  |  |         carWorkSituationVO.setPlatformLogList(platformLogList); | 
 |  |  |         return carWorkSituationVO; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public  List<PlatformWorkDataVO> platformWorkData(){ | 
 |  |  |  | 
 |  |  |         List<PlatformWorkDataVO> platformWorkDataVOList = new ArrayList<>(); | 
 |  |  |         List<Platform> platformList = platformMapper.selectJoinList(Platform.class, new MPJLambdaWrapper<Platform>() | 
 |  |  |                 .selectAll( Platform.class) | 
 |  |  |                 .eq(Platform::getIsdeleted, Constants.ZERO) | 
 |  |  |                 .orderByAsc(Platform::getSortnum) | 
 |  |  |         ); | 
 |  |  |         /** | 
 |  |  |          *    WAIT_CONFIRM(0, "待确认","待确认" ), | 
 |  |  |      *         WART_SIGN_IN(1, "待签到","待签到" ), | 
 |  |  |      *         WAIT_CALL(2, "已签到","已签到"), | 
 |  |  |      *         IN_WAIT(3, "入园等待","入园等待" ), | 
 |  |  |      *         CALLED(4, "已叫号","已叫号" ), | 
 |  |  |      *         WORKING(5, "作业中","作业中" ), | 
 |  |  |      *         DONE(6, "作业完成 ","作业完成" ), | 
 |  |  |      *         TRANSFERING(7, "转移中","转移中" ), | 
 |  |  |      *         EXCEPTION(8, "异常挂起","异常挂起" ), | 
 |  |  |      *         AUTHED_LEAVE(9, "已授权离园","已授权离园" ), | 
 |  |  |      *         LEAVED(10, "已离园 ","已离园 " ), | 
 |  |  |      *         OVER_NUMBER(11, "已过号","已过号" ), | 
 |  |  |      *         CANCEL(12, "已取消","已取消" ), | 
 |  |  |          */ | 
 |  |  |  | 
 |  |  |         if(platformList!=null && platformList.size()>0){ | 
 |  |  |             List<PlatformJob> jobList = platformJobMapper.selectJoinList(PlatformJob.class, new MPJLambdaWrapper<PlatformJob>() | 
 |  |  |                     .selectAll( PlatformJob.class) | 
 |  |  |                     .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 sum(ifnull(pl.IO_QTY , 0 ))   from platform_wms_detail pl  where   pl.job_id = t.id and pl.isdeleted=0 )",PlatformJob::getWorkNum) | 
 |  |  |                     .apply("to_days(t.create_date) = to_days(now())") | 
 |  |  |                     .eq(Platform::getIsdeleted, Constants.ZERO) | 
 |  |  |                     .in(PlatformJob ::getStatus,new Integer[]{Constants.PlatformJobStatus.WORKING.getKey(),Constants.PlatformJobStatus.CALLED.getKey() }) | 
 |  |  |                     .orderByDesc(PlatformJob::getStatus )); | 
 |  |  |             //月台状态:0=作业中;1=空闲中;2=作业超时;3=叫号 | 
 |  |  |             for(Platform model : platformList){ | 
 |  |  |                 PlatformWorkDataVO platformDurationVO = new PlatformWorkDataVO(); | 
 |  |  |                 platformDurationVO.setPlatformName(model.getName()); | 
 |  |  |                 platformDurationVO.setPlatformId(model.getId()); | 
 |  |  |                 platformDurationVO.setPlatformSort(model.getSortnum()); | 
 |  |  |                 PlatformJob job = getJobFromListById(model.getId(),jobList); | 
 |  |  |                 if(job != null){ | 
 |  |  |                     if(Constants.equalsInteger(job.getType(),Constants.ONE) || Constants.equalsInteger(job.getType(),Constants.THREE)){ | 
 |  |  |                         platformDurationVO.setWorkType(Constants.ONE);//如果是装货 | 
 |  |  |                     }else{ | 
 |  |  |                         platformDurationVO.setWorkType(Constants.ZERO);//如果是卸货 | 
 |  |  |                     } | 
 |  |  |                     Integer workMinute = job.getWorkNum().multiply(new BigDecimal(60)).divide(model.getWorkRate(),0,BigDecimal.ROUND_HALF_UP).intValue(); | 
 |  |  |                     Date overDate = DateUtil.getXMinuteAfterDate(job.getNewStartDate(),workMinute + model.getWorkTimeoutAlarmTime());//预计完成时间 | 
 |  |  |                     platformDurationVO.setFinishTimeStr(DateUtil.DateToStr(overDate,"HH:mm")); | 
 |  |  |  | 
 |  |  |                     platformDurationVO.setWorkNum(Constants.formatBigdecimal(job.getWorkNum()).intValue()); | 
 |  |  |                     platformDurationVO.setCarNo(job.getCarCodeFront());//车牌号 | 
 |  |  |                     if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.CALLED.getKey() )){ | 
 |  |  |                         platformDurationVO.setStatus(Constants.THREE); //叫号中 | 
 |  |  |                     }else{ | 
 |  |  |                         platformDurationVO.setStatus(Constants.ZERO); //作业中 | 
 |  |  |                         platformDurationVO.setWorkTime(PlatformJobServiceImpl.getWorkTime(job,platformLogMapper));//已工作时间 | 
 |  |  |                         if(overDate.getTime() < System.currentTimeMillis() ){ | 
 |  |  |                             model.setStatus(Constants.TWO); //作业已超时 | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 }else{ | 
 |  |  |                     platformDurationVO.setStatus(Constants.ONE);//空闲中 | 
 |  |  |                 } | 
 |  |  |                 platformWorkDataVOList.add(platformDurationVO); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return  platformWorkDataVOList; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private PlatformJob getJobFromListById(Integer id, List<PlatformJob> jobList) { | 
 |  |  |         if(jobList!=null){ | 
 |  |  |             for(PlatformJob job :jobList){ | 
 |  |  |                 if(Constants.equalsInteger(job.getPlatformId(),id)){ | 
 |  |  |                     return  job; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * | 
 |  |  |      * @param type 查询类型:0=入库;1=出库 | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     @Override | 
 |  |  |     public   List<WorkEfficiencyVO> workEfficiency(Integer type){ | 
 |  |  |         //作业类型 0自有车卸货 1自有车装货 2外协车卸货 3外协车装货 4市公司外协车卸货 | 
 |  |  |         List<WorkEfficiencyVO> workEfficiencyVOList = new ArrayList<>(); | 
 |  |  |         List<PlatformWmsDetail> jobList = platformWmsDetailMapper.selectJoinList(PlatformWmsDetail.class, new MPJLambdaWrapper<PlatformWmsDetail>() | 
 |  |  |                 .selectAll( PlatformWmsDetail.class) | 
 |  |  |                 .selectAs( PlatformJob::getDoneDate,PlatformWmsDetail::getDoneDate) | 
 |  |  |                 .leftJoin(PlatformJob.class,PlatformJob::getId,PlatformWmsDetail::getJobId) | 
 |  |  |                 .eq(PlatformWmsDetail::getIsdeleted, Constants.ZERO) | 
 |  |  |                 .eq(PlatformJob::getIsdeleted, Constants.ZERO) | 
 |  |  |                 .in(Constants.equalsInteger(type,Constants.ZERO),PlatformJob::getType,new Integer[]{0,2,4}) | 
 |  |  |                 .in(Constants.equalsInteger(type,Constants.ONE),PlatformJob::getType,new Integer[]{1,3}) | 
 |  |  |                 .in(PlatformJob::getStatus, Constants.PlatformJobStatus.DONE.getKey() | 
 |  |  |                         , Constants.PlatformJobStatus.AUTHED_LEAVE.getKey() | 
 |  |  |                         , Constants.PlatformJobStatus.LEAVED.getKey()) | 
 |  |  |                 .apply("to_days(t1.create_date) = to_days(now())") | 
 |  |  |         ); | 
 |  |  |         int curtotalNum = 0; | 
 |  |  |         Date today =  Utils.Date.getStart(new Date()); | 
 |  |  |         long curTime=0, lastTime=0; | 
 |  |  |         for (int i = 0; i < 8; i++) { | 
 |  |  |             lastTime = curTime;//上次的时间 | 
 |  |  |             int curHour = 8+(i*2); | 
 |  |  |             long time = curHour*60*60*1000 + today.getTime(); | 
 |  |  |             WorkEfficiencyVO workEfficiencyVO = new WorkEfficiencyVO(); | 
 |  |  |             workEfficiencyVO.setWorkTime(curHour+":00"); | 
 |  |  |             if(jobList!=null && jobList.size()>0){ | 
 |  |  |                 for(PlatformWmsDetail detail : jobList){ | 
 |  |  |                     if(detail.getDoneDate()!=null && detail.getDoneDate().getTime()<= time){ | 
 |  |  |                         //当前量 | 
 |  |  |                         if(detail.getDoneDate()!=null && detail.getDoneDate().getTime() > lastTime){ | 
 |  |  |                             //区间值 取实近2小时内的累计值 | 
 |  |  |                             workEfficiencyVO.setWorkNum(Constants.formatIntegerNum(workEfficiencyVO.getWorkNum())+Constants.formatBigdecimal(detail.getIoQty()).intValue()); | 
 |  |  |                         } | 
 |  |  |                         //累积量 | 
 |  |  |                         curtotalNum += Constants.formatBigdecimal(detail.getIoQty()).intValue(); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             workEfficiencyVO.setTotalWorkNum(curtotalNum);//累计值 | 
 |  |  |             workEfficiencyVOList.add(workEfficiencyVO); | 
 |  |  |         } | 
 |  |  |         return workEfficiencyVOList; | 
 |  |  |     } | 
 |  |  |     @Override | 
 |  |  |     public List<PlatformDurationVO> platformDuration(){ | 
 |  |  | 
 |  |  |                 .selectAll(PlatformJob.class) | 
 |  |  |                 .select("count(id)" ,PlatformJob::getCountum) | 
 |  |  |                 .eq(PlatformJob::getIsdeleted,Constants.ZERO) | 
 |  |  |                 .apply("to_days(create_data) = to_days(now())" ) | 
 |  |  |                 .apply("to_days(create_date) = to_days(now())" ) | 
 |  |  |                 .groupBy(PlatformJob::getStatus ) | 
 |  |  |         ); | 
 |  |  |         if(jobList!=null){ |