|
@@ -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;
|
|
|
}
|
|
|
|