From 33e8645c7a3dc2d68988e8657ea28f4940ed95e6 Mon Sep 17 00:00:00 2001 From: x_z Date: Thu, 3 Nov 2022 16:02:55 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=AE=8C=E5=96=84=E7=94=9F=E6=88=90=E7=9B=98?= =?UTF-8?q?=E7=9B=88=E7=9B=98=E4=BA=8F=E5=8D=95=E6=8D=AE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/entity/inventory/InvCountOrder.java | 10 ++ .../impl/InvCountOrderServiceImpl.java | 146 +++++++++++------- .../mapper/inventory/InvCountOrderDao.xml | 53 ++++++- 3 files changed, 145 insertions(+), 64 deletions(-) diff --git a/api-admin/src/main/java/com/glxp/api/admin/entity/inventory/InvCountOrder.java b/api-admin/src/main/java/com/glxp/api/admin/entity/inventory/InvCountOrder.java index c51aac50..b0083af8 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/entity/inventory/InvCountOrder.java +++ b/api-admin/src/main/java/com/glxp/api/admin/entity/inventory/InvCountOrder.java @@ -65,4 +65,14 @@ public class InvCountOrder { */ private String remark; + /** + * 入库扫码单据号,多个使用,隔开 + */ + private String inOrderIds; + + /** + * 出库扫码单据号,多个使用,隔开 + */ + private String outOrderIds; + } \ No newline at end of file diff --git a/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountOrderServiceImpl.java b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountOrderServiceImpl.java index 228b1613..aaef27d1 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountOrderServiceImpl.java +++ b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountOrderServiceImpl.java @@ -19,12 +19,10 @@ import com.glxp.api.admin.entity.basic.UdiEntity; import com.glxp.api.admin.entity.basic.UnitMaintainEntity; import com.glxp.api.admin.entity.inout.OrderEntity; import com.glxp.api.admin.entity.inout.WarehouseEntity; -import com.glxp.api.admin.entity.inventory.InvCountCodes; -import com.glxp.api.admin.entity.inventory.InvCountOrder; -import com.glxp.api.admin.entity.inventory.InvCountOrderDetail; -import com.glxp.api.admin.entity.inventory.InvCountSettingEntity; +import com.glxp.api.admin.entity.inventory.*; import com.glxp.api.admin.req.inventory.FilterInvCountCodesRequest; import com.glxp.api.admin.req.inventory.FilterInvCountOrderRequest; +import com.glxp.api.admin.req.inventory.FilterInvProductDetailRequest; import com.glxp.api.admin.res.inventory.InvCountOrderResponse; import com.glxp.api.admin.service.auth.CustomerService; import com.glxp.api.admin.service.inventory.InvCountOrderService; @@ -40,6 +38,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; @Slf4j @Service @@ -200,71 +199,104 @@ public class InvCountOrderServiceImpl implements InvCountOrderService { log.error("未配置盘点单据设置参数,无法转单"); return; } - List detailList = invCountOrderDetailDao.selectByOrderId(invCountOrder.getOrderId()); - List inDetailList = new ArrayList<>(); - List outDetailList = new ArrayList<>(); - for (InvCountOrderDetail invCountOrderDetail : detailList) { - if (invCountOrderDetail.getStatus() == 0) { - //亏损,做出库单 - outDetailList.add(invCountOrderDetail); - } else if (invCountOrderDetail.getStatus() == 1) { - //盈利,做入库单 - inDetailList.add(invCountOrderDetail); - } - } - InvCountSettingEntity invCountSettingEntity = list.get(0); + //根据盘点单据号,查询此盘点单的条码信息 + FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest(); + codesRequest.setOrderIdFk(invCountOrder.getOrderId()); + List codesList = invCountCodesDao.filterList(codesRequest); + List countProductIds = codesList.stream().map(InvCountCodes::getProductId).collect(Collectors.toList()); - if (CollUtil.isNotEmpty(inDetailList)) { - log.info("盘点单据:" + invCountOrder.getOrderId() + " 转入库单开始"); - //查询盘点入库单据类型 - OrderEntity orderEntity = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_PUT); + //出入库单据条码 + List inOrderCodes = new ArrayList<>(); + List outOrderCodes = new ArrayList<>(); - //查找盘点码中标记为多的码 - FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest(); - codesRequest.setOrderIdFk(invCountOrder.getOrderId()); - codesRequest.setStatus(1); - List codesList = invCountCodesDao.filterList(codesRequest); - List warehouseEntities = new ArrayList<>(codesList.size()); - codesList.forEach(invCountCodes -> { - WarehouseEntity warehouseEntity = new WarehouseEntity(); - warehouseEntity.setCode(invCountCodes.getCode()); - warehouseEntity.setRelId(invCountCodes.getProductId()); - warehouseEntity.setAction(invCountSettingEntity.getInAction()); - warehouseEntity.setMainAction(ConstantType.TYPE_PUT); - warehouseEntity.setActor(invCountOrder.getCreateUser()); - warehouseEntity.setOrderId(orderEntity.getId()); - warehouseEntity.setInvStorageCode(invCountOrder.getInvStorageCode()); - warehouseEntity.setInvWarehouseCode(invCountOrder.getInvWarehouseCode()); - warehouseEntity.setLocStorageCode(invCountOrder.getInvStorageCode()); - warehouseEntity.setFromCorp(orderEntity.getFromCorp()); - warehouseEntity.setFromCorpId(orderEntity.getFromCorpId()); - warehouseEntity.setCorpOrderId(orderEntity.getCorpOrderId()); + //查询库存详情表此产品的条码信息 + for (String productId : countProductIds) { + FilterInvProductDetailRequest invProductDetailRequest = new FilterInvProductDetailRequest(); + invProductDetailRequest.setProductIdFk(productId); + invProductDetailRequest.setInvStorageCode(invCountOrder.getInvStorageCode()); + invProductDetailRequest.setInvWarehouseCode(invCountOrder.getInvWarehouseCode()); + invProductDetailRequest.setInvSpaceCode(invCountOrder.getInvSpaceCode()); + List invProductDetailEntities = invProductDetailDao.filterInvProductDetail(invProductDetailRequest); + if (CollUtil.isEmpty(invProductDetailEntities)) { + log.info("产品:" + productId + " 非当前仓库产品,添加到盘点入库单条码中"); + //将此条码添加到入库单据条码中 + codesList.forEach(invCountCodes -> { + if (invCountCodes.getProductId().equals(productId)) { + WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invCountCodes.getCode(), invCountCodes.getProductId()); + inOrderCodes.add(warehouseEntity); + } + }); + } else { + //库存中存在此产品,筛选出盘点中不存在的条码,添加到盘点出库条码中 + List countCodes = codesList.stream().map(InvCountCodes::getCode).collect(Collectors.toList()); + invProductDetailEntities.forEach(invProductDetailEntity -> { + if (!countCodes.contains(invProductDetailEntity.getOriginCode())) { + WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntity.getCode(), invProductDetailEntity.getProductIdFk()); + outOrderCodes.add(warehouseEntity); + } + }); + } + } - UdiEntity udi = FilterUdiUtils.getUdi(invCountCodes.getCode()); - warehouseEntity.setBatchNo(udi.getBatchNo()); - warehouseEntity.setProduceDate(udi.getProduceDate()); - warehouseEntity.setExpireDate(udi.getExpireDate()); - warehouseEntity.setSerialNo(udi.getSerialNo()); - warehouseEntity.setNameCode(udi.getUdi()); - warehouseEntity.setCount(1); - warehouseEntity.setReCount(1); + InvCountSettingEntity invCountSettingEntity = list.get(0); - warehouseEntities.add(warehouseEntity); + if (CollUtil.isNotEmpty(inOrderCodes)) { + log.info("盘点单据:{} 生成盘盈入库单据", invCountOrder.getOrderId()); + OrderEntity order = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_PUT); + log.info("盘盈入库单据号:{}", order.getId()); + inOrderCodes.forEach(warehouseEntity -> { + warehouseEntity.setOrderId(order.getId()); + warehouseEntity.setAction(order.getAction()); + warehouseEntity.setFromCorp(order.getFromCorp()); + warehouseEntity.setFromCorpId(order.getFromCorpId()); + warehouseEntity.setCorpOrderId(order.getCorpOrderId()); }); - orderDao.insertOrder(orderEntity); - codesTempDao.insertCodesTemp(warehouseEntities); - - log.info("盘点单据转入库单完成,单号为:" + orderEntity.getId()); + orderDao.insertOrder(order); + codesTempDao.insertCodesTemp(inOrderCodes); + log.info("盘盈入库单据生成成功"); } - if (CollUtil.isNotEmpty(outDetailList)) { - log.info("盘点单据:" + invCountOrder.getOrderId() + " 转出库单开始"); - //查询盘点入库单据类型 + if (CollUtil.isNotEmpty(outOrderCodes)) { + log.info("盘点单据:{} 生成盘亏入库单据", invCountOrder.getOrderId()); + OrderEntity order = createOrder(invCountSettingEntity, invCountOrder, ConstantType.TYPE_OUT); + log.info("盘盈入库单据号:{}", order.getId()); + inOrderCodes.forEach(warehouseEntity -> { + warehouseEntity.setOrderId(order.getId()); + warehouseEntity.setAction(order.getAction()); + warehouseEntity.setFromCorp(order.getFromCorp()); + warehouseEntity.setFromCorpId(order.getFromCorpId()); + warehouseEntity.setCorpOrderId(order.getCorpOrderId()); + }); + orderDao.insertOrder(order); + codesTempDao.insertCodesTemp(inOrderCodes); + log.info("盘亏入库单据生成成功"); } + //更新盘点单据生成的扫码单据号 + invCountOrderDao.updateByOrderId(invCountOrder); + } + + private static WarehouseEntity buildWarehouse(InvCountOrder invCountOrder, String code, String productId) { + WarehouseEntity warehouseEntity = new WarehouseEntity(); + warehouseEntity.setCode(code); + warehouseEntity.setRelId(productId); + warehouseEntity.setMainAction(ConstantType.TYPE_PUT); + warehouseEntity.setActor(invCountOrder.getCreateUser()); + warehouseEntity.setInvStorageCode(invCountOrder.getInvStorageCode()); + warehouseEntity.setInvWarehouseCode(invCountOrder.getInvWarehouseCode()); + warehouseEntity.setLocStorageCode(invCountOrder.getInvStorageCode()); + UdiEntity udi = FilterUdiUtils.getUdi(code); + warehouseEntity.setBatchNo(udi.getBatchNo()); + warehouseEntity.setProduceDate(udi.getProduceDate()); + warehouseEntity.setExpireDate(udi.getExpireDate()); + warehouseEntity.setSerialNo(udi.getSerialNo()); + warehouseEntity.setNameCode(udi.getUdi()); + warehouseEntity.setCount(1); + warehouseEntity.setReCount(1); + return warehouseEntity; } /** diff --git a/api-admin/src/main/resources/mybatis/mapper/inventory/InvCountOrderDao.xml b/api-admin/src/main/resources/mybatis/mapper/inventory/InvCountOrderDao.xml index 9e4adc6d..b427bb16 100644 --- a/api-admin/src/main/resources/mybatis/mapper/inventory/InvCountOrderDao.xml +++ b/api-admin/src/main/resources/mybatis/mapper/inventory/InvCountOrderDao.xml @@ -14,6 +14,8 @@ + + @@ -28,7 +30,9 @@ auditUser, auditTime, `status`, - remark + remark, + inOrderIds, + outOrderIds