From 3b3d4d37ab1782c6790ed4ac68b06413f30c2c9b Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期四, 15 一月 2026 11:39:50 +0800
Subject: [PATCH] BOM重构增加新表
---
src/main/java/com/ruoyi/CodeGenerator.java | 130 ++++++++++++++
src/main/java/com/ruoyi/production/pojo/ProductStructure.java | 10 -
src/main/resources/mapper/production/ProductBomMapper.xml | 48 +++++
src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java | 49 +++++
src/main/java/com/ruoyi/production/pojo/ProductBom.java | 72 ++++++++
src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java | 32 +--
src/main/java/com/ruoyi/production/mapper/ProductBomMapper.java | 26 ++
src/main/java/com/ruoyi/production/controller/ProductStructureController.java | 12
src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java | 3
src/main/java/com/ruoyi/production/service/ProductBomService.java | 24 ++
src/main/java/com/ruoyi/production/service/ProductStructureService.java | 4
src/main/java/com/ruoyi/production/dto/ProductBomDto.java | 18 ++
src/main/resources/mapper/production/ProductStructureMapper.xml | 6
src/main/java/com/ruoyi/production/controller/ProductBomController.java | 69 +++++++
src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java | 2
15 files changed, 463 insertions(+), 42 deletions(-)
diff --git a/src/main/java/com/ruoyi/CodeGenerator.java b/src/main/java/com/ruoyi/CodeGenerator.java
new file mode 100644
index 0000000..856da1d
--- /dev/null
+++ b/src/main/java/com/ruoyi/CodeGenerator.java
@@ -0,0 +1,130 @@
+package com.ruoyi;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.generator.FastAutoGenerator;
+import com.baomidou.mybatisplus.generator.config.*;
+import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
+import com.baomidou.mybatisplus.generator.config.po.TableField;
+import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
+import com.baomidou.mybatisplus.generator.fill.Column;
+
+import java.util.Collections;
+import java.util.Scanner;
+
+// 婕旂ず渚嬪瓙锛屾墽琛� main 鏂规硶鎺у埗鍙拌緭鍏ユā鍧楄〃鍚嶅洖杞﹁嚜鍔ㄧ敓鎴愬搴旈」鐩洰褰曚腑
+public class CodeGenerator {
+
+ public static String database_url = "jdbc:mysql://1.15.17.182:9999/product-inventory-management-jtwy";
+ public static String database_username = "root";
+ public static String database_password= "xd@123456..";
+ public static String author = "鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃";
+ public static String model = "production"; // 妯″潡
+ public static String setParent = "com.ruoyi."+ model; // 鍖呰矾寰�
+ public static String tablePrefix = ""; // 璁剧疆杩囨护琛ㄥ墠缂�
+ public static void main(String[] args) {
+ String projectPath = System.getProperty("user.dir");
+ FastAutoGenerator.create(database_url, database_username, database_password)
+ // 鍏ㄥ眬閰嶇疆
+ .globalConfig(builder -> {
+ builder.author(author) // 璁剧疆浣滆��
+ .commentDate("yyyy-MM-dd hh:mm:ss") //娉ㄩ噴鏃ユ湡
+ .outputDir(projectPath + "/src/main/java") // 鎸囧畾杈撳嚭鐩綍
+ .disableOpenDir() //绂佹鎵撳紑杈撳嚭鐩綍锛岄粯璁ゆ墦寮�
+ .enableSwagger() // 寮�鍚痵wagger
+
+ ;
+ })
+ // 鏁版嵁婧愰厤缃紙鏍稿績锛氳嚜瀹氫箟绫诲瀷杞崲锛屽己鍒秚enant_id涓篖ong锛�
+ .dataSourceConfig(builder -> {
+ builder.typeConvert(new MySqlTypeConvert() {
+ /**
+ * 鑷畾涔夊瓧娈电被鍨嬭浆鎹�
+ * @param globalConfig 鍏ㄥ眬閰嶇疆
+ * @param tableField 琛ㄥ瓧娈典俊鎭�
+ * @return 杞崲鍚庣殑瀛楁绫诲瀷
+ */
+ @Override
+ public DbColumnType processTypeConvert(GlobalConfig globalConfig, TableField tableField) {
+ // 寮哄埗tenant_id瀛楁绫诲瀷涓篖ong
+ if ("tenant_id".equalsIgnoreCase(tableField.getName())) {
+ return DbColumnType.LONG;
+ }
+ // 鍏朵粬瀛楁浣跨敤榛樿杞崲瑙勫垯
+ return (DbColumnType) super.processTypeConvert(globalConfig, tableField);
+ }
+ });
+ })
+ // 鍖呴厤缃�
+ .packageConfig(builder -> {
+ builder.entity("pojo");
+ builder.parent(setParent) // 璁剧疆鐖跺寘鍚�
+ .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "/src/main/resources/mapper/"+model)); // 璁剧疆mapperXml鐢熸垚璺緞
+ })
+ // 绛栫暐閰嶇疆
+ .strategyConfig(builder -> {
+ builder.addInclude(scanner("琛ㄥ悕锛屽涓┖鏍煎垎鍓�").split(" ")) // 璁剧疆闇�瑕佺敓鎴愮殑琛ㄥ悕
+ .addTablePrefix(tablePrefix) // 璁剧疆杩囨护琛ㄥ墠缂�
+ // Entity 绛栫暐閰嶇疆
+ .entityBuilder()
+ .enableLombok() //寮�鍚� Lombok
+ .naming(NamingStrategy.underline_to_camel) //鏁版嵁搴撹〃鏄犲皠鍒板疄浣撶殑鍛藉悕绛栫暐锛氫笅鍒掔嚎杞┘宄板懡
+ .columnNaming(NamingStrategy.underline_to_camel) //鏁版嵁搴撹〃瀛楁鏄犲皠鍒板疄浣撶殑鍛藉悕绛栫暐锛氫笅鍒掔嚎杞┘宄板懡
+ .enableFileOverride() // 瑕嗙洊宸茬粡鐢熸垚鐨凟ntity鏂囦欢
+ .logicDeleteColumnName("state")
+ .addTableFills(
+ new Column("create_time", FieldFill.INSERT),
+ new Column("update_time", FieldFill.INSERT_UPDATE),
+ new Column("create_user", FieldFill.INSERT),
+ new Column("update_user", FieldFill.INSERT_UPDATE),
+ new Column("tenant_id", FieldFill.INSERT)
+ )
+ .idType(IdType.AUTO) // 鑷涓婚敭
+
+ // Mapper 绛栫暐閰嶇疆
+ .mapperBuilder()
+ .enableFileOverride() // 瑕嗙洊宸茬敓鎴怣apper鏂囦欢
+ .enableBaseResultMap() // 鑷姩鐢熸垚resultMap
+ .mapperAnnotation(org.apache.ibatis.annotations.Mapper.class)
+
+ // Service 绛栫暐閰嶇疆
+ .serviceBuilder()
+ .formatServiceFileName("%sService") //鏍煎紡鍖� service 鎺ュ彛鏂囦欢鍚嶇О锛�%s杩涜鍖归厤琛ㄥ悕锛屽 UserService
+ .formatServiceImplFileName("%sServiceImpl") //鏍煎紡鍖� service 瀹炵幇绫绘枃浠跺悕绉帮紝%s杩涜鍖归厤琛ㄥ悕锛屽 UserServiceImpl
+ .enableFileOverride() // 瑕嗙洊宸茬敓鎴愭枃浠�
+
+ // Controller 绛栫暐閰嶇疆
+ .controllerBuilder()
+ .enableFileOverride() // 瑕嗙洊宸茬敓鎴愭枃浠�
+ .enableRestStyle() // 寮�鍚敓鎴怈RestController 鎺у埗鍣�
+ ;
+ })
+ //5銆佹ā鏉垮紩鎿�
+ .templateEngine(new FreemarkerTemplateEngine()) //榛樿
+ .execute();
+ }
+
+ /**
+ * <p>
+ * 璇诲彇鎺у埗鍙板唴瀹�
+ * </p>
+ */
+ public static String scanner(String tip) {
+ Scanner scanner = new Scanner(System.in);
+ StringBuilder help = new StringBuilder();
+ help.append("璇疯緭鍏�" + tip + "锛�");
+ System.out.println(help.toString());
+ if (scanner.hasNext()) {
+ String ipt = scanner.next();
+
+ if (StringUtils.isNotBlank(ipt)) {
+ return ipt;
+ }
+ }
+ throw new MybatisPlusException("璇疯緭鍏ユ纭殑" + tip + "锛�");
+ }
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductBomController.java b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
new file mode 100644
index 0000000..502dbf1
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
@@ -0,0 +1,69 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.ProductBomDto;
+import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.pojo.ProductBom;
+import com.ruoyi.production.pojo.ProductProcess;
+import com.ruoyi.production.service.ProductBomService;
+import com.ruoyi.production.service.ProductProcessService;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * BOM涓昏〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 09:59:27
+ */
+@RestController
+@RequestMapping("/productBom")
+public class ProductBomController {
+
+ @Autowired
+ private ProductBomService productBomService;
+
+ @GetMapping("/listPage")
+ @Log(title = "BOM-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
+ @ApiOperation("BOM-鍒嗛〉鏌ヨ")
+ public AjaxResult listPage(Page page, ProductBomDto productBomDto) {
+ IPage<ProductBomDto> listPage = productBomService.listPage(page, productBomDto);
+ return AjaxResult.success(listPage);
+ }
+
+ @ApiModelProperty("鏂板BOM")
+ @PostMapping("/add")
+ @Log(title = "鏂板", businessType = BusinessType.INSERT)
+ public AjaxResult add( @RequestBody ProductBom productBom) {
+ return productBomService.add(productBom);
+ }
+
+ @ApiOperation("鏇存柊BOM")
+ @Log(title = "淇敼", businessType = BusinessType.UPDATE)
+ @PutMapping("/update")
+ public AjaxResult update(@RequestBody ProductBom productBom) {
+ return AjaxResult.success(productBomService.updateById(productBom));
+ }
+
+ @ApiOperation("鍒犻櫎BOM")
+ @DeleteMapping("/batchDelete")
+ @Log(title = "鍒犻櫎", businessType = BusinessType.DELETE)
+ public AjaxResult batchDelete(@RequestBody List<Integer> ids) {
+ if(CollectionUtils.isEmpty(ids)){
+ return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
+ }
+ return AjaxResult.success(productBomService.removeBatchByIds(ids));
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductStructureController.java b/src/main/java/com/ruoyi/production/controller/ProductStructureController.java
index 3e2fee4..2f99a00 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductStructureController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductStructureController.java
@@ -26,15 +26,15 @@
private ProductStructureService productStructureService;
- @ApiOperation("鏍规嵁productId鏌ヨ")
- @GetMapping("/listByproductModelId/{productModelId}")
- public R listByproductModelId( @PathVariable("productModelId") Long productModelId){
- return R.ok(productStructureService.listByproductModelId( productModelId));
- }
-
@ApiOperation("鏂板BOM")
@PostMapping()
public R addOrUpdate(@RequestBody ProductStructureDto productStructureDto){
return R.ok(productStructureService.addProductStructureDto(productStructureDto));
}
+
+ @ApiOperation("BOM鏌ョ湅璇︽儏")
+ @GetMapping("/listBybomId/{bomId}")
+ public R listBybomId( @PathVariable("bomId") Long bomId){
+ return R.ok(productStructureService.listBybomId(bomId));
+ }
}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductBomDto.java b/src/main/java/com/ruoyi/production/dto/ProductBomDto.java
new file mode 100644
index 0000000..ab695ca
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductBomDto.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.production.pojo.ProductBom;
+import lombok.Data;
+
+import java.util.List;
+
+//鍒嗛〉鏌ヨ鍥炴樉鏁版嵁
+@Data
+public class ProductBomDto extends ProductBom {
+
+ //浜у搧鍚嶇О
+ private String productName;
+
+ //浜у搧瑙勬牸鍨嬪彿
+ private String productModelName;
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductBomMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductBomMapper.java
new file mode 100644
index 0000000..1183335
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductBomMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.production.dto.ProductBomDto;
+import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.pojo.ProductBom;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * BOM涓昏〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 09:59:27
+ */
+@Mapper
+public interface ProductBomMapper extends BaseMapper<ProductBom> {
+
+ IPage<ProductBomDto> listPage(Page page, @Param("c") ProductBomDto productBomDto);
+
+ ProductBomDto getById(@Param("bomId") Long bomId);
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java
index 0460c75..66a13aa 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java
@@ -12,5 +12,6 @@
@Mapper
public interface ProductStructureMapper extends BaseMapper<ProductStructure> {
- List<ProductStructureDto> listByproductModelId(@Param("productModelId") Long productModelId);
+
+ List<ProductStructureDto> listBybomId(@Param("bomId") Long bomId);
}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductBom.java b/src/main/java/com/ruoyi/production/pojo/ProductBom.java
new file mode 100644
index 0000000..802724a
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductBom.java
@@ -0,0 +1,72 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * <p>
+ * BOM涓昏〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 09:59:27
+ */
+@Getter
+@Setter
+@TableName("product_bom")
+@ApiModel(value = "ProductBom瀵硅薄", description = "BOM涓昏〃")
+public class ProductBom implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("bom缂栧彿")
+ private String bomNo;
+
+ @ApiModelProperty("浜у搧瑙勬牸id")
+ private Long productModelId;
+
+ @ApiModelProperty("澶囨敞")
+ private String remark;
+
+ @ApiModelProperty("鐗堟湰鍙�")
+ private String version;
+
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("鍒涘缓鑰�")
+ @TableField(fill = FieldFill.INSERT)
+ private Long createUser;
+
+ @ApiModelProperty("鏇存柊鑰�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Long updateUser;
+
+ @ApiModelProperty("绉熸埛ID")
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductStructure.java b/src/main/java/com/ruoyi/production/pojo/ProductStructure.java
index 4b0231b..f3b4014 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductStructure.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductStructure.java
@@ -40,16 +40,6 @@
private String unit;
/**
- * 鐖剁骇id
- */
- private Long parentId;
-
- /**
- * 鐩樻暟閲�
- */
- private BigDecimal diskQuantity;
-
- /**
* 绉熸埛ID
*/
@TableField(fill = FieldFill.INSERT)
diff --git a/src/main/java/com/ruoyi/production/service/ProductBomService.java b/src/main/java/com/ruoyi/production/service/ProductBomService.java
new file mode 100644
index 0000000..0736338
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductBomService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.production.dto.ProductBomDto;
+import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.pojo.ProductBom;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * BOM涓昏〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 09:59:27
+ */
+public interface ProductBomService extends IService<ProductBom> {
+
+ IPage<ProductBomDto> listPage(Page page, ProductBomDto productBomDto);
+
+ AjaxResult add(ProductBom productBom);
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductStructureService.java b/src/main/java/com/ruoyi/production/service/ProductStructureService.java
index c75c150..b85a040 100644
--- a/src/main/java/com/ruoyi/production/service/ProductStructureService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductStructureService.java
@@ -10,8 +10,8 @@
public interface ProductStructureService extends IService<ProductStructure> {
- ProductModelDto listByproductModelId(Long productId);
-
Boolean addProductStructureDto(ProductStructureDto productStructureDto);
+ List<ProductStructureDto> listBybomId(Long bomId);
+
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
index 9fafe5f..a5427d2 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
@@ -35,7 +35,7 @@
this.save(processRoute);
String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
String idStr = String.format("%06d", processRoute.getId());
- String newProductCode = "GY" + dateStr + idStr;
+ String newProductCode = "GYLX" + dateStr + idStr;
// 鏇存柊鏁版嵁搴撲腑鐨刾roductCode
processRoute.setProcessRouteCode(newProductCode);
return processRouteMapper.updateById(processRoute);
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
new file mode 100644
index 0000000..d519593
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
@@ -0,0 +1,49 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.production.dto.ProductBomDto;
+import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.pojo.ProductBom;
+import com.ruoyi.production.mapper.ProductBomMapper;
+import com.ruoyi.production.pojo.ProductProcess;
+import com.ruoyi.production.service.ProductBomService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * BOM涓昏〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 09:59:27
+ */
+@Service
+public class ProductBomServiceImpl extends ServiceImpl<ProductBomMapper, ProductBom> implements ProductBomService {
+
+ @Autowired
+ private ProductBomMapper productBomMapper;
+
+ @Override
+ public IPage<ProductBomDto> listPage(Page page, ProductBomDto productBomDto) {
+ return productBomMapper.listPage(page,productBomDto);
+ }
+
+ @Override
+ public AjaxResult add(ProductBom productBom) {
+ boolean save = productBomMapper.insert(productBom) > 0;
+ if (save) {
+ // 鏍规嵁id鐢熸垚no瀛楁锛欸X + 8浣嶆暟瀛楋紙涓嶈冻8浣嶅墠闈㈣ˉ0锛�
+ String no = "BM." + String.format("%05d", productBom.getId());
+ productBom.setBomNo(no);
+ productBomMapper.updateById(productBom);
+ return AjaxResult.success();
+ }
+ return AjaxResult.error();
+ }
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
index b54617f..310a723 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
@@ -1,13 +1,16 @@
package com.ruoyi.production.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.dto.ProductModelDto;
+import com.ruoyi.basic.dto.ProductTreeDto;
import com.ruoyi.basic.mapper.ProductMapper;
import com.ruoyi.basic.mapper.ProductModelMapper;
import com.ruoyi.basic.pojo.Product;
import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.production.dto.ProductStructureDto;
+import com.ruoyi.production.mapper.ProductBomMapper;
import com.ruoyi.production.mapper.ProductStructureMapper;
import com.ruoyi.production.pojo.ProductStructure;
import com.ruoyi.production.service.ProductStructureService;
@@ -17,7 +20,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import java.util.HashMap;
+import java.util.ArrayList;
import java.util.List;
@Service
@@ -27,29 +30,22 @@
@Autowired
private ProductStructureMapper productStructureMapper;
- @Autowired
- private ProductModelMapper productModelMapper;
- @Autowired
- private ProductMapper productMapper;
- @Override
- public ProductModelDto listByproductModelId(Long productModelId) {
- ProductModel productModel = productModelMapper.selectById(productModelId);
- Product product = productMapper.selectById(productModel.getProductId());
- ProductModelDto productModelDto = new ProductModelDto();
- BeanUtils.copyProperties(productModel,productModelDto);
- productModelDto.setProductName(product.getProductName());
- List<ProductStructureDto> productStructureDtos = productStructureMapper.listByproductModelId(productModelId);
- productModelDto.setProductStructureList(productStructureDtos);
- return productModelDto;
- }
+
@Override
public Boolean addProductStructureDto(ProductStructureDto productStructureDto) {
- this.remove(new QueryWrapper<ProductStructure>().lambda().eq(ProductStructure::getParentId, productStructureDto.getParentId()));
+ this.remove(new QueryWrapper<ProductStructure>().lambda().eq(ProductStructure::getBomId, productStructureDto.getBomId()));
productStructureDto.getProductStructureList().forEach(productStructure -> {
- productStructure.setParentId(productStructureDto.getParentId());
+ productStructure.setBomId(productStructureDto.getBomId());
});
return this.saveBatch(productStructureDto.getProductStructureList());
}
+
+ @Override
+ public List<ProductStructureDto> listBybomId(Long bomId) {
+ List<ProductStructureDto> tree = productStructureMapper.listBybomId(bomId);
+ return tree;
+
+ }
}
diff --git a/src/main/resources/mapper/production/ProductBomMapper.xml b/src/main/resources/mapper/production/ProductBomMapper.xml
new file mode 100644
index 0000000..ec06cd3
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductBomMapper.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.production.mapper.ProductBomMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductBom">
+ <id column="id" property="id"/>
+ <result column="product_model_id" property="productModelId"/>
+ <result column="bom_no" property="bomNo"/>
+ <result column="remark" property="remark"/>
+ <result column="version" property="version"/>
+ <result column="create_time" property="createTime"/>
+ <result column="update_time" property="updateTime"/>
+ <result column="create_user" property="createUser"/>
+ <result column="update_user" property="updateUser"/>
+ <result column="tenant_id" property="tenantId"/>
+ </resultMap>
+ <select id="listPage" resultType="com.ruoyi.production.dto.ProductBomDto">
+ select * from (select pb.*,
+ pm.model productModelName,
+ p.product_name productName
+ from product_bom pb
+ left join product_model pm on pb.product_model_id = pm.id
+ left join product p on pm.product_id = p.id)A
+ where 1=1
+ <if test="c.productModelName != null">
+ and productModelName = #{c.productModelName}
+ </if>
+ <if test="c.productName != null">
+ and productName = #{c.productName}
+ </if>
+ <if test="c.bomNo != null">
+ and bom_no = #{c.bomNo}
+ </if>
+ <if test="c.version != null">
+ and version = #{c.version}
+ </if>
+ </select>
+ <select id="getById" resultType="com.ruoyi.production.dto.ProductBomDto">
+ select pb.*,
+ pm.model productModelName,
+ p.product_name productName
+ from product_bom pb
+ left join product_model pm on pb.product_model_id = pm.id
+ left join product p on pm.product_id = p.id
+ </select>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductStructureMapper.xml b/src/main/resources/mapper/production/ProductStructureMapper.xml
index df5a966..f9faded 100644
--- a/src/main/resources/mapper/production/ProductStructureMapper.xml
+++ b/src/main/resources/mapper/production/ProductStructureMapper.xml
@@ -9,11 +9,9 @@
<result property="unitQuantity" column="unit_quantity"/>
<result property="demandedQuantity" column="demanded_quantity"/>
<result property="unit" column="unit"/>
- <result property="diskQuantity" column="disk_quantity"/>
<result property="tenantId" column="tenant_id"/>
</resultMap>
-
- <select id="listByproductModelId" resultType="com.ruoyi.production.dto.ProductStructureDto">
+ <select id="listBybomId" resultType="com.ruoyi.production.dto.ProductStructureDto">
select ps.*,
p.product_name,
pp.name as process_name,
@@ -24,7 +22,7 @@
left join product_model pm on ps.product_model_id = pm.id
left join product p on pm.product_id = p.id
left join product_process pp on ps.process_id = pp.id
- where ps.parent_id = #{productModelId}
+ where ps.bom_id = #{bomId}
order by ps.id
</select>
</mapper>
--
Gitblit v1.9.3