chen.lin
10 小时以前 9bb62e919e8c85e7cfca55f0af90da5e48dcedeb
查询库存明细-订单号
1个文件已修改
36 ■■■■ 已修改文件
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -929,22 +929,25 @@
                return R.error("查询条件不能为空");
            }
            // 将ERP参数映射为Java实体字段名(驼峰格式),PageParam会自动转换为数据库字段名(下划线格式)
            // 将ERP参数映射为数据库字段名(下划线格式)
            Map<String, Object> queryMap = new HashMap<>();
            // 从实体类中提取查询条件,映射为数据库字段名
            // 从实体类中提取查询条件,映射为真实的数据库字段名
            if (StringUtils.isNotBlank(condition.getLocId())) {
                queryMap.put("locCode", condition.getLocId());
                queryMap.put("loc_code", condition.getLocId());
            }
            if (StringUtils.isNotBlank(condition.getMatNr())) {
                queryMap.put("matnrCode", condition.getMatNr());
                queryMap.put("matnr_code", condition.getMatNr());
            }
            if (StringUtils.isNotBlank(condition.getPlanNo())) {
                queryMap.put("trackCode", condition.getPlanNo());
                queryMap.put("track_code", condition.getPlanNo());
            }
            if (StringUtils.isNotBlank(condition.getBatch())) {
                queryMap.put("batch", condition.getBatch());
            }
            // 注意:orderNo 和 wareHouseId 不在 LocItem 表中,需要通过其他方式查询
            // orderNo 已在后面单独处理(plat_order_code 和 plat_work_code)
            // wareHouseId 需要通过 Loc 表关联查询,已在后面单独处理
            BaseParam baseParam = new BaseParam();
            baseParam.syncMap(queryMap);
@@ -953,10 +956,27 @@
            QueryWrapper<LocItem> wrapper = pageParam.buildWrapper(false);
            // 订单号/工单号/MES工单号
            // 订单号可能存储在:1) LocItem.plat_order_code 2) LocItem.plat_work_code 3) WkOrder.code (通过orderId关联)
            if (StringUtils.isNotBlank(condition.getOrderNo())) {
                String orderNo = condition.getOrderNo();
                wrapper.and(w -> w.eq("plat_order_code", orderNo)
                        .or().eq("plat_work_code", orderNo));
                // 先查询WkOrder表,获取匹配的订单ID列表
                LambdaQueryWrapper<WkOrder> orderWrapper = new LambdaQueryWrapper<>();
                orderWrapper.eq(WkOrder::getCode, orderNo);
                List<WkOrder> matchingOrders = asnOrderService.list(orderWrapper);
                List<Long> matchingOrderIds = matchingOrders.stream()
                        .map(WkOrder::getId)
                        .collect(Collectors.toList());
                // 构建订单号查询条件:LocItem表的plat_order_code、plat_work_code,或通过orderId关联WkOrder.code
                wrapper.and(w -> {
                    w.eq("plat_order_code", orderNo)
                     .or().eq("plat_work_code", orderNo);
                    // 如果找到了匹配的订单,也查询orderId
                    if (!matchingOrderIds.isEmpty()) {
                        w.or().in("order_id", matchingOrderIds);
                    }
                });
            }
            // 物料组(需要通过物料表关联查询)