From 53bdb26a0ae994418e92d93aab23d6f5e7225f37 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期一, 19 五月 2025 16:20:56 +0800
Subject: [PATCH] 产品

---
 src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java |  246 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 246 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java
new file mode 100644
index 0000000..e858038
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java
@@ -0,0 +1,246 @@
+package com.ruoyi.purchase.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.mapper.SupplierManageMapper;
+import com.ruoyi.basic.pojo.SupplierManage;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.security.LoginUser;
+import com.ruoyi.purchase.dto.PaymentLedgerDto;
+import com.ruoyi.purchase.dto.PaymentRegistrationDto;
+import com.ruoyi.purchase.mapper.InvoicePurchaseMapper;
+import com.ruoyi.purchase.mapper.PaymentRegistrationMapper;
+import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
+import com.ruoyi.purchase.pojo.InvoicePurchase;
+import com.ruoyi.purchase.pojo.PaymentRegistration;
+import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.purchase.service.IPaymentRegistrationService;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedger;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 浠樻鐧昏Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2025-05-15
+ */
+@Service
+public class PaymentRegistrationServiceImpl extends ServiceImpl<PaymentRegistrationMapper, PaymentRegistration> implements IPaymentRegistrationService {
+    @Autowired
+    private PaymentRegistrationMapper paymentRegistrationMapper;
+
+    @Autowired
+    private PurchaseLedgerMapper purchaseLedgerMapper;
+
+    @Autowired
+    private InvoicePurchaseMapper invoicePurchaseMapper;
+
+    @Autowired
+    private SalesLedgerMapper salesLedgerMapper;
+
+    @Autowired
+    private SupplierManageMapper supplierManageMapper;
+
+    @Autowired
+    private SalesLedgerProductMapper salesLedgerProductMapper;
+
+    /**
+     * 鏌ヨ浠樻鐧昏
+     *
+     * @param id 浠樻鐧昏涓婚敭
+     * @return 浠樻鐧昏
+     */
+    @Override
+    public PaymentRegistration selectPaymentRegistrationById(Long id) {
+        return paymentRegistrationMapper.selectPaymentRegistrationById(id);
+    }
+
+    /**
+     * 鏌ヨ浠樻鐧昏鍒楄〃
+     *
+     * @param paymentRegistrationDto 浠樻鐧昏
+     * @return 浠樻鐧昏
+     */
+    @Override
+    public List<PaymentRegistrationDto> selectPaymentRegistrationList(PaymentRegistrationDto paymentRegistrationDto) {
+        List<PaymentRegistrationDto> list = paymentRegistrationMapper.selectPaymentRegistrationList(paymentRegistrationDto);
+        for (PaymentRegistrationDto registrationDto : list) {
+            List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new QueryWrapper<PaymentRegistration>()
+                    .eq("invoice_purchase_id", registrationDto.getInvoicePurchaseId()));
+            BigDecimal total = paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+            registrationDto.setUnPaymentAmount(registrationDto.getInvoiceAmount().subtract(total));
+        }
+        return list;
+    }
+
+    /**
+     * 鏂板浠樻鐧昏
+     *
+     * @param paymentRegistration 浠樻鐧昏
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertPaymentRegistration(PaymentRegistration paymentRegistration) {
+        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(paymentRegistration.getPurchaseLedgerId());
+        SalesLedger salesLedger = salesLedgerMapper.selectOne(new QueryWrapper<SalesLedger>().
+                eq("sales_contract_no", purchaseLedger.getSalesContractNo()));
+        if (salesLedger == null) {
+            throw new RuntimeException("鍏宠仈閿�鍞悎鍚屽彿涓嶅瓨鍦�");
+        }
+
+        paymentRegistration.setSaleLedgerId(salesLedger.getId());
+        paymentRegistration.setSupplierId(purchaseLedger.getSupplierId());
+
+        List<InvoicePurchase> invoicePurchases = invoicePurchaseMapper.selectList(new QueryWrapper<InvoicePurchase>().
+                eq("purchase_contract_no", purchaseLedger.getPurchaseContractNumber()));
+        if (invoicePurchases == null || invoicePurchases.size() == 0) {
+            throw new RuntimeException("鍏宠仈鍙戠エ涓嶅瓨鍦�");
+        }
+        paymentRegistration.setInvoicePurchaseId(invoicePurchases.get(0).getId());
+
+        List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new QueryWrapper<PaymentRegistration>()
+                .eq("invoice_purchase_id", invoicePurchases.get(0).getId()));
+        BigDecimal total = paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        if (total.add(paymentRegistration.getCurrentPaymentAmount()).compareTo(invoicePurchases.get(0).getInvoiceAmount()) > 0) {
+            throw new RuntimeException("浠樻閲戦瓒呭嚭鍙戠エ閲戦");
+        }
+
+
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        Integer tenantId = loginUser.getTenantId();
+        paymentRegistration.setTenantId(tenantId.longValue());
+        paymentRegistration.setCreateTime(DateUtils.getNowDate());
+        paymentRegistration.setUpdateTime(DateUtils.getNowDate());
+        return paymentRegistrationMapper.insert(paymentRegistration);
+    }
+
+    /**
+     * 淇敼浠樻鐧昏
+     *
+     * @param paymentRegistration 浠樻鐧昏
+     * @return 缁撴灉
+     */
+    @Override
+    public int updatePaymentRegistration(PaymentRegistration paymentRegistration) {
+        InvoicePurchase invoicePurchase = invoicePurchaseMapper.selectById(paymentRegistration.getInvoicePurchaseId());
+
+        List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new QueryWrapper<PaymentRegistration>()
+                .eq("invoice_purchase_id", paymentRegistration.getInvoicePurchaseId()).ne("id", paymentRegistration.getId()));
+        BigDecimal total = paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        if (total.add(paymentRegistration.getCurrentPaymentAmount()).compareTo(invoicePurchase.getInvoiceAmount()) > 0) {
+            throw new RuntimeException("浠樻閲戦瓒呭嚭鍙戠エ閲戦");
+        }
+
+        paymentRegistration.setUpdateTime(DateUtils.getNowDate());
+        return paymentRegistrationMapper.updateById(paymentRegistration);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎浠樻鐧昏
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑浠樻鐧昏涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deletePaymentRegistrationByIds(Long[] ids) {
+        return paymentRegistrationMapper.delete(new QueryWrapper<PaymentRegistration>().in("id", ids));
+    }
+
+    @Override
+    public PaymentRegistration selectPaymentRegistrationByPurchaseId(Long id) {
+        PaymentRegistrationDto paymentRegistrationDto = new PaymentRegistrationDto();
+        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(id);
+        paymentRegistrationDto.setSalesContractNo(purchaseLedger.getSalesContractNo());
+        paymentRegistrationDto.setSupplierName(purchaseLedger.getSupplierName());
+        paymentRegistrationDto.setSupplierId(purchaseLedger.getSupplierId());
+
+        List<InvoicePurchase> invoicePurchaseList = invoicePurchaseMapper.selectList(new QueryWrapper<InvoicePurchase>()
+                .eq("purchase_contract_no", purchaseLedger.getPurchaseContractNumber()));
+        if (invoicePurchaseList != null && invoicePurchaseList.size() > 0) {
+            paymentRegistrationDto.setInvoiceNumber(invoicePurchaseList.get(0).getInvoiceNumber());
+            paymentRegistrationDto.setInvoiceAmount(invoicePurchaseList.get(0).getInvoiceAmount());
+            paymentRegistrationDto.setTaxRate(invoicePurchaseList.get(0).getTaxRate());
+        }
+        return paymentRegistrationDto;
+    }
+
+    @Override
+    public List<Map<String, Object>> selectPaymentLedgerList(PaymentLedgerDto paymentLedgerDto) {
+        List<Map<String, Object>> result = new ArrayList<>();
+        LambdaQueryWrapper<SupplierManage> queryWrapper = new LambdaQueryWrapper<>();
+        Optional.ofNullable(paymentLedgerDto)
+                .ifPresent(dto -> {
+                    if (StringUtils.hasText(dto.getSupplierName())) {
+                        queryWrapper.like(SupplierManage::getSupplierName, dto.getSupplierName());
+                    }
+                });
+
+        List<SupplierManage> supplierManages = supplierManageMapper.selectList(queryWrapper);
+
+        for (SupplierManage supplierManage : supplierManages) {
+            Map<String, Object> res = new HashMap<>();
+            res.put("supplierName", supplierManage.getSupplierName());
+
+            // 搴斾粯閲戦
+            BigDecimal payableAmount = BigDecimal.ZERO;
+            List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(new QueryWrapper<SalesLedger>().eq("customer_id", supplierManage.getId()));
+            if (salesLedgers != null && salesLedgers.size() > 0) {
+                List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new QueryWrapper<SalesLedgerProduct>()
+                        .in("sales_ledger_id", salesLedgers.stream().map(SalesLedger::getId).collect(Collectors.toList())));
+                // 搴斾粯閲戦
+                payableAmount = salesLedgerProducts.stream().map(SalesLedgerProduct::getTaxInclusiveTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+            }
+
+            // 寮�绁ㄩ噾棰�
+            BigDecimal invoiceAmount = salesLedgers.stream().map(SalesLedger::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+            // 浠樻閲戦
+            List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new QueryWrapper<PaymentRegistration>()
+                    .eq("supplier_id", supplierManage.getId()));
+
+            BigDecimal paymentAmount = BigDecimal.ZERO;
+            if (paymentRegistrations != null && paymentRegistrations.size() > 0) {
+                paymentAmount = paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+
+            res.put("invoiceAmount", invoiceAmount);
+            res.put("payableAmount", payableAmount);
+            res.put("paymentAmount", paymentAmount);
+
+            // 璇︽儏
+            List<Map<String, Object>> details = new ArrayList<>();
+            for (PaymentRegistration paymentRegistration : paymentRegistrations) {
+                Map<String, Object> detail = new HashMap<>();
+                detail.put("voteCount", 1); // 绁ㄦ暟锛屾湭鐭ユ暟鎹簮锛屾殏鏃剁敤1
+                detail.put("paymentAmount", paymentRegistration.getCurrentPaymentAmount()); // 浠樻閲戦
+                InvoicePurchase  invoicePurchase = invoicePurchaseMapper.selectById(paymentRegistration.getInvoicePurchaseId());
+                detail.put("payableAmount", invoicePurchase.getInvoiceAmount()); // 搴斾粯閲戦
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                String formattedDate = sdf.format(paymentRegistration.getPaymentDate());
+                detail.put("createTime", formattedDate); // 鍙戠敓鏃堕棿
+                details.add(detail);
+            }
+
+            res.put("details", paymentRegistrations);
+
+            result.add(res);
+        }
+
+        return result;
+    }
+}

--
Gitblit v1.9.3