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