| 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 PlatformWaterGasMapper platformWaterGasMapper; | 
|     @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<PageRegionInfoResponse> getRegionTree(CarmeraListVO req){ | 
|         List<PageRegionInfoResponse> 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<BaseListPageResponse<PageRegionInfoResponse>> response = HKService.pageRegions(param); | 
|             if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ | 
|                 throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); | 
|             } | 
|             BaseListPageResponse<PageRegionInfoResponse> 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<PageRegionInfoResponse> data = new RegionTreeVO(allList).buildTree(); | 
|         return  data; | 
|     } | 
|     private void initReginCameralList(List<PageRegionInfoResponse> allList,String name) { | 
|         CarmeraListVO re = new CarmeraListVO(); | 
|         re.setName(name); | 
|         List<CarmeraListVO> 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<PageRegionInfoResponse> regionList(CarmeraListVO req){ | 
|         List<PageRegionInfoResponse> 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<BaseListPageResponse<PageRegionInfoResponse>> response = HKService.pageRegions(param); | 
|             if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ | 
|                 throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); | 
|             } | 
|             BaseListPageResponse<PageRegionInfoResponse> 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<CarmeraListVO> cameraList(CarmeraListVO req){ | 
|         List<PageCameraInfoResponse> 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<BaseListPageResponse<PageCameraInfoResponse>> response = HKService.pageCameras(param); | 
|             if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ | 
|                 throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); | 
|             } | 
|             BaseListPageResponse<PageCameraInfoResponse> 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<CarmeraListVO> 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<PageFireChannelInfoResponse> fireChannelList(){ | 
|         List<PageFireChannelInfoResponse> 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<BaseListPageResponse<PageFireChannelInfoResponse>> response = HKService.pageFireChannel(param); | 
|             if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ | 
|                 throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); | 
|             } | 
|             BaseListPageResponse<PageFireChannelInfoResponse> 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<PageSensorStatusResponse> sensorStatusList(){ | 
|         List<PageSensorStatusResponse> 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<BaseListPageResponse<PageSensorStatusResponse>> response = HKService.pageSensorStatus(param); | 
|             if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ | 
|                 throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); | 
|             } | 
|             BaseListPageResponse<PageSensorStatusResponse> 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<PlatformGroupFinishVO> platformGroupFinish(){ | 
|         List<PlatformGroupFinishVO> data = new ArrayList<>(); | 
|         List<PlatformGroup> groups = platformGroupMapper.selectJoinList(PlatformGroup.class, new MPJLambdaWrapper<PlatformGroup>() | 
|                 .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<PlatformWmsDetail> jobList = platformWmsDetailMapper.selectJoinList(PlatformWmsDetail.class, new MPJLambdaWrapper<PlatformWmsDetail>() | 
|                     .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<PlatformLog> platformLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>().lambda() | 
|                 .orderByDesc(PlatformLog::getCreateDate) | 
|                 .last(" limit "+limit) | 
|         ); | 
|         carWorkSituationVO.setPlatformLogList(platformLogList); | 
|         return carWorkSituationVO; | 
|     } | 
|     @Override | 
|     public  List<SecurityDeviceDataVO> securityDeviceData(){ | 
|         List<SecurityDeviceDataVO> list = new ArrayList<>(); | 
|         SecureDevStatusTotalRequest request =new SecureDevStatusTotalRequest(); | 
|         request.setIncludeBool(""); | 
|         request.setRegionIds(new String[]{}); | 
|         BaseResponse<List<SecureDevStatusListResponse>> result = HKService.getSecureDevStatusList(request) ; | 
|         if(result!=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){ | 
|             List<SecureDevStatusListResponse> 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<WaningEventDataListVO> 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<BaseListPageResponse< RuleEventSearchDataResponse>> result = HKService.ruleEventSearch(request); | 
|         if(result!=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE) && result.getData()!=null){ | 
|             List<RuleEventSearchDataResponse> 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<CamerasPreviewURLsResponse> 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   List<EnergyDataVO>  loadEnergyCurve(){ | 
|         List<EnergyDataVO> loadCurveList = new ArrayList<>(); | 
|         try { | 
|             BaseResponse<List<EnergyTodayLoadDataResponse>>  response = HKService.energyTodayLoadData(); | 
|             if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null ){ | 
|                 for (EnergyTodayLoadDataResponse model :response.getData()) { | 
|                     EnergyDataVO data = new EnergyDataVO(); | 
|                     data.setTimeData(model.getName()); | 
|                     data.setEnergy(new BigDecimal(StringUtils.defaultString(model.getValue(),"0"))); | 
|                     loadCurveList.add(data); | 
|                 } | 
|             } | 
|         }catch (Exception e){ | 
|             e.printStackTrace(); | 
|         } | 
|         return loadCurveList; | 
|     } | 
|     @Override | 
|     public     List<OilDataVO> energyLastMonthOilSort(){ | 
|         List<OilDataVO> oilDataVOList = new ArrayList<>(); | 
|         //上月油耗 | 
|        List<PlatformWaterGas> list =  platformWaterGasMapper.selectList(new QueryWrapper<PlatformWaterGas>().lambda() | 
|                 .eq(PlatformWaterGas::getIsdeleted,Constants.ZERO) | 
|                 .eq(PlatformWaterGas::getType,Constants.TWO) | 
|                 .apply("DATE_FORMAT(time_info, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m')") | 
|                 .orderByDesc(PlatformWaterGas::getNum) | 
|                 .last("limit 30" ) | 
|         ); | 
|         for (PlatformWaterGas model :list) { | 
|             OilDataVO oilDataVO = new OilDataVO(); | 
|             oilDataVO.setCarNo(model.getCarCode()); | 
|             oilDataVO.setQuantity(model.getNum()); | 
|             oilDataVOList.add(oilDataVO); | 
|         } | 
|         return oilDataVOList; | 
|     } | 
|   | 
|     /** | 
|      * 用电总能耗同比、环比和区域用电量集合 | 
|      * @return | 
|      */ | 
|     @Override | 
|     public  EnergyBoardVO centerEnergyData(){ | 
|         EnergyBoardVO data = new EnergyBoardVO(); | 
|         Random random = new Random(); | 
|        PlatformWaterGas smoke=  platformWaterGasMapper.selectOne(new QueryWrapper<PlatformWaterGas>() | 
|                  .select("sum(num) as num") | 
|                 .lambda() | 
|                 .eq(PlatformWaterGas::getIsdeleted,Constants.ZERO) | 
|                 .eq(PlatformWaterGas::getType,Constants.THREE) | 
|                 .apply("year(time_info) = year(now())") | 
|                 .last("limit 1 " )); | 
|   | 
|         data.setSmokeBoxTotal(0); | 
|         if(smoke!=null){ | 
|             data.setSmokeBoxTotal(Constants.formatBigdecimal(smoke.getNum()).intValue());//当年烟箱数 | 
|         } | 
|         BigDecimal carbonGas = new BigDecimal(0);//本月用气 | 
|         BigDecimal carbonWater = new BigDecimal(0);//本月用水 | 
|         BigDecimal carbonElec = new BigDecimal(0);//用电 | 
|   | 
|         data.setTodayElectricity(getDefaultData());//今日用电 | 
|         data.setElectricityQuantity(getDefaultData());//上月用电 | 
|         data.setWaterQuantity(getDefaultData());//上月用水 | 
|         data.setGasQuantity(getDefaultData());//上月用气 | 
|         data.setMonthElectricity(getDefaultData());//本月用电 | 
|         data.setYesterdayElectricity(getDefaultData());//昨日用电 | 
|         getMonthElectricityData(data.getMonthElectricity());//通过安防平获取本月用电量数据 | 
|         carbonElec = new BigDecimal(StringUtils.defaultString(data.getMonthElectricity().getTotal(), "0")); | 
|         getLastMonthElectricityData(data.getElectricityQuantity());//通过安防平获取上月用电量数据 | 
|         getCurrentDateElectircityData(data.getTodayElectricity(),0);//通过安防平获取今日用电量数据 | 
|         getCurrentDateElectircityData(data.getYesterdayElectricity(),-1);//通过安防平获取昨日用电量数据 | 
|         String firstDate = DateUtil.getFirstDayCurrentMonth() +" 00:00:00"; | 
|         Date month0 = DateUtil.getDateFromString(firstDate); | 
|         Date month1 = DateUtil.increaseMonth(month0,-1);//上月 | 
|         Date month2 = DateUtil.increaseMonth(month0,-2);//上上月 | 
|         Date month3 = DateUtil.increaseMonth(month0,-13);//去年同月 | 
|   | 
|         List<PlatformWaterGas> list =  platformWaterGasMapper.selectList(new QueryWrapper<PlatformWaterGas>() | 
|                 .lambda() | 
|                 .eq(PlatformWaterGas::getIsdeleted,Constants.ZERO) | 
|                 .in(PlatformWaterGas::getType,Constants.ZERO,Constants.ONE) | 
|                 .in(PlatformWaterGas::getTimeInfo,month0,month1,month3,month2) | 
|         ); | 
|   | 
|         if(list!=null){ | 
|             //类型 0用水 1用气 2用油 | 
|             for(PlatformWaterGas model : list){ | 
|                 if(Constants.equalsInteger(model.getType(),Constants.ONE)){ | 
|                     if(model.getTimeInfo().getTime() == month0.getTime()){ | 
|                         carbonGas = Constants.formatBigdecimal(model.getNum()); | 
|                     } | 
|                     if(model.getTimeInfo().getTime() == month1.getTime()){ | 
|                         data.getGasQuantity().setTotalNum(Constants.formatBigdecimal(model.getNum()) ); | 
|                         data.getGasQuantity().setTotal(Constants.formatBigdecimal(model.getNum())+""); | 
|                     } | 
|                     if(model.getTimeInfo().getTime() == month2.getTime()){ | 
|                         data.getGasQuantity().setRingNum(Constants.formatBigdecimal(model.getNum()) ); | 
|                     } | 
|                     if(model.getTimeInfo().getTime() == month3.getTime()){ | 
|                         data.getGasQuantity().setSameNum(Constants.formatBigdecimal(model.getNum()) ); | 
|                     } | 
|   | 
|                 }else if(Constants.equalsInteger(model.getType(),Constants.ZERO)){ | 
|                     if(model.getTimeInfo().getTime() == month0.getTime()){ | 
|                         carbonWater = Constants.formatBigdecimal(model.getNum()); | 
|                     } | 
|                     if(model.getTimeInfo().getTime() == month1.getTime()){ | 
|                         data.getWaterQuantity().setTotalNum(Constants.formatBigdecimal(model.getNum()) ); | 
|                         data.getWaterQuantity().setTotal(Constants.formatBigdecimal(model.getNum())+""); | 
|                     } | 
|                     if(model.getTimeInfo().getTime() == month2.getTime()){ | 
|                         data.getWaterQuantity().setRingNum(Constants.formatBigdecimal(model.getNum()) ); | 
|                     } | 
|                     if(model.getTimeInfo().getTime() == month3.getTime()){ | 
|                         data.getWaterQuantity().setSameNum(Constants.formatBigdecimal(model.getNum()) ); | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         if( data.getGasQuantity().getTotalNum().compareTo(new BigDecimal(0)) !=0){ | 
|             //计算用气同比环比 | 
|             data.getGasQuantity().setSameRate(Constants.formatBigdecimal4Float(data.getGasQuantity().getSameNum().divide(data.getGasQuantity().getTotalNum(),4,BigDecimal.ROUND_HALF_UP)).doubleValue()*100 +""); | 
|             data.getGasQuantity().setRingRate(Constants.formatBigdecimal4Float(data.getGasQuantity().getRingNum().divide(data.getGasQuantity().getTotalNum(),4,BigDecimal.ROUND_HALF_UP)).doubleValue()*100 +""); | 
|         } | 
|         if( data.getWaterQuantity().getTotalNum().compareTo(new BigDecimal(0)) !=0){ | 
|             // //计算用水同比环比 | 
|             data.getWaterQuantity().setSameRate(Constants.formatBigdecimal4Float(data.getWaterQuantity().getSameNum().divide(data.getWaterQuantity().getTotalNum(),4,BigDecimal.ROUND_HALF_UP)).doubleValue()*100 +""); | 
|             data.getWaterQuantity().setRingRate(Constants.formatBigdecimal4Float(data.getWaterQuantity().getRingNum().divide(data.getWaterQuantity().getTotalNum(),4,BigDecimal.ROUND_HALF_UP)).doubleValue()*100 +""); | 
|         } | 
|   | 
|         /*计算碳排量,以下三个因素之和 | 
|         1)用电的二氧化碳排放量(kg)=耗电量(kWh)x0.785; | 
|         2) 天然气二氧化碳排放量(kg)=天然气使用量(m3)×0.19; | 
|         3) 自来水二氧化碳排放量(kg)=自来水使用量(m3)×0.91;*/ | 
|         data.setCarbon(Constants.formatBigdecimal2Float((carbonElec.multiply(new BigDecimal(0.785))) | 
|                 .add(carbonGas.multiply(new BigDecimal(0.19))) | 
|                 .add(carbonWater.multiply(new BigDecimal(0.91))))); | 
|         return data; | 
|   | 
|     } | 
|   | 
|     /** | 
|      * 通过安防平获取本月数据 | 
|      * @param data | 
|      */ | 
|     private void getMonthElectricityData(EnergyModelDataVO data) { | 
|         BaseResponse<MonthDataByMeterTypeResponse> response = HKService.getCurrentMonthDataByMeterType("1"); | 
|         if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null ){ | 
|            data.setRingRate(StringUtils.defaultString(response.getData().getRingPercent(),"0")); | 
|            data.setSameRate(StringUtils.defaultString(response.getData().getSamePercent(),"0")); | 
|            data.setTotal(StringUtils.defaultString(response.getData().getValue(),"0")); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 通过安防平获取上月数据 | 
|      * @param data | 
|      */ | 
|     private void getLastMonthElectricityData(EnergyModelDataVO data) { | 
|          BaseResponse<LastMonthFeeByMeterTypeResponse> response = HKService.lastMonthFeeByMeterType("1"); | 
|         if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null ){ | 
|            data.setRingRate(StringUtils.defaultString(response.getData().getRingPercent(),"0")); | 
|            data.setSameRate(StringUtils.defaultString(response.getData().getSamePercent(),"0")); | 
|            data.setTotal(StringUtils.defaultString(response.getData().getValue(),"0")); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 通过安防平获取今日用电量 | 
|      * @param data | 
|      */ | 
|     private void getCurrentDateElectircityData(EnergyModelDataVO data,int days) { | 
|         EnergyTrendRequest param = new EnergyTrendRequest(); | 
|         param.setDate(DateUtil.getFomartDate(DateUtil.addDaysToDate(new Date(),days),"yyyy-MM-dd"));//日期 | 
|         param.setMeterType(1); | 
|         param.setShowType("4"); | 
|         param.setNodeType(2); | 
|         param.setNodeId("root000000"); | 
|         param.setPeriodType("day"); | 
|         BigDecimal total = new BigDecimal(0); | 
|         BaseResponse<EnergyTrendResponse> response = HKService.energyTrend(param); | 
|         if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null&& response.getData().getYvalues()!=null ){ | 
|             for (int i = 0; i < response.getData().getYvalues().get(0).getValue().length; i++) { | 
|                 total = total.add(new BigDecimal(StringUtils.defaultString( response.getData().getYvalues().get(0).getValue()[i],"0"))); | 
|             } | 
|   | 
|         } | 
|         data.setTotal(Constants.formatBigdecimal2Float(total).toString()); | 
|     } | 
|   | 
|     private EnergyModelDataVO getDefaultData() { | 
|         EnergyModelDataVO data = new EnergyModelDataVO(); | 
|         data.setTotal("0"); | 
|         data.setSameRate("0"); | 
|         data.setRingRate("0"); | 
|         data.setTotalNum(new BigDecimal(0)); | 
|         data.setSameNum(new BigDecimal(0)); | 
|         data.setRingNum(new BigDecimal(0)); | 
|         return data; | 
|     } | 
|   | 
|     /** | 
|      * 用电总能耗同比、环比和区域用电量集合 | 
|      * @return | 
|      */ | 
|     @Override | 
|     public   RegionEnergyListResponse energyRegionData(){ | 
|         RegionEnergyListResponse data = null; | 
|         BaseResponse<RegionEnergyListResponse> response = HKService.regionEnergyList("1"); | 
|         if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null ){ | 
|             data = response.getData(); | 
|         } | 
|         if(data == null){ | 
|             data = new RegionEnergyListResponse(); | 
|             data.setSecondRegionDataList(new ArrayList<>()); | 
|             data.setRootValue("0"); | 
|             data.setSamePercent("0"); | 
|             data.setRingPercent("0"); | 
|             data.setSecondRegionDataList(new ArrayList<>()); | 
|         } | 
|         return data; | 
|   | 
|     } | 
|     /** | 
|      * 近12个水电气油耗数据统计 | 
|      * @param type | 
|      * @return | 
|      */ | 
|     @Override | 
|     public   List<EnergyDataVO> energyDataList(Integer type){ | 
|         List<EnergyDataVO> energyDataVOList = new ArrayList<>(); | 
|         List<OilDataVO> oilDataVOList = new ArrayList<>(); | 
|         Date lastMonth = DateUtil.increaseMonth(new Date(),-11); | 
|         if(type >=0 && type <=2){ | 
|             //用水用电用气 | 
|             List<PlatformWaterGas> list =  platformWaterGasMapper.selectList(new QueryWrapper<PlatformWaterGas>() | 
|                             .select("DATE_FORMAT(TIME_INFO,'%Y-%m') as time_info_str,sum(num) as num") | 
|                     .lambda() | 
|                     .eq(PlatformWaterGas::getIsdeleted,Constants.ZERO) | 
|                     .eq(PlatformWaterGas::getType,type) | 
|                     .apply("time_info BETWEEN DATE_SUB(CURDATE(), INTERVAL 12 MONTH) AND CURDATE()")//近12个月 | 
|                     .last(" group by DATE_FORMAT(TIME_INFO,'%Y-%m')") | 
|             ); | 
|             for (int i = 0; i < 12; i++) { | 
|                 Date tempDate = DateUtil.increaseMonth(lastMonth,i); | 
|                 EnergyDataVO data = new EnergyDataVO(); | 
|                 data.setTimeData(DateUtil.getFomartDate(tempDate,"YYYY-MM")); | 
|                 data.setEnergy(new BigDecimal(0)); | 
|                 if(list!=null){ | 
|                     for(PlatformWaterGas m : list){ | 
|                         if(StringUtils.equals(m.getTimeInfoStr(),data.getTimeData())){ | 
|                             data.setEnergy(Constants.formatBigdecimal(m.getNum())); | 
|                         } | 
|                     } | 
|                 } | 
|                 energyDataVOList.add(data); | 
|             } | 
|         }else{ | 
|             for (int i = 0; i < 12; i++) { | 
|                 Date tempDate = DateUtil.increaseMonth(lastMonth,i); | 
|                 EnergyDataVO data = new EnergyDataVO(); | 
|                 data.setTimeData(DateUtil.getFomartDate(tempDate,(i+1)+"月")); | 
|                 data.setEnergy(new BigDecimal(0)); | 
|                 energyDataVOList.add(data); | 
|             } | 
|             //如果是用电数据 | 
|             EnergyTrendRequest param = new EnergyTrendRequest(); | 
|             param.setDate(DateUtil.getFomartDate(new Date(),"yyyy"));//年份 | 
|             param.setMeterType(1); | 
|             param.setNodeType(2); | 
|             param.setNodeId("root000000"); | 
|             param.setPeriodType("year"); | 
|             BaseResponse<EnergyTrendResponse> response = HKService.energyTrend(param); | 
|             if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null&& response.getData().getYvalues()!=null ){ | 
|                 for (int i = 0; i < 12; i++) { | 
|                     if(response.getData().getYvalues().size()>0 &&response.getData().getYvalues().get(0).getValue().length>i){ | 
|                         //取相应的参数值 | 
|                         energyDataVOList.get(i).setEnergy(new BigDecimal(StringUtils.defaultString(response.getData().getYvalues().get(0).getValue()[i],"0"))); | 
|                     } | 
|                 } | 
|   | 
|             } | 
|         } | 
|         return energyDataVOList; | 
|     } | 
|     @Override | 
|     public  VisitDataVO visitSecurityData(){ | 
|         //待访问、已登记、已离开 | 
|   | 
|         VisitDataVO result = new VisitDataVO(); | 
|         result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>() | 
|                 .eq(Visits::getIsdeleted,Constants.ZERO) | 
|                 .in(Visits::getStatus,Constants.VisitStatus.pass,Constants.VisitStatus.xfSuccess )));//待访问 | 
|         result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>() | 
|                 .eq(Visits::getIsdeleted,Constants.ZERO) | 
|                 .in(Visits::getStatus,Constants.VisitStatus.signout,Constants.VisitStatus.signin )));//已登记 | 
|         result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>() | 
|                 .eq(Visits::getIsdeleted,Constants.ZERO) | 
|                 .in(Visits::getStatus,Constants.VisitStatus.signout )));//已签离 | 
|         PageWrap<Visits> pageWrap = new PageWrap<>(); | 
|         pageWrap.setCapacity(10); | 
|         pageWrap.setPage(1); | 
|         pageWrap.setModel(new Visits()); | 
|         pageWrap.getModel().setLevelStatus(Constants.ZERO); | 
|         pageWrap.getModel().setStatus(Constants.TWO); | 
|         PageData<Visits> visitsPageData =    VisitsServiceImpl.retentionPageBiz(pageWrap,visitsJoinMapper,systemDictDataBiz); | 
|         List<VisitRetentionDataVO> 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);//获取车位数据 | 
|         List<Retention> retentionList = retentionMapper.selectJoinList(Retention.class, | 
|                 new MPJLambdaWrapper<Retention>() | 
|                         .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<ParkingStatisticResponse> 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<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) | 
|         ); | 
|         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 = 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<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<PlatformJob> jobList = platformJobMapper.selectJoinList(PlatformJob.class, new MPJLambdaWrapper<PlatformJob>() | 
|                 .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; | 
|         } | 
|         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<PlatformDurationVO> platformDuration(){ | 
|         List<PlatformDurationVO> platformDurationList = new ArrayList<>(); | 
|         List<Platform> jobList = platformMapper.selectJoinList(Platform.class, new MPJLambdaWrapper<Platform>() | 
|                 .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<Platform>() { | 
|                 @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<PlatformWarnEvent> warningList(int limit){ | 
|         List<PlatformWarnEvent> platformLogList = platformWarnEventMapper.selectList(new QueryWrapper<PlatformWarnEvent>().lambda() | 
|                 .eq(PlatformWarnEvent::getIsdeleted,Constants.ZERO) | 
|                 .apply("to_days(create_date) = to_days(now())") | 
|                 .orderByDesc(PlatformWarnEvent::getCreateDate) | 
|                 .last(" limit "+limit) | 
|         ); | 
|         return platformLogList; | 
|     } | 
|     @Override | 
|     public OnSitDispatchBoardVO getCnddCenterData(){ | 
|         OnSitDispatchBoardVO data = new OnSitDispatchBoardVO(); | 
|         //月台总数 | 
|         List<Platform> list =  platformMapper.selectJoinList(Platform.class,new MPJLambdaWrapper<Platform>() | 
|                 .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<PlatformJob> jobList =  platformJobMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>() | 
|                 .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; | 
|     } | 
|   | 
| } |