From 74a29854bb8ff92d2ff2fcb55fa5028609ec6a33 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 14 七月 2026 15:26:47 +0800
Subject: [PATCH] 采购删除导致审批报错+发货台账导入关联销售台账+生成出库记录
---
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 61 ++++++++------
src/main/java/com/ruoyi/sales/service/impl/WeighingRecordServiceImpl.java | 71 +++++++++++++++++
src/main/java/com/ruoyi/sales/pojo/WeighingRecord.java | 3
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 10 +-
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java | 3
src/main/java/com/ruoyi/sales/service/IWeighingRecordService.java | 4 +
src/main/java/com/ruoyi/sales/controller/WeighingRecordController.java | 35 +++++++-
src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java | 3
8 files changed, 152 insertions(+), 38 deletions(-)
diff --git a/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java b/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java
index 5e8fe53..57b123d 100644
--- a/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java
@@ -9,7 +9,8 @@
PRODUCTION_REPORT_STOCK_OUT("3", "鐢熶骇鎶ュ伐-鍑哄簱"),
SALE_STOCK_OUT("8", "閿�鍞�-鍑哄簱"),
PURCHASE_RETURN_STOCK_OUT("9", "閲囪喘閫�璐�"),
- SALE_SHIP_STOCK_OUT("13", "閿�鍞�-鍙戣揣鍑哄簱");
+ SALE_SHIP_STOCK_OUT("13", "閿�鍞�-鍙戣揣鍑哄簱"),
+ WEIGHBRIDGE_OUT("33", "纾呭崟鍑哄簱");
private final String code;
private final String value;
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 e3ad55a..0155e1b 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -232,7 +232,7 @@
purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
purchaseLedger.setRecorderName(sysUser.getNickName());
purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
- purchaseLedger.setApprovalStatus(1);
+ purchaseLedger.setApprovalStatus(3);
List<SalesLedgerProduct> productList = Optional.ofNullable(purchaseLedgerDto.getProductData()).orElse(Collections.emptyList());
// 3. 鏂板鎴栨洿鏂颁富琛�
@@ -849,7 +849,9 @@
if(salesLedger1 != null){
salesLedger.setSalesLedgerId(salesLedger1.getId());
}
- // 閲囪喘瀹℃牳
+ // 璁剧疆涓哄緟瀹℃壒鐘舵��
+ salesLedger.setApprovalStatus(3);
+ /* // 閲囪喘瀹℃牳 - 宸插簾寮冿紝涓嶅啀鍙戣捣瀹℃壒娴佺▼
// 閫氳繃鏄电О鑾峰彇鐢ㄦ埛ID
String[] split = salesLedger.getApproveUserIds().split("锛�");
List<Long> ids = new ArrayList<>();
@@ -862,7 +864,7 @@
}
// 灏嗛泦鍚堣浆涓哄瓧绗︿覆锛岄殧寮�
String collect = ids.stream().map(Object::toString).collect(Collectors.joining(","));
- salesLedger.setApproveUserIds(collect);
+ salesLedger.setApproveUserIds(collect); */
purchaseLedgerMapper.insert(salesLedger);
for (PurchaseLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) {
@@ -933,7 +935,7 @@
salesLedgerProductMapper.insert(salesLedgerProduct);
}
// 閲囪喘瀹℃牳
- addApproveByPurchase(loginUser,salesLedger);
+// addApproveByPurchase(loginUser,salesLedger);
}
return AjaxResult.success("瀵煎叆鎴愬姛");
diff --git a/src/main/java/com/ruoyi/sales/controller/WeighingRecordController.java b/src/main/java/com/ruoyi/sales/controller/WeighingRecordController.java
index 9fd3351..9b47705 100644
--- a/src/main/java/com/ruoyi/sales/controller/WeighingRecordController.java
+++ b/src/main/java/com/ruoyi/sales/controller/WeighingRecordController.java
@@ -16,11 +16,14 @@
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
+
+import static com.ruoyi.framework.datasource.DynamicDataSourceContextHolder.log;
/**
* 杩囩璁板綍锛堢鍗曞彴璐︼級Controller
@@ -74,11 +77,15 @@
// 鍘婚噸妫�鏌�
List<WeighingRecord> newRecordList = new ArrayList<>();
int duplicateCount = 0;
+ int matchedCount = 0;
+ int unmatchedCount = 0;
for (WeighingRecord record : weighingRecordList) {
LambdaQueryWrapper<WeighingRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(WeighingRecord::getSerialNo, record.getSerialNo());
-
+ if (ObjectUtils.isEmpty(record.getSpecification())) {
+ record.setSpecification("/");
+ }
long count = weighingRecordService.count(wrapper);
if (count == 0) {
newRecordList.add(record);
@@ -91,13 +98,33 @@
return R.fail("鎵�鏈夋暟鎹兘宸插瓨鍦紝鍏�" + duplicateCount + "鏉¢噸澶嶆暟鎹�");
}
- // 鎵归噺鎻掑叆鏂版暟鎹�
- weighingRecordService.saveBatch(newRecordList);
+ // 鎵归噺鎻掑叆鏂版暟鎹苟鎵ц鍑哄簱鎿嶄綔
+ for (WeighingRecord record : newRecordList) {
+ // 鍏堜繚瀛樼鍗曡褰曪紝鑾峰彇ID
+ weighingRecordService.save(record);
- String message = String.format("瀵煎叆鎴愬姛锛�%d鏉★紝璺宠繃閲嶅锛�%d鏉�", newRecordList.size(), duplicateCount);
+
+ // 鏍规嵁瀹㈡埛銆佷骇鍝佸悕绉般�佽鏍煎尮閰嶉攢鍞彴璐﹀苟鍑哄簱
+ Long productId = weighingRecordService.matchAndOutStock(
+ record.getReceiveUnit(), // 鏀惰揣鍗曚綅=瀹㈡埛
+ record.getGoodsName(), // 璐у悕=浜у搧鍚嶇О
+ record.getSpecification(), // 瑙勬牸鍨嬪彿
+ record.getNetWeight(), // 鍑�閲�=鏁伴噺
+ record.getId() // 纾呭崟ID浣滀负鍏宠仈璁板綍ID
+ );
+ if (productId != null) {
+ matchedCount++;
+ } else {
+ unmatchedCount++;
+ }
+ }
+
+ String message = String.format("瀵煎叆鎴愬姛锛�%d鏉★紝璺宠繃閲嶅锛�%d鏉★紝鍖归厤鍑哄簱锛�%d鏉★紝鏈尮閰嶏細%d鏉�",
+ newRecordList.size(), duplicateCount, matchedCount, unmatchedCount);
return R.ok(message);
} catch (Exception e) {
+ log.error("纾呭崟瀵煎叆澶辫触锛歿}", e.getMessage());
return R.fail("瀵煎叆澶辫触锛�" + e.getMessage());
}
}
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index a52c2b4..4c28c1f 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -12,7 +12,6 @@
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
-import java.util.Date;
/**
* 浜у搧淇℃伅瀵硅薄 sales_ledger_product
@@ -206,7 +205,7 @@
@Excel(name = "鍙戣揣鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
@TableField(exist = false)
@JsonFormat(pattern = "yyyy-MM-dd")
- private Date shippingDate;
+ private LocalDateTime shippingDate;
@TableField(exist = false)
@ApiModelProperty(value = "鍙戣揣鐘舵��")
diff --git a/src/main/java/com/ruoyi/sales/pojo/WeighingRecord.java b/src/main/java/com/ruoyi/sales/pojo/WeighingRecord.java
index 14ed2c3..6c5e082 100644
--- a/src/main/java/com/ruoyi/sales/pojo/WeighingRecord.java
+++ b/src/main/java/com/ruoyi/sales/pojo/WeighingRecord.java
@@ -87,4 +87,7 @@
@ApiModelProperty(value = "绉熸埛ID")
@TableField(fill = FieldFill.INSERT)
private Long tenantId;
+
+
+ private Long recordId;
}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/sales/service/IWeighingRecordService.java b/src/main/java/com/ruoyi/sales/service/IWeighingRecordService.java
index 19eb505..6c1ce03 100644
--- a/src/main/java/com/ruoyi/sales/service/IWeighingRecordService.java
+++ b/src/main/java/com/ruoyi/sales/service/IWeighingRecordService.java
@@ -5,6 +5,10 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.sales.pojo.WeighingRecord;
+import java.math.BigDecimal;
+
public interface IWeighingRecordService extends IService<WeighingRecord> {
IPage<WeighingRecord> listPage(Page<WeighingRecord> page, WeighingRecord weighingRecord);
+
+ Long matchAndOutStock(String receiveUnit, String goodsName, String specification, BigDecimal netWeight, Long id);
}
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 4042a3e..c21e1ae 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -27,7 +27,9 @@
import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.pojo.ShippingInfo;
+import com.ruoyi.sales.pojo.WeighingRecord;
import com.ruoyi.sales.service.ISalesLedgerProductService;
+import com.ruoyi.sales.service.IWeighingRecordService;
import com.ruoyi.stock.mapper.StockInventoryMapper;
import com.ruoyi.stock.pojo.StockInventory;
import lombok.AllArgsConstructor;
@@ -88,13 +90,14 @@
private StockUtils stockUtils;
-
@Autowired
private ProductStructureMapper productStructureMapper;
@Autowired
private StockInventoryMapper stockInventoryMapper;
@Autowired
private ProductOrderServiceImpl productOrderServiceImpl;
+ @Autowired
+ private IWeighingRecordService iWeighingRecordService;
@Override
public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -107,20 +110,23 @@
// queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
// .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct);
- if(!CollectionUtils.isEmpty(salesLedgerProducts)){
+ if (!CollectionUtils.isEmpty(salesLedgerProducts)) {
salesLedgerProducts.forEach(item -> {
// 鍙戣揣淇℃伅
- ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>()
- .eq(ShippingInfo::getSalesLedgerProductId, item.getId())
- .orderByDesc(ShippingInfo::getCreateTime)
- .last("limit 1"));
- if(shippingInfo != null){
- item.setShippingDate(shippingInfo.getShippingDate());
- item.setShippingCarNumber(shippingInfo.getShippingCarNumber());
- item.setShippingStatus(shippingInfo.getStatus());
- item.setExpressCompany(shippingInfo.getExpressCompany());
- item.setExpressNumber(shippingInfo.getExpressNumber());
+ List<WeighingRecord> list = iWeighingRecordService.list(new QueryWrapper<WeighingRecord>().lambda().eq(WeighingRecord::getRecordId, item.getId()).orderByDesc(WeighingRecord::getCreateTime));
+ if (!list.isEmpty()) {
+ BigDecimal reduce = list.stream().map(WeighingRecord::getNetWeight).collect(Collectors.toList()).stream().reduce(BigDecimal.ZERO, BigDecimal::add);
+ item.setShippingDate(list.get(0).getSecondWeighTime());
+ item.setShippingCarNumber(list.get(0).getCarNo());
+ if (reduce.compareTo(BigDecimal.ZERO) == 0) {
+ item.setShippingStatus("鏈彂璐�");
+ } else if (reduce.compareTo(item.getQuantity()) < 0) {
+ item.setShippingStatus("閮ㄥ垎鍙戣揣");
+ } else {
+ item.setShippingStatus("宸插彂璐�");
+ }
}
+ item.setShippingStatus("鏈彂璐�");
});
// 寮�绁�
InvoiceRegistrationProductDto invoiceRegistrationProductDto = new InvoiceRegistrationProductDto();
@@ -134,8 +140,8 @@
BigDecimal noInvoiceNum = BigDecimal.ZERO;
BigDecimal noInvoiceAmount = BigDecimal.ZERO;
for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) {
- if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){
- invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum());
+ if (ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()) {
+ invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum());
invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount());
}
}
@@ -169,7 +175,7 @@
//鍒犻櫎鍙戣揣淇℃伅
List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
.in(ShippingInfo::getSalesLedgerProductId, Arrays.asList(ids)));
- if(!CollectionUtils.isEmpty(shippingInfos)){
+ if (!CollectionUtils.isEmpty(shippingInfos)) {
shippingInfoService.delete(shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList()));
}
@@ -296,12 +302,12 @@
BigDecimal ticketsTotal = salesLedgerProduct.getTicketsTotal() != null ? salesLedgerProduct.getTicketsTotal() : BigDecimal.ZERO;
// 寰呭洖娆撅紝浠樻
- if(salesLedgerProduct.getType().equals(1)){
+ if (salesLedgerProduct.getType().equals(1)) {
salesLedgerProduct.setPendingInvoiceTotal(totalPrice.subtract(invoiceTotal));
//鏈紑绁ㄦ暟閲�+閲戦
salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
salesLedgerProduct.setNoInvoiceAmount(totalPrice);
- }else{
+ } else {
salesLedgerProduct.setPendingTicketsTotal(totalPrice.subtract(ticketsTotal));
// 鏈潵绁ㄦ暟閲�+閲戦
salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
@@ -376,7 +382,7 @@
List<ProcessRoute> processRoutes = processRouteMapper.selectList(new QueryWrapper<ProcessRoute>().lambda()
.eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())
.orderByDesc(ProcessRoute::getCreateTime));
- if (processRoutes.size()>0){
+ if (processRoutes.size() > 0) {
ProcessRoute processRoute = processRoutes.get(0);
//鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
ProductProcessRoute productProcessRoute = new ProductProcessRoute();
@@ -413,7 +419,7 @@
}
}
// 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
- String workOrderNoStr ="GD"+ String.format("%s%03d", datePrefix, sequenceNumber);
+ String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
ProductWorkOrder productWorkOrder = new ProductWorkOrder();
productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
productWorkOrder.setProductOrderId(productOrder.getId());
@@ -434,7 +440,7 @@
* 鍒犻櫎鐢熶骇鏁版嵁
*/
public void deleteProductionData(List<Long> productIds) {
- if (productIds == null || productIds.isEmpty()){
+ if (productIds == null || productIds.isEmpty()) {
return;
}
//鎵归噺鏌ヨproductOrder
@@ -533,9 +539,9 @@
// 鍒ゆ柇鐘舵��
BigDecimal taxInclusiveTotalPrice = item.getTaxInclusiveTotalPrice();
BigDecimal invoiceTotal = item.getInvoiceTotal();
- if(taxInclusiveTotalPrice != null && invoiceTotal != null && taxInclusiveTotalPrice.compareTo(invoiceTotal) == 0){
+ if (taxInclusiveTotalPrice != null && invoiceTotal != null && taxInclusiveTotalPrice.compareTo(invoiceTotal) == 0) {
item.setStatusName("宸插畬鎴愪粯娆�");
- }else{
+ } else {
item.setStatusName("鏈畬鎴愪粯娆�");
}
});
@@ -549,9 +555,9 @@
// 鍒ゆ柇鐘舵��
BigDecimal taxInclusiveTotalPrice = item.getTaxInclusiveTotalPrice();
BigDecimal ticketsTotal = item.getTicketsTotal();
- if(taxInclusiveTotalPrice != null && ticketsTotal != null && taxInclusiveTotalPrice.compareTo(ticketsTotal) == 0){
+ if (taxInclusiveTotalPrice != null && ticketsTotal != null && taxInclusiveTotalPrice.compareTo(ticketsTotal) == 0) {
item.setStatusName("宸插畬鎴愪粯娆�");
- }else{
+ } else {
item.setStatusName("鏈畬鎴愪粯娆�");
}
});
@@ -592,6 +598,7 @@
throw new RuntimeException("鍔ㄦ�佹洿鏂颁富琛ㄩ噾棰濆け璐�", e);
}
}
+
@Override
public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) {
//鑾峰彇浜у搧鏈�鏂扮殑宸ヨ壓璺嚎
@@ -610,7 +617,7 @@
//鎵�闇�鏁伴噺
BigDecimal multiply = salesLedgerProduct.getQuantity().multiply(productStructureDto.getUnitQuantity());
- BigDecimal subtract =stockInventory.getQualitity().subtract(stockInventory.getLockedQuantity()).subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
+ BigDecimal subtract = stockInventory.getQualitity().subtract(stockInventory.getLockedQuantity()).subtract(multiply).divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
if (subtract.compareTo(BigDecimal.ZERO) <= 0) {
count++;
stringBuffer.append(productStructureDto.getProductName())
@@ -621,9 +628,9 @@
.append(System.lineSeparator());
}
}
- if (count>0) {
+ if (count > 0) {
return R.fail(stringBuffer.toString());
- }else {
+ } else {
return R.ok();
}
}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/WeighingRecordServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/WeighingRecordServiceImpl.java
index e1a4d06..b909f95 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/WeighingRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/WeighingRecordServiceImpl.java
@@ -4,13 +4,22 @@
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.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.mapper.WeighingRecordMapper;
+import com.ruoyi.sales.pojo.SalesLedger;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.pojo.WeighingRecord;
import com.ruoyi.sales.service.IWeighingRecordService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.List;
@Service
@Slf4j
@@ -18,6 +27,9 @@
public class WeighingRecordServiceImpl extends ServiceImpl<WeighingRecordMapper, WeighingRecord> implements IWeighingRecordService {
private final WeighingRecordMapper weighingRecordMapper;
+ private final SalesLedgerProductMapper salesLedgerProductMapper;
+ private final SalesLedgerMapper salesLedgerMapper;
+ private final StockUtils stockUtils;
@Override
public IPage<WeighingRecord> listPage(Page<WeighingRecord> page, WeighingRecord weighingRecord) {
@@ -43,4 +55,63 @@
WeighingRecord::getShipUnit, weighingRecord.getShipUnit());
return weighingRecordMapper.selectPage(page, queryWrapper);
}
+
+ /**
+ * 鏍规嵁瀹㈡埛銆佷骇鍝佸悕绉般�佽鏍煎瀷鍙峰尮閰嶉攢鍞彴璐︿骇鍝佸苟鍑哄簱
+ * @param receiveUnit 鏀惰揣鍗曚綅锛堝鎴峰悕绉帮級
+ * @param goodsName 璐у悕锛堜骇鍝佸悕绉帮級
+ * @param specification 瑙勬牸
+ * @param quantity 鏁伴噺锛堝噣閲嶏級
+ * @param recordId 纾呭崟璁板綍ID锛堜綔涓哄叧鑱旇褰旾D锛�
+ * @return 鍖归厤鍒扮殑閿�鍞彴璐︿骇鍝両D锛屾湭鍖归厤杩斿洖null
+ */
+ public Long matchAndOutStock(String receiveUnit, String goodsName, String specification, BigDecimal quantity, Long recordId) {
+ // 1. 鏌ヨ鎵�鏈夐攢鍞彴璐︿骇鍝侊紙鍙煡璇㈡湭鍙戣揣鐨勶級
+ LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(SalesLedgerProduct::getType, 1); // 閿�鍞被鍨�
+ List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(queryWrapper);
+ if (productList == null || productList.isEmpty()) {
+ log.warn("鏈壘鍒版湭鍙戣揣鐨勯攢鍞彴璐︿骇鍝佹暟鎹�");
+ return null;
+ }
+
+ // 2. 閬嶅巻鍖归厤锛氬鎴峰悕绉� + 浜у搧澶х被 + 瑙勬牸鍨嬪彿
+ for (SalesLedgerProduct product : productList) {
+ // 鑾峰彇瀵瑰簲鐨勯攢鍞彴璐︿富琛ㄤ俊鎭�
+ SalesLedger salesLedger = salesLedgerMapper.selectById(product.getSalesLedgerId());
+ if (salesLedger == null) {
+ continue;
+ }
+
+ // 鍖归厤鏉′欢锛氭敹璐у崟浣�=瀹㈡埛鍚嶇О锛岃揣鍚�=浜у搧澶х被锛岃鏍�=瑙勬牸鍨嬪彿
+ boolean customerMatch = receiveUnit != null && receiveUnit.equals(salesLedger.getCustomerName());
+ boolean goodsMatch = goodsName != null && goodsName.equals(product.getProductCategory());
+ boolean specMatch = specification != null && specification.equals(product.getSpecificationModel());
+
+ if (customerMatch && goodsMatch && specMatch) {
+ // 3. 鍖归厤鎴愬姛锛屾墽琛屽嚭搴�
+ try {
+ WeighingRecord weighingRecord = new WeighingRecord();
+ weighingRecord.setRecordId(product.getId());
+ weighingRecord.setId(recordId);
+ this.updateById(weighingRecord);
+ stockUtils.substractStock(
+ product.getProductModelId(),
+ quantity,
+ StockOutQualifiedRecordTypeEnum.WEIGHBRIDGE_OUT.getCode(), // 纾呭崟鍑哄簱绫诲瀷
+ recordId // 纾呭崟ID浣滀负鍏宠仈璁板綍ID
+ );
+ log.info("纾呭崟鍑哄簱鎴愬姛锛氬鎴�={}, 浜у搧={}, 瑙勬牸={}, 鏁伴噺={}, 纾呭崟ID={}",
+ receiveUnit, goodsName, specification, quantity, recordId);
+ return product.getId();
+ } catch (Exception e) {
+ log.error("纾呭崟鍑哄簱澶辫触锛歿}", e.getMessage());
+ throw new RuntimeException("鍑哄簱澶辫触锛�" + e.getMessage());
+ }
+ }
+ }
+
+ log.warn("鏈尮閰嶅埌閿�鍞彴璐︿骇鍝侊細瀹㈡埛={}, 浜у搧={}, 瑙勬牸={}", receiveUnit, goodsName, specification);
+ return null;
+ }
}
--
Gitblit v1.9.3