czt
2026-01-19 0329de5a2343a179be54a9c70844515db202a998
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SuperInventoryReportService.java
@@ -45,10 +45,9 @@
    /**
     * 查询报表数据
     *
     * @param param
     * @author sgj
     * @date 2025/12/19
     * @param param
     */
    public List<SuperInventoryReportData> listSuperInventoryReportData(SuperInventoryReportParam param) {
        //1.获取查询得起止时间,如果没有则,默认截止时间为当天,起始时间为30天前
@@ -66,12 +65,27 @@
        //默认库区编码
        String deptId = ContextUtil.subDeptId(null);
        param.setCompanyId(companyId);
        //region 查询条件收储公司和所属库区处理
        if (StringUtils.isNotEmpty(param.getDeptId()) && StringUtils.isNotEmpty(param.getCustomerId())) {
            String substring = param.getDeptId().substring(0, (param.getDeptId().length() - 3));
            if (!substring.equals(param.getCustomerId())) {
                return new ArrayList<SuperInventoryReportData>();
            }
        }
        if (StringUtils.isEmpty(param.getDeptId())) {
            param.setDeptId(param.getCustomerId());
        }
        //test提交
        //收储公司,所属库区查询均为空,则查询默认库区
        if (StringUtils.isEmpty(param.getCustomerId()) && StringUtils.isEmpty(param.getDeptId())) {
            param.setDeptId(deptId);
        }
        //endregion
        //region 初始化需要范围的数据
        Map<String, SuperInventoryReportData> resultMap = new HashMap<>();
        Map<String, SuperInventoryReportData> columsMap = new HashMap<>();
        //查询当前用户下属的所有库区
        List<Dept> deptList = coreDeptService.getDeptData();
        if (null == deptList || deptList.isEmpty()) {
@@ -79,10 +93,12 @@
        }
        //预加载所有部门下的仓库信息,减少重复查询
        Map<String, Dept> deptCache = new HashMap<>();
        Map<String, List<Depot>> deptDepotsMap = new HashMap<>();
        Map<String, Company> companyCache = new HashMap<>();
        for (Dept dept : deptList) {
            deptCache.put(dept.getId(), dept);
            //获取库区下所有仓库
            List<Depot> depotList = depotService.getData(companyId, dept.getId(), true);
            if (null == depotList || depotList.isEmpty()) {
@@ -99,27 +115,30 @@
            }
        }
        //构建结果数据
        //构建结果数据映射map
        for (Map.Entry<String, List<Depot>> entry : deptDepotsMap.entrySet()) {
            String deptIdKey = entry.getKey();
            Company company = companyCache.get(deptIdKey.substring(0, deptIdKey.length() - 3));
            Dept dept = deptCache.get(deptIdKey);
            for (Depot depot : entry.getValue()) {
                //库区编码+仓库编码组成唯一键
                String key = deptIdKey + "_" + depot.getId();
                SuperInventoryReportData data = new SuperInventoryReportData();
                data.setCustomerName(Optional.ofNullable(company)
                data.setCustomerId(Optional.ofNullable(company)
                        .map(Company::getId)
                        .orElse("-"));
                data.setCustomerName(Optional.ofNullable(company)
                        .map(Company::getDwmc)
                        .orElse("-"));
                data.setDeptId(deptIdKey);
                data.setDeptName(dept.getKqmc());
                data.setDepotId(depot.getId());
                resultMap.put(key, data);
                data.setDepotName(depot.getName());
                columsMap.put(key, data);
            }
        }
        //endregion
        if (resultMap.isEmpty()) {
        if (columsMap.isEmpty()) {
            return new ArrayList<>();
        }
@@ -137,10 +156,11 @@
                .collect(Collectors.groupingBy(record -> record.getDeptId() + "_" + record.getDepotId()));
        //4. 根据库区、仓库为唯一键,组装报表数据
        List<SuperInventoryReportData> result = new ArrayList<>();
        Date todayZero = DateUtil.getCurZero(new Date());
        boolean isEndDateBeforeToday = param.getEnd().before(todayZero);
        for (SuperInventoryReportData data : resultMap.values()) {
        for (SuperInventoryReportData data : columsMap.values()) {
            String dataKey = data.getDeptId() + "_" + data.getDepotId();
            //获取库存数据
@@ -227,9 +247,15 @@
            data.setChangeOutWeight(sumStockChangeOut);
            data.setLossWeight(sumLossOver);
            data.setFinalWeight(finalWeight);
            result.add(data);
        }
        return new ArrayList<>(resultMap.values());
        if(result.isEmpty()){
            //没有数据时将columsMap中的数据添加到result中作为默认数据
            result.addAll(columsMap.values());
        }
        return result;
    }
    /**
@@ -238,8 +264,11 @@
    private List<DepotStore> queryDepotStores(SuperInventoryReportParam param) {
        QueryWrapper<DepotStore> depotStoreQueryWrapper = new QueryWrapper<>();
        depotStoreQueryWrapper.eq("company_id", param.getCompanyId());
        depotStoreQueryWrapper.eq("dept_id", param.getDeptId());
        depotStoreQueryWrapper.between("create_time", param.getStart(), param.getEnd());
        if (StringUtils.isNotBlank(param.getDeptId())) {
            depotStoreQueryWrapper.likeRight("dept_id", param.getDeptId());
        }
        depotStoreQueryWrapper.ge("create_time", param.getStart());
        depotStoreQueryWrapper.le("create_time", param.getEnd());
        depotStoreQueryWrapper.orderByAsc("create_time");
        return depotStoreMapper.selectList(depotStoreQueryWrapper);
    }
@@ -250,8 +279,11 @@
    private List<InoutRecord> queryInoutRecords(SuperInventoryReportParam param) {
        QueryWrapper<InoutRecord> inoutRecordQueryWrapper = new QueryWrapper<>();
        inoutRecordQueryWrapper.eq("company_id", param.getCompanyId());
        inoutRecordQueryWrapper.eq("dept_id", param.getDeptId());
        inoutRecordQueryWrapper.between("create_time", param.getStart(), param.getEnd());
        if (StringUtils.isNotBlank(param.getDeptId())) {
            inoutRecordQueryWrapper.likeRight("dept_id", param.getDeptId());
        }
        inoutRecordQueryWrapper.ge("create_time", param.getStart());
        inoutRecordQueryWrapper.le("create_time", param.getEnd());
        inoutRecordQueryWrapper.orderByAsc("create_time");
        return inoutRecordMapper.selectList(inoutRecordQueryWrapper);
    }
@@ -262,8 +294,11 @@
    private List<InoutStockChange> queryInoutStockChanges(SuperInventoryReportParam param) {
        QueryWrapper<InoutStockChange> inoutStockChangeQueryWrapper = new QueryWrapper<>();
        inoutStockChangeQueryWrapper.eq("company_id", param.getCompanyId());
        inoutStockChangeQueryWrapper.eq("dept_id", param.getDeptId());
        inoutStockChangeQueryWrapper.between("create_time", param.getStart(), param.getEnd());
        if (StringUtils.isNotBlank(param.getDeptId())) {
            inoutStockChangeQueryWrapper.likeRight("dept_id", param.getDeptId());
        }
        inoutStockChangeQueryWrapper.ge("create_time", param.getStart());
        inoutStockChangeQueryWrapper.le("create_time", param.getEnd());
        inoutStockChangeQueryWrapper.orderByAsc("create_time");
        return inoutStockChangeMapper.selectList(inoutStockChangeQueryWrapper);
    }
@@ -274,8 +309,11 @@
    private List<InoutLossOver> queryInoutLossOvers(SuperInventoryReportParam param) {
        QueryWrapper<InoutLossOver> inoutLossOverQueryWrapper = new QueryWrapper<>();
        inoutLossOverQueryWrapper.eq("company_id", param.getCompanyId());
        inoutLossOverQueryWrapper.eq("dept_id", param.getDeptId());
        inoutLossOverQueryWrapper.between("create_time", param.getStart(), param.getEnd());
        if (StringUtils.isNotBlank(param.getDeptId())) {
            inoutLossOverQueryWrapper.likeRight("dept_id", param.getDeptId());
        }
        inoutLossOverQueryWrapper.ge("create_time", param.getStart());
        inoutLossOverQueryWrapper.le("create_time", param.getEnd());
        inoutLossOverQueryWrapper.orderByAsc("create_time");
        return inoutLossOverMapper.selectList(inoutLossOverQueryWrapper);
    }