From a76e1d17d67641993dea6335cb8e1465a94df58d Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 21 五月 2026 15:39:05 +0800
Subject: [PATCH] feat(stock): 优化库存管理和成品树结构功能 1- 为ApproveProcessMapper.xml和ProductBomMapper.xml添加排序功能 2- 在ProductionProductMainDto中新增bomInputQty字段用于产品结构投入数量 3- 修改ProductionProductMainServiceImpl中投入数量计算逻辑,使用前端传入的bomInputQty值 4- 在ProductWorkOrderDto中添加bomInputQty字段并在服务实现中计算标准投入数量 5- 更新SalesLedgerMapper.xml查询逻辑,从product_summary获取电压信息 6- 为SalesLedgerProduct添加stockId字段并修改库存扣减逻辑使用具体库存ID 7- 重构StockInventoryController中的成品库存树查询接口和导入导出功能 8- 新增成品和非成品库存导入导出的数据模型和Excel工具类 9- 优化StockInventoryServiceImpl中的库存扣减逻辑,支持按特定库存ID操作 10- 更新库存导入导出功能,区分成品和非成品类型并提供相应模板
---
src/main/java/com/ruoyi/production/controller/ProductBomController.java | 62 +++++++++++++++++++++++++++---
1 files changed, 55 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/controller/ProductBomController.java b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
index b8d9416..79eb6e0 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductBomController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
@@ -3,23 +3,30 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.poi.ExcelUtil;
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.production.dto.BomImportDto;
import com.ruoyi.production.dto.ProductBomDto;
-import com.ruoyi.production.dto.ProductProcessDto;
import com.ruoyi.production.pojo.ProcessRoute;
import com.ruoyi.production.pojo.ProductBom;
-import com.ruoyi.production.pojo.ProductProcess;
+import com.ruoyi.production.pojo.ProductProcessRoute;
+import com.ruoyi.production.pojo.ProductStructure;
import com.ruoyi.production.service.ProcessRouteService;
import com.ruoyi.production.service.ProductBomService;
-import com.ruoyi.production.service.ProductProcessService;
+import com.ruoyi.production.service.ProductProcessRouteService;
+import com.ruoyi.production.service.ProductStructureService;
+import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@@ -32,6 +39,7 @@
*/
@RestController
@RequestMapping("/productBom")
+@Api(tags = "BOM")
public class ProductBomController {
@Autowired
@@ -39,6 +47,12 @@
@Autowired
private ProcessRouteService processRouteService;
+
+ @Autowired
+ private ProductProcessRouteService productProcessRouteService;
+
+ @Autowired
+ private ProductStructureService productStructureService;
@GetMapping("/listPage")
@Log(title = "BOM-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
@@ -51,15 +65,22 @@
@ApiModelProperty("鏂板BOM")
@PostMapping("/add")
@Log(title = "鏂板", businessType = BusinessType.INSERT)
- public AjaxResult add( @RequestBody ProductBom productBom) {
+ public AjaxResult add(@RequestBody ProductBom productBom) {
return productBomService.add(productBom);
+ }
+
+ @ApiModelProperty("澶嶅埗BOM")
+ @PostMapping("/copy")
+ @Log(title = "澶嶅埗BOM", businessType = BusinessType.INSERT)
+ public AjaxResult copy(@RequestBody ProductBomDto productBom) {
+ return productBomService.copy(productBom);
}
@ApiOperation("鏇存柊BOM")
@Log(title = "淇敼", businessType = BusinessType.UPDATE)
@PutMapping("/update")
public AjaxResult update(@RequestBody ProductBom productBom) {
- return AjaxResult.success(productBomService.updateById(productBom));
+ return AjaxResult.success(productBomService.update(productBom));
}
@ApiOperation("鍒犻櫎BOM")
@@ -67,12 +88,15 @@
@Log(title = "鍒犻櫎", businessType = BusinessType.DELETE)
public AjaxResult batchDelete(@RequestBody List<Integer> ids) {
List<ProcessRoute> list = processRouteService.list(Wrappers.<ProcessRoute>lambdaQuery().in(ProcessRoute::getBomId, ids));
- if (list.size()>0){
+ List<ProductProcessRoute> list2 = productProcessRouteService.list(Wrappers.<ProductProcessRoute>lambdaQuery().in(ProductProcessRoute::getBomId, ids));
+ if (list.size() > 0 || list2.size() > 0) {
return AjaxResult.error("璇OM宸茬粡瀛樺湪瀵瑰簲鐨勫伐鑹鸿矾绾�,鏃犳硶杩涜鍒犻櫎");
}
- if(CollectionUtils.isEmpty(ids)){
+ if (CollectionUtils.isEmpty(ids)) {
return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
}
+ //鍒犻櫎bom瀛愯〃
+ productStructureService.remove(Wrappers.<ProductStructure>lambdaQuery().in(ProductStructure::getBomId, ids));
return AjaxResult.success(productBomService.removeBatchByIds(ids));
}
@@ -84,4 +108,28 @@
return AjaxResult.success(productBoms);
}
+
+ @PostMapping("uploadBom")
+ @PreAuthorize("@ss.hasPermi('product:bom:import')")
+ @Log(title = "鏍规嵁Excel瀵煎叆BOM", businessType = BusinessType.IMPORT)
+ @ApiOperation("鏍规嵁Excel瀵煎叆BOM")
+ public AjaxResult uploadBom(@RequestParam("file") MultipartFile file) {
+ return productBomService.uploadBom(file);
+ }
+
+ @PostMapping("exportBom")
+ @PreAuthorize("@ss.hasPermi('product:bom:export')")
+ @ApiOperation("瀵煎嚭BOM鏂囦欢")
+ @Log(title = "瀵煎嚭BOM鏂囦欢", businessType = BusinessType.EXPORT)
+ public void exportBom(HttpServletResponse response, @RequestParam Integer bomId) {
+ productBomService.exportBom(response, bomId);
+ }
+
+ @GetMapping("/downloadTemplate")
+ @Log(title = "涓嬭浇BOM瀵煎叆妯℃澘", businessType = BusinessType.EXPORT)
+ @ApiOperation("涓嬭浇BOM瀵煎叆妯℃澘")
+ public void importTemplate(HttpServletResponse response) {
+ ExcelUtil<BomImportDto> excelUtil = new ExcelUtil<>(BomImportDto.class);
+ excelUtil.importTemplateExcel(response, "BOM瀵煎叆妯℃澘");
+ }
}
--
Gitblit v1.9.3