Browse Source

销售出库问题处理

yzc 1 năm trước cách đây
mục cha
commit
9b2b941945

+ 7 - 3
hx-mes/src/main/java/com/fjhx/mes/service/SaleServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fjhx.mes.service;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.fjhx.mes.entity.production.dto.ProductionOrderDto;
 import com.fjhx.mes.entity.production.po.ProductionOrder;
 import com.fjhx.mes.entity.production.po.ProductionOrderDetail;
@@ -48,10 +49,13 @@ 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());
+
+        ProductionOrderDetail productionOrderDetail = produceOrderDetailService.getOne(q -> q.eq(ProductionOrderDetail::getContractDetailId, id));
+        if (ObjectUtil.isNotEmpty(productionOrderDetail)) {
+            dto.setProdOrderId(productionOrderDetail.getProduceOrderId());
+            dto.setProdTaskId(productionOrderDetail.getId());
+        }
         return dto;
     }
 

+ 4 - 2
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProduceOrderServiceImpl.java

@@ -768,8 +768,10 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
                     .eq(ProductionOrder::getContractId, productionOrder.getContractId())
                     .eq(ProductionOrder::getConfirmStatus, 0));
 
-            //所有订单交期确认,才生成数据
-            if (count == 0) {
+            Contract contract = contractService.getById(productionOrder.getContractId());
+            Assert.notEmpty(contract, "查询不到合同信息!");
+            //所有订单交期确认, 合同为已下发, 才生成数据
+            if (count == 0 && ObjectUtil.equals(contract.getOrderDistributeStatus(), 1)) {
                 List<ProductionOrder> productionOrderList = this.list(q -> q.eq(ProductionOrder::getContractId, productionOrder.getContractId()));
                 for (ProductionOrder productionOrder1 : productionOrderList) {
                     if (produceOrderDetailService.count(q -> q.eq(ProductionOrderDetail::getProduceOrderId, productionOrder1.getId())) > 0) {

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

@@ -17,5 +17,6 @@ public class ContractOutboundRecordsDto extends ContractOutboundRecords {
     private Long prodOrderId;
 
     private Long prodTaskId;
+    private Long prodCompanyId;
 
 }

+ 1 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java

@@ -351,7 +351,7 @@ public class Contract extends BasePo {
     private Integer isShow;
 
     /**
-     * 订单下发状态 0未下发 1已下发
+     * 订单下发状态 0未下发 1已下发 2驳回
      */
     private Integer orderDistributeStatus;
 

+ 25 - 8
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -3066,6 +3066,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         createOutboundInfo(dto);
 
         //校验是否能出货(非特批校验,特批跳过)
+        BigDecimal errAmount = BigDecimal.ZERO;
         //数量*(1-预付比例%)*单价<=(累计收款金额-预付款金额)-已出货金额
         //预付比例-小数
         BigDecimal multiply = new BigDecimal(contract.getAdvanceRatio()).multiply(BigDecimal.valueOf(0.01));
@@ -3074,12 +3075,23 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         //(累计收款金额-预付款金额)-已出货金额
         BigDecimal subtract2 = contract.getSumClaimMoney().subtract(contract.getAmount().multiply(multiply)).subtract(contract.getShipmentAmount());
         for (ContractOutboundRecords productDto : productDtoList) {
+            //跳过出库数量为空||出库数量为0
+            BigDecimal quantity = productDto.getQuantity();
+            if (ObjectUtil.isEmpty(quantity) || quantity.compareTo(BigDecimal.ZERO) <= 0) {
+                continue;
+            }
+
             BigDecimal multiply1 = productDto.getQuantity().multiply(subtract).multiply(productDto.getPrice());
             if (multiply1.compareTo(subtract2) > 0) {
-                throw new ServiceException(String.format("收款金额不满足出货条件,至少需再收款%s %s 才能出货!", contract.getCurrency(), multiply1.subtract(subtract2).setScale(4, RoundingMode.HALF_UP)));
+                errAmount = errAmount.add(multiply1.subtract(subtract2).setScale(4, RoundingMode.HALF_UP));
             }
         }
 
+        if (errAmount.compareTo(BigDecimal.ZERO) > 0) {
+            throw new ServiceException(String.format("收款金额不满足出货条件,至少需再收款%s %s 才能出货!", contract.getCurrency(), errAmount));
+        }
+
+
         //创建待出库
         saleOutboundComm(dto);
     }
@@ -3090,14 +3102,19 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         List<ContractOutboundRecordsDto> productDtoList = dto.getOutboundRecordList();
         //补充数据
         for (ContractOutboundRecordsDto outboundRecords : productDtoList) {
-            ContractProduct byId = contractProductService.getById(outboundRecords.getContractProductId());
-            outboundRecords.setProductId(byId.getProductId());
-            outboundRecords.setPrice(byId.getPrice());
+            ContractProduct contractProduct = contractProductService.getById(outboundRecords.getContractProductId());
+            outboundRecords.setProductId(contractProduct.getProductId());
+            outboundRecords.setPrice(contractProduct.getPrice());
 
             //赋值生产信息
-            ContractOutboundRecordsDto taskInfo = saleService.getProdOrderIdByContractDetailId(byId.getId());
+            ContractOutboundRecordsDto taskInfo = saleService.getProdOrderIdByContractDetailId(contractProduct.getId());
             outboundRecords.setProdOrderId(taskInfo.getProdOrderId());
             outboundRecords.setProdTaskId(taskInfo.getProdTaskId());
+
+            //获取生产公司
+            ProductInfo productInfo = productInfoService.getById(contractProduct.getProductId());
+            Assert.notEmpty(productInfo, "查询不到产品信息!");
+            outboundRecords.setProdCompanyId(productInfo.getCompanyId());
         }
 
         //修改订单出库状态
@@ -3114,18 +3131,18 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         Assert.notEmpty(contract, "查询不到销售订单信息!");
 
         //根据生产订单id分组
-        Map<Long, List<ContractOutboundRecordsDto>> collect = productDtoList.stream().collect(Collectors.groupingBy(ContractOutboundRecordsDto::getProdOrderId));
+        Map<Long, List<ContractOutboundRecordsDto>> collect = productDtoList.stream().collect(Collectors.groupingBy(ContractOutboundRecordsDto::getProdCompanyId));
         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());
+            stockWait.setProdOrderId(entry.getValue().get(0).getProdOrderId());
+            stockWait.setCompanyId(entry.getKey());
             stockWaitService.save(stockWait);
 
             List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();