diff --git a/api-admin/src/main/java/com/glxp/sale/admin/controller/inout/OrderController.java b/api-admin/src/main/java/com/glxp/sale/admin/controller/inout/OrderController.java index 3748e4d..50b72b3 100644 --- a/api-admin/src/main/java/com/glxp/sale/admin/controller/inout/OrderController.java +++ b/api-admin/src/main/java/com/glxp/sale/admin/controller/inout/OrderController.java @@ -140,7 +140,7 @@ public class OrderController { if (CollUtil.isNotEmpty(deleteRequest.getIds())) { orderService.deleteOrders(deleteRequest.getIds()); } else { - orderService.deleteOrders(Arrays.asList(deleteRequest.getId())); + orderService.deleteOrders(Collections.singletonList(deleteRequest.getId())); } return ResultVOUtils.success("删除成功"); diff --git a/api-admin/src/main/java/com/glxp/sale/admin/dao/inout/CodesDao.java b/api-admin/src/main/java/com/glxp/sale/admin/dao/inout/CodesDao.java index 69f8689..ec97f7b 100644 --- a/api-admin/src/main/java/com/glxp/sale/admin/dao/inout/CodesDao.java +++ b/api-admin/src/main/java/com/glxp/sale/admin/dao/inout/CodesDao.java @@ -45,13 +45,5 @@ public interface CodesDao { boolean updateSupId(@Param("supId") String supId, @Param("nameCode") String nameCode, @Param("orderId") String orderId); - /** - * 通过订单号,查询此订单号在码表中所关联的全部订单 - * - * @param orderId - * @return - */ - List selectOrderIdsByOrderId(@Param("orderId") String orderId); - boolean deleteByOrderIdAndCode(@Param("orderId") String orderId, @Param("code") String code); } diff --git a/api-admin/src/main/java/com/glxp/sale/admin/dao/inout/OrderDetailDao.java b/api-admin/src/main/java/com/glxp/sale/admin/dao/inout/OrderDetailDao.java index 8474064..8cccb01 100644 --- a/api-admin/src/main/java/com/glxp/sale/admin/dao/inout/OrderDetailDao.java +++ b/api-admin/src/main/java/com/glxp/sale/admin/dao/inout/OrderDetailDao.java @@ -53,7 +53,7 @@ public interface OrderDetailDao { */ ErpOrderEntity selectByNameCodeAndOrderId(@Param("nameCode") String nameCode, @Param("orderId") String orderId); - boolean deleteByOrderIdAndNameCode(@Param("orderId") String orderId, @Param("nameCode") String nameCode); + boolean deleteOrder(@Param("filterErpOrderRequest") FilterErpOrderRequest filterErpOrderRequest); /** * 根据单号统计单据详情数量 diff --git a/api-admin/src/main/java/com/glxp/sale/admin/dao/inout/StockOrderDetailDao.java b/api-admin/src/main/java/com/glxp/sale/admin/dao/inout/StockOrderDetailDao.java index 9adecbc..30e01a4 100644 --- a/api-admin/src/main/java/com/glxp/sale/admin/dao/inout/StockOrderDetailDao.java +++ b/api-admin/src/main/java/com/glxp/sale/admin/dao/inout/StockOrderDetailDao.java @@ -27,5 +27,5 @@ public interface StockOrderDetailDao { StockOrderDetailEntity findOne(@Param("id") String id); - boolean deleteByOrderIdAndProductId(@Param("orderId") String orderId, @Param("productId") String productId); + boolean deleteStockOrderDetail(@Param("stockOrderDetailFilterRequest") StockOrderDetailFilterRequest stockOrderDetailFilterRequest); } diff --git a/api-admin/src/main/java/com/glxp/sale/admin/entity/inout/FilterErpOrderRequest.java b/api-admin/src/main/java/com/glxp/sale/admin/entity/inout/FilterErpOrderRequest.java index b9de2a1..f36e160 100644 --- a/api-admin/src/main/java/com/glxp/sale/admin/entity/inout/FilterErpOrderRequest.java +++ b/api-admin/src/main/java/com/glxp/sale/admin/entity/inout/FilterErpOrderRequest.java @@ -20,4 +20,8 @@ public class FilterErpOrderRequest extends ListPageRequest { private String fbillflag; List orderIds; + private String nameCode; //最小包装前7位 + private String goodsid; //货品ID + private String batchNo; //批号 + } diff --git a/api-admin/src/main/java/com/glxp/sale/admin/service/inout/impl/CodesServiceImpl.java b/api-admin/src/main/java/com/glxp/sale/admin/service/inout/impl/CodesServiceImpl.java index fc8194d..98a0fb5 100644 --- a/api-admin/src/main/java/com/glxp/sale/admin/service/inout/impl/CodesServiceImpl.java +++ b/api-admin/src/main/java/com/glxp/sale/admin/service/inout/impl/CodesServiceImpl.java @@ -1,14 +1,18 @@ package com.glxp.sale.admin.service.inout.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageHelper; import com.glxp.sale.admin.constant.ConstantType; import com.glxp.sale.admin.dao.inout.*; import com.glxp.sale.admin.dao.inventory.InvProductDao; import com.glxp.sale.admin.dao.inventory.InvProductDetailDao; +import com.glxp.sale.admin.entity.inout.FilterErpOrderRequest; import com.glxp.sale.admin.entity.inout.WarehouseEntity; import com.glxp.sale.admin.entity.inventory.InvProductDetailEntity; import com.glxp.sale.admin.entity.inventory.InvProductEntity; import com.glxp.sale.admin.req.inout.CodesReplaceRequest; +import com.glxp.sale.admin.req.inout.StockOrderDetailFilterRequest; import com.glxp.sale.admin.req.inout.WarehouseQueryRequest; import com.glxp.sale.admin.req.inventory.FilterInvProductDetailRequest; import com.glxp.sale.admin.req.inventory.FilterInvProductRequest; @@ -158,42 +162,62 @@ public class CodesServiceImpl implements CodesService { //删除码表,添加新的条码,并更新库存 for (WarehouseEntity warehouseEntity : codeList) { - //构造新的码 - WarehouseEntity codeEntity = new WarehouseEntity(); //删除码详情 codesDao.deleteByOrderIdAndCode(warehouseEntity.getOrderId(), warehouseEntity.getCode()); //查询库存详情 FilterInvProductDetailRequest filterInvProductDetailRequest = new FilterInvProductDetailRequest(); filterInvProductDetailRequest.setOriginCode(codesReplaceRequest.getCode()); - filterInvProductDetailRequest.setOrderIdFk(codeEntity.getOrderId()); + filterInvProductDetailRequest.setProductIdFk(warehouseEntity.getRelId()); + filterInvProductDetailRequest.setOrderIdFk(warehouseEntity.getOrderId()); + if (StrUtil.isNotBlank(warehouseEntity.getBatchNo())) { + filterInvProductDetailRequest.setBatchNo(warehouseEntity.getBatchNo()); + } else { + filterInvProductDetailRequest.setBatchNo("empty"); + } List invProductDetailEntities = invProductDetailDao.filterInvProductDetail(filterInvProductDetailRequest); - - InvProductDetailEntity invProductDetailEntity = invProductDetailEntities.get(0); //库存 - - //删除库存详情 - invProductDetailDao.deleteByOrderIdAndCode(warehouseEntity.getOrderId(), codesReplaceRequest.getCode()); - //查询原库存详情和新的库存详情 - FilterInvProductRequest filterInvProductRequest = new FilterInvProductRequest(); - filterInvProductRequest.setRelIdFk(invProductDetailEntity.getProductIdFk()); - InvProductEntity invProductEntity = invProductDao.filterInvProduct(filterInvProductRequest).get(0); - - if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_OUT)) { - //出库 - int count = invProductEntity.getOutCount() + invProductDetailEntity.getCount(); - invProductEntity.setOutCount(count); - } else if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_PUT)) { - //入库 - int count = invProductEntity.getInCount() - invProductDetailEntity.getCount(); - invProductEntity.setInCount(count); + if (CollUtil.isNotEmpty(invProductDetailEntities)) { + //库存详情不为空,单据已验收,更新库存 + InvProductDetailEntity invProductDetailEntity = invProductDetailEntities.get(0); //库存 + + //删除库存详情 + invProductDetailDao.deleteByOrderIdAndCode(warehouseEntity.getOrderId(), codesReplaceRequest.getCode()); + //查询原库存详情和新的库存详情 + FilterInvProductRequest filterInvProductRequest = new FilterInvProductRequest(); + filterInvProductRequest.setRelIdFk(invProductDetailEntity.getProductIdFk()); + if (StrUtil.isBlank(invProductDetailEntity.getBatchNo())) { + filterInvProductRequest.setBatchNo("empty"); + } else { + filterInvProductRequest.setBatchNo(invProductDetailEntity.getBatchNo()); + } + InvProductEntity invProductEntity = invProductDao.filterInvProduct(filterInvProductRequest).get(0); + + if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_OUT)) { + //出库 + int count = invProductEntity.getOutCount() + invProductDetailEntity.getCount(); + invProductEntity.setOutCount(count); + } else if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_PUT)) { + //入库 + int count = invProductEntity.getInCount() - invProductDetailEntity.getCount(); + invProductEntity.setInCount(count); + } + + //更新库存 + invProductDao.updateInvProduct(invProductEntity); } - //更新库存 - invProductDao.updateInvProduct(invProductEntity); - //删除单据详情 - orderDetailDao.deleteByOrderIdAndNameCode(warehouseEntity.getOrderId(), codesReplaceRequest.getUdiEntity().getNameCode()); - stockOrderDetailDao.deleteByOrderIdAndProductId(warehouseEntity.getOrderId(), warehouseEntity.getRelId()); + FilterErpOrderRequest deleteOrderDetailParam = new FilterErpOrderRequest(); + deleteOrderDetailParam.setOrderIdFk(warehouseEntity.getOrderId()); + deleteOrderDetailParam.setGoodsid(warehouseEntity.getRelId()); + deleteOrderDetailParam.setBatchNo(warehouseEntity.getBatchNo()); + orderDetailDao.deleteOrder(deleteOrderDetailParam); //删除扫码单据详情 + + StockOrderDetailFilterRequest deleteStockOrderDetailParam = new StockOrderDetailFilterRequest(); + deleteStockOrderDetailParam.setProductId(warehouseEntity.getRelId()); + deleteStockOrderDetailParam.setBatchNo(warehouseEntity.getBatchNo()); + deleteStockOrderDetailParam.setOrderIdFk(warehouseEntity.getOrderId()); + stockOrderDetailDao.deleteStockOrderDetail(deleteStockOrderDetailParam); //删除业务单据详情 int orderDetailCount = orderDetailDao.countByOrderId(warehouseEntity.getOrderId()); if (orderDetailCount == 0) { diff --git a/api-admin/src/main/java/com/glxp/sale/admin/service/inout/impl/OrderServiceImpl.java b/api-admin/src/main/java/com/glxp/sale/admin/service/inout/impl/OrderServiceImpl.java index 4efb4ad..2ab2af0 100644 --- a/api-admin/src/main/java/com/glxp/sale/admin/service/inout/impl/OrderServiceImpl.java +++ b/api-admin/src/main/java/com/glxp/sale/admin/service/inout/impl/OrderServiceImpl.java @@ -322,16 +322,48 @@ public class OrderServiceImpl implements OrderService { return Collections.emptyList(); } //查询码表中所有的单据号 - List orderIds = codesDao.selectOrderIdsByOrderId(orderEntity.getId()); - if (orderIds.size() > 1) { - orderIds.removeIf(s -> s.equals(orderEntity.getId())); - } else { - return Collections.singletonList(orderEntity); + List orders = new ArrayList<>(); + orders.add(orderEntity); + getAllOrder(orderEntity, orders); + return orders; + } + + /** + * 查询指定单据关联的所有单据 + * + * @param orderEntity + * @param orders + */ + private void getAllOrder(OrderEntity orderEntity, List orders) { + //补单单号 + if (StrUtil.isNotBlank(orderEntity.getSupplementNo())) { + //补单单号不为空,查询补单数据 + OrderEntity order = orderDao.selectByBillNo(orderEntity.getSupplementNo()); + if (!orders.contains(order)) { + orders.add(order); + getAllOrder(order, orders); + } + } + + //缺量补单上级单号 + if (StrUtil.isNotBlank(orderEntity.getOriginUllageSupNo())) { + //补单单号不为空,查询补单数据 + OrderEntity order = orderDao.selectByBillNo(orderEntity.getOriginUllageSupNo()); + if (!orders.contains(order)) { + orders.add(order); + getAllOrder(order, orders); + } } - List orderEntities = orderDao.selectByIds(orderIds); - orderEntities.add(0, orderEntity); - return orderEntities; + //缺量补单 + if (StrUtil.isNotBlank(orderEntity.getUllageSupNo())) { + //补单单号不为空,查询补单数据 + OrderEntity order = orderDao.selectByBillNo(orderEntity.getUllageSupNo()); + if (!orders.contains(order)) { + orders.add(order); + getAllOrder(order, orders); + } + } } @Transactional(rollbackFor = Exception.class) @@ -351,25 +383,29 @@ public class OrderServiceImpl implements OrderService { Map> invProductDetailMap = invProductDetailEntities.stream().collect(Collectors.groupingBy(InvProductDetailEntity::getProductIdFk)); List invProductList = new ArrayList<>(invProductDetailMap.keySet().size()); - for (String productIdFk : invProductDetailMap.keySet()) { + + + for (InvProductDetailEntity invProductDetailEntity : invProductDetailEntities) { FilterInvProductRequest filterInvProductRequest = new FilterInvProductRequest(); - filterInvProductRequest.setRelIdFk(productIdFk); + filterInvProductRequest.setRelIdFk(invProductDetailEntity.getProductIdFk()); + if (StrUtil.isBlank(invProductDetailEntity.getBatchNo())) { + filterInvProductRequest.setBatchNo("empty"); + } else { + filterInvProductRequest.setBatchNo(invProductDetailEntity.getBatchNo()); + } List invProductEntities = invProductDao.filterInvProduct(filterInvProductRequest); - InvProductEntity invProductEntity = invProductEntities.get(0); - List temp = invProductDetailMap.get(productIdFk); - String mainAction = temp.get(0).getMainAction(); - int sum = temp.stream().mapToInt(InvProductDetailEntity::getCount).sum(); - if (mainAction.equals(ConstantType.TYPE_PUT)) { + InvProductEntity productEntity = invProductEntities.get(0); + if (ConstantType.TYPE_PUT.equals(invProductDetailEntity.getMainAction())) { //入库,在原有库存基础上减库存 - int count = invProductEntity.getInCount() - sum; - invProductEntity.setInCount(count); - } else if (mainAction.equals(ConstantType.TYPE_OUT)) { + int count = productEntity.getInCount() - invProductDetailEntity.getCount(); + productEntity.setInCount(count); + } else if (ConstantType.TYPE_OUT.equals(invProductDetailEntity.getMainAction())) { //出库,在原有库存上增加库存 - int count = invProductEntity.getOutCount() + sum; - invProductEntity.setOutCount(count); + int count = productEntity.getOutCount() + invProductDetailEntity.getCount(); + productEntity.setOutCount(count); } - invProductList.add(invProductEntity); + invProductList.add(productEntity); } //删除单据相关数据,更新库存 diff --git a/api-admin/src/main/resources/mybatis/mapper/inout/CodesDao.xml b/api-admin/src/main/resources/mybatis/mapper/inout/CodesDao.xml index f897a91..5617bc2 100644 --- a/api-admin/src/main/resources/mybatis/mapper/inout/CodesDao.xml +++ b/api-admin/src/main/resources/mybatis/mapper/inout/CodesDao.xml @@ -175,11 +175,6 @@ WHERE id=#{id} - delete diff --git a/api-admin/src/main/resources/mybatis/mapper/inout/OrderDetailDao.xml b/api-admin/src/main/resources/mybatis/mapper/inout/OrderDetailDao.xml index d989815..a2982c0 100644 --- a/api-admin/src/main/resources/mybatis/mapper/inout/OrderDetailDao.xml +++ b/api-admin/src/main/resources/mybatis/mapper/inout/OrderDetailDao.xml @@ -251,16 +251,27 @@ and orderIdFk = #{orderId} - - delete from io_order_detail - where orderIdFk = #{orderId} - and nameCode = #{nameCode} - - + + delete + from io_order_detail + + + AND orderIdFk = #{filterErpOrderRequest.orderIdFk} + + + AND goodsid = #{filterErpOrderRequest.goodsid} + + + AND batchNo = #{filterErpOrderRequest.batchNo} + + + + + \ No newline at end of file diff --git a/api-admin/src/main/resources/mybatis/mapper/inout/StockOrderDetail.xml b/api-admin/src/main/resources/mybatis/mapper/inout/StockOrderDetail.xml index 22b73a2..65e1ebe 100644 --- a/api-admin/src/main/resources/mybatis/mapper/inout/StockOrderDetail.xml +++ b/api-admin/src/main/resources/mybatis/mapper/inout/StockOrderDetail.xml @@ -160,11 +160,18 @@ limit 1 - + delete from stock_order_detail - where productId = #{productId} - and orderIdFk = (select id from stock_order where stock_order.orderIdFk = #{orderId}) + + orderIdFk = (select id from stock_order where stock_order.orderIdFk = #{param1.orderIdFk}) + + and productId = #{param1.productId} + + + and batchNo = #{param1.batchNo} + + \ No newline at end of file diff --git a/api-admin/src/main/resources/mybatis/mapper/inventory/InvProductDao.xml b/api-admin/src/main/resources/mybatis/mapper/inventory/InvProductDao.xml index b8be93c..1dfa02b 100644 --- a/api-admin/src/main/resources/mybatis/mapper/inventory/InvProductDao.xml +++ b/api-admin/src/main/resources/mybatis/mapper/inventory/InvProductDao.xml @@ -19,10 +19,12 @@ AND inv_product.ggxh like concat('%',#{ggxh},'%') - - AND inv_product.batchNo like concat('%',#{batchNo},'%') + + AND inv_product.batchNo like concat('%',#{batchNo},'%') + + + AND batchNo is NULL - AND inv_product.productionDate = #{productionDate}