From 2d03ec79e1892248b520cf097e8a58dd82a4892f Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 22 五月 2026 15:19:15 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_天津_阳光彩印' into dev_天津_阳光彩印
---
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 537 ++++++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 396 insertions(+), 141 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 62cb366..3cf10e3 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -1,15 +1,18 @@
package com.ruoyi.purchase.service.impl;
+import cn.hutool.core.util.StrUtil;
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.bean.vo.ApproveProcessVO;
+import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
+import com.ruoyi.basic.dto.ProductModelAnticlockwiseDto;
import com.ruoyi.basic.mapper.ProductMapper;
import com.ruoyi.basic.mapper.ProductModelMapper;
import com.ruoyi.basic.mapper.SupplierManageMapper;
@@ -18,48 +21,54 @@
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.PaymentRegistrationMapper;
-import com.ruoyi.purchase.mapper.ProductRecordMapper;
-import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
-import com.ruoyi.purchase.mapper.TicketRegistrationMapper;
+import com.ruoyi.purchase.dto.PurchaseLedgerImportDto;
+import com.ruoyi.purchase.dto.PurchaseLedgerProductImportDto;
+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.IPurchaseLedgerService;
-import com.ruoyi.quality.mapper.QualityInspectMapper;
-import com.ruoyi.quality.mapper.QualityInspectParamMapper;
-import com.ruoyi.quality.mapper.QualityTestStandardMapper;
-import com.ruoyi.quality.mapper.QualityTestStandardParamMapper;
+import com.ruoyi.quality.mapper.*;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityInspectParam;
import com.ruoyi.quality.pojo.QualityTestStandard;
import com.ruoyi.quality.pojo.QualityTestStandardParam;
-import com.ruoyi.sales.mapper.*;
+import com.ruoyi.sales.mapper.CommonFileMapper;
+import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
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;
+import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
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;
@@ -79,41 +88,71 @@
* @date 2025-05-09
*/
@Service
-@RequiredArgsConstructor
@Slf4j
public class PurchaseLedgerServiceImpl extends ServiceImpl<PurchaseLedgerMapper, PurchaseLedger> implements IPurchaseLedgerService {
- private final AccountExpenseService accountExpenseService;
- private final PurchaseLedgerMapper purchaseLedgerMapper;
+ @Autowired
+ private AccountExpenseService accountExpenseService;
+ @Autowired
+ private PurchaseLedgerMapper purchaseLedgerMapper;
- private final SalesLedgerMapper salesLedgerMapper;
- private final SalesLedgerProductMapper salesLedgerProductMapper;
+ @Autowired
+ private SalesLedgerMapper salesLedgerMapper;
+ @Autowired
+ private SalesLedgerProductMapper salesLedgerProductMapper;
- private final SysUserMapper userMapper;
+ @Autowired
+ private SysUserMapper userMapper;
- private final TempFileMapper tempFileMapper;
+ @Autowired
+ private TempFileMapper tempFileMapper;
- private final CommonFileMapper commonFileMapper;
+ @Autowired
+ private CommonFileMapper commonFileMapper;
- private final SupplierManageMapper supplierManageMapper;
+ @Autowired
+ private SupplierManageMapper supplierManageMapper;
- private final ProductMapper productMapper;
+ @Autowired
+ private ProductMapper productMapper;
- private final ProductModelMapper productModelMapper;
+ @Autowired
+ private ProductModelMapper productModelMapper;
- private final TicketRegistrationMapper ticketRegistrationMapper;
+ @Autowired
+ private SysUserMapper sysUserMapper;
- private final ProductRecordMapper productRecordMapper;
+ @Autowired
+ private TicketRegistrationMapper ticketRegistrationMapper;
- private final PaymentRegistrationMapper paymentRegistrationMapper;
+ @Autowired
+ private ProductRecordMapper productRecordMapper;
- private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
-
- private final StringRedisTemplate redisTemplate;
- private final QualityInspectMapper qualityInspectMapper;
- private final QualityTestStandardMapper qualityTestStandardMapper;
- private final QualityTestStandardParamMapper qualityTestStandardParamMapper;
- private final QualityInspectParamMapper qualityInspectParamMapper;
-
+ @Autowired
+ private PaymentRegistrationMapper paymentRegistrationMapper;
+ @Autowired
+ private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
+ @Autowired
+ private StringRedisTemplate redisTemplate;
+ @Autowired
+ private QualityInspectMapper qualityInspectMapper;
+ @Autowired
+ private CommonFileServiceImpl commonFileService;
+ @Autowired
+ private QualityTestStandardBindingMapper qualityTestStandardBindingMapper;
+ @Autowired
+ private QualityTestStandardParamMapper qualityTestStandardParamMapper;
+ @Autowired
+ private QualityTestStandardMapper qualityTestStandardMapper;
+ @Autowired
+ private QualityInspectParamMapper qualityInspectParamMapper;
+ @Autowired
+ private ApproveProcessServiceImpl approveProcessService;
+ @Autowired
+ private ProcurementRecordMapper procurementRecordStorageMapper;
+ @Autowired
+ private PurchaseLedgerTemplateMapper purchaseLedgerTemplateMapper;
+ @Autowired
+ private SalesLedgerProductTemplateMapper salesLedgerProductTemplateMapper;
@Value("${file.upload-dir}")
private String uploadDir;
@@ -125,62 +164,29 @@
}
return purchaseLedgerMapper.selectList(queryWrapper);
}
+
@Override
@Transactional(rollbackFor = Exception.class)
- public int addPurchaseTemplate(PurchaseLedgerDto purchaseLedgerDto)throws IOException {
- //褰曞叆浜�
- SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId());
-
- SupplierManage supplierManage = supplierManageMapper.selectById(purchaseLedgerDto.getSupplierId());
+ public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception {
PurchaseLedger purchaseLedger = new PurchaseLedger();
-// BeanUtils.copyProperties(purchaseLedger,purchaseLedgerDto);
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if(ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) {
- purchaseLedger.setTenantId(loginUser.getTenantId());
- }
- purchaseLedger.setPaymentMethod(purchaseLedgerDto.getPaymentMethod());
- purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
- purchaseLedger.setSupplierId(purchaseLedgerDto.getSupplierId());
- purchaseLedger.setTemplateName(purchaseLedgerDto.getTemplateName());
-// purchaseLedger.setSalesLedgerPId(purchaseLedgerDto.getSalesLedgerId());
- purchaseLedger.setApprovalStatus(3);
- purchaseLedger.setSupplierName(supplierManage.getSupplierName());
- purchaseLedger.setRecorderName(sysUser.getNickName());
- purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
- purchaseLedger.setPurchaseContractNumber(UUID.randomUUID().toString().replaceAll("-", ""));
- purchaseLedger.setEntryDate(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()));
- int insert = purchaseLedgerMapper.insert(purchaseLedger);
-
- LambdaQueryWrapper<PurchaseLedger> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(PurchaseLedger::getSupplierName, purchaseLedger.getSupplierName())
- .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedger.getPurchaseContractNumber())
- .eq(PurchaseLedger::getApprovalStatus,3);
- PurchaseLedger purchaseLedger1 = purchaseLedgerMapper.selectOne(queryWrapper);
-
- if(ObjectUtils.isNotEmpty(purchaseLedgerDto.getProductData())) {
- // 4. 澶勭悊瀛愯〃鏁版嵁
- List<SalesLedgerProduct> salesLedgerProductList = purchaseLedgerDto.getProductData();
- salesLedgerProductList.forEach(salesLedgerProduct -> {
- salesLedgerProduct.setSalesLedgerId(purchaseLedger1.getId());
- salesLedgerProduct.setType(2);
- });
- salesLedgerProductList.forEach(salesLedgerProductMapper::insert);
- }
- return insert;
- }
- @Override
- @Transactional(rollbackFor = Exception.class)
- public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws IOException {
-
SalesLedger salesLedger = salesLedgerMapper.selectById(purchaseLedgerDto.getSalesLedgerId());
+ BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedger);
//褰曞叆浜�
SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId());
+ if (ObjectUtils.isNotEmpty(sysUser)) {
+ purchaseLedger.setRecorderName(sysUser.getNickName());
+ purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
+ }else {
+ purchaseLedger.setRecorderName(SecurityUtils.getLoginUser().getNickName());
+ SysUser sysUser1 = userMapper.selectUserById(SecurityUtils.getUserId());
+ purchaseLedger.setPhoneNumber(sysUser1.getPhonenumber());
+ }
SupplierManage supplierManage = supplierManageMapper.selectById(purchaseLedgerDto.getSupplierId());
// DTO杞珽ntity
- PurchaseLedger purchaseLedger = new PurchaseLedger();
- BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedger);
+
+
LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) {
purchaseLedger.setTenantId(loginUser.getTenantId());
@@ -189,81 +195,74 @@
purchaseLedger.setSalesLedgerId(ObjectUtils.isNotEmpty(salesLedger) ? salesLedger.getId() : -1);
purchaseLedger.setSupplierName(supplierManage.getSupplierName());
purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
- purchaseLedger.setRecorderName(sysUser.getNickName());
- purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
- // 2. 澶勭悊璐︽埛鏀跺叆
- AccountExpense accountExpense = new AccountExpense();
- accountExpense.setExpenseDate(purchaseLedger.getEntryDate());
- accountExpense.setExpenseType("0");
- accountExpense.setSupplierName(purchaseLedger.getSupplierName());
- accountExpense.setExpenseMoney(purchaseLedger.getContractAmount());
- accountExpense.setExpenseDescribed("閲囪喘鍚堝悓锛�" + purchaseLedger.getPurchaseContractNumber());
- accountExpense.setExpenseMethod("0");
- accountExpense.setInvoiceNumber(purchaseLedger.getPurchaseContractNumber());
- accountExpense.setInputTime(new Date());
- accountExpense.setInputUser(loginUser.getNickName());
-
+ purchaseLedger.setApprovalStatus(1);
// 3. 鏂板鎴栨洿鏂颁富琛�
if (purchaseLedger.getId() == null) {
purchaseLedgerMapper.insert(purchaseLedger);
-// accountIncomeService.save(accountIncome);
- accountExpenseService.save(accountExpense);
} else {
- purchaseLedgerMapper.updateById(purchaseLedger);
- PurchaseLedger purchaseLedgerDB = purchaseLedgerMapper.selectById(purchaseLedger.getId());
- List<AccountExpense> accountExpenseDBs = accountExpenseService.getByInvoiceNumberList(purchaseLedger.getPurchaseContractNumber());
- if (!CollectionUtils.isEmpty(accountExpenseDBs)) {
- accountExpenseDBs.forEach(accountExpenseDB ->{
- accountExpenseDB.setExpenseDate(purchaseLedgerDB.getEntryDate());
- accountExpenseDB.setExpenseType("0");
- accountExpenseDB.setSupplierName(purchaseLedgerDB.getSupplierName());
- accountExpenseDB.setExpenseMoney(purchaseLedgerDB.getContractAmount());
- accountExpenseDB.setExpenseDescribed("閲囪喘鍚堝悓锛�" + purchaseLedgerDB.getPurchaseContractNumber());
- accountExpenseDB.setExpenseMethod("0");
- accountExpenseDB.setInvoiceNumber(purchaseLedgerDB.getPurchaseContractNumber());
- accountExpenseService.updateById(accountExpenseDB);
- });
+ // 鍒犻櫎閲囪喘瀹℃牳锛岄噸鏂版彁浜�
+ 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());
}
- //鏂板鍘熸潗鏂欐楠�
- for (SalesLedgerProduct saleProduct : productList) {
- QualityInspect qualityInspect = new QualityInspect();
- qualityInspect.setInspectType(0);
- qualityInspect.setSupplier(purchaseLedger.getSupplierName());
- qualityInspect.setPurchaseLedgerId(purchaseLedger.getId());
- qualityInspect.setProductId(saleProduct.getId());
- qualityInspect.setProductName(saleProduct.getProductCategory());
- qualityInspect.setModel(saleProduct.getSpecificationModel());
- qualityInspect.setUnit(saleProduct.getUnit());
- qualityInspect.setQuantity(saleProduct.getQuantity());
- qualityInspectMapper.insert(qualityInspect);
-
- List<QualityTestStandardParam> qualityTestStandardParams = qualityTestStandardParamMapper.selectListByProductId(saleProduct.getProductId());
- if (qualityTestStandardParams.size()>0) {
- qualityTestStandardParams.forEach(standard -> {
- QualityInspectParam param = new QualityInspectParam();
- com.ruoyi.common.utils.bean.BeanUtils.copyProperties(standard, param);
- param.setId(null);
- param.setInspectId(qualityInspect.getId());
- qualityInspectParamMapper.insert(param);
- });
- }
- }
-
+ //鏂板鍘熸潗鏂欐楠� 瀹℃壒涔嬪悗鎵嶇敓鎴愭楠�
+// 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;
+ }
+
+
+ public 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) {
@@ -333,6 +332,9 @@
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);
}
}
@@ -425,9 +427,29 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public int deletePurchaseLedgerByIds(Long[] ids) {
if (ids == null || ids.length == 0) {
throw new BaseException("璇烽�変腑鑷冲皯涓�鏉℃暟鎹�");
+ }
+ for (Long id : ids) {
+ PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(id);
+ if (purchaseLedger.getApprovalStatus().equals(3)) {
+ throw new BaseException(purchaseLedger.getPurchaseContractNumber()+"宸茬粡瀹℃壒閫氳繃锛屼笉鍏佽鍒犻櫎");
+ }
+ }
+ // 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐叆搴撹褰�
+ 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<>();
@@ -436,7 +458,7 @@
salesLedgerProductMapper.delete(queryWrapper);
// 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐彴璐︾殑鏉ョエ鐧昏
LambdaQueryWrapper<TicketRegistration> ticketRegistrationLambdaQueryWrapper = new LambdaQueryWrapper<>();
- ticketRegistrationLambdaQueryWrapper.in(TicketRegistration::getSalesLedgerId,ids);
+ ticketRegistrationLambdaQueryWrapper.in(TicketRegistration::getPurchaseLedgerId,ids);
ticketRegistrationMapper.delete(ticketRegistrationLambdaQueryWrapper);
// 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐彴璐︾殑鏉ョエ鐧昏璁板綍
LambdaQueryWrapper<ProductRecord> productRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -449,7 +471,13 @@
//鎵归噺鍒犻櫎妫�楠屾爣鍑�
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());
@@ -459,9 +487,24 @@
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);
+ //鍒犻櫎闄勪欢
+ commonFileService.deleteByBusinessIds(Arrays.asList(ids), 2);
// 鎵归噺鍒犻櫎閲囪喘鍙拌处
return purchaseLedgerMapper.deleteBatchIds(Arrays.asList(ids));
}
@@ -617,6 +660,218 @@
return purchaseNo + String.format("%03d", sequence);
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public AjaxResult importData(MultipartFile file) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ int successCount = 0;
+ int skipCount = 0;
+ List<String> errorMessages = new ArrayList<>();
+
+ try {
+ InputStream inputStream = file.getInputStream();
+ ExcelUtil<PurchaseLedgerImportDto> excelUtil = new ExcelUtil<>(PurchaseLedgerImportDto.class);
+ Map<String, List<PurchaseLedgerImportDto>> stringListMap = excelUtil.importExcelMultiSheet(Arrays.asList("閲囪喘鍙拌处鏁版嵁", "閲囪喘浜у搧鏁版嵁"), inputStream, 0);
+ if (CollectionUtils.isEmpty(stringListMap)) return AjaxResult.error("閲囪喘琛ㄦ牸涓虹┖锛�");
+
+ List<PurchaseLedgerImportDto> ledgerList = stringListMap.get("閲囪喘鍙拌处鏁版嵁");
+ if (CollectionUtils.isEmpty(ledgerList)) return AjaxResult.error("閲囪喘鍙拌处鏁版嵁涓虹┖锛�");
+ List<PurchaseLedgerImportDto> productList = stringListMap.get("閲囪喘浜у搧鏁版嵁");
+ if (CollectionUtils.isEmpty(productList)) return AjaxResult.error("閲囪喘浜у搧鏁版嵁涓虹┖锛�");
+
+ List<SupplierManage> suppliers = supplierManageMapper.selectList(new LambdaQueryWrapper<SupplierManage>().in(SupplierManage::getSupplierName,
+ ledgerList.stream().map(PurchaseLedgerImportDto::getSupplierName).filter(StrUtil::isNotBlank).collect(Collectors.toList())));
+ List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().in(SysUser::getNickName,
+ ledgerList.stream().map(PurchaseLedgerImportDto::getRecorderName).filter(StrUtil::isNotBlank).collect(Collectors.toList())));
+
+ for (int i = 0; i < ledgerList.size(); i++) {
+ PurchaseLedgerImportDto importDto = ledgerList.get(i);
+ int rowNum = i + 2;
+
+ if (StrUtil.isBlank(importDto.getPurchaseContractNumber())) {
+ errorMessages.add(String.format("绗�%d琛岋細閲囪喘鍗曞彿涓虹┖", rowNum));
+ skipCount++;
+ continue;
+ }
+
+ try {
+ PurchaseLedger existLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
+ .eq(PurchaseLedger::getPurchaseContractNumber, importDto.getPurchaseContractNumber())
+ .last("limit 1"));
+ if (existLedger != null) {
+ errorMessages.add(String.format("绗�%d琛岋細閲囪喘鍗曞彿[%s]宸插瓨鍦�", rowNum, importDto.getPurchaseContractNumber()));
+ skipCount++;
+ continue;
+ }
+
+ PurchaseLedger purchaseLedger = new PurchaseLedger();
+ BeanUtils.copyProperties(importDto, purchaseLedger);
+
+ purchaseLedger.setSupplierId(suppliers.stream()
+ .filter(s -> s.getSupplierName().equals(importDto.getSupplierName()))
+ .findFirst()
+ .map(SupplierManage::getId)
+ .orElse(null));
+
+ Long recorderId = sysUsers.stream()
+ .filter(u -> u.getNickName().equals(importDto.getRecorderName()))
+ .findFirst()
+ .map(SysUser::getUserId)
+ .orElse(null);
+ if (recorderId == null) {
+ throw new RuntimeException("褰曞叆浜�:" + importDto.getRecorderName() + "涓嶅瓨鍦�");
+ }
+ purchaseLedger.setRecorderId(recorderId);
+
+ List<PurchaseLedgerProductImportDto> productDtos = productList.stream()
+ .filter(p -> p.getPurchaseContractNumber().equals(importDto.getPurchaseContractNumber()))
+ .collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(productDtos)) {
+ throw new RuntimeException("鏃犲搴斾骇鍝佹暟鎹�");
+ }
+
+ purchaseLedger.setContractAmount(productDtos.stream()
+ .map(PurchaseLedgerProductImportDto::getTaxInclusiveTotalPrice)
+ .reduce(BigDecimal.ZERO, BigDecimal::add));
+
+ SalesLedger salesLedger = salesLedgerMapper.selectOne(new LambdaQueryWrapper<SalesLedger>()
+ .eq(SalesLedger::getSalesContractNo, purchaseLedger.getSalesContractNo())
+ .last("LIMIT 1"));
+ if (salesLedger != null) {
+ purchaseLedger.setSalesLedgerId(salesLedger.getId());
+ }
+
+ purchaseLedgerMapper.insert(purchaseLedger);
+
+ for (PurchaseLedgerProductImportDto productDto : productDtos) {
+ SalesLedgerProduct product = new SalesLedgerProduct();
+ BeanUtils.copyProperties(productDto, product);
+ product.setSalesLedgerId(purchaseLedger.getId());
+ product.setType(2);
+ product.setTaxExclusiveTotalPrice(product.getTaxInclusiveTotalPrice()
+ .divide(new BigDecimal(1).add(product.getTaxRate().divide(new BigDecimal(100))), 2, RoundingMode.HALF_UP));
+ product.setFutureTickets(product.getQuantity());
+ product.setFutureTicketsAmount(product.getTaxExclusiveTotalPrice());
+
+ ProductModelAnticlockwiseDto modelDto = new ProductModelAnticlockwiseDto();
+ modelDto.setProductName(product.getProductCategory());
+ modelDto.setModel(product.getSpecificationModel());
+ modelDto.setUnit(product.getUnit());
+ modelDto.setSubUnit(product.getUnit());
+ product.setProductModelId(productModelAnticlockwise(modelDto));
+
+ product.setRegister(loginUser.getNickName());
+ product.setRegisterDate(LocalDateTime.now());
+ product.setApproveStatus(0);
+ product.setPendingTicketsTotal(productDto.getTaxInclusiveTotalPrice());
+ product.setIsChecked(productDto.getIsChecked() == 1);
+
+ if (productDto.getIsChecked() == 1) {
+ addQualityInspect(purchaseLedger, product);
+ }
+ salesLedgerProductMapper.insert(product);
+ }
+
+ addApproveByPurchase(loginUser, purchaseLedger);
+ successCount++;
+
+ } catch (Exception e) {
+ log.error("绗瑊}琛岄噰璐崟[{}]瀵煎叆澶辫触锛歿}", rowNum, importDto.getPurchaseContractNumber(), e.getMessage(), e);
+ errorMessages.add(String.format("绗�%d琛岄噰璐崟[%s]锛氬け璐�-%s", rowNum, importDto.getPurchaseContractNumber(), e.getMessage()));
+ skipCount++;
+ }
+ }
+
+ String message = String.format("瀵煎叆瀹屾垚锛佹垚鍔�%d鏉★紝璺宠繃%d鏉�", successCount, skipCount);
+ if (!errorMessages.isEmpty()) {
+ message += "銆傞敊璇鎯咃細" + String.join("锛�", errorMessages);
+ }
+ return AjaxResult.success(message);
+ } catch (Exception e) {
+ log.error("閲囪喘瀵煎叆寮傚父", e);
+ return AjaxResult.error("瀵煎叆澶辫触锛�" + e.getMessage());
+ }
+ }
+
+ public Long productModelAnticlockwise(ProductModelAnticlockwiseDto productModelDto) {
+ ProductModel oldProductModel = productModelMapper.selectOldProductModel(productModelDto.getModel(), productModelDto.getProductName());
+ //瀛樺湪灏辨洿鏂�
+ if (oldProductModel != null) {
+ oldProductModel.setModel(productModelDto.getModel());
+ oldProductModel.setUnit(productModelDto.getUnit());
+ oldProductModel.setSubUnit(productModelDto.getSubUnit());
+ oldProductModel.setDeptId(SecurityUtils.getDeptId()[0]);
+ productModelMapper.updateById(oldProductModel);
+ Product product = productMapper.selectById(oldProductModel.getProductId());
+ product.setProductName(productModelDto.getProductName());
+ productMapper.updateById(product);
+ return oldProductModel.getId();
+ }else {
+ //鎵惧埌鐖惰妭鐐�
+ Product productParent = productMapper.selectOne(new QueryWrapper<Product>().lambda().eq(Product::getProductName, "鍘熸枡").last("limit 1"));
+ if (ObjectUtils.isEmpty(productParent)) {
+ Product product = new Product();
+ product.setProductName("鍘熸枡");
+ product.setDeptId(SecurityUtils.getDeptId()[0]);
+ productMapper.insert(product);
+ productParent.setId(product.getId());
+ }
+ //鏂板浜у搧澶х被
+ Product product = new Product();
+ product.setProductName(productModelDto.getProductName());
+ product.setParentId(productParent.getId());
+ product.setDeptId(SecurityUtils.getDeptId()[0]);
+ productMapper.insert( product);
+ //鏂板浜у搧瑙勬牸
+ ProductModel productModel = new ProductModel();
+ productModel.setProductId(product.getId());
+ productModel.setModel(productModelDto.getModel());
+ productModel.setUnit(productModelDto.getUnit());
+ productModel.setSubUnit(productModelDto.getSubUnit());
+ productModel.setDeptId(SecurityUtils.getDeptId()[0]);
+ productModelMapper.insert(productModel);
+ return productModel.getId();
+
+ }
+ }
+
+ @Override
+ public PurchaseLedgerDto getPurchaseByCode(PurchaseLedgerDto purchaseLedgerDto) {
+ // 1. 鏌ヨ涓昏〃
+ PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
+ .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedgerDto.getPurchaseContractNumber())
+ .last("LIMIT 1"));
+ if (purchaseLedger == null) {
+ throw new BaseException("閲囪喘鍙拌处涓嶅瓨鍦�");
+ }
+
+ // 2. 鏌ヨ瀛愯〃
+ LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>();
+ productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId())
+ .eq(SalesLedgerProduct::getType, 2);
+ List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper);
+
+ // 4. 杞崲 DTO
+ PurchaseLedgerDto resultDto = new PurchaseLedgerDto();
+ BeanUtils.copyProperties(purchaseLedger, resultDto);
+ if (!products.isEmpty()) {
+ resultDto.setHasChildren(true);
+ resultDto.setProductData(products);
+ }
+ return resultDto;
+ }
+
+ 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