From 530b456eded06e0692e1d8bd5891069439c8f8f8 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 17 四月 2026 15:10:56 +0800
Subject: [PATCH] fix: 1.已发货的销售台账对应的出入库记录做限制不能删除;2.销售台账入库操作后,点击删除,对应的销售入库记录未一并删除;3.销售台账入库状态新增部分入库
---
src/main/resources/mapper/sales/SalesLedgerMapper.xml | 2
src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java | 4
src/main/java/com/ruoyi/stock/pojo/StockInRecord.java | 6
src/main/resources/mybatis/mybatis-config.xml | 22 +-
src/main/resources/mapper/stock/StockInventoryMapper.xml | 4
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java | 6
src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java | 15 ++
src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java | 6
src/main/java/com/ruoyi/sales/pojo/SalesLedger.java | 4
src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java | 2
src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java | 47 ++++++
src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java | 72 +++++++++-
doc/河南鹤壁天沐钢化玻璃厂.sql | 14 ++
src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java | 5
src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java | 4
src/main/java/com/ruoyi/sales/dto/SalesProductStockDto.java | 28 ++++
src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java | 24 +-
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | 66 +++++++-
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 34 +++-
src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java | 2
20 files changed, 299 insertions(+), 68 deletions(-)
diff --git "a/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql" "b/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql"
index a5d9b35..0585f98 100644
--- "a/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql"
+++ "b/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql"
@@ -109,3 +109,17 @@
`user_id` int NULL DEFAULT NULL COMMENT '鐢ㄦ埛id',
PRIMARY KEY (`id`)
);
+
+ALTER TABLE `product-inventory-management-hbtmblc`.`stock_in_record`
+ ADD COLUMN `sales_ledger_id` bigint NULL COMMENT '閿�鍞彴璐D' AFTER `weighing_date`,
+ ADD COLUMN `sales_ledger_product_id` bigint NULL COMMENT '閿�鍞彴璐︿骇鍝両D' AFTER `sales_ledger_id`;
+
+ALTER TABLE `product-inventory-management-hbtmblc`.`sales_ledger_product`
+ ADD COLUMN `product_stock_status` int NULL COMMENT '浜у搧鍏ュ簱鐘舵��' AFTER `floor_code`;
+
+ALTER TABLE `product-inventory-management-hbtmblc`.`stock_out_record`
+ MODIFY COLUMN `outbound_batches` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '鍑哄簱鎵规' AFTER `id`,
+ MODIFY COLUMN `stock_out_num` decimal(16, 4) NULL DEFAULT NULL COMMENT '鍑哄簱鏁伴噺' AFTER `outbound_batches`,
+ MODIFY COLUMN `record_id` int NULL DEFAULT NULL COMMENT '鍑哄簱鏉ユ簮id' AFTER `stock_out_num`,
+ ADD COLUMN `sales_ledger_id` bigint NULL COMMENT '閿�鍞鍗旾D' AFTER `type`,
+ ADD COLUMN `sales_ledger_product_id` bigint NULL COMMENT '閿�鍞鍗曚骇鍝両D' AFTER `sales_ledger_id`;
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java b/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
index 3b9bee6..05a6ffb 100644
--- a/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
@@ -12,7 +12,7 @@
QUALITYINSPECT_STOCK_IN("6", "璐ㄦ-鍚堟牸鍏ュ簱"),
DEFECTIVE_PASS("11", "涓嶅悎鏍�-璁╂鏀捐"),
RETURN_HE_IN("14", "閿�鍞��璐�-鍚堟牸鍏ュ簱"),
- SALE_STOCK_IN("15", "閿�鍞�-鍚堟牸鍏ュ簱");
+ SALE_STOCK_IN("15", "閿�鍞鍗�-鍚堟牸鍏ュ簱");
private final String code;
diff --git a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
index 819ce65..b1bb2cf 100644
--- a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
+++ b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -35,12 +35,13 @@
/**
* 涓嶅悎鏍煎叆搴�
+ *
* @param productModelId
* @param quantity
* @param recordType
* @param recordId
*/
- public void addUnStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId) {
+ public void addUnStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId) {
StockUninventoryDto stockUninventoryDto = new StockUninventoryDto();
stockUninventoryDto.setRecordId(recordId);
stockUninventoryDto.setRecordType(String.valueOf(recordType));
@@ -51,12 +52,13 @@
/**
* 涓嶅悎鏍煎嚭搴�
+ *
* @param productModelId
* @param quantity
* @param recordType
* @param recordId
*/
- public void subtractUnStock(Long productModelId, BigDecimal quantity, Integer recordType,Long recordId) {
+ public void subtractUnStock(Long productModelId, BigDecimal quantity, Integer recordType, Long recordId) {
StockUninventoryDto stockUninventoryDto = new StockUninventoryDto();
stockUninventoryDto.setRecordId(recordId);
stockUninventoryDto.setRecordType(String.valueOf(recordType));
@@ -67,33 +69,69 @@
/**
* 鍚堟牸鍏ュ簱
+ *
* @param productModelId
* @param quantity
* @param recordType
* @param recordId
*/
- public void addStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId) {
+ public void addStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId) {
+ addStock(null, null, productModelId, quantity, recordType, recordId);
+ }
+
+ /**
+ * 鍚堟牸鍏ュ簱
+ *
+ * @param productModelId
+ * @param quantity
+ * @param recordType
+ * @param recordId
+ */
+ public void addStock(Long salesLedgerId, Long salesLedgerProductId, Long productModelId, BigDecimal quantity, String recordType, Long recordId) {
StockInventoryDto stockInventoryDto = new StockInventoryDto();
stockInventoryDto.setRecordId(recordId);
stockInventoryDto.setRecordType(String.valueOf(recordType));
stockInventoryDto.setQualitity(quantity);
stockInventoryDto.setProductModelId(productModelId);
+ stockInventoryDto.setSalesLedgerId(salesLedgerId);
+ stockInventoryDto.setSalesLedgerProductId(salesLedgerProductId);
stockInventoryService.addstockInventory(stockInventoryDto);
+ }
+
+
+ /**
+ * 鍚堟牸鍑哄簱
+ *
+ * @param productModelId
+ * @param quantity
+ * @param recordType
+ * @param recordId
+ */
+ public void substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId) {
+ StockInventoryDto stockInventoryDto = new StockInventoryDto();
+ stockInventoryDto.setRecordId(recordId);
+ stockInventoryDto.setRecordType(String.valueOf(recordType));
+ stockInventoryDto.setQualitity(quantity);
+ stockInventoryDto.setProductModelId(productModelId);
+ stockInventoryService.subtractStockInventory(stockInventoryDto);
}
/**
* 鍚堟牸鍑哄簱
+ *
* @param productModelId
* @param quantity
* @param recordType
* @param recordId
*/
- public void substractStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId) {
+ public void substractStock(Long salesId, Long salseProductId, Long productModelId, BigDecimal quantity, String recordType, Long recordId) {
StockInventoryDto stockInventoryDto = new StockInventoryDto();
stockInventoryDto.setRecordId(recordId);
stockInventoryDto.setRecordType(String.valueOf(recordType));
stockInventoryDto.setQualitity(quantity);
stockInventoryDto.setProductModelId(productModelId);
+ stockInventoryDto.setSalesLedgerId(salesId);
+ stockInventoryDto.setSalesLedgerProductId(salseProductId);
stockInventoryService.subtractStockInventory(stockInventoryDto);
}
@@ -106,6 +144,7 @@
stockInRecordService.batchDelete(Collections.singletonList(one.getId()));
}
}
+
public void deleteStockOutRecord(Long recordId, String recordType) {
StockOutRecord one = stockOutRecordService.getOne(new QueryWrapper<StockOutRecord>()
.lambda().eq(StockOutRecord::getRecordId, recordId)
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
index 01c2c96..58c3234 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -397,8 +397,8 @@
@PostMapping("/salesStock")
@ApiOperation("閿�鍞彴璐︿骇鍝佸叆搴�")
- public AjaxResult salesStock(@RequestBody SalesLedger salesLedger) {
- salesLedgerService.salesStock(salesLedger);
+ public AjaxResult salesStock(@RequestBody SalesProductStockDto dto) {
+ salesLedgerService.salesStock(dto);
return AjaxResult.success();
}
diff --git a/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java b/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
index 49548e1..eb82017 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
@@ -40,7 +40,7 @@
@GetMapping("/listPage")
@ApiOperation("鍙戣揣瀹℃壒鍒楄〃")
public AjaxResult listPage(Page page, ShipmentApproval req) {
- IPage<ShipmentApproval> listPage = shipmentApprovalService.listPage(page,req);
+ IPage<ShipmentApproval> listPage = shipmentApprovalService.listPage(page, req);
return AjaxResult.success(listPage);
}
@@ -87,12 +87,11 @@
//鍑哄簱
- stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
+ stockUtils.addStock(salesLedgerProduct.getSalesLedgerId(), salesLedgerProduct.getId(), salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
}
return AjaxResult.success();
}
-
/**
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesProductStockDto.java b/src/main/java/com/ruoyi/sales/dto/SalesProductStockDto.java
new file mode 100644
index 0000000..70c1d06
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/dto/SalesProductStockDto.java
@@ -0,0 +1,28 @@
+package com.ruoyi.sales.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * <br>
+ * 閿�鍞鍗曚骇鍝佸叆搴揇to
+ * </br>
+ *
+ * @author deslrey
+ * @version 1.0
+ * @since 2026/4/17 13:53
+ */
+@Data
+@ApiModel(value = "SalesProductStockDto", description = "閿�鍞鍗曚骇鍝佸叆搴揇to")
+public class SalesProductStockDto {
+
+ @ApiModelProperty("閿�鍞鍗旾d")
+ private Long salesLedgerId;
+
+ @ApiModelProperty("閿�鍞鍗曚骇鍝両d")
+ private List<Long> salesLedgerProducts;
+
+}
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
index e77e4f7..18cecc3 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -149,9 +149,9 @@
private Integer deliveryStatus;
/**
- * 鍏ュ簱鐘舵�侊細0-鏈叆搴擄紝1-宸插叆搴�
+ * 鍏ュ簱鐘舵�侊細0-鏈叆搴擄紝1-閮ㄥ垎鍏ュ簱锛�2-宸插叆搴�
*/
- @ApiModelProperty("鍏ュ簱鐘舵�侊細0-鏈叆搴擄紝1-宸插叆搴�")
+ @ApiModelProperty("鍏ュ簱鐘舵�侊細0-鏈叆搴擄紝1-閮ㄥ垎鍏ュ簱锛�2-宸插叆搴�")
private Integer stockStatus;
@TableField(exist = false)
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index 46b3ad3..02d5080 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -292,6 +292,12 @@
@ApiModelProperty("妤煎眰缂栧彿")
private String floorCode;
+ /**
+ * 浜у搧鍏ュ簱鐘舵�� 0-鏈叆搴擄紝1-宸插叆搴�
+ */
+ @ApiModelProperty("浜у搧鍏ュ簱鐘舵��")
+ private Integer productStockStatus;
+
@TableField(exist = false)
@ApiModelProperty("閿�鍞骇鍝侀澶栧姞宸�")
private List<SalesLedgerProductProcess> salesProductProcessList;
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
index 444be9d..2e9d5b4 100644
--- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -67,5 +67,5 @@
List<SalesLabelDto> salesLabel(Long salesLedgerId);
- void salesStock(SalesLedger salesLedger);
+ void salesStock(SalesProductStockDto dto);
}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index 276e8c6..4847c22 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -49,7 +49,13 @@
import com.ruoyi.sales.service.ISalesLedgerProductProcessService;
import com.ruoyi.sales.service.ISalesLedgerService;
import com.ruoyi.stock.dto.StockInventoryDto;
+import com.ruoyi.stock.mapper.StockInRecordMapper;
+import com.ruoyi.stock.mapper.StockOutRecordMapper;
+import com.ruoyi.stock.pojo.StockInRecord;
+import com.ruoyi.stock.pojo.StockOutRecord;
+import com.ruoyi.stock.service.StockInRecordService;
import com.ruoyi.stock.service.StockInventoryService;
+import com.ruoyi.stock.service.StockOutRecordService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
@@ -130,6 +136,10 @@
private final ISalesLedgerProcessRouteService salesLedgerProcessRouteService;
private final StockInventoryService stockInventoryService;
+ private final StockInRecordMapper stockInRecordMapper;
+ private final StockOutRecordMapper stockOutRecordMapper;
+ private final StockInRecordService stockInRecordService;
+ private final StockOutRecordService stockOutRecordService;
@Autowired
private SysDeptMapper sysDeptMapper;
@@ -703,6 +713,25 @@
if (CollectionUtils.isNotEmpty(shippingInfos)) {
shippingInfoServiceImpl.delete(shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList()));
}
+ // 鍒犻櫎鍏宠仈鐨勫叆搴�/鍑哄簱璁板綍锛堣蛋鏈嶅姟灞傚垹闄わ紝瑙﹀彂搴撳瓨鏁伴噺鍥為��锛�
+ List<Long> stockInRecordIds = stockInRecordMapper.selectList(new LambdaQueryWrapper<StockInRecord>()
+ .in(StockInRecord::getSalesLedgerId, idList)
+ .select(StockInRecord::getId))
+ .stream()
+ .map(StockInRecord::getId)
+ .collect(Collectors.toList());
+ if (CollectionUtils.isNotEmpty(stockInRecordIds)) {
+ stockInRecordService.batchDelete(stockInRecordIds);
+ }
+ List<Long> stockOutRecordIds = stockOutRecordMapper.selectList(new LambdaQueryWrapper<StockOutRecord>()
+ .in(StockOutRecord::getSalesLedgerId, idList)
+ .select(StockOutRecord::getId))
+ .stream()
+ .map(StockOutRecord::getId)
+ .collect(Collectors.toList());
+ if (CollectionUtils.isNotEmpty(stockOutRecordIds)) {
+ stockOutRecordService.batchDelete(stockOutRecordIds);
+ }
// 鍒犻櫎闄勪欢琛�
commonFileService.deleteByBusinessIds(idList, FileNameType.SALE.getValue());
@@ -860,6 +889,7 @@
if (!updateList.isEmpty()) {
for (SalesLedgerProduct product : updateList) {
product.setType(type.getCode());
+ product.setProductStockStatus(0);
salesLedgerProductMapper.updateById(product);
// 娓呯┖閿�鍞骇鍝佺粦瀹氱殑鍔犲伐
salesLedgerProductProcessBindService.updateProductProcessBind(product.getSalesProductProcessList(), product.getId());
@@ -872,6 +902,7 @@
salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice());
+ salesLedgerProduct.setProductStockStatus(0);
salesLedgerProductMapper.insert(salesLedgerProduct);
// 缁戝畾浜у搧棰濆鍔犲伐
// 娓呯┖閿�鍞骇鍝佺粦瀹氱殑鍔犲伐
@@ -1509,23 +1540,27 @@
@Override
@Transactional(rollbackFor = Exception.class)
- public void salesStock(SalesLedger salesLedger) {
- if (salesLedger == null || salesLedger.getId() == null) {
+ public void salesStock(SalesProductStockDto dto) {
+ if (dto == null || dto.getSalesLedgerId() == null) {
throw new NullPointerException("鍏ュ簱澶辫触,璇烽�夋嫨闇�瑕佸叆搴撶殑閿�鍞鍗�");
}
// 鏌ヨ閿�鍞鍗曟槸鍚﹀瓨鍦�
- SalesLedger ledger = baseMapper.selectById(salesLedger.getId());
+ SalesLedger ledger = baseMapper.selectById(dto.getSalesLedgerId());
if (ledger == null) {
throw new ServiceException("鍏ュ簱澶辫触,閿�鍞鍗曚笉瀛樺湪");
}
if (ledger.getStockStatus() == null) {
throw new ServiceException("鍏ュ簱澶辫触,閿�鍞鍗曞叆搴撶姸鎬佸紓甯�");
}
- if (ledger.getStockStatus() == 1) {
+ if (ledger.getStockStatus() == 2) {
throw new ServiceException("鍏ュ簱澶辫触,璇ラ攢鍞鍗曞凡鍏ュ簱,璇峰嬁閲嶅鍏ュ簱");
}
+ List<Long> products = dto.getSalesLedgerProducts();
+ if (products == null || products.isEmpty()) {
+ throw new ServiceException("鍏ュ簱澶辫触,鍏ュ簱浜у搧涓嶈兘涓虹┖");
+ }
// 鏌ヨ閿�鍞鍗曠殑浜у搧
- List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(Wrappers.<SalesLedgerProduct>lambdaQuery().eq(SalesLedgerProduct::getSalesLedgerId, ledger.getId()));
+ List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(Wrappers.<SalesLedgerProduct>lambdaQuery().in(SalesLedgerProduct::getId, products));
if (salesLedgerProducts == null || salesLedgerProducts.isEmpty()) {
throw new ServiceException("鍏ュ簱澶辫触,鏈煡璇㈠埌璇ラ攢鍞鍗曠殑閿�鍞骇鍝�");
}
@@ -1533,15 +1568,20 @@
if (product.getProductModelId() == null) {
continue;
}
- StockInventoryDto dto = new StockInventoryDto();
- dto.setRecordId(product.getId());
- dto.setRecordType(StockInQualifiedRecordTypeEnum.SALE_STOCK_IN.getCode());
- dto.setQualitity(product.getQuantity());
- dto.setProductModelId(product.getProductModelId());
- stockInventoryService.addstockInventory(dto);
+ StockInventoryDto stockInventoryDto = new StockInventoryDto();
+ stockInventoryDto.setRecordId(product.getId());
+ stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.SALE_STOCK_IN.getCode());
+ stockInventoryDto.setQualitity(product.getQuantity());
+ stockInventoryDto.setProductModelId(product.getProductModelId());
+ stockInventoryDto.setSalesLedgerId(ledger.getId());
+ stockInventoryDto.setSalesLedgerProductId(product.getId());
+ stockInventoryService.addstockInventory(stockInventoryDto);
}
- // 鏇存柊閿�鍞鍗曞叆搴撶姸鎬�
- ledger.setStockStatus(1);
+ // 鎸夐攢鍞鍗曚骇鍝佸叆搴撴儏鍐垫洿鏂颁富鍗曞叆搴撶姸鎬侊細1-閮ㄥ垎鍏ュ簱锛�2-宸插叆搴�
+ List<SalesLedgerProduct> ledgerAllProducts = salesLedgerProductMapper.selectList(Wrappers.<SalesLedgerProduct>lambdaQuery().eq(SalesLedgerProduct::getSalesLedgerId, ledger.getId()));
+ boolean hasStocked = CollectionUtils.isNotEmpty(ledgerAllProducts) && ledgerAllProducts.stream().anyMatch(item -> Objects.equals(item.getProductStockStatus(), 1));
+ boolean allStocked = CollectionUtils.isNotEmpty(ledgerAllProducts) && ledgerAllProducts.stream().allMatch(item -> Objects.equals(item.getProductStockStatus(), 1));
+ ledger.setStockStatus(allStocked ? 2 : (hasStocked ? 1 : 0));
baseMapper.updateById(ledger);
}
}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
index 5394ded..fe8e425 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -24,9 +24,11 @@
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.springframework.transaction.annotation.Transactional;
+
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
+
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -68,7 +70,7 @@
@Override
public IPage<ShippingInfoDto> listPage(Page page, ShippingInfo req) {
IPage<ShippingInfoDto> listPage = shippingInfoMapper.listPage(page, req);
- listPage.getRecords().forEach(item ->{
+ listPage.getRecords().forEach(item -> {
item.setCommonFileList(commonFileService.getFileListByBusinessId(item.getId(), FileNameType.SHIP.getValue()));
});
return listPage;
@@ -82,10 +84,10 @@
throw new RuntimeException("鍙戣揣淇℃伅涓嶅瓨鍦�");
}
//鎵e噺搴撳瓨
- if(!"宸插彂璐�".equals(byId.getStatus())){
+ if (!"宸插彂璐�".equals(byId.getStatus())) {
SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(byId.getSalesLedgerProductId());
if (salesLedgerProduct != null) {
- stockUtils.substractStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
+ stockUtils.substractStock(salesLedgerProduct.getSalesLedgerId(), salesLedgerProduct.getId(), salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
}
}
byId.setExpressNumber(req.getExpressNumber());
@@ -108,10 +110,10 @@
}
// 杩佺Щ鏂囦欢
- if(CollectionUtils.isNotEmpty(req.getTempFileIds())){
+ if (CollectionUtils.isNotEmpty(req.getTempFileIds())) {
tempFileService.migrateTempFilesToFormal(req.getId(), req.getTempFileIds(), FileNameType.SHIP.getValue());
}
- return update ;
+ return update;
}
@@ -119,21 +121,21 @@
public boolean delete(List<Long> ids) {
List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
.in(ShippingInfo::getId, ids));
- if(CollectionUtils.isEmpty(shippingInfos)) return false;
+ if (CollectionUtils.isEmpty(shippingInfos)) return false;
// 鍒犻櫎闄勪欢
commonFileService.deleteByBusinessIds(ids, FileNameType.SHIP.getValue());
// 鎵e凡鍙戣揣搴撳瓨
for (ShippingInfo shippingInfo : shippingInfos) {
- if("宸插彂璐�".equals(shippingInfo.getStatus())) {
+ if ("宸插彂璐�".equals(shippingInfo.getStatus())) {
stockUtils.deleteStockOutRecord(shippingInfo.getId(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode());
}
}
// 鍒犻櫎鍙戣揣瀹℃壒
- if(CollectionUtils.isNotEmpty(shippingInfos)){
- for (ShippingInfo shippingInfo : shippingInfos){
+ if (CollectionUtils.isNotEmpty(shippingInfos)) {
+ for (ShippingInfo shippingInfo : shippingInfos) {
ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>()
.like(ApproveProcess::getApproveReason, shippingInfo.getShippingNo()));
- if(one != null){
+ if (one != null) {
approveProcessService.delByIds(Collections.singletonList(one.getId()));
}
}
@@ -144,7 +146,7 @@
@Override
public List<SalesLedgerProductDto> getReturnManagementDtoById(Long shippingId) {
- return shippingInfoMapper.getReturnManagementDtoById(shippingId );
+ return shippingInfoMapper.getReturnManagementDtoById(shippingId);
}
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
index 125b52b..0aa38f0 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
@@ -39,4 +39,8 @@
private BigDecimal currentStock;
private BigDecimal unLockedQuantity;
+
+ private Long salesLedgerId;
+
+ private Long salesLedgerProductId;
}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java b/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
index 395d18f..fc5af97 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
@@ -62,4 +62,10 @@
@ApiModelProperty(value = "淇敼鐢ㄦ埛")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Integer updateUser;
+
+ @ApiModelProperty("閿�鍞鍗旾D")
+ private Long salesLedgerId;
+
+ @ApiModelProperty("閿�鍞鍗曚骇鍝両D")
+ private Long salesLedgerProductId;
}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java b/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
index e4e3b82..9d66234 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
@@ -71,4 +71,10 @@
@ApiModelProperty(value = "绫诲瀷 0鍚堟牸鍏ュ簱 1涓嶅悎鏍煎叆搴�")
private String type;
+
+ @ApiModelProperty("閿�鍞鍗旾D")
+ private Long salesLedgerId;
+
+ @ApiModelProperty("閿�鍞鍗曚骇鍝両D")
+ private Long salesLedgerProductId;
}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
index 30e545f..1bbba92 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -2,6 +2,8 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
@@ -11,6 +13,10 @@
import com.ruoyi.common.utils.OrderUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedger;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
@@ -28,6 +34,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.List;
+import java.util.Objects;
@Service
@AllArgsConstructor
@@ -36,6 +43,8 @@
private StockInRecordMapper stockInRecordMapper;
private StockInventoryMapper stockInventoryMapper;
private StockUninventoryMapper stockUninventoryMapper;
+ private SalesLedgerProductMapper salesLedgerProductMapper;
+ private SalesLedgerMapper salesLedgerMapper;
@Override
public IPage<StockInRecordDto> listPage(Page page, StockInRecordDto stockInRecordDto) {
@@ -58,7 +67,7 @@
public int update(Long id, StockInRecordDto stockInRecordDto) {
// 鍒ゆ柇瀵硅薄鏄惁瀛樺湪
StockInRecord stockInRecord = stockInRecordMapper.selectById(id);
- if (stockInRecord == null){
+ if (stockInRecord == null) {
throw new BaseException("璇ュ叆搴撹褰曚笉瀛樺湪,鏃犳硶鏇存柊!!!");
}
@@ -72,29 +81,76 @@
public int batchDelete(List<Long> ids) {
for (Long id : ids) {
StockInRecord stockInRecord = stockInRecordMapper.selectById(id);
+ validateCanDeleteBySalesLedger(stockInRecord);
if (stockInRecord.getType().equals("0")) {
StockInventory stockInventory = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, stockInRecord.getProductModelId()));
if (stockInventory == null) {
throw new BaseException("搴撳瓨璁板綍涓病鏈夊搴旂殑浜у搧,鏃犳硶鍒犻櫎!!!");
- }else {
+ } else {
StockInventoryDto stockInRecordDto = new StockInventoryDto();
stockInRecordDto.setProductModelId(stockInventory.getProductModelId());
stockInRecordDto.setQualitity(stockInRecord.getStockInNum());
- stockInventoryMapper.updateSubtractStockInventory(stockInRecordDto);
+ int affectRows = stockInventoryMapper.updateSubtractStockInventory(stockInRecordDto);
+ if (affectRows <= 0) {
+ throw new BaseException("搴撳瓨鍥為��澶辫触,褰撳墠搴撳瓨涓嶈冻,鏃犳硶鍒犻櫎璇ュ叆搴撹褰�");
+ }
+ // 閿�鍞叆搴撹褰曞垹闄ゆ椂锛屽洖閫�閿�鍞骇鍝佸拰閿�鍞鍗曞叆搴撶姸鎬�
+ rollbackSalesStockStatus(stockInRecord);
}
- }else if (stockInRecord.getType().equals("1")) {
+ } else if (stockInRecord.getType().equals("1")) {
StockUninventory stockUninventory = stockUninventoryMapper.selectOne(new LambdaQueryWrapper<StockUninventory>().eq(StockUninventory::getProductModelId, stockInRecord.getProductModelId()));
if (stockUninventory == null) {
throw new BaseException("搴撳瓨璁板綍涓病鏈夊搴旂殑浜у搧,鏃犳硶鍒犻櫎!!!");
- }else {
+ } else {
StockUninventoryDto stockUninventoryDto = new StockUninventoryDto();
stockUninventoryDto.setProductModelId(stockUninventory.getProductModelId());
stockUninventoryDto.setQualitity(stockInRecord.getStockInNum());
- stockUninventoryMapper.updateSubtractStockUnInventory(stockUninventoryDto);
+ int affectRows = stockUninventoryMapper.updateSubtractStockUnInventory(stockUninventoryDto);
+ if (affectRows <= 0) {
+ throw new BaseException("涓嶅悎鏍煎簱瀛樺洖閫�澶辫触,褰撳墠搴撳瓨涓嶈冻,鏃犳硶鍒犻櫎璇ュ叆搴撹褰�");
+ }
}
}
}
return stockInRecordMapper.deleteBatchIds(ids);
+ }
+
+ private void validateCanDeleteBySalesLedger(StockInRecord stockInRecord) {
+ if (stockInRecord == null || stockInRecord.getSalesLedgerId() == null) {
+ return;
+ }
+ SalesLedger salesLedger = salesLedgerMapper.selectById(stockInRecord.getSalesLedgerId());
+ if (salesLedger != null && Objects.equals(salesLedger.getDeliveryStatus(), 5)) {
+ throw new BaseException("閿�鍞鍗曞凡鍙戣揣,瀵瑰簲鍏ュ簱璁板綍涓嶅厑璁稿垹闄�");
+ }
+ }
+
+ private void rollbackSalesStockStatus(StockInRecord stockInRecord) {
+ if (stockInRecord == null || stockInRecord.getSalesLedgerProductId() == null) {
+ return;
+ }
+ SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(stockInRecord.getSalesLedgerProductId());
+ if (salesLedgerProduct == null) {
+ return;
+ }
+ salesLedgerProduct.setProductStockStatus(0);
+ salesLedgerProductMapper.updateById(salesLedgerProduct);
+
+ Long salesLedgerId = stockInRecord.getSalesLedgerId() != null ? stockInRecord.getSalesLedgerId() : salesLedgerProduct.getSalesLedgerId();
+ if (salesLedgerId == null) {
+ return;
+ }
+ SalesLedger salesLedger = salesLedgerMapper.selectById(salesLedgerId);
+ if (salesLedger == null) {
+ return;
+ }
+ List<SalesLedgerProduct> ledgerProducts = salesLedgerProductMapper.selectList(Wrappers.<SalesLedgerProduct>lambdaQuery().eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerId));
+ boolean hasStocked = CollectionUtils.isNotEmpty(ledgerProducts)
+ && ledgerProducts.stream().anyMatch(item -> Objects.equals(item.getProductStockStatus(), 1));
+ boolean allStocked = CollectionUtils.isNotEmpty(ledgerProducts)
+ && ledgerProducts.stream().allMatch(item -> Objects.equals(item.getProductStockStatus(), 1));
+ salesLedger.setStockStatus(allStocked ? 2 : (hasStocked ? 1 : 0));
+ salesLedgerMapper.updateById(salesLedger);
}
@Override
@@ -103,11 +159,11 @@
for (StockInRecordExportData stockInRecordExportData : list) {
if (stockInRecordExportData.getType().equals("0")) {
stockInRecordExportData.setRecordType(EnumUtil.fromCode(StockOutQualifiedRecordTypeEnum.class, Integer.parseInt(stockInRecordExportData.getRecordType())).getValue());
- }else {
+ } else {
stockInRecordExportData.setRecordType(EnumUtil.fromCode(StockInUnQualifiedRecordTypeEnum.class, Integer.parseInt(stockInRecordExportData.getRecordType())).getValue());
}
}
ExcelUtil<StockInRecordExportData> util = new ExcelUtil<>(StockInRecordExportData.class);
- util.exportExcel(response,list, "鍏ュ簱璁板綍淇℃伅");
+ util.exportExcel(response, list, "鍏ュ簱璁板綍淇℃伅");
}
}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
index 5cb6dda..d98bc5a 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -7,6 +7,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
+import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
@@ -42,10 +43,11 @@
@AllArgsConstructor
public class StockInventoryServiceImpl extends ServiceImpl<StockInventoryMapper, StockInventory> implements StockInventoryService {
- private StockInventoryMapper stockInventoryMapper;
+ private StockInventoryMapper stockInventoryMapper;
private StockInRecordService stockInRecordService;
private StockOutRecordService stockOutRecordService;
private SalesLedgerProductMapper salesLedgerProductMapper;
+
@Override
public IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto) {
return stockInventoryMapper.pagestockInventory(page, stockInventoryDto);
@@ -56,12 +58,22 @@
@Transactional(rollbackFor = Exception.class)
public Boolean addstockInventory(StockInventoryDto stockInventoryDto) {
//鏂板鍏ュ簱璁板綍鍐嶆坊鍔犲簱瀛�
+ // 鏇存柊浜у搧鍏ュ簱鐘舵��
+ SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(stockInventoryDto.getSalesLedgerProductId());
+ if (salesLedgerProduct == null) {
+ throw new ServiceException("鍏ュ簱澶辫触,閿�鍞骇鍝佷笉瀛樺湪");
+ }
+ salesLedgerProduct.setProductStockStatus(1);
+ salesLedgerProductMapper.updateById(salesLedgerProduct);
+
StockInRecordDto stockInRecordDto = new StockInRecordDto();
stockInRecordDto.setRecordId(stockInventoryDto.getRecordId());
stockInRecordDto.setRecordType(stockInventoryDto.getRecordType());
stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity());
stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
stockInRecordDto.setType("0");
+ stockInRecordDto.setSalesLedgerId(stockInventoryDto.getSalesLedgerId());
+ stockInRecordDto.setSalesLedgerProductId(stockInventoryDto.getSalesLedgerProductId());
stockInRecordService.add(stockInRecordDto);
//鍐嶈繘琛屾柊澧炲簱瀛樻暟閲忓簱瀛�
//鍏堟煡璇㈠簱瀛樿〃涓殑浜у搧鏄惁瀛樺湪锛屼笉瀛樺湪鏂板锛屽瓨鍦ㄦ洿鏂�
@@ -75,8 +87,8 @@
newStockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity());
newStockInventory.setWarnNum(stockInventoryDto.getWarnNum());
stockInventoryMapper.insert(newStockInventory);
- }else {
- stockInventoryMapper.updateAddStockInventory(stockInventoryDto);
+ } else {
+ stockInventoryMapper.updateAddStockInventory(stockInventoryDto);
}
return true;
}
@@ -92,6 +104,8 @@
stockOutRecordDto.setStockOutNum(stockInventoryDto.getQualitity());
stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
stockOutRecordDto.setType("0");
+ stockOutRecordDto.setSalesLedgerId(stockInventoryDto.getSalesLedgerId());
+ stockOutRecordDto.setSalesLedgerProductId(stockInventoryDto.getSalesLedgerProductId());
stockOutRecordService.add(stockOutRecordDto);
StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()));
if (ObjectUtils.isEmpty(oldStockInventory)) {
@@ -132,7 +146,7 @@
stockInventoryDto.setQualitity(dto.getQualitity());
stockInventoryDto.setRemark(dto.getRemark());
stockInventoryDto.setWarnNum(dto.getWarnNum());
- if (ObjectUtils.isNotEmpty(dto.getLockedQuantity())&&dto.getLockedQuantity().compareTo(dto.getQualitity())>0) {
+ if (ObjectUtils.isNotEmpty(dto.getLockedQuantity()) && dto.getLockedQuantity().compareTo(dto.getQualitity()) > 0) {
throw new RuntimeException("鍐荤粨鏁伴噺涓嶈兘瓒呰繃鏈瀵煎叆鐨勫簱瀛樻暟閲�");
}
stockInventoryDto.setLockedQuantity(dto.getLockedQuantity());
@@ -171,28 +185,28 @@
List<StockInventoryExportData> list = stockInventoryMapper.listStockInventoryExportData(stockInventoryDto);
ExcelUtil<StockInventoryExportData> util = new ExcelUtil<>(StockInventoryExportData.class);
- util.exportExcel(response,list, "搴撳瓨淇℃伅");
+ util.exportExcel(response, list, "搴撳瓨淇℃伅");
}
@Override
public IPage<StockInRecordDto> stockInventoryPage(StockInventoryDto stockInventoryDto, Page page) {
- return stockInventoryMapper.stockInventoryPage(stockInventoryDto,page);
+ return stockInventoryMapper.stockInventoryPage(stockInventoryDto, page);
}
@Override
public IPage<StockInventoryDto> stockInAndOutRecord(StockInventoryDto stockInventoryDto, Page page) {
- return stockInventoryMapper.stockInAndOutRecord(stockInventoryDto,page);
+ return stockInventoryMapper.stockInAndOutRecord(stockInventoryDto, page);
}
@Override
public Boolean frozenStock(StockInventoryDto stockInventoryDto) {
StockInventory stockInventory = stockInventoryMapper.selectById(stockInventoryDto.getId());
- if (stockInventory.getQualitity().compareTo(stockInventoryDto.getLockedQuantity())<0) {
+ if (stockInventory.getQualitity().compareTo(stockInventoryDto.getLockedQuantity()) < 0) {
throw new RuntimeException("鍐荤粨鏁伴噺涓嶈兘瓒呰繃搴撳瓨鏁伴噺");
}
if (ObjectUtils.isEmpty(stockInventory.getLockedQuantity())) {
stockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity());
- }else {
+ } else {
stockInventory.setLockedQuantity(stockInventory.getLockedQuantity().add(stockInventoryDto.getLockedQuantity()));
}
return this.updateById(stockInventory);
@@ -201,7 +215,7 @@
@Override
public Boolean thawStock(StockInventoryDto stockInventoryDto) {
StockInventory stockInventory = stockInventoryMapper.selectById(stockInventoryDto.getId());
- if (stockInventory.getLockedQuantity().compareTo(stockInventoryDto.getLockedQuantity())<0) {
+ if (stockInventory.getLockedQuantity().compareTo(stockInventoryDto.getLockedQuantity()) < 0) {
throw new RuntimeException("瑙e喕鏁伴噺涓嶈兘瓒呰繃鍐荤粨鏁伴噺");
}
stockInventory.setLockedQuantity(stockInventory.getLockedQuantity().subtract(stockInventoryDto.getLockedQuantity()));
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
index e01fe5d..7dd9576 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
@@ -11,6 +11,8 @@
import com.ruoyi.common.utils.OrderUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
+import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockOutRecordDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
@@ -28,6 +30,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.List;
+import java.util.Objects;
/**
* <p>
@@ -43,6 +46,7 @@
private StockOutRecordMapper stockOutRecordMapper;
private StockInventoryMapper stockInventoryMapper;
private StockUninventoryMapper stockUninventoryMapper;
+ private SalesLedgerMapper salesLedgerMapper;
@Override
public IPage<StockOutRecordDto> listPage(Page page, StockOutRecordDto stockOutRecordDto) {
@@ -75,6 +79,7 @@
public int batchDelete(List<Long> ids) {
for (Long id : ids) {
StockOutRecord stockOutRecord = stockOutRecordMapper.selectById(id);
+ validateCanDeleteBySalesLedger(stockOutRecord);
if (stockOutRecord.getType().equals("0")) {
StockInventory stockInventory = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, stockOutRecord.getProductModelId()));
if (stockInventory == null) {
@@ -100,6 +105,16 @@
return stockOutRecordMapper.deleteBatchIds(ids);
}
+ private void validateCanDeleteBySalesLedger(StockOutRecord stockOutRecord) {
+ if (stockOutRecord == null || stockOutRecord.getSalesLedgerId() == null) {
+ return;
+ }
+ SalesLedger salesLedger = salesLedgerMapper.selectById(stockOutRecord.getSalesLedgerId());
+ if (salesLedger != null && Objects.equals(salesLedger.getDeliveryStatus(), 5)) {
+ throw new BaseException("閿�鍞鍗曞凡鍙戣揣,瀵瑰簲鍑哄簱璁板綍涓嶅厑璁稿垹闄�");
+ }
+ }
+
@Override
public void exportStockOutRecord(HttpServletResponse response, StockOutRecordDto stockOutRecordDto) {
List<StockOutRecordExportData> list = stockOutRecordMapper.listStockOutRecordExportData(stockOutRecordDto);
diff --git a/src/main/resources/mapper/sales/SalesLedgerMapper.xml b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
index 06f4591..38592a3 100644
--- a/src/main/resources/mapper/sales/SalesLedgerMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -96,7 +96,7 @@
AND T1.stock_status = #{salesLedgerDto.stockStatus}
</if>
</where>
- ORDER BY T1.entry_date DESC
+ ORDER BY T1.entry_date DESC,T1.id DESC
</select>
<select id="selectIncomeStats" resultType="com.ruoyi.home.dto.IncomeExpenseAnalysisDto">
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index ebda2fc..3931022 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -51,6 +51,7 @@
</set>
where product_model_id = #{ew.productModelId} and qualitity >= #{ew.qualitity}
</update>
+
<select id="pagestockInventory" resultType="com.ruoyi.stock.dto.StockInventoryDto">
select si.id,
si.qualitity,
@@ -66,7 +67,7 @@
pm.unit,
p.product_name
from stock_inventory si
- left join product_model pm on si. = pm.id
+ left join product_model pm on si.product_model_id = pm.id
left join product p on pm.product_id = p.id
where 1 = 1
<if test="ew.productName != null and ew.productName !=''">
@@ -76,6 +77,7 @@
and si.product_model_id = #{ew.productModelId}
</if>
</select>
+
<select id="listStockInventoryExportData" resultType="com.ruoyi.stock.execl.StockInventoryExportData">
select si.qualitity,
pm.model,
diff --git a/src/main/resources/mybatis/mybatis-config.xml b/src/main/resources/mybatis/mybatis-config.xml
index ee4d2a1..2552373 100644
--- a/src/main/resources/mybatis/mybatis-config.xml
+++ b/src/main/resources/mybatis/mybatis-config.xml
@@ -1,21 +1,21 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
-PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-config.dtd">
+ PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 鍏ㄥ眬鍙傛暟 -->
<settings>
<!-- 浣垮叏灞�鐨勬槧灏勫櫒鍚敤鎴栫鐢ㄧ紦瀛� -->
- <setting name="cacheEnabled" value="true" />
+ <setting name="cacheEnabled" value="true"/>
<!-- 鍏佽JDBC 鏀寔鑷姩鐢熸垚涓婚敭 -->
- <setting name="useGeneratedKeys" value="true" />
+ <setting name="useGeneratedKeys" value="true"/>
<!-- 閰嶇疆榛樿鐨勬墽琛屽櫒.SIMPLE灏辨槸鏅�氭墽琛屽櫒;REUSE鎵ц鍣ㄤ細閲嶇敤棰勫鐞嗚鍙�(prepared statements);BATCH鎵ц鍣ㄥ皢閲嶇敤璇彞骞舵墽琛屾壒閲忔洿鏂� -->
- <setting name="defaultExecutorType" value="SIMPLE" />
- <!-- 鎸囧畾 MyBatis 鎵�鐢ㄦ棩蹇楃殑鍏蜂綋瀹炵幇 -->
- <setting name="logImpl" value="SLF4J" />
-<!-- <setting name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl" />-->
+ <setting name="defaultExecutorType" value="SIMPLE"/>
+ <!-- 鎸囧畾 MyBatis 鎵�鐢ㄦ棩蹇楃殑鍏蜂綋瀹炵幇 -->
+ <!-- <setting name="logImpl" value="SLF4J" />-->
+ <setting name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl"/>
<!-- 浣跨敤椹煎嘲鍛藉悕娉曡浆鎹㈠瓧娈� -->
- <!-- <setting name="mapUnderscoreToCamelCase" value="true"/> -->
- </settings>
-
+ <!-- <setting name="mapUnderscoreToCamelCase" value="true"/> -->
+ </settings>
+
</configuration>
--
Gitblit v1.9.3