From 15fc169e2d125770746371f4d5991a7ee2b7186a Mon Sep 17 00:00:00 2001 From: x_z Date: Sun, 20 Nov 2022 18:26:06 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=B0=83=E6=95=B4=E7=9B=98=E7=82=B9=E8=BD=AC?= =?UTF-8?q?=E5=8D=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/dao/inventory/InvCountCodesDao.java | 8 ++ .../dao/inventory/InvCountOrderDetailDao.java | 8 ++ .../FilterInvCountOrderDetailRequest.java | 5 + .../FilterInvProductDetailRequest.java | 3 + .../impl/InvCountCodesServiceImpl.java | 24 +++-- .../impl/InvCountOrderServiceImpl.java | 100 ++++++++++-------- .../mapper/inventory/InvCountCodesDao.xml | 15 +++ .../inventory/InvCountOrderDetailDao.xml | 13 +++ .../mapper/inventory/InvProductDetailDao.xml | 3 + 9 files changed, 127 insertions(+), 52 deletions(-) diff --git a/api-admin/src/main/java/com/glxp/api/admin/dao/inventory/InvCountCodesDao.java b/api-admin/src/main/java/com/glxp/api/admin/dao/inventory/InvCountCodesDao.java index ea8fd29c..801a55db 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/dao/inventory/InvCountCodesDao.java +++ b/api-admin/src/main/java/com/glxp/api/admin/dao/inventory/InvCountCodesDao.java @@ -81,4 +81,12 @@ public interface InvCountCodesDao { * @return */ List selectByOrderIdAndProductId(@Param("orderIdFk") String orderIdFk, @Param("productId") String productId); + + /** + * 查询盘点单据码详情集合 + * + * @param codesRequest + * @return + */ + List selectCodes(FilterInvCountCodesRequest codesRequest); } \ No newline at end of file diff --git a/api-admin/src/main/java/com/glxp/api/admin/dao/inventory/InvCountOrderDetailDao.java b/api-admin/src/main/java/com/glxp/api/admin/dao/inventory/InvCountOrderDetailDao.java index ca0e0254..ce1ee5dc 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/dao/inventory/InvCountOrderDetailDao.java +++ b/api-admin/src/main/java/com/glxp/api/admin/dao/inventory/InvCountOrderDetailDao.java @@ -89,4 +89,12 @@ public interface InvCountOrderDetailDao { * @param orderId */ void resetCountFiledValue(@Param("orderId") String orderId); + + /** + * 查询盘点单据详情 + * + * @param detailRequest + * @return + */ + List selectDetailList(FilterInvCountOrderDetailRequest detailRequest); } \ No newline at end of file diff --git a/api-admin/src/main/java/com/glxp/api/admin/req/inventory/FilterInvCountOrderDetailRequest.java b/api-admin/src/main/java/com/glxp/api/admin/req/inventory/FilterInvCountOrderDetailRequest.java index 15387a74..9a7f2756 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/req/inventory/FilterInvCountOrderDetailRequest.java +++ b/api-admin/src/main/java/com/glxp/api/admin/req/inventory/FilterInvCountOrderDetailRequest.java @@ -16,4 +16,9 @@ public class FilterInvCountOrderDetailRequest extends ListPageRequest { */ private String orderIdFk; + /** + * 盈亏状态 0:亏损 1:盈利 2:平衡 + */ + private Integer status; + } diff --git a/api-admin/src/main/java/com/glxp/api/admin/req/inventory/FilterInvProductDetailRequest.java b/api-admin/src/main/java/com/glxp/api/admin/req/inventory/FilterInvProductDetailRequest.java index 6d0b01dc..3b9c1082 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/req/inventory/FilterInvProductDetailRequest.java +++ b/api-admin/src/main/java/com/glxp/api/admin/req/inventory/FilterInvProductDetailRequest.java @@ -32,6 +32,9 @@ public class FilterInvProductDetailRequest extends ListPageRequest { private String invSpaceCode; private List invCodes; + //更新时间 + private String updateTime; + /** * 产品ID集合 */ diff --git a/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountCodesServiceImpl.java b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountCodesServiceImpl.java index a293795e..50728649 100644 --- a/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountCodesServiceImpl.java +++ b/api-admin/src/main/java/com/glxp/api/admin/service/inventory/impl/InvCountCodesServiceImpl.java @@ -75,27 +75,31 @@ public class InvCountCodesServiceImpl implements InvCountCodesService { public BaseResponse addCode(InvCountCodes invCountCodes) { //解析条码 UdiEntity udi = FilterUdiUtils.getUdi(invCountCodes.getCode()); + //查询此条码是否重复 + + //查询单据详情,是否包含此产品 + InvCountOrderDetail invCountOrderDetail = invCountOrderDetailDao.selectOrderDetail(invCountCodes.getOrderIdFk(), udi.getUdi(), udi.getBatchNo(), udi.getProduceDate(), udi.getExpireDate()); + if (null == invCountOrderDetail) { + return ResultVOUtils.error(ResultEnum.DATA_NOT, "当前仓库或货位不存在此产品"); + } + //判断此产品是否有批次号,如果没有批次号,则直接在单据详情的盘点数量上加1 if (StrUtil.isNotBlank(udi.getBatchNo()) && StrUtil.isNotBlank(udi.getSerialNo())) { Long count = invCountCodesDao.selectCountByCodeAndOrderId(invCountCodes.getCode(), invCountCodes.getOrderIdFk()); if (count > 0) { return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL, "条码重复!"); + } else { + //新增条码 + invCountCodes.setProductId(invCountOrderDetail.getProductId()); + invCountCodes.setBatchNo(udi.getBatchNo()); + invCountCodesDao.insert(invCountCodes); } } - - //查询单据详情,单据详情添加 - InvCountOrderDetail invCountOrderDetail = invCountOrderDetailDao.selectOrderDetail(invCountCodes.getOrderIdFk(), udi.getUdi(), udi.getBatchNo(), udi.getProduceDate(),udi.getExpireDate()); - if (null == invCountOrderDetail) { - return ResultVOUtils.error(ResultEnum.DATA_NOT, "当前仓库或货位不存在此产品"); - } - + //修改码明细 invCountOrderDetail.setCountNum(invCountOrderDetail.getCountNum() + getActCount(udi.getUdi())); - invCountCodes.setProductId(invCountOrderDetail.getProductId()); - invCountCodes.setBatchNo(udi.getBatchNo()); invCountOrderDetailDao.updateByPrimaryKey(invCountOrderDetail); - invCountCodesDao.insert(invCountCodes); return ResultVOUtils.success(); } 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 f53780e6..f7aab280 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 @@ -22,10 +22,7 @@ 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.*; -import com.glxp.api.admin.req.inventory.FilterInvCountCodesRequest; -import com.glxp.api.admin.req.inventory.FilterInvCountOrderRequest; -import com.glxp.api.admin.req.inventory.FilterInvCountOrderSaveRequest; -import com.glxp.api.admin.req.inventory.FilterInvProductDetailRequest; +import com.glxp.api.admin.req.inventory.*; import com.glxp.api.admin.res.inventory.InvCountOrderResponse; import com.glxp.api.admin.service.auth.CustomerService; import com.glxp.api.admin.service.inventory.InvCountCodesService; @@ -110,12 +107,14 @@ public class InvCountOrderServiceImpl implements InvCountOrderService { } //封装相关数据 - invCountOrder.setStatus(0); //未提交 + //未提交 + invCountOrder.setStatus(0); if (StrUtil.isBlank(invCountOrder.getOrderId())) { //生成单据号 String orderId = gennerOrderUtils.createStOrderNo(new OrderNoTypeBean(Constant.COUNT_ORDER, "yyyyMMdd")); - invCountOrder.setOrderId(orderId); //盘点单号 + //盘点单号 + invCountOrder.setOrderId(orderId); AuthAdmin user = customerService.getUserBean(); invCountOrder.setCreateUser(user.getUserName()); invCountOrder.setCreateTime(DateUtil.date().toString(DatePattern.NORM_DATETIME_PATTERN)); @@ -158,12 +157,15 @@ public class InvCountOrderServiceImpl implements InvCountOrderService { int diff = invCountOrderDetail.getInvNum() - invCountOrderDetail.getCountNum(); if (diff > 0) { invCountOrderDetail.setLossNum(Math.abs(diff)); - invCountOrderDetail.setStatus(0); //盘亏 + //盘亏 + invCountOrderDetail.setStatus(0); } else if (diff < 0) { invCountOrderDetail.setProfitNum(Math.abs(diff)); - invCountOrderDetail.setStatus(1); //盘盈 + //盘盈 + invCountOrderDetail.setStatus(1); } else { - invCountOrderDetail.setStatus(2); //平 + //平衡 + invCountOrderDetail.setStatus(2); } //查询此产品的条码列表,判断此产品在库存中是多还是少 @@ -244,56 +246,68 @@ public class InvCountOrderServiceImpl implements InvCountOrderService { return; } - //根据盘点单据号,查询此盘点单的条码信息 - FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest(); - codesRequest.setOrderIdFk(invCountOrder.getOrderId()); - List codesList = invCountCodesDao.filterList(codesRequest); - List countProductIds = codesList.stream().map(InvCountCodes::getProductId).collect(Collectors.toList()); - - //出入库单据条码 + //出入库码明细列表 List inOrderCodes = new ArrayList<>(); List outOrderCodes = new ArrayList<>(); - //查询库存详情表此产品的条码信息 - for (String productId : countProductIds) { + FilterInvCountOrderDetailRequest detailRequest = new FilterInvCountOrderDetailRequest(); + detailRequest.setOrderIdFk(invCountOrder.getOrderId()); + //查询亏损单据详情 + detailRequest.setStatus(0); + List detailList = invCountOrderDetailDao.selectDetailList(detailRequest); + if (CollUtil.isNotEmpty(detailList)) { + log.info("开始生成盘亏单据码明细"); + log.info("查询盘亏产品码详情"); FilterInvProductDetailRequest invProductDetailRequest = new FilterInvProductDetailRequest(); - invProductDetailRequest.setProductIdFk(productId); invProductDetailRequest.setInvStorageCode(invCountOrder.getInvStorageCode()); invProductDetailRequest.setInvWarehouseCode(invCountOrder.getInvWarehouseCode()); - if (invCountOrder.getCountType() == 1) { //按照货位盘点,查询库存详情添加货位条件 invProductDetailRequest.setInvSpaceCode(invCountOrder.getInvSpaceCode()); } - List invProductDetailEntities = invProductDetailDao.filterInvProductDetail(invProductDetailRequest); - if (CollUtil.isEmpty(invProductDetailEntities)) { - log.info("产品:" + productId + " 非当前仓库产品,添加到盘点入库单条码中"); - //将此条码添加到入库单据条码中 - codesList.forEach(invCountCodes -> { - if (invCountCodes.getProductId().equals(productId) && !verifyCodeExist(outOrderCodes, invCountCodes.getCode())) { - WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invCountCodes.getCode(), invCountCodes.getProductId()); - int count = invCountCodesService.getActCount(warehouseEntity.getNameCode()); - warehouseEntity.setCount(count); - warehouseEntity.setReCount(count); - inOrderCodes.add(warehouseEntity); - } - }); - } else { - //库存中存在此产品,筛选出盘点中不存在的条码,添加到盘点出库条码中 - List countCodes = codesList.stream().map(InvCountCodes::getCode).collect(Collectors.toList()); - invProductDetailEntities.forEach(invProductDetailEntity -> { - if (!countCodes.contains(invProductDetailEntity.getOriginCode()) && !verifyCodeExist(outOrderCodes, invProductDetailEntity.getCode())) { + for (InvCountOrderDetail invCountOrderDetail : detailList) { + //查询库存详情 + invProductDetailRequest.setProductIdFk(invCountOrderDetail.getProductId()); + invProductDetailRequest.setBatchNo(invCountOrderDetail.getBatchNo()); + //库存早于或等于盘点时间的库存数据,锁库存 + invProductDetailRequest.setUpdateTime(invCountOrder.getCreateTime()); + List invProductDetailEntities = invProductDetailDao.filterInvProductDetail(invProductDetailRequest); + //查询盘点码明细 + FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest(); + codesRequest.setOrderIdFk(invCountOrder.getOrderId()); + codesRequest.setProductId(invCountOrderDetail.getProductId()); + codesRequest.setBatchNo(invCountOrderDetail.getBatchNo()); + List countCodesList = invCountCodesDao.selectCodes(codesRequest); + for (InvProductDetailEntity invProductDetailEntity : invProductDetailEntities) { + if (!countCodesList.contains(invProductDetailEntity.getOriginCode()) && !verifyCodeExist(outOrderCodes, invProductDetailEntity.getCode())) { WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invProductDetailEntity.getCode(), invProductDetailEntity.getProductIdFk()); - int count = invCountCodesService.getActCount(warehouseEntity.getNameCode()); - warehouseEntity.setCount(count); - warehouseEntity.setReCount(count); outOrderCodes.add(warehouseEntity); } - }); + } } + + log.info("盘亏单据码明细生成完毕"); } + //查询盘盈的条码明细 + FilterInvCountCodesRequest codesRequest = new FilterInvCountCodesRequest(); + codesRequest.setOrderIdFk(invCountOrder.getOrderId()); + //码状态标记为多码的数据 + codesRequest.setStatus(1); + List invCountCodesList = invCountCodesDao.filterList(codesRequest); + if (CollUtil.isNotEmpty(invCountCodesList)) { + log.info("开始生成盘盈单据码明细"); + for (InvCountCodes invCountCodes : invCountCodesList) { + if (!verifyCodeExist(inOrderCodes, invCountCodes.getCode())) { + WarehouseEntity warehouseEntity = buildWarehouse(invCountOrder, invCountCodes.getCode(), invCountCodes.getProductId()); + inOrderCodes.add(warehouseEntity); + } + } + log.info("盘盈单据码明细生成完毕"); + } + + InvCountSettingEntity invCountSettingEntity = list.get(0); if (CollUtil.isNotEmpty(inOrderCodes)) { @@ -369,6 +383,8 @@ public class InvCountOrderServiceImpl implements InvCountOrderService { 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/InvCountCodesDao.xml b/api-admin/src/main/resources/mybatis/mapper/inventory/InvCountCodesDao.xml index 6d3c0f20..881a069f 100644 --- a/api-admin/src/main/resources/mybatis/mapper/inventory/InvCountCodesDao.xml +++ b/api-admin/src/main/resources/mybatis/mapper/inventory/InvCountCodesDao.xml @@ -216,4 +216,19 @@ where orderIdFk = #{orderIdFk} and productId = #{productId} + + \ No newline at end of file diff --git a/api-admin/src/main/resources/mybatis/mapper/inventory/InvCountOrderDetailDao.xml b/api-admin/src/main/resources/mybatis/mapper/inventory/InvCountOrderDetailDao.xml index c4f631e9..96e0168d 100644 --- a/api-admin/src/main/resources/mybatis/mapper/inventory/InvCountOrderDetailDao.xml +++ b/api-admin/src/main/resources/mybatis/mapper/inventory/InvCountOrderDetailDao.xml @@ -356,4 +356,17 @@ status = null where orderIdFk = #{orderId} + + \ No newline at end of file diff --git a/api-admin/src/main/resources/mybatis/mapper/inventory/InvProductDetailDao.xml b/api-admin/src/main/resources/mybatis/mapper/inventory/InvProductDetailDao.xml index bc5a188a..a8f62bb0 100644 --- a/api-admin/src/main/resources/mybatis/mapper/inventory/InvProductDetailDao.xml +++ b/api-admin/src/main/resources/mybatis/mapper/inventory/InvProductDetailDao.xml @@ -63,6 +63,9 @@ #{item} + + AND updateTime = ]]> #{updateTime} +