浏览代码

待出入库添加扫码功能

yzc 1 年之前
父节点
当前提交
ce18bf6c46
共有 19 个文件被更改,包括 221 次插入153 次删除
  1. 1 1
      hx-purchase/src/main/java/com/fjhx/purchase/service/MyPurchasrService.java
  2. 2 2
      hx-purchase/src/main/java/com/fjhx/purchase/service/MyWmsServiceImpl.java
  3. 11 13
      hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalServiceImpl.java
  4. 2 2
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/MyPurchasrServiceImpl.java
  5. 1 1
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/order/impl/OrderInfoServiceImpl.java
  6. 2 2
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/purchase/impl/PurchaseBackServiceImpl.java
  7. 2 2
      hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockWaitController.java
  8. 1 1
      hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockWaitDetailsController.java
  9. 13 1
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockDto.java
  10. 7 2
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockWaitDetailsDto.java
  11. 6 1
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockWaitDto.java
  12. 9 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockJournalDetails.java
  13. 5 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockWait.java
  14. 1 1
      hx-wms/src/main/java/com/fjhx/wms/service/MyWmsService.java
  15. 2 2
      hx-wms/src/main/java/com/fjhx/wms/service/stock/StockWaitService.java
  16. 5 5
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockJournalServiceImpl.java
  17. 38 44
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java
  18. 4 4
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitDetailsServiceImpl.java
  19. 109 69
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitServiceImpl.java

+ 1 - 1
hx-purchase/src/main/java/com/fjhx/purchase/service/WdlyService.java → hx-purchase/src/main/java/com/fjhx/purchase/service/MyPurchasrService.java

@@ -5,7 +5,7 @@ import com.fjhx.purchase.entity.deliver.DeliverGoodsPo;
 
 import java.util.List;
 
-public interface WdlyService {
+public interface MyPurchasrService {
     /**
      * 修改发货记录为到货
      */

+ 2 - 2
hx-purchase/src/main/java/com/fjhx/purchase/service/MyPurchaseServiceImpl.java → hx-purchase/src/main/java/com/fjhx/purchase/service/MyWmsServiceImpl.java

@@ -14,7 +14,7 @@ import com.fjhx.purchase.service.sales.SalesReturnDetailService;
 import com.fjhx.wms.entity.arrival.po.ArrivalDetailPo;
 import com.fjhx.wms.entity.purchase.po.PurchaseDetailPo;
 import com.fjhx.wms.entity.purchase.po.PurchasePo;
-import com.fjhx.wms.service.MyPurchaseService;
+import com.fjhx.wms.service.MyWmsService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -24,7 +24,7 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Service
-public class MyPurchaseServiceImpl implements MyPurchaseService {
+public class MyWmsServiceImpl implements MyWmsService {
 
     @Autowired
     private SalesReturnDetailService salesReturnDetailService;

+ 11 - 13
hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalServiceImpl.java

@@ -30,7 +30,7 @@ import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
 import com.fjhx.purchase.entity.subscribe.po.Subscribe;
 import com.fjhx.purchase.entity.subscribe.po.SubscribeDetail;
 import com.fjhx.purchase.mapper.arrival.ArrivalMapper;
-import com.fjhx.purchase.service.WdlyService;
+import com.fjhx.purchase.service.MyPurchasrService;
 import com.fjhx.purchase.service.arrival.ArrivalDetailService;
 import com.fjhx.purchase.service.arrival.ArrivalService;
 import com.fjhx.purchase.service.purchase.PurchaseDetailService;
@@ -84,7 +84,7 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
     private StockWaitDetailsService stockWaitDetailsService;
 
     @Autowired
-    private WdlyService wdlyService;
+    private MyPurchasrService myPurchasrService;
 
     @Autowired
     private SubscribeDetailService subscribeDetailService;
@@ -147,21 +147,18 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
         if (CollectionUtils.isNotEmpty(arrivalDetailList)) {
 
             StockWait stockWait = new StockWait();
-            stockWait.setBusinessId(purchase.getId());// 采购id
+            stockWait.setBusinessId(arrival.getId());// 采购id
             stockWait.setBusinessCode(purchase.getCode());// 采购编码
             stockWait.setType(1);// 入库
             stockWait.setStatus(0);// 待入库
             stockWait.setBusinessType(StockWaitType.PURCHASE_ARRIVAL_IN.getDetailType());// 采购到货
+            stockWait.setPurchaseId(purchase.getId());
+
             stockWaitService.save(stockWait);
 
             List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
 
             for (ArrivalDetail arrivalDetail : arrivalDetailList) {
-                //如果到货数量为0或为空跳过
-                if(ObjectUtil.isEmpty(arrivalDetail.getCount())||arrivalDetail.getCount().compareTo(BigDecimal.ZERO)==0){
-                    continue;
-                }
-
                 Assert.notEmpty(arrivalDetail.getBussinessId(), "产品id不能为空");
                 arrivalDetail.setId(IdWorker.getId());
                 arrivalDetail.setArrivalId(arrival.getId());
@@ -171,6 +168,7 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
                 stockWaitDetails.setProductId(arrivalDetail.getBussinessId());
                 stockWaitDetails.setQuantity(arrivalDetail.getCount());
                 stockWaitDetails.setBusinessDetailsId(arrivalDetail.getId());
+                stockWaitDetails.setPurchaseDetailId(arrivalDetail.getPurchaseDetailId());
                 stockWaitDetailsList.add(stockWaitDetails);
             }
             arrivalDetailService.saveBatch(arrivalDetailList);
@@ -193,7 +191,7 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
         }
         //根据发货id查采购信息
         if (ObjectUtil.isNotEmpty(arrival.getDeliverGoodsId())) {
-            DeliverGoodsPo deliverGoodsInfo = wdlyService.getDeliverGoodsInfo(arrival.getDeliverGoodsId());
+            DeliverGoodsPo deliverGoodsInfo = myPurchasrService.getDeliverGoodsInfo(arrival.getDeliverGoodsId());
             Assert.notEmpty(deliverGoodsInfo, "查询不到发货信息");
             arrival.setPurchaseId(deliverGoodsInfo.getPurchaseId());
         }
@@ -225,7 +223,7 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
         }
 
         //查询发货信息 获取 采购id
-        DeliverGoodsPo deliverGoodsInfo = wdlyService.getDeliverGoodsInfo(deliverGoodsId);
+        DeliverGoodsPo deliverGoodsInfo = myPurchasrService.getDeliverGoodsInfo(deliverGoodsId);
 
         //去申购单取入库仓库id
         PurchaseDetail one = purchaseDetailService.getOne(q -> q.eq(PurchaseDetail::getPurchaseId, deliverGoodsInfo.getPurchaseId()));
@@ -243,7 +241,7 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
         CompanyInfo logisticsCompanyCode = companyInfoService.getOne(q -> q.eq(CompanyInfo::getCode, json.getString("logisticsCompanyCode")));
         json.put("logisticsCompanyName", logisticsCompanyCode.getName());
         //修改发货记录的状态为到货
-        wdlyService.updateDeliverGoodsStatus(deliverGoodsId);
+        myPurchasrService.updateDeliverGoodsStatus(deliverGoodsId);
 
         //获取采购信息
         Purchase purchase = purchaseService.getById(deliverGoodsInfo.getPurchaseId());
@@ -277,7 +275,7 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
         if (ObjectUtil.isNotEmpty(purchaseDetailList)) {
             Map<Long, PurchaseDetail> purchaseDetailMap = purchaseDetailList.stream().collect(Collectors.toMap(PurchaseDetail::getId, Function.identity()));
             //获取发货明细
-            List<DeliverGoodsDetailsPo> deliverGoodsDetailsInfo = wdlyService.getDeliverGoodsDetailsInfo(deliverGoodsId);
+            List<DeliverGoodsDetailsPo> deliverGoodsDetailsInfo = myPurchasrService.getDeliverGoodsDetailsInfo(deliverGoodsId);
             Map<Long, DeliverGoodsDetailsPo> deliverGoodsDetailsInfoMap = deliverGoodsDetailsInfo.stream().collect(Collectors.toMap(DeliverGoodsDetailsPo::getId, Function.identity()));
             int flag = 0;//到货数量不等于发货数量计数
             for (ArrivalDetail d : arrivalDetailList) {
@@ -311,7 +309,7 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
 
             //存在到货数量不等于发货数量 创建异常
             if (flag != 0) {
-                wdlyService.addAbnormalInfo(arrival.getId(), arrival.getCode());
+                myPurchasrService.addAbnormalInfo(arrival.getId(), arrival.getCode());
             }
         }
         arrivalDetailService.saveBatch(arrivalDetailList);

+ 2 - 2
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/WdlyServiceImpl.java → hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/MyPurchasrServiceImpl.java

@@ -4,7 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.fjhx.purchase.entity.deliver.DeliverGoodsDetailsPo;
 import com.fjhx.purchase.entity.deliver.DeliverGoodsPo;
-import com.fjhx.purchase.service.WdlyService;
+import com.fjhx.purchase.service.MyPurchasrService;
 import com.fjhx.victoriatourist.entity.abnormal.po.AbnormalInfo;
 import com.fjhx.victoriatourist.entity.deliver.po.DeliverGoods;
 import com.fjhx.victoriatourist.entity.deliver.po.DeliverGoodsDetails;
@@ -18,7 +18,7 @@ import org.springframework.stereotype.Service;
 import java.util.List;
 
 @Service
-public class WdlyServiceImpl implements WdlyService {
+public class MyPurchasrServiceImpl implements MyPurchasrService {
     @Autowired
     DeliverGoodsService deliverGoodsService;
     @Autowired

+ 1 - 1
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/order/impl/OrderInfoServiceImpl.java

@@ -262,7 +262,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
         logisticsInfos.setIsKd100(0);
         logisticsInfosService.save(logisticsInfos);
 
-        List<StockWaitDetails> stockWaitDetailsList = stockWaitDto.getStockWaitDetailsList();
+        List<StockWaitDetailsDto> stockWaitDetailsList = stockWaitDto.getStockWaitDetailsList();
 
 
         List<LogisticsDetails> logisticsDetailsList = new ArrayList<>();

+ 2 - 2
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/purchase/impl/PurchaseBackServiceImpl.java

@@ -137,7 +137,7 @@ public class PurchaseBackServiceImpl extends ServiceImpl<PurchaseBackMapper, Pur
         Assert.notEmpty(stockWaitDetails, "查询不到待出库明细信息");
         StockWaitDto stockWaitDto = BeanUtil.copyProperties(stockWaitDetailsDto, StockWaitDto.class);
         stockWaitDto.setId(stockWaitDetails.getStockWaitId());
-        stockWaitDto.setStockWaitDetailsList(Collections.singletonList(BeanUtil.copyProperties(stockWaitDetailsDto, StockWaitDetails.class)));
+        stockWaitDto.setStockWaitDetailsList(Collections.singletonList(stockWaitDetailsDto));
         backOuts(stockWaitDto);
     }
 
@@ -163,7 +163,7 @@ public class PurchaseBackServiceImpl extends ServiceImpl<PurchaseBackMapper, Pur
 
         logisticsInfosService.save(logisticsInfos);
 
-        List<StockWaitDetails> stockWaitDetailsList = stockWaitDto.getStockWaitDetailsList();
+        List<StockWaitDetailsDto> stockWaitDetailsList = stockWaitDto.getStockWaitDetailsList();
 
         List<Stock> stockList = new ArrayList<>();
 

+ 2 - 2
hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockWaitController.java

@@ -53,8 +53,8 @@ public class StockWaitController {
      * 待出入库新增
      */
     @PostMapping("/add")
-    public void add(@RequestBody StockWaitDetailsDto stockWaitDetailsDto) {
-        stockWaitService.add(stockWaitDetailsDto);
+    public void add(@RequestBody StockWaitDto stockWaitDto) {
+        stockWaitService.add(stockWaitDto);
     }
 
     /**

+ 1 - 1
hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockWaitDetailsController.java

@@ -44,7 +44,7 @@ public class StockWaitDetailsController {
     /**
      * 待出入库明细新增
      */
-    @PostMapping("/add")
+//    @PostMapping("/add")
     public void add(@RequestBody StockWaitDetailsDto stockWaitDetailsDto) {
         stockWaitDetailsService.add(stockWaitDetailsDto);
     }

+ 13 - 1
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockDto.java

@@ -1,9 +1,11 @@
 package com.fjhx.wms.entity.stock.dto;
 
 import com.fjhx.wms.entity.stock.po.Stock;
+import com.fjhx.wms.entity.stock.vo.StockVo;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -24,7 +26,7 @@ public class StockDto extends Stock {
     /**
      * 添加库存商品列表
      */
-    private List<Stock> list;
+    private List<StockDto> list;
 
     /**业务类型*/
     private Integer type;
@@ -47,4 +49,14 @@ public class StockDto extends Stock {
      * 接收人
      */
     private String receivingPerson;
+
+    /**
+     * 采购明细id
+     */
+    private Long purchaseDetailId;
+
+    /**
+     * 是否扫码入库 1是0不是
+     */
+    private Integer isScan;
 }

+ 7 - 2
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockWaitDetailsDto.java

@@ -45,7 +45,12 @@ public class StockWaitDetailsDto extends StockWaitDetails {
     private String receivingPerson;
 
     /**
-     * 扫码ids(采购明细id列表)
+     * 添加库存商品列表
      */
-    private List<Long> scanIds;
+    private List<StockWaitDetailsDto> stockWaitDetailsList;
+
+    /**
+     * 是否扫码入库 1是0不是
+     */
+    private Integer isScan;
 }

+ 6 - 1
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockWaitDto.java

@@ -26,7 +26,7 @@ public class StockWaitDto extends StockWait {
     /**
      * 待入库明细列表
      */
-    private List<StockWaitDetails> stockWaitDetailsList;
+    private List<StockWaitDetailsDto> stockWaitDetailsList;
 
 
     /**
@@ -67,4 +67,9 @@ public class StockWaitDto extends StockWait {
      */
     private String receivingPerson;
 
+    /**
+     * 是否扫码入库 1是0不是
+     */
+    private Integer isScan;
+
 }

+ 9 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockJournalDetails.java

@@ -53,4 +53,13 @@ public class StockJournalDetails extends BasePo {
      */
     private BigDecimal outStockPrice;
 
+    /**
+     * 采购明细id
+     */
+    private Long purchaseDetailId;
+
+    /**
+     * 是否扫码入库 1是0不是
+     */
+    private Integer isScan;
 }

+ 5 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockWait.java

@@ -72,4 +72,9 @@ public class StockWait extends BasePo {
      */
     private Long workOrderId;
 
+    /**
+     * 采购id
+     */
+    private Long purchaseId;
+
 }

+ 1 - 1
hx-wms/src/main/java/com/fjhx/wms/service/MyPurchaseService.java → hx-wms/src/main/java/com/fjhx/wms/service/MyWmsService.java

@@ -7,7 +7,7 @@ import com.fjhx.wms.entity.purchase.po.PurchasePo;
 import java.util.List;
 import java.util.Map;
 
-public interface MyPurchaseService {
+public interface MyWmsService {
 
     /**
      * 修改采购退货状态

+ 2 - 2
hx-wms/src/main/java/com/fjhx/wms/service/stock/StockWaitService.java

@@ -37,7 +37,7 @@ public interface StockWaitService extends BaseService<StockWait> {
     /**
      * 待出入库新增
      */
-    void add(StockWaitDetailsDto stockWaitDetailsDto);
+    void add(StockWaitDto stockWaitDto);
 
     /**
      * 待出入库编辑
@@ -54,5 +54,5 @@ public interface StockWaitService extends BaseService<StockWait> {
     /**
      * 计算结存单价(在操作库存之前计算)
      */
-    StockJournalDetails calculateUnitPrice(InOutType inOutType, Long productId, Long warehouseId, BigDecimal inOutQuantity, Integer purchaseArrival, BigDecimal purchasePrice);
+    StockJournalDetails calculateUnitPrice(InOutType inOutType, Long productId, Long warehouseId, BigDecimal inOutQuantity, Integer purchaseArrival, BigDecimal price);
 }

+ 5 - 5
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockJournalServiceImpl.java

@@ -26,7 +26,7 @@ import com.fjhx.wms.entity.stock.vo.StockJournalVo;
 import com.fjhx.wms.entity.warehouse.po.Warehouse;
 import com.fjhx.wms.entity.warehouse.vo.WarehouseVo;
 import com.fjhx.wms.mapper.stock.StockJournalMapper;
-import com.fjhx.wms.service.MyPurchaseService;
+import com.fjhx.wms.service.MyWmsService;
 import com.fjhx.wms.service.MySaleService;
 import com.fjhx.wms.service.stock.StockJournalDetailsService;
 import com.fjhx.wms.service.stock.StockJournalService;
@@ -64,7 +64,7 @@ public class StockJournalServiceImpl extends ServiceImpl<StockJournalMapper, Sto
     @Autowired
     private StockWaitService stockWaitService;
     @Autowired
-    private MyPurchaseService myPurchaseService;
+    private MyWmsService myWmsService;
     @Autowired
     private SupplierInfoService supplierInfoService;
     @Autowired
@@ -121,9 +121,9 @@ public class StockJournalServiceImpl extends ServiceImpl<StockJournalMapper, Sto
         if (JournalType.PURCHASE_ARRIVAL_IN.getDetailType().equals(stockJournalVo.getType())) {
             StockWait stockWait = stockWaitService.getById(stockJournalVo.getBusinessId());
             Assert.notEmpty(stockWait, "查询不到待出入库信息");
-            PurchasePo purchase = myPurchaseService.getPurchaseInfo(stockWait.getBusinessId());
+            PurchasePo purchase = myWmsService.getPurchaseInfo(stockWait.getBusinessId());
             Assert.notEmpty(purchase, "查询不到采购信息");
-            Map<Long, PurchaseDetailPo> purchaseDetailMap = myPurchaseService.grtPurchaseDetail(purchase.getId());
+            Map<Long, PurchaseDetailPo> purchaseDetailMap = myWmsService.grtPurchaseDetail(purchase.getId());
             //流水打印数据获取
             if (ObjectUtils.isEmpty(purchase.getDataResource())) {
                 //采购合同
@@ -149,7 +149,7 @@ public class StockJournalServiceImpl extends ServiceImpl<StockJournalMapper, Sto
                 if (ObjectUtils.isEmpty(stockWaitDetails)) {
                     continue;
                 }
-                ArrivalDetailPo arrivalDetailInfo = myPurchaseService.getArrivalDetailInfo(stockWaitDetails.getBusinessDetailsId());
+                ArrivalDetailPo arrivalDetailInfo = myWmsService.getArrivalDetailInfo(stockWaitDetails.getBusinessDetailsId());
                 if (ObjectUtils.isEmpty(arrivalDetailInfo)) {
                     continue;
                 }

+ 38 - 44
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

@@ -13,6 +13,7 @@ import com.fjhx.item.entity.product.po.ProductClassify;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductClassifyService;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.wms.entity.purchase.po.PurchaseDetailPo;
 import com.fjhx.wms.entity.stock.bo.InOutBo;
 import com.fjhx.wms.entity.stock.dto.StockDto;
 import com.fjhx.wms.entity.stock.dto.StockSelectDto;
@@ -27,6 +28,7 @@ import com.fjhx.wms.entity.stock.vo.StockVo;
 import com.fjhx.wms.entity.stock.vo.StockWaitDetailsVo;
 import com.fjhx.wms.entity.warehouse.po.Warehouse;
 import com.fjhx.wms.mapper.stock.StockMapper;
+import com.fjhx.wms.service.MyWmsService;
 import com.fjhx.wms.service.stock.*;
 import com.fjhx.wms.service.warehouse.WarehouseService;
 import com.fjhx.wms.utils.CodeEnum;
@@ -69,6 +71,8 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
     private StockWaitDetailsService stockWaitDetailsService;
     @Autowired
     private StockWaitService stockWaitService;
+    @Autowired
+    private MyWmsService myWmsService;
 
     @Override
     public Page<StockVo> getPage(StockSelectDto dto) {
@@ -365,76 +369,66 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
     @Override
     @DSTransactional
     public void add(StockDto stockDto) {
-        //创建出入库记录
-        StockJournal stockJournal = new StockJournal();
-        stockJournal.setOpType(stockDto.getType());
-        stockJournal.setType(JournalType.MANUAL_IN.getDetailType());
-        stockJournal.setCode(stockDto.getType() == 1 ? CodeEnum.SIN_CODE.getCode() : CodeEnum.SOUT_CODE.getCode());
-        stockJournal.setWarehouseId(stockDto.getWarehouseId());
-
-        stockJournal.setWorkOrderId(stockDto.getWorkOrderId());
-
-        stockJournal.setBusinessId(stockDto.getBusinessId());
-        stockJournal.setExWarehousePerson(stockDto.getExWarehousePerson());
-        stockJournal.setReceivingPerson(stockDto.getReceivingPerson());
-        //保存出入库记录
-        stockJournalService.save(stockJournal);
-        List<Stock> list = stockDto.getList();
-        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
-        for (Stock stock : list) {
-            //创建出入库明细
-            StockJournalDetails stockJournalDetails = stockWaitService.calculateUnitPrice(InOutType.IN, stock.getProductId(), stockDto.getWarehouseId(), stock.getQuantity(), 0, null);
-
-            stockJournalDetails.setStockJournalId(stockJournal.getId());
-            stockJournalDetails.setProductId(stock.getProductId());
-            stockJournalDetails.setQuantity(stock.getQuantity());
-            stockJournalDetails.setBusinessDetailsId(stock.getId());
-            stockJournalDetailsList.add(stockJournalDetails);
-
-        }
-        //操作库存
-//        ModifyInventory(1, stockDto.getList(), stockDto.getWarehouseId());
-        List<InOutBo> inOutBos = BeanUtil.copyToList(list, InOutBo.class);
-        changeStock(inOutBos, stockDto.getWarehouseId(), JournalType.MANUAL_IN);
-
-        //保存出入库明细
-        stockJournalDetailsService.saveBatch(stockJournalDetailsList);
+        manualInOrOutStock(stockDto);
     }
 
     @Override
     @DSTransactional
     public void edit(StockDto stockDto) {
+        manualInOrOutStock(stockDto);
+    }
+
+    /**
+     * 手动出入库
+     */
+    @DSTransactional
+    private synchronized void manualInOrOutStock(StockDto stockDto){
+        //获取操作类型
+        JournalType journalType = stockDto.getType() == 1 ? JournalType.MANUAL_IN : JournalType.MANUAL_OUT;
+
         //创建出入库记录
         StockJournal stockJournal = new StockJournal();
         stockJournal.setOpType(stockDto.getType());
+        stockJournal.setType(journalType.getDetailType());
         stockJournal.setCode(stockDto.getType() == 1 ? CodeEnum.SIN_CODE.getCode() : CodeEnum.SOUT_CODE.getCode());
-        stockJournal.setType(JournalType.MANUAL_OUT.getDetailType());
+        stockJournal.setWarehouseId(stockDto.getWarehouseId());
 
         stockJournal.setWorkOrderId(stockDto.getWorkOrderId());
 
-
-        stockJournal.setWarehouseId(stockDto.getWarehouseId());
         stockJournal.setBusinessId(stockDto.getBusinessId());
         stockJournal.setExWarehousePerson(stockDto.getExWarehousePerson());
         stockJournal.setReceivingPerson(stockDto.getReceivingPerson());
-
         //保存出入库记录
         stockJournalService.save(stockJournal);
-        //操作库存
-        List<Stock> list = stockDto.getList();
+        List<StockDto> list = stockDto.getList();
+
+        //解析扫码部分数据
+        List<Long> scanIds = list.stream().map(StockDto::getPurchaseDetailId).distinct().collect(Collectors.toList());
+        List<PurchaseDetailPo> purchaseDetailList = myWmsService.getPurchaseDetailList(scanIds);
+        Map<Long, BigDecimal> purchaseDetailMap = purchaseDetailList
+                .stream().collect(Collectors.toMap(PurchaseDetailPo::getId,PurchaseDetailPo::getPrice));
+
         List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
-        for (Stock stock : list) {
+        for (StockDto stock : list) {
+            //如果有采购明细id就获取采购单价,要不然单价为空(自动计算)
+            BigDecimal price = purchaseDetailMap.getOrDefault(stock.getPurchaseDetailId(),null);
+
             //创建出入库明细
-            StockJournalDetails stockJournalDetails = stockWaitService.calculateUnitPrice(InOutType.OUT, stock.getProductId(), stockDto.getWarehouseId(), stock.getQuantity(), 0, null);
+            StockJournalDetails stockJournalDetails = stockWaitService.calculateUnitPrice(journalType.getType(), stock.getProductId(), stockDto.getWarehouseId(), stock.getQuantity(), 0, price);
+
             stockJournalDetails.setStockJournalId(stockJournal.getId());
             stockJournalDetails.setProductId(stock.getProductId());
             stockJournalDetails.setQuantity(stock.getQuantity());
             stockJournalDetails.setBusinessDetailsId(stock.getId());
+
+            stockJournalDetails.setPurchaseDetailId(stockDto.getPurchaseDetailId());
+            stockJournalDetails.setIsScan(stockDto.getIsScan());
+
             stockJournalDetailsList.add(stockJournalDetails);
         }
-//        ModifyInventory(2, stockDto.getList(), stockDto.getWarehouseId());
+        //操作库存
         List<InOutBo> inOutBos = BeanUtil.copyToList(list, InOutBo.class);
-        changeStock(inOutBos, stockDto.getWarehouseId(), JournalType.MANUAL_OUT);
+        changeStock(inOutBos, stockDto.getWarehouseId(), journalType);
 
         //保存出入库明细
         stockJournalDetailsService.saveBatch(stockJournalDetailsList);

+ 4 - 4
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitDetailsServiceImpl.java

@@ -111,7 +111,8 @@ public class StockWaitDetailsServiceImpl extends ServiceImpl<StockWaitDetailsMap
     @Override
     @DSTransactional
     public synchronized void add(StockWaitDetailsDto stockWaitDetailsDto) {
-        stockWaitService.add(stockWaitDetailsDto);
+        StockWaitDto stockWaitDto = BeanUtil.copyProperties(stockWaitDetailsDto, StockWaitDto.class);
+        stockWaitService.add(stockWaitDto);
     }
 
 
@@ -120,15 +121,14 @@ public class StockWaitDetailsServiceImpl extends ServiceImpl<StockWaitDetailsMap
      */
     @Override
     public void changeStockWaitStatus(StockWaitDto stockWaitDto) {
-        List<StockWaitDetails> stockWaitDetailsDtoList = stockWaitDto.getStockWaitDetailsList();
-        List<StockWaitDetailsDto> stockWaitDetailsDtoList1 = BeanUtil.copyToList(stockWaitDetailsDtoList, StockWaitDetailsDto.class);
+        List<StockWaitDetailsDto> stockWaitDetailsDtoList = stockWaitDto.getStockWaitDetailsList();
 
         //获取待入库明细信息
         List<Long> swdIds = stockWaitDetailsDtoList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
         Map<Long, StockWaitDetails> stockWaitDetailsMap = this.mapKEntity(StockWaitDetails::getId, q -> q.in(StockWaitDetails::getId, swdIds));
 
         List<StockWaitDetails> newStockWaitDetailsList = new ArrayList<>();
-        for (StockWaitDetailsDto stockWaitDetailsDto : stockWaitDetailsDtoList1) {
+        for (StockWaitDetailsDto stockWaitDetailsDto : stockWaitDetailsDtoList) {
             //更新已入库数量 根据明细id
             StockWaitDetails stockWaitDetails = stockWaitDetailsMap.get(stockWaitDetailsDto.getId());
             if (ObjectUtil.isEmpty(stockWaitDetails)) {

+ 109 - 69
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitServiceImpl.java

@@ -22,7 +22,7 @@ import com.fjhx.wms.entity.stock.po.*;
 import com.fjhx.wms.entity.stock.vo.StockWaitDetailsVo;
 import com.fjhx.wms.entity.stock.vo.StockWaitVo;
 import com.fjhx.wms.mapper.stock.StockWaitMapper;
-import com.fjhx.wms.service.MyPurchaseService;
+import com.fjhx.wms.service.MyWmsService;
 import com.fjhx.wms.service.WmsService;
 import com.fjhx.wms.service.arrival.ArrivalStockRecordsDetailsService;
 import com.fjhx.wms.service.arrival.ArrivalStockRecordsService;
@@ -41,6 +41,8 @@ import java.math.RoundingMode;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
@@ -75,7 +77,7 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
     @Autowired
     private StockFrozenService stockFrozenService;
     @Autowired
-    private MyPurchaseService myPurchaseService;
+    private MyWmsService myWmsService;
 
     @Override
     public Page<StockWaitVo> getPage(StockWaitSelectDto dto) {
@@ -126,42 +128,26 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
 
     @DSTransactional
     @Override
-    public synchronized void add(StockWaitDetailsDto dto) {
-        StockWaitDetails stockWaitDetails = stockWaitDetailsService.getById(dto.getId());
-        Assert.notEmpty(stockWaitDetails, "查询不到待出库明细信息");
-        StockWait stockWait = this.getById(stockWaitDetails.getStockWaitId());
-        Assert.notEmpty(stockWait, "查询不到待出库信息");
+    public synchronized void add(StockWaitDto dto) {
+        //查询待出入库明细信息
+//        StockWaitDetails stockWaitDetails = stockWaitDetailsService.getById(dto.getId());
+//        Assert.notEmpty(stockWaitDetails, "查询不到待出库明细信息");
+        StockWait stockWait = this.getById(dto.getId());
+        Assert.notEmpty(stockWait, "查询不到待出入库信息");
 
         //获取需要的相关参数
         Long warehouseId = dto.getWarehouseId();
         //根据待出入库类型获取流水类型
         JournalType stockJournalType = getStockJournalType(stockWait.getBusinessType());
-        Long productId = stockWaitDetails.getProductId();
-        BigDecimal inOutQuantity = dto.getQuantity();
-
-        //更新待出入库明细,出入库数量,状态
-        BigDecimal receiptQuantity = stockWaitDetails.getReceiptQuantity().add(inOutQuantity);
-        Integer stockWaitDetailsStatus = receiptQuantity.compareTo(stockWaitDetails.getQuantity()) >= 0 ? 2 : 1;
-        stockWaitDetailsService.update(q -> q
-                .eq(StockWaitDetails::getId, stockWaitDetails.getId())
-                .set(StockWaitDetails::getReceiptQuantity, receiptQuantity)
-                .set(StockWaitDetails::getStatus, stockWaitDetailsStatus)
-        );
-
-        //判断业务类型是否是采购到货
-        int purchaseArrival = StockWaitType.PURCHASE_ARRIVAL_IN.getDetailType().equals(stockWait.getBusinessType()) ? 1 : 0;
-        //获取采购单价(只有采购到货才有)
-        PurchaseDetailPo purchaseDetail = baseMapper.getPurchaseDetail(IWrapper.getWrapper().eq("swd.id", stockWaitDetails.getId()));
-        BigDecimal purchasePrice = null;
-        if(ObjectUtil.isNotEmpty(purchaseDetail)){
-            purchasePrice = purchaseDetail.getPrice();
-        }
-        //计算结存单价
-        StockJournalDetails stockJournalDetails = calculateUnitPrice(stockJournalType.getType(), productId, warehouseId, inOutQuantity, purchaseArrival, purchasePrice);
 
-        //操作库存
-        InOutBo inOutBo = new InOutBo(productId, inOutQuantity);
-        stockService.changeStock(Collections.singletonList(inOutBo), warehouseId, stockJournalType);
+        //获取明细列表
+        List<StockWaitDetailsDto> stockList = dto.getStockWaitDetailsList();
+
+        //解析扫码部分数据
+        List<Long> scanIds = stockList.stream().map(StockWaitDetails::getPurchaseDetailId).distinct().collect(Collectors.toList());
+        List<PurchaseDetailPo> purchaseDetailList = myWmsService.getPurchaseDetailList(scanIds);
+        Map<Long, BigDecimal> purchaseDetailMap = purchaseDetailList
+                .stream().collect(Collectors.toMap(PurchaseDetailPo::getId, PurchaseDetailPo::getPrice));
 
         //创建流水
         StockJournal stockJournal = new StockJournal();
@@ -178,36 +164,89 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
         stockJournal.setExWarehousePerson(dto.getExWarehousePerson());
         stockJournal.setReceivingPerson(dto.getReceivingPerson());
         stockJournalService.save(stockJournal);
-        //创建流水明细
-        stockJournalDetails.setStockJournalId(stockJournal.getId());
-        stockJournalDetails.setProductId(productId);
-        stockJournalDetails.setQuantity(inOutQuantity);
-        stockJournalDetails.setBusinessDetailsId(stockWaitDetails.getId());
-        stockJournalDetailsService.save(stockJournalDetails);
-
-        //更新待入库状态(等待明细操作完执行)
-        long count = stockWaitDetailsService.count(q -> q
-                .eq(StockWaitDetails::getStockWaitId, stockWait.getId())
-                .ne(StockWaitDetails::getStatus, 2)
-        );
-        Integer StockWaitStatus = count > 0 ? 1 : 2;
-        this.update(q -> q
-                .eq(StockWait::getId, stockWait.getId())
-                .set(StockWait::getStatus, StockWaitStatus)
-                .set(BasePo::getUpdateTime, new Date())
-                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
-        );
-
-        //生产任务待出库(物料出库解冻冻结库存)
-        if (StockWaitType.PRODUCTION_TASK_OUT.getDetailType().equals(stockWait.getType())) {
-            //减少冻结库存
-            StockFrozen stockFrozen = stockFrozenService.getOne(q -> q.eq(StockFrozen::getProductId, productId));
-            stockFrozenService.update(q -> q
-                    .eq(StockFrozen::getId, stockFrozen.getId())
-                    .setSql("frozen_quantity - " + inOutQuantity)
+
+        //处理每条明细
+        for (StockWaitDetailsDto stockWaitDetailsDto : stockList) {
+            //如果有采购明细id就获取采购单价,要不然单价为空(自动计算)
+            BigDecimal price = purchaseDetailMap.getOrDefault(stockWaitDetailsDto.getPurchaseDetailId(), null);
+
+            // 每次重新获取最新的数据
+            StockWaitDetails stockWaitDetails1 = stockWaitDetailsService.getById(stockWaitDetailsDto.getId());
+            Assert.notEmpty(stockWaitDetails1, "查询不到待出入库明细信息");
+
+
+            //获取产品id
+            Long productId = stockWaitDetails1.getProductId();
+            //获取出入库数量
+            BigDecimal inOutQuantity = stockWaitDetailsDto.getQuantity();
+
+            //更新待出入库明细,出入库数量,状态
+            BigDecimal receiptQuantity = stockWaitDetails1.getReceiptQuantity().add(inOutQuantity);
+            Integer stockWaitDetailsStatus = receiptQuantity.compareTo(stockWaitDetails1.getQuantity()) >= 0 ? 2 : 1;
+            stockWaitDetailsService.update(q -> q
+                    .eq(StockWaitDetails::getId, stockWaitDetails1.getId())
+                    .set(StockWaitDetails::getReceiptQuantity, receiptQuantity)
+                    .set(StockWaitDetails::getStatus, stockWaitDetailsStatus)
+            );
+
+            //判断业务类型是否是采购到货
+            int purchaseArrival = StockWaitType.PURCHASE_ARRIVAL_IN.getDetailType().equals(stockWait.getBusinessType()) ? 1 : 0;
+            //获取采购单价(只有采购到货才有)
+            PurchaseDetailPo purchaseDetail = baseMapper.getPurchaseDetail(IWrapper.getWrapper().eq("swd.id", stockWaitDetails1.getId()));
+            //如果是采购到货
+            if (purchaseArrival == 1) {
+                if (ObjectUtil.isEmpty(purchaseDetail)) {
+                    throw new ServiceException("查询不到采购到货,采购信息!");
+                }
+                price = purchaseDetail.getPrice();
+            }
+            //计算结存单价
+            StockJournalDetails stockJournalDetails = calculateUnitPrice(stockJournalType.getType(), productId, warehouseId, inOutQuantity, purchaseArrival, price);
+
+            //操作库存
+            InOutBo inOutBo = new InOutBo(productId, inOutQuantity);
+            stockService.changeStock(Collections.singletonList(inOutBo), warehouseId, stockJournalType);
+
+
+            //赋值是否扫码入库
+            Long scanId = stockWaitDetailsDto.getPurchaseDetailId();
+            int isScan = stockWaitDetailsDto.getIsScan();
+            stockJournalDetails.setIsScan(ObjectUtil.isEmpty(isScan) ? 0 : isScan);
+            //如果是采购到货直接拿采购明细id,不是拿扫码结果的采购明细id/空
+            Long purchaseDetailId = purchaseArrival == 1 ? purchaseDetail.getId() : scanId;
+            stockJournalDetails.setPurchaseDetailId(purchaseDetailId);
+
+            //创建流水明细
+            stockJournalDetails.setStockJournalId(stockJournal.getId());
+            stockJournalDetails.setProductId(productId);
+            stockJournalDetails.setQuantity(inOutQuantity);
+            stockJournalDetails.setBusinessDetailsId(stockWaitDetails1.getId());
+            stockJournalDetailsService.save(stockJournalDetails);
+
+            //更新待入库状态(等待明细操作完执行)
+            long count = stockWaitDetailsService.count(q -> q
+                    .eq(StockWaitDetails::getStockWaitId, stockWait.getId())
+                    .ne(StockWaitDetails::getStatus, 2)
+            );
+            Integer StockWaitStatus = count > 0 ? 1 : 2;
+            this.update(q -> q
+                    .eq(StockWait::getId, stockWait.getId())
+                    .set(StockWait::getStatus, StockWaitStatus)
                     .set(BasePo::getUpdateTime, new Date())
                     .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
             );
+
+            //生产任务待出库(物料出库解冻冻结库存)
+            if (StockWaitType.PRODUCTION_TASK_OUT.getDetailType().equals(stockWait.getType())) {
+                //减少冻结库存
+                StockFrozen stockFrozen = stockFrozenService.getOne(q -> q.eq(StockFrozen::getProductId, productId));
+                stockFrozenService.update(q -> q
+                        .eq(StockFrozen::getId, stockFrozen.getId())
+                        .setSql("frozen_quantity - " + inOutQuantity)
+                        .set(BasePo::getUpdateTime, new Date())
+                        .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+                );
+            }
         }
     }
 
@@ -215,7 +254,7 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
      * 计算结存单价(在操作库存之前计算)
      */
     @Override
-    public synchronized StockJournalDetails calculateUnitPrice(InOutType inOutType, Long productId, Long warehouseId, BigDecimal inOutQuantity, Integer purchaseArrival, BigDecimal purchasePrice) {
+    public synchronized StockJournalDetails calculateUnitPrice(InOutType inOutType, Long productId, Long warehouseId, BigDecimal inOutQuantity, Integer purchaseArrival, BigDecimal price) {
         StockJournalDetails stockJournalDetails = new StockJournalDetails();
         stockJournalDetails.setProductId(productId);
         stockJournalDetails.setQuantity(inOutQuantity);
@@ -237,7 +276,7 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
         //获取产品当前仓库信息
         Stock stock = stockService.getOne(q -> q.eq(Stock::getWarehouseId, warehouseId).eq(Stock::getProductId, productId));
         //库存不存在创建0库存记录
-        if(ObjectUtil.isEmpty(stock)){
+        if (ObjectUtil.isEmpty(stock)) {
             stock = new Stock();
             stock.setWarehouseId(warehouseId);
             stock.setProductId(productId);
@@ -247,13 +286,11 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
         Stock finalStock = stock;
         if (inOutType.equals(InOutType.IN)) {
             //入库
-            //【其他入库】当前价值=实时不在库单价
-            BigDecimal price = outUnitPrice;
-
-            //【采购入库】当前价值=采购单价
-            if (purchaseArrival == 1) {
-                price = purchasePrice;
+            //有单价【采购入库等】按单价算,没有按【其他入库】当前价值=实时不在库单价
+            if (price == null) {
+                price = outUnitPrice;
             }
+
             //【入库】实时在库单价=(库存*实时在库单价 + 当前入库数量*当前价值) / (库存+当前入库数量)
             BigDecimal multiply0 = stockQuantity.multiply(unitPrice);//库存*实时在库单价
             BigDecimal multiply1 = inOutQuantity.multiply(price);//当前入库数量*当前价值
@@ -286,8 +323,11 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
             stockJournalDetails.setOutStockPrice(outUnitPrice);
         } else {
             //出库
-            //【出库】当前价值=实时在库单价
-            BigDecimal price = unitPrice;
+
+            //有单价按单价算,没有按【出库】当前价值=实时在库单价
+            if (price == null) {
+                price = unitPrice;
+            }
 
             //【出库】实时不在库单价=(不在库数量*实时不在库单价 + 当前出库数量*当前价值) / (不在库数量+当前出库数量)
             BigDecimal multiply0 = stockOutQuantity.multiply(outUnitPrice);//不在库数量*实时不在库单价