From 05ae94ea868f4bc85984b0e6d38512c163dc3c33 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期一, 26 一月 2026 17:25:09 +0800
Subject: [PATCH] yys 采购台账模板导入,模板下载接口
---
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 414 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 379 insertions(+), 35 deletions(-)
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index c2bef5b..e500744 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -1,31 +1,53 @@
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.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.account.pojo.AccountExpense;
+import com.ruoyi.account.pojo.AccountIncome;
+import com.ruoyi.account.service.AccountExpenseService;
+import com.ruoyi.account.service.AccountIncomeService;
+import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
+import com.ruoyi.approve.vo.ApproveProcessVO;
import com.ruoyi.basic.mapper.ProductMapper;
import com.ruoyi.basic.mapper.ProductModelMapper;
import com.ruoyi.basic.mapper.SupplierManageMapper;
+import com.ruoyi.basic.pojo.Customer;
import com.ruoyi.basic.pojo.Product;
import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.basic.pojo.SupplierManage;
+import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.security.LoginUser;
+import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.other.mapper.TempFileMapper;
import com.ruoyi.other.pojo.TempFile;
+import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.purchase.dto.PurchaseLedgerDto;
-import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
-import com.ruoyi.purchase.mapper.TicketRegistrationMapper;
-import com.ruoyi.purchase.pojo.PurchaseLedger;
-import com.ruoyi.purchase.pojo.TicketRegistration;
+import com.ruoyi.purchase.dto.PurchaseLedgerImportDto;
+import com.ruoyi.purchase.dto.PurchaseLedgerProductImportDto;
+import com.ruoyi.purchase.mapper.*;
+import com.ruoyi.purchase.pojo.*;
import com.ruoyi.purchase.service.IPurchaseLedgerService;
-import com.ruoyi.sales.mapper.CommonFileMapper;
-import com.ruoyi.sales.mapper.SalesLedgerMapper;
-import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.quality.mapper.*;
+import com.ruoyi.quality.pojo.*;
+import com.ruoyi.sales.dto.SalesLedgerImportDto;
+import com.ruoyi.sales.dto.SalesLedgerProductImportDto;
+import com.ruoyi.sales.mapper.*;
import com.ruoyi.sales.pojo.CommonFile;
+import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import lombok.RequiredArgsConstructor;
@@ -33,18 +55,25 @@
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
+import java.io.InputStream;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -57,7 +86,7 @@
@RequiredArgsConstructor
@Slf4j
public class PurchaseLedgerServiceImpl extends ServiceImpl<PurchaseLedgerMapper, PurchaseLedger> implements IPurchaseLedgerService {
-
+ private final AccountExpenseService accountExpenseService;
private final PurchaseLedgerMapper purchaseLedgerMapper;
private final SalesLedgerMapper salesLedgerMapper;
@@ -75,8 +104,30 @@
private final ProductModelMapper productModelMapper;
+ private final SysUserMapper sysUserMapper;
+
private final TicketRegistrationMapper ticketRegistrationMapper;
+ private final ProductRecordMapper productRecordMapper;
+
+ private final PaymentRegistrationMapper paymentRegistrationMapper;
+
+ private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
+
+ private final StringRedisTemplate redisTemplate;
+ private final QualityInspectMapper qualityInspectMapper;
+ private final QualityTestStandardBindingMapper qualityTestStandardBindingMapper;
+ private final QualityTestStandardParamMapper qualityTestStandardParamMapper;
+ private final QualityTestStandardMapper qualityTestStandardMapper;
+ private final QualityInspectParamMapper qualityInspectParamMapper;
+
+ private final ApproveProcessServiceImpl approveProcessService;
+
+ private final ProcurementRecordMapper procurementRecordStorageMapper;
+
+ private final PurchaseLedgerTemplateMapper purchaseLedgerTemplateMapper;
+
+ private final SalesLedgerProductTemplateMapper salesLedgerProductTemplateMapper;
@Value("${file.upload-dir}")
private String uploadDir;
@@ -90,13 +141,10 @@
}
@Override
- public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws IOException {
+ @Transactional(rollbackFor = Exception.class)
+ public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception {
SalesLedger salesLedger = salesLedgerMapper.selectById(purchaseLedgerDto.getSalesLedgerId());
-
- if (salesLedger == null) {
- throw new BaseException("閿�鍞彴璐︿笉瀛樺湪");
- }
//褰曞叆浜�
SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId());
@@ -105,32 +153,81 @@
// DTO杞珽ntity
PurchaseLedger purchaseLedger = new PurchaseLedger();
BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedger);
- purchaseLedger.setTenantId(salesLedger.getTenantId());
- purchaseLedger.setSalesContractNo(salesLedger.getSalesContractNo());
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) {
+ purchaseLedger.setTenantId(loginUser.getTenantId());
+ }
+ purchaseLedger.setSalesContractNo(ObjectUtils.isNotEmpty(salesLedger) ? salesLedger.getSalesContractNo() : "");
+ purchaseLedger.setSalesLedgerId(ObjectUtils.isNotEmpty(salesLedger) ? salesLedger.getId() : -1);
purchaseLedger.setSupplierName(supplierManage.getSupplierName());
purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
purchaseLedger.setRecorderName(sysUser.getNickName());
purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
-
// 3. 鏂板鎴栨洿鏂颁富琛�
if (purchaseLedger.getId() == null) {
purchaseLedgerMapper.insert(purchaseLedger);
} else {
+ // 鍒犻櫎閲囪喘瀹℃牳锛岄噸鏂版彁浜�
+ ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>()
+ .eq(ApproveProcess::getApproveType, 5)
+ .eq(ApproveProcess::getApproveReason, purchaseLedger.getPurchaseContractNumber())
+ .eq(ApproveProcess::getApproveDelete, 0)
+ .last("limit 1"));
+ if (one != null) {
+ approveProcessService.delByIds(Collections.singletonList(one.getId()));
+ }
purchaseLedgerMapper.updateById(purchaseLedger);
}
+ // 6.閲囪喘瀹℃牳鏂板
+ addApproveByPurchase(loginUser, purchaseLedger);
// 4. 澶勭悊瀛愯〃鏁版嵁
List<SalesLedgerProduct> productList = purchaseLedgerDto.getProductData();
if (productList != null && !productList.isEmpty()) {
handleSalesLedgerProducts(purchaseLedger.getId(), productList, purchaseLedgerDto.getType());
}
-
+ //鏂板鍘熸潗鏂欐楠�
+ if (productList != null) {
+ for (SalesLedgerProduct saleProduct : productList) {
+ //鏄惁鎺ㄩ�佽川妫�锛屽鏋渢rue灏辨坊鍔�
+ if (saleProduct.getIsChecked()) {
+ addQualityInspect(purchaseLedger, saleProduct);
+ }
+ }
+ }
// 5. 杩佺Щ涓存椂鏂囦欢鍒版寮忕洰褰�
if (purchaseLedgerDto.getTempFileIds() != null && !purchaseLedgerDto.getTempFileIds().isEmpty()) {
migrateTempFilesToFormal(purchaseLedger.getId(), purchaseLedgerDto.getTempFileIds());
}
-
return 1;
+ }
+
+ private void addQualityInspect(PurchaseLedger purchaseLedger, SalesLedgerProduct saleProduct) {
+ QualityInspect qualityInspect = new QualityInspect();
+ qualityInspect.setInspectType(0);
+ qualityInspect.setSupplier(purchaseLedger.getSupplierName());
+ qualityInspect.setPurchaseLedgerId(purchaseLedger.getId());
+ qualityInspect.setProductId(saleProduct.getProductId());
+ qualityInspect.setProductName(saleProduct.getProductCategory());
+ qualityInspect.setModel(saleProduct.getSpecificationModel());
+ qualityInspect.setProductModelId(saleProduct.getProductModelId());
+ qualityInspect.setUnit(saleProduct.getUnit());
+ qualityInspect.setQuantity(saleProduct.getQuantity());
+ qualityInspectMapper.insert(qualityInspect);
+ List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), 0,null);
+ if (qualityTestStandard.size()>0){
+ qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
+ qualityInspectMapper.updateById(qualityInspect);
+ qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
+ .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandard.get(0).getId()))
+ .forEach(qualityTestStandardParam -> {
+ QualityInspectParam param = new QualityInspectParam();
+ com.ruoyi.common.utils.bean.BeanUtils.copyProperties(qualityTestStandardParam, param);
+ param.setId(null);
+ param.setInspectId(qualityInspect.getId());
+ qualityInspectParamMapper.insert(param);
+ });
+ }
}
private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, Integer type) {
@@ -183,6 +280,7 @@
List<SalesLedgerProduct> updateList = partitionedProducts.get(true);
List<SalesLedgerProduct> insertList = partitionedProducts.get(false);
+ PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(salesLedgerId);
// 鎵ц鏇存柊鎿嶄綔
if (!updateList.isEmpty()) {
@@ -195,6 +293,13 @@
if (!insertList.isEmpty()) {
for (SalesLedgerProduct salesLedgerProduct : insertList) {
salesLedgerProduct.setType(type);
+ Date entryDate = purchaseLedger.getEntryDate();
+
+ LocalDateTime localDateTime = entryDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+ salesLedgerProduct.setRegisterDate(localDateTime);
+ salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
+ salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
+ salesLedgerProduct.setPendingTicketsTotal(salesLedgerProduct.getTaxInclusiveTotalPrice());
salesLedgerProductMapper.insert(salesLedgerProduct);
}
}
@@ -254,12 +359,15 @@
try {
// 鎵ц鏂囦欢杩佺Щ锛堜娇鐢ㄥ師瀛愭搷浣滅‘淇濆畨鍏ㄦ�э級
- Files.move(
- Paths.get(tempFile.getTempPath()),
- formalFilePath,
- StandardCopyOption.REPLACE_EXISTING,
- StandardCopyOption.ATOMIC_MOVE
- );
+// Files.move(
+// Paths.get(tempFile.getTempPath()),
+// formalFilePath,
+// StandardCopyOption.REPLACE_EXISTING,
+// StandardCopyOption.ATOMIC_MOVE
+// );
+ // 鍘熷瓙绉诲姩澶辫触锛屼娇鐢ㄥ鍒�+鍒犻櫎
+ Files.copy(Paths.get(tempFile.getTempPath()), formalFilePath, StandardCopyOption.REPLACE_EXISTING);
+ Files.deleteIfExists(Paths.get(tempFile.getTempPath()));
log.info("鏂囦欢杩佺Щ鎴愬姛: {} -> {}", tempFile.getTempPath(), formalFilePath);
// 鏇存柊鏂囦欢璁板綍锛堝叧鑱斿埌涓氬姟ID锛�
@@ -268,7 +376,7 @@
fileRecord.setName(originalFilename);
fileRecord.setUrl(formalFilePath.toString());
fileRecord.setCreateTime(LocalDateTime.now());
- fileRecord.setType("2");
+ fileRecord.setType(FileNameType.PURCHASE.getValue());
commonFileMapper.insert(fileRecord);
// 鍒犻櫎涓存椂鏂囦欢璁板綍
@@ -284,7 +392,76 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public int deletePurchaseLedgerByIds(Long[] ids) {
+ if (ids == null || ids.length == 0) {
+ throw new BaseException("璇烽�変腑鑷冲皯涓�鏉℃暟鎹�");
+ }
+ // 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐叆搴撹褰�
+ LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductQueryWrapper = new LambdaQueryWrapper<>();
+ salesLedgerProductQueryWrapper.in(SalesLedgerProduct::getSalesLedgerId, ids)
+ .eq(SalesLedgerProduct::getType, 2);
+ List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(salesLedgerProductQueryWrapper);
+ if (CollectionUtils.isNotEmpty(salesLedgerProducts)) {
+ salesLedgerProducts.stream().forEach(salesLedgerProduct -> {
+ // 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐彴璐︿骇鍝�
+ LambdaQueryWrapper<ProcurementRecordStorage> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ProcurementRecordStorage::getSalesLedgerProductId, salesLedgerProduct.getId());
+ procurementRecordStorageMapper.delete(queryWrapper);
+ });
+ }
+ // 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐彴璐︿骇鍝�
+ LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.in(SalesLedgerProduct::getSalesLedgerId, ids)
+ .eq(SalesLedgerProduct::getType, 2);
+ salesLedgerProductMapper.delete(queryWrapper);
+ // 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐彴璐︾殑鏉ョエ鐧昏
+ LambdaQueryWrapper<TicketRegistration> ticketRegistrationLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ ticketRegistrationLambdaQueryWrapper.in(TicketRegistration::getPurchaseLedgerId,ids);
+ ticketRegistrationMapper.delete(ticketRegistrationLambdaQueryWrapper);
+ // 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐彴璐︾殑鏉ョエ鐧昏璁板綍
+ LambdaQueryWrapper<ProductRecord> productRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ productRecordLambdaQueryWrapper.in(ProductRecord::getPurchaseLedgerId,ids);
+ productRecordMapper.delete(productRecordLambdaQueryWrapper);
+ // 鎵归噺鍒犻櫎浠樻鐧昏
+ LambdaQueryWrapper<PaymentRegistration> paymentRegistrationLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ paymentRegistrationLambdaQueryWrapper.in(PaymentRegistration::getPurchaseLedgerId, ids);
+ paymentRegistrationMapper.delete(paymentRegistrationLambdaQueryWrapper);
+ //鎵归噺鍒犻櫎妫�楠屾爣鍑�
+ LambdaQueryWrapper<QualityInspect> materialInspectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ materialInspectLambdaQueryWrapper.in(QualityInspect::getPurchaseLedgerId, ids);
+ List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(materialInspectLambdaQueryWrapper);
+ qualityInspects.stream().forEach(qualityInspect -> {
+ if (ObjectUtils.isNotEmpty(qualityInspect.getInspectState())&&qualityInspect.getInspectState().equals(1)) {
+ throw new BaseException("宸叉彁浜ょ殑妫�楠屽崟涓嶈兘鍒犻櫎");
+ }
+ });
+ List<Long> inspectIds = qualityInspects.stream()
+ .map(QualityInspect::getId)
+ .collect(Collectors.toList());
+
+ if (inspectIds.size() > 0) {
+ LambdaQueryWrapper<QualityInspectParam> qualityStandardLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ qualityStandardLambdaQueryWrapper.in(QualityInspectParam::getInspectId, inspectIds);
+ qualityInspectParamMapper.delete(qualityStandardLambdaQueryWrapper);
+ }
+ // 鍒犻櫎閲囪喘瀹℃壒璁板綍
+ for (Long id : ids) {
+ PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(id);
+ if(purchaseLedger != null){
+ ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>()
+ .eq(ApproveProcess::getApproveType, 5)
+ .eq(ApproveProcess::getApproveDelete, 0)
+ .eq(ApproveProcess::getApproveReason, purchaseLedger.getPurchaseContractNumber())
+ .last("limit 1"));
+ if (one != null) {
+ approveProcessService.delByIds(Collections.singletonList(one.getId()));
+ }
+ }
+ }
+ //鎵归噺鍒犻櫎鍘熸潗鏂欐楠屾暟鎹�
+ qualityInspectMapper.delete(materialInspectLambdaQueryWrapper);
+ // 鎵归噺鍒犻櫎閲囪喘鍙拌处
return purchaseLedgerMapper.deleteBatchIds(Arrays.asList(ids));
}
@@ -304,7 +481,8 @@
// 3.鏌ヨ涓婁紶鏂囦欢
LambdaQueryWrapper<CommonFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>();
- salesLedgerFileWrapper.eq(CommonFile::getCommonId, purchaseLedger.getId());
+ salesLedgerFileWrapper.eq(CommonFile::getCommonId, purchaseLedger.getId())
+ .eq(CommonFile::getType,FileNameType.PURCHASE.getValue());
List<CommonFile> salesLedgerFiles = commonFileMapper.selectList(salesLedgerFileWrapper);
// 4. 杞崲 DTO
@@ -342,6 +520,7 @@
}
// 鍒涘缓骞跺~鍏匘TO
PurchaseLedgerDto resultDto = new PurchaseLedgerDto();
+ resultDto.setSalesLedgerId(purchaseLedger.getSalesLedgerId());
resultDto.setSalesContractNoId(purchaseLedger.getSalesLedgerId());
resultDto.setSalesContractNo(purchaseLedger.getSalesContractNo());
resultDto.setSupplierName(purchaseLedger.getSupplierName());
@@ -353,11 +532,14 @@
.eq(SalesLedgerProduct::getType, 2);
List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(queryWrapper);
productList.forEach(product -> {
- product.setFutureTickets(product.getFutureTickets() != null ? product.getFutureTickets() : product.getQuantity().longValue());
+ product.setFutureTickets(product.getFutureTickets() != null ? product.getFutureTickets() : product.getQuantity());
product.setFutureTicketsAmount(product.getFutureTicketsAmount() != null ? product.getFutureTicketsAmount() : product.getTaxInclusiveTotalPrice());
+ product.setTicketsNum(null);
+ product.setTicketsAmount(null);
+ product.setTempFutureTickets(product.getFutureTickets());
+ product.setTempFutureTicketsAmount(product.getFutureTicketsAmount());
});
resultDto.setProductData(productList);
-
return resultDto;
}
@@ -381,16 +563,178 @@
public PurchaseLedgerDto getPurchaseNoById(Long id) {
PurchaseLedgerDto purchaseLedgerDto = new PurchaseLedgerDto();
PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(id);
- BeanUtils.copyProperties(purchaseLedger,purchaseLedgerDto);
- TicketRegistration ticketRegistration = ticketRegistrationMapper.selectOne(new LambdaQueryWrapper<TicketRegistration>().eq(TicketRegistration::getPurchaseLedgerId, id));
- if (ticketRegistration != null) {
- purchaseLedgerDto.setInvoiceNumber(ticketRegistration.getInvoiceNumber());
- purchaseLedgerDto.setInvoiceAmount(ticketRegistration.getInvoiceAmount());
- purchaseLedgerDto.setTicketRegistrationId(ticketRegistration.getId());
- }
+
+ BeanUtils.copyProperties(purchaseLedger, purchaseLedgerDto);
+// TicketRegistration ticketRegistration = ticketRegistrationMapper.selectOne(new LambdaQueryWrapper<TicketRegistration>().eq(TicketRegistration::getPurchaseLedgerId, id));
+// if (ticketRegistration != null) {
+// purchaseLedgerDto.setInvoiceNumber(ticketRegistration.getInvoiceNumber());
+// purchaseLedgerDto.setInvoiceAmount(ticketRegistration.getInvoiceAmount());
+// purchaseLedgerDto.setTicketRegistrationId(ticketRegistration.getId());
+// }
return purchaseLedgerDto;
}
+ @Override
+ public IPage<PurchaseLedgerDto> selectPurchaseLedgerListPage(IPage ipage, PurchaseLedgerDto purchaseLedger) {
+ IPage<PurchaseLedgerDto> purchaseLedgerDtoIPage = purchaseLedgerMapper.selectPurchaseLedgerListPage(ipage, purchaseLedger);
+ purchaseLedgerDtoIPage.getRecords().forEach(purchaseLedgerDto -> {
+ List<CommonFile> commonFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>().eq(CommonFile::getCommonId, purchaseLedgerDto.getId()).eq(CommonFile::getType, FileNameType.PURCHASE.getValue()));
+ purchaseLedgerDto.setSalesLedgerFiles(commonFiles);
+ });
+ return purchaseLedgerDtoIPage;
+ }
+
+ @Override
+ public List<InvoiceRegistrationProduct> getProductBySalesNo(Long id) {
+ List<InvoiceRegistrationProduct> invoiceRegistrationProducts = invoiceRegistrationProductMapper.selectList(new LambdaQueryWrapper<InvoiceRegistrationProduct>()
+ .select(InvoiceRegistrationProduct::getId, InvoiceRegistrationProduct::getProductCategory, InvoiceRegistrationProduct::getSpecificationModel,
+ InvoiceRegistrationProduct::getUnit, InvoiceRegistrationProduct::getQuantity)
+ .eq(InvoiceRegistrationProduct::getSalesLedgerId, id));
+ if (invoiceRegistrationProducts.isEmpty()) {
+ return new ArrayList<>();
+ }
+ return invoiceRegistrationProducts;
+ }
+
+ @Override
+ public String getPurchaseNo() {
+ // 鐢熸垚鏃ユ湡鍓嶇紑锛堜緥濡傦細CG20250405锛�
+ String purchaseNo = "CG" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+
+ // 鏋勫缓 Redis Key锛堟寜澶╁垎闅旓級
+ String redisKey = "purchase_no:" + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE);
+
+ // 鑾峰彇褰撳墠搴忓彿骞堕�掑锛堝師瀛愭搷浣滐級
+ Long sequence = redisTemplate.opsForValue().increment(redisKey);
+
+ // 璁剧疆杩囨湡鏃堕棿锛堟鏃ュけ鏁堬紝闃叉鍐椾綑鏁版嵁锛�
+ if (sequence == 1) {
+ redisTemplate.expire(redisKey, 1, TimeUnit.DAYS);
+ }
+
+ // 杩斿洖瀹屾暣缂栧彿锛堝 CG202504050001锛�
+ return purchaseNo + String.format("%03d", sequence);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public AjaxResult importData(MultipartFile file) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ try {
+ InputStream inputStream = file.getInputStream();
+ ExcelUtil<PurchaseLedgerImportDto> salesLedgerImportDtoExcelUtil = new ExcelUtil<>(PurchaseLedgerImportDto.class);
+ Map<String, List<PurchaseLedgerImportDto>> stringListMap = salesLedgerImportDtoExcelUtil.importExcelMultiSheet(Arrays.asList("閲囪喘鍙拌处鏁版嵁", "閲囪喘浜у搧鏁版嵁"), inputStream, 0);
+ if (CollectionUtils.isEmpty(stringListMap)) return AjaxResult.error("閲囪喘琛ㄦ牸涓虹┖锛�");
+ // 涓氬姟灞傚悎骞�
+ List<PurchaseLedgerImportDto> salesLedgerImportDtoList = stringListMap.get("閲囪喘鍙拌处鏁版嵁");
+ if (CollectionUtils.isEmpty(salesLedgerImportDtoList)) return AjaxResult.error("閲囪喘鍙拌处鏁版嵁涓虹┖锛�");
+ List<PurchaseLedgerImportDto> salesLedgerProductImportDtoList = stringListMap.get("閲囪喘浜у搧鏁版嵁");
+ if (CollectionUtils.isEmpty(salesLedgerProductImportDtoList)) return AjaxResult.error("閲囪喘浜у搧鏁版嵁涓虹┖锛�");
+ // 渚涘簲鍟嗘暟鎹�
+ List<SupplierManage> customers = supplierManageMapper.selectList(new LambdaQueryWrapper<SupplierManage>().in(SupplierManage::getSupplierName,
+ salesLedgerImportDtoList.stream().map(PurchaseLedgerImportDto::getSupplierName).collect(Collectors.toList())));
+ List<Map<String,Object>> list = productModelMapper.getProductAndModelList();
+ // 褰曞叆浜烘暟鎹�
+ List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().in(SysUser::getNickName,
+ salesLedgerImportDtoList.stream().map(PurchaseLedgerImportDto::getRecorderName).collect(Collectors.toList())));
+ for (PurchaseLedgerImportDto salesLedgerImportDto : salesLedgerImportDtoList) {
+ PurchaseLedger salesLedger = new PurchaseLedger();
+ BeanUtils.copyProperties(salesLedgerImportDto, salesLedger);
+ // 閫氳繃渚涘簲鍟嗗悕绉版煡璇D
+ salesLedger.setSupplierId(customers.stream()
+ .filter(customer -> customer.getSupplierName().equals(salesLedger.getSupplierName()))
+ .findFirst()
+ .map(SupplierManage::getId)
+ .orElse(null));
+ Long aLong = sysUsers.stream()
+ .filter(sysUser -> sysUser.getNickName().equals(salesLedger.getRecorderName()))
+ .findFirst()
+ .map(SysUser::getUserId)
+ .orElse(null);
+ if (aLong == null)
+ throw new RuntimeException("褰曞叆浜�:" + salesLedger.getRecorderName() + ",鏃犲搴旂敤鎴凤紒");
+ salesLedger.setRecorderId(aLong);
+ // 閲囪喘浜у搧鏁版嵁缁戝畾锛岄�氳繃閲囪喘鍗曞彿鑾峰彇瀵瑰簲閲囪喘浜у搧鏁版嵁
+ List<PurchaseLedgerProductImportDto> salesLedgerProductImportDtos = salesLedgerProductImportDtoList.stream()
+ .filter(salesLedgerProductImportDto -> salesLedgerProductImportDto.getPurchaseContractNumber().equals(salesLedger.getPurchaseContractNumber()))
+ .collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(salesLedgerProductImportDtos))
+ throw new RuntimeException("閲囪喘鍗曞彿:" + salesLedgerImportDto.getPurchaseContractNumber() + ",鏃犲搴斾骇鍝佹暟鎹紒");
+ salesLedger.setContractAmount(salesLedgerProductImportDtos.stream()
+ .map(PurchaseLedgerProductImportDto::getTaxInclusiveTotalPrice)
+ .reduce(BigDecimal.ZERO,BigDecimal::add));
+ // 閫氳繃閿�鍞崟鍙风粦瀹氶攢鍞�
+ SalesLedger salesLedger1 = salesLedgerMapper.selectOne(new LambdaQueryWrapper<SalesLedger>()
+ .eq(SalesLedger::getSalesContractNo, salesLedger.getSalesContractNo())
+ .last("LIMIT 1"));
+ if(salesLedger1 != null){
+ salesLedger.setSalesLedgerId(salesLedger1.getId());
+ }
+ // 閲囪喘瀹℃牳
+ // 閫氳繃鏄电О鑾峰彇鐢ㄦ埛ID
+ String[] split = salesLedger.getApproveUserIds().split("锛�");
+ List<Long> ids = new ArrayList<>();
+ for (int i = 0; i < split.length; i++) {
+ SysUser sysUser = sysUserMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getNickName, split[i])
+ .last("LIMIT 1"));
+ if (sysUser != null) {
+ ids.add(sysUser.getUserId());
+ }
+ }
+ // 灏嗛泦鍚堣浆涓哄瓧绗︿覆锛岄殧寮�
+ String collect = ids.stream().map(Object::toString).collect(Collectors.joining(","));
+ salesLedger.setApproveUserIds(collect);
+ purchaseLedgerMapper.insert(salesLedger);
+
+ for (PurchaseLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) {
+ SalesLedgerProduct salesLedgerProduct = new SalesLedgerProduct();
+ BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct);
+ salesLedgerProduct.setSalesLedgerId(salesLedger.getId());
+ salesLedgerProduct.setType(2);
+ // 璁$畻涓嶅惈绋庢�讳环
+ salesLedgerProduct.setTaxExclusiveTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice().divide(new BigDecimal(1).add(salesLedgerProduct.getTaxRate().divide(new BigDecimal(100))), 2, RoundingMode.HALF_UP));
+ salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
+ salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getTaxExclusiveTotalPrice());
+ list.stream()
+ .filter(map -> map.get("productName").equals(salesLedgerProduct.getProductCategory()) && map.get("model").equals(salesLedgerProduct.getSpecificationModel()))
+ .findFirst()
+ .ifPresent(map -> {
+ salesLedgerProduct.setProductModelId(Long.parseLong(map.get("modelId").toString()));
+ salesLedgerProduct.setProductId(Long.parseLong(map.get("id").toString()));
+ });
+ salesLedgerProduct.setRegister(loginUser.getNickName());
+ salesLedgerProduct.setRegisterDate(LocalDateTime.now());
+ salesLedgerProduct.setApproveStatus(0);
+ salesLedgerProduct.setPendingTicketsTotal(salesLedgerProductImportDto.getTaxInclusiveTotalPrice());
+ // 鏄惁璐ㄦ鍒ゆ柇
+ salesLedgerProduct.setIsChecked(salesLedgerProductImportDto.getIsChecked() == 1);
+ if(salesLedgerProductImportDto.getIsChecked() == 1){
+ addQualityInspect(salesLedger, salesLedgerProduct);
+ }
+ salesLedgerProductMapper.insert(salesLedgerProduct);
+ }
+ // 閲囪喘瀹℃牳
+ addApproveByPurchase(loginUser,salesLedger);
+ }
+
+ return AjaxResult.success("瀵煎叆鎴愬姛");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return AjaxResult.success("瀵煎叆澶辫触");
+ }
+
+ public void addApproveByPurchase(LoginUser loginUser,PurchaseLedger purchaseLedger) throws Exception {
+ ApproveProcessVO approveProcessVO = new ApproveProcessVO();
+ approveProcessVO.setApproveType(5);
+ approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
+ approveProcessVO.setApproveReason(purchaseLedger.getPurchaseContractNumber());
+ approveProcessVO.setApproveUserIds(purchaseLedger.getApproveUserIds());
+ approveProcessVO.setApproveUser(loginUser.getUserId());
+ approveProcessVO.setApproveTime(LocalDate.now().toString());
+ approveProcessService.addApprove(approveProcessVO);
+ }
+
/**
* 涓嬪垝绾垮懡鍚嶈浆椹煎嘲鍛藉悕
*/
--
Gitblit v1.9.3