소스 검색

出入库流水打印

yzc 2 년 전
부모
커밋
6ead39d69c
24개의 변경된 파일1022개의 추가작업 그리고 192개의 파일을 삭제
  1. 29 0
      hx-purchase/src/main/java/com/fjhx/purchase/service/MyPurchaseServiceImpl.java
  2. 15 14
      hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java
  3. 17 13
      hx-sale/src/main/java/com/fjhx/sale/flow/PurchaseFlow.java
  4. 22 0
      hx-sale/src/main/java/com/fjhx/sale/service/MySaleServiceImpl.java
  5. 48 22
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdOrderServiceImpl.java
  6. 26 14
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/purchase/impl/PurchaseBackServiceImpl.java
  7. 1 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/quality/impl/QualityInfoServiceImpl.java
  8. 60 24
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/stock/impl/StockTransferServiceImpl.java
  9. 4 0
      hx-wms/pom.xml
  10. 326 0
      hx-wms/src/main/java/com/fjhx/wms/entity/contract/po/ContractPo.java
  11. 124 0
      hx-wms/src/main/java/com/fjhx/wms/entity/purchase/po/PurchaseDetailPo.java
  12. 133 0
      hx-wms/src/main/java/com/fjhx/wms/entity/purchase/po/PurchasePo.java
  13. 8 4
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockJournalDetails.java
  14. 18 1
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockJournalDetailsVo.java
  15. 12 7
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockJournalVo.java
  16. 1 2
      hx-wms/src/main/java/com/fjhx/wms/mapper/stock/StockJournalMapper.java
  17. 15 0
      hx-wms/src/main/java/com/fjhx/wms/service/MyPurchaseService.java
  18. 8 0
      hx-wms/src/main/java/com/fjhx/wms/service/MySaleService.java
  19. 1 2
      hx-wms/src/main/java/com/fjhx/wms/service/stock/StockService.java
  20. 94 28
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockJournalServiceImpl.java
  21. 27 15
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java
  22. 21 8
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitServiceImpl.java
  23. 12 12
      hx-wms/src/main/resources/mapper/stock/StockJournalDetailsMapper.xml
  24. 0 26
      hx-wms/src/main/resources/mapper/stock/StockJournalMapper.xml

+ 29 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/MyPurchaseServiceImpl.java

@@ -1,18 +1,34 @@
 package com.fjhx.purchase.service;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.fjhx.common.utils.Assert;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
+import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
 import com.fjhx.purchase.entity.sales.enums.SalesReturnDetailStatusEnum;
 import com.fjhx.purchase.entity.sales.po.SalesReturnDetail;
+import com.fjhx.purchase.service.purchase.PurchaseDetailService;
+import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.fjhx.purchase.service.sales.SalesReturnDetailService;
+import com.fjhx.wms.entity.purchase.po.PurchaseDetailPo;
+import com.fjhx.wms.entity.purchase.po.PurchasePo;
 import com.fjhx.wms.service.MyPurchaseService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
 @Service
 public class MyPurchaseServiceImpl implements MyPurchaseService {
 
     @Autowired
     private SalesReturnDetailService salesReturnDetailService;
+    @Autowired
+    private PurchaseService purchaseService;
+    @Autowired
+    private PurchaseDetailService purchaseDetailService;
 
     /**
      * 修改采购退货状态
@@ -35,4 +51,17 @@ public class MyPurchaseServiceImpl implements MyPurchaseService {
         salesReturnDetail.setStatus(status);
         salesReturnDetailService.updateById(salesReturnDetail);
     }
+
+    @Override
+    public PurchasePo getPurchaseInfo(Long id) {
+        Purchase purchase = purchaseService.getById(id);
+        return BeanUtil.copyProperties(purchase, PurchasePo.class);
+    }
+
+    @Override
+    public Map<Long, PurchaseDetailPo> grtPurchaseDetail(Long id) {
+        List<PurchaseDetail> purchaseDetailList = purchaseDetailService.list(q -> q.eq(PurchaseDetail::getPurchaseId, id));
+        List<PurchaseDetailPo> purchaseDetailPos = BeanUtil.copyToList(purchaseDetailList, PurchaseDetailPo.class);
+        return purchaseDetailPos.stream().collect(Collectors.toMap(PurchaseDetailPo::getId, Function.identity()));
+    }
 }

+ 15 - 14
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java

@@ -230,7 +230,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
                     JSONObject json = JSONObject.parseObject(victoriatouristJson);
                     String warehouseName = warehousesMap.get(json.getLong("receiptWarehouseId"));
                     json.put("receiptWarehouseName", warehouseName);
-                    purchaseVo.setVictoriatouristJson(JSONObject.toJSONString(json,JSONWriter.Feature.WriteLongAsString));
+                    purchaseVo.setVictoriatouristJson(JSONObject.toJSONString(json, JSONWriter.Feature.WriteLongAsString));
                 }
             }
             //赋值到货状态
@@ -460,14 +460,14 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
      * 采购统计(采购列表)
      */
     @Override
-    public  Map<String,Object> purchaseStatistics(PurchaseSelectDto dto) {
+    public Map<String, Object> purchaseStatistics(PurchaseSelectDto dto) {
         //存放到货状态
         List<Integer> arrivalStatus = Arrays.asList(0, 10, 20);//到货状态 0未到货  10 部分到货  20已到货
 
         //存放采购统计数据
-        Map<String,Object> map = new HashMap<>();
+        Map<String, Object> map = new HashMap<>();
         //存放采购统计详情
-        List<Map<String,Object>> list = new ArrayList<>();
+        List<Map<String, Object>> list = new ArrayList<>();
 
         QueryWrapper<Purchase> query = Wrappers.query();
         query.select("count(*) count,sum(amount) amount,ifnull(arrival_status,-1) arrivalStatus");
@@ -475,29 +475,29 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
         List<Purchase> purchaseList = baseMapper.selectList(query);
         //计算合计订单数
         Integer count = purchaseList.stream().map(Purchase::getCount).reduce(Integer::sum).orElse(0);
-        map.put("count",count);
+        map.put("count", count);
         //计算合计采购金额
         BigDecimal amount = purchaseList.stream().map(Purchase::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-        map.put("amount",amount);
+        map.put("amount", amount);
         Map<Integer, List<Purchase>> purchaseMap = purchaseList.stream().collect(Collectors.groupingBy(Purchase::getArrivalStatus));
 
         //获取到每个到货状态的值
         for (Integer status : arrivalStatus) {
             //赋值初始值
-            Map<String,Object> statusMap = new HashMap<>();
-            statusMap.put("arrivalStatus",status);
-            statusMap.put("purchaseCount",0);
-            statusMap.put("purchaseAmount",0);
+            Map<String, Object> statusMap = new HashMap<>();
+            statusMap.put("arrivalStatus", status);
+            statusMap.put("purchaseCount", 0);
+            statusMap.put("purchaseAmount", 0);
 
             //赋值
             List<Purchase> purchases = purchaseMap.get(status);
-            if (CollectionUtils.isNotEmpty(purchases)){
-                statusMap.put("purchaseCount",purchases.get(0).getCount());
-                statusMap.put("purchaseAmount",purchases.get(0).getAmount());
+            if (CollectionUtils.isNotEmpty(purchases)) {
+                statusMap.put("purchaseCount", purchases.get(0).getCount());
+                statusMap.put("purchaseAmount", purchases.get(0).getAmount());
             }
             list.add(statusMap);
         }
-        map.put("purchaseList",list);
+        map.put("purchaseList", list);
         return map;
     }
 
@@ -528,4 +528,5 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
 
         return page;
     }
+
 }

+ 17 - 13
hx-sale/src/main/java/com/fjhx/sale/flow/PurchaseFlow.java

@@ -98,21 +98,25 @@ public class PurchaseFlow extends FlowDelegate {
             purchaseDetailService.saveBatch(purchaseDetailList);
             //修改申购明细的采购状态
             for (PurchaseDetail purchaseDetail : purchaseDetailList) {
-                //计算已经采购的数量
-                List<PurchaseDetail> purchaseDetails = purchaseDetailService.list(q -> q
-                        .eq(PurchaseDetail::getSubscribeDetailId, purchaseDetail.getSubscribeDetailId())
-                );
-                BigDecimal pdCount = purchaseDetails.stream().map(PurchaseDetail::getCount).reduce(BigDecimal.ZERO, BigDecimal::add);
-                SubscribeDetail subscribeDetail = subscribeDetailService.getById(purchaseDetail.getSubscribeDetailId());
-                if (pdCount.compareTo(subscribeDetail.getCount()) >= 0) {
-                    //修改为已采购
-                    subscribeDetail.setStatus(SubscribeDetailStatusEnum.PURCHASED.getKey());
-                } else {
-                    //修改为部分采购
-                    subscribeDetail.setStatus(SubscribeDetailStatusEnum.LITT_PAID_AMOUNT.getKey());
+                //如果来源是申购
+                if (ObjectUtils.isEmpty(purchase.getDataResource())) {
+                    //计算已经采购的数量
+                    List<PurchaseDetail> purchaseDetails = purchaseDetailService.list(q -> q
+                            .eq(PurchaseDetail::getSubscribeDetailId, purchaseDetail.getSubscribeDetailId())
+                    );
+                    BigDecimal pdCount = purchaseDetails.stream().map(PurchaseDetail::getCount).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    SubscribeDetail subscribeDetail = subscribeDetailService.getById(purchaseDetail.getSubscribeDetailId());
+                    if (pdCount.compareTo(subscribeDetail.getCount()) >= 0) {
+                        //修改为已采购
+                        subscribeDetail.setStatus(SubscribeDetailStatusEnum.PURCHASED.getKey());
+                    } else {
+                        //修改为部分采购
+                        subscribeDetail.setStatus(SubscribeDetailStatusEnum.LITT_PAID_AMOUNT.getKey());
+                    }
+                    subscribeDetailService.updateById(subscribeDetail);
                 }
-                subscribeDetailService.updateById(subscribeDetail);
             }
+
         }
         //保存其他费用信息
         List<PurchaseOtherFee> otherFeeList = purchase.getOtherFeeList();

+ 22 - 0
hx-sale/src/main/java/com/fjhx/sale/service/MySaleServiceImpl.java

@@ -0,0 +1,22 @@
+package com.fjhx.sale.service;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.fjhx.sale.entity.contract.po.Contract;
+import com.fjhx.sale.service.contract.ContractService;
+import com.fjhx.wms.entity.contract.po.ContractPo;
+import com.fjhx.wms.service.MySaleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MySaleServiceImpl implements MySaleService {
+
+    @Autowired
+    private ContractService contractService;
+
+    @Override
+    public ContractPo getContractInfo(Long id) {
+        Contract contract = contractService.getById(id);
+        return BeanUtil.copyProperties(contract, ContractPo.class);
+    }
+}

+ 48 - 22
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdOrderServiceImpl.java

@@ -33,6 +33,7 @@ import com.fjhx.victoriatourist.service.logistics.LogisticsInfosService;
 import com.fjhx.victoriatourist.service.stock.StockTransferDetailsService;
 import com.fjhx.victoriatourist.service.stock.StockTransferService;
 import com.fjhx.victoriatourist.utils.CodeEnum;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
 import com.fjhx.wms.entity.stock.emums.JournalType;
 import com.fjhx.wms.entity.stock.emums.StockWaitType;
 import com.fjhx.wms.entity.stock.po.*;
@@ -187,7 +188,6 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
         CustomizeAreaUtil.setAreaId(jdOrderDto);
 
 
-
     }
 
     @DSTransactional
@@ -304,6 +304,17 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
         List<StockTransferDetails> stockTransferDetailsList = new ArrayList<>();
         List<JdOrderDetails> jdOrderDetailsList = jdOrderDto.getJdOrderDetailsList();
         List<Stock> stockList = new ArrayList<>();
+
+        //创建出库记录
+        StockJournal stockJournal1 = new StockJournal();
+        stockJournal1.setOpType(2);
+        stockJournal1.setType(JournalType.ADJUSTING_OUT.getDetailType());
+        stockJournal1.setCode(stockTransfer.getCode());
+        stockJournal1.setWarehouseId(stockTransfer.getOutWarehouseId());
+        stockJournal1.setBusinessId(stockTransfer.getId());
+        //保存出库记录
+        stockJournalService.save(stockJournal1);
+        List<StockJournalDetails> stockJournalDetailsList1 = new ArrayList<>();
         for (JdOrderDetails jdOrderDetails : jdOrderDetailsList) {
             StockTransferDetails stockTransferDetails = new StockTransferDetails();
             stockTransferDetails.setBusinessDetailsId(jdOrderDetails.getId());
@@ -317,21 +328,22 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
             stock.setProductId(jdOrderDetails.getProductId());
             stock.setQuantity(jdOrderDetails.getQuantity());
             stockList.add(stock);
+
+            //创建出入库明细
+            StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+            stockJournalDetails.setStockJournalId(stockJournal1.getId());
+            stockJournalDetails.setProductId(stock.getProductId());
+            stockJournalDetails.setQuantity(stock.getQuantity());
+            stockJournalDetails.setBusinessDetailsId(jdOrderDetails.getId());
+            stockJournalDetailsList1.add(stockJournalDetails);
+
         }
         stockTransferDetailsService.saveBatch(stockTransferDetailsList);
 
-        //创建出库记录
-        StockJournal stockJournal1 = new StockJournal();
-        stockJournal1.setOpType(2);
-        stockJournal1.setType(JournalType.ADJUSTING_OUT.getDetailType());
-        stockJournal1.setCode(stockTransfer.getCode());
-        stockJournal1.setWarehouseId(stockTransfer.getOutWarehouseId());
-        stockJournal1.setBusinessId(stockTransfer.getId());
-        //保存出库记录
-        stockJournalService.save(stockJournal1);
+
         if (ObjectUtil.isNotEmpty(stockList)) {
             //出库
-            List<StockJournalDetails> stockJournalDetailsList1 = stockService.ModifyInventory(stockJournal1.getId(), 2, stockList, stockTransfer.getOutWarehouseId());
+            stockService.ModifyInventory(2, stockList, stockTransfer.getOutWarehouseId());
             //保存出库记录明细
             stockJournalDetailsService.saveBatch(stockJournalDetailsList1);
         }
@@ -350,7 +362,7 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
 
         List<LogisticsDetails> logisticsDetailsList = new ArrayList<>();
         for (JdOrderDetails jdOrderDetails : jdOrderDetailsList) {
-            LogisticsDetails logisticsDetails =new LogisticsDetails();
+            LogisticsDetails logisticsDetails = new LogisticsDetails();
             logisticsDetails.setLogisticsInfoId(logisticsInfos.getId());
             logisticsDetails.setLogisticsInfoCode(logisticsInfos.getCode());
             logisticsDetails.setBusinessDetailsId(jdOrderDetails.getId());
@@ -391,15 +403,29 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
         stockTransfer.setInUserId(SecurityUtils.getUserId());//赋值接收人
         stockTransfer.setInTime(new Date());//赋值接收时间
 
+
+        //创建入库记录
+        StockJournal stockJournal = new StockJournal();
+        stockJournal.setOpType(1);
+        stockJournal.setType(JournalType.ADJUSTING_IN.getDetailType());
+        stockJournal.setCode(stockTransfer.getCode());
+        stockJournal.setWarehouseId(stockTransfer.getInWarehouseId());
+        stockJournal.setBusinessId(stockTransfer.getId());
+        //保存人库记录
+        stockJournalService.save(stockJournal);
+        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
+
         //明细
         List<Stock> stockList = new ArrayList<>();
         List<StockTransferDetails> stockTransferDetailsList = stockTransferDto.getStockTransferDetailsList();
+
         if (ObjectUtil.isNotEmpty(stockTransferDetailsList)) {
             //获取数据库中的数据
             List<Long> ids = stockTransferDetailsList.stream().map(StockTransferDetails::getId).collect(Collectors.toList());
             List<StockTransferDetails> oldstockTransferDetailsList = stockTransferDetailsService.listByIds(ids);
             Map<Long, StockTransferDetails> oldstockTransferDetailsMap = oldstockTransferDetailsList.stream().collect(Collectors.toMap(StockTransferDetails::getId, Function.identity()));
 
+
             Integer abnormalFlag = 0;
             for (StockTransferDetails stockTransferDetails : stockTransferDetailsList) {
                 Stock stock = new Stock();
@@ -407,6 +433,14 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
                 stock.setQuantity(stockTransferDetails.getInQuantity());
                 stockList.add(stock);
 
+                //创建出入库明细
+                StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+                stockJournalDetails.setStockJournalId(stockJournal.getId());
+                stockJournalDetails.setProductId(stock.getProductId());
+                stockJournalDetails.setQuantity(stock.getQuantity());
+                stockJournalDetails.setBusinessDetailsId(stockTransferDetails.getId());
+                stockJournalDetailsList.add(stockJournalDetails);
+
                 //调仓接收数量与发出数量不一致
                 StockTransferDetails oldstockTransferDetails = oldstockTransferDetailsMap.get(stockTransferDetails.getId());
                 //计算接收总数 接收数+已经接收数
@@ -438,18 +472,10 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
 
         stockTransferService.updateById(stockTransfer);
         stockTransferDetailsService.updateBatchById(stockTransferDetailsList);
-        //创建入库记录
-        StockJournal stockJournal = new StockJournal();
-        stockJournal.setOpType(1);
-        stockJournal.setType(JournalType.ADJUSTING_IN.getDetailType());
-        stockJournal.setCode(stockTransfer.getCode());
-        stockJournal.setWarehouseId(stockTransfer.getInWarehouseId());
-        stockJournal.setBusinessId(stockTransfer.getId());
-        //保存人库记录
-        stockJournalService.save(stockJournal);
+
         if (ObjectUtil.isNotEmpty(stockList)) {
             //入库
-            List<StockJournalDetails> stockJournalDetailsList = stockService.ModifyInventory(stockJournal.getId(), 1, stockList, stockTransfer.getInWarehouseId());
+            stockService.ModifyInventory(1, stockList, stockTransfer.getInWarehouseId());
             //保存入库记录明细
             stockJournalDetailsService.saveBatch(stockJournalDetailsList);
         }

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

@@ -24,6 +24,7 @@ import com.fjhx.victoriatourist.service.logistics.LogisticsDetailsService;
 import com.fjhx.victoriatourist.service.logistics.LogisticsInfosService;
 import com.fjhx.victoriatourist.service.purchase.PurchaseBackDetailsService;
 import com.fjhx.victoriatourist.service.purchase.PurchaseBackService;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitDetailsDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitDto;
 import com.fjhx.wms.entity.stock.emums.JournalType;
@@ -168,6 +169,22 @@ public class PurchaseBackServiceImpl extends ServiceImpl<PurchaseBackMapper, Pur
 
         stockWaitDetailsService.changeStockWaitStatus(stockWaitDto);
 
+        //创建出入库记录
+        StockJournal stockJournal = new StockJournal();
+        stockJournal.setOpType(byId.getType());
+        //退货出库
+        stockJournal.setType(JournalType.BACK_OUT.getDetailType());
+
+        DynamicDataSourceContextHolder.push(SourceConstant.WMS);
+        stockJournal.setCode(CodeEnum.SOUT_CODE.getCode());
+        DynamicDataSourceContextHolder.poll();
+
+        stockJournal.setWarehouseId(stockWaitDto.getWarehouseId());
+        stockJournal.setBusinessId(byId.getId());
+        //保存出入库记录
+        stockJournalService.save(stockJournal);
+
+        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
 
         for (StockWaitDetails stockWaitDetails0 : stockWaitDetailsList) {
             //修改待出入库状态
@@ -181,6 +198,14 @@ public class PurchaseBackServiceImpl extends ServiceImpl<PurchaseBackMapper, Pur
             stock.setProductId(stockWaitDetails.getProductId());
             stockList.add(stock);
 
+            //创建出入库明细
+            StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+            stockJournalDetails.setStockJournalId(stockJournal.getId());
+            stockJournalDetails.setProductId(stock.getProductId());
+            stockJournalDetails.setQuantity(stock.getQuantity());
+            stockJournalDetails.setBusinessDetailsId(stockWaitDetails0.getId());
+            stockJournalDetailsList.add(stockJournalDetails);
+
 
             LogisticsDetails logisticsDetails = new LogisticsDetails();
             logisticsDetails.setLogisticsInfoId(logisticsInfos.getId());
@@ -190,23 +215,10 @@ public class PurchaseBackServiceImpl extends ServiceImpl<PurchaseBackMapper, Pur
             logisticsDetailsService.save(logisticsDetails);
         }
 
-        //创建出入库记录
-        StockJournal stockJournal = new StockJournal();
-        stockJournal.setOpType(byId.getType());
-        //退货出库
-        stockJournal.setType(JournalType.BACK_OUT.getDetailType());
-
-        DynamicDataSourceContextHolder.push(SourceConstant.WMS);
-        stockJournal.setCode(CodeEnum.SOUT_CODE.getCode());
-        DynamicDataSourceContextHolder.poll();
 
-        stockJournal.setWarehouseId(stockWaitDto.getWarehouseId());
-        stockJournal.setBusinessId(byId.getId());
-        //保存出入库记录
-        stockJournalService.save(stockJournal);
 
         //退货出库出次品库存
-        List<StockJournalDetails> stockJournalDetailsList = stockService.ModifyInventory(stockJournal.getId(), 4, stockList, stockWaitDto.getWarehouseId());
+        stockService.ModifyInventory(4, stockList, stockWaitDto.getWarehouseId());
         //保存出入库明细
         stockJournalDetailsService.saveBatch(stockJournalDetailsList);
     }

+ 1 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/quality/impl/QualityInfoServiceImpl.java

@@ -266,6 +266,7 @@ public class QualityInfoServiceImpl extends ServiceImpl<QualityInfoMapper, Quali
             stockJournalDetails.setStockJournalId(stockJournal.getId());
             stockJournalDetails.setProductId(qualityDetails.getProductInfoId());
             stockJournalDetails.setQuantity(qualityDetails.getQualifiedQuantity().add(qualityDetails.getDisqualificationQuantity()));
+            stockJournalDetails.setBusinessDetailsId(qualityDetails.getId());
             stockJournalDetailsList.add(stockJournalDetails);
         }
         stockService.saveOrUpdateBatch(stockList);

+ 60 - 24
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/stock/impl/StockTransferServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.utils.Assert;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.victoriatourist.entity.abnormal.po.AbnormalInfo;
 import com.fjhx.victoriatourist.entity.stock.dto.StockTransferDto;
@@ -18,8 +19,8 @@ import com.fjhx.victoriatourist.mapper.stock.StockTransferMapper;
 import com.fjhx.victoriatourist.service.abnormal.AbnormalInfoService;
 import com.fjhx.victoriatourist.service.stock.StockTransferDetailsService;
 import com.fjhx.victoriatourist.service.stock.StockTransferService;
-import com.fjhx.common.utils.Assert;
 import com.fjhx.victoriatourist.utils.CodeEnum;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
 import com.fjhx.wms.entity.stock.emums.JournalType;
 import com.fjhx.wms.entity.stock.po.Stock;
 import com.fjhx.wms.entity.stock.po.StockJournal;
@@ -125,15 +126,6 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         this.save(stockTransferDto);
         List<StockTransferDetails> stockTransferDetailsList = stockTransferDto.getStockTransferDetailsList();
         List<Stock> stockList = new ArrayList<>();
-        for (StockTransferDetails stockTransferDetails : stockTransferDetailsList) {
-            Stock stock = new Stock();
-            stock.setProductId(stockTransferDetails.getProductId());
-            stock.setQuantity(stockTransferDetails.getOutQuantity());
-            stockList.add(stock);
-
-            stockTransferDetails.setStockTransferId(stockTransferDto.getId());
-        }
-        stockTransferDetailsService.saveBatch(stockTransferDetailsList);
 
         //创建出库记录
         StockJournal stockJournal1 = new StockJournal();
@@ -144,9 +136,30 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         stockJournal1.setBusinessId(stockTransferDto.getId());
         //保存出库记录
         stockJournalService.save(stockJournal1);
+
+        List<StockJournalDetails> stockJournalDetailsList1 = new ArrayList<>();
+        for (StockTransferDetails stockTransferDetails : stockTransferDetailsList) {
+            Stock stock = new Stock();
+            stock.setProductId(stockTransferDetails.getProductId());
+            stock.setQuantity(stockTransferDetails.getOutQuantity());
+            stockList.add(stock);
+
+            //创建出入库明细
+            StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+            stockJournalDetails.setStockJournalId(stockJournal1.getId());
+            stockJournalDetails.setProductId(stock.getProductId());
+            stockJournalDetails.setQuantity(stock.getQuantity());
+            stockJournalDetails.setBusinessDetailsId(stockTransferDetails.getId());
+            stockJournalDetailsList1.add(stockJournalDetails);
+
+            stockTransferDetails.setStockTransferId(stockTransferDto.getId());
+        }
+        stockTransferDetailsService.saveBatch(stockTransferDetailsList);
+
+
         if (ObjectUtil.isNotEmpty(stockList)) {
             //出库
-            List<StockJournalDetails> stockJournalDetailsList1 = stockService.ModifyInventory(stockJournal1.getId(), 2, stockList, stockTransferDto.getOutWarehouseId());
+            stockService.ModifyInventory(2, stockList, stockTransferDto.getOutWarehouseId());
             //保存出库记录明细
             stockJournalDetailsService.saveBatch(stockJournalDetailsList1);
         }
@@ -170,6 +183,8 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         stockTransfer.setInUserId(SecurityUtils.getUserId());//赋值接收人
         stockTransfer.setInTime(new Date());//赋值接收时间
 
+        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
+
         //明细
         List<Stock> stockList = new ArrayList<>();
         List<StockTransferDetails> stockTransferDetailsList = stockTransferDto.getStockTransferDetailsList();
@@ -179,6 +194,16 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
             List<StockTransferDetails> oldstockTransferDetailsList = stockTransferDetailsService.listByIds(ids);
             Map<Long, StockTransferDetails> oldstockTransferDetailsMap = oldstockTransferDetailsList.stream().collect(Collectors.toMap(StockTransferDetails::getId, Function.identity()));
 
+            //创建入库记录
+            StockJournal stockJournal = new StockJournal();
+            stockJournal.setOpType(1);
+            stockJournal.setType(JournalType.ADJUSTING_IN.getDetailType());
+            stockJournal.setCode(stockTransfer.getCode());
+            stockJournal.setWarehouseId(stockTransfer.getInWarehouseId());
+            stockJournal.setBusinessId(stockTransfer.getId());
+            //保存人库记录
+            stockJournalService.save(stockJournal);
+
             Integer abnormalFlag = 0;
             for (StockTransferDetails stockTransferDetails : stockTransferDetailsList) {
                 Stock stock = new Stock();
@@ -186,12 +211,21 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
                 stock.setQuantity(stockTransferDetails.getInQuantity());
                 stockList.add(stock);
 
+                //创建出入库明细
+                StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+                stockJournalDetails.setStockJournalId(stockJournal.getId());
+                stockJournalDetails.setProductId(stock.getProductId());
+                stockJournalDetails.setQuantity(stock.getQuantity());
+                stockJournalDetails.setBusinessDetailsId(stockTransferDetails.getId());
+                stockJournalDetailsList.add(stockJournalDetails);
+
                 //调仓接收数量与发出数量不一致
                 StockTransferDetails oldstockTransferDetails = oldstockTransferDetailsMap.get(stockTransferDetails.getId());
                 if (stockTransferDetails.getInQuantity().compareTo(oldstockTransferDetails.getOutQuantity()) != 0) {
                     abnormalFlag = 1;
                 }
 
+
                 //计算已入库数量
                 BigDecimal inCount = oldstockTransferDetails.getInQuantity().add(stockTransferDetails.getInQuantity());
                 if (inCount.compareTo(oldstockTransferDetails.getOutQuantity()) != 0) {
@@ -214,19 +248,11 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
             stockTransferDetailsService.updateBatchById(stockTransferDetailsList);
         }
         updateById(stockTransfer);
-        //创建入库记录
-        StockJournal stockJournal = new StockJournal();
-        stockJournal.setOpType(1);
-        stockJournal.setType(JournalType.ADJUSTING_IN.getDetailType());
-        stockJournal.setCode(stockTransfer.getCode());
-        stockJournal.setWarehouseId(stockTransfer.getInWarehouseId());
-        stockJournal.setBusinessId(stockTransfer.getId());
-        //保存人库记录
-        stockJournalService.save(stockJournal);
+
 
         if (ObjectUtil.isNotEmpty(stockList)) {
             //入库
-            List<StockJournalDetails> stockJournalDetailsList = stockService.ModifyInventory(stockJournal.getId(), 1, stockList, stockTransfer.getInWarehouseId());
+            stockService.ModifyInventory(1, stockList, stockTransfer.getInWarehouseId());
             //保存入库记录明细
             stockJournalDetailsService.saveBatch(stockJournalDetailsList);
         }
@@ -268,8 +294,18 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         //        stockJournal.setToWarehouseId(stockDto.getToWarehouseId());
         //保存出入库记录
         stockJournalService.save(stockJournal);
+        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
+        for (StockTransferDetails stockTransferDetails : stockTransferDetailsList) {
+            //创建出入库明细
+            StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+            stockJournalDetails.setStockJournalId(stockJournal.getId());
+            stockJournalDetails.setProductId(stockTransferDetails.getProductId());
+            stockJournalDetails.setQuantity(stockTransferDetails.getOutQuantity());
+            stockJournalDetails.setBusinessDetailsId(stockTransferDetails.getId());
+            stockJournalDetailsList.add(stockJournalDetails);
+        }
         //操作库存
-        List<StockJournalDetails> stockJournalDetailsList = stockService.ModifyInventory(stockJournal.getId(), 2, stockList, stockTransferDto.getOutWarehouseId());
+        stockService.ModifyInventory(2, stockList, stockTransferDto.getOutWarehouseId());
         //保存出入库明细
         stockJournalDetailsService.saveBatch(stockJournalDetailsList);
 
@@ -285,9 +321,9 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         stockJournalService.save(stockJournal1);
 
         //入库操作
-        List<StockJournalDetails> stockJournalDetailsList1 = stockService.ModifyInventory(stockJournal1.getId(), 1, stockList, stockTransferDto.getInWarehouseId());
+        stockService.ModifyInventory(1, stockList, stockTransferDto.getInWarehouseId());
         //保存出入库明细
-        stockJournalDetailsService.saveBatch(stockJournalDetailsList1);
+        stockJournalDetailsService.saveBatch(stockJournalDetailsList);
     }
 
 }

+ 4 - 0
hx-wms/pom.xml

@@ -25,6 +25,10 @@
             <groupId>com.fjhx</groupId>
             <artifactId>hx-item</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-supply</artifactId>
+        </dependency>
     </dependencies>
 
 

+ 326 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/contract/po/ContractPo.java

@@ -0,0 +1,326 @@
+package com.fjhx.wms.entity.contract.po;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.fjhx.file.entity.ObsFile;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 外销合同表
+ * </p>
+ *
+ * @author
+ * @since 2023-04-17
+ */
+@Getter
+@Setter
+@TableName("contract")
+public class ContractPo extends BasePo {
+
+    /**
+     * 合同类型(1外销 2内销)
+     */
+    private Integer contractType;
+
+    /**
+     * 编码
+     */
+    private String code;
+
+    /**
+     * 合同模版ID
+     */
+    private Long contractTemplateId;
+
+    /**
+     * 卖方公司ID
+     *
+     * <p>
+     * {@link com.fjhx.common.entity.contract.po.ContractTemplate}
+     */
+    private Long sellCorporationId;
+
+    /**
+     * 卖方联系人名称
+     */
+    private String sellContactName;
+
+    /**
+     * 卖方联系人电话
+     */
+    private String sellContactNumber;
+
+    /**
+     * 合同审批状态 0草稿 10、审批中;20、驳回  30、审批通过   99终止
+     */
+    private Integer status;
+
+    /**
+     * 到款状态 0未到款  10部分到款  20已到款
+     */
+    private Integer refundStatus;
+
+    /**
+     * 合同状态
+     */
+    private Integer contractStatus;
+
+    /**
+     * 卖方国家表id
+     */
+    private Long sellCountryId;
+
+    /**
+     * 卖方省份id
+     */
+    private Long sellProvinceId;
+
+    /**
+     * 卖方城市id
+     */
+    private Long sellCityId;
+
+    /**
+     * 卖方国家表名称
+     */
+    private String sellCountryName;
+
+    /**
+     * 卖方省份名称
+     */
+    private String sellProvinceName;
+
+    /**
+     * 卖方城市名称
+     */
+    private String sellCityName;
+
+    /**
+     * 卖方详细地址
+     */
+    private String sellAddress;
+
+    /**
+     * 卖方邮编
+     */
+    private String sellPostalCode;
+
+
+    /**
+     * 买方公司ID
+     *
+     * <p>
+     * {@link com.fjhx.customer.entity.customer.po.Customer}
+     */
+    private Long buyCorporationId;
+
+    /**
+     * 买方联系人名称
+     */
+    private String buyContactName;
+
+    /**
+     * 买方联系人电话
+     */
+    private String buyContactNumber;
+
+    /**
+     * 买方国家表id
+     */
+    private Long buyCountryId;
+
+    /**
+     * 买方省份id
+     */
+    private Long buyProvinceId;
+
+    /**
+     * 买方城市id
+     */
+    private Long buyCityId;
+
+    /**
+     * 买方详细地址
+     */
+    private String buyAddress;
+
+    /**
+     * 买方邮编
+     */
+    private String buyPostalCode;
+
+    /**
+     * 币种(字典account_currency)
+     */
+    private String currency;
+
+    /**
+     * 合同金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 付款方式(字典funds_payment_method
+     */
+    private String paymentMethod;
+
+    /**
+     * 贸易方式(字典trade_methods)
+     */
+    private String tradeMethods;
+
+    /**
+     * 预付比例
+     */
+    private String advanceRatio;
+
+    /**
+     * 运输方式(字典  shipping_method)
+     */
+    private String transportMethod;
+
+    /**
+     * 运输备注
+     */
+    private String transportRemark;
+
+    /**
+     * 收款账号ID
+     *
+     * <p>
+     */
+    private Long shroffAccountId;
+
+    /**
+     * 审批通过时间
+     */
+    private Date approvedDate;
+
+    /**
+     * 质保期
+     */
+    private Integer warranty;
+
+    /**
+     * 付款条件
+     */
+    private String remark;
+
+    /**
+     * 创建人名称
+     */
+    private String userName;
+
+    /**
+     * 结算状态 0未结算 1已结算
+     */
+    private Integer settlementStatus;
+
+    /**
+     * 交期
+     */
+    private String deliveryTime;
+
+    /**
+     * 汇率json
+     * List<ContractCurrencyRate> 转 json
+     */
+    private String currencyRateJson;
+
+    /**
+     * 尔弘时代JSON扩展字段
+     */
+    private String ehsdJson;
+
+    /**
+     * beneficiaryName
+     */
+    private String beneficiaryName;
+
+    /**
+     * beneficiaryBank
+     */
+    private String beneficiaryBank;
+
+    /**
+     * beneficiaryBankAddress
+     */
+    private String beneficiaryBankAddress;
+
+    /**
+     * beneficiaryAddress
+     */
+    private String beneficiaryAddress;
+
+    /**
+     * beneficiaryName
+     */
+    private String swiftCode;
+
+    /**
+     * beneficiaryAccountNumber
+     */
+    private String beneficiaryAccountNumber;
+
+    /**
+     * 利润预算表备注
+     */
+    private String budgetRemark;
+
+    /**
+     * 利润结算表代理费
+     */
+    private BigDecimal profitAgencyFee;
+
+    /**
+     * 利润结算表备注
+     */
+    private String profitClearingRemark;
+
+    /**
+     * 原合同id
+     */
+    private Long oldContractId;
+
+    /**
+     * 版本号
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Version
+    private Integer version;
+
+    /**
+     * 交接单附件列表
+     */
+    @TableField(exist = false)
+    private List<ObsFile> fileList;
+
+    /**
+     * 包装附件列表
+     */
+    @TableField(exist = false)
+    private List<ObsFile> packageFileList;
+
+
+    /**
+     * 合同数量
+     */
+    @TableField(exist = false)
+    private Integer count;
+
+    /**
+     * 归属公司名称
+     */
+    @TableField(exist = false)
+    private String sellCorporationName;
+
+}

+ 124 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/purchase/po/PurchaseDetailPo.java

@@ -0,0 +1,124 @@
+package com.fjhx.wms.entity.purchase.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 申购单
+ * </p>
+ *
+ * @author
+ * @since 2023-04-06
+ */
+@Getter
+@Setter
+@TableName("purchase_detail")
+public class PurchaseDetailPo extends BasePo {
+
+    /**
+     * 业务来源 0自建  1外销合同采购
+     */
+    private Integer dataResource;
+
+    /**
+     * 业务来源ID
+     */
+    private Long dataResourceId;
+
+    /**
+     * 关联ID  产品ID/货品ID
+     */
+    private Long bussinessId;
+
+    /**
+     * 申购明细ID
+     */
+    private Long subscribeDetailId;
+
+    /**
+     * 采购单ID
+     */
+    private Long purchaseId;
+
+    /**
+     * 采购数量
+     */
+    private BigDecimal count;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 总价
+     */
+    private BigDecimal amount;
+
+    /**
+     * 采购事由
+     */
+    private String content;
+
+    /**
+     * 状态 10、审批中 15:待采购 20、已采购  30、部分采购  40、已采购  99 作废
+     */
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 货品类型
+     */
+    @TableField(exist = false)
+    private String productType;
+
+    /**
+     * 所属分类
+     */
+    @TableField(exist = false)
+    private String productCategory;
+
+    /**
+     * 货品编码
+     */
+    @TableField(exist = false)
+    private String productCode;
+
+    /**
+     * 货品名称
+     */
+    @TableField(exist = false)
+    private String productName;
+
+    /**
+     * 单位
+     */
+    @TableField(exist = false)
+    private String productUnit;
+
+    /**
+     * 货品规格型号
+     */
+    @TableField(exist = false)
+    private String productSpec;
+
+    /**
+     * 到货总量
+     */
+    @TableField(exist = false)
+    private BigDecimal sumArrivalCount;
+
+    @TableField(exist = false)
+    private String productCustomCode;
+
+}

+ 133 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/purchase/po/PurchasePo.java

@@ -0,0 +1,133 @@
+package com.fjhx.wms.entity.purchase.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 采购
+ * </p>
+ *
+ * @author
+ * @since 2023-04-06
+ */
+@Getter
+@Setter
+@TableName("purchase")
+public class PurchasePo extends BasePo {
+
+    /**
+     * 部门名称
+     */
+    private String deptName;
+
+    /**
+     * 采购人名称
+     */
+    private String purchaseName;
+
+    /**
+     * 采购时间
+     */
+    private Date purchaseTime;
+
+    /**
+     * 采购编码
+     */
+    private String code;
+
+    /**
+     * 供应商ID
+     */
+    private Long supplyId;
+
+    /**
+     * 采购说明
+     */
+    private String purchaseContent;
+
+    /**
+     * 采购状态 0草稿 10、审批中;20、驳回  30、通过
+     */
+    private Integer purchaseStatus;
+
+    /**
+     * 付款状态 0未付款  10部分付款  20已付款
+     */
+    private Integer payStatus;
+
+    /**
+     * 到货状态 0未到货  10 部分到货  20已到货
+     */
+    private Integer arrivalStatus;
+
+    /**
+     * 采购总金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 审核通过时间
+     */
+    private Date approvedDate;
+
+    /**
+     * 流程id
+     */
+    private String processInstanceId;
+
+    /**
+     * 币种(字典account_currency)
+     */
+    private String currency;
+
+    /**
+     * 采购明细列表
+     */
+    @TableField(exist = false)
+    private List<PurchaseDetailPo> purchaseDetailList;
+
+    /**
+     * 发票总金额
+     */
+    @TableField(exist = false)
+    private BigDecimal sumInvoiceMoney;
+
+    /**
+     * 付款总金额
+     */
+    @TableField(exist = false)
+    private BigDecimal sumPayMoney;
+
+    /**
+     * 维多利亚扩展json
+     */
+    private String victoriatouristJson;
+
+    /**
+     * 流程实例
+     */
+    private Long flowId;
+
+    /**
+     * 采购单个数
+     */
+    private Integer count;
+
+    /***
+     * 业务来源 0自建  1外销合同采购 2:样品单
+     */
+    private Integer dataResource;
+
+    /**
+     * 业务来源ID (外销合同id)
+     */
+    private Long dataResourceId;
+}

+ 8 - 4
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockJournalDetails.java

@@ -1,13 +1,12 @@
 package com.fjhx.wms.entity.stock.po;
 
-import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
-
-import java.math.BigDecimal;
-import java.util.Date;
+import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * <p>
  * 出入库记录明细
@@ -36,4 +35,9 @@ public class StockJournalDetails extends BasePo {
      */
     private BigDecimal quantity;
 
+    /**
+     * 业务明细id
+     */
+    private Long businessDetailsId;
+
 }

+ 18 - 1
hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockJournalDetailsVo.java

@@ -4,6 +4,8 @@ import com.fjhx.wms.entity.stock.po.StockJournalDetails;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * 出入库记录明细列表查询返回值实体
  *
@@ -67,7 +69,9 @@ public class StockJournalDetailsVo extends StockJournalDetails {
      */
     private String toWarehouseName;
 
-    /**仓库单号*/
+    /**
+     * 仓库单号
+     */
     private String code;
 
     /**
@@ -89,4 +93,17 @@ public class StockJournalDetailsVo extends StockJournalDetails {
      * 关联单号
      */
     private String linkCode;
+
+    /**
+     * 币种
+     */
+    private String currency;
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+    /**
+     * 金额
+     */
+    private BigDecimal amount;
 }

+ 12 - 7
hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockJournalVo.java

@@ -4,7 +4,6 @@ import com.fjhx.wms.entity.stock.po.StockJournal;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -21,18 +20,24 @@ public class StockJournalVo extends StockJournal {
      * 仓库名称
      */
     private String warehouseName;
-//    /**调仓库目标仓库名称*/
-//    private String toWarehouseName;
 
     /**
      * 操作人名称
      */
     private String userName;
 
-    /**手动入库商品明细*/
-    private List<StockVo> list;
+    /**
+     * 出入库流水明细
+     */
+    private List<StockJournalDetailsVo> list;
 
-    /**数量*/
-    private BigDecimal quantity;
+    /**
+     * 公司名称
+     */
+    private String corporateName;
+    /**
+     * 单号
+     */
+    private String code;
 
 }

+ 1 - 2
hx-wms/src/main/java/com/fjhx/wms/mapper/stock/StockJournalMapper.java

@@ -1,8 +1,8 @@
 package com.fjhx.wms.mapper.stock;
 
-import com.fjhx.wms.entity.stock.po.StockJournal;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.po.StockJournal;
 import com.fjhx.wms.entity.stock.vo.StockJournalVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
@@ -23,5 +23,4 @@ public interface StockJournalMapper extends BaseMapper<StockJournal> {
      */
     Page<StockJournalVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<StockJournal> wrapper);
 
-    StockJournalVo detail(@Param("ew") IWrapper<StockJournal> wrapper);
 }

+ 15 - 0
hx-wms/src/main/java/com/fjhx/wms/service/MyPurchaseService.java

@@ -1,9 +1,24 @@
 package com.fjhx.wms.service;
 
+import com.fjhx.wms.entity.purchase.po.PurchaseDetailPo;
+import com.fjhx.wms.entity.purchase.po.PurchasePo;
+
+import java.util.Map;
+
 public interface MyPurchaseService {
 
     /**
      * 修改采购退货状态
      */
     void updateSalesReturnStatus(Long id, Integer status);
+
+    /**
+     * 获取采购信息
+     */
+    PurchasePo getPurchaseInfo(Long id);
+
+    /**
+     * 获取采购明细
+     */
+    Map<Long, PurchaseDetailPo> grtPurchaseDetail(Long id);
 }

+ 8 - 0
hx-wms/src/main/java/com/fjhx/wms/service/MySaleService.java

@@ -0,0 +1,8 @@
+package com.fjhx.wms.service;
+
+import com.fjhx.wms.entity.contract.po.ContractPo;
+
+public interface MySaleService {
+
+    ContractPo getContractInfo(Long id);
+}

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

@@ -6,7 +6,6 @@ import com.fjhx.wms.entity.stock.dto.StockDto;
 import com.fjhx.wms.entity.stock.dto.StockSelectDto;
 import com.fjhx.wms.entity.stock.emums.JournalType;
 import com.fjhx.wms.entity.stock.po.Stock;
-import com.fjhx.wms.entity.stock.po.StockJournalDetails;
 import com.fjhx.wms.entity.stock.vo.StockVo;
 import com.ruoyi.common.core.service.BaseService;
 
@@ -63,7 +62,7 @@ public interface StockService extends BaseService<Stock> {
      */
     void delete(Long id);
 
-    List<StockJournalDetails> ModifyInventory(Long stockJournalId, int type, List<Stock> list, Long warehouseId);
+    void ModifyInventory(int type, List<Stock> list, Long warehouseId);
 
     /**
      * 良品转次品

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

@@ -1,20 +1,37 @@
 package com.fjhx.wms.service.stock.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.common.utils.Assert;
+import com.fjhx.customer.entity.customer.po.Customer;
+import com.fjhx.customer.service.customer.CustomerService;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.supply.entity.supplier.po.SupplierInfo;
+import com.fjhx.supply.service.supplier.SupplierInfoService;
+import com.fjhx.wms.entity.contract.po.ContractPo;
+import com.fjhx.wms.entity.purchase.po.PurchaseDetailPo;
+import com.fjhx.wms.entity.purchase.po.PurchasePo;
 import com.fjhx.wms.entity.stock.dto.StockJournalDto;
 import com.fjhx.wms.entity.stock.dto.StockJournalSelectDto;
+import com.fjhx.wms.entity.stock.emums.JournalType;
 import com.fjhx.wms.entity.stock.po.StockJournal;
+import com.fjhx.wms.entity.stock.po.StockJournalDetails;
+import com.fjhx.wms.entity.stock.po.StockWait;
+import com.fjhx.wms.entity.stock.po.StockWaitDetails;
+import com.fjhx.wms.entity.stock.vo.StockJournalDetailsVo;
 import com.fjhx.wms.entity.stock.vo.StockJournalVo;
-import com.fjhx.wms.entity.stock.vo.StockVo;
+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.MySaleService;
+import com.fjhx.wms.service.stock.StockJournalDetailsService;
 import com.fjhx.wms.service.stock.StockJournalService;
+import com.fjhx.wms.service.stock.StockWaitDetailsService;
+import com.fjhx.wms.service.stock.StockWaitService;
 import com.fjhx.wms.service.warehouse.WarehouseService;
-import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.system.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,7 +39,6 @@ import org.springframework.stereotype.Service;
 
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 
 /**
@@ -37,10 +53,25 @@ import java.util.stream.Collectors;
 public class StockJournalServiceImpl extends ServiceImpl<StockJournalMapper, StockJournal> implements StockJournalService {
 
     @Autowired
-    ProductInfoService productInfoService;
+    private ProductInfoService productInfoService;
 
     @Autowired
-    WarehouseService warehouseService;
+    private WarehouseService warehouseService;
+
+    @Autowired
+    private StockJournalDetailsService stockJournalDetailsService;
+    @Autowired
+    private StockWaitService stockWaitService;
+    @Autowired
+    private MyPurchaseService myPurchaseService;
+    @Autowired
+    private SupplierInfoService supplierInfoService;
+    @Autowired
+    private MySaleService mySaleService;
+    @Autowired
+    private CustomerService customerService;
+    @Autowired
+    private StockWaitDetailsService stockWaitDetailsService;
 
     @Override
     public Page<StockJournalVo> getPage(StockJournalSelectDto dto) {
@@ -65,32 +96,67 @@ public class StockJournalServiceImpl extends ServiceImpl<StockJournalMapper, Sto
 
     @Override
     public StockJournalVo detail(Long id) {
-        IWrapper<StockJournal> wrapper = getWrapper();
-        wrapper.eq("sj", StockJournal::getId, id);
-        StockJournalVo result = baseMapper.detail(wrapper);
-        //查询商品信息
-        List<StockVo> stockVos = result.getList();
-        List<Long> productIds = stockVos.stream().map(StockVo::getProductId).collect(Collectors.toList());
-        List<ProductInfo> productInfos = productInfoService.listByIds(productIds);
+        StockJournal stockJournal = this.getById(id);
+        StockJournalVo stockJournalVo = BeanUtil.copyProperties(stockJournal, StockJournalVo.class);
+        //赋值仓库名称
+        Warehouse warehouse = warehouseService.getById(stockJournalVo.getWarehouseId());
+        if (ObjectUtils.isNotEmpty(warehouse)) {
+            stockJournalVo.setWarehouseName(warehouse.getName());
+        }
+        //查询明细
+        List<StockJournalDetails> stockJournalDetailsList = stockJournalDetailsService.list(q -> q.eq(StockJournalDetails::getStockJournalId, id));
+        List<StockJournalDetailsVo> stockJournalDetailsVos = BeanUtil.copyToList(stockJournalDetailsList, StockJournalDetailsVo.class);
+        //赋值产品信息
+        productInfoService.attributeAssign(stockJournalDetailsVos, StockJournalDetailsVo::getProductId, (item, productInfo) -> {
+            item.setProductCode(productInfo.getCode());
+            item.setProductUnit(productInfo.getUnit());
+            item.setProductType(productInfo.getType());
+            item.setProductName(productInfo.getName());
+            item.setProductSpec(productInfo.getSpec());
+        });
+        stockJournalVo.setList(stockJournalDetailsVos);
 
-        Map<Long, ProductInfo> productInfoMap = productInfos.stream().collect(Collectors.groupingBy(ProductInfo::getId,
-                Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
-        for (StockVo stockVo : stockVos) {
-            ProductInfo productInfo = productInfoMap.get(stockVo.getProductId());
-            if (productInfo == null) {
-                throw new ServiceException("未知商品商品id->" + stockVo.getProductId());
+        //流水打印数据赋值
+        if (JournalType.PURCHASE_ARRIVAL_IN.getDetailType().equals(stockJournalVo.getType())) {
+            StockWait stockWait = stockWaitService.getById(stockJournalVo.getBusinessId());
+            Assert.notEmpty(stockWait, "查询不到待出入库信息");
+            PurchasePo purchase = myPurchaseService.getPurchaseInfo(stockWait.getBusinessId());
+            Assert.notEmpty(purchase, "查询不到采购信息");
+            Map<Long, PurchaseDetailPo> purchaseDetailMap = myPurchaseService.grtPurchaseDetail(purchase.getId());
+            //流水打印数据获取
+            if (ObjectUtils.isEmpty(purchase.getDataResource())) {
+                //采购合同
+                SupplierInfo supplierInfo = supplierInfoService.getById(purchase.getSupplyId());
+                if (ObjectUtils.isNotEmpty(supplierInfo)) {
+                    stockJournalVo.setCorporateName(supplierInfo.getName());//供应商
+                }
+                stockJournalVo.setCode(purchase.getCode());//单号
+            } else {
+                //销售合同
+                ContractPo contractInfo = mySaleService.getContractInfo(purchase.getDataResourceId());
+                Customer customer = customerService.getById(contractInfo.getBuyCorporationId());
+                if (ObjectUtils.isNotEmpty(customer)) {
+                    stockJournalVo.setCorporateName(customer.getName());//客户名称
+                }
+                stockJournalVo.setCode(contractInfo.getCode());//单号
+            }
+            //明细数据赋值
+            for (StockJournalDetailsVo stockJournalDetailsVo : stockJournalVo.getList()) {
+                stockJournalDetailsVo.setCurrency(purchase.getCurrency());//币种
+                StockWaitDetails stockWaitDetails = stockWaitDetailsService.getById(stockJournalDetailsVo.getBusinessDetailsId());
+                if (ObjectUtils.isEmpty(stockWaitDetails)) {
+                    continue;
+                }
+                PurchaseDetailPo purchaseDetail = purchaseDetailMap.get(stockWaitDetails.getBusinessDetailsId());
+                if (ObjectUtils.isEmpty(purchaseDetail)) {
+                    continue;
+                }
+                stockJournalDetailsVo.setPrice(purchaseDetail.getPrice());//单价
+                stockJournalDetailsVo.setAmount(purchaseDetail.getAmount());//金额
             }
-            stockVo.setProductName(productInfo.getName());
         }
 
-        //如果为调参记录
-//        if (result.getType() == 3) {
-//            //赋值目标仓库名称
-//            Warehouse byId = warehouseService.getById(result.getToWarehouseId());
-//            result.setToWarehouseName(byId.getName());
-//        }
-
-        return result;
+        return stockJournalVo;
     }
 
     @Override

+ 27 - 15
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

@@ -345,8 +345,19 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
         stockJournal.setBusinessId(stockDto.getBusinessId());
         //保存出入库记录
         stockJournalService.save(stockJournal);
+        List<Stock> list = stockDto.getList();
+        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
+        for (Stock stock : list) {
+            //创建出入库明细
+            StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+            stockJournalDetails.setStockJournalId(stockJournal.getId());
+            stockJournalDetails.setProductId(stock.getProductId());
+            stockJournalDetails.setQuantity(stock.getQuantity());
+            stockJournalDetails.setBusinessDetailsId(stock.getId());
+            stockJournalDetailsList.add(stockJournalDetails);
+        }
         //操作库存
-        List<StockJournalDetails> stockJournalDetailsList = ModifyInventory(stockJournal.getId(), 1, stockDto.getList(), stockDto.getWarehouseId());
+        ModifyInventory(1, stockDto.getList(), stockDto.getWarehouseId());
         //保存出入库明细
         stockJournalDetailsService.saveBatch(stockJournalDetailsList);
     }
@@ -364,7 +375,18 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
         //保存出入库记录
         stockJournalService.save(stockJournal);
         //操作库存
-        List<StockJournalDetails> stockJournalDetailsList = ModifyInventory(stockJournal.getId(), 2, stockDto.getList(), stockDto.getWarehouseId());
+        List<Stock> list = stockDto.getList();
+        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
+        for (Stock stock : list) {
+            //创建出入库明细
+            StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+            stockJournalDetails.setStockJournalId(stockJournal.getId());
+            stockJournalDetails.setProductId(stock.getProductId());
+            stockJournalDetails.setQuantity(stock.getQuantity());
+            stockJournalDetails.setBusinessDetailsId(stock.getId());
+            stockJournalDetailsList.add(stockJournalDetails);
+        }
+        ModifyInventory(2, stockDto.getList(), stockDto.getWarehouseId());
         //保存出入库明细
         stockJournalDetailsService.saveBatch(stockJournalDetailsList);
     }
@@ -377,11 +399,10 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
     /**
      * 操作库存通用方法
      *
-     * @param stockJournalId 出入库记录id
-     * @param type           1入库 2出库 3维多利亚冻结库存入库 4维多利亚待出库次品库存
+     * @param type 1入库 2出库 3维多利亚冻结库存入库 4维多利亚待出库次品库存
      */
     @Override
-    public List<StockJournalDetails> ModifyInventory(Long stockJournalId, int type, List<Stock> list, Long warehouseId) {
+    public synchronized void ModifyInventory(int type, List<Stock> list, Long warehouseId) {
         List<Stock> data = new ArrayList<>();
 
         //获取现有库存
@@ -390,7 +411,6 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
         Map<Long, Stock> stockMap = stockList.stream().collect(Collectors.groupingBy(Stock::getProductId,
                 Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
 
-        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
         for (Stock stock : list) {
             //忽略操作数量为0的记录 避免出现出入库记录为0的条目
             if (BigDecimal.ZERO.compareTo(stock.getQuantity()) == 0) {
@@ -450,18 +470,10 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
                 throw new ServiceException("未知库存操作类型");
             }
             data.add(oldStocks);
-            //创建出入库明细
-            StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
-            stockJournalDetails.setStockJournalId(stockJournalId);
-            stockJournalDetails.setProductId(stock.getProductId());
-            stockJournalDetails.setQuantity(stock.getQuantity());
-            stockJournalDetailsList.add(stockJournalDetails);
+
         }
         //操作库存
         saveOrUpdateBatch(data);
-
-        //返回库存操作明细列表
-        return stockJournalDetailsList;
     }
 
     /**

+ 21 - 8
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitServiceImpl.java

@@ -14,6 +14,7 @@ import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.wms.entity.arrival.po.ArrivalStockRecords;
 import com.fjhx.wms.entity.arrival.po.ArrivalStockRecordsDetails;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitDetailsDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitDto;
 import com.fjhx.wms.entity.stock.dto.StockWaitSelectDto;
@@ -247,13 +248,7 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
         //操作库存
         List<Long> swdIds = stockWaitDetailsDtoList.stream().map(StockWaitDetails::getId).collect(Collectors.toList());
         Map<Long, StockWaitDetails> oldStockWaitDetailsMap = stockWaitDetailsService.mapKEntity(StockWaitDetails::getId, q -> q.in(StockWaitDetails::getId, swdIds));
-        for (StockWaitDetails waitDetails : stockWaitDetailsDtoList) {
-            StockWaitDetails temp = oldStockWaitDetailsMap.get(waitDetails.getId());
-            Stock stock = new Stock();
-            stock.setQuantity(waitDetails.getQuantity());
-            stock.setProductId(temp.getProductId());
-            stockList.add(stock);
-        }
+
         //创建出入库记录
         Integer businessType = stockWait.getBusinessType();
         StockJournal stockJournal = new StockJournal();
@@ -264,8 +259,26 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
         stockJournal.setBusinessId(stockWaitDto.getId());
         //保存出入库记录
         stockJournalService.save(stockJournal);
+        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
+        for (StockWaitDetails waitDetails : stockWaitDetailsDtoList) {
+            StockWaitDetails temp = oldStockWaitDetailsMap.get(waitDetails.getId());
+            Stock stock = new Stock();
+            stock.setQuantity(waitDetails.getQuantity());
+            stock.setProductId(temp.getProductId());
+            stockList.add(stock);
+
+            //创建出入库明细
+            StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+            stockJournalDetails.setStockJournalId(stockJournal.getId());
+            stockJournalDetails.setProductId(stock.getProductId());
+            stockJournalDetails.setQuantity(stock.getQuantity());
+            stockJournalDetails.setBusinessDetailsId(waitDetails.getId());
+            stockJournalDetailsList.add(stockJournalDetails);
+
+        }
+
 
-        List<StockJournalDetails> stockJournalDetailsList = stockService.ModifyInventory(stockJournal.getId(), 3, stockList, stockWaitDto.getWarehouseId());
+        stockService.ModifyInventory(3, stockList, stockWaitDto.getWarehouseId());
         //保存出入库明细
         stockJournalDetailsService.saveBatch(stockJournalDetailsList);
 

+ 12 - 12
hx-wms/src/main/resources/mapper/stock/StockJournalDetailsMapper.xml

@@ -2,18 +2,18 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.wms.mapper.stock.StockJournalDetailsMapper">
     <select id="getPage" resultType="com.fjhx.wms.entity.stock.vo.StockJournalDetailsVo">
-        SELECT
-            sjd.id,
-            sj.op_type,
-            sj.type,
-            sj.`code`,
-            sj.warehouse_id,
-            w.`name` warehouseName,
-            sjd.product_id,
-            sjd.quantity,
-            sjd.create_time,
-            sjd.create_user,
-            sj.business_id
+        SELECT sjd.id,
+               sj.op_type,
+               sj.type,
+               sj.`code`,
+               sj.warehouse_id,
+               w.`name` warehouseName,
+               sjd.product_id,
+               sjd.quantity,
+               sjd.create_time,
+               sjd.create_user,
+               sj.business_id,
+               sjd.stock_journal_id
         FROM stock_journal_details sjd
                  LEFT JOIN stock_journal sj ON sjd.stock_journal_id = sj.id
                  LEFT JOIN warehouse w ON sj.warehouse_id = w.id

+ 0 - 26
hx-wms/src/main/resources/mapper/stock/StockJournalMapper.xml

@@ -18,31 +18,5 @@
                 JOIN warehouse w ON sj.warehouse_id = w.id
             ${ew.customSqlSegment}
     </select>
-    <resultMap id="detail" type="com.fjhx.wms.entity.stock.vo.StockJournalVo">
-        <id property="id" column="id"/>
-        <result property="warehouseId" column="warehouse_id"/>
-        <result property="warehouseName" column="warehouseName"/>
-        <result property="type" column="type"/>
-        <collection property="list" javaType="java.util.ArrayList" ofType="com.fjhx.wms.entity.stock.vo.StockVo">
-            <id property="id" column="stockJournalDetailsId"/>
-            <result property="productId" column="product_id"/>
-            <result property="quantity" column="quantity"/>
-        </collection>
-    </resultMap>
-    <select id="detail" resultMap="detail">
-        SELECT
-            sj.id,
-            sj.type,
-            sj.warehouse_id,
-            w.`name` warehouseName,
-            sjd.id stockJournalDetailsId,
-            sjd.product_id,
-            sjd.quantity
-        FROM
-            stock_journal sj
-                JOIN warehouse w ON sj.warehouse_id = w.id
-                JOIN stock_journal_details sjd ON sjd.stock_journal_id = sj.id
-            ${ew.customSqlSegment}
-    </select>
 
 </mapper>