package com.doumee.service.business.impl.thrid; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.param.BaseListPageResponse; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.BaseListPageRequest; import com.doumee.core.haikang.model.param.request.*; import com.doumee.core.haikang.model.param.respose.*; import com.doumee.core.haikang.service.HKService; import com.doumee.core.model.ApiResponse; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; 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.join.VisitsJoinMapper; import com.doumee.dao.business.model.*; import com.doumee.dao.system.model.SystemDictData; 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.impl.VisitsServiceImpl; import com.doumee.service.business.third.BoardService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.checkerframework.checker.units.qual.C; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * TMS平台对接Service实现 * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Service @Slf4j public class BoardServiceImpl implements BoardService { @Autowired private PlatformLogMapper platformLogMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private PlatformWarnEventMapper platformWarnEventMapper; @Autowired private PlatformJobMapper platformJobMapper; @Autowired private PlatformWmsDetailMapper platformWmsDetailMapper; @Autowired private PlatformMapper platformMapper; @Autowired private VisitsJoinMapper visitsJoinMapper; @Autowired private RetentionMapper retentionMapper; @Autowired private PlatformGroupMapper platformGroupMapper; /** * 获取区域树形结构数据 * @return */ @Override public List getRegionTree(CarmeraListVO req){ List allList = new ArrayList<>(); boolean hasNext = true; int curTotal = 0; int curPage = 1; while (hasNext){ //分页遍历循环查询所有门禁设备数据 BaseListPageRequest param = new BaseListPageRequest(); param.setUserId("admin"); param.setPageSize(100); param.setPageNo(curPage); BaseResponse> response = HKService.pageRegions(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); } BaseListPageResponse r = response.getData(); curTotal += 100; if(curTotal >= r.getTotal()){ hasNext = false; } if(r.getList() == null || r.getList().size()==0){ hasNext =false; }else{ allList.addAll(r.getList()); } curPage++; } if(Constants.equalsInteger(req.getWithCameras(),Constants.ONE)){ initReginCameralList(allList,req.getName());//获取全部监控点数据 } List data = new RegionTreeVO(allList).buildTree(); return data; } private void initReginCameralList(List allList,String name) { CarmeraListVO re = new CarmeraListVO(); re.setName(name); List carmeraListVOList = cameraList(re); if(carmeraListVOList!=null && carmeraListVOList.size()>0){ for(PageRegionInfoResponse p : allList){ for(CarmeraListVO c : carmeraListVOList){ if(StringUtils.equals(p.getIndexCode(),c.getReginCode()) && (StringUtils.contains(c.getName(),name) ||StringUtils.isBlank(name))){ if(p.getCarmeraList()==null){ p.setCarmeraList(new ArrayList<>()); } p.getCarmeraList().add(c); } } } } } /** * 获取区域树形结构数据 * @return */ @Override public List regionList(CarmeraListVO req){ List allList = new ArrayList<>(); boolean hasNext = true; int curTotal = 0; int curPage = 1; while (hasNext){ //分页遍历循环查询所有门禁设备数据 BaseListPageRequest param = new BaseListPageRequest(); param.setUserId("admin"); param.setPageSize(100); param.setPageNo(curPage); BaseResponse> response = HKService.pageRegions(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); } BaseListPageResponse r = response.getData(); curTotal += 100; if(curTotal >= r.getTotal()){ hasNext = false; } if(r.getList() == null || r.getList().size()==0){ hasNext =false; }else{ allList.addAll(r.getList()); } curPage++; } if(Constants.equalsInteger(req.getWithCameras(),Constants.ONE)){ initReginCameralList(allList,req.getName());//获取全部监控点数据 } return allList; } @Override public List cameraList(CarmeraListVO req){ List allList = new ArrayList<>(); boolean hasNext = true; int curTotal = 0; int curPage = 1; while (hasNext){ //分页遍历循环查询所有门禁设备数据 BaseListPageRequest param = new BaseListPageRequest(); param.setUserId("admin"); param.setPageSize(100); param.setPageNo(curPage); BaseResponse> response = HKService.pageCameras(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); } BaseListPageResponse r = response.getData(); curTotal += 100; if(curTotal >= r.getTotal()){ hasNext = false; } if(r.getList() == null || r.getList().size()==0){ hasNext =false; }else{ allList.addAll(r.getList()); } curPage++; } List data = new ArrayList<>(); for(PageCameraInfoResponse p : allList){ if(StringUtils.isBlank(req.getName()) ||StringUtils.contains(p.getCameraName(),req.getName())){ CarmeraListVO t = new CarmeraListVO(); t.setIndexCode(p.getCameraIndexCode()); t.setReginCode(p.getRegionIndexCode()); t.setName(p.getCameraName()); t.setStatus(p.getStatus()); t.setStatusName(p.getStatusName()); data.add(t); } } return data; } @Override public List fireChannelList(){ List allList = new ArrayList<>(); boolean hasNext = true; int curTotal = 0; int curPage = 1; while (hasNext){ //分页遍历循环查询所有门禁设备数据 BaseListPageRequest param = new BaseListPageRequest(); param.setUserId("admin"); param.setPageSize(100); param.setPageNo(curPage); BaseResponse> response = HKService.pageFireChannel(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); } BaseListPageResponse r = response.getData(); curTotal += 100; if(curTotal >= r.getTotal()){ hasNext = false; } if(r.getList() == null || r.getList().size()==0){ hasNext =false; }else{ allList.addAll(r.getList()); } curPage++; } return allList; } @Override public List sensorStatusList(){ List allList = new ArrayList<>(); boolean hasNext = true; int curTotal = 0; int curPage = 1; while (hasNext){ //分页遍历循环查询所有门禁设备数据 SensorStatusListRequest param = new SensorStatusListRequest(); param.setPageSize(100); param.setPageNo(curPage); BaseResponse> response = HKService.pageSensorStatus(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); } BaseListPageResponse r = response.getData(); curTotal += 100; if(curTotal >= r.getTotal()){ hasNext = false; } if(r.getList() == null || r.getList().size()==0){ hasNext =false; }else{ allList.addAll(r.getList()); } curPage++; } return allList; } @Override public List platformGroupFinish(){ List data = new ArrayList<>(); List groups = platformGroupMapper.selectJoinList(PlatformGroup.class, new MPJLambdaWrapper() .select("(select sum(a.TOTAL_NUM) from platform_job a where a.PLATFORM_GROUP_ID=t.id and a.isdeleted=0 and a.status in(6,9,10) and to_days(a.done_date) = to_days(now()))",PlatformGroup::getOrtherTotalNum) .selectAll(PlatformGroup.class) .eq(PlatformGroup::getIsdeleted,Constants.ZERO) ); if(groups!=null && groups.size()>0){ List jobList = platformWmsDetailMapper.selectJoinList(PlatformWmsDetail.class, new MPJLambdaWrapper() .selectSum( PlatformWmsDetail::getIoQty) .selectAs(PlatformGroup::getId, PlatformWmsDetail::getGroupId) .leftJoin(PlatformJob.class,PlatformJob::getId,PlatformWmsDetail::getJobId) .eq(PlatformWmsDetail::getIsdeleted, Constants.ZERO) .eq(PlatformJob::getIsdeleted, Constants.ZERO) .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())") .groupBy(PlatformJob::getPlatformGroupId) ); for(PlatformGroup d : groups){ PlatformGroupFinishVO t = new PlatformGroupFinishVO(); if(jobList!=null){ for(PlatformWmsDetail dd : jobList){ if(Constants.equalsInteger(dd.getGroupId(),d.getId())){ d.setTotalNum(dd.getIoQty()); } } } t.setFinishData(Constants.formatBigdecimal(d.getTotalNum()).intValue()+Constants.formatBigdecimal(d.getOrtherTotalNum()).intValue()); t.setPlatformGroupName(d.getName()); data.add(t); } } return data; } @Override public CarWorkSituationVO carWorkSituation(int limit){ CarWorkSituationVO carWorkSituationVO = new CarWorkSituationVO(); List platformLogList = platformLogMapper.selectList(new QueryWrapper().lambda() .orderByDesc(PlatformLog::getCreateDate) .last(" limit "+limit) ); carWorkSituationVO.setPlatformLogList(platformLogList); return carWorkSituationVO; } @Override public List securityDeviceData(){ List list = new ArrayList<>(); SecureDevStatusTotalRequest request =new SecureDevStatusTotalRequest(); request.setIncludeBool(""); request.setRegionIds(new String[]{}); BaseResponse> result = HKService.getSecureDevStatusList(request) ; if(result!=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){ List rlist = result.getData(); for(SecureDevStatusListResponse r :rlist){ SecurityDeviceDataVO data = new SecurityDeviceDataVO(); data.setDeviceType(r.getDevTypeName()); data.setOnlineNum(r.getOnlineCount()); data.setOfflineDeviceNum(r.getOfflineCount()); data.setTotalNum(data.getOnlineNum() + data.getOfflineDeviceNum() ); list.add(data); } } /* Random random = new Random(); for (int i = 1; i <= 3; i++) { SecurityDeviceDataVO data = new SecurityDeviceDataVO(); data.setDeviceType("设备类型_"+i); data.setOnlineNum(random.nextInt(10)); data.setOfflineDeviceNum(random.nextInt(10)); data.setTotalNum(data.getOnlineNum() + data.getOfflineDeviceNum() ); list.add(data); }*/ return list; } @Override public WaningEventDataVO warningEventData(Integer type){ WaningEventDataVO lastResult = new WaningEventDataVO(); List list = new ArrayList<>(); RuleEventSearchRequest request = new RuleEventSearchRequest(); request.setPageNo(1); request.setPageSize(10); request.setFiledOptions(new ArrayList<>()); request.setSorts(new ArrayList<>()); RuleEventFiledOptionsRequest file = new RuleEventFiledOptionsRequest(); file.setFieldName("event_type"); file.setFieldValue("131588");//安防告警 file.setType("in"); request.getFiledOptions().add(file); SortRequest sort = new SortRequest(); sort.setSortField("happen_time"); sort.setSortType("desc"); request.getSorts().add(sort); BaseResponse> result = HKService.ruleEventSearch(request); if(result!=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){ List rlist = result.getData().getList(); lastResult.setTotal(result.getData().getTotal()); if(rlist!=null){ String privateIp =systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.EVENT_FILES_PRIVATE_DOMAIN).getCode(); String publicIp =systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.EVENT_FILES_PUBLIC_DOMAIN).getCode(); for(RuleEventSearchDataResponse r :rlist){ WaningEventDataListVO data = new WaningEventDataListVO(); data.setAddr(r.getSrc_name()); data.setImg(r.getImage_url()); if(data.getImg()!=null){ data.setImg(data.getImg().replace(privateIp,publicIp)); } data.setTitle(r.getEvent_type_name()); data.setCreateDate(DateUtil.getPlusTime(DateUtil.getISO8601DateByStr(r.getHappen_time()))); // data.setContent(r.get); list.add(data); } } } lastResult.setList(list); return lastResult; } @Override public String getCarmeraPreviemUrl(CarmeraListVO param){ CameraPreviewURLsRequest request = new CameraPreviewURLsRequest(); request.setCameraIndexCode(param.getIndexCode()); BaseResponse result = HKService.cameraPreviewURLs(request); if(result!=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){ return result.getData().getUrl(); } return null; } @Override public VisitDataVO visitSecurityData(){ //待访问、已登记、已离开 VisitDataVO result = new VisitDataVO(); result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper() .eq(Visits::getIsdeleted,Constants.ZERO) .in(Visits::getStatus,Constants.VisitStatus.pass,Constants.VisitStatus.xfSuccess )));//待访问 result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper() .eq(Visits::getIsdeleted,Constants.ZERO) .in(Visits::getStatus,Constants.VisitStatus.signout,Constants.VisitStatus.signin )));//已登记 result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper() .eq(Visits::getIsdeleted,Constants.ZERO) .in(Visits::getStatus,Constants.VisitStatus.signout )));//已签离 PageWrap pageWrap = new PageWrap<>(); pageWrap.setCapacity(10); pageWrap.setPage(1); pageWrap.setModel(new Visits()); pageWrap.getModel().setLevelStatus(Constants.ZERO); pageWrap.getModel().setStatus(Constants.TWO); PageData visitsPageData = VisitsServiceImpl.retentionPageBiz(pageWrap,visitsJoinMapper,systemDictDataBiz); List list = new ArrayList<>(); if(visitsPageData !=null && visitsPageData.getRecords() !=null && visitsPageData.getRecords().size()>0){ for (Visits model : visitsPageData.getRecords()) { VisitRetentionDataVO data = new VisitRetentionDataVO(); data.setName(model.getName()); data.setCompanyName(model.getCompanyName()); data.setTimeOutMinute(Constants.formatIntegerNum(model.getTimeOut())); list.add(data); } result.setRetentionNum(visitsPageData.getTotal()); } result.setVisitRetentionDataList(list);//访客滞留数据集合 return result; } @Override public SecurityBoardVO centerSecurityData(){ SecurityBoardVO data = new SecurityBoardVO(); getParkingCarsNum(data);//获取车位数据 Random random = new Random(); List retentionList = retentionMapper.selectJoinList(Retention.class, new MPJLambdaWrapper() .selectAll(Retention.class) .selectAs(Company::getType,Retention::getCompanyType) .leftJoin(Company.class,Company::getId,Retention::getCompanyId) ); //今日在园人数 data.setInParkTotal( (int) retentionList.stream().filter(i->!Constants.equalsInteger(i.getType(),Constants.THREE)).count() ); //在园长期相关方人数 data.setInternalTotal( (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.TWO) && Constants.equalsInteger(i.getCompanyType(),Constants.ZERO)).count() ); //在园访客数量 data.setVisitTotal( (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)&&Objects.isNull(i.getCompanyType())).count() ); //在园车辆 data.setInternalCarTotal( (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)).count() ); //在园相关方车辆 data.setRelatedCarTotal( (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE) &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.relation)).count() ); //内部车辆 data.setInternalCarTotal( (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE) &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.internal)).count() ); //来访车辆 data.setVisitCarTotal( (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE) &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.visitor)).count() ); //自由物流车数量 data.setVisitCarTotal( (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE) &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.selfTruck)).count() ); //市公司卸货车数量 data.setInternalJobCarTotal( (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE) &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.cityComTruck)).count() ); //外协车数量 data.setRelatedJobCarTotal( (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE) &&Constants.equalsInteger(i.getCarType(),Constants.RetentionCarType.outTruck)).count() ); return data; } private void getParkingCarsNum(SecurityBoardVO data) { try { BaseResponse response = HKService.getParkingStatistics(); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) || response.getData()==null ||response.getData().getTodayParkingDataDto() == null){ return; } data.setParkingLotTotal(Constants.formatIntegerNum(response.getData().getTodayParkingDataDto().getTotalPlace()));//总车位 data.setFreeParkingLot(Constants.formatIntegerNum(response.getData().getTodayParkingDataDto().getLeftPlace()));//剩余车位 data.setParkingUseRate(Constants.formatBigdecimal(response.getData().getTodayParkingDataDto().getUseRate()));//车位使用率 }catch (Exception e){ } } @Override public List platformWorkData(){ List platformWorkDataVOList = new ArrayList<>(); List platformList = platformMapper.selectJoinList(Platform.class, new MPJLambdaWrapper() .selectAll( Platform.class) .eq(Platform::getIsdeleted, Constants.ZERO) .orderByAsc(Platform::getSortnum) ); if(platformList!=null && platformList.size()>0){ List jobList = platformJobMapper.selectJoinList(PlatformJob.class, new MPJLambdaWrapper() .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 = Constants.formatBigdecimal(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 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 workEfficiency(Integer type){ //作业类型 0自有车卸货 1自有车装货 2外协车卸货 3外协车装货 4市公司外协车卸货 List workEfficiencyVOList = new ArrayList<>(); List jobList = platformJobMapper.selectJoinList(PlatformJob.class, new MPJLambdaWrapper() .selectAll( PlatformJob.class) .select("(select sum(ifnull(a.io_qty,0)) from platform_wms_detail a where a.isdeleted=0 and a.job_id =t.id )", PlatformJob::getIoQty) .apply("to_days(t.create_date) = to_days(now())") .eq(Platform::getIsdeleted, Constants.ZERO) .in(PlatformJob::getStatus, Constants.PlatformJobStatus.DONE.getKey() , Constants.PlatformJobStatus.AUTHED_LEAVE.getKey() , Constants.PlatformJobStatus.LEAVED.getKey()) .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}) ); if(jobList==null || jobList.size()==0){ return workEfficiencyVOList; } /* List jobList = platformWmsDetailMapper.selectJoinList(PlatformWmsDetail.class, new MPJLambdaWrapper() .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); curTime = curHour*60*60*1000 + today.getTime(); WorkEfficiencyVO workEfficiencyVO = new WorkEfficiencyVO(); workEfficiencyVO.setWorkTime(curHour+":00"); workEfficiencyVO.setTotalWorkNum(0); workEfficiencyVO.setWorkNum(0); if(jobList!=null && jobList.size()>0){ for(PlatformJob detail : jobList){ if(detail.getDoneDate()!=null && detail.getDoneDate().getTime()<= curTime){ //当前量 if(detail.getDoneDate()!=null && detail.getDoneDate().getTime() > lastTime){ //区间值 取实近2小时内的累计值 workEfficiencyVO.setWorkNum(Constants.formatIntegerNum(workEfficiencyVO.getWorkNum())+Constants.formatBigdecimal(detail.getIoQty()).intValue() +Constants.formatBigdecimal(detail.getTotalNum()).intValue()); //累积量 } } } curtotalNum += Constants.formatIntegerNum(workEfficiencyVO.getWorkNum()) ; } workEfficiencyVO.setTotalWorkNum(curtotalNum);//累计值 workEfficiencyVOList.add(workEfficiencyVO); } return workEfficiencyVOList; } @Override public List platformDuration(){ List platformDurationList = new ArrayList<>(); List jobList = platformMapper.selectJoinList(Platform.class, new MPJLambdaWrapper() .selectAll( Platform.class) .select(" (select ROUND( SUM(ifnull(pl.PARAM3,0)/60 ) , 2 ) from platform_log pl where pl.remark = t.id and to_days(pl.CREATE_DATE) =to_days(now()))",Platform::getWorkCountTime) .eq(Platform::getIsdeleted, Constants.ZERO) ); if(jobList!=null){ //按工作时长累计倒序排序 Collections.sort(jobList, new Comparator() { @Override public int compare(Platform o1, Platform o2) { return Constants.formatBigdecimal(o2.getWorkCountTime()).intValue() - Constants.formatBigdecimal(o1.getWorkCountTime()).intValue(); } }); for(Platform model : jobList){ PlatformDurationVO data = new PlatformDurationVO(); data.setPlatformId(model.getId()); data.setPlatformName(model.getName()); data.setWorkTotalTime(Constants.formatBigdecimal(model.getWorkCountTime()).intValue()); platformDurationList.add(data); } } return platformDurationList; } @Override public List warningList(int limit){ List platformLogList = platformWarnEventMapper.selectList(new QueryWrapper().lambda() .eq(PlatformWarnEvent::getIsdeleted,Constants.ZERO) .orderByDesc(PlatformWarnEvent::getCreateDate) .last(" limit "+limit) ); return platformLogList; } @Override public OnSitDispatchBoardVO getCnddCenterData(){ OnSitDispatchBoardVO data = new OnSitDispatchBoardVO(); //月台总数 List list = platformMapper.selectJoinList(Platform.class,new MPJLambdaWrapper() .selectAll(Platform.class) .select(" ( select count(1) from platform_job pj where t.id = pj.PLATFORM_ID and pj.STATUS = "+Constants.PlatformJobStatus.WORKING.getKey()+" ) as workStatus ") .eq(Platform::getIsdeleted,Constants.ZERO) ); data.setPlatformTotal(list==null?0:list.size()); //空闲月台数量 data.setFreePlatform( list.stream().filter(i->Constants.formatIntegerNum(i.getWorkStatus())<=Constants.ZERO).collect(Collectors.toList()).size() ); //查询今日月台个状态作业数量 List jobList = platformJobMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper() .selectAll(PlatformJob.class) .select("count(id)" ,PlatformJob::getCountum) .eq(PlatformJob::getIsdeleted,Constants.ZERO) .apply("to_days(create_date) = to_days(now())" ) .groupBy(PlatformJob::getStatus ) ); if(jobList!=null){ //-------------TODO----------【看板】爱确认需求-------------- // * 0待确认 1待签到 2等待叫号 3入园等待 4已叫号 5作业中 6作业完成 7转移中 8异常挂起 9已授权离园 10已离园 11 已过号 12已取消 for(PlatformJob model : jobList){ //待确认 (预约车) if( Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.WAIT_CONFIRM.getKey())){ data.setReservationCar(data.getReservationCar()+Constants.formatIntegerNum(model.getCountum())); } //待签到(预约车) if( Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){ data.setReservationCar(data.getReservationCar()+Constants.formatIntegerNum(model.getCountum())); } //等待叫号(预约车、签到数、排队车) if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey())){ data.setSignedNum(data.getSignedNum()+Constants.formatIntegerNum(model.getCountum())); data.setReservationCar(data.getReservationCar()+Constants.formatIntegerNum(model.getCountum())); data.setLineUpCar(data.getLineUpCar()+Constants.formatIntegerNum(model.getCountum())); } //入园等待(预约车、签到数) if( Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.IN_WAIT.getKey())){ data.setSignedNum(data.getSignedNum()+Constants.formatIntegerNum(model.getCountum())); data.setReservationCar(data.getReservationCar()+Constants.formatIntegerNum(model.getCountum())); } //已叫号(预约车、签到数、已叫号) if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.CALLED.getKey()) ){ data.setSignedNum(data.getSignedNum()+Constants.formatIntegerNum(model.getCountum())); data.setReservationCar(data.getReservationCar()+Constants.formatIntegerNum(model.getCountum())); data.setCalledNum(data.getCalledNum()+Constants.formatIntegerNum(model.getCountum())); } // 作业车辆(预约车、签到数、已叫号、作业车) if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){ data.setSignedNum(data.getSignedNum()+Constants.formatIntegerNum(model.getCountum())); data.setReservationCar(data.getReservationCar()+Constants.formatIntegerNum(model.getCountum())); data.setCalledNum(data.getCalledNum()+Constants.formatIntegerNum(model.getCountum())); data.setWorkedNum(data.getWorkedNum()+Constants.formatIntegerNum(model.getCountum())); } // 作业完成(预约车、签到数、已叫号、作业车、已完成) if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.DONE.getKey())){ data.setSignedNum(data.getSignedNum()+Constants.formatIntegerNum(model.getCountum())); data.setReservationCar(data.getReservationCar()+Constants.formatIntegerNum(model.getCountum())); data.setCalledNum(data.getCalledNum()+Constants.formatIntegerNum(model.getCountum())); data.setWorkedNum(data.getWorkedNum()+Constants.formatIntegerNum(model.getCountum())); data.setDoneNum(data.getDoneNum()+Constants.formatIntegerNum(model.getCountum())); } // 转移中(预约车、签到数、排队车) if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.TRANSFERING.getKey())){ data.setSignedNum(data.getSignedNum()+Constants.formatIntegerNum(model.getCountum())); data.setReservationCar(data.getReservationCar()+Constants.formatIntegerNum(model.getCountum())); data.setLineUpCar(data.getLineUpCar()+Constants.formatIntegerNum(model.getCountum())); } // 已授权离园(预约车、签到数、已叫号、作业车、已完成) if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())){ data.setSignedNum(data.getSignedNum()+Constants.formatIntegerNum(model.getCountum())); data.setReservationCar(data.getReservationCar()+Constants.formatIntegerNum(model.getCountum())); data.setCalledNum(data.getCalledNum()+Constants.formatIntegerNum(model.getCountum())); data.setWorkedNum(data.getWorkedNum()+Constants.formatIntegerNum(model.getCountum())); data.setDoneNum(data.getDoneNum()+Constants.formatIntegerNum(model.getCountum())); } // 已离园 if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.LEAVED.getKey())){ data.setWorkingCar(data.getWorkingCar()+Constants.formatIntegerNum(model.getCountum())); } // 已过号(预约车、签到数、排队车) if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.OVER_NUMBER.getKey())){ data.setSignedNum(data.getSignedNum()+Constants.formatIntegerNum(model.getCountum())); data.setReservationCar(data.getReservationCar()+Constants.formatIntegerNum(model.getCountum())); data.setLineUpCar(data.getLineUpCar()+Constants.formatIntegerNum(model.getCountum())); } // 已取消(预约车) if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.CANCEL.getKey())){ data.setReservationCar(data.getReservationCar()+Constants.formatIntegerNum(model.getCountum())); } } } return data; } }