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/sales/service/impl/SalesLedgerProductServiceImpl.java | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 158 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java index 793722e..f2cac8e 100644 --- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java +++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java @@ -1,15 +1,30 @@ package com.ruoyi.sales.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; +import com.ruoyi.purchase.pojo.PurchaseLedger; +import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; +import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper; +import com.ruoyi.sales.mapper.SalesLedgerMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; +import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; +import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.service.ISalesLedgerProductService; +import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; -import java.util.Arrays; -import java.util.List; +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 浜у搧淇℃伅Service涓氬姟灞傚鐞� @@ -18,9 +33,17 @@ * @date 2025-05-08 */ @Service +@AllArgsConstructor public class SalesLedgerProductServiceImpl extends ServiceImpl<SalesLedgerProductMapper, SalesLedgerProduct> implements ISalesLedgerProductService { - @Autowired + private SalesLedgerProductMapper salesLedgerProductMapper; + + private SalesLedgerMapper salesLedgerMapper; + + private PurchaseLedgerMapper purchaseLedgerMapper; + + @Autowired + private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; @Override public SalesLedgerProduct selectSalesLedgerProductById(Long id) { @@ -30,21 +53,146 @@ @Override public List<SalesLedgerProduct> selectSalesLedgerProductList(SalesLedgerProduct salesLedgerProduct) { LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId,salesLedgerProduct.getSalesLedgerId()); - return salesLedgerProductMapper.selectList(queryWrapper); + queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId()) + .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType()); + List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(queryWrapper); + if(!CollectionUtils.isEmpty(salesLedgerProducts)){ + InvoiceRegistrationProductDto invoiceRegistrationProductDto = new InvoiceRegistrationProductDto(); + invoiceRegistrationProductDto.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId().intValue()); + List<InvoiceRegistrationProductDto> invoiceRegistrationProductDtoList = invoiceRegistrationProductMapper.invoiceRegistrationProductList(invoiceRegistrationProductDto); + // 缁熻寮�绁ㄧ櫥璁颁骇鍝佺殑宸插紑绁ㄦ暟/宸插紑绁ㄩ噾棰� + if(!CollectionUtils.isEmpty(invoiceRegistrationProductDtoList)){ + for (SalesLedgerProduct ledgerProduct : salesLedgerProducts) { + BigDecimal invoiceNum = BigDecimal.ZERO; + BigDecimal invoiceAmount = BigDecimal.ZERO; + for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) { + if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){ + invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum()); + invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount()); + } + } + ledgerProduct.setInvoiceNum(invoiceNum); + ledgerProduct.setInvoiceAmount(invoiceAmount); + } + } + + } + return salesLedgerProducts; } @Override + @Transactional(rollbackFor = Exception.class) public int deleteSalesLedgerProductByIds(Long[] ids) { - return salesLedgerProductMapper.deleteBatchIds(Arrays.asList(ids)); + if (ids == null || ids.length == 0) { + return 0; + } + + // 1. 鍏堟煡璇㈣鍒犻櫎鐨勫瓙琛ㄨ褰曪紝鑾峰彇瀵瑰簲鐨� salesLedgerId + List<SalesLedgerProduct> deletedProducts = salesLedgerProductMapper.selectBatchIds(Arrays.asList(ids)); + if (deletedProducts.isEmpty()) { + return 0; // 娌℃湁鍙垹闄ょ殑鏁版嵁 + } + + // 鍙兘灞炰簬澶氫釜涓昏〃锛堜絾閫氬父涓�涓帴鍙e彧澶勭悊涓�涓富琛級 + Set<Long> mainIds = deletedProducts.stream() + .map(SalesLedgerProduct::getSalesLedgerId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + // 2. 鎵ц鍒犻櫎鎿嶄綔 + int result = salesLedgerProductMapper.deleteBatchIds(Arrays.asList(ids)); + + // 3. 瀵规瘡涓富琛↖D杩涜閲戦鏇存柊 + for (Long salesLedgerId : mainIds) { + LambdaQueryWrapper<SalesLedgerProduct> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerId); + List<SalesLedgerProduct> remainingProducts = salesLedgerProductMapper.selectList(wrapper); + + // 璋冪敤閫氱敤鏂规硶鏇存柊涓昏〃閲戦 + updateMainContractAmount( + salesLedgerId, + remainingProducts, + SalesLedgerProduct::getTaxInclusiveTotalPrice, + salesLedgerMapper, + SalesLedger.class + ); + } + return result; } @Override + @Transactional(rollbackFor = Exception.class) public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) { - if (salesLedgerProduct.getId() == null){ - return salesLedgerProductMapper.insert(salesLedgerProduct); - }else { - return salesLedgerProductMapper.updateById(salesLedgerProduct); + int result; + Long salesLedgerId = salesLedgerProduct.getSalesLedgerId(); + if (salesLedgerProduct.getId() == null) { + result = salesLedgerProductMapper.insert(salesLedgerProduct); + } else { + result = salesLedgerProductMapper.updateById(salesLedgerProduct); + } + + // 濡傛灉鎻掑叆鎴栨洿鏂版垚鍔燂紝骞朵笖鏈� salesLedgerId锛屾墠缁х画鏇存柊涓昏〃閲戦 + if (result > 0 && salesLedgerId != null) { + // 鏌ヨ璇ヤ富琛ㄤ笅鐨勬墍鏈夊瓙琛ㄦ暟鎹� + LambdaQueryWrapper<SalesLedgerProduct> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerId) + .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType()); + List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(wrapper); + if (salesLedgerProduct.getType() == 1) { + // 璋冪敤閫氱敤鏂规硶鏇存柊涓昏〃閲戦 + updateMainContractAmount( + salesLedgerId, + productList, + SalesLedgerProduct::getTaxInclusiveTotalPrice, + salesLedgerMapper, + SalesLedger.class + ); + } else { + // 璋冪敤閫氱敤鏂规硶鏇存柊涓昏〃閲戦 + updateMainContractAmount( + salesLedgerId, + productList, + SalesLedgerProduct::getTaxInclusiveTotalPrice, + purchaseLedgerMapper, + PurchaseLedger.class + ); + } + } + return result; + } + + /** + * 閫氱敤鏂规硶锛氭牴鎹富琛↖D鍜屽瓙琛ㄥ垪琛紝鏇存柊涓昏〃鐨勫悎鍚岄噾棰� + */ + public <T, S> void updateMainContractAmount( + Long mainId, + List<T> subList, + Function<T, BigDecimal> amountGetter, + BaseMapper<S> mainMapper, + Class<S> mainEntityClass) { + + if (mainId == null || subList == null || subList.isEmpty()) { + return; + } + + BigDecimal totalAmount = subList.stream() + .map(amountGetter) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + try { + S entity = mainEntityClass.getDeclaredConstructor().newInstance(); + Field idField = mainEntityClass.getDeclaredField("id"); + idField.setAccessible(true); + idField.set(entity, mainId); + + Field amountField = mainEntityClass.getDeclaredField("contractAmount"); + amountField.setAccessible(true); + amountField.set(entity, totalAmount); + + mainMapper.updateById(entity); + } catch (Exception e) { + throw new RuntimeException("鍔ㄦ�佹洿鏂颁富琛ㄩ噾棰濆け璐�", e); } } } -- Gitblit v1.9.3