From ab01a0f611c0adb97662bc8f548ca4a911ec8045 Mon Sep 17 00:00:00 2001 From: chenrui <1187576398@qq.com> Date: 星期五, 06 六月 2025 17:37:39 +0800 Subject: [PATCH] 分页修改 --- src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java | 175 +++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 160 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java index ef4d278..a1272c3 100644 --- a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java +++ b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java @@ -1,16 +1,23 @@ package com.ruoyi.purchase.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.exception.base.BaseException; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.other.mapper.TempFileMapper; import com.ruoyi.other.pojo.TempFile; +import com.ruoyi.purchase.dto.PaymentRegistrationDto; import com.ruoyi.purchase.dto.TicketRegistrationDto; +import com.ruoyi.purchase.mapper.PaymentRegistrationMapper; +import com.ruoyi.purchase.mapper.ProductRecordMapper; import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; import com.ruoyi.purchase.mapper.TicketRegistrationMapper; +import com.ruoyi.purchase.pojo.ProductRecord; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.purchase.pojo.TicketRegistration; import com.ruoyi.purchase.service.ITicketRegistrationService; @@ -21,8 +28,10 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.math.BigDecimal; @@ -35,6 +44,7 @@ import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; @@ -59,6 +69,11 @@ private final TempFileMapper tempFileMapper; + private final ProductRecordMapper productRecordMapper; + + @Autowired + private PaymentRegistrationMapper paymentRegistrationMapper; + @Value("${file.upload-dir}") private String uploadDir; @@ -67,38 +82,79 @@ public List<TicketRegistration> selectTicketRegistrationList(TicketRegistration ticketRegistration) { LambdaQueryWrapper<TicketRegistration> queryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.isNotBlank(ticketRegistration.getPurchaseContractNumber())) { - queryWrapper.like(TicketRegistration::getPurchaseContractNumber, ticketRegistration.getPurchaseContractNumber()); + queryWrapper.like(TicketRegistration::getPurchaseContractNumber, ticketRegistration.getPurchaseContractNumber()) + .like(TicketRegistration::getSupplierName, ticketRegistration.getSupplierName()) + .eq(TicketRegistration::getIssueDate, ticketRegistration.getIssueDate()); } - return ticketRegistrationMapper.selectList(queryWrapper); + List<TicketRegistration> ticketRegistrationList = ticketRegistrationMapper.selectList(queryWrapper); + // 璁$畻宸蹭粯娆鹃噾棰� + if(CollectionUtils.isNotEmpty(ticketRegistrationList)){ + List<Long> ids = ticketRegistrationList.stream().map(TicketRegistration::getId).collect(Collectors.toList()); + List<PaymentRegistrationDto> paymentRegistrationDtoList = paymentRegistrationMapper.countPaymentTotalByTicketRegId(ids); + for (TicketRegistration registration : ticketRegistrationList) { + BigDecimal paymentAmountTotal = BigDecimal.ZERO; + for (PaymentRegistrationDto paymentRegistrationDto : paymentRegistrationDtoList) { + if(registration.getId().equals(paymentRegistrationDto.getTicketRegistrationId())){ + paymentAmountTotal = paymentRegistrationDto.getPaymentAmountTotal(); + break; + } + } + BigDecimal invoiceAmount = registration.getInvoiceAmount(); + BigDecimal subtractAmount = invoiceAmount.subtract(paymentAmountTotal); + registration.setPaymentAmountTotal(paymentAmountTotal); + registration.setUnPaymentAmountTotal(subtractAmount); + } + } + + return ticketRegistrationList; } @Override + @Transactional(rollbackFor = Exception.class) public int addOrUpdateRegistration(TicketRegistrationDto ticketRegistrationDto) throws IOException { + // 1. 鏌ヨ閲囪喘鍙拌处璁板綍 PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(ticketRegistrationDto.getPurchaseLedgerId()); + if (purchaseLedger == null) { + // 澶勭悊閲囪喘鍙拌处涓嶅瓨鍦ㄧ殑鎯呭喌锛屼緥濡傛姏鍑哄紓甯告垨杩斿洖閿欒 + throw new IllegalArgumentException("閲囪喘鍙拌处璁板綍涓嶅瓨鍦紝ID: " + ticketRegistrationDto.getPurchaseLedgerId()); + } + + // 3. 鍒涘缓鎴栨洿鏂扮エ鎹櫥璁板疄浣� TicketRegistration ticketRegistration = new TicketRegistration(); BeanUtils.copyProperties(ticketRegistrationDto, ticketRegistration); ticketRegistration.setPurchaseContractNumber(purchaseLedger.getPurchaseContractNumber()); ticketRegistration.setTenantId(purchaseLedger.getTenantId()); ticketRegistration.setContractAmount(purchaseLedger.getContractAmount()); - // 澶勭悊瀛愯〃鏁版嵁 + ticketRegistration.setSalesLedgerId(purchaseLedger.getSalesLedgerId()); + + // 4. 澶勭悊瀛愯〃鏁版嵁 List<SalesLedgerProduct> productData = ticketRegistrationDto.getProductData(); - if (productData != null && !productData.isEmpty()) { + if (CollectionUtils.isNotEmpty(productData)) { handleSalesLedgerProducts(purchaseLedger.getId(), productData, 2); } - // 鎵ц鎻掑叆鎴栨洿鏂版搷浣� - int i; - if (ticketRegistrationDto.getId() == null) { - i = ticketRegistrationMapper.insert(ticketRegistration); - } else { - i = ticketRegistrationMapper.updateById(ticketRegistration); - } + // 5. 鎵ц鎻掑叆鎴栨洿鏂版搷浣� + int rowsAffected = ticketRegistrationMapper.insert(ticketRegistration); + // 6. 澧炲姞閲囪喘鍙拌处浜у搧寮�绁ㄨ褰� + List<SalesLedgerProduct> salesLedgerProducts = ticketRegistrationDto.getProductData(); + if (CollectionUtils.isNotEmpty(salesLedgerProducts)){ + for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) { + ProductRecord productRecord = new ProductRecord(); + productRecord.setTicketRegistrationId(ticketRegistration.getId()); + productRecord.setPurchaseLedgerId(ticketRegistrationDto.getPurchaseLedgerId()); + productRecord.setCreatedAt(DateUtils.getNowDate()); + BeanUtils.copyProperties(salesLedgerProduct,productRecord); + productRecord.setId(null); + productRecord.setType("2"); + productRecordMapper.insert(productRecord); + } + } // 杩佺Щ涓存椂鏂囦欢鍒版寮忕洰褰� if (ticketRegistrationDto.getTempFileIds() != null && !ticketRegistrationDto.getTempFileIds().isEmpty()) { migrateTempFilesToFormal(ticketRegistration.getId(), ticketRegistrationDto.getTempFileIds()); } - return i; + return rowsAffected; } @@ -195,8 +251,52 @@ .eq(SalesLedgerProduct::getType, 2); List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(queryWrapper); resultDto.setProductData(productList); - return resultDto; + } + + @Override + public List getTicketNo(TicketRegistrationDto ticketRegistrationDto) { + LambdaQueryWrapper<TicketRegistration> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(TicketRegistration::getId,TicketRegistration::getInvoiceNumber,TicketRegistration::getInvoiceAmount) + .eq(TicketRegistration::getPurchaseLedgerId,ticketRegistrationDto.getId()); + List<Map<String, Object>> result = ticketRegistrationMapper.selectMaps(queryWrapper); + // 灏嗕笅鍒掔嚎鍛藉悕杞崲涓洪┘宄板懡鍚� + return result.stream().map(map -> map.entrySet().stream() + .collect(Collectors.toMap( + entry -> underlineToCamel(entry.getKey()), + Map.Entry::getValue)) + ).collect(Collectors.toList()); + } + + @Override + public IPage<TicketRegistration> selectTicketRegistrationListPage(Page page, TicketRegistration ticketRegistration) { + LambdaQueryWrapper<TicketRegistration> queryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotBlank(ticketRegistration.getPurchaseContractNumber())) { + queryWrapper.like(TicketRegistration::getPurchaseContractNumber, ticketRegistration.getPurchaseContractNumber()) + .like(TicketRegistration::getSupplierName, ticketRegistration.getSupplierName()) + .eq(TicketRegistration::getIssueDate, ticketRegistration.getIssueDate()); + } + IPage<TicketRegistration> ticketRegistrationIPage = ticketRegistrationMapper.selectPage(page, queryWrapper); + // 璁$畻宸蹭粯娆鹃噾棰� + if(CollectionUtils.isNotEmpty(ticketRegistrationIPage.getRecords())){ + List<Long> ids = ticketRegistrationIPage.getRecords().stream().map(TicketRegistration::getId).collect(Collectors.toList()); + List<PaymentRegistrationDto> paymentRegistrationDtoList = paymentRegistrationMapper.countPaymentTotalByTicketRegId(ids); + for (TicketRegistration registration : ticketRegistrationIPage.getRecords()) { + BigDecimal paymentAmountTotal = BigDecimal.ZERO; + for (PaymentRegistrationDto paymentRegistrationDto : paymentRegistrationDtoList) { + if(registration.getId().equals(paymentRegistrationDto.getTicketRegistrationId())){ + paymentAmountTotal = paymentRegistrationDto.getPaymentAmountTotal(); + break; + } + } + BigDecimal invoiceAmount = registration.getInvoiceAmount(); + BigDecimal subtractAmount = invoiceAmount.subtract(paymentAmountTotal); + registration.setPaymentAmountTotal(paymentAmountTotal); + registration.setUnPaymentAmountTotal(subtractAmount); + } + } + + return ticketRegistrationIPage; } private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, Integer type) { @@ -216,11 +316,56 @@ // 鎵归噺鏇存柊锛堥渶瑕� MyBatis 鎻愪緵鎵归噺鏇存柊鏂规硶锛� if (!updateList.isEmpty()) { updateList.forEach(product -> { - product.setFutureTickets(product.getQuantity().subtract(new BigDecimal(product.getTicketsNum())).longValue()); - product.setFutureTicketsAmount(product.getTaxExclusiveTotalPrice().subtract(product.getTicketsAmount())); + // 闈炵┖鏍¢獙锛屼换涓�瀛楁涓虹┖鍒欐姏鍑哄紓甯� + if (product.getQuantity() == null) { + throw new BaseException("鏁伴噺涓嶈兘涓虹┖"); + } + if (product.getTicketsNum() == null) { + throw new BaseException("宸插紑绁ㄦ暟閲忎笉鑳戒负绌�"); + } + if (product.getTaxInclusiveTotalPrice() == null) { + throw new BaseException("鍚◣鎬讳环涓嶈兘涓虹┖"); + } + if (product.getTicketsAmount() == null) { + throw new BaseException("鏈鏉ョエ閲戦(鍏�)涓嶈兘涓虹┖"); + } + + // 璁$畻 futureTickets锛堢洿鎺ヤ娇鐢� BigDecimal 璁$畻锛岄伩鍏嶇簿搴︿涪澶憋級 + product.setFutureTickets( + product.getQuantity() + .subtract(product.getTicketsNum()) + ); + + // 璁$畻 futureTicketsAmount + product.setFutureTicketsAmount( + product.getTaxInclusiveTotalPrice() + .subtract(product.getTicketsAmount()) + ); product.setType(type); salesLedgerProductMapper.updateById(product); }); } } + + /** + * 涓嬪垝绾垮懡鍚嶈浆椹煎嘲鍛藉悕 + */ + private String underlineToCamel(String param) { + if (param == null || "".equals(param.trim())) { + return ""; + } + int len = param.length(); + StringBuilder sb = new StringBuilder(len); + for (int i = 0; i < len; i++) { + char c = param.charAt(i); + if (c == '_') { + if (++i < len) { + sb.append(Character.toUpperCase(param.charAt(i))); + } + } else { + sb.append(Character.toLowerCase(c)); + } + } + return sb.toString(); + } } -- Gitblit v1.9.3