From ac6db1c4fddcb89c9668e34a35f023817a59f838 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 01 四月 2026 17:54:44 +0800
Subject: [PATCH] yys 1.产品导入新增excel错误提示 2.bom导入新增excel错误提示 3.仓储物流增加库位字段 4.修改发货出库-新增库位 5.修改采购入库审核-新增库位 6.生产入库-新增库位,审核
---
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java | 5
src/main/java/com/ruoyi/stock/pojo/StockInventory.java | 3
src/main/java/com/ruoyi/stock/service/StockInventoryService.java | 2
src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java | 4
src/main/java/com/ruoyi/sales/service/impl/ShippingInfoDetailServiceImpl.java | 1
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java | 5
src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java | 3
src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java | 15 +
src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java | 6
src/main/java/com/ruoyi/stock/service/StockInRecordService.java | 2
src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java | 45 +++++
src/main/java/com/ruoyi/basic/dto/ProductModelExcelCopyErrorDto.java | 13 +
src/main/java/com/ruoyi/production/service/ProductBomService.java | 2
src/main/java/com/ruoyi/sales/pojo/ShippingInfoDetail.java | 3
src/main/java/com/ruoyi/stock/controller/StockInRecordController.java | 12 +
src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java | 5
src/main/java/com/ruoyi/production/service/impl/ProductStructureRecordServiceImpl.java | 6
src/main/resources/mapper/stock/StockUninventoryMapper.xml | 4
src/main/java/com/ruoyi/basic/pojo/ProductModel.java | 4
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 38 +++
src/main/java/com/ruoyi/basic/service/IProductModelService.java | 3
src/main/java/com/ruoyi/production/dto/BomImportErrorDto.java | 15 +
src/main/java/com/ruoyi/basic/controller/ProductController.java | 4
src/main/java/com/ruoyi/stock/pojo/StockInRecord.java | 9 +
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 7
src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java | 45 ++++-
src/main/resources/mapper/stock/StockInventoryMapper.xml | 1
src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java | 1
src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java | 88 +++++----
src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java | 8
src/main/resources/mapper/sales/ShippingInfoMapper.xml | 4
src/main/resources/mapper/stock/StockInRecordMapper.xml | 3
src/main/java/com/ruoyi/stock/controller/StockInventoryController.java | 5
src/main/java/com/ruoyi/production/pojo/ProductOrder.java | 14 +
src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java | 51 -----
src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java | 14 +
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java | 15 +
src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java | 14
src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java | 6
src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java | 3
src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java | 15 +
src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java | 14 +
src/main/java/com/ruoyi/production/controller/ProductBomController.java | 7
src/main/java/com/ruoyi/stock/pojo/StockUninventory.java | 3
src/main/java/com/ruoyi/approve/service/IApproveNodeService.java | 3
45 files changed, 388 insertions(+), 142 deletions(-)
diff --git a/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java b/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java
index 5cda3a3..d57718e 100644
--- a/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java
+++ b/src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java
@@ -1,8 +1,12 @@
package com.ruoyi.approve.controller;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.approve.pojo.ApproveNode;
import com.ruoyi.approve.service.IApproveNodeService;
import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -10,6 +14,7 @@
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
+import java.util.List;
@Api(tags = "瀹℃壒璁板綍")
@RestController
@@ -42,6 +47,15 @@
return AjaxResult.success();
}
+ @ApiOperation(value = "閲囪喘瀹℃牳濉啓搴撲綅鍏ュ簱")
+ @PostMapping("/purchaseApprove")
+ @Transactional(rollbackFor = Exception.class)
+ public AjaxResult purchaseApprove(@RequestBody List<SalesLedgerProduct> salesLedgerProducts) {
+ approveNodeService.purchaseApprove(salesLedgerProducts);
+ return AjaxResult.success();
+ }
+
+
/**
* 鍒濆鍖栧鎵硅妭鐐�
* @param id
diff --git a/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java b/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java
index eac4cce..747a785 100644
--- a/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java
+++ b/src/main/java/com/ruoyi/approve/service/IApproveNodeService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.approve.pojo.ApproveNode;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
import java.io.IOException;
import java.util.List;
@@ -18,4 +19,6 @@
void updateApproveNode(ApproveNode approveNode) throws IOException;
void delApproveNodeByApproveId(String id);
+
+ void purchaseApprove(List<SalesLedgerProduct> salesLedgerProducts);
}
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
index 00a53f5..50b6194 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -202,9 +202,6 @@
// 璐ㄦ
if (salesLedgerProduct.getIsChecked()) {
purchaseLedgerServiceImpl.addQualityInspect(purchaseLedger, salesLedgerProduct);
- }else {
- //鐩存帴鍏ュ簱
- stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), purchaseLedger.getId());
}
}
} else if (status.equals(3)) {
@@ -306,6 +303,18 @@
}
}
+ @Override
+ public void purchaseApprove(List<SalesLedgerProduct> salesLedgerProducts) {
+ for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) {
+ stockUtils.addStock(salesLedgerProduct.getProductModelId(),
+ salesLedgerProduct.getQuantity(),
+ StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(),
+ salesLedgerProduct.getId(),
+ salesLedgerProduct.getStockLocation(),
+ 2);
+ }
+ }
+
//瀹℃壒绫诲瀷鑾峰彇(涓庡墠绔〉闈㈠搴�)
private String approveProcessType(Integer approveType){
switch (approveType){
diff --git a/src/main/java/com/ruoyi/basic/controller/ProductController.java b/src/main/java/com/ruoyi/basic/controller/ProductController.java
index 22dc714..22fee19 100644
--- a/src/main/java/com/ruoyi/basic/controller/ProductController.java
+++ b/src/main/java/com/ruoyi/basic/controller/ProductController.java
@@ -139,8 +139,8 @@
*/
@Log(title = "瀵煎叆浜у搧",businessType = BusinessType.IMPORT)
@PostMapping("import")
- public AjaxResult importProduct(MultipartFile file) {
- return AjaxResult.success(productModelService.importProduct(file));
+ public void importProduct(HttpServletResponse response,MultipartFile file) {
+ productModelService.importProduct(file,response);
}
/**
diff --git a/src/main/java/com/ruoyi/basic/dto/ProductModelExcelCopyErrorDto.java b/src/main/java/com/ruoyi/basic/dto/ProductModelExcelCopyErrorDto.java
new file mode 100644
index 0000000..e2887f9
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/dto/ProductModelExcelCopyErrorDto.java
@@ -0,0 +1,13 @@
+package com.ruoyi.basic.dto;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+import org.apache.poi.ss.usermodel.IndexedColors;
+
+@Data
+public class ProductModelExcelCopyErrorDto extends ProductModelExcelCopyDto{
+
+ @Excel(name = "閿欒淇℃伅",sort = 1,color = IndexedColors.RED)
+ private String errorMsg;
+
+}
diff --git a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
index 6b41fab..6ba6f08 100644
--- a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
+++ b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
@@ -16,6 +16,10 @@
private static final long serialVersionUID = 1L;
+ @ApiModelProperty(value = "閿欒淇℃伅")
+ @TableField(exist = false)
+ private String errorMsg;
+
@TableField(exist = false)
private List<CommonFile> SalesLedgerFiles;
diff --git a/src/main/java/com/ruoyi/basic/service/IProductModelService.java b/src/main/java/com/ruoyi/basic/service/IProductModelService.java
index 1952821..9486941 100644
--- a/src/main/java/com/ruoyi/basic/service/IProductModelService.java
+++ b/src/main/java/com/ruoyi/basic/service/IProductModelService.java
@@ -8,6 +8,7 @@
import com.ruoyi.basic.pojo.ProductModel;
import org.springframework.web.multipart.MultipartFile;
+import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@@ -34,5 +35,5 @@
*/
IPage<ProductModel> modelListPage(Page page , ProductDto productDto);
- Boolean importProduct(MultipartFile file);
+ void importProduct(MultipartFile file, HttpServletResponse response);
}
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
index 066d886..b2918bd 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -32,6 +32,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
+import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@@ -130,46 +131,52 @@
@Override
@Transactional(rollbackFor = Exception.class)
- public Boolean importProduct(MultipartFile file) {
+ public void importProduct(MultipartFile file, HttpServletResponse response) {
+ ExcelUtil<ProductModelExcelCopyDto> productModelExcelUtil = new ExcelUtil<>(ProductModelExcelCopyDto.class);
+ List<ProductModelExcelCopyDto> productModelList = null;
try {
- ExcelUtil<ProductModelExcelCopyDto> productModelExcelUtil = new ExcelUtil<>(ProductModelExcelCopyDto.class);
- List<ProductModelExcelCopyDto> productModelList = productModelExcelUtil.importExcel(file.getInputStream());
- if(CollectionUtils.isNotEmpty(productModelList)){
- // 2. 鎸変骇鍝佸悕绉�,鍥剧焊缂栧彿鍒嗙粍
- Map<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> groupedByProductNameAndDrawingNumber =
- productModelList.stream()
- .collect(Collectors.groupingBy(
- dto -> new AbstractMap.SimpleEntry<>(
- dto.getProductName(),
- dto.getModel()
- )
- ));
- // 2. 閬嶅巻鍒嗙粍缁撴灉澶勭悊鏁版嵁
- for (Map.Entry<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> entry : groupedByProductNameAndDrawingNumber.entrySet()) {
- Map.Entry<String, String> groupKey = entry.getKey();
- String productName = groupKey.getKey(); // 浜у搧鍚嶇О
- String drawingNumber = groupKey.getValue(); // 鍥剧焊缂栧彿
- List<ProductModelExcelCopyDto> dtoList = entry.getValue();
-
- // 绌哄垪琛ㄨ烦杩囷紝閬垮厤鍚庣画NPE
- if (CollectionUtils.isEmpty(dtoList)) {
- continue;
- }
- ProductModelExcelCopyDto firstDto = dtoList.get(0);
- String model = firstDto.getModel();
-
- // 3. 鏌ヨ/鏂板浜у搧锛堟寜浜у搧鍚嶇О+鍥剧焊缂栧彿锛屾洿绮惧噯锛�
- Product product = getOrCreateProduct(productName, drawingNumber);
-
- // 4. 鎵归噺澶勭悊浜у搧鍨嬪彿锛堟寜鍥剧焊缂栧彿+鍨嬪彿锛�
- processProductModel(dtoList, product.getId(), model, drawingNumber);
- }
- }
- return true;
+ productModelList = productModelExcelUtil.importExcel(file.getInputStream());
}catch (Exception e) {
- e.printStackTrace();
+ throw new ServiceException("鏂囦欢瑙f瀽澶辫触");
}
- return false;
+ if(CollectionUtils.isNotEmpty(productModelList)){
+ // 2. 鎸変骇鍝佸悕绉�,鍥剧焊缂栧彿鍒嗙粍
+ Map<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> groupedByProductNameAndDrawingNumber =
+ productModelList.stream()
+ .collect(Collectors.groupingBy(
+ dto -> new AbstractMap.SimpleEntry<>(
+ dto.getProductName(),
+ dto.getModel()
+ )
+ ));
+ List<ProductModelExcelCopyErrorDto> errorList = new ArrayList<>();
+ // 2. 閬嶅巻鍒嗙粍缁撴灉澶勭悊鏁版嵁
+ for (Map.Entry<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> entry : groupedByProductNameAndDrawingNumber.entrySet()) {
+ Map.Entry<String, String> groupKey = entry.getKey();
+ String productName = groupKey.getKey(); // 浜у搧鍚嶇О
+ String drawingNumber = groupKey.getValue(); // 鍥剧焊缂栧彿
+ List<ProductModelExcelCopyDto> dtoList = entry.getValue();
+
+ // 绌哄垪琛ㄨ烦杩囷紝閬垮厤鍚庣画NPE
+ if (CollectionUtils.isEmpty(dtoList)) {
+ continue;
+ }
+ ProductModelExcelCopyDto firstDto = dtoList.get(0);
+ String model = firstDto.getModel();
+
+ // 3. 鏌ヨ/鏂板浜у搧锛堟寜浜у搧鍚嶇О+鍥剧焊缂栧彿锛屾洿绮惧噯锛�
+ Product product = getOrCreateProduct(productName, drawingNumber);
+
+ // 4. 鎵归噺澶勭悊浜у搧鍨嬪彿锛堟寜鍥剧焊缂栧彿+鍨嬪彿锛�
+ processProductModel(dtoList, product.getId(), model, drawingNumber,errorList);
+ }
+ if(CollectionUtils.isNotEmpty(errorList)){
+ // 5. 鎵归噺澶勭悊閿欒鏁版嵁
+ ExcelUtil<ProductModelExcelCopyErrorDto> errorExcelUtil = new ExcelUtil<>(ProductModelExcelCopyErrorDto.class);
+ errorExcelUtil.exportExcel(response,errorList, "閿欒鏁版嵁");
+ }
+ }
+
}
/**
@@ -196,11 +203,14 @@
* 鎶藉彇閫氱敤鏂规硶锛氬鐞嗕骇鍝佸瀷鍙凤紙鏂板/鏇存柊锛�
*/
private void processProductModel(List<ProductModelExcelCopyDto> dtoList,
- Long productId, String model, String drawingNumber) {
+ Long productId,
+ String model,
+ String drawingNumber,
+ List<ProductModelExcelCopyErrorDto> errorList) {
// 鏌ヨ鎵�鏈夊伐鑹鸿矾绾�
List<ProductProcess> productRoutes = productProcessMapper.selectList(new QueryWrapper<ProductProcess>());
if(CollectionUtils.isEmpty(productRoutes)){
- throw new ServiceException("璇峰厛鍒涘缓浜у搧宸ヨ壓璺嚎");
+ productRoutes = new ArrayList<>();
}
for (ProductModelExcelCopyDto dto : dtoList) {
// 鏌ヨ鏉′欢锛氬瀷鍙�+鍥剧焊缂栧彿锛堟洿绮惧噯锛岀鍚堝垎缁勯�昏緫锛�
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
index cfced60..6c23423 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ReturnManagementServiceImpl.java
@@ -139,13 +139,13 @@
for (ReturnSaleProductDto returnSaleProduct : list) {
bigDecimal = bigDecimal.add(returnSaleProduct.getPrice());
// 鏄惁鏈夎川閲忛棶棰�
- if (returnSaleProduct.getIsQuality() == 1) {
- // 鏈夎川閲忛棶棰橈紝鍏ヤ笉鍚堟牸搴�
- stockUtils.addUnStock(returnSaleProduct.getProductModelId(),returnSaleProduct.getNum(), StockInUnQualifiedRecordTypeEnum.RETURN_UNSTOCK_IN.getCode(),returnSaleProduct.getId());
- }else{
- // 鏃犺川閲忛棶棰橈紝鍏ュ悎鏍煎簱
- stockUtils.addStock(returnSaleProduct.getProductModelId(),returnSaleProduct.getNum(), StockInQualifiedRecordTypeEnum.RETURN_HE_IN.getCode(),returnSaleProduct.getId());
- }
+// if (returnSaleProduct.getIsQuality() == 1) {
+// // 鏈夎川閲忛棶棰橈紝鍏ヤ笉鍚堟牸搴�
+// stockUtils.addUnStock(returnSaleProduct.getProductModelId(),returnSaleProduct.getNum(), StockInUnQualifiedRecordTypeEnum.RETURN_UNSTOCK_IN.getCode(),returnSaleProduct.getId());
+// }else{
+// // 鏃犺川閲忛棶棰橈紝鍏ュ悎鏍煎簱
+// stockUtils.addStock(returnSaleProduct.getProductModelId(),returnSaleProduct.getNum(), StockInQualifiedRecordTypeEnum.RETURN_HE_IN.getCode(),returnSaleProduct.getId());
+// }
returnSaleProduct.setStatus(1);
returnSaleProductService.updateById(returnSaleProduct);
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
index 4e85270..aa535a3 100644
--- a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
+++ b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -49,6 +49,7 @@
stockUninventoryDto.setRecordType(String.valueOf(recordType));
stockUninventoryDto.setQualitity(quantity);
stockUninventoryDto.setProductModelId(productModelId);
+ stockUninventoryDto.setStockLocation("涓嶅悎鏍煎簱浣�");
stockUninventoryService.addStockUninventory(stockUninventoryDto);
}
@@ -65,6 +66,7 @@
stockUninventoryDto.setRecordType(String.valueOf(recordType));
stockUninventoryDto.setQualitity(quantity);
stockUninventoryDto.setProductModelId(productModelId);
+ stockUninventoryDto.setStockLocation("涓嶅悎鏍煎簱浣�");
stockUninventoryService.subtractStockUninventory(stockUninventoryDto);
}
@@ -75,13 +77,19 @@
* @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,
+ String stockLocation,
+ Integer isProduction) {
StockInventoryDto stockInventoryDto = new StockInventoryDto();
stockInventoryDto.setRecordId(recordId);
stockInventoryDto.setRecordType(String.valueOf(recordType));
stockInventoryDto.setQualitity(quantity);
stockInventoryDto.setProductModelId(productModelId);
- stockInventoryService.addstockInventory(stockInventoryDto);
+ stockInventoryDto.setStockLocation(stockLocation);
+ stockInventoryService.addstockInventory(stockInventoryDto,isProduction);
}
/**
@@ -91,12 +99,13 @@
* @param recordType
* @param recordId
*/
- public void substractStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId) {
+ public void substractStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId,String stockLocation) {
StockInventoryDto stockInventoryDto = new StockInventoryDto();
stockInventoryDto.setRecordId(recordId);
stockInventoryDto.setRecordType(String.valueOf(recordType));
stockInventoryDto.setQualitity(quantity);
stockInventoryDto.setProductModelId(productModelId);
+ stockInventoryDto.setStockLocation(stockLocation);
stockInventoryService.subtractStockInventory(stockInventoryDto);
}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductBomController.java b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
index 0ad7d59..43662d0 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductBomController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
@@ -102,12 +102,11 @@
}
- @PostMapping("uploadBom")
- @PreAuthorize("@ss.hasPermi('product:bom:import')")
+ @PostMapping("/uploadBom")
@Log(title = "鏍规嵁Excel瀵煎叆BOM", businessType = BusinessType.IMPORT)
@ApiOperation("鏍规嵁Excel瀵煎叆BOM")
- public AjaxResult uploadBom(@RequestParam("file") MultipartFile file) {
- return productBomService.uploadBom(file);
+ public void uploadBom(@RequestParam("file") MultipartFile file,HttpServletResponse response) {
+ productBomService.uploadBom(file,response);
}
@PostMapping("exportBom")
diff --git a/src/main/java/com/ruoyi/production/dto/BomImportErrorDto.java b/src/main/java/com/ruoyi/production/dto/BomImportErrorDto.java
new file mode 100644
index 0000000..2dc4155
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/BomImportErrorDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.poi.ss.usermodel.IndexedColors;
+
+@Data
+public class BomImportErrorDto extends BomImportDto{
+
+ @ApiModelProperty(value = "閿欒淇℃伅")
+ @Excel(name = "閿欒淇℃伅",sort = 1,color = IndexedColors.RED)
+ private String errorMsg;
+
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
index e6739fa..ea7bbcc 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -64,6 +64,20 @@
private String npsNo;
/**
+ * 涓嶉�氳繃鍘熷洜
+ */
+ @ApiModelProperty(value = "涓嶉�氳繃鍘熷洜")
+ @Excel(name = "涓嶉�氳繃鍘熷洜")
+ private String reason;
+
+ /**
+ * 瀹為檯鍏ュ簱鏁伴噺
+ */
+ @ApiModelProperty(value = "瀹為檯鍏ュ簱鏁伴噺")
+ @Excel(name = "瀹為檯鍏ュ簱鏁伴噺")
+ private BigDecimal actualStockInNum;
+
+ /**
* 绉熸埛id
*/
@ApiModelProperty(value = "绉熸埛id")
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java b/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
index 3f15e1c..424f0cc 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
@@ -36,4 +36,8 @@
@ApiModelProperty(value = "绉熸埛ID")
@TableField(fill = FieldFill.INSERT)
private Long tenantId;
+
+ @ApiModelProperty(value = "搴撲綅")
+ @TableField(exist = false)
+ private String stockLocation;
}
diff --git a/src/main/java/com/ruoyi/production/service/ProductBomService.java b/src/main/java/com/ruoyi/production/service/ProductBomService.java
index d812f9f..d4746c6 100644
--- a/src/main/java/com/ruoyi/production/service/ProductBomService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductBomService.java
@@ -24,7 +24,7 @@
AjaxResult add(ProductBom productBom);
- AjaxResult uploadBom(MultipartFile file);
+ void uploadBom(MultipartFile file,HttpServletResponse response);
void exportBom(HttpServletResponse response, Integer bomId);
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
index ea3dc41..91dbec8 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
@@ -14,6 +14,7 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.production.dto.BomImportDto;
+import com.ruoyi.production.dto.BomImportErrorDto;
import com.ruoyi.production.dto.ProductBomDto;
import com.ruoyi.production.dto.ProductStructureDto;
import com.ruoyi.production.mapper.ProductBomMapper;
@@ -23,6 +24,7 @@
import com.ruoyi.production.service.ProductBomService;
import com.ruoyi.production.service.ProductProcessService;
import com.ruoyi.production.service.ProductStructureService;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -103,14 +105,17 @@
* @param children 褰撳墠鐖堕」鐨勫瓙椤瑰垪琛�
* @return 淇濆瓨鍚庣殑鐖堕」浜у搧ID
*/
- private void saveBomRecursive(List<BomImportDto> children,ProductBom bom,ProductModel rootModel,Map<String, Long> processMap) {
+ private void saveBomRecursive(List<BomImportDto> children,
+ ProductBom bom,ProductModel rootModel,
+ Map<String, Long> processMap,
+ List<BomImportErrorDto> errorList ) {
// 1. 鑾峰彇children涓瓙椤逛骇鍝佺紪鍙蜂负绌虹殑鏁版嵁
List<BomImportDto> parentChildren = children
.stream()
.filter(child -> StringUtils.isEmpty(child.getChildCode()))
.collect(Collectors.toList());
if(CollectionUtils.isEmpty(parentChildren)){
- throw new ServiceException("璇烽�夋嫨鐖堕」浜у搧缂栧彿");
+ return;
}
BomImportDto parentId = parentChildren.get(0); // 鐖剁骇鏁版嵁
ProductStructure rootNode = new ProductStructure();
@@ -129,7 +134,13 @@
}
// 鑾峰彇瀛愰」妯″瀷淇℃伅
ProductModel childModel = findModel(child.getChildName(), child.getChildSpec());
-
+ if(childModel.getId() == null){
+ BomImportErrorDto errorDto = new BomImportErrorDto();
+ BeanUtils.copyProperties(child, errorDto);
+ errorDto.setErrorMsg(childModel.getErrorMsg());
+ errorList.add(errorDto);
+ continue;
+ }
// 鎻掑叆缁撴瀯琛�
ProductStructure node = new ProductStructure();
node.setBomId(bom.getId());
@@ -147,16 +158,16 @@
@Override
@Transactional(rollbackFor = Exception.class)
- public AjaxResult uploadBom(MultipartFile file) {
+ public void uploadBom(MultipartFile file,HttpServletResponse response) {
ExcelUtil<BomImportDto> util = new ExcelUtil<>(BomImportDto.class);
List<BomImportDto> list;
try {
list = util.importExcel(file.getInputStream());
} catch (Exception e) {
- return AjaxResult.error("Excel瑙f瀽澶辫触");
+ throw new ServiceException("Excel瑙f瀽澶辫触");
}
- if (list == null || list.isEmpty()) return AjaxResult.error("鏁版嵁涓虹┖");
+ if (list == null || list.isEmpty()) throw new ServiceException("鏂囦欢涓虹┖");
// 澶勭悊宸ュ簭
list.forEach(dto -> {
@@ -172,11 +183,20 @@
Map<String, List<BomImportDto>> parentMap = list.stream()
.filter(bom -> StringUtils.isNotBlank(bom.getParentCode()))
.collect(Collectors.groupingBy(BomImportDto::getParentCode));
+ List<BomImportErrorDto> errorList = new ArrayList<>();
// 2. 閬嶅巻鎵�鏈夌埗椤癸紝閫掑綊淇濆瓨
for (Map.Entry<String, List<BomImportDto>> entry : parentMap.entrySet()) {
+
// 鍒涘缓 BOM 鏁版嵁
BomImportDto first = entry.getValue().get(0);
ProductModel rootModel = findModel(first.getParentName(), first.getParentSpec());
+ if(rootModel.getId() == null){
+ BomImportErrorDto error = new BomImportErrorDto();
+ BeanUtils.copyProperties(first, error);
+ error.setErrorMsg(rootModel.getErrorMsg());
+ errorList.add(error);
+ continue;
+ }
ProductBom bom = new ProductBom();
bom.setProductModelId(rootModel.getId());
bom.setVersion("1.0");
@@ -185,9 +205,13 @@
productBomMapper.updateById(bom);
// 澶勭悊bom瀛愯〃鏁版嵁
List<BomImportDto> children = entry.getValue();
- saveBomRecursive(children,bom,rootModel,processMap);
+ saveBomRecursive(children,bom,rootModel,processMap,errorList);
}
- return AjaxResult.success("BOM瀵煎叆鎴愬姛");
+ // 鍒ゆ柇鏄惁鏈夐敊璇暟鎹紝鏈夊氨瀵煎嚭
+ if(CollectionUtils.isNotEmpty(errorList)){
+ ExcelUtil<BomImportErrorDto> utils = new ExcelUtil<>(BomImportErrorDto.class);
+ utils.exportExcel(response,errorList, "BOM閿欒鏁版嵁");
+ }
}
@@ -276,7 +300,10 @@
ProductModel model = productModelService.getOne(new LambdaQueryWrapper<ProductModel>()
// .eq(ProductModel::getProductId, product.getId())
.eq(ProductModel::getModel, spec).last("limit 1"));
- if (model == null) throw new ServiceException("鍥剧焊缂栧彿鏈淮鎶わ細" + name + "[" + spec + "]");
+ if (model == null){
+ model = new ProductModel();
+ model.setErrorMsg("鍥剧焊缂栧彿鏈淮鎶わ細" + "[" + spec + "]");
+ }
return model;
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductStructureRecordServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductStructureRecordServiceImpl.java
index 1b3ab34..777d388 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductStructureRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductStructureRecordServiceImpl.java
@@ -56,7 +56,11 @@
}
for (ProductionProductInput productionProductInput : productionProductInputs) {
productionProductInputMapper.insert(productionProductInput);
- stockUtils.substractStock(productionProductInput.getProductModelId(), productionProductInput.getQuantity(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductInput.getProductOrderId());
+ stockUtils.substractStock(productionProductInput.getProductModelId(),
+ productionProductInput.getQuantity(),
+ StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(),
+ productionProductInput.getProductOrderId(),
+ productionProductInput.getStockLocation());
// 鎵i櫎鐗╂枡娓呭崟
ProductStructureRecord productStructureRecord = productStructureRecordMapper.selectById(productionProductInput.getProductStructureRecordId());
if(productStructureRecord != null){
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
index 931f343..aa77619 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
@@ -49,7 +49,11 @@
productionProductInput1.setReturnQuantity(qty.add(qty1));
productionProductInputMapper.updateById(productionProductInput1);
// 閫�鏂欏叆搴�
- stockUtils.addStock(input.getProductModelId(), input.getReturnQuantity(), StockInQualifiedRecordTypeEnum.RETURN_MATERIAL_IN.getCode(), input.getId());
+ stockUtils.addStock(input.getProductModelId(),
+ input.getReturnQuantity(), StockInQualifiedRecordTypeEnum.RETURN_MATERIAL_IN.getCode(),
+ input.getId(),
+ input.getStockLocation(),
+ 2);
// 澧炲姞鐗╂枡娓呭崟
ProductStructureRecord productStructureRecord = productStructureRecordMapper.selectById(input.getProductStructureRecordId());
if(productStructureRecord != null){
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 9c55cbb..b18766d 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -264,7 +264,12 @@
productOrder.setEndTime(LocalDateTime.now());//缁撴潫鏃堕棿
productOrder.setStatus("宸插畬鎴�");
// 鐢熶骇瀹屾垚鍏ュ簱
- stockUtils.addStock(productProcessRouteItem.getProductModelId(), productOrder.getCompleteQuantity(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
+ stockUtils.addStock(productProcessRouteItem.getProductModelId(),
+ productOrder.getCompleteQuantity(),
+ StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(),
+ productOrder.getId(),
+ "",
+ 1);
}
// if (productWorkOrderList.stream().filter(item -> item.getStatus() == 3).count() == productProcessRouteItems.size() - 1) {
//
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
index 2111b99..a9fb71f 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -94,7 +94,10 @@
qualityUnqualifiedMapper.insert(qualityUnqualified);
} else {
//鍚堟牸鐩存帴鍏ュ簱
- stockUtils.addStock(qualityInspect.getProductModelId(), qualityInspect.getQuantity(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(), qualityInspect.getId());
+ stockUtils.addStock(qualityInspect.getProductModelId(),
+ qualityInspect.getQuantity(),
+ StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(),
+ qualityInspect.getId(),"璐ㄦ鍚堟牸鍏ュ簱",2);
}
qualityInspect.setInspectState(1);//宸叉彁浜�
return qualityInspectMapper.updateById(qualityInspect);
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
index 5e98fa8..4b2bbe8 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -131,7 +131,11 @@
break;
case "璁╂鏀捐":
//璋冪敤鎻愪氦鍚堟牸鐨勬帴鍙�
- stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId());
+ stockUtils.addStock(qualityInspect.getProductModelId(),
+ unqualified.getQuantity(),
+ StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(),
+ unqualified.getId(),
+ "璁╂鏀捐",2);
qualityInspect.setCheckResult("鍚堟牸");
qualityInspectService.submit(qualityInspect);
break;
diff --git a/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java b/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
index 49548e1..050318d 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
@@ -44,57 +44,6 @@
return AjaxResult.success(listPage);
}
- @PostMapping("/update")
- @ApiOperation("鍙戣揣瀹℃壒,鏇存柊鍙戣揣瀹℃壒鐘舵��")
- @Transactional(rollbackFor = Exception.class)
- public AjaxResult update(@RequestBody ShipmentApproval req) {
-
- // 鏌ヨ鍙戣揣瀹℃壒
- ShipmentApproval shipmentApproval = shipmentApprovalMapper.selectById(req.getId());
- if (shipmentApproval == null) {
- return AjaxResult.error("鍙戣揣瀹℃壒涓嶅瓨鍦�");
- }
-
- // 鏇存柊鍙戣揣瀹℃壒鐘舵��
- shipmentApproval.setApproveStatus(req.getApproveStatus());
- boolean update = shipmentApprovalService.updateById(shipmentApproval);
- if (!update) {
- // 浜嬪姟鍥炴粴
- throw new ServiceException("鍙戣揣瀹℃壒鏇存柊澶辫触");
- }
- // 鏌ヨ鍏宠仈鐨勯攢鍞彴璐︿骇鍝�
- SalesLedgerProduct salesLedgerProduct = salesLedgerProductService.getById(shipmentApproval.getSalesLedgerProductId());
- if (salesLedgerProduct == null) {
- // 鎶涘紓甯镐簨鍔″洖婊�
- throw new ServiceException("閿�鍞彴璐︿笉瀛樺湪锛屽鎵瑰洖婊�");
- }
-
- // 鍚屾鏇存柊閿�鍞彴璐︿骇鍝佺殑瀹℃壒鐘舵��
- salesLedgerProduct.setApproveStatus(req.getApproveStatus());
- salesLedgerProductService.updateById(salesLedgerProduct);
-
- // 瀹℃壒閫氳繃
- if (req.getApproveStatus() == 3) {
-// // 鏌ヨ閲囪喘鍏ュ簱璁板綍
-// LambdaQueryWrapper<ProcurementRecordStorage> lambdaQueryWrapper = new LambdaQueryWrapper<ProcurementRecordStorage>()
-// .eq(ProcurementRecordStorage::getSalesLedgerProductId, req.getSalesLedgerProductId());
-// ProcurementRecordStorage procurementRecordStorage = procurementRecordStorageService.getOne(lambdaQueryWrapper);
-//
-// if (procurementRecordStorage == null) {
-// // 淇濊瘉鍓嶉潰鐨勪慨鏀瑰叏閮ㄥ洖婊�
-// throw new ServiceException("閲囪喘璁板綍涓嶅瓨鍦紝瀹℃壒鍥炴粴");
-// }
-
-
- //鍑哄簱
- stockUtils.addStock(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/ShippingInfoDto.java b/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
index 48db590..470c58e 100644
--- a/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
@@ -17,6 +17,10 @@
@Data
public class ShippingInfoDto extends ShippingInfo {
+ @ApiModelProperty(value = "搴撲綅")
+ @TableField(exist = false)
+ private String stockLocation;
+
/**
* 瀹℃壒浜篿d鍒楄〃
*/
@@ -45,4 +49,8 @@
*/
private BigDecimal returnTotal = BigDecimal.ZERO;
+ private String productCategory;
+
+ private String specificationModel;
+
}
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index 0947aa4..6bb8e1d 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -23,8 +23,13 @@
@TableName("sales_ledger_product")
@Data
public class SalesLedgerProduct implements Serializable {
+
private static final long serialVersionUID = 1L;
+ @ApiModelProperty(value = "搴撲綅")
+ @TableField(exist = false)
+ private String stockLocation;
+
/**
* 浜у搧淇℃伅涓婚敭
*/
diff --git a/src/main/java/com/ruoyi/sales/pojo/ShippingInfoDetail.java b/src/main/java/com/ruoyi/sales/pojo/ShippingInfoDetail.java
index 90e1d9e..9482e48 100644
--- a/src/main/java/com/ruoyi/sales/pojo/ShippingInfoDetail.java
+++ b/src/main/java/com/ruoyi/sales/pojo/ShippingInfoDetail.java
@@ -31,6 +31,9 @@
@ApiModel(value = "ShippingInfoDetail瀵硅薄", description = "鍙戣揣鏄庣粏琛�")
public class ShippingInfoDetail implements Serializable {
+ @ApiModelProperty(value = "搴撲綅")
+ private String stockLocation;
+
private static final long serialVersionUID = 1L;
/**
diff --git a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoDetailServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoDetailServiceImpl.java
index f3e9e4d..bfed098 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoDetailServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoDetailServiceImpl.java
@@ -84,6 +84,7 @@
}
// 鎵e簱瀛�
shippingInfo.setShippingTotal(shippingInfoDetail.getShippingNum());
+ shippingInfo.setStockLocation(shippingInfoDetail.getStockLocation());
shippingInfoService.deductStock(shippingInfo);
// 杩佺Щ鏂囦欢
if(CollectionUtils.isNotEmpty(shippingInfoDetail.getTempFileIds())){
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 21049c7..1ccdb57 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -166,7 +166,10 @@
}
//鎵e噺搴撳瓨
SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(byId.getSalesLedgerProductId());
- stockUtils.substractStock(salesLedgerProduct.getProductModelId(), req.getShippingTotal(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId());
+ stockUtils.substractStock(salesLedgerProduct.getProductModelId(),
+ req.getShippingTotal(), StockOutQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(),
+ req.getId(),
+ req.getStockLocation());
byId.setExpressNumber(req.getExpressNumber());
byId.setExpressCompany(req.getExpressCompany());
byId.setStatus(req.getStatus());
diff --git a/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java b/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
index b12fc67..19b3bad 100644
--- a/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
+++ b/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
@@ -2,14 +2,18 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.web.domain.R;
import com.ruoyi.stock.dto.StockInRecordDto;
+import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.service.StockInRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
@@ -42,6 +46,14 @@
return AjaxResult.success(stockInRecordService.batchDelete(ids));
}
+ @ApiOperation("鐢熶骇鍏ュ簱瀹℃牳")
+ @PostMapping("/productionApprove")
+ @Transactional(rollbackFor = Exception.class)
+ public R productionApprove(@RequestBody StockInRecordDto stockInRecordDto) {
+ return R.ok(stockInRecordService.productionApprove(stockInRecordDto));
+ }
+
+
@PostMapping("/exportStockInRecord")
@ApiOperation("瀵煎嚭鍏ュ簱璁板綍")
public void exportStockInRecord(HttpServletResponse response, StockInRecordDto stockInRecordDto) {
diff --git a/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java b/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
index 70f638e..5c5b0ac 100644
--- a/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
+++ b/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
@@ -14,6 +14,7 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -49,7 +50,7 @@
public R addstockInventory(@RequestBody StockInventoryDto stockInventoryDto) {
stockInventoryDto.setRecordType(String.valueOf(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode()));
stockInventoryDto.setRecordId(0L);
- return R.ok(stockInventoryService.addstockInventory(stockInventoryDto));
+ return R.ok(stockInventoryService.addstockInventory(stockInventoryDto,2));
}
@@ -61,9 +62,9 @@
return R.ok(stockInventoryService.subtractStockInventory(stockInventoryDto));
}
-
@PostMapping("importStockInventory")
@ApiOperation("瀵煎叆搴撳瓨")
+ @Transactional(rollbackFor = Exception.class)
public R importStockInventory(MultipartFile file) {
return stockInventoryService.importStockInventory(file);
}
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java b/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
index cabba21..88b65ae 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockInRecordDto.java
@@ -3,6 +3,8 @@
import com.ruoyi.stock.pojo.StockInRecord;
import lombok.Data;
+import java.math.BigDecimal;
+
@Data
public class StockInRecordDto extends StockInRecord {
@@ -31,4 +33,16 @@
//鐜板瓨閲�
private String currentStock;
+ /**
+ * 涓嶉�氳繃鍘熷洜
+ */
+ private String reason;
+
+ /**
+ * 瀹為檯鍏ュ簱鏁伴噺
+ */
+ private BigDecimal actualStockInNum;
+
+
+
}
diff --git a/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java b/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
index 4b7553f..196bb86 100644
--- a/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
+++ b/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
@@ -30,6 +30,9 @@
@Excel(name = "澶囨敞")
private String remark;
+
+ @Excel(name = "搴撲綅")
+ private String stockLocation;
//
// @Excel(name = "鏈�鏂版洿鏂版椂闂�")
// @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java b/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
index 395d18f..9c3e721 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockInRecord.java
@@ -28,6 +28,9 @@
@ApiModelProperty(value = "鍏ュ簱鏁伴噺")
private BigDecimal stockInNum;
+ @ApiModelProperty(value = "寰呭鏍稿叆搴撴暟閲忥紙鐢熶骇锛�")
+ private BigDecimal waitAuditNum;
+
@ApiModelProperty(value = "璁板綍绫诲瀷 鏋氫妇")
private String recordType;
@@ -62,4 +65,10 @@
@ApiModelProperty(value = "淇敼鐢ㄦ埛")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Integer updateUser;
+
+ @ApiModelProperty(value = "搴撲綅")
+ private String stockLocation;
+
+ @ApiModelProperty(value = "鐘舵�侊紙1 - 寰呭鏍� 2-宸插叆搴擄級")
+ private Integer status;
}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockInventory.java b/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
index 36e7cf0..6780b32 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
@@ -63,4 +63,7 @@
@ApiModelProperty("澶囨敞")
private String remark;
+
+ @ApiModelProperty(value = "搴撲綅")
+ private String stockLocation;
}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java b/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
index e4e3b82..0efcd3d 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockOutRecord.java
@@ -71,4 +71,7 @@
@ApiModelProperty(value = "绫诲瀷 0鍚堟牸鍏ュ簱 1涓嶅悎鏍煎叆搴�")
private String type;
+
+ @ApiModelProperty(value = "搴撲綅")
+ private String stockLocation;
}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockUninventory.java b/src/main/java/com/ruoyi/stock/pojo/StockUninventory.java
index 6ed47de..0a122a8 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockUninventory.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockUninventory.java
@@ -59,4 +59,7 @@
@ApiModelProperty("琚鍗曢攣瀹氭暟閲�")
private BigDecimal lockedQuantity;
+ @ApiModelProperty(value = "搴撲綅")
+ private String stockLocation;
+
}
diff --git a/src/main/java/com/ruoyi/stock/service/StockInRecordService.java b/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
index 29ba7e5..f758a56 100644
--- a/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
@@ -19,4 +19,6 @@
int batchDelete(List<Long> ids);
void exportStockInRecord(HttpServletResponse response, StockInRecordDto stockInRecordDto);
+
+ Object productionApprove(StockInRecordDto stockInRecordDto);
}
diff --git a/src/main/java/com/ruoyi/stock/service/StockInventoryService.java b/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
index 65dcca3..3abc49f 100644
--- a/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
@@ -23,7 +23,7 @@
IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto);
- Boolean addstockInventory(StockInventoryDto stockInventoryDto);
+ Boolean addstockInventory(StockInventoryDto stockInventoryDto,Integer isProduction);
Boolean subtractStockInventory(StockInventoryDto stockInventoryDto);
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..82d526e 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -1,7 +1,9 @@
package com.ruoyi.stock.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
@@ -9,8 +11,11 @@
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.EnumUtil;
import com.ruoyi.common.utils.OrderUtils;
+import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.production.mapper.ProductOrderMapper;
+import com.ruoyi.production.pojo.ProductOrder;
import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
@@ -36,6 +41,8 @@
private StockInRecordMapper stockInRecordMapper;
private StockInventoryMapper stockInventoryMapper;
private StockUninventoryMapper stockUninventoryMapper;
+
+ private ProductOrderMapper productOrderMapper;
@Override
public IPage<StockInRecordDto> listPage(Page page, StockInRecordDto stockInRecordDto) {
@@ -90,6 +97,7 @@
StockUninventoryDto stockUninventoryDto = new StockUninventoryDto();
stockUninventoryDto.setProductModelId(stockUninventory.getProductModelId());
stockUninventoryDto.setQualitity(stockInRecord.getStockInNum());
+ stockUninventoryDto.setStockLocation(stockInRecord.getStockLocation());
stockUninventoryMapper.updateSubtractStockUnInventory(stockUninventoryDto);
}
}
@@ -110,4 +118,41 @@
ExcelUtil<StockInRecordExportData> util = new ExcelUtil<>(StockInRecordExportData.class);
util.exportExcel(response,list, "鍏ュ簱璁板綍淇℃伅");
}
+
+ @Override
+ public Object productionApprove(StockInRecordDto stockInRecordDto) {
+ //鍐嶈繘琛屾柊澧炲簱瀛樻暟閲忓簱瀛�
+ //鍏堟煡璇㈠簱瀛樿〃涓殑浜у搧鏄惁瀛樺湪锛屼笉瀛樺湪鏂板锛屽瓨鍦ㄦ洿鏂�
+ StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>()
+ .lambda()
+ .eq(StockInventory::getProductModelId, stockInRecordDto.getProductModelId())
+ .eq(StockInventory::getStockLocation, stockInRecordDto.getStockLocation()));
+ StockInventory newStockInventory = new StockInventory();
+ newStockInventory.setProductModelId(stockInRecordDto.getProductModelId());
+ newStockInventory.setQualitity(stockInRecordDto.getActualStockInNum());
+ newStockInventory.setVersion(1);
+ newStockInventory.setRemark(stockInRecordDto.getRemark());
+ newStockInventory.setStockLocation(stockInRecordDto.getStockLocation());
+ if (ObjectUtils.isEmpty(oldStockInventory)) {
+ stockInventoryMapper.insert(newStockInventory);
+ }else {
+ StockInventoryDto oldStockInventoryDto = new StockInventoryDto();
+ BeanUtils.copyProperties(oldStockInventory, oldStockInventoryDto);
+ stockInventoryMapper.updateAddStockInventory(oldStockInventoryDto);
+ }
+ stockInRecordDto.setStatus(2);
+ stockInRecordDto.setStockInNum(stockInRecordDto.getActualStockInNum() == null ? stockInRecordDto.getWaitAuditNum() : stockInRecordDto.getActualStockInNum());
+ stockInRecordMapper.updateById(stockInRecordDto);
+ ProductOrder productOrder = productOrderMapper.selectById(stockInRecordDto.getRecordId());
+ if(productOrder != null){
+ if(StringUtils.isNotEmpty(stockInRecordDto.getReason())){
+ productOrder.setReason(stockInRecordDto.getReason());
+ }
+ if(stockInRecordDto.getActualStockInNum() != null){
+ productOrder.setActualStockInNum(stockInRecordDto.getActualStockInNum());
+ }
+ productOrderMapper.updateById(productOrder);
+ }
+ return true;
+ }
}
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..462326b 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -52,20 +52,39 @@
}
//鍏ュ簱璋冪敤
+
+ /**
+ *
+ * @param stockInventoryDto
+ * @param isProduction 鏄惁鐢熶骇鍏ュ簱 1-鏄� 2-鍚︼紙鐢熶骇闇�瑕佸鏍告墠鑳藉叆搴擄級
+ * @return
+ */
@Override
@Transactional(rollbackFor = Exception.class)
- public Boolean addstockInventory(StockInventoryDto stockInventoryDto) {
+ public Boolean addstockInventory(StockInventoryDto stockInventoryDto,Integer isProduction) {
//鏂板鍏ュ簱璁板綍鍐嶆坊鍔犲簱瀛�
StockInRecordDto stockInRecordDto = new StockInRecordDto();
stockInRecordDto.setRecordId(stockInventoryDto.getRecordId());
stockInRecordDto.setRecordType(stockInventoryDto.getRecordType());
- stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity());
+ if(isProduction == 1){
+ stockInRecordDto.setWaitAuditNum(stockInventoryDto.getQualitity());
+ }else{
+ stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity());
+ }
stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
stockInRecordDto.setType("0");
+ stockInRecordDto.setStockLocation(stockInventoryDto.getStockLocation());
+ stockInRecordDto.setStatus(isProduction);
stockInRecordService.add(stockInRecordDto);
+ if(isProduction == 1){
+ return false;
+ }
//鍐嶈繘琛屾柊澧炲簱瀛樻暟閲忓簱瀛�
//鍏堟煡璇㈠簱瀛樿〃涓殑浜у搧鏄惁瀛樺湪锛屼笉瀛樺湪鏂板锛屽瓨鍦ㄦ洿鏂�
- StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()));
+ StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>()
+ .lambda()
+ .eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())
+ .eq(StockInventory::getStockLocation, stockInventoryDto.getStockLocation()));
if (ObjectUtils.isEmpty(oldStockInventory)) {
StockInventory newStockInventory = new StockInventory();
newStockInventory.setProductModelId(stockInventoryDto.getProductModelId());
@@ -74,6 +93,7 @@
newStockInventory.setRemark(stockInventoryDto.getRemark());
newStockInventory.setLockedQuantity(stockInventoryDto.getLockedQuantity());
newStockInventory.setWarnNum(stockInventoryDto.getWarnNum());
+ newStockInventory.setStockLocation(stockInventoryDto.getStockLocation());
stockInventoryMapper.insert(newStockInventory);
}else {
stockInventoryMapper.updateAddStockInventory(stockInventoryDto);
@@ -92,10 +112,14 @@
stockOutRecordDto.setStockOutNum(stockInventoryDto.getQualitity());
stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
stockOutRecordDto.setType("0");
+ stockOutRecordDto.setStockLocation(stockInventoryDto.getStockLocation());
stockOutRecordService.add(stockOutRecordDto);
- StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId()));
+ StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>()
+ .lambda()
+ .eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())
+ .eq(StockInventory::getStockLocation, stockInventoryDto.getStockLocation()));
if (ObjectUtils.isEmpty(oldStockInventory)) {
- throw new RuntimeException("浜у搧搴撳瓨涓嶅瓨鍦�");
+ throw new RuntimeException("搴撲綅銆�" + stockInventoryDto.getStockLocation() + "銆戜骇鍝佸簱瀛樹笉瀛樺湪");
}
BigDecimal lockedQty = oldStockInventory.getLockedQuantity();
if (lockedQty == null) {
@@ -104,7 +128,6 @@
if (stockInventoryDto.getQualitity().compareTo(oldStockInventory.getQualitity().subtract(lockedQty)) > 0) {
throw new RuntimeException("搴撳瓨涓嶈冻鏃犳硶鍑哄簱");
}
-
stockInventoryMapper.updateSubtractStockInventory(stockInventoryDto);
return true;
}
@@ -137,7 +160,8 @@
}
stockInventoryDto.setLockedQuantity(dto.getLockedQuantity());
stockInventoryDto.setProductModelId(item.getProductModelId());
- this.addstockInventory(stockInventoryDto);
+ stockInventoryDto.setStockLocation(dto.getStockLocation());
+ this.addstockInventory(stockInventoryDto,2);
matched = true;
break; // 鎵惧埌鍖归厤椤瑰悗璺冲嚭寰幆
}
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..f0fb538 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
@@ -93,6 +93,7 @@
StockUninventoryDto stockUninventoryDto = new StockUninventoryDto();
stockUninventoryDto.setProductModelId(stockUninventory.getProductModelId());
stockUninventoryDto.setQualitity(stockOutRecord.getStockOutNum());
+ stockUninventoryDto.setStockLocation(stockOutRecord.getStockLocation());
stockUninventoryMapper.updateAddStockUnInventory(stockUninventoryDto);
}
}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
index 2d5b8f5..07d1562 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
@@ -54,16 +54,21 @@
stockInRecordDto.setStockInNum(stockUninventoryDto.getQualitity());
stockInRecordDto.setProductModelId(stockUninventoryDto.getProductModelId());
stockInRecordDto.setType("1");
+ stockInRecordDto.setStockLocation(stockUninventoryDto.getStockLocation());
stockInRecordService.add(stockInRecordDto);
//鍐嶈繘琛屾柊澧炲簱瀛樻暟閲忓簱瀛�
//鍏堟煡璇㈠簱瀛樿〃涓殑浜у搧鏄惁瀛樺湪锛屼笉瀛樺湪鏂板锛屽瓨鍦ㄦ洿鏂�
- StockUninventory oldStockUnInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>().lambda().eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId()));
+ StockUninventory oldStockUnInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>()
+ .lambda()
+ .eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId())
+ .eq(StockUninventory::getStockLocation, stockUninventoryDto.getStockLocation()));
if (ObjectUtils.isEmpty(oldStockUnInventory)) {
StockUninventory newStockUnInventory = new StockUninventory();
newStockUnInventory.setProductModelId(stockUninventoryDto.getProductModelId());
newStockUnInventory.setQualitity(stockUninventoryDto.getQualitity());
newStockUnInventory.setVersion(1);
newStockUnInventory.setRemark(stockUninventoryDto.getRemark());
+ newStockUnInventory.setStockLocation(stockUninventoryDto.getStockLocation());
stockUninventoryMapper.insert(newStockUnInventory);
}else {
stockUninventoryMapper.updateAddStockUnInventory(stockUninventoryDto);
@@ -81,11 +86,15 @@
stockOutRecordDto.setRecordType(stockUninventoryDto.getRecordType());
stockOutRecordDto.setStockOutNum(stockUninventoryDto.getQualitity());
stockOutRecordDto.setProductModelId(stockUninventoryDto.getProductModelId());
+ stockOutRecordDto.setStockLocation(stockUninventoryDto.getStockLocation());
stockOutRecordDto.setType("1");
stockOutRecordService.add(stockOutRecordDto);
- StockUninventory oldStockInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>().lambda().eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId()));
+ StockUninventory oldStockInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>()
+ .lambda()
+ .eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId())
+ .eq(StockUninventory::getStockLocation, stockUninventoryDto.getStockLocation()));
if (ObjectUtils.isEmpty(oldStockInventory)) {
- throw new RuntimeException("浜у搧搴撳瓨涓嶅瓨鍦�");
+ throw new RuntimeException("搴撲綅銆�" + stockUninventoryDto.getStockLocation() + "銆戜骇鍝佸簱瀛樹笉瀛樺湪");
}else {
stockUninventoryMapper.updateSubtractStockUnInventory(stockUninventoryDto);
}
diff --git a/src/main/resources/mapper/sales/ShippingInfoMapper.xml b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
index 9e28542..067dda6 100644
--- a/src/main/resources/mapper/sales/ShippingInfoMapper.xml
+++ b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -21,7 +21,9 @@
sl.sales_contract_no,
sl.customer_name,
s.shipping_total AS shipping_total,
- slp.id as salesLedgerProductId
+ slp.id as salesLedgerProductId,
+ slp.product_category,
+ slp.specification_model
FROM shipping_info s
LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id and slp.type = 1
diff --git a/src/main/resources/mapper/stock/StockInRecordMapper.xml b/src/main/resources/mapper/stock/StockInRecordMapper.xml
index fc2b81d..70737b7 100644
--- a/src/main/resources/mapper/stock/StockInRecordMapper.xml
+++ b/src/main/resources/mapper/stock/StockInRecordMapper.xml
@@ -15,6 +15,9 @@
LEFT JOIN sys_user as u on sir.create_user = u.user_id
<where>
pm.product_type = #{params.productType}
+ <if test="params.status != null">
+ and sir.status = #{params.status}
+ </if>
<if test="params.timeStr != null and params.timeStr != ''">
and sir.create_time like concat('%',#{params.timeStr},'%')
</if>
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index a1f65b0..44d0941 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -63,6 +63,7 @@
(si.qualitity - COALESCE(si.locked_quantity, 0)) as un_locked_quantity,
pm.model,
si.remark,
+ si.stock_location,
pm.unit,
p.product_name
from stock_inventory si
diff --git a/src/main/resources/mapper/stock/StockUninventoryMapper.xml b/src/main/resources/mapper/stock/StockUninventoryMapper.xml
index d72b6cb..3265879 100644
--- a/src/main/resources/mapper/stock/StockUninventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockUninventoryMapper.xml
@@ -25,7 +25,7 @@
</if>
update_time = now()
</set>
- where product_model_id = #{ew.productModelId} and qualitity >= #{ew.qualitity}
+ where product_model_id = #{ew.productModelId} and stock_location = #{ew.stockLocation} and qualitity >= #{ew.qualitity}
</update>
<update id="updateAddStockUnInventory">
update stock_uninventory
@@ -41,7 +41,7 @@
</if>
update_time = now()
</set>
- where product_model_id = #{ew.productModelId}
+ where product_model_id = #{ew.productModelId} and stock_location = #{ew.stockLocation}
</update>
<select id="pageStockUninventory" resultType="com.ruoyi.stock.dto.StockUninventoryDto">
select su.id,
--
Gitblit v1.9.3