jiangping
2025-01-16 f63d3a3be83fea258e7920efccd2567b6a511bb3
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -5,6 +5,7 @@
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.cars.response.CarsAlarmResultListResponse;
import com.doumee.core.haikang.model.cars.response.CarsDeviceDetaisResponse;
import com.doumee.core.haikang.model.param.BaseListPageRequest;
import com.doumee.core.haikang.model.param.BaseListPageResponse;
@@ -13,29 +14,37 @@
import com.doumee.core.haikang.model.param.respose.*;
import com.doumee.core.haikang.service.HKCarOpenService;
import com.doumee.core.haikang.service.HKService;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.web.reqeust.CarsJobAndContractByJobIdDTO;
import com.doumee.service.business.third.model.request.TmsFacrotyCodeListRequest;
import com.doumee.service.business.third.model.request.TmsOrderNoFinishListRequest;
import com.doumee.service.business.third.model.request.TmsOutQtyAndVehicleQtyRequest;
import com.doumee.service.business.third.model.request.TmsSevenArrivalDetailsRequest;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.core.wms.model.response.WmsBaseResponse;
import com.doumee.core.wms.model.response.WmsInventoryDataResponse;
import com.doumee.core.wms.model.response.WmsBaseDataResponse;
import com.doumee.core.wms.model.response.WmsInventoryJsonResponse;
import com.doumee.dao.business.*;
import com.doumee.dao.business.join.PlatformWarnEventJoinMapper;
import com.doumee.dao.business.join.VisitsJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.web.reqeust.CarsJobAndContractDTO;
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.doumee.service.business.third.TmsService;
import com.doumee.service.business.third.WmsService;
import com.doumee.service.business.third.model.response.*;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.swagger.annotations.ApiModelProperty;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@@ -61,9 +70,13 @@
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private TmsFactoryParamMapper tmsFactoryParamMapper;
    @Autowired
    private PlatformWarnEventJoinMapper platformWarnEventJoinMapper;
    @Autowired
    private PlatformJobMapper platformJobMapper;
    @Autowired
    private PlatformBooksMapper platformBooksMapper;
    @Autowired
    private PlatformWmsDetailMapper platformWmsDetailMapper;
    @Autowired
@@ -76,12 +89,90 @@
    private RetentionMapper retentionMapper;
    @Autowired
    private PlatformGroupMapper platformGroupMapper;
    @Autowired
    private TmsService tmsService;
    @Value("${debug_model}")
    private Boolean isDebug;
    /**
     * 获取区域树形结构数据
     * @return
     */
    @Override
    public BoardStockListVO stockList( ){
    public     List<GeneralVO> todayTotalInList(){
        /**
         * 1市公司:根据预约的入园原因为市公司卸货的任务为市公司入库的统计;
         * 2集散中心:WMS推送的入库单据;
         * 3加工入库:预约入园为重庆加工入库的(作业月台为安泰物流卸货月台);
         */
        String[] names = new String[]{"市公司","集散中心","加工入库"};
        String reason =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.CITY_XH_REASON_ID).getCode();
        String platformGroupId =systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ATWL_XH_PLATFORM_ID).getCode();;
        List<GeneralVO> list = new ArrayList<>();
        for (int i = 0; i < 3; i++) {
            Random random = new Random();
            GeneralVO data = new GeneralVO();
            data.setName(names[i]);
            BigDecimal num =new BigDecimal(0);
            if(i == 0){
                List<PlatformBooks> jobs = platformBooksMapper.selectJoinList(PlatformBooks.class, new MPJLambdaWrapper<PlatformBooks>()
                        .select(PlatformJob::getTotalNum)
                         .leftJoin(PlatformJob.class,PlatformJob::getId,PlatformBooks::getJobId)
                        .eq(PlatformBooks::getIsdeleted,Constants.ZERO)
                        .eq(PlatformBooks::getReasonId,reason)
                        .apply("to_days(t1.done_date) = to_days(now())")
                        .eq(PlatformBooks::getStatus,Constants.TWO));
                if(jobs!=null){
                    for(PlatformBooks j :jobs){
                        num =num.add(Constants.formatBigdecimal(j.getTotalNum()));
                    }
                }
            }else if(i ==1){
                List<PlatformJob> jobs = platformJobMapper.selectList (new MPJLambdaWrapper<PlatformJob>()
                        .select(PlatformJob::getTotalNum)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .eq(PlatformJob::getOrigin,Constants.ONE)
                        .in(PlatformJob::getStatus, Constants.PlatformJobStatus.DONE.getKey()
                                , Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()
                                , Constants.PlatformJobStatus.LEAVED.getKey())
                        .apply("to_days(done_date) = to_days(now())") );
                if(jobs!=null){
                    for(PlatformJob j :jobs){
                        if(Objects.nonNull(j)&&Objects.nonNull(j.getTotalNum())){
                            num =num.add(Constants.formatBigdecimal(j.getTotalNum()));
                        }
                    }
                }
            }else{
                List<PlatformJob> jobs = platformJobMapper.selectList (new MPJLambdaWrapper<PlatformJob>()
                        .select(PlatformJob::getTotalNum)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .eq(PlatformJob::getPlatformGroupId,platformGroupId)
                        .apply("to_days(done_date) = to_days(now())")
                        .in(PlatformJob::getStatus, Constants.PlatformJobStatus.DONE.getKey()
                                , Constants.PlatformJobStatus.AUTHED_LEAVE.getKey()
                                , Constants.PlatformJobStatus.LEAVED.getKey()) );
                if(jobs!=null){
                    for(PlatformJob j :jobs){
                        if(Objects.nonNull(j)&&Objects.nonNull(j.getTotalNum())){
                            num = num.add(Constants.formatBigdecimal(j.getTotalNum()));
                        }
                    }
                }
            }
            data.setNum(num);
            list.add(data);
        }
        return list;
    }
    /**
     * 获取区域树形结构数据
     * @return
     */
    @Override
    public BoardStockListVO stockList(){
        BoardStockListVO data = new BoardStockListVO();
        double toatalNum = 1d;
        BigDecimal num = new BigDecimal(0);
@@ -89,17 +180,16 @@
        try {
            toatalNum =Double.parseDouble(systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_TOTAL_STOCK_NUM).getCode()) ;
        }catch (Exception e){
        }
        WmsBaseResponse<WmsInventoryDataResponse> response =  wmsService.getInventoryList();
        if(response!=null && response.getData()!=null && response.getData().size()>=0){
        WmsBaseResponse<WmsBaseDataResponse> response =  wmsService.getInventoryList();
        if(response!=null && response.getData()!=null && response.getData().size()>0){
            List<WmsInventoryJsonResponse> t= response.getData().get(0).getJson();
            if(t!=null &&t.size()>0){
                for(WmsInventoryJsonResponse j :t){
                    num = num.add (Constants.formatBigdecimal( j.getQty()));
                    GeneralVO d = new GeneralVO();
                    d.setNum(Constants.formatBigdecimal(j.getQty()));
                    d.setName(j.getItem_name());
                    d.setName(j.getItemName());
                    list.add(d);
                }
            }
@@ -110,7 +200,7 @@
            toatalNum =1;
        }
        data.setTotalNum(new BigDecimal(toatalNum));
        data.setUseRate(data.getTotalNum().divide(data.getNum(),2,BigDecimal.ROUND_UP));
        data.setUseRate(Constants.formatBigdecimal(data.getNum()).divide(data.getTotalNum(),2,BigDecimal.ROUND_HALF_UP));
        return data;
    }
@@ -357,6 +447,7 @@
    public  CarWorkSituationVO carWorkSituation(int limit){
        CarWorkSituationVO carWorkSituationVO = new CarWorkSituationVO();
        List<PlatformLog> platformLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>().lambda()
                        .like(PlatformLog::getCreateDate,DateUtil.getCurrDate())
                .orderByDesc(PlatformLog::getCreateDate)
                .last(" limit "+limit)
        );
@@ -399,7 +490,7 @@
        List<WaningEventDataListVO> list = new ArrayList<>();
        RuleEventSearchRequest request = new RuleEventSearchRequest();
        request.setPageNo(1);
        request.setPageSize(10);
        request.setPageSize(1000);
        request.setFiledOptions(new ArrayList<>());
        request.setSorts(new ArrayList<>());
        RuleEventFiledOptionsRequest file = new RuleEventFiledOptionsRequest();
@@ -409,7 +500,6 @@
        if(type == 1){
            file.setFieldValue("131588");//安防告警
        }else  if(type == 2){
            file.setFieldValue("131593");//人员告警
        }
        request.getFiledOptions().add(file);
@@ -417,28 +507,36 @@
        sort.setSortField("happen_time");
        sort.setSortType("desc");
        request.getSorts().add(sort);
        int total =0;
        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){
                    try {
                        if(DateUtil.getISO8601DateByStr(r.getHappen_time()).getTime() < Utils.Date.getStart(new Date()).getTime()){
                            continue;
                        }
                    }catch (Exception e){
                    }
                    total ++;
                    WaningEventDataListVO data = new WaningEventDataListVO();
                    data.setCreateDate(DateUtil.getPlusTime(DateUtil.getISO8601DateByStr(r.getHappen_time())));
                    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.setTotal(total);
        lastResult.setList(list);
        return lastResult;
    }
@@ -449,7 +547,6 @@
        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;
    }
@@ -500,25 +597,46 @@
    public    List<AlarmEventDataVO> fightingAdminAlertList(){
        List<AlarmEventDataVO> data = new ArrayList<>();
        //查询24小时内的
        List<FindHomeAlarmInfoPageResponse> allList = new ArrayList<>();
        boolean hasNext = true;
        int curTotal = 0;
        int curPage = 1;
        FindHomeAlarmInfoPageRequest param = new FindHomeAlarmInfoPageRequest();
        param.setHour(24);
        param.setPage(1);
        param.setUserId("admin");
        while (hasNext){
            //分页遍历循环查询所有门禁设备数据
            param.setPage(curPage);
//        param.setRegionIndexCodes("root000000");
        param.setAlarmStartTime(DateUtil.getPlusTime2(DateUtil.addDaysToDate(new Date(),-1)));
        param.setAlarmEndTime(DateUtil.getPlusTime2(new Date()));
        param.setPageSize(20);
        BaseResponse<BaseListPageResponse<FindHomeAlarmInfoPageResponse>> response = HKService.findHomeAlarmInfoPage(param);
        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)
                && response.getData()!=null
                &&response.getData().getList()!=null) {
            param.setAlarmStartTime(DateUtil.getFomartDate(new Date(),"yyyy-MM-dd") + " 00:00:00");
            param.setAlarmEndTime(DateUtil.getPlusTime2(new Date()));
            param.setPageSize(50);
            BaseResponse<BaseListPageResponse<FindHomeAlarmInfoPageResponse>> response = HKService.findHomeAlarmInfoPage(param);
            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~");
            }
            for(FindHomeAlarmInfoPageResponse r : response.getData().getList()){
                AlarmEventDataVO t = new AlarmEventDataVO();
                BeanUtils.copyProperties(r,t);
                data.add(t);
                try {
                    if(DateUtil.getDateFromString(t.getAlarmTime()).getTime() >= Utils.Date.getStart(new Date()).getTime()){
                        data.add(t);
                    }else{
                        hasNext =false;
                    }
                }catch (Exception e){
                }
            }
            curTotal += 50;
            if(curTotal >= response.getData().getTotal()){
                hasNext = false;
            }
            if(response.getData().getList() == null || response.getData().getList().size()==0){
                hasNext =false;
            }
            curPage++;
        }
        return data;
    }
@@ -533,9 +651,14 @@
        MinitorDataSearchRequest param = new MinitorDataSearchRequest();
        param.setResourceTypeCodes(new String[]{});
        param.setRegionIndexCode("root000000");
        param.setResourceTypeCodes("60,61".split(","));
        param.setIncludeDown("1");
        param.setUserId("admin");
        param.setPageNo(1);
        param.setPageSize(100);
        BaseResponse<BaseListPageResponse<MonitorDataSearchResponse>> response = HKService.minitorDataSearch(param);
        String pressure = systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_PRESSURE_LEVEL).getCode();
        String liquid = systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_LIQUID_LEVEL).getCode();
        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)
                && response.getData()!=null ) {
            List<MonitorDataSearchResponse> r = response.getData().getList();
@@ -543,17 +666,37 @@
                for(MonitorDataSearchResponse model : r){
                    MonitorDataVO m = new MonitorDataVO();
                    m.setName(model.getName());
                    m.setLevel(Constants.equalsInteger(model.getType(),60)?liquid:pressure);
                    m.setDataList(new ArrayList<>());
                    if(model.getValues()!=null){
                        List<MonitorDataInfoVO> dataList = new ArrayList<>();
                        for(MonitorDataValResponse v : model.getValues()){
                            MonitorDataInfoVO vm = new MonitorDataInfoVO();
                            vm.setValue(v.getMonitorValue());
                            vm.setCateName(v.getMonitorSpecificName());
                            vm.setCateCode(v.getMonitorTypeKey());
                            vm.setTypeCode(v.getMonitorTypeCode());
                            vm.setTypeName(v.getMonitorTypeName());
                            if(Constants.equalsInteger(model.getType(),60)){
                                if(v.getMonitorTypeCode().equals("254001")){
                                    MonitorDataInfoVO vm = new MonitorDataInfoVO();
                                    vm.setValue(v.getMonitorValue());
                                    vm.setCateName(v.getMonitorSpecificName());
                                    vm.setCateCode(v.getMonitorTypeKey());
                                    vm.setTypeCode(v.getMonitorTypeCode());
                                    vm.setTypeName(v.getMonitorTypeName());
                                    dataList.add(vm);
                                }
                            }else{
                                if(v.getMonitorTypeCode().equals("253958")){
                                    MonitorDataInfoVO vm = new MonitorDataInfoVO();
                                    vm.setValue(v.getMonitorValue());
                                    vm.setCateName(v.getMonitorSpecificName());
                                    vm.setCateCode(v.getMonitorTypeKey());
                                    vm.setTypeCode(v.getMonitorTypeCode());
                                    vm.setTypeName(v.getMonitorTypeName());
                                    dataList.add(vm);
                                }
                            }
                        }
                        m.setDataList(dataList);
                    }
                    list.add(m);
                }
            }
        }
@@ -597,7 +740,9 @@
        List<PlatformJob>  dataList = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
                        .selectAs(PlatformJob::getCreateDate,PlatformJob::getCreateDate)
                        .selectAs(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
                        .selectAs(PlatformJob::getStatus,PlatformJob::getStatus)
//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .apply(queryType==0,"to_days(create_date) >= to_days(now()) -7")
@@ -607,7 +752,7 @@
            TransportMeasureVO data = new TransportMeasureVO();
            data.setPlanDate(date);
            data.setPlanTimes(0);
            data.setPlanTaskNum(new BigDecimal(random.nextInt(0)));
            data.setPlanTaskNum(new BigDecimal( 0));
            data.setFinishTaskNum(new BigDecimal(0));
            for(PlatformJob job :dataList){
                if(queryType == 2){
@@ -656,8 +801,42 @@
                        .selectAll(PlatformJob.class)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .eq(PlatformJob::getCarCodeFront,param.getCarCode())
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey(),Constants.PlatformJobStatus.CALLED.getKey())
                        .in(PlatformJob::getStatus,
                                Constants.PlatformJobStatus.DONE.getKey(),
                                Constants.PlatformJobStatus.LEAVED.getKey(),
                                Constants.PlatformJobStatus.AUTHED_LEAVE.getKey(),
                                Constants.PlatformJobStatus.CALLED.getKey())
                        .last("limit 1"));
        dealJobDetailAndContractBiz(job,data);
        return data;
    }
    /**
     * 【园区物料中心调度】看板-根据车牌号查询作业信息和合同信息集合
     *
     * @return
     *
     */
    @Override
    public  CarsJobAndContractVO  getJobDetailsById(CarsJobAndContractByJobIdDTO param) {
        CarsJobAndContractVO data = new CarsJobAndContractVO();
        if(param.getId() == null){
            return  data;
        }
        PlatformJob job = platformJobMapper.selectJoinOne(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAll(PlatformJob.class)
                        .eq(PlatformJob::getId,param.getId())
                        .last("limit 1"));
        dealJobDetailAndContractBiz(job,data);
        return data;
    }
    private void dealJobDetailAndContractBiz(PlatformJob job, CarsJobAndContractVO data) {
        if(job!=null){
            List<PlatformLog>  logList = platformLogMapper.selectJoinList(PlatformLog.class,
                    new MPJLambdaWrapper<PlatformLog>()
@@ -696,8 +875,8 @@
                                .orderByDesc(PlatformLog::getCreateDate));
                if(detailList!=null){
                    for(PlatformWmsDetail d : detailList){
                        if(!isNotExistIocode(d.getIocode(),data.getContractList())){
                                continue;
                        if(isExistIocode(d.getIocode(),data.getContractList())){
                            continue;
                        }
                        tt = new CarsContractVO();
                        tt.setIoCode(d.getIocode());
@@ -710,10 +889,6 @@
            }
        }
        return data;
    }
    private List<PlatformWmsDetail> getDetailListByCode(String iocode, List<PlatformWmsDetail> detailList,CarsContractVO tt) {
@@ -731,7 +906,7 @@
        return list;
    }
    private boolean isNotExistIocode(String iocode, List<CarsContractVO> detailList) {
    private boolean isExistIocode(String iocode, List<CarsContractVO> detailList) {
        if(detailList!=null){
            for(CarsContractVO d :detailList){
                if(StringUtils.equals(d.getIoCode(),iocode)){
@@ -763,55 +938,58 @@
    @Override
    public  PlatformJobRunBoardNewVO platformJobCenterData(){
        PlatformJobRunBoardNewVO data = new PlatformJobRunBoardNewVO();
        Random random = new Random();
        data.setMonthOutTimes(random.nextInt(1000));
        data.setYearOutTimes(random.nextInt(1000) * 11);
        data.setMonthOutTimes(0);
        data.setYearOutTimes(0);
        Date month  = Utils.Date.getStart(new Date());//本月
        Date lastMonth =  DateUtil.addMonthToDate(month,-1);//上月
        Date year = Utils.Date.getStart(new Date());//今年
        Date lastYear = DateUtil.addYearToDate(year,-1);//去年
        List<PlatformJob>  monthNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                .selectAs(PlatformJob::getId,PlatformJob::getId)
                .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
//                .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
                    new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
                            .select(PlatformJob::getType,PlatformJob::getType)
                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
                        .select(PlatformJob::getStatus,PlatformJob::getStatus)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
//                        .in(PlatformJob::getType,Constants.ONE,Constants.THREE)
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
                        .apply("year(create_date) = year("+DateUtil.getPlusTime2(month)+") and month(create_date) = month("+DateUtil.getPlusTime2(month)+") and to_days(create_date)<= "+DateUtil.getPlusTime2(month)));
                        .apply("year(done_date) = year('"+DateUtil.getPlusTime2(month)+"') and month(done_date) = month('"+DateUtil.getPlusTime2(month)+"') "));
        List<PlatformJob>  monthLastNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
                        .selectAs(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
                        .select(PlatformJob::getType,PlatformJob::getType)
                        .select(PlatformJob::getStatus,PlatformJob::getStatus)
//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .in(PlatformJob::getType,Constants.ONE,Constants.THREE)
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
                        .apply("year(create_date) = year("+DateUtil.getPlusTime2(lastMonth)+") and month(create_date) = month("+DateUtil.getPlusTime2(lastMonth)+") and to_days(create_date)<= "+DateUtil.getPlusTime2(lastMonth)));
                        .apply("year(done_date) = year('"+DateUtil.getPlusTime2(lastMonth)+"') and month(done_date) = month('"+DateUtil.getPlusTime2(lastMonth)+"') and  done_date<= '"
                                +DateUtil.getPlusTime2(lastMonth)+"'"));
        List<PlatformJob>  yearNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
                        .selectCount(PlatformJob::getPlatformId,PlatformJob::getCountum)
//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
                        .selectAs(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
                        .select(PlatformJob::getStatus,PlatformJob::getStatus)
                        .select(PlatformJob::getType,PlatformJob::getType)
//                        .selectCount(PlatformJob::getPlatformId,PlatformJob::getCountum)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .in(PlatformJob::getType,Constants.ONE,Constants.THREE)
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
                        .apply("year(create_date) = year("+DateUtil.getPlusTime2(year)+")   and to_days(create_date)<= "+DateUtil.getPlusTime2(year)));
                        .apply("year(done_date) = year('"+DateUtil.getPlusTime2(year)+"')   and done_date<= '"+DateUtil.getPlusTime2(year)+"'"));
        List<PlatformJob> yearLastNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
                        .selectAs(PlatformJob::getType,PlatformJob::getId)
                        .select(PlatformJob::getStatus,PlatformJob::getStatus)
                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .in(PlatformJob::getType,Constants.ONE,Constants.THREE)
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
                        .apply("year(create_date) = year("+DateUtil.getPlusTime2(lastYear)+")  and to_days(create_date)<= "+DateUtil.getPlusTime2(lastYear)));
                        .apply("year(done_date) = year('"+DateUtil.getPlusTime2(lastYear)+"')  and done_date<= '"+DateUtil.getPlusTime2(lastYear)+"'"));
        data.setMonthOutTotal(getSumTotalByList(monthNum,0,null));//本月出库量
        data.setMonthLastOutTotal(getSumTotalByList(monthLastNum,null,null) );//上有出库量
        data.setMonthLastOutTotal(getSumTotalByList(monthLastNum,null,null) );//上月出库量
        data.setYearOutTotal(getSumTotalByList(yearNum,null,null)  );//本年出库量
        data.setYearLastOutTotal(getSumTotalByList(yearLastNum,null,null) );//去年出库量
        data.setMonthOutTimes(monthNum!=null?monthNum.size():0);
@@ -824,22 +1002,33 @@
                        .selectAs(PlatformJob::getStatus,PlatformJob::getStatus)
                        .selectAs(PlatformJob::getType,PlatformJob::getType)
                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
                        // .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.LEAVED.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey(),Constants.PlatformJobStatus.CALLED.getKey())
                        .apply(" and to_days(create_date) <to_days(now())"));
                        .apply("   to_days(create_date) <to_days(now())"));
        //==========今天出入库任务
        List<PlatformJob> currentNum = platformJobMapper.selectJoinList(PlatformJob.class,
        //==========今天出入库完成量
        List<PlatformJob> currentDoneNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
                        .selectAs(PlatformJob::getStatus,PlatformJob::getStatus)
                        .selectAs(PlatformJob::getType,PlatformJob::getType)
                        .selectAs(PlatformJob::getStatus,PlatformJob::getStatus)
                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey())
                        .apply("year(create_date) = year("+DateUtil.getPlusTime2(lastYear)+")  and to_days(create_date)<= "+DateUtil.getPlusTime2(lastYear)));
                        .apply(" to_days(done_date) = to_days(now())"));
        //==========今天下发出入库任务----
        List<PlatformJob> currentNum = platformJobMapper.selectJoinList(PlatformJob.class,
                new MPJLambdaWrapper<PlatformJob>()
                        .selectAs(PlatformJob::getId,PlatformJob::getId)
                        .selectAs(PlatformJob::getType,PlatformJob::getType)
                        .selectAs(PlatformJob::getStatus,PlatformJob::getStatus)
                        .select(PlatformJob::getTotalNum,PlatformJob::getTotalNum)
//                        .select("select sum(io_qty) from platform_wms_details a where a.isdeleted=0 and a.job_id=t.id",create_date)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .notIn(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey())
                        .apply(" to_days(create_date) = to_days(now())"));
        BigDecimal beforeOutNum = (getSumTotalByList(beforeJobNum,0,null));//今天之前未完成出库任务
        BigDecimal currentOutNum = (getSumTotalByList(currentNum,0,null));//今天下发出库任务
@@ -847,12 +1036,12 @@
        BigDecimal currentInNum = (getSumTotalByList(currentNum,1,null));//今天下发入库任务
        data.setCurrentInNum(beforeInNum.add(currentInNum));//当前入库总任务成量
        data.setCurrentOutNum(beforeOutNum.add(currentOutNum));//当前出库总任务成量
        data.setCurrentInDoneNum(getSumTotalByList(currentNum,0,1));//今日完成量
        data.setCurrentOutDoneNum(getSumTotalByList(currentNum,1,1));//今日完成量
        data.setCurrentInDoneNum(getSumTotalByList(currentDoneNum,1,1));//今日完成量
        data.setCurrentOutDoneNum(getSumTotalByList(currentDoneNum,0,1));//今日完成量
        //------------今日出入库效率----------------
        BigDecimal outHours = getTotalDoneTimes(currentNum,0);//
        BigDecimal inHours = getTotalDoneTimes(currentNum,1);//
        BigDecimal outHours = getTotalDoneTimes(currentDoneNum,0);//
        BigDecimal inHours = getTotalDoneTimes(currentDoneNum,1);//
        if(outHours.compareTo(new BigDecimal(0))>0){
            data.setTodayOutRate(data.getCurrentOutDoneNum().divide(outHours,2));//当前入库总任务成量
        }
@@ -860,19 +1049,18 @@
            data.setTodayInRate(data.getCurrentInDoneNum().divide(inHours,2));//当前入库总任务成量
        }
        //------------本月出入库效率----------------
        BigDecimal outMonthNum = getSumTotalByList(monthNum,0,null).add(data.getCurrentOutDoneNum());
//        BigDecimal outMonthNum = getSumTotalByList(monthNum,0,null).add(data.getCurrentOutDoneNum());
        BigDecimal inMonthNum = getSumTotalByList(monthNum,1,null).add(data.getCurrentInDoneNum());
        BigDecimal outYearHours = getTotalDoneTimes(yearNum,0).add(outHours);//
        BigDecimal inYearHours = getTotalDoneTimes(yearNum,1).add(inHours);//
        if(outYearHours.compareTo(new BigDecimal(0))>0){
            data.setMonthOutRate(outMonthNum.divide(outYearHours,2));//本月入库效率
        BigDecimal outMonthHours = getTotalDoneTimes(monthNum,0).add(outHours);//
        BigDecimal inMonthHours = getTotalDoneTimes(monthNum,1).add(inHours);//
        if(outMonthHours.compareTo(new BigDecimal(0))>0){
            data.setMonthOutRate(data.getMonthOutTotal().divide(outMonthHours,0,BigDecimal.ROUND_HALF_UP));//本月入库效率
        }
        if(inYearHours.compareTo(new BigDecimal(0))>0){
            data.setMonthInRate(inMonthNum.divide(inYearHours,2));//本月入库效率
        if(inMonthHours.compareTo(new BigDecimal(0))>0){
            data.setMonthInRate(inMonthNum.divide(inMonthHours,0,BigDecimal.ROUND_HALF_UP));//本月入库效率
        }
        return data;
    }
    private BigDecimal getDoneHoursByData(String start ,String end) {
        List<PlatformLog> platformLogList = platformLogMapper.selectList(new QueryWrapper<PlatformLog>().lambda()
@@ -915,7 +1103,7 @@
                    .isNotNull(PlatformLog::getParam3)
                    .ne(PlatformLog::getParam3,Constants.ZERO+""));
            if(platformLogList!=null && platformLogList.size()>0){
                return new BigDecimal((double)(platformLogList.stream().map(m->Long.valueOf(m.getParam3())).reduce(Long.valueOf(0),Long::sum))/(double)60);
                return new BigDecimal((double)(platformLogList.stream().map(m->Long.valueOf(m.getParam3())).reduce(Long.valueOf(0),Long::sum))/(double)3600);
            }
        }
        return r;
@@ -942,31 +1130,44 @@
//            if(Constants.formatBigdecimal(job.getIoQty()).compareTo(new BigDecimal(0)) >0){
//                r.add( job.getIoQty());
//            }else{
                r.add(Constants.formatBigdecimal(job.getTotalNum()));
            r =  r.add(Constants.formatBigdecimal(job.getTotalNum()));
//            }
        }
        return Constants.formatBigdecimal0Float(r);
    }
    @Override
    public     List<CarsAlarmResultListResponse> carsEventList(){
        if(HKCarOpenService.HK_CARS_LIST == null){
            HKCarOpenService.HK_CARS_LIST =   HKCarOpenService.getAllCarsDetais();
        }
        return  HKCarOpenService.getAlarmEvemtList(  HKCarOpenService.HK_CARS_LIST,new Date());
    }
    @Override
    public     BoardCarsListVO platformJobCarsList(){
        BoardCarsListVO data = new BoardCarsListVO();
        List<CarsDeviceDetaisResponse> detaisResponses = HKCarOpenService.getAllCarsDetais();
        data.setCarsList(detaisResponses);
         data.setCarsList(detaisResponses);
        if(data.getCarsList()!=null && data.getCarsList().size()>0){
            List<String> codes = new ArrayList<>();
            //设备状态 0:离线;1:在线;2:休眠
            int online = 0;
            for(CarsDeviceDetaisResponse model:detaisResponses){
                if(Constants.equalsInteger(model.getStatus(),Constants.ONE) ||Constants.equalsInteger(model.getStatus(),Constants.TWO)){
                   //如果是在线或者休眠,查询在途还是空闲
                if(Constants.equalsInteger(model.getStatus(),Constants.ONE)
                        ||Constants.equalsInteger(model.getStatus(),Constants.TWO)){
                   //如果是在线或者休眠,查询在途还是空闲ty
                    codes.add(model.getPlateNum());
                }else
                    model.setJobStatus(Constants.ZERO);
                }else{
                    model.setJobStatus(Constants.TWO);
                    data.setOfflineNum(data.getOfflineNum()+1);
                }
            }
            if(codes.size()>0){
                //状态 0待确认 1待签到 2等待叫号 3入园等待 4已叫号 5作业中 6作业完成 7转移中 8异常挂起 9已授权离园 10已离园 11 已过号  12取消(WMS)
                long busyNum = platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda()
                List<PlatformJob> busyNum = platformJobMapper.selectList(new QueryWrapper<PlatformJob>() .lambda()
                                .select(PlatformJob::getCarCodeFront)
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO)
                        .in(PlatformJob::getCarCodeFront,codes)
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WORKING.getKey()
@@ -978,8 +1179,21 @@
                                ,Constants.PlatformJobStatus.WAIT_CONFIRM.getKey()
                                ,Constants.PlatformJobStatus.EXCEPTION.getKey())
                        .groupBy(PlatformJob::getCarCodeFront));
                data.setBusyNum((int)busyNum);//在途有任务数量
                data.setBusyNum( busyNum!=null ?busyNum.size():0);//在途有任务数量
                data.setIdleNum(codes.size() -data.getBusyNum());//无任务空闲数量
                HKCarOpenService.HK_CARS_LIST = detaisResponses;
//                data.setEventList(HKCarOpenService.getAlarmEvemtList(detaisResponses,new Date()));
                if(busyNum != null){
                  FLAG:  for(CarsDeviceDetaisResponse model:detaisResponses){
                        for(PlatformJob job : busyNum){
                            if(StringUtils.equals(job.getCarCodeFront(),model.getPlateNum())){
                                model.setJobStatus(Constants.ONE);
                                continue FLAG;
                            }
                        }
                    }
                }
            }
        }
@@ -1000,6 +1214,14 @@
            alarmDataVO.setErrNum(Constants.formatIntegerNum(response.getData().getMisReportAlarmNum()));
            alarmDataVO.setLiftNum(Constants.formatIntegerNum(response.getData().getHandledAlarmNum()));
            alarmDataVO.setProcessingNum(Constants.formatIntegerNum(response.getData().getUnHandedAlarmNum()));
            alarmDataVO.setStartDate(start);
            alarmDataVO.setEndDate(end);
        }else{
            alarmDataVO.setTotalNum(Constants.ZERO);
            alarmDataVO.setRealNum(Constants.ZERO);
            alarmDataVO.setErrNum(Constants.ZERO);
            alarmDataVO.setLiftNum(Constants.ZERO);
            alarmDataVO.setProcessingNum(Constants.ZERO);
            alarmDataVO.setStartDate(start);
            alarmDataVO.setEndDate(end);
        }
@@ -1026,10 +1248,10 @@
        BaseResponse<FireStatisticResponse> response1 = HKService.fireStatisticMonth(param);
        if(response1 != null && StringUtils.equals(response1.getCode(), HKConstants.RESPONSE_SUCCEE)
                && response1.getData()!=null ) {
            data.setMonthAddNum(Constants.formatIntegerNum(response1.getData().getMaintenanceNum()));
            data.setMonthAddNum(Constants.formatIntegerNum(response1.getData().getMaintenanceNumMonth()));
            data.setMonthTotalNum(Constants.formatIntegerNum(response1.getData().getDeviceTotalNum()));
        }
            return data;
        return data;
    }
@@ -1074,14 +1296,60 @@
        data.setDangerDealedNum(totalNum !=null?totalNum.intValue():0);//今日处理隐患数量
        return  data;
    }
    /**
     * 消防 温湿度数据
     */
    @Override
    public List<TemperatureHumidityDataVO> getTemperatureHumidityData(){
        TemperatureHumidityDataRequest request = new TemperatureHumidityDataRequest();
        List<TemperatureHumidityDataVO> temperatureHumidityDataVOList = new ArrayList<>();
        request.setPageNo(1);
        request.setPageSize(100);
        request.setParentIndexCode(systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.TEMPERATURE_HUMIDITY).getCode());
        BaseResponse<BaseListPageResponse<TemperatureHumidityDataResponse>> response = HKService.temperatureHumidityDataStatistic(request);
        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null ){
            List<TemperatureHumidityDataResponse> temperatureHumidityDataResponseList = response.getData().getList();
            if(CollectionUtils.isNotEmpty(temperatureHumidityDataResponseList)){
                Set<String> parentIndexCode = new HashSet<String>(temperatureHumidityDataResponseList.stream().map(
                        i->i.getIndexCode().replace("@0","").replace("@1","")
                ).collect(Collectors.toList()));
                for (String code:parentIndexCode) {
                    List<TemperatureHumidityDataResponse> dateList =
                            temperatureHumidityDataResponseList.stream().filter(i->i.getIndexCode().indexOf(code)>=Constants.ZERO).collect(Collectors.toList());
                    TemperatureHumidityDataVO temperatureHumidityDataVO = new TemperatureHumidityDataVO();
                    for (TemperatureHumidityDataResponse data:dateList) {
                        if(StringUtils.isNotBlank(data.getName())){
                            Integer index = data.getName().indexOf("-");
                            if(index>=0){
                                data.setName(data.getName().substring(0,index));
                            }
                        }
                        if(data.getSensorType().equals("currTemperature")){
                            temperatureHumidityDataVO.setTemperatureData(data);
                        }else{
                            temperatureHumidityDataVO.setHumidityData(data);
                        }
                    }
                    temperatureHumidityDataVOList.add(temperatureHumidityDataVO);
                }
            }
        }
        return temperatureHumidityDataVOList;
    }
    /**
     * 用电总能耗同比、环比和区域用电量集合
     * @return
     */
    @Override
    public  EnergyBoardVO centerEnergyData(){
        EnergyBoardVO data = new EnergyBoardVO();
        Random random = new Random();
       EnergyBoardVO data = new EnergyBoardVO();
       Random random = new Random();
       PlatformWaterGas smoke=  platformWaterGasMapper.selectOne(new QueryWrapper<PlatformWaterGas>()
                 .select("sum(num) as num")
                .lambda()
@@ -1098,17 +1366,22 @@
        BigDecimal carbonWater = new BigDecimal(0);//本月用水
        BigDecimal carbonElec = new BigDecimal(0);//用电
        data.setYesterdayElectricity(getDefaultData());//昨日用电
        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);//通过安防平获取昨日用电量数据
        getCurrentDateElectircityData(data.getTodayElectricity(),0);//通过安防平获取今日用电量数据
        data.setWaterQuantity(getDefaultData());//上月用水
        data.setGasQuantity(getDefaultData());//上月用气
        carbonElec = new BigDecimal(StringUtils.defaultString(data.getMonthElectricity().getTotal(), "0"));
        String firstDate = DateUtil.getFirstDayCurrentMonth() +" 00:00:00";
        Date month0 = DateUtil.getDateFromString(firstDate);
        Date month1 = DateUtil.increaseMonth(month0,-1);//上月
@@ -1159,8 +1432,19 @@
        }
        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(Constants.formatBigdecimal(data.getGasQuantity().getSameNum()).compareTo(new BigDecimal(0))!=0){
                data.getGasQuantity().setSameRate(
                        (data.getGasQuantity().getTotalNum().subtract(data.getGasQuantity().getSameNum())).divide(data.getGasQuantity().getSameNum(),4,BigDecimal.ROUND_HALF_UP).doubleValue()*100 +""
                    /*Constants.formatBigdecimal4Float(data.getGasQuantity().getSameNum()
                            .divide(data.getGasQuantity().getTotalNum(),4,BigDecimal.ROUND_HALF_UP)).doubleValue()*100 +""*/);
            }
           if(Constants.formatBigdecimal(data.getGasQuantity().getRingNum()).compareTo(new BigDecimal(0))!=0){
               data.getGasQuantity().setRingRate(
                       (data.getGasQuantity().getTotalNum().subtract(data.getGasQuantity().getRingNum())).divide(data.getGasQuantity().getRingNum(),4,BigDecimal.ROUND_HALF_UP).doubleValue()*100 +""
                       //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){
            // //计算用水同比环比
@@ -1174,7 +1458,7 @@
        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)))));
                .add(carbonWater.multiply(new BigDecimal(0.91)))).divide(new BigDecimal(1000),2,BigDecimal.ROUND_HALF_UP));
        return data;
    }
@@ -1197,35 +1481,94 @@
     * @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"));
//         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"));
//        }
//        String nowMonth = DateUtil.getFomartDate(new Date(),"yyyy-MM-dd");
//        //上月日期
//        DateUtil.getBeforMonthStr(new Date(),1);
//        //上上月日期
//        DateUtil.getBeforMonthStr(new Date(),2);
//        //上年日期
//        DateUtil.getBeforMonthStr(new Date(),13);
        EnergyTotalDataRequest param = new EnergyTotalDataRequest();
        param.setPeriodType("month");
        param.setDate(DateUtil.getBeforMonthStr(new Date(),1).substring(0,7));
        BaseResponse<EnergyTotalDataResponse> beforMonthResponse = HKService.energyTotal(param);
        if(beforMonthResponse != null && StringUtils.equals(beforMonthResponse.getCode(), HKConstants.RESPONSE_SUCCEE) && beforMonthResponse.getData()!=null ){
            data.setTotal(beforMonthResponse.getData().getElectricity());
            data.setTotalNum(new BigDecimal(beforMonthResponse.getData().getElectricity()));
        }
        param.setDate(DateUtil.getBeforMonthStr(new Date(),2).substring(0,7));
        BaseResponse<EnergyTotalDataResponse> beforBeforMonthResponse = HKService.energyTotal(param);
        if(beforBeforMonthResponse != null && StringUtils.equals(beforBeforMonthResponse.getCode(), HKConstants.RESPONSE_SUCCEE) && beforBeforMonthResponse.getData()!=null ){
            if(Objects.nonNull(beforBeforMonthResponse.getData()) && StringUtils.isNotBlank(beforBeforMonthResponse.getData().getElectricity())){
                data.setRingNum(new BigDecimal(beforBeforMonthResponse.getData().getElectricity()));
            }else{
                data.setRingNum(BigDecimal.ZERO);
            }
            if(Objects.isNull(data.getTotal()) || Objects.isNull(data.getRingNum())
                    || data.getTotalNum().compareTo(BigDecimal.ZERO) ==0  || data.getRingNum().compareTo(BigDecimal.ZERO) ==0 ){
               data.setRingRate("0");
            }else{
               data.setRingRate(new BigDecimal(data.getTotal()).divide(data.getRingNum(),2,BigDecimal.ROUND_HALF_UP).toString());
            }
        }
        param.setDate(DateUtil.getBeforMonthStr(new Date(),13).substring(0,7));
        BaseResponse<EnergyTotalDataResponse> beforYearMonthResponse = HKService.energyTotal(param);
        if(beforYearMonthResponse != null && StringUtils.equals(beforYearMonthResponse.getCode(), HKConstants.RESPONSE_SUCCEE) && beforBeforMonthResponse.getData()!=null ){
            if(Objects.nonNull(beforYearMonthResponse.getData()) && StringUtils.isNotBlank(beforYearMonthResponse.getData().getElectricity())){
                data.setSameNum(new BigDecimal(beforYearMonthResponse.getData().getElectricity()));
            }else{
                data.setSameNum(BigDecimal.ZERO);
            }
            if(Objects.isNull(data.getTotal()) || Objects.isNull(data.getSameNum())
                    || data.getTotalNum().compareTo(BigDecimal.ZERO) ==0  || data.getSameNum().compareTo(BigDecimal.ZERO) ==0 ){
                data.setSameRate("0");
            }else{
                data.setSameRate(new BigDecimal(data.getTotal()).divide(data.getSameNum(),2,BigDecimal.ROUND_HALF_UP).toString());
            }
        }
    }
    /**
     * 通过安防平获取今日用电量
     * @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");
//        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());
        EnergyTotalDataRequest param = new EnergyTotalDataRequest();
        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")));
            }
        param.setDate(DateUtil.getFomartDate(DateUtil.addDaysToDate(new Date(),days),"yyyy-MM-dd"));
        BaseResponse<EnergyTotalDataResponse> beforMonthResponse = HKService.energyTotal(param);
        if(beforMonthResponse != null && StringUtils.equals(beforMonthResponse.getCode(), HKConstants.RESPONSE_SUCCEE) && beforMonthResponse.getData()!=null ){
            data.setTotal(beforMonthResponse.getData().getElectricity());
            data.setTotalNum(new BigDecimal(beforMonthResponse.getData().getElectricity()));
        }
        data.setTotal(Constants.formatBigdecimal2Float(total).toString());
    }
    private EnergyModelDataVO getDefaultData() {
@@ -1252,14 +1595,26 @@
        }
        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;
        if(data.getSecondRegionDataList()!=null && data.getSecondRegionDataList().size()>1){
            int index =-1;
            for (int i = 0; i <data.getSecondRegionDataList().size() ; i++) {
                RegionTopPowerResponse t=data.getSecondRegionDataList().get(i);
                if(Constants.formatBigdecimal(t.getPercent()).compareTo(new BigDecimal(1)) == 0){
                    index =i;
                    break;
                }
            }
            if(index>-1){
                data.getSecondRegionDataList().remove(index);//删除根节点数据
            }
        }
        return  data;
    }
    /**
     * 近12个水电气油耗数据统计
@@ -1282,7 +1637,7 @@
                    .last(" group by DATE_FORMAT(TIME_INFO,'%Y-%m')")
            );
            for (int i = 0; i < 12; i++) {
                Date tempDate = DateUtil.increaseMonth(lastMonth,i);
                Date tempDate = DateUtil.increaseMonth(lastMonth,i);
                EnergyDataVO data = new EnergyDataVO();
                data.setTimeData(DateUtil.getFomartDate(tempDate,"YYYY-MM"));
                data.setEnergy(new BigDecimal(0));
@@ -1296,26 +1651,50 @@
                energyDataVOList.add(data);
            }
        }else{
            String lastYear = null;
            int lastMonths = 0,curMonths =0;
            String curYear =DateUtil.getFomartDate(new Date(),"yyyy");
            for (int i = 0; i < 12; i++) {
                Date tempDate = DateUtil.increaseMonth(lastMonth,i);
                String tt =DateUtil.getFomartDate(tempDate,"yyyy");
                if(!StringUtils.equals(curYear,tt)){
                   lastYear = tt;
                   lastMonths = i+1;//去年的月份数
                }
                EnergyDataVO data = new EnergyDataVO();
                data.setTimeData(DateUtil.getFomartDate(tempDate,(i+1)+"月"));
                data.setTimeData(DateUtil.getFomartDate(tempDate,"YYYY-MM"));
//                data.setTimeData(DateUtil.getFomartDate(tempDate,(i+1)+"月"));
                data.setEnergy(new BigDecimal(0));
                energyDataVOList.add(data);
            }
            //如果是用电数据
            curMonths = 12 - lastMonths;//今年的月份数
            EnergyTrendRequest param = new EnergyTrendRequest();
            param.setDate(DateUtil.getFomartDate(new Date(),"yyyy"));//年份
            param.setMeterType(1);
            param.setNodeType(2);
            param.setNodeId("root000000");
            param.setPeriodType("year");
            if(lastYear!=null){
                //如果是用电数据
                param.setDate(lastYear);//查询去年年份
                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 < lastMonths; i++) { //0,11,取值1-12
                        if(response.getData().getYvalues().size()>0 &&response.getData().getYvalues().get(0).getValue().length>curMonths+i){
                            //取相应的参数值
                            energyDataVOList.get(i).setEnergy(new BigDecimal(StringUtils.defaultString(response.getData().getYvalues().get(0).getValue()[curMonths+i],"0")));
                        }
                    }
                }
            }
            //如果是用电数据
            param.setDate(curYear);//年份
            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){
                for (int i = lastMonths; i < 12; i++) { //12 取值 0
                    if(response.getData().getYvalues().size()>0 &&response.getData().getYvalues().get(0).getValue().length>i-lastMonths){
                        //取相应的参数值
                        energyDataVOList.get(i).setEnergy(new BigDecimal(StringUtils.defaultString(response.getData().getYvalues().get(0).getValue()[i],"0")));
                        energyDataVOList.get(i).setEnergy(new BigDecimal(StringUtils.defaultString(response.getData().getYvalues().get(0).getValue()[i-lastMonths],"0")));
                    }
                }
@@ -1330,15 +1709,15 @@
        VisitDataVO result = new VisitDataVO();
        result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>()
                .eq(Visits::getIsdeleted,Constants.ZERO)
                .apply("to_days(create_date)=to_days(now()")
                .apply("to_days(create_date)=to_days(now())")
                .in(Visits::getStatus,Constants.VisitStatus.pass,Constants.VisitStatus.xfSuccess )));//待访问
        result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>()
                .eq(Visits::getIsdeleted,Constants.ZERO)
                .apply("to_days(create_date)=to_days(now()")
                .apply("to_days(create_date)=to_days(now())")
                .in(Visits::getStatus,Constants.VisitStatus.signout,Constants.VisitStatus.signin )));//已登记
        result.setWaitVisitNum(visitsJoinMapper.selectCount(new MPJLambdaWrapper<Visits>()
                .eq(Visits::getIsdeleted,Constants.ZERO)
                .apply("to_days(create_date)=to_days(now()")
                .apply("to_days(create_date)=to_days(now())")
                .in(Visits::getStatus,Constants.VisitStatus.signout )));//已签离
        /*PageWrap<Visits> pageWrap = new PageWrap<>();
        pageWrap.setCapacity(10);
@@ -1416,7 +1795,7 @@
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)&&Objects.isNull(i.getCompanyType())).count()
        );
        //在园车辆
        data.setInternalCarTotal(
        data.setInParkCarTotal(
                (int) retentionList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.THREE)).count()
        );
        //在园相关方车辆
@@ -1484,18 +1863,23 @@
        if(platformList!=null && platformList.size()>0){
            List<PlatformJob> jobList = platformJobMapper.selectJoinList(PlatformJob.class, new MPJLambdaWrapper<PlatformJob>()
                    .selectAll( PlatformJob.class)
//                    .selectAs(Platform::getCode,PlatformJob::getPlatformCode)
                    .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)
                    .select(" (  case when t.total_num is null  then ( select sum(pwd.IO_QTY) from platform_wms_detail pwd where pwd.JOB_ID = t.id  ) else a.total_num end )",PlatformJob::getWorkNum)
                    .apply("to_days(t.create_date) = to_days(now())")
                    .select(" (  case when t.total_num is null  then ( select sum(pwd.IO_QTY) from platform_wms_detail pwd where pwd.JOB_ID = t.id  ) else t.total_num end )",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 ));
//                    .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                    .orderByDesc(PlatformJob::getStatus )
                    .orderByAsc(PlatformJob::getId )
            );
            //月台状态:0=作业中;1=空闲中;2=作业超时;3=叫号
            for(Platform model : platformList){
                PlatformWorkDataVO platformDurationVO = new PlatformWorkDataVO();
                platformDurationVO.setPlatformName(model.getName());
                platformDurationVO.setPlatformId(model.getId());
                platformDurationVO.setPlatformCode(model.getCode());
                platformDurationVO.setPlatformSort(model.getSortnum());
                PlatformJob job = getJobFromListById(model.getId(),jobList);
                if(job != null){
@@ -1590,6 +1974,9 @@
                curtotalNum += Constants.formatIntegerNum(workEfficiencyVO.getWorkNum()) ;
            }
            workEfficiencyVO.setTotalWorkNum(curtotalNum);//累计值
            if(System.currentTimeMillis() < curTime){
                workEfficiencyVO.setTotalWorkNum(0);
            }
            workEfficiencyVOList.add(workEfficiencyVO);
        }
        return workEfficiencyVOList;
@@ -1695,6 +2082,7 @@
                    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.setWorkingCar(data.getWorkingCar()+Constants.formatIntegerNum(model.getCountum()));
                }
                // 作业完成(预约车、签到数、已叫号、作业车、已完成)
                if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.DONE.getKey())){
@@ -1720,7 +2108,7 @@
                }
                // 已离园
                if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.LEAVED.getKey())){
                    data.setWorkingCar(data.getWorkingCar()+Constants.formatIntegerNum(model.getCountum()));
                    // data.setWorkingCar(data.getWorkingCar()+Constants.formatIntegerNum(model.getCountum()));
                }
                // 已过号(预约车、签到数、排队车)
                if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.OVER_NUMBER.getKey())){
@@ -1745,4 +2133,604 @@
        return  data;
    }
    /**
     * 查询能耗用电信息  1=今日;2=本月;3=昨日
     * @return
     */
    @Override
    public List<RegionDataRankingDataResponse> getRegionDataRanking(Integer type){
        RegionDataRankingDataRequest request = new RegionDataRankingDataRequest();
        request.setMeterType(1);
        if(Constants.equalsInteger(type,Constants.ONE)){
            request.setDate(DateUtil.getFomartDate(new Date(),"yyyy-MM-dd"));
            request.setPeriodType("day");
        }else if(Constants.equalsInteger(type,Constants.TWO)){
            request.setDate(DateUtil.getFomartDate(new Date(),"yyyy-MM"));
            request.setPeriodType("month");
        }else{
            request.setDate(DateUtil.getBeforDay(new Date(),1));
            request.setPeriodType("day");
        }
        BaseResponse<List<RegionDataRankingDataResponse>> response = HKService.regionDataRanking(request);
        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null ){
            List<RegionDataRankingDataResponse> regionDataRankingDataResponseList = new ArrayList<>();
            for (RegionDataRankingDataResponse regionDataRankingDataResponse:response.getData()) {
                if(StringUtils.isNotBlank(regionDataRankingDataResponse.getPercent())){
                    if(Constants.equalsInteger(Integer.valueOf(new BigDecimal(regionDataRankingDataResponse.getPercent()).intValue()),Constants.ONE)){
                        continue;
                    }
                    regionDataRankingDataResponseList.add(regionDataRankingDataResponse);
                }
            }
            return regionDataRankingDataResponseList;
        }else{
            return null;
        }
    }
    /**
     * 出库能力
     * @return
     */
    @Override
    public WholeProvinceZXTVO outAbilityUseRate(){
        WholeProvinceZXTVO result = new WholeProvinceZXTVO();
        result.setCurrentNum(new BigDecimal(0));
        result.setTotalNum(new BigDecimal(0));
        result.setUseRate(new BigDecimal(0));
        result.setDetailList(new ArrayList<>());
        List<TmsFactoryParam> paramList = factoryList();
        List<WholeProvinceZxtDetailVO> list = new ArrayList<>();
        TmsOutQtyAndVehicleQtyRequest param = new TmsOutQtyAndVehicleQtyRequest();
        if(paramList!=null){
            String startDate = DateUtil.formatDate(new Date(),"yyyy-MM-dd");
            String endDate = DateUtil.formatDate(new Date(),"yyyy-MM-dd");
            if(isDebug){
                  startDate =  "2024-12-01";
                  endDate =   "2024-12-05";
            }
            for(TmsFactoryParam p : paramList){
                WholeProvinceZxtDetailVO t = new WholeProvinceZxtDetailVO();
                t.setFactoryName(p.getName());
                t.setCurrentNum(new BigDecimal(0));
                t.setUseRate(new BigDecimal(0));
                t.setTotalNum(Constants.formatBigdecimal(p.getParam3()));//8小时出库能力
                if(StringUtils.isNotBlank(p.getCode())){
                    param.setFacrotyCodeList(new ArrayList<>());
                    param.setDateStart(startDate);
                    param.setDateEnd(endDate);
                    param.getFacrotyCodeList().add(p.getCode());
                    List<TmsOutQtyAndVehicleQtyResponse> response = tmsService.getOutQtyAndVehicleQty(param);//查询出库量
                    t.setCurrentNum(getCurrentOutQryByList(response));
                    if(t.getTotalNum().compareTo(new BigDecimal(0)) !=0){
                        t.setUseRate(t.getCurrentNum().divide(t.getTotalNum(),4,BigDecimal.ROUND_HALF_UP));
                    }
                    if(Constants.UNIT_TYPE == 1) {
                        //处理单位成“箱”,一箱=5万支
                        t.setCurrentNum(Constants.formatBigdecimal(t.getCurrentNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
                        t.setTotalNum(Constants.formatBigdecimal(t.getTotalNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
                    }
                }
                result.getDetailList().add(t);
                result.setCurrentNum(result.getCurrentNum().add(t.getCurrentNum()));
                result.setTotalNum(result.getTotalNum().add(t.getTotalNum()));
            }
        }
        if(result.getTotalNum().compareTo(new BigDecimal(0)) !=0){
            result.setUseRate(result.getCurrentNum().divide(result.getTotalNum(),4,BigDecimal.ROUND_HALF_UP));
        }
        return result;
    }
    /**
     * 全身出库能力
     * @return
     */
    @Override
    public  WholeProvinceBoardVO centerProvinceData(String  factoryCode){
        WholeProvinceBoardVO data = new WholeProvinceBoardVO();
        data.setMaxAbility(new BigDecimal(0));
        data.setHoursAbility(new BigDecimal(0));
        data.setCurrentPlanNum(new BigDecimal(0));
        data.setCurrentOrderNum(new BigDecimal(0));
        data.setNoNeedTransportOrderNum(new BigDecimal(0));
        data.setNeedTransportOrderNum(new BigDecimal(0));
        data.setCurrentOrderNum(new BigDecimal(0));
        data.setCrrentRestNum(new BigDecimal(0));
        data.setCrrentOutNum(new BigDecimal(0));
        List<TmsFactoryParam> paramList = factoryList();
        String code = null;
        if(paramList!=null){
            //处理最大出库能力和8小时出库能力
            for(TmsFactoryParam param : paramList){
                if(StringUtils.isNotBlank(factoryCode)){
                    if(StringUtils.equals(param.getCode(),factoryCode)){
                        data.setHoursAbility(Constants.formatBigdecimal(param.getParam3()));
                        data.setMaxAbility(Constants.formatBigdecimal(param.getNum2()));
                        code = param.getCode();
                        break;
                    }
                }else{
                    data.setHoursAbility(data.getHoursAbility().add(Constants.formatBigdecimal(param.getParam3())));
                    data.setMaxAbility(data.getMaxAbility().add(Constants.formatBigdecimal(param.getNum2())));
                }
            }
        }
      /*  Date date = new Date();
        TmsOutQtyAndVehicleQtyRequest param = new TmsOutQtyAndVehicleQtyRequest();
        param.setDateEnd(DateUtil.getShortTime(date));
        param.setDateStart(DateUtil.getShortTime(date));
        if(StringUtils.isNotBlank(code)){
            param.setFacrotyCodeList(new ArrayList<>());
            param.getFacrotyCodeList().add(code);//查询指定厂区
        }
        List<TmsOutQtyAndVehicleQtyResponse> listSame=  tmsService.getOutQtyAndVehicleQty(param);
        if(listSame!=null ){
            for(TmsOutQtyAndVehicleQtyResponse model : listSame){
                data.setCrrentOutNum(data.getCrrentOutNum().add(Constants.formatBigdecimal(model.getTotalOutQty())));//今日出库量
                data.setCrrentOutCarNum(data.getCrrentOutCarNum()+(Constants.formatIntegerNum(model.getVehicleQty())));//今日出库车次
            }
        }*/
        initOutboundCapability(data,factoryCode);
        return  data;
    }
    private void initOutboundCapability(WholeProvinceBoardVO data, String code) {
        TmsFacrotyCodeListRequest param = new TmsFacrotyCodeListRequest();
        if(StringUtils.isNotBlank(code)){
            param.setFacrotyCodeList(new ArrayList<>());
            param.getFacrotyCodeList().add(code);
        }
        TmsOutboundCapabilityResponse result=  tmsService.getOutboundCapability(param);
        if(result !=null){
            String todayDate = DateUtil.getShortTime(new Date());
            List<String> planCodes = new ArrayList<>();
            List<String> todayCodes = new ArrayList<>();
            if(result.getCurrentDayOrderList()!=null && result.getCurrentDayOrderList().size()>0){
                for(TmsOutboundCapabilityInfoResponse model :result.getCurrentDayOrderList()){
                    dealOutOrderBiz(data,model,planCodes,todayCodes,todayDate);
                }
            }
            if(result.getCurrentDayAgoOrderList()!=null && result.getCurrentDayAgoOrderList().size()>0){
                for(TmsOutboundCapabilityInfoResponse model :result.getCurrentDayAgoOrderList()){
                    dealOutOrderBiz(data,model,planCodes,todayCodes,todayDate);
                }
            }
            data.setCurrentPlanCarNum(planCodes.size());//今日任务车次
            data.setCrrentOutCarNum(todayCodes.size());//今日出库车次
        }
//        data.setCrrentRestNum(data.getCurrentPlanNum().subtract(data.getCrrentOutNum()));
//        data.setCrrentRestCarNum(data.getCurrentPlanCarNum() -data.getCrrentOutCarNum());
        data.setCrrentRestNum(data.getCurrentPlanNum());
        data.setCrrentRestCarNum(data.getCurrentPlanCarNum());
        if(data.getCrrentRestNum().compareTo(new BigDecimal(0)) <=0){
            data.setCrrentRestNum(new BigDecimal(0));
        }
        if(data.getCrrentRestCarNum()<=0){
            data.setCrrentRestCarNum(0);
        }
        //处理单位成“箱”,一箱=5万支
        if(Constants.UNIT_TYPE == 1) {
            data.setMaxAbility(Constants.formatBigdecimal(data.getMaxAbility()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setHoursAbility(Constants.formatBigdecimal(data.getHoursAbility()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setCrrentRestNum(Constants.formatBigdecimal(data.getCrrentRestNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setCurrentPlanNum(Constants.formatBigdecimal(data.getCurrentPlanNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setCrrentOutNum(Constants.formatBigdecimal(data.getCrrentOutNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setCurrentOrderNum(Constants.formatBigdecimal(data.getCurrentOrderNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setNoNeedTransportOrderNum(Constants.formatBigdecimal(data.getNoNeedTransportOrderNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setNeedTransportOrderNum(Constants.formatBigdecimal(data.getNeedTransportOrderNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
        }
    }
    /**
     * 1、当前订单里:截止目前未配载订单量;
     * 2、当前任务量:截止目前已配载未出库订单量+无需配载的未出库任务量;
     * 3、当前任务量和剩余任务量统计逻辑一致;
     * @param data
     * @param model
     */
    private void dealOutOrderBiz(WholeProvinceBoardVO data, TmsOutboundCapabilityInfoResponse model,List<String> planCodes,List<String> todayCodes,  String todayDate ) {
        /**
         * 当前订单量:截至目前未配载的数据
         */
        if(StringUtils.isBlank(model.getTransportCode())
                &&( StringUtils.equals("1",model.getDispatchType()) || StringUtils.equals("2",model.getDispatchType()))){
            data.setCurrentOrderNum(data.getCurrentOrderNum().add(Constants.formatBigdecimal(model.getNcTotality())));//当前订单量
        }
        /**
         * 当前任务量(和剩余任务里):截至目前已配载未出库的订单
         */
        if(StringUtils.isNotBlank(model.getTransportCode()) && StringUtils.isBlank(model.getOutDate())){
            data.setCurrentPlanNum(data.getCurrentPlanNum().add(Constants.formatBigdecimal(model.getNcTotality())));//当前任务量(累计)
            data.setNeedTransportOrderNum(data.getNeedTransportOrderNum().add(Constants.formatBigdecimal(model.getNcTotality())));//同城剩余任务量(累计)
            if(notInList(model.getTransportCode(),planCodes)){
                planCodes.add(model.getTransportCode());
            }
        }
        /**
         *   同城单子(无需配载但是未完成)
         */
        if(StringUtils.isBlank(model.getOutDate())
                && !StringUtils.equals("1",model.getDispatchType()) && !StringUtils.equals("2",model.getDispatchType())){
            data.setNoNeedTransportOrderNum(data.getNoNeedTransportOrderNum().add(Constants.formatBigdecimal(model.getNcTotality())));//同城剩余任务量(累计)
            data.setCurrentPlanNum(data.getCurrentPlanNum().add(Constants.formatBigdecimal(model.getNcTotality())));//当前任务量(累计)
        }
        /**
         * 今日出库量,出库时间为今天的
         */
        if(StringUtils.isNotBlank(model.getOutDate()) && model.getOutDate().length()> 10){
            String tDate = model.getOutDate().substring(0,10);
            if(tDate.equals(todayDate)){
                //如果是当日
                data.setCrrentOutNum(data.getCrrentOutNum().add(Constants.formatBigdecimal(model.getNcTotality())));//今日出库量
                if(StringUtils.isNotBlank(model.getTransportCode()) && notInList(model.getTransportCode(),todayCodes)){
                    todayCodes.add(model.getTransportCode());
                }
            }
        }
    }
    private boolean notInList(String transportCode, List<String> planCodes) {
        for(String s :planCodes){
            if(StringUtils.equals(transportCode,s)){
                return  false;
            }
        }
        return true;
    }
    /**
     * 出库能力李永利
     * @return
     */
    @Override
    public    TotalOutQtyNumVO totalOutQtyNum(int type,String code){
        TotalOutQtyNumVO  data = new TotalOutQtyNumVO();
        data.setCurrentInNum(new BigDecimal(0));
        data.setLastInNum(new BigDecimal(0));
        data.setCurrentProvinceNum(new BigDecimal(0));
        data.setCurrentOtherNum(new BigDecimal(0));
        data.setSameInNum(new BigDecimal(0));
        //---------省外----------------
        data.setCurrentOutNum(new BigDecimal(0));
        data.setLastOutNum(new BigDecimal(0));
        data.setSameOutNum(new BigDecimal(0));
        Date sameStart = DateUtil.getBeginDayOfMonth(-1);
        Date sameEnd = DateUtil.getEndDayOfMonth(-1);
        Date curStart = DateUtil.getBeginDayOfMonth(0);
        Date curEnd = DateUtil.getEndDayOfMonth(0);
        Date lastStart = DateUtil.getBeginDayOfLastMonth();
        Date lastEnd = DateUtil.getEndDayOfLastMonth();
        if(type ==1){
            //本周
            sameStart= DateUtil.getBeginDayOfWeek(-1);
            sameEnd= DateUtil.getEndDayOfWeek(-1);
            curStart= DateUtil.getBeginDayOfWeek(0);
            curEnd= DateUtil.getEndDayOfWeek(0);
            lastStart = DateUtil.getBeginDayOfLastWeek();
            lastEnd= DateUtil.getEndDayOfLastWeek();
        }else if(type == 2){
            curStart= DateUtil.getBeginDayOfYear(0);
            curEnd= DateUtil.getEndDayOfYear(0);
            lastStart= DateUtil.getBeginDayOfYear(-1);
            lastEnd= DateUtil.getEndDayOfYear(-1);
            sameStart = null;
            sameEnd =null;
        }
        TmsOutQtyAndVehicleQtyRequest param = new TmsOutQtyAndVehicleQtyRequest();
        if(StringUtils.isNotBlank(code)){
            param.setFacrotyCodeList(new ArrayList<>());
            param.getFacrotyCodeList().add(code);
        }
        if(type !=2){
            //本年的不需要查去年同周期
            param.setDateEnd(DateUtil.getShortTime(sameEnd));
            param.setDateStart(DateUtil.getShortTime(sameStart));
            List<TmsOutQtyAndVehicleQtyResponse> listSame=  tmsService.getOutQtyAndVehicleQty(param);//去年同期
            if(listSame!=null ){
                for(TmsOutQtyAndVehicleQtyResponse model : listSame){
                    model.setOutSideProvinceOutQty(Constants.formatBigdecimal(model.getOutSideProvinceOutT03Qty()).add(Constants.formatBigdecimal(model.getOutSideProvinceOutT01Qty())));//省外累计
                    model.setInSideProvinceOutQty(Constants.formatBigdecimal(model.getInSideProvinceOutT03Qty()).add(Constants.formatBigdecimal(model.getInSideProvinceOutT01Qty())));//省内累计
                    data.setSameOutNum(data.getSameOutNum().add(Constants.formatBigdecimal(model.getOutSideProvinceOutQty())));
                    data.setSameInNum(data.getSameInNum().add(Constants.formatBigdecimal(model.getInSideProvinceOutQty())));
                }
            }
        }
        param.setDateEnd(DateUtil.getShortTime(curEnd));
        param.setDateStart(DateUtil.getShortTime(curStart));
        List<TmsOutQtyAndVehicleQtyResponse> listCur =  tmsService.getOutQtyAndVehicleQty(param);//本周期
        if(listCur!=null ){
            for(TmsOutQtyAndVehicleQtyResponse model : listCur){
                model.setOutSideProvinceOutQty(Constants.formatBigdecimal(model.getOutSideProvinceOutT03Qty()).add(Constants.formatBigdecimal(model.getOutSideProvinceOutT01Qty())));//省外累计
                model.setInSideProvinceOutQty(Constants.formatBigdecimal(model.getInSideProvinceOutT03Qty()).add(Constants.formatBigdecimal(model.getInSideProvinceOutT01Qty())));//省内累计
                data.setCurrentOutNum(data.getCurrentOutNum().add(Constants.formatBigdecimal(model.getOutSideProvinceOutQty())));
                data.setCurrentInNum(data.getCurrentInNum().add(Constants.formatBigdecimal(model.getInSideProvinceOutQty())));
                data.setTotalCarNum(data.getTotalCarNum()+Constants.formatIntegerNum(model.getVehicleQty()));//累计车次
                data.setCurrentProvinceNum(data.getCurrentProvinceNum().add(model.getOutSideProvinceOutQty()).add(model.getInSideProvinceOutT01Qty()));//省内省外销售量
                data.setCurrentOtherNum(data.getCurrentOtherNum().add(model.getOutSideProvinceOutT03Qty()).add(model.getInSideProvinceOutT03Qty()));//省内省外其他出库量
            }
        }
        param.setDateEnd(DateUtil.getShortTime(lastEnd));
        param.setDateStart(DateUtil.getShortTime(lastStart));
        List<TmsOutQtyAndVehicleQtyResponse> listLast =  tmsService.getOutQtyAndVehicleQty(param);//上周期
        if(listCur!=null ){
            for(TmsOutQtyAndVehicleQtyResponse model : listLast){
                model.setOutSideProvinceOutQty(Constants.formatBigdecimal(model.getOutSideProvinceOutT03Qty()).add(Constants.formatBigdecimal(model.getOutSideProvinceOutT01Qty())));//省外累计
                model.setInSideProvinceOutQty(Constants.formatBigdecimal(model.getInSideProvinceOutT03Qty()).add(Constants.formatBigdecimal(model.getInSideProvinceOutT01Qty())));//省内累计
                data.setLastOutNum(data.getLastOutNum().add(Constants.formatBigdecimal(model.getOutSideProvinceOutQty())));
                data.setLastInNum(data.getLastInNum().add(Constants.formatBigdecimal(model.getInSideProvinceOutQty())));
            }
        }
        if(type == 2){//本年的
            data.setSameOutNum(data.getLastOutNum());
            data.setSameInNum(data.getLastInNum());
        }
        //处理单位成“箱”,一箱=5万支
        if(Constants.UNIT_TYPE == 1) {
            data.setCurrentInNum(Constants.formatBigdecimal(data.getCurrentInNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setCurrentOutNum(Constants.formatBigdecimal(data.getCurrentOutNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setCurrentOtherNum(Constants.formatBigdecimal(data.getCurrentOtherNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setCurrentProvinceNum(Constants.formatBigdecimal(data.getCurrentProvinceNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setLastInNum(Constants.formatBigdecimal(data.getLastInNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setLastOutNum(Constants.formatBigdecimal(data.getLastOutNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setSameInNum(Constants.formatBigdecimal(data.getSameInNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
            data.setSameOutNum(Constants.formatBigdecimal(data.getSameOutNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
        }
        return data;
    }
    /**
     * 出库能力李永利
     * @return
     */
    @Override
    public    List<WholeProvinceMapVO> mapYearAndMonthOutList(String code){
        List<WholeProvinceMapVO> result = new ArrayList<>();
        TmsFacrotyCodeListRequest param = new TmsFacrotyCodeListRequest();
        if(StringUtils.isNotBlank(code)){
            param.setFacrotyCodeList(new ArrayList<>());
            param.getFacrotyCodeList().add(code);
        }
        List<TmsDistributionOfDeliveryLocResponse> response  = tmsService.getDistributionOfDeliveryLocations(param);//查询出库量
        if(response!=null &&response.size()>0){
            for(TmsDistributionOfDeliveryLocResponse model : response){
                WholeProvinceMapVO t = getFromProvinceResultList(model ,result);
                if(t == null){
                    t =new WholeProvinceMapVO();
                    t.setMonthNum( Constants.formatBigdecimal0Float(model.getMonthOutboundQuantity()));
                    t.setYearNum( Constants.formatBigdecimal0Float(model.getYearOutboundQuantity()));
                    if(Constants.UNIT_TYPE == 1) {
                        //处理单位成“箱”,一箱=5万支
                        t.setMonthNum(Constants.formatBigdecimal(t.getMonthNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
                        t.setYearNum(Constants.formatBigdecimal(t.getYearNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
                    }
                    t.setProvinceCode(model.getToProvinceCode());
                    t.setProvinceName(model.getToProvinceName());
                    result.add(t);
                }
            }
        }
        return result;
    }
    private WholeProvinceMapVO getFromProvinceResultList(TmsDistributionOfDeliveryLocResponse model, List<WholeProvinceMapVO> result) {
        for(WholeProvinceMapVO t : result){
            if(StringUtils.equals(t.getProvinceCode(), model.getToProvinceCode())){
                t.setMonthNum(Constants.formatBigdecimal(t.getMonthNum()).add(Constants.formatBigdecimal0Float(model.getMonthOutboundQuantity())));
                t.setYearNum(Constants.formatBigdecimal(t.getYearNum()).add(Constants.formatBigdecimal0Float(model.getYearOutboundQuantity())));
                return   t;
            }
        }
        return  null;
    }
    /**
     * 出库能力李永利
     * @return
     */
    @Override
    public     List<TmsFactoryParam> factoryList(){
        List<TmsFactoryParam> paramList = tmsFactoryParamMapper.selectList(new QueryWrapper<TmsFactoryParam>().lambda()
                .eq(TmsFactoryParam::getIsdeleted,Constants.ZERO)
                .orderByAsc(TmsFactoryParam::getSortnum));
        return paramList;
    }
    /**
     * 获取未完成订单集合
     * @return TmsBaseResponse
     */
    @Override
    public   TmsBasePageResponse<TmsOrderNoFinishListResponse>  orderNoFinishList(TmsOrderNoFinishListRequest param){
        TmsBasePageResponse<TmsOrderNoFinishListResponse> infoList =   tmsService.getNotFinishOrderList(param);//查询出库量
     /*    if(infoList!=null && infoList.getRows()!=null){
            for(TmsOrderNoFinishListResponse model :infoList.getRows()){
                model.setStatusDesc(TMSContants.TopStatusLevel.getNameByKey(TMSContants.ChildStatusLevel.getParentIndexByStatus(model.getStatus())));
            }
        }*/
        return infoList;
    }
    /**
     * 近七日到货情况
     * @return
     */
    @Override
    public  List<LastSevenDaysOrderVo> arriveGoodsList(String code){
        List<LastSevenDaysOrderVo> list = new ArrayList<>();
        TmsSevenArrivalDetailsRequest param = new TmsSevenArrivalDetailsRequest();
        if(StringUtils.isNotBlank(code)){
            param.setFacrotyCodeList(new ArrayList<>());
            param.getFacrotyCodeList().add(code);//查询指定厂区
        }
        Date date = new Date();
        Date startDate = DateUtil.addDaysToDate(date,-7);
        //看板大屏近7日到货情况日期 0表示当天当前推7天,-1表示本月初1号-7号
        String flag = systemDictDataBiz.queryByCode(Constants.TSM_PARAM,Constants.SCREEN_SEVENT_ARRIVAL_STARTDATE).getCode();
        if(StringUtils.equals(flag,"-1")){
            startDate =DateUtil.getBeginDayOfMonth(0);
            date = DateUtil.addDaysToDate(startDate,7);
        }
        param.setNcCreateDateFrom(DateUtil.getShortTime(startDate));
        param.setNcCreateDateThrough(DateUtil.getShortTime(date));
        List<TmsSevenArrivalStatusAndDetailsResponse> infoList =   tmsService.getSevenArrivalStatusAndDetails(param);//查询出库量
        for (int i = 0; i < 7; i++) {
            LastSevenDaysOrderVo model = new LastSevenDaysOrderVo();
            Date td = DateUtil.addDaysToDate(date,-i);
            model.setDateStr(DateUtil.getShortTime(td));
            dealGoodsListFromResponse(model,infoList);
            list.add(model);
        }
        return list;
    }
    private void dealGoodsListFromResponse(  LastSevenDaysOrderVo model, List<TmsSevenArrivalStatusAndDetailsResponse> list) {
        model.setIngList(new ArrayList<>());
        model.setWaitList(new ArrayList<>());
        model.setDoneList(new ArrayList<>());
        if(list ==null || list.size()==0){
            return;
        }
        for(TmsSevenArrivalStatusAndDetailsResponse temp : list){
            if(StringUtils.equals(temp.getNcCreateDate(),model.getDateStr())){
                if(Constants.equalsInteger(temp.getStatus(),Constants.ZERO)){
                    model.getWaitList().add(temp);
                }else if(Constants.equalsInteger(temp.getStatus(),Constants.ONE)){
                    model.getIngList().add(temp);
                }else if(Constants.equalsInteger(temp.getStatus(),Constants.TWO)){
                    model.getDoneList().add(temp);
                }
            }
        }
        model.setDoneNum(model.getDoneList().size());
        model.setIngNum(model.getIngList().size());
        model.setWaitNum(model.getWaitList().size());
    }
    /**
     * 出库能力李永利
     * @return
     */
    @Override
    public WholeProvinceZXTVO tranportAbilityUseRate(){
        WholeProvinceZXTVO result = new WholeProvinceZXTVO();
        result.setCurrentNum(new BigDecimal(0));
        result.setTotalNum(new BigDecimal(0));
        result.setZtNum(new BigDecimal(0));
        result.setUseRate(new BigDecimal(0));
        result.setDetailList(new ArrayList<>());
        List<TmsFactoryParam> paramList =factoryList();
        if(paramList!=null){
            List<TmsTotalAndReportVehicleQtyResponse> response = tmsService.getTotalAndReportVehicleQty();//查询出库量
            for(TmsFactoryParam p : paramList){
                WholeProvinceZxtDetailVO t = new WholeProvinceZxtDetailVO();
                t.setFactoryName(p.getName());
                t.setCurrentNum(new BigDecimal(0));
                t.setZaituNum(new BigDecimal(0));
                t.setTotalNum(Constants.formatBigdecimal(p.getNum1()));//总库存量
                getFromReportVehicleQtyList(p.getCode(),t,response);//处理提报运力和总运力数据
                t.setUseRate(new BigDecimal(0));
                if((t.getTotalNum().subtract(t.getZaituNum())).compareTo(new BigDecimal(0)) !=0){
                    t.setUseRate(t.getCurrentNum().divide(t.getTotalNum().subtract(t.getZaituNum()),4,BigDecimal.ROUND_HALF_UP));
                }
                /*if(Constants.UNIT_TYPE == 1) {
                    //处理单位成“箱”,一箱=5万支
                    t.setCurrentNum(Constants.formatBigdecimal(t.getCurrentNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
                    t.setTotalNum(Constants.formatBigdecimal(t.getTotalNum()).divide(new BigDecimal(5), 2, BigDecimal.ROUND_HALF_UP));
                }*/
                result.getDetailList().add(t);
                result.setCurrentNum(result.getCurrentNum().add(t.getCurrentNum()));
                result.setTotalNum(result.getTotalNum().add(t.getTotalNum()));
                result.setZtNum(result.getZtNum().add(t.getZaituNum()));
            }
        }
        if((result.getTotalNum().subtract(result.getZtNum())).compareTo(new BigDecimal(0)) !=0){
            result.setUseRate(result.getCurrentNum().divide(result.getTotalNum().subtract(result.getZtNum()),4,BigDecimal.ROUND_HALF_UP));
        }
        return result;
    }
    private void getFromReportVehicleQtyList(String code,WholeProvinceZxtDetailVO t, List<TmsTotalAndReportVehicleQtyResponse> responses) {
        BigDecimal current = new BigDecimal(0);
        BigDecimal total= new BigDecimal(0);
        BigDecimal ztTotal= new BigDecimal(0);
        if(responses!=null && responses.size()>0){
            for(TmsTotalAndReportVehicleQtyResponse model: responses){
                if(StringUtils.equals(model.getFactoryCode(),code)){
                    ztTotal = ztTotal.add(Constants.formatBigdecimal(model.getInTransitQty()));
                    total = total.add(Constants.formatBigdecimal(model.getTotalQty()));
                    current = current.add(Constants.formatBigdecimal(model.getReportQty()));
                }
            }
        }
        t.setCurrentNum(current);
        t.setZaituNum(ztTotal);
        t.setTotalNum(total);
    }
    private BigDecimal getCurrentOutQryByList(List<TmsOutQtyAndVehicleQtyResponse> response) {
        BigDecimal r = new BigDecimal(0);
        if(response!=null && response.size()>0){
            for(TmsOutQtyAndVehicleQtyResponse model: response){
//                model.setTotalOutQty(Constants.formatBigdecimal(model.getTotalOutT03Qty()).add(Constants.formatBigdecimal(model.getTotalOutT01Qty())));
                r = r.add(Constants.formatBigdecimal(model.getTotalOutQty()));
            }
        }
        return r ;
    }
    /**
     * 仓库资源利用率
     * @return
     */
    @Override
    public WholeProvinceZXTVO inventoryUseRate(){
        WholeProvinceZXTVO result = new WholeProvinceZXTVO();
        result.setCurrentNum(new BigDecimal(0));
        result.setTotalNum(new BigDecimal(0));
        result.setUseRate(new BigDecimal(0));
        result.setDetailList(new ArrayList<>());
        List<TmsFactoryParam> paramList = factoryList();
        List<TmsInventoryListResponse> responses = tmsService.getRealTimeInventory();
        if(paramList!=null){
            for(TmsFactoryParam p : paramList){
                WholeProvinceZxtDetailVO t = new WholeProvinceZxtDetailVO();
                t.setFactoryName(p.getName());
                t.setCurrentNum(new BigDecimal(0));
                t.setTotalNum(Constants.formatBigdecimal(p.getNum1()));//总库存量
                t.setCurrentNum(getFromInventoryList(p.getCode(),responses));
                t.setUseRate(new BigDecimal(0));
                if(t.getTotalNum().compareTo(new BigDecimal(0)) !=0){
                    t.setUseRate(t.getCurrentNum().divide(t.getTotalNum(),4,BigDecimal.ROUND_HALF_UP));
                }
                if(Constants.UNIT_TYPE == 1){
                    //处理单位成“箱”,一箱=5万支
                    t.setCurrentNum(Constants.formatBigdecimal(t.getCurrentNum()).divide(new BigDecimal(5),2,BigDecimal.ROUND_HALF_UP));
                    t.setTotalNum(Constants.formatBigdecimal(t.getTotalNum()).divide(new BigDecimal(5),2,BigDecimal.ROUND_HALF_UP));
                }
                result.getDetailList().add(t);
                result.setCurrentNum(result.getCurrentNum().add(t.getCurrentNum()));
                result.setTotalNum(result.getTotalNum().add(t.getTotalNum()));
            }
        }
        if(result.getTotalNum().compareTo(new BigDecimal(0)) !=0){
            result.setUseRate(result.getCurrentNum().divide(result.getTotalNum(),4,BigDecimal.ROUND_HALF_UP));
        }
        return result;
    }
    private BigDecimal getFromInventoryList(String code, List<TmsInventoryListResponse> responses) {
        BigDecimal r = new BigDecimal(0);
        if(responses!=null && responses.size()>0){
            for(TmsInventoryListResponse model: responses){
                if(StringUtils.equals(model.getFactoryCode(),code)){
                   r = r.add(Constants.formatBigdecimal(model.getStockQty()));
                }
            }
        }
        return r ;
    }
}