From 8bf17a90f86e88a0bd67f7bbdde6ab7acd12f683 Mon Sep 17 00:00:00 2001 From: maven <2163098428@qq.com> Date: 星期三, 09 七月 2025 14:19:53 +0800 Subject: [PATCH] yys 修改导入导出bug --- src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java | 278 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 248 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java index 112e168..5184b0c 100644 --- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java +++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java @@ -4,12 +4,18 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.security.LoginUser; import com.ruoyi.procurementrecord.dto.*; import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper; -import com.ruoyi.procurementrecord.pojo.ProcurementRecord; +import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper; +import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; +import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; import com.ruoyi.procurementrecord.service.ProcurementRecordService; +import com.ruoyi.project.system.domain.SysUser; +import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.RequiredArgsConstructor; @@ -17,8 +23,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.List; import java.util.stream.Collectors; @@ -29,9 +37,11 @@ @Service @RequiredArgsConstructor @Slf4j -public class ProcurementRecordServiceImpl extends ServiceImpl<ProcurementRecordMapper, ProcurementRecord> implements ProcurementRecordService { +public class ProcurementRecordServiceImpl extends ServiceImpl<ProcurementRecordMapper, ProcurementRecordStorage> implements ProcurementRecordService { private final ProcurementRecordMapper procurementRecordMapper; + + private final ProcurementRecordOutMapper procurementRecordOutMapper; private final SalesLedgerProductMapper salesLedgerProductMapper; @@ -44,26 +54,27 @@ if(CollectionUtils.isEmpty( collect)){ return procurementDtos; } - LambdaQueryWrapper<ProcurementRecord> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); - procurementRecordLambdaQueryWrapper.in(ProcurementRecord::getSalesLedgerProductId, collect); - List<ProcurementRecord> procurementRecords = procurementRecordMapper.selectList(procurementRecordLambdaQueryWrapper); - if(CollectionUtils.isEmpty( procurementRecords)){ + LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); + procurementRecordLambdaQueryWrapper.in(ProcurementRecordStorage::getSalesLedgerProductId, collect); + List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordMapper.selectList(procurementRecordLambdaQueryWrapper); + if(CollectionUtils.isEmpty(procurementRecordStorages)){ return procurementDtos; } for (ProcurementDto dto : procurementDtos) { // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍏ュ簱璁板綍 - List<ProcurementRecord> collect1 = procurementRecords.stream() - .filter(procurementRecord -> procurementRecord.getSalesLedgerProductId().equals(dto.getId())) + List<ProcurementRecordStorage> collect1 = procurementRecordStorages.stream() + .filter(procurementRecordStorage -> procurementRecordStorage.getSalesLedgerProductId().equals(dto.getId())) .collect(Collectors.toList()); // 濡傛灉娌℃湁鐩稿叧鐨勫叆搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁 if(CollectionUtils.isEmpty(collect1)){ + dto.setQuantity0(dto.getQuantity()); continue; } // 璁$畻宸插叆搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭叆搴撴暟閲� BigDecimal totalInboundNum = collect1.stream() - .map(ProcurementRecord::getInboundNum) + .map(ProcurementRecordStorage::getInboundNum) .reduce(BigDecimal.ZERO, BigDecimal::add); // 寰呭叆搴撴暟閲� = 鎬绘暟閲� - 宸插叆搴撴暟閲� @@ -72,14 +83,147 @@ return procurementDtos; } - @Override - public int updatePro(ProcurementUpdateDto procurementDto) { - ProcurementRecord procurementRecord = procurementRecordMapper.selectById(procurementDto.getId()); - if(procurementRecord == null) { + public ProcurementRecordStorage getProcurementRecordById(Integer id){ + ProcurementRecordStorage procurementRecordStorage = procurementRecordMapper.selectById(id); + if(procurementRecordStorage == null) { throw new RuntimeException("鏈壘鍒拌閲囪喘鍏ュ簱璁板綍"); } - procurementRecord.setInboundNum(procurementDto.getQuantityStock()); - return procurementRecordMapper.updateById(procurementRecord); + return procurementRecordStorage; + } + + public List<ProcurementRecordStorage> getProcurementRecordByIds(List<Integer> id){ + List<ProcurementRecordStorage> procurementRecordStorage = procurementRecordMapper.selectBatchIds(id); + if(procurementRecordStorage == null) { + throw new RuntimeException("鏈壘鍒拌閲囪喘鍏ュ簱璁板綍"); + } + return procurementRecordStorage; + } + + @Override + public int updatePro(ProcurementUpdateDto procurementDto) { + ProcurementRecordStorage procurementRecordStorageById = getProcurementRecordById(procurementDto.getId()); + procurementRecordStorageById.setInboundNum(procurementDto.getQuantityStock()); + procurementRecordStorageById.setUpdateUser(SecurityUtils.getLoginUser().getUserId()); + procurementRecordStorageById.setUpdateTime(LocalDateTime.now()); + return procurementRecordMapper.updateById(procurementRecordStorageById); + } + + @Override + public int deletePro(ProcurementUpdateDto procurementDto) { + List<ProcurementRecordStorage> procurementRecordStorageById = getProcurementRecordByIds(procurementDto.getIds()); + procurementRecordMapper.deleteBatchIds(procurementRecordStorageById.stream().map(ProcurementRecordStorage::getId).collect(Collectors.toList())); + // 鍒犻櫎鎵�鏈夊搴旂殑鍑哄簱璁板綍 + LambdaQueryWrapper<ProcurementRecordOut> procurementRecordOutLambdaQueryWrapper = new LambdaQueryWrapper<>(); + procurementRecordOutLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, procurementDto.getIds()); + List<ProcurementRecordOut> procurementRecordOuts = procurementRecordOutMapper.selectList(procurementRecordOutLambdaQueryWrapper); + if(!CollectionUtils.isEmpty(procurementRecordOuts)){ + procurementRecordOutMapper.deleteBatchIds(procurementRecordOuts.stream().map(ProcurementRecordOut::getId).collect(Collectors.toList())); + } + return 0; + } + + @Override + public void export(HttpServletResponse response) { + List<ProcurementPageDto> list =procurementRecordMapper.list(); + // 璁$畻寰呭叆搴撴暟閲� + // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲� + List<Integer> collect = list.stream().map(ProcurementPageDto::getId).collect(Collectors.toList()); + if(CollectionUtils.isEmpty( collect)){ + return; + } + LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); + procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect); + List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper); + if(CollectionUtils.isEmpty( procurementRecords)){ + return; + } + for (ProcurementPageDto dto : list) { + // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍 + List<ProcurementRecordOut> collect1 = procurementRecords.stream() + .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId())) + .collect(Collectors.toList()); + + // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁 + if(CollectionUtils.isEmpty(collect1)){ + dto.setInboundNum0(dto.getInboundNum()); + continue; + } + + // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲� + BigDecimal totalInboundNum = collect1.stream() + .map(ProcurementRecordOut::getInboundNum) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲� + dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum)); + } + ExcelUtil<ProcurementPageDto> util = new ExcelUtil<ProcurementPageDto>(ProcurementPageDto.class); + util.exportExcel(response, list, "鍏ュ簱鍙拌处"); + } + + private final SysUserMapper sysUserMapper; + + @Override + public int updateManagement(ProcurementManagementUpdateDto procurementDto) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + SysUser sysUser = sysUserMapper.selectUserById(procurementDto.getCreateUser()); + if(sysUser == null){ + throw new RuntimeException("鍏ュ簱浜轰笉瀛樺湪"); + } + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String entryDateStr = procurementDto.getEntryDate() + " 00:00:00"; + String createTimeStr = procurementDto.getCreateTime() + " 00:00:00"; + ProcurementRecordStorage procurementRecordStorageById = getProcurementRecordById(procurementDto.getId()); + procurementRecordStorageById.setCreateBy(sysUser.getNickName()); + procurementRecordStorageById.setCreateUser(sysUser.getUserId()); + procurementRecordStorageById.setUpdateTime(LocalDateTime.parse(entryDateStr,df)); + procurementRecordStorageById.setUpdateUser(loginUser.getUserId()); + procurementRecordStorageById.setCreateTime(LocalDateTime.parse(createTimeStr,df)); + procurementRecordMapper.updateById(procurementRecordStorageById); + return 0; + } + + @Override + public void exportCopy(HttpServletResponse response) { + List<ProcurementPageDtoCopy> list =procurementRecordMapper.listCopy(); + // 璁$畻寰呭叆搴撴暟閲� + // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲� + List<Integer> collect = list.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList()); + if(CollectionUtils.isEmpty( collect)){ + ExcelUtil<ProcurementPageDtoCopy> util = new ExcelUtil<ProcurementPageDtoCopy>(ProcurementPageDtoCopy.class); + util.exportExcel(response, list, "搴撳瓨绠$悊"); + return; + } + LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); + procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect); + List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper); + if(CollectionUtils.isEmpty( procurementRecords)){ + ExcelUtil<ProcurementPageDtoCopy> util = new ExcelUtil<ProcurementPageDtoCopy>(ProcurementPageDtoCopy.class); + util.exportExcel(response, list, "搴撳瓨绠$悊"); + return; + } + for (ProcurementPageDtoCopy dto : list) { + // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍 + List<ProcurementRecordOut> collect1 = procurementRecords.stream() + .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId())) + .collect(Collectors.toList()); + + // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁 + if(CollectionUtils.isEmpty(collect1)){ + dto.setInboundNum0(dto.getInboundNum()); + continue; + } + + // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲� + BigDecimal totalInboundNum = collect1.stream() + .map(ProcurementRecordOut::getInboundNum) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲� + dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum)); + } + ExcelUtil<ProcurementPageDtoCopy> util = new ExcelUtil<ProcurementPageDtoCopy>(ProcurementPageDtoCopy.class); + util.exportExcel(response, list, "搴撳瓨绠$悊"); } @Override @@ -88,36 +232,110 @@ // 鎵归噺鏂板 for (Details detail : procurementDto.getDetails()) { // 鏌ヨ閲囪喘鍏ュ簱鏁伴噺 - LambdaQueryWrapper<ProcurementRecord> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); - procurementRecordLambdaQueryWrapper.eq(ProcurementRecord::getSalesLedgerProductId, detail.getId()) - .eq(ProcurementRecord::getProcurementCategory, 1); + LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); + procurementRecordLambdaQueryWrapper.eq(ProcurementRecordStorage::getSalesLedgerProductId, detail.getId()); Long aLong = procurementRecordMapper.selectCount(procurementRecordLambdaQueryWrapper); - ProcurementRecord.ProcurementRecordBuilder procurementRecordBuilder = ProcurementRecord.builder() + ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder() .salesLedgerProductId(detail.getId()) - .procurementCategory(1) .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�"+ (aLong + 1) + "鎵规") .inboundNum(detail.getInboundQuantity()) - .createDate(LocalDateTime.now()) + .createTime(LocalDateTime.now()) + .createUser(loginUser.getUserId()) + .updateTime(LocalDateTime.now()) + .updateUser(loginUser.getUserId()) .tenantId(loginUser.getTenantId()) .createBy(procurementDto.getNickName()); this.save(procurementRecordBuilder.build()); // 鍏ュ簱鎴愬姛鍑忔帀閲囪喘鏁伴噺 - LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>(); - salesLedgerProductLambdaQueryWrapper.eq(SalesLedgerProduct::getId, detail.getId()); - SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectOne(salesLedgerProductLambdaQueryWrapper); - if(salesLedgerProduct == null){ - throw new RuntimeException("鏈壘鍒拌鍟嗗搧"); - } - salesLedgerProduct.setQuantity(salesLedgerProduct.getQuantity().subtract(detail.getInboundQuantity())); - salesLedgerProductMapper.updateById(salesLedgerProduct); +// LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>(); +// salesLedgerProductLambdaQueryWrapper.eq(SalesLedgerProduct::getId, detail.getId()); +// SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectOne(salesLedgerProductLambdaQueryWrapper); +// if(salesLedgerProduct == null){ +// throw new RuntimeException("鏈壘鍒拌鍟嗗搧"); +// } +// salesLedgerProduct.setQuantity(salesLedgerProduct.getQuantity().subtract(detail.getInboundQuantity())); +// salesLedgerProductMapper.updateById(salesLedgerProduct); } return 1; } @Override public IPage<ProcurementPageDto> listPage(Page page, ProcurementPageDto procurementDto) { - return procurementRecordMapper.listPage(page,procurementDto); + IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPage(page, procurementDto); + List<ProcurementPageDto> procurementPageDtos = procurementPageDtoIPage.getRecords(); + // 璁$畻寰呭叆搴撴暟閲� + // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲� + List<Integer> collect = procurementPageDtos.stream().map(ProcurementPageDto::getId).collect(Collectors.toList()); + if(CollectionUtils.isEmpty( collect)){ + return procurementPageDtoIPage; + } + LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); + procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect); + List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper); + if(CollectionUtils.isEmpty( procurementRecords)){ + return procurementPageDtoIPage; + } + for (ProcurementPageDto dto : procurementPageDtos) { + // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍 + List<ProcurementRecordOut> collect1 = procurementRecords.stream() + .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId())) + .collect(Collectors.toList()); + + // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁 + if(CollectionUtils.isEmpty(collect1)){ + dto.setInboundNum0(dto.getInboundNum()); + continue; + } + + // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲� + BigDecimal totalInboundNum = collect1.stream() + .map(ProcurementRecordOut::getInboundNum) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲� + dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum)); + } + return procurementPageDtoIPage; + } + + @Override + public IPage<ProcurementPageDtoCopy> listPageCopy(Page page, ProcurementPageDto procurementDto) { + IPage<ProcurementPageDtoCopy> procurementPageDtoCopyIPage = procurementRecordMapper.listPageCopy(page, procurementDto); + List<ProcurementPageDtoCopy> procurementPageDtoCopyList = procurementPageDtoCopyIPage.getRecords(); + // 璁$畻寰呭叆搴撴暟閲� + // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲� + List<Integer> collect = procurementPageDtoCopyList.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList()); + if(CollectionUtils.isEmpty( collect)){ + return procurementPageDtoCopyIPage; + } + LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); + procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect); + List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper); + if(CollectionUtils.isEmpty( procurementRecords)){ + return procurementPageDtoCopyIPage; + } + for (ProcurementPageDtoCopy dto : procurementPageDtoCopyList) { + // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍 + List<ProcurementRecordOut> collect1 = procurementRecords.stream() + .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId())) + .collect(Collectors.toList()); + + // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁 + if(CollectionUtils.isEmpty(collect1)){ + dto.setInboundNum0(dto.getInboundNum()); + continue; + } + + // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲� + BigDecimal totalInboundNum = collect1.stream() + .map(ProcurementRecordOut::getInboundNum) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲� + dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum)); + } + return procurementPageDtoCopyIPage; } } -- Gitblit v1.9.3