Browse Source

货款账单:到货金额错误、付款状态错误bug

24282 2 years ago
parent
commit
7eacb6ff0a

+ 67 - 0
hx-purchase/src/main/java/com/fjhx/purchase/flow/PayFlow.java

@@ -14,14 +14,20 @@ import com.fjhx.flow.core.FlowDelegate;
 import com.fjhx.purchase.entity.pay.enums.PayStatusEnum;
 import com.fjhx.purchase.entity.pay.po.Pay;
 import com.fjhx.purchase.entity.pay.po.PayDetail;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.service.pay.PayDetailService;
 import com.fjhx.purchase.service.pay.PayService;
+import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.ruoyi.common.exception.ServiceException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 采购付款流程
@@ -42,6 +48,9 @@ public class PayFlow extends FlowDelegate {
     @Autowired
     private PayDetailService payDetailService;
 
+    @Autowired
+    private PurchaseService purchaseService;
+
     @Override
     public String getFlowKey() {
         return "pay_flow";
@@ -111,5 +120,63 @@ public class PayFlow extends FlowDelegate {
         payment.setPaymentMethod(pay.getPayType());
         accountPaymentService.save(payment);
 
+        // 修改合同付款状态
+        updatePurchasePayStatus(businessId);
+
+    }
+
+
+    /**
+     * 修改合同付款状态
+     *
+     * @param payId 付款id
+     */
+    private void updatePurchasePayStatus(Long payId) {
+
+        // 获取支付明细
+        List<PayDetail> list = payDetailService.list(q -> q.eq(PayDetail::getPayId, payId));
+
+        // 获取合同id
+        List<Long> purchaseIdList = list.stream().map(PayDetail::getPurchaseId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+
+        if (purchaseIdList.size() == 0) {
+            return;
+        }
+
+        // 通过合同id获取指定合同所有付款记录
+        Map<Long, BigDecimal> map = payDetailService.getPayMoneyCountByPurchaseId(purchaseIdList);
+
+        // 获取合同列表
+        List<Purchase> purchaseList = purchaseService.listByIds(purchaseIdList);
+
+        for (Purchase purchase : purchaseList) {
+
+            Integer payStatus = purchase.getPayStatus();
+
+            // 已经是已付款,跳过
+            if (Objects.equals(20, payStatus)) {
+                continue;
+            }
+
+            // 获取合同付款金额
+            BigDecimal payMoney = map.getOrDefault(purchase.getId(), BigDecimal.ZERO);
+            // 获取合同金额
+            BigDecimal amount = purchase.getAmount();
+
+            // 合同付款金额大于等于合同金额,已付款
+            if (payMoney.compareTo(amount) >= 0) {
+                purchase.setPayStatus(20);
+            }
+            // 否则进行中
+            else {
+                purchase.setPayStatus(10);
+            }
+
+        }
+
+        // 修改合同付款状态
+        purchaseService.updateBatchById(purchaseList);
+
     }
+
 }

+ 6 - 2
hx-purchase/src/main/java/com/fjhx/purchase/mapper/pay/PayDetailMapper.java

@@ -1,9 +1,9 @@
 package com.fjhx.purchase.mapper.pay;
 
-import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
-import com.fjhx.purchase.entity.pay.po.PayDetail;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.pay.po.PayDetail;
 import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
@@ -28,8 +28,12 @@ public interface PayDetailMapper extends BaseMapper<PayDetail> {
 
     /**
      * 根据采购单ids查询已付款总额
+     *
      * @param purchaseIds
      * @return
      */
     List<PayDetailVo> getSumMoneyByPurchaseIds(@Param("purchaseIds") List<Long> purchaseIds);
+
+    List<PayDetail> getPayMoneyCountByPurchaseId(@Param("ew") QueryWrapper<Object> queryWrapper);
+
 }

+ 2 - 4
hx-purchase/src/main/java/com/fjhx/purchase/mapper/purchase/PurchaseMapper.java

@@ -1,10 +1,10 @@
 package com.fjhx.purchase.mapper.purchase;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
-import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.purchase.entity.purchase.dto.PurchaseDto;
+import com.fjhx.purchase.entity.purchase.po.Purchase;
 import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
@@ -27,8 +27,6 @@ public interface PurchaseMapper extends BaseMapper<Purchase> {
      */
     Page<PurchaseVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Purchase> wrapper);
 
-
-
     /**
      * 查询货款账单
      * @param query

+ 34 - 28
hx-purchase/src/main/java/com/fjhx/purchase/service/arrival/impl/ArrivalServiceImpl.java

@@ -43,13 +43,17 @@ import com.fjhx.wms.entity.stock.po.StockWait;
 import com.fjhx.wms.entity.stock.po.StockWaitDetails;
 import com.fjhx.wms.service.stock.StockWaitDetailsService;
 import com.fjhx.wms.service.stock.StockWaitService;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.core.domain.BasePo;
 import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 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;
@@ -124,46 +128,48 @@ public class ArrivalServiceImpl extends ServiceImpl<ArrivalMapper, Arrival> impl
     @DSTransactional
     @Override
     public void add(Arrival arrival) {
+
         arrival.setCode(codingRuleService.createCode(CodingRuleEnum.ARRIVAL.getKey(), null));
-//        arrival.setCode(CodeEnum.ARRIVAL.getCode());
         this.save(arrival);
-        //修改采购状态
-        Purchase purchase = new Purchase();
-        purchase.setArrivalStatus(arrival.getArrivalStatus());
-        purchase.setId(arrival.getPurchaseId());
-        purchaseService.updateById(purchase);
-        Purchase purchase1 = purchaseService.getById(arrival.getPurchaseId());
-        //取出到货明细
+
+        // 修改采购状态
+        purchaseService.update(q -> q
+                .eq(BaseIdPo::getId, arrival.getPurchaseId())
+                .set(Purchase::getArrivalStatus, arrival.getArrivalStatus())
+                .set(BasePo::getUpdateTime, new Date())
+                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+        );
+
+        Purchase purchase = purchaseService.getById(arrival.getPurchaseId());
+
+        // 取出到货明细
         List<ArrivalDetail> arrivalDetailList = arrival.getArrivalDetailList();
         if (CollectionUtils.isNotEmpty(arrivalDetailList)) {
+
             StockWait stockWait = new StockWait();
-            stockWait.setBusinessId(purchase1.getId());//采购id
-            stockWait.setBusinessCode(purchase1.getCode());//采购编码
-            stockWait.setType(1);//入库
-            stockWait.setStatus(0);//待入库
-            stockWait.setBusinessType(StockWaitType.PURCHASE_ARRIVAL_IN.getDetailType());//采购到货
+            stockWait.setBusinessId(purchase.getId());// 采购id
+            stockWait.setBusinessCode(purchase.getCode());// 采购编码
+            stockWait.setType(1);// 入库
+            stockWait.setStatus(0);// 待入库
+            stockWait.setBusinessType(StockWaitType.PURCHASE_ARRIVAL_IN.getDetailType());// 采购到货
             stockWaitService.save(stockWait);
+
             List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
-            for (ArrivalDetail d : arrivalDetailList) {
-                Assert.notEmpty(d.getBussinessId(), "产品id不能为空");
-                //todo 这一块是做了采购到货状态修改。前端已经完成
-                //查询采购明细
-//                PurchaseDetail purchaseDetail = purchaseDetailService.getById(d.getPurchaseDetailId());
-                //查询当前到货总数--修改对应得申购状态
-//                BigDecimal arrivalCount = arrivalDetailService.getSumCount(d.getPurchaseDetailId(),d.getBussinessId());
-//                BigDecimal sumArrivalCount = arrivalCount.add(d.getCount());
-//                if(sumArrivalCount.compareTo(purchaseDetail.getCount())<0){//判断到货数量是否大于等于采购数量
-//
-//
-//                }
-                d.setArrivalId(arrival.getId());
+
+            for (ArrivalDetail arrivalDetail : arrivalDetailList) {
+                Assert.notEmpty(arrivalDetail.getBussinessId(), "产品id不能为空");
+                arrivalDetail.setId(IdWorker.getId());
+                arrivalDetail.setArrivalId(arrival.getId());
+
                 StockWaitDetails stockWaitDetails = new StockWaitDetails();
                 stockWaitDetails.setStockWaitId(stockWait.getId());
-                stockWaitDetails.setProductId(d.getBussinessId());
-                stockWaitDetails.setQuantity(d.getCount());
+                stockWaitDetails.setProductId(arrivalDetail.getBussinessId());
+                stockWaitDetails.setQuantity(arrivalDetail.getCount());
+                stockWaitDetails.setBusinessDetailsId(arrivalDetail.getId());
                 stockWaitDetailsList.add(stockWaitDetails);
             }
             arrivalDetailService.saveBatch(arrivalDetailList);
+
             stockWaitDetailsService.saveBatch(stockWaitDetailsList);
         }
     }

+ 10 - 5
hx-purchase/src/main/java/com/fjhx/purchase/service/pay/PayDetailService.java

@@ -1,14 +1,15 @@
 package com.fjhx.purchase.service.pay;
 
-import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
-import com.fjhx.purchase.entity.pay.po.PayDetail;
-import com.ruoyi.common.core.service.BaseService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
-import com.fjhx.purchase.entity.pay.dto.PayDetailSelectDto;
 import com.fjhx.purchase.entity.pay.dto.PayDetailDto;
+import com.fjhx.purchase.entity.pay.dto.PayDetailSelectDto;
+import com.fjhx.purchase.entity.pay.po.PayDetail;
+import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
+import com.ruoyi.common.core.service.BaseService;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -48,8 +49,12 @@ public interface PayDetailService extends BaseService<PayDetail> {
 
     /**
      * 根据采购单ids查询已付款金额
+     *
      * @param purchaseIds
      * @return
      */
     List<PayDetailVo> getSumMoneyByPurchaseIds(List<Long> purchaseIds);
+
+    Map<Long, BigDecimal> getPayMoneyCountByPurchaseId(List<Long> purchaseIdList);
+
 }

+ 31 - 9
hx-purchase/src/main/java/com/fjhx/purchase/service/pay/impl/PayDetailServiceImpl.java

@@ -1,20 +1,24 @@
 package com.fjhx.purchase.service.pay.impl;
 
-import com.baomidou.dynamic.datasource.annotation.DS;
-import com.fjhx.common.constant.SourceConstant;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.purchase.entity.pay.dto.PayDetailDto;
+import com.fjhx.purchase.entity.pay.dto.PayDetailSelectDto;
+import com.fjhx.purchase.entity.pay.enums.PayStatusEnum;
 import com.fjhx.purchase.entity.pay.po.PayDetail;
+import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
 import com.fjhx.purchase.mapper.pay.PayDetailMapper;
 import com.fjhx.purchase.service.pay.PayDetailService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
-import com.fjhx.purchase.entity.pay.dto.PayDetailSelectDto;
 import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.fjhx.purchase.entity.pay.dto.PayDetailDto;
-import cn.hutool.core.bean.BeanUtil;
+import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
@@ -60,6 +64,7 @@ public class PayDetailServiceImpl extends ServiceImpl<PayDetailMapper, PayDetail
 
     /**
      * 付款
+     *
      * @param purchaseIds
      * @return
      */
@@ -68,4 +73,21 @@ public class PayDetailServiceImpl extends ServiceImpl<PayDetailMapper, PayDetail
         return baseMapper.getSumMoneyByPurchaseIds(purchaseIds);
     }
 
+    @Override
+    public Map<Long, BigDecimal> getPayMoneyCountByPurchaseId(List<Long> purchaseIdList) {
+
+        QueryWrapper<Object> queryWrapper = Wrappers.query()
+                .ge("p.status", PayStatusEnum.PASS.getKey())
+                .in("pd.purchase_id", purchaseIdList);
+
+        List<PayDetail> list = baseMapper.getPayMoneyCountByPurchaseId(queryWrapper);
+
+        return list.stream().collect(Collectors.toMap(
+                PayDetail::getPurchaseId,
+                PayDetail::getMoney,
+                BigDecimal::add
+        ));
+    }
+
+
 }

+ 9 - 11
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java

@@ -17,7 +17,6 @@ import com.fjhx.common.entity.documentary.bo.DocumentaryData;
 import com.fjhx.common.enums.CodingRuleEnum;
 import com.fjhx.common.service.coding.CodingRuleService;
 import com.fjhx.common.service.documentary.GetDocumentaryBusinessTemplate;
-import com.fjhx.customer.service.customer.CustomerService;
 import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.purchase.entity.invoice.vo.InvoiceDetailsVo;
@@ -40,7 +39,6 @@ import com.fjhx.purchase.service.invoice.InvoiceDetailsService;
 import com.fjhx.purchase.service.pay.PayDetailService;
 import com.fjhx.purchase.service.purchase.PurchaseDetailService;
 import com.fjhx.purchase.service.purchase.PurchasePayRecordDetailService;
-import com.fjhx.purchase.service.purchase.PurchasePayRecordService;
 import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.fjhx.purchase.service.subscribe.SubscribeDetailService;
 import com.fjhx.purchase.service.subscribe.SubscribeService;
@@ -48,6 +46,7 @@ import com.fjhx.supply.entity.supplier.po.SupplierInfo;
 import com.fjhx.supply.service.supplier.SupplierInfoService;
 import com.fjhx.wms.entity.warehouse.po.Warehouse;
 import com.fjhx.wms.service.warehouse.WarehouseService;
+import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.PageUtils;
@@ -94,25 +93,23 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
     private ArrivalDetailService arrivalDetailService;
 
     @Autowired
-    private CustomerService customerService;
-
-    @Autowired
     WarehouseService warehouseService;
 
     @Autowired
     ArrivalService arrivalService;
+
     @Autowired
     SubscribeDetailService subscribeDetailService;
+
     @Autowired
     SubscribeService subscribeService;
 
-
     @Autowired
     private CodingRuleService codingRuleService;
+
     @Autowired
     private PurchasePayRecordDetailService purchasePayRecordDetailService;
-    @Autowired
-    private PurchasePayRecordService purchasePayRecordService;
+
 
     /**
      * 列表
@@ -414,6 +411,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
      */
     @Override
     public Page<PurchaseDto> paymentBill(PurchaseSelectDto purchaseDto) {
+
         QueryWrapper<Object> query = Wrappers.query();
         query.eq(ObjectUtil.isNotEmpty(purchaseDto.getSupplyId()), "pu.supply_id", purchaseDto.getSupplyId());
         query.eq(ObjectUtil.isNotEmpty(purchaseDto.getPayStatus()), "pu.pay_status", purchaseDto.getPayStatus());
@@ -425,8 +423,9 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
         if (records.size() == 0) {
             return page;
         }
+
         //获取到所有的采购订单ID
-        List<Long> ids = records.stream().map(purchaseDto1 -> purchaseDto1.getId()).collect(Collectors.toList());
+        List<Long> ids = records.stream().map(BaseIdPo::getId).collect(Collectors.toList());
         QueryWrapper<Object> wrapper = Wrappers.query();
         wrapper.in("sw.business_id", ids);
         wrapper.eq("sw.type", 1);
@@ -435,8 +434,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
         List<PurchaseDto> purchaseDtos = baseMapper.arrivalAmount(wrapper);
         Map<Long, List<PurchaseDto>> arrivalMap = purchaseDtos.stream().collect(Collectors.groupingBy(PurchaseDto::getId));
 
-
-        //查询已付款金额()
+        // 查询已付款金额()
         QueryWrapper<Object> queryWrapper = Wrappers.query();
         queryWrapper.in("pd.purchase_id", ids);
         queryWrapper.eq("p.status", 30);

+ 9 - 1
hx-purchase/src/main/resources/mapper/pay/PayDetailMapper.xml

@@ -29,6 +29,14 @@
             </if>
         </where>
         GROUP BY
-            purchase_id
+        purchase_id
     </select>
+
+    <select id="getPayMoneyCountByPurchaseId" resultType="com.fjhx.purchase.entity.pay.po.PayDetail">
+        select pd.money, pd.purchase_id
+        from pay p
+                 inner join pay_detail pd on p.id = pd.pay_id
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>

+ 8 - 8
hx-purchase/src/main/resources/mapper/purchase/PurchaseMapper.xml

@@ -23,17 +23,17 @@
                 LEFT JOIN  invoice_details nd on pu.id = nd.purchase_id
             ${ew.customSqlSegment}
     </select>
+
     <select id="arrivalAmount" resultType="com.fjhx.purchase.entity.purchase.dto.PurchaseDto">
-        SELECT
-            SUM(wd.receipt_quantity) * pd.price  amount,
-            pd.purchase_id id
-        FROM
-            bytesailing_wms.stock_wait sw
-                JOIN bytesailing_wms.stock_wait_details wd on sw.id = wd.stock_wait_id
-                join arrival_detail ad on wd.business_details_id = ad.id
-                join purchase_detail pd on ad.purchase_detail_id = pd.id
+        SELECT SUM(wd.receipt_quantity * pd.price) amount,
+               pd.purchase_id                      id
+        FROM bytesailing_wms.stock_wait sw
+                 JOIN bytesailing_wms.stock_wait_details wd on sw.id = wd.stock_wait_id
+                 JOIN arrival_detail ad on wd.business_details_id = ad.id
+                 JOIN purchase_detail pd on ad.purchase_detail_id = pd.id
             ${ew.customSqlSegment}
     </select>
+
     <select id="paidAmount" resultType="com.fjhx.purchase.entity.purchase.dto.PurchaseDto">
         SELECT
             sum(pd.money) amount,