Sfoglia il codice sorgente

销售出库问题处理

yzc 1 anno fa
parent
commit
f3ffcc7157

+ 15 - 0
hx-mes/src/main/java/com/fjhx/mes/service/SaleServiceImpl.java

@@ -2,7 +2,10 @@ package com.fjhx.mes.service;
 
 import com.fjhx.mes.entity.production.dto.ProductionOrderDto;
 import com.fjhx.mes.entity.production.po.ProductionOrder;
+import com.fjhx.mes.entity.production.po.ProductionOrderDetail;
+import com.fjhx.mes.service.production.ProduceOrderDetailService;
 import com.fjhx.mes.service.production.ProduceOrderService;
+import com.fjhx.sale.entity.contract.dto.ContractOutboundRecordsDto;
 import com.fjhx.sale.service.SaleService;
 import com.ruoyi.common.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +19,8 @@ public class SaleServiceImpl implements SaleService {
 
     @Autowired
     private ProduceOrderService produceOrderService;
+    @Autowired
+    private ProduceOrderDetailService produceOrderDetailService;
 
     @Override
     public void directProd(Long contractId, Date deliveryPeriod, Long produceCompanyId) {
@@ -41,4 +46,14 @@ public class SaleServiceImpl implements SaleService {
         );
     }
 
+    @Override
+    public ContractOutboundRecordsDto getProdOrderIdByContractDetailId(Long id) {
+        ProductionOrderDetail productionOrderDetail = produceOrderDetailService.getOne(q -> q.eq(ProductionOrderDetail::getContractDetailId, id));
+        ContractOutboundRecordsDto dto = new ContractOutboundRecordsDto();
+        dto.setProdOrderId(productionOrderDetail.getProduceOrderId());
+        dto.setProdTaskId(productionOrderDetail.getId());
+        return dto;
+    }
+
+
 }

+ 6 - 8
hx-mes/src/main/java/com/fjhx/mes/service/WmsServiceImpl.java

@@ -24,21 +24,19 @@ public class WmsServiceImpl implements WmsService {
     private ProduceOrderService produceOrderService;
 
     @Override
-    public void updateProdStatus(Long id) {
-        int status = 10;//已出库
-        List<ContractProductVo> list = contractProductService.getList(IWrapper.<ContractProduct>getWrapper().eq(ContractProduct::getContractId, id));
+    public void updateProdStatus(List<Long> cpIds, Long prodOrderId) {
+        List<ContractProductVo> list = contractProductService.getList(IWrapper.<ContractProduct>getWrapper().in(ContractProduct::getId, cpIds));
         for (ContractProductVo contractProductVo : list) {
             BigDecimal outboundQuantity = contractProductVo.getOutboundQuantity();
             BigDecimal quantity = contractProductVo.getQuantity();
             if (outboundQuantity.compareTo(quantity) <= 0) {
-                status = 5;//出库中
-                break;
+                return;
             }
         }
-        int finalStatus = status;
+        //当所有东西出完变成出库完成
         produceOrderService.update(q -> q
-                .eq(ProductionOrder::getContractId, id)
-                .set(ProductionOrder::getProduceStatus, finalStatus)
+                .eq(ProductionOrder::getId, prodOrderId)
+                .set(ProductionOrder::getProduceStatus, 10)//已出库
                 .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
                 .set(BasePo::getUpdateTime, new Date())
         );

+ 1 - 2
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractOutboundInfoDto.java

@@ -1,7 +1,6 @@
 package com.fjhx.sale.entity.contract.dto;
 
 import com.fjhx.sale.entity.contract.po.ContractOutboundInfo;
-import com.fjhx.sale.entity.contract.po.ContractOutboundRecords;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -20,6 +19,6 @@ public class ContractOutboundInfoDto extends ContractOutboundInfo {
     /**
      * 出库记录列表
      */
-    List<ContractOutboundRecords> outboundRecordList;
+    List<ContractOutboundRecordsDto> outboundRecordList;
 
 }

+ 4 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractOutboundRecordsDto.java

@@ -14,4 +14,8 @@ import lombok.Setter;
 @Setter
 public class ContractOutboundRecordsDto extends ContractOutboundRecords {
 
+    private Long prodOrderId;
+
+    private Long prodTaskId;
+
 }

+ 4 - 0
hx-sale/src/main/java/com/fjhx/sale/service/SaleService.java

@@ -1,5 +1,7 @@
 package com.fjhx.sale.service;
 
+import com.fjhx.sale.entity.contract.dto.ContractOutboundRecordsDto;
+
 import java.util.Date;
 import java.util.List;
 
@@ -14,4 +16,6 @@ public interface SaleService {
      * 根据合同id批量修改生产状态
      */
     void updateProdOrderStatusByContractIds(List<Long> contractIds, Integer status);
+
+    ContractOutboundRecordsDto getProdOrderIdByContractDetailId(Long id);
 }

+ 51 - 35
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -68,6 +68,7 @@ import com.fjhx.sale.entity.purchase.vo.EhsdPurchaseProductVo;
 import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
 import com.fjhx.sale.mapper.contract.ContractMapper;
 import com.fjhx.sale.mapper.contract.ContractProductBomMapper;
+import com.fjhx.sale.service.SaleService;
 import com.fjhx.sale.service.claim.ClaimContractService;
 import com.fjhx.sale.service.contract.*;
 import com.fjhx.sale.service.purchase.EhsdPurchaseProductService;
@@ -221,6 +222,8 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     private ContractOutboundInfoService contractOutboundInfoService;
     @Autowired
     private ContractOutboundRecordsService contractOutboundRecordsService;
+    @Autowired
+    private SaleService saleService;
 
     /**
      * 合同和样品单 下拉分页
@@ -3066,7 +3069,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     @Override
     public void saleOutbound(ContractOutboundInfoDto dto) {
         Long contractId = dto.getContractId();
-        List<ContractOutboundRecords> productDtoList = dto.getOutboundRecordList();
+        List<ContractOutboundRecordsDto> productDtoList = dto.getOutboundRecordList();
 
         dto.setStatus(FlowStatusEnum1.PASS.getKey());
 
@@ -3097,12 +3100,17 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     @Override
     public void saleOutboundComm(ContractOutboundInfoDto dto) {
         Long contractId = dto.getContractId();
-        List<ContractOutboundRecords> productDtoList = dto.getOutboundRecordList();
+        List<ContractOutboundRecordsDto> productDtoList = dto.getOutboundRecordList();
         //补充数据
-        for (ContractOutboundRecords outboundRecords : productDtoList) {
+        for (ContractOutboundRecordsDto outboundRecords : productDtoList) {
             ContractProduct byId = contractProductService.getById(outboundRecords.getContractProductId());
             outboundRecords.setProductId(byId.getProductId());
             outboundRecords.setPrice(byId.getPrice());
+
+            //赋值生产信息
+            ContractOutboundRecordsDto taskInfo = saleService.getProdOrderIdByContractDetailId(byId.getId());
+            outboundRecords.setProdOrderId(taskInfo.getProdOrderId());
+            outboundRecords.setProdTaskId(taskInfo.getProdTaskId());
         }
 
         //修改订单出库状态
@@ -3114,41 +3122,47 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
                 .set(BasePo::getUpdateTime, new Date())
         );
 
-        //修改生产订单出库状态为出库中
-        stockWaitDetailsMapper.updateOrderStatusByContractId(contractId, 5);
+//        //修改生产订单出库状态为出库中
+//        stockWaitDetailsMapper.updateOrderStatusByContractId(contractId, 5);
 
         ContractVo contract = baseMapper.detail(contractId);
         Assert.notEmpty(contract, "查询不到销售订单信息!");
 
-
-        //生成待出库数据
-        StockWait stockWait = new StockWait();
-        stockWait.setCompanyId(SecurityUtils.getCompanyId());
-        stockWait.setType(2);
-        stockWait.setBusinessCode(contract.getCode());
-        stockWait.setBusinessType(JournalType.SALE_OUT.getDetailType());
-        stockWait.setBusinessId(dto.getId());
-        stockWait.setContractId(contractId);
-        stockWait.setStatus(0);
-        stockWaitService.save(stockWait);
-
-        List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
-        for (ContractOutboundRecords outboundRecords : productDtoList) {
-            BigDecimal quantity = outboundRecords.getQuantity();
-            //跳过出库数量为空||出库数量为0
-            if (ObjectUtil.isEmpty(quantity) || quantity.compareTo(BigDecimal.ZERO) <= 0) {
-                continue;
+        //根据生产订单id分组
+        Map<Long, List<ContractOutboundRecordsDto>> collect = productDtoList.stream().collect(Collectors.groupingBy(ContractOutboundRecordsDto::getProdOrderId));
+        for (Map.Entry<Long, List<ContractOutboundRecordsDto>> entry : collect.entrySet()) {
+            //生成待出库数据
+            StockWait stockWait = new StockWait();
+            stockWait.setCompanyId(SecurityUtils.getCompanyId());
+            stockWait.setType(2);
+            stockWait.setBusinessCode(contract.getCode());
+            stockWait.setBusinessType(JournalType.SALE_OUT.getDetailType());
+            stockWait.setBusinessId(dto.getId());
+            stockWait.setContractId(contractId);
+            stockWait.setStatus(0);
+            stockWait.setProdOrderId(entry.getKey());
+            stockWaitService.save(stockWait);
+
+            List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
+            for (ContractOutboundRecordsDto outboundRecords : entry.getValue()) {
+                BigDecimal quantity = outboundRecords.getQuantity();
+                //跳过出库数量为空||出库数量为0
+                if (ObjectUtil.isEmpty(quantity) || quantity.compareTo(BigDecimal.ZERO) <= 0) {
+                    continue;
+                }
+                StockWaitDetails stockWaitDetails = new StockWaitDetails();
+                stockWaitDetails.setStockWaitId(stockWait.getId());
+                stockWaitDetails.setProductId(outboundRecords.getProductId());
+                stockWaitDetails.setQuantity(quantity);
+                stockWaitDetails.setReceiptQuantity(BigDecimal.ZERO);
+                stockWaitDetails.setBusinessDetailsId(outboundRecords.getId());
+                stockWaitDetails.setContractDetailId(outboundRecords.getContractProductId());
+                stockWaitDetails.setProdTaskId(outboundRecords.getProdTaskId());
+                stockWaitDetails.setProdOrderId(outboundRecords.getProdOrderId());
+                stockWaitDetailsList.add(stockWaitDetails);
             }
-            StockWaitDetails stockWaitDetails = new StockWaitDetails();
-            stockWaitDetails.setStockWaitId(stockWait.getId());
-            stockWaitDetails.setProductId(outboundRecords.getProductId());
-            stockWaitDetails.setQuantity(quantity);
-            stockWaitDetails.setReceiptQuantity(BigDecimal.ZERO);
-            stockWaitDetails.setBusinessDetailsId(outboundRecords.getId());
-            stockWaitDetails.setContractDetailId(outboundRecords.getContractProductId());
-            stockWaitDetailsList.add(stockWaitDetails);
+            stockWaitDetailsService.saveBatch(stockWaitDetailsList);
         }
-        stockWaitDetailsService.saveBatch(stockWaitDetailsList);
     }
 
 
@@ -3156,8 +3170,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
     public void createOutboundInfo(ContractOutboundInfoDto dto) {
         Assert.notEmpty(dto.getContractId(), "合同id不能为空!");
         contractOutboundInfoService.save(dto);
-        List<ContractOutboundRecords> outboundRecordList = dto.getOutboundRecordList();
-        for (ContractOutboundRecords records : outboundRecordList) {
+        List<ContractOutboundRecordsDto> outboundRecordList = dto.getOutboundRecordList();
+
+        for (ContractOutboundRecordsDto records : outboundRecordList) {
             records.setId(null);
             Assert.notEmpty(records.getContractProductId(), "合同明细id不能为空!");
             records.setContractId(dto.getContractId());
@@ -3166,8 +3181,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
             Assert.notEmpty(contractProduct, "查询不到合同明细信息!");
             records.setProductId(contractProduct.getProductId());
             records.setPrice(contractProduct.getPrice());
+
+            contractOutboundRecordsService.save(records);
         }
-        contractOutboundRecordsService.saveBatch(outboundRecordList);
     }
 
     @DSTransactional

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

@@ -70,4 +70,9 @@ public class StockWaitDetails extends BasePo {
      */
     private Long contractDetailId;
 
+    /**
+     * 生产订单id
+     */
+    private Long prodOrderId;
+
 }

+ 4 - 2
hx-wms/src/main/java/com/fjhx/wms/service/WmsService.java

@@ -1,8 +1,10 @@
 package com.fjhx.wms.service;
 
+import java.util.List;
+
 public interface WmsService {
     /**
-     * 更新生产状态
+     * 销售出库 更新生产状态
      */
-    void updateProdStatus(Long id);
+    void updateProdStatus(List<Long> cpIds, Long prodOrderId);
 }

+ 3 - 2
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitServiceImpl.java

@@ -285,8 +285,9 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
         //更新生产状态
         //销售出库 修改生产订单为已出库
         if (Objects.equals(JournalType.SALE_OUT, JournalType.getByDetailType(stockWait.getBusinessType()))) {
-            Long businessId = stockWait.getContractId();
-            wmsService.updateProdStatus(businessId);
+            List<Long> cpIds = stockWaitDetailsService.listObject(StockWaitDetails::getContractDetailId, q -> q.eq(StockWaitDetails::getStockWaitId, stockWait.getId()));
+            Long prodOrderId = stockWait.getProdOrderId();
+            wmsService.updateProdStatus(cpIds, prodOrderId);
         }
     }