自动化立体仓库 - WMS系统
zwl
2 天以前 2a2f094b447c604ca2884922586df32f0665b81c
src/main/java/com/zy/asrs/service/impl/OrderDetlPakoutServiceImpl.java
@@ -27,19 +27,40 @@
    }
    @Override
    public OrderDetlPakout selectItem(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3) {
        return this.baseMapper.selectItem(orderId, matnr, batch,brand,standby1,standby2,standby3);
    public OrderDetlPakout selectItem(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3) {
        // 延迟出库后,man_order_detl_pakout 会按托盘拆明细。
        // 旧的 orderId + 物料维度可能命中多条记录,不能再用 mapper 返回单对象的 selectOne 语义。
        // 这里统一改为列表查询并按 id 取第一条,避免 TooManyResultsException;需要精确回写时请优先使用 pallet_id。
        return selectFirst(buildItemWrapper(orderId, null, matnr, batch, brand, standby1, standby2, standby3, boxType1, boxType2, boxType3));
    }
    @Override
    public OrderDetlPakout selectItem(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3) {
        return this.baseMapper.selectItemByOrderNo(orderNo, matnr, batch,brand,standby1,standby2,standby3);
    public OrderDetlPakout selectItem(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3) {
        // 同上,orderNo + 物料维度在新模型中不保证唯一,只作为旧数据的兜底匹配。
        return selectFirst(buildItemWrapper(null, orderNo, matnr, batch, brand, standby1, standby2, standby3, boxType1, boxType2, boxType3));
    }
    @Override
    public OrderDetlPakout findByLook(List<OrderDetlPakout> orderDetls, Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3) {
    public OrderDetlPakout selectItemByOrderNoAndPallet(String orderNo, String palletId) {
        if (Cools.isEmpty(orderNo) || Cools.isEmpty(palletId)) {
            return null;
        }
        // orderNo + palletId 是延迟出库订单明细的精确匹配键。
        // 仍然使用 selectList 取第一条,防止历史脏数据里同一托盘重复时 selectOne 直接中断定时线程。
        EntityWrapper<OrderDetlPakout> wrapper = new EntityWrapper<>();
        wrapper.eq("order_no", orderNo)
                .eq("pallet_id", palletId)
                .orderBy("id", true);
        return selectFirst(wrapper);
    }
    @Override
    public OrderDetlPakout findByLook(List<OrderDetlPakout> orderDetls, Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3) {
        for (OrderDetlPakout orderDetl : orderDetls) {
            if (orderDetl.getOrderId().equals(orderId) && orderDetl.getMatnr().equals(matnr)  && orderDetl.getBrand().equals(brand)  && orderDetl.getStandby1().equals(standby1)  && orderDetl.getStandby2().equals(standby2)  && orderDetl.getStandby3().equals(standby3)) {
            if (orderDetl.getOrderId().equals(orderId) && orderDetl.getMatnr().equals(matnr)  && orderDetl.getBrand().equals(brand)
                    && orderDetl.getStandby1().equals(standby1)  && orderDetl.getStandby2().equals(standby2)  && orderDetl.getStandby3().equals(standby3)
                    && orderDetl.getBoxType1().equals(boxType1)  && orderDetl.getBoxType2().equals(boxType2)  && orderDetl.getBoxType3().equals(boxType3)
            ) {
                if (Cools.eq(batch, orderDetl.getBatch())) {
                    return orderDetl;
                }
@@ -49,15 +70,15 @@
    }
    @Override
    public boolean increase(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, Double qty) {
        return this.baseMapper.increase(orderId, matnr, batch,brand,standby1,standby2,standby3, qty) > 0;
    public boolean increase(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double qty) {
        return this.baseMapper.increase(orderId, matnr, batch,brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, qty) > 0;
    }
    @Override
    public boolean decrease(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3, Double qty) {
        int decrease = this.baseMapper.decrease(orderNo, matnr, batch,brand,standby1,standby2,standby3, qty);
    public boolean decrease(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double qty) {
        int decrease = this.baseMapper.decrease(orderNo, matnr, batch,brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, qty);
        if (decrease == 0) {
            return this.baseMapper.decrease(orderNo, matnr, "",brand,standby1,standby2,standby3, qty) > 0;
            return this.baseMapper.decrease(orderNo, matnr, "",brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, qty) > 0;
        } else {
            return true;
        }
@@ -74,8 +95,20 @@
    }
    @Override
    public boolean increaseQtyByOrderNo(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3, Double qty) {
        return this.baseMapper.increaseQtyByOrderNo(orderNo, matnr, batch,brand,standby1,standby2,standby3, qty) > 0;
    public boolean increaseQtyByOrderNo(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double qty) {
        return this.baseMapper.increaseQtyByOrderNo(orderNo, matnr, batch,brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, qty) > 0;
    }
    @Override
    public boolean increaseQtyByOrderNoAndPallet(String orderNo, String palletId, Double qty) {
        OrderDetlPakout orderDetl = selectItemByOrderNoAndPallet(orderNo, palletId);
        if (orderDetl == null) {
            return false;
        }
        // qty 是完成数量,由任务完成回写递增;workQty 是任务生成数量,定时生成任务时已维护。
        Double oldQty = orderDetl.getQty() == null ? 0.0D : orderDetl.getQty();
        orderDetl.setQty(oldQty + (qty == null ? 0.0D : qty));
        return this.updateById(orderDetl);
    }
    /**
@@ -87,7 +120,35 @@
     * @return
     */
    @Override
    public boolean increaseWorkQty(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, Double workQty) {
        return this.baseMapper.increaseWorkQty(orderId, matnr, batch,brand,standby1,standby2,standby3, workQty) > 0;
    public boolean increaseWorkQty(Long orderId, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double workQty) {
        return this.baseMapper.increaseWorkQty(orderId, matnr, batch,brand,standby1,standby2,standby3,boxType1,boxType2,boxType3, workQty) > 0;
    }
    private EntityWrapper<OrderDetlPakout> buildItemWrapper(Long orderId, String orderNo, String matnr, String batch, String brand,
                                                           String standby1, String standby2, String standby3,
                                                           String boxType1, String boxType2, String boxType3) {
        EntityWrapper<OrderDetlPakout> wrapper = new EntityWrapper<>();
        wrapper.eq("matnr", matnr)
                .eq("batch", batch)
                .eq("brand", brand)
                .eq("standby1", standby1)
                .eq("standby2", standby2)
                .eq("standby3", standby3)
                .eq("box_type1", boxType1)
                .eq("box_type2", boxType2)
                .eq("box_type3", boxType3)
                .orderBy("id", true);
        if (!Cools.isEmpty(orderId)) {
            wrapper.eq("order_id", orderId);
        }
        if (!Cools.isEmpty(orderNo)) {
            wrapper.eq("order_no", orderNo);
        }
        return wrapper;
    }
    private OrderDetlPakout selectFirst(EntityWrapper<OrderDetlPakout> wrapper) {
        List<OrderDetlPakout> rows = this.selectList(wrapper);
        return Cools.isEmpty(rows) ? null : rows.get(0);
    }
}