yzc 2 år sedan
förälder
incheckning
5951bbdf6d

+ 5 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/dto/SubscribeDetailSelectDto.java

@@ -30,4 +30,9 @@ public class SubscribeDetailSelectDto extends BaseSelectDto {
      * id集合
      */
     private List<Long> ids;
+
+    /**
+     * 收货仓库id过滤
+     */
+    private Long receiptWarehouseId;
 }

+ 2 - 1
hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/vo/SubscribeDetailVo.java

@@ -4,6 +4,7 @@ import com.fjhx.purchase.entity.subscribe.po.SubscribeDetail;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -44,7 +45,7 @@ public class SubscribeDetailVo extends SubscribeDetail {
     /**
      * 采购数量
      */
-    private String purchaseCount;
+    private BigDecimal purchaseCount;
 
     /**
      * 维多利亚扩展json

+ 19 - 0
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java

@@ -9,12 +9,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
 import com.fjhx.purchase.entity.subscribe.dto.SubscribeDetailDto;
 import com.fjhx.purchase.entity.subscribe.dto.SubscribeDetailSelectDto;
 import com.fjhx.purchase.entity.subscribe.po.Subscribe;
 import com.fjhx.purchase.entity.subscribe.po.SubscribeDetail;
 import com.fjhx.purchase.entity.subscribe.vo.SubscribeDetailVo;
 import com.fjhx.purchase.mapper.subscribe.SubscribeDetailMapper;
+import com.fjhx.purchase.service.purchase.PurchaseDetailService;
 import com.fjhx.purchase.service.subscribe.SubscribeDetailService;
 import com.fjhx.wms.entity.warehouse.po.Warehouse;
 import com.fjhx.wms.service.warehouse.WarehouseService;
@@ -25,6 +27,7 @@ import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -48,6 +51,8 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
     private ProductInfoService productInfoService;
     @Autowired
     WarehouseService warehouseService;
+    @Autowired
+    PurchaseDetailService purchaseDetailService;
 
     /**
      * 分页
@@ -82,6 +87,8 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
         if (StringUtils.isNotEmpty(dto.getKeyword())) {
             wrapper.like("t2", Subscribe::getCode, dto.getKeyword());
         }
+        //维多利亚扩展根据到货仓库id过滤
+        wrapper.eq("json_unquote(t2.victoriatourist_json -> '$.receiptWarehouseId')", dto.getReceiptWarehouseId());
         wrapper.orderByDesc("t1", SubscribeDetail::getCreateTime);
         Page<SubscribeDetailVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<SubscribeDetailVo> list = page.getRecords();
@@ -106,6 +113,9 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
     public Page<SubscribeDetailVo> getPageByWdly(SubscribeDetailSelectDto dto) {
         Page<SubscribeDetailVo> page = getPage(dto);
         List<SubscribeDetailVo> records = page.getRecords();
+        if (ObjectUtil.isEmpty(records)) {
+            return page;
+        }
 
         //获取到货仓库id列表
         List<Long> wids = new ArrayList<>();
@@ -129,6 +139,15 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
                 }
             }
         }
+        //赋值采购数量
+        for (SubscribeDetailVo record : records) {
+            List<PurchaseDetail> list = purchaseDetailService.list(q -> q.eq(PurchaseDetail::getSubscribeDetailId, record.getId()));
+            BigDecimal count = list.stream()
+                    .map(PurchaseDetail::getCount)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            record.setPurchaseCount(count);
+        }
+
         return page;
     }
 

+ 56 - 1
hx-sale/src/main/java/com/fjhx/sale/flow/PurchaseFlowByWdly.java

@@ -12,6 +12,7 @@ import com.fjhx.purchase.entity.purchase.enums.PurchaseDetailStatusEnum;
 import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
 import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
+import com.fjhx.purchase.entity.subscribe.enums.SubscribeDetailStatusEnum;
 import com.fjhx.purchase.entity.subscribe.po.Subscribe;
 import com.fjhx.purchase.entity.subscribe.po.SubscribeDetail;
 import com.fjhx.purchase.service.purchase.PurchaseDetailService;
@@ -29,6 +30,9 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * 采购流程
@@ -51,6 +55,8 @@ public class PurchaseFlowByWdly extends FlowDelegate {
     private SubscribeService subscribeService;
     @Autowired
     private SubscribeDetailService subscribeDetailService;
+    @Autowired
+    private ContractProductService contractProductService;
 
     @Override
     public String getFlowKey() {
@@ -113,7 +119,56 @@ public class PurchaseFlowByWdly extends FlowDelegate {
      */
     @Override
     public void end(Long flowId, Long businessId, JSONObject submitData) {
-        purchaseFlow.end(flowId,businessId,submitData);
+        //修改申购明细状态
+        List<PurchaseDetail> purchaseDetailList = purchaseDetailService.list(Wrappers.<PurchaseDetail>query().lambda().eq(PurchaseDetail::getPurchaseId,businessId));
+        Map<Long, PurchaseDetail> purchaseDetailMap = purchaseDetailList.stream().collect(Collectors.toMap(PurchaseDetail::getSubscribeDetailId, Function.identity()));
+        List<Long> subscribeDetailIds = purchaseDetailList.stream().map(PurchaseDetail::getSubscribeDetailId).collect(Collectors.toList());
+        List<SubscribeDetail> subscribeDetails = subscribeDetailService.listByIds(subscribeDetailIds);
+        for (SubscribeDetail subscribeDetail : subscribeDetails) {
+            PurchaseDetail purchaseDetail = purchaseDetailMap.get(subscribeDetail.getId());
+            if(purchaseDetail.getCount()==subscribeDetail.getCount()){
+                //修改为已采购
+                subscribeDetail.setStatus(SubscribeDetailStatusEnum.PURCHASED.getKey());
+            }else{
+                //修改为部分采购
+                subscribeDetail.setStatus(SubscribeDetailStatusEnum.LITT_PAID_AMOUNT.getKey());
+            }
+        }
+        subscribeDetailService.updateBatchById(subscribeDetails);
+//        purchaseFlow.end(flowId,businessId,submitData);
+
+        //通过业务ID查询采购数据
+        Purchase purchase = purchaseService.getById(businessId);
+        if(ObjectUtils.isEmpty(purchase)){
+            throw new ServiceException("采购单不存在");
+        }
+        //查询采购产品
+//        List<PurchaseDetail> purchaseDetailList = purchaseDetailService.list(Wrappers.<PurchaseDetail>query().lambda().eq(PurchaseDetail::getPurchaseId,businessId));
+        List<ContractProduct> upContractProduct = new ArrayList<>();
+        for(PurchaseDetail p:purchaseDetailList){
+            if(ObjectUtils.isNotEmpty(p.getDataResourceId())&&
+                    p.getDataResource()== PurchaseDataResourceEnum.DATA_RESOURCE_1.getKey()){//如果采购的是外销合同
+                ContractProduct contractProduct = contractProductService.getById(p.getDataResourceId());
+                BigDecimal expendQuantity = contractProduct.getExpendQuantity().subtract(p.getCount());
+                if(expendQuantity.compareTo(BigDecimal.ZERO)< 1){//小于0不让继续执行
+                    throw new ServiceException("采购数量不得大于外销合同数量");
+                }
+                contractProduct.setExpendQuantity(expendQuantity);
+                upContractProduct.add(contractProduct);
+            }
+        }
+        if(CollectionUtils.isNotEmpty(upContractProduct)){//扣减销售合同数量
+            contractProductService.updateBatchById(upContractProduct);
+        }
+        //修改采购状态为审批通过
+        purchase.setPurchaseStatus(PurchaseStatusEnum.PASS.getKey());
+        purchase.setApprovedDate(new Date());
+        purchaseService.updateById(purchase);
+        //修改采购明细为待采购
+        PurchaseDetail detail = new PurchaseDetail();
+        detail.setStatus(PurchaseDetailStatusEnum.PASS.getKey());
+        purchaseDetailService.update(detail,Wrappers.<PurchaseDetail>query()
+                .lambda().eq(PurchaseDetail::getPurchaseId,purchase.getId()));
     }
 
 }