Explorar o código

请款 打款 bug修改

24282 %!s(int64=2) %!d(string=hai) anos
pai
achega
020d1b481a

+ 1 - 1
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java

@@ -142,7 +142,7 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
 
         // 如果不存在这条数据则返回账户余额不足
         if (ObjectUtil.isEmpty(accountRemainder)) {
-            throw new ServiceException("账户余额不足");
+            throw new ServiceException("该账户不存在此币种,请前往资金账户添加");
         }
 
         // 如果余额小于付款金额则返回账户余额不足

+ 17 - 1
hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/vo/PayDetailVo.java

@@ -9,7 +9,7 @@ import java.math.BigDecimal;
 /**
  * 采购付款明细列表查询返回值实体
  *
- * @author 
+ * @author
  * @since 2023-04-13
  */
 @Getter
@@ -20,4 +20,20 @@ public class PayDetailVo extends PayDetail {
      * 已付款金额
      */
     private BigDecimal sumMoney;
+
+    /**
+     * 采购合同编码
+     */
+    private String purchaseCode;
+
+    /**
+     * 采购合同金额
+     */
+    private BigDecimal purchaseAmount;
+
+    /**
+     * 已收发票金额
+     */
+    private BigDecimal invoiceAmount;
+
 }

+ 14 - 1
hx-purchase/src/main/java/com/fjhx/purchase/entity/pay/vo/PayVo.java

@@ -4,10 +4,12 @@ import com.fjhx.purchase.entity.pay.po.Pay;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * 采购付款列表查询返回值实体
  *
- * @author 
+ * @author
  * @since 2023-04-13
  */
 @Getter
@@ -20,4 +22,15 @@ public class PayVo extends Pay {
      * 打款状态
      */
     private String paymentStatus;
+
+    /**
+     * 采购付款明细
+     */
+    private List<PayDetailVo> payDetailVoList;
+
+    /**
+     * 流程实例id
+     */
+    private Long flowExampleId;
+
 }

+ 115 - 39
hx-purchase/src/main/java/com/fjhx/purchase/service/pay/impl/PayServiceImpl.java

@@ -1,32 +1,40 @@
 package com.fjhx.purchase.service.pay.impl;
 
-import com.baomidou.dynamic.datasource.annotation.DS;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.account.entity.account.po.AccountPayment;
 import com.fjhx.account.service.account.AccountPaymentService;
 import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.flow.entity.flow.po.FlowExample;
+import com.fjhx.flow.service.flow.FlowExampleService;
+import com.fjhx.purchase.entity.invoice.po.InvoiceDetails;
+import com.fjhx.purchase.entity.pay.dto.PayDto;
+import com.fjhx.purchase.entity.pay.dto.PaySelectDto;
 import com.fjhx.purchase.entity.pay.po.Pay;
-import com.fjhx.purchase.entity.purchase.vo.PurchaseVo;
+import com.fjhx.purchase.entity.pay.po.PayDetail;
+import com.fjhx.purchase.entity.pay.vo.PayDetailVo;
+import com.fjhx.purchase.entity.pay.vo.PayVo;
 import com.fjhx.purchase.mapper.pay.PayMapper;
+import com.fjhx.purchase.service.invoice.InvoiceDetailsService;
+import com.fjhx.purchase.service.pay.PayDetailService;
 import com.fjhx.purchase.service.pay.PayService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fjhx.supply.entity.supplier.po.SupplierInfo;
+import com.fjhx.purchase.service.purchase.PurchaseService;
 import com.fjhx.supply.service.supplier.SupplierInfoService;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.SqlField;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.purchase.entity.pay.vo.PayVo;
-import com.fjhx.purchase.entity.pay.dto.PaySelectDto;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.fjhx.purchase.entity.pay.dto.PayDto;
-import cn.hutool.core.bean.BeanUtil;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 
@@ -35,7 +43,7 @@ import java.util.stream.Collectors;
  * 采购付款 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-04-13
  */
 @Service
@@ -47,8 +55,21 @@ public class PayServiceImpl extends ServiceImpl<PayMapper, Pay> implements PaySe
     @Autowired
     private AccountPaymentService accountPaymentService;
 
+    @Autowired
+    private PayDetailService payDetailService;
+
+    @Autowired
+    private PurchaseService purchaseService;
+
+    @Autowired
+    private InvoiceDetailsService invoiceDetailsService;
+
+    @Autowired
+    private FlowExampleService flowExampleService;
+
     /**
      * 分页
+     *
      * @param dto
      * @return
      */
@@ -56,44 +77,99 @@ public class PayServiceImpl extends ServiceImpl<PayMapper, Pay> implements PaySe
     public Page<PayVo> getPage(PaySelectDto dto) {
         IWrapper<Pay> wrapper = getWrapper();
         wrapper.orderByDesc("p", Pay::getCreateTime);
-        if(StringUtils.isNotEmpty(dto.getStatus())){
-            wrapper.eq("p",Pay::getStatus,dto.getStatus());
+        if (StringUtils.isNotEmpty(dto.getStatus())) {
+            wrapper.eq("p", Pay::getStatus, dto.getStatus());
         }
-        if(StringUtils.isNotEmpty(dto.getPayStatus())){
-            wrapper.eq("p",Pay::getPayStatus,dto.getPayStatus());
+        if (StringUtils.isNotEmpty(dto.getPayStatus())) {
+            wrapper.eq("p", Pay::getPayStatus, dto.getPayStatus());
         }
-        if(StringUtils.isNotEmpty(dto.getKeyword())){
-            wrapper.keyword(dto.getKeyword(),new SqlField(Pay::getUserName),new SqlField(Pay::getRemark));
+        if (StringUtils.isNotEmpty(dto.getKeyword())) {
+            wrapper.keyword(dto.getKeyword(), new SqlField(Pay::getUserName), new SqlField(Pay::getRemark));
         }
         Page<PayVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<PayVo> list = page.getRecords();
-        if(CollectionUtils.isNotEmpty(list)){
-            //查询供应商
-            List<Long> supplyIds = list.stream().map(PayVo::getSupplyId).collect(Collectors.toList());
-            List<SupplierInfo> supplierInfoList = supplierInfoService.list(Wrappers.<SupplierInfo>query().lambda().in(SupplierInfo::getId,supplyIds));
-            Map<Long,List<SupplierInfo>> supplyMap = supplierInfoList.stream().distinct().collect(Collectors.groupingBy(SupplierInfo::getId));
-            //查询付款状态
-            List<Long> ids = list.stream().map(PayVo::getId).collect(Collectors.toList());
-            List<AccountPayment> accountPaymentList = accountPaymentService.list(Wrappers.<AccountPayment>query().lambda().in(AccountPayment::getBusinessId,ids));
-            Map<Long,List<AccountPayment>> accountPaymentMap = accountPaymentList.stream().distinct().collect(Collectors.groupingBy(AccountPayment::getBusinessId));
-            for(PayVo p:list){
-                if(MapUtils.isNotEmpty(supplyMap)){
-                    List<SupplierInfo> supplys = supplyMap.getOrDefault(p.getSupplyId(),null);
-                    p.setSupplyName(supplys==null?null:supplys.get(0).getName());
-                }
-                if(MapUtils.isNotEmpty(accountPaymentMap)){
-                    List<AccountPayment> accountPayments = accountPaymentMap.getOrDefault(p.getId(),null);
-                    p.setPaymentStatus(accountPayments==null?null:accountPayments.get(0).getStatus());
-                }
+
+        if (list.size() == 0) {
+            return page;
+        }
+
+        // 赋值供应商名称
+        supplierInfoService.attributeAssign(list, Pay::getSupplyId, (item, supply) -> {
+            item.setSupplyName(supply.getName());
+        });
+
+
+        List<Long> ids = list.stream().map(PayVo::getId).collect(Collectors.toList());
+
+        // 查询付款状态
+        List<AccountPayment> accountPaymentList = accountPaymentService.list(q -> q.in(AccountPayment::getBusinessId, ids));
+        Map<Long, List<AccountPayment>> accountPaymentMap = accountPaymentList.stream().distinct()
+                .collect(Collectors.groupingBy(AccountPayment::getBusinessId));
+
+        // 查询流程id
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+        Map<Long, Long> flowMap = flowExampleService.mapKV(FlowExample::getBusinessId, BaseIdPo::getId,
+                q -> q.in(FlowExample::getBusinessId, ids));
+
+        for (PayVo p : list) {
+
+            // 赋值付款状态
+            if (MapUtils.isNotEmpty(accountPaymentMap)) {
+                List<AccountPayment> accountPayments = accountPaymentMap.getOrDefault(p.getId(), null);
+                p.setPaymentStatus(accountPayments == null ? null : accountPayments.get(0).getStatus());
             }
+
+            // 赋值流程id
+            p.setFlowExampleId(flowMap.get(p.getId()));
+
         }
+
         return page;
     }
 
     @Override
     public PayVo detail(Long id) {
-        Pay Pay = this.getById(id);
-        PayVo result = BeanUtil.toBean(Pay, PayVo.class);
+        Pay pay = this.getById(id);
+        if (pay == null) {
+            throw new ServiceException("没有找到采购付款记录");
+        }
+
+        PayVo result = BeanUtil.toBean(pay, PayVo.class);
+
+        // 赋值采购付款明细
+        List<PayDetail> payDetailList = payDetailService.list(q -> q.eq(PayDetail::getPayId, id));
+        List<PayDetailVo> payDetailVoList = BeanUtil.copyToList(payDetailList, PayDetailVo.class);
+        result.setPayDetailVoList(payDetailVoList);
+
+        if (payDetailVoList.size() == 0) {
+            return result;
+        }
+
+        // 赋值采购付款明细采购合同编号、采购合同金额
+        purchaseService.attributeAssign(payDetailVoList, PayDetail::getPurchaseId, (item, purchase) -> {
+            item.setPurchaseCode(purchase.getCode());
+            item.setPurchaseAmount(purchase.getAmount());
+        });
+
+        // 赋值采购付款明细已收发票金额
+        List<Long> purchaseIdList = payDetailVoList.stream()
+                .map(PayDetail::getPurchaseId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+
+        if (purchaseIdList.size() == 0) {
+            return result;
+        }
+
+        List<InvoiceDetails> list = invoiceDetailsService.list(q -> q.in(InvoiceDetails::getPurchaseId, purchaseIdList));
+        Map<Long, BigDecimal> invoiceAmountMap = list.stream().collect(Collectors.toMap(
+                InvoiceDetails::getPurchaseId,
+                InvoiceDetails::getMoney,
+                BigDecimal::add
+        ));
+        payDetailVoList.forEach(item -> item.setInvoiceAmount(invoiceAmountMap.getOrDefault(item.getPurchaseId(), BigDecimal.ZERO)));
+
         return result;
     }