| | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.basic.mapper.SupplierManageMapper; |
| | | import com.ruoyi.basic.pojo.SupplierManage; |
| | |
| | | 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.mapper.*; |
| | | import com.ruoyi.purchase.pojo.PaymentRegistration; |
| | | import com.ruoyi.purchase.pojo.ProductRecord; |
| | | import com.ruoyi.purchase.pojo.PurchaseLedger; |
| | | import com.ruoyi.purchase.pojo.TicketRegistration; |
| | | 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 lombok.AllArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | |
| | | * @date 2025-05-15 |
| | | */ |
| | | @Service |
| | | @AllArgsConstructor |
| | | 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; |
| | | |
| | | private TicketRegistrationMapper ticketRegistrationMapper; |
| | | |
| | | private ProductRecordMapper productRecordMapper; |
| | | |
| | | /** |
| | | * 查询付款登记 |
| | |
| | | List<PaymentRegistrationDto> list = paymentRegistrationMapper.selectPaymentRegistrationList(paymentRegistrationDto); |
| | | for (PaymentRegistrationDto registrationDto : list) { |
| | | List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new QueryWrapper<PaymentRegistration>() |
| | | .eq("invoice_purchase_id", registrationDto.getInvoicePurchaseId())); |
| | | .eq("ticket_registration_id", registrationDto.getTicketRegistrationId())); |
| | | BigDecimal total = paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | registrationDto.setUnPaymentAmount(registrationDto.getInvoiceAmount().subtract(total)); |
| | | } |
| | |
| | | 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) { |
| | | TicketRegistration tr = ticketRegistrationMapper.selectOne(new LambdaQueryWrapper<TicketRegistration>().eq(TicketRegistration::getId, paymentRegistration.getTicketRegistrationId())); |
| | | |
| | | if (tr == null) { |
| | | 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())); |
| | | .eq("ticket_registration_id", tr.getId())); |
| | | BigDecimal total = paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | |
| | | if (total.add(paymentRegistration.getCurrentPaymentAmount()).compareTo(invoicePurchases.get(0).getInvoiceAmount()) > 0) { |
| | | if (total.add(paymentRegistration.getCurrentPaymentAmount()).compareTo(tr.getInvoiceAmount()) > 0) { |
| | | throw new RuntimeException("付款金额超出发票金额"); |
| | | } |
| | | |
| | | |
| | | LoginUser loginUser = SecurityUtils.getLoginUser(); |
| | | Integer tenantId = loginUser.getTenantId(); |
| | | paymentRegistration.setTenantId(tenantId.longValue()); |
| | | paymentRegistration.setRegistrantId(loginUser.getUserId()); |
| | | paymentRegistration.setCreateTime(DateUtils.getNowDate()); |
| | | paymentRegistration.setUpdateTime(DateUtils.getNowDate()); |
| | | return paymentRegistrationMapper.insert(paymentRegistration); |
| | |
| | | */ |
| | | @Override |
| | | public int updatePaymentRegistration(PaymentRegistration paymentRegistration) { |
| | | InvoicePurchase invoicePurchase = invoicePurchaseMapper.selectById(paymentRegistration.getInvoicePurchaseId()); |
| | | TicketRegistration ticketRegistration = ticketRegistrationMapper.selectById(paymentRegistration.getTicketRegistrationId()); |
| | | |
| | | List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new QueryWrapper<PaymentRegistration>() |
| | | .eq("invoice_purchase_id", paymentRegistration.getInvoicePurchaseId()).ne("id", paymentRegistration.getId())); |
| | | .eq("ticket_registration_id", paymentRegistration.getTicketRegistrationId()).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) { |
| | | if (total.add(paymentRegistration.getCurrentPaymentAmount()).compareTo(ticketRegistration.getInvoiceAmount()) > 0) { |
| | | throw new RuntimeException("付款金额超出发票金额"); |
| | | } |
| | | |
| | |
| | | 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()); |
| | | List<TicketRegistration> ticketRegistrations = ticketRegistrationMapper.selectList(new QueryWrapper<TicketRegistration>() |
| | | .eq("purchase_contract_number", purchaseLedger.getPurchaseContractNumber())); |
| | | if (ticketRegistrations != null && ticketRegistrations.size() > 0) { |
| | | paymentRegistrationDto.setInvoiceNumber(ticketRegistrations.get(0).getInvoiceNumber()); |
| | | paymentRegistrationDto.setInvoiceAmount(ticketRegistrations.get(0).getInvoiceAmount()); |
| | | } |
| | | return paymentRegistrationDto; |
| | | } |
| | |
| | | |
| | | // 应付金额 |
| | | BigDecimal payableAmount = BigDecimal.ZERO; |
| | | List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(new QueryWrapper<SalesLedger>().eq("customer_id", supplierManage.getId())); |
| | | if (salesLedgers != null && salesLedgers.size() > 0) { |
| | | List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(new QueryWrapper<PurchaseLedger>().eq("supplier_id", supplierManage.getId())); |
| | | if (purchaseLedgers != null && purchaseLedgers.size() > 0) { |
| | | List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new QueryWrapper<SalesLedgerProduct>() |
| | | .in("sales_ledger_id", salesLedgers.stream().map(SalesLedger::getId).collect(Collectors.toList()))); |
| | | .in("sales_ledger_id", purchaseLedgers.stream().map(PurchaseLedger::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); |
| | | BigDecimal invoiceAmount = BigDecimal.ZERO; |
| | | List<TicketRegistration> ticketRegistrations = Collections.emptyList(); |
| | | |
| | | // 增加空值检查,避免NullPointerException |
| | | if (CollectionUtils.isNotEmpty(purchaseLedgers)) { |
| | | Long[] ids = purchaseLedgers.stream() |
| | | .map(PurchaseLedger::getId) |
| | | .toArray(Long[]::new); |
| | | |
| | | // 检查数组是否有元素 |
| | | if (ids.length > 0) { |
| | | ticketRegistrations = ticketRegistrationMapper.selectList( |
| | | new LambdaQueryWrapper<TicketRegistration>() |
| | | .in(TicketRegistration::getPurchaseLedgerId, ids) |
| | | ); |
| | | } |
| | | } |
| | | if (ticketRegistrations != null && ticketRegistrations.size() > 0) { |
| | | // 来票金额 |
| | | invoiceAmount = ticketRegistrations.stream().map(TicketRegistration::getInvoiceAmount).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | } |
| | | // 付款金额 |
| | | List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new QueryWrapper<PaymentRegistration>() |
| | | .eq("supplier_id", supplierManage.getId())); |
| | |
| | | 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()); // 应付金额 |
| | | TicketRegistration ticketRegistration = ticketRegistrationMapper.selectById(paymentRegistration.getTicketRegistrationId()); |
| | | detail.put("payableAmount", ticketRegistration.getInvoiceAmount()); // 应付金额 |
| | | BigDecimal voteCount = productRecordMapper.selectList( |
| | | new LambdaQueryWrapper<ProductRecord>() |
| | | .eq(ProductRecord::getTicketRegistrationId, ticketRegistration.getId())) |
| | | .stream() |
| | | .map(ProductRecord::getTicketsNum) |
| | | .map(BigDecimal::new) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | detail.put("voteCount", voteCount); // 票数 |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | String formattedDate = sdf.format(paymentRegistration.getPaymentDate()); |
| | | detail.put("createTime", formattedDate); // 发生时间 |
| | | detail.put("paymentDate", formattedDate); // 发生时间 |
| | | details.add(detail); |
| | | } |
| | | |
| | | res.put("details", paymentRegistrations); |
| | | |
| | | res.put("details", details); |
| | | result.add(res); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | } |