From e978ceb872e250c3e42d0457f7601082a7ac1b05 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期五, 13 三月 2026 17:57:52 +0800
Subject: [PATCH] 质量管理:增加原料相关功能

---
 src/main/java/com/ruoyi/common/enums/RawMaterialInspectState.java                          |   35 +++
 src/main/java/com/ruoyi/quality/service/impl/RawMaterialQualityInspectItemServiceImpl.java |   20 ++
 src/main/java/com/ruoyi/quality/controller/RawMaterialQualityInspectItemController.java    |   18 +
 src/main/java/com/ruoyi/quality/pojo/RawMaterial.java                                      |   65 ++++++
 src/main/resources/mapper/quality/RawMaterialQualityInspectItemMapper.xml                  |   14 +
 src/main/resources/mapper/quality/RawMaterialMapper.xml                                    |   38 +++
 doc/20260313_坤泰化工.sql                                                                      |   27 ++
 src/main/java/com/ruoyi/quality/pojo/RawMaterialQualityInspectItem.java                    |   47 ++++
 src/main/java/com/ruoyi/quality/controller/RawMaterialController.java                      |   58 +++++
 src/main/java/com/ruoyi/quality/mapper/RawMaterialQualityInspectItemMapper.java            |   18 +
 src/main/java/com/ruoyi/quality/service/impl/RawMaterialServiceImpl.java                   |   70 +++++++
 src/main/java/com/ruoyi/common/enums/RawMaterialCheckResult.java                           |   35 +++
 src/main/java/com/ruoyi/common/enums/RawMaterialCheckType.java                             |   36 +++
 src/main/java/com/ruoyi/quality/service/RawMaterialQualityInspectItemService.java          |   16 +
 src/main/java/com/ruoyi/quality/service/RawMaterialService.java                            |   22 ++
 src/main/java/com/ruoyi/quality/dto/RawMaterialDto.java                                    |   51 +++++
 src/main/java/com/ruoyi/quality/mapper/RawMaterialMapper.java                              |   23 ++
 17 files changed, 593 insertions(+), 0 deletions(-)

diff --git "a/doc/20260313_\345\235\244\346\263\260\345\214\226\345\267\245.sql" "b/doc/20260313_\345\235\244\346\263\260\345\214\226\345\267\245.sql"
new file mode 100644
index 0000000..3cfe25b
--- /dev/null
+++ "b/doc/20260313_\345\235\244\346\263\260\345\214\226\345\267\245.sql"
@@ -0,0 +1,27 @@
+#鍘熸枡琛�
+drop table if exists raw_material;
+create table raw_material
+(
+    id               bigint auto_increment primary key,
+    product_model_id bigint not null default 0 comment '浜у搧鍨嬪彿id',
+    batch_no         varchar(255) null comment '鎵规鍙�',
+    check_type       tinyint null comment '妫�楠岀被鍨� 0鍏ュ満妫� 1杞﹂棿妫� 2鍑哄巶妫�',
+    check_result     tinyint null comment '妫�楠岀粨鏋� 0鍚堟牸 1涓嶅悎鏍�',
+    inspect_state    tinyint null comment '绫诲埆(0:鏈彁浜�;1:宸叉彁浜�)',
+    check_user_name  varchar(255) null comment '妫�楠屽憳鍚嶇О',
+    check_time       date null comment '妫�楠屾棩鏈�',
+    create_time      datetime null comment '褰曞叆鏃堕棿',
+    update_time      datetime null comment '鏇存柊鏃堕棿',
+    index            idx_product_model_id (product_model_id)
+);
+
+drop table if exists raw_material_quality_inspect_item;
+create table raw_material_quality_inspect_item
+(
+    id                      bigint auto_increment primary key,
+    raw_material_id         bigint not null default 0 comment '鍘熸枡id',
+    quality_inspect_item_id bigint not null default 0 comment '璐ㄩ噺妫�楠岄」id',
+    create_time             datetime null comment '褰曞叆鏃堕棿',
+    update_time             datetime null comment '鏇存柊鏃堕棿',
+    unique idx_raw_material_id_quality_inspect_item_id (raw_material_id, quality_inspect_item_id)
+);
diff --git a/src/main/java/com/ruoyi/common/enums/RawMaterialCheckResult.java b/src/main/java/com/ruoyi/common/enums/RawMaterialCheckResult.java
new file mode 100644
index 0000000..7f692e4
--- /dev/null
+++ b/src/main/java/com/ruoyi/common/enums/RawMaterialCheckResult.java
@@ -0,0 +1,35 @@
+package com.ruoyi.common.enums;
+
+
+public enum RawMaterialCheckResult implements BaseEnum<Integer>{
+    RawMaterialCheckResultUnqualified(0, "涓嶅悎鏍�"),
+    RawMaterialCheckResultQualified(1, "鍚堟牸");
+
+    private final Integer value;
+    private final String label;
+
+    RawMaterialCheckResult(Integer value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    public Integer getCode() {
+        return value;
+    }
+
+    public String getValue() {
+        return label;
+    }
+
+    /**
+     * 鏍规嵁鍊艰幏鍙栧搴旂殑鏋氫妇
+     */
+    public static RawMaterialCheckResult fromValue(Integer value) {
+        for (RawMaterialCheckResult type : values()) {
+            if (type.getValue().equals(value)) {
+                return type;
+            }
+        }
+        throw new IllegalArgumentException("鏈煡鐨� RawMaterialCheckResult 鍊�: " + value);
+    }
+}
diff --git a/src/main/java/com/ruoyi/common/enums/RawMaterialCheckType.java b/src/main/java/com/ruoyi/common/enums/RawMaterialCheckType.java
new file mode 100644
index 0000000..82792fa
--- /dev/null
+++ b/src/main/java/com/ruoyi/common/enums/RawMaterialCheckType.java
@@ -0,0 +1,36 @@
+package com.ruoyi.common.enums;
+
+
+public enum RawMaterialCheckType implements BaseEnum<Integer>{
+    RawMaterialCheckTypeAdmission(0, "鍏ュ巶妫�"),
+    RawMaterialCheckTypeWorkshop(1, "杞﹂棿妫�"),
+    RawMaterialCheckTypeFinal(2, "鍑哄巶妫�");
+
+    private final Integer value;
+    private final String label;
+
+    RawMaterialCheckType(Integer value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    public Integer getCode() {
+        return value;
+    }
+
+    public String getValue() {
+        return label;
+    }
+
+    /**
+     * 鏍规嵁鍊艰幏鍙栧搴旂殑鏋氫妇
+     */
+    public static RawMaterialCheckType fromValue(Integer value) {
+        for (RawMaterialCheckType type : values()) {
+            if (type.getValue().equals(value)) {
+                return type;
+            }
+        }
+        throw new IllegalArgumentException("鏈煡鐨� RawMaterialCheckType 鍊�: " + value);
+    }
+}
diff --git a/src/main/java/com/ruoyi/common/enums/RawMaterialInspectState.java b/src/main/java/com/ruoyi/common/enums/RawMaterialInspectState.java
new file mode 100644
index 0000000..5e711f3
--- /dev/null
+++ b/src/main/java/com/ruoyi/common/enums/RawMaterialInspectState.java
@@ -0,0 +1,35 @@
+package com.ruoyi.common.enums;
+
+
+public enum RawMaterialInspectState implements BaseEnum<Integer>{
+    RawMaterialInspectStateUnsubmitted(0, "鏈彁浜�"),
+    RawMaterialInspectStateSubmitted(1, "宸叉彁浜�");
+
+    private final Integer value;
+    private final String label;
+
+    RawMaterialInspectState(Integer value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    public Integer getCode() {
+        return value;
+    }
+
+    public String getValue() {
+        return label;
+    }
+
+    /**
+     * 鏍规嵁鍊艰幏鍙栧搴旂殑鏋氫妇
+     */
+    public static RawMaterialInspectState fromValue(Integer value) {
+        for (RawMaterialInspectState type : values()) {
+            if (type.getValue().equals(value)) {
+                return type;
+            }
+        }
+        throw new IllegalArgumentException("鏈煡鐨� RawMaterialInspectState 鍊�: " + value);
+    }
+}
diff --git a/src/main/java/com/ruoyi/quality/controller/RawMaterialController.java b/src/main/java/com/ruoyi/quality/controller/RawMaterialController.java
new file mode 100644
index 0000000..d3e0a38
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/controller/RawMaterialController.java
@@ -0,0 +1,58 @@
+package com.ruoyi.quality.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.quality.dto.RawMaterialDto;
+import com.ruoyi.quality.service.RawMaterialService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-13 02:44:09
+ */
+@RestController
+@RequestMapping("/quality/rawMaterial")
+public class RawMaterialController {
+    @Resource
+    private RawMaterialService rawMaterialService;
+
+    /**
+     * 鍘熸枡鍒嗛〉鏌ヨ
+     */
+    @GetMapping("/listPage")
+    public AjaxResult listPage(Page page, RawMaterialDto rawMaterialDto) {
+        return AjaxResult.success(rawMaterialService.listPage(page, rawMaterialDto));
+    }
+
+
+    /**
+     * 鍘熸枡鏂板
+     */
+    @PostMapping("")
+    public AjaxResult add(@RequestBody RawMaterialDto rawMaterialDto) {
+        return AjaxResult.success(rawMaterialService.add(rawMaterialDto));
+    }
+
+    /**
+     * 鍘熸枡鏇存柊
+     */
+    @PutMapping("")
+    public AjaxResult update(@RequestBody RawMaterialDto rawMaterialDto) {
+        return AjaxResult.success(rawMaterialService.updateById(rawMaterialDto));
+    }
+
+    /**
+     * 鍘熸枡鍒犻櫎
+     */
+    @DeleteMapping("")
+    public AjaxResult delete(@RequestBody List<Integer> ids) {
+        return AjaxResult.success(rawMaterialService.removeByIds(ids));
+    }
+}
diff --git a/src/main/java/com/ruoyi/quality/controller/RawMaterialQualityInspectItemController.java b/src/main/java/com/ruoyi/quality/controller/RawMaterialQualityInspectItemController.java
new file mode 100644
index 0000000..8f1df14
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/controller/RawMaterialQualityInspectItemController.java
@@ -0,0 +1,18 @@
+package com.ruoyi.quality.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-13 04:51:44
+ */
+@RestController
+@RequestMapping("/rawMaterialQualityInspectItem")
+public class RawMaterialQualityInspectItemController {
+
+}
diff --git a/src/main/java/com/ruoyi/quality/dto/RawMaterialDto.java b/src/main/java/com/ruoyi/quality/dto/RawMaterialDto.java
new file mode 100644
index 0000000..d1c1224
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/dto/RawMaterialDto.java
@@ -0,0 +1,51 @@
+package com.ruoyi.quality.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.quality.pojo.RawMaterial;
+
+import com.ruoyi.quality.pojo.RawMaterialQualityInspectItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * 鍘熸枡DTO
+ */
+@Data
+@ApiModel(value = "RawMaterialDto", description = "鍘熸枡DTO")
+public class RawMaterialDto extends RawMaterial implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 寮�濮嬫椂闂�
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty("琛ㄥ崟鎼滅储鏃堕棿鑼冨洿锛氬紑濮嬫椂闂�")
+    private LocalDate entryDateStart;
+
+    /**
+     * 缁撴潫鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty("琛ㄥ崟鎼滅储鏃堕棿鑼冨洿锛氱粨鏉熸椂闂�")
+    private LocalDate entryDateEnd;
+
+    @ApiModelProperty("妫�楠岀被鍨� 0鍏ュ満妫� 1杞﹂棿妫� 2鍑哄巶妫�")
+    private String checkTypeText;
+
+    @ApiModelProperty("妫�楠岀粨鏋� 0鍚堟牸 1涓嶅悎鏍�")
+    private String checkResultText;
+
+     @ApiModelProperty("绫诲埆(0:鏈彁浜�;1:宸叉彁浜�)")
+    private String inspectStateText;
+
+     @ApiModelProperty("鍘熸枡妫�娴嬮」鍒楄〃ids")
+     private List<Long> qualityInspectItemIds;
+}
diff --git a/src/main/java/com/ruoyi/quality/mapper/RawMaterialMapper.java b/src/main/java/com/ruoyi/quality/mapper/RawMaterialMapper.java
new file mode 100644
index 0000000..54c8f8b
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/mapper/RawMaterialMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.quality.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.quality.dto.RawMaterialDto;
+import com.ruoyi.quality.pojo.QualityInspectFile;
+import com.ruoyi.quality.pojo.RawMaterial;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-13 02:44:09
+ */
+@Mapper
+public interface RawMaterialMapper extends BaseMapper<RawMaterial> {
+    IPage<RawMaterialDto> listPage(Page page, @Param("params") RawMaterialDto rawMaterial);
+}
diff --git a/src/main/java/com/ruoyi/quality/mapper/RawMaterialQualityInspectItemMapper.java b/src/main/java/com/ruoyi/quality/mapper/RawMaterialQualityInspectItemMapper.java
new file mode 100644
index 0000000..b57faaf
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/mapper/RawMaterialQualityInspectItemMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.quality.mapper;
+
+import com.ruoyi.quality.pojo.RawMaterialQualityInspectItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-13 04:51:44
+ */
+@Mapper
+public interface RawMaterialQualityInspectItemMapper extends BaseMapper<RawMaterialQualityInspectItem> {
+
+}
diff --git a/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java b/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
new file mode 100644
index 0000000..bb7f632
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
@@ -0,0 +1,65 @@
+package com.ruoyi.quality.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-13 02:44:09
+ */
+@Getter
+@Setter
+@TableName("raw_material")
+@ApiModel(value = "鍘熸枡", description = "")
+public class RawMaterial implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("浜у搧鍨嬪彿id")
+    private Long productModelId;
+
+    @ApiModelProperty("鎵规鍙�")
+    private String batchNo;
+
+    @ApiModelProperty("妫�楠岀被鍨� 0鍏ュ満妫� 1杞﹂棿妫� 2鍑哄巶妫�")
+    private Integer checkType;
+
+    @ApiModelProperty("妫�楠岀粨鏋� 0鍚堟牸 1涓嶅悎鏍�")
+    private Integer checkResult;
+
+    @ApiModelProperty("绫诲埆(0:鏈彁浜�;1:宸叉彁浜�)")
+    private Integer inspectState;
+
+    @ApiModelProperty("妫�楠屽憳鍚嶇О")
+    private String checkUserName;
+
+    @ApiModelProperty("妫�楠屾棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "妫�娴嬫棩鏈�", width = 30, dateFormat = "yyyy-MM-dd")
+    private LocalDate checkTime;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/src/main/java/com/ruoyi/quality/pojo/RawMaterialQualityInspectItem.java b/src/main/java/com/ruoyi/quality/pojo/RawMaterialQualityInspectItem.java
new file mode 100644
index 0000000..d45162d
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/pojo/RawMaterialQualityInspectItem.java
@@ -0,0 +1,47 @@
+package com.ruoyi.quality.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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-13 04:51:44
+ */
+@Getter
+@Setter
+@TableName("raw_material_quality_inspect_item")
+@ApiModel(value = "RawMaterialQualityInspectItem瀵硅薄", description = "")
+public class RawMaterialQualityInspectItem implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("鍘熸枡id")
+    private Long rawMaterialId;
+
+    @ApiModelProperty("璐ㄩ噺妫�楠岄」id")
+    private Long qualityInspectItemId;
+
+    @ApiModelProperty("褰曞叆鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/src/main/java/com/ruoyi/quality/service/RawMaterialQualityInspectItemService.java b/src/main/java/com/ruoyi/quality/service/RawMaterialQualityInspectItemService.java
new file mode 100644
index 0000000..862acf7
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/service/RawMaterialQualityInspectItemService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.quality.service;
+
+import com.ruoyi.quality.pojo.RawMaterialQualityInspectItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-13 04:51:44
+ */
+public interface RawMaterialQualityInspectItemService extends IService<RawMaterialQualityInspectItem> {
+
+}
diff --git a/src/main/java/com/ruoyi/quality/service/RawMaterialService.java b/src/main/java/com/ruoyi/quality/service/RawMaterialService.java
new file mode 100644
index 0000000..bdbc216
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/service/RawMaterialService.java
@@ -0,0 +1,22 @@
+package com.ruoyi.quality.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.quality.dto.RawMaterialDto;
+import com.ruoyi.quality.pojo.QualityInspectFile;
+import com.ruoyi.quality.pojo.RawMaterial;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-13 02:44:09
+ */
+public interface RawMaterialService extends IService<RawMaterial> {
+    IPage<RawMaterialDto> listPage(Page page, RawMaterialDto rawMaterialDto);
+
+    boolean add(RawMaterialDto rawMaterialDto);
+}
diff --git a/src/main/java/com/ruoyi/quality/service/impl/RawMaterialQualityInspectItemServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/RawMaterialQualityInspectItemServiceImpl.java
new file mode 100644
index 0000000..606106d
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/service/impl/RawMaterialQualityInspectItemServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.quality.service.impl;
+
+import com.ruoyi.quality.pojo.RawMaterialQualityInspectItem;
+import com.ruoyi.quality.mapper.RawMaterialQualityInspectItemMapper;
+import com.ruoyi.quality.service.RawMaterialQualityInspectItemService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-13 04:51:44
+ */
+@Service
+public class RawMaterialQualityInspectItemServiceImpl extends ServiceImpl<RawMaterialQualityInspectItemMapper, RawMaterialQualityInspectItem> implements RawMaterialQualityInspectItemService {
+
+}
diff --git a/src/main/java/com/ruoyi/quality/service/impl/RawMaterialServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/RawMaterialServiceImpl.java
new file mode 100644
index 0000000..555763c
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/service/impl/RawMaterialServiceImpl.java
@@ -0,0 +1,70 @@
+package com.ruoyi.quality.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.collaborativeApproval.dto.DutyPlanDTO;
+import com.ruoyi.common.enums.RawMaterialCheckResult;
+import com.ruoyi.common.enums.RawMaterialCheckType;
+import com.ruoyi.common.enums.RawMaterialInspectState;
+import com.ruoyi.production.mapper.ProductProcessRouteMapper;
+import com.ruoyi.quality.dto.RawMaterialDto;
+import com.ruoyi.quality.mapper.RawMaterialQualityInspectItemMapper;
+import com.ruoyi.quality.pojo.RawMaterial;
+import com.ruoyi.quality.mapper.RawMaterialMapper;
+import com.ruoyi.quality.pojo.RawMaterialQualityInspectItem;
+import com.ruoyi.quality.service.RawMaterialQualityInspectItemService;
+import com.ruoyi.quality.service.RawMaterialService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-03-13 02:44:09
+ */
+@AllArgsConstructor
+@Service
+public class RawMaterialServiceImpl extends ServiceImpl<RawMaterialMapper, RawMaterial> implements RawMaterialService {
+    private RawMaterialMapper rawMaterialMapper;
+
+    private RawMaterialQualityInspectItemService rawMaterialQualityInspectItemService;
+
+    @Override
+    public IPage<RawMaterialDto> listPage(Page page, RawMaterialDto rawMaterialDto) {
+        IPage<RawMaterialDto> rawMaterials = rawMaterialMapper.listPage(page, rawMaterialDto);
+        for (RawMaterialDto rawMaterial : rawMaterials.getRecords()) {
+            rawMaterial.setCheckTypeText(RawMaterialCheckType.fromValue(rawMaterial.getCheckType()).getValue());
+            rawMaterial.setCheckResultText(RawMaterialCheckResult.fromValue(rawMaterial.getCheckResult()).getValue());
+            rawMaterial.setInspectStateText(RawMaterialInspectState.fromValue(rawMaterial.getInspectState()).getValue());
+        }
+        return rawMaterials;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean add(RawMaterialDto rawMaterialDto) {
+        // 鏂板妫�娴嬮」鍏宠仈鍏崇郴
+        if (rawMaterialDto.getQualityInspectItemIds() != null && !rawMaterialDto.getQualityInspectItemIds().isEmpty()) {
+            List<RawMaterialQualityInspectItem> rawMaterialQualityInspectItems = rawMaterialDto.getQualityInspectItemIds().stream()
+                    .map(id -> {
+                        RawMaterialQualityInspectItem item = new RawMaterialQualityInspectItem();
+                        item.setRawMaterialId(rawMaterialDto.getId());
+                        item.setQualityInspectItemId(id);
+                        return item;
+                    })
+                    .collect(Collectors.toList());
+            rawMaterialQualityInspectItemService.saveBatch(rawMaterialQualityInspectItems);
+        }
+        // 鏂板鍘熸枡
+        return rawMaterialMapper.insert(rawMaterialDto) > 0;
+    }
+}
diff --git a/src/main/resources/mapper/quality/RawMaterialMapper.xml b/src/main/resources/mapper/quality/RawMaterialMapper.xml
new file mode 100644
index 0000000..a5869d5
--- /dev/null
+++ b/src/main/resources/mapper/quality/RawMaterialMapper.xml
@@ -0,0 +1,38 @@
+<?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.quality.mapper.RawMaterialMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.quality.pojo.RawMaterial">
+        <id column="id" property="id" />
+        <result column="product_model_id" property="productModelId" />
+        <result column="batch_no" property="batchNo" />
+        <result column="check_type" property="checkType" />
+        <result column="check_result" property="checkResult" />
+        <result column="check_user_name" property="checkUserName" />
+        <result column="check_time" property="checkTime" />
+    </resultMap>
+
+    <select id="listPage" resultType="com.ruoyi.quality.dto.RawMaterialDto">
+        SELECT
+        rm.*,
+        p.product_name,
+        pm.model,
+        pm.unit
+        FROM raw_material rm
+        LEFT JOIN product_model pm ON rm.product_model_id = pm.id
+        LEFT JOIN product p ON p.id = pm.product_id
+        where
+        1=1
+        <if test="params.checkType != null ">
+            AND rm.check_type = #{params.checkType}
+        </if>
+        <if test="params.entryDateStart != null and params.entryDateStart != '' ">
+            AND rm.check_time &gt;= DATE_FORMAT(#{params.entryDateStart},'%Y-%m-%d')
+        </if>
+        <if test="params.entryDateEnd != null and params.entryDateEnd != '' ">
+            AND rm.check_time &lt;= DATE_FORMAT(#{params.entryDateEnd},'%Y-%m-%d')
+        </if>
+        ORDER BY rm.check_time DESC
+    </select>
+</mapper>
diff --git a/src/main/resources/mapper/quality/RawMaterialQualityInspectItemMapper.xml b/src/main/resources/mapper/quality/RawMaterialQualityInspectItemMapper.xml
new file mode 100644
index 0000000..fb95a2c
--- /dev/null
+++ b/src/main/resources/mapper/quality/RawMaterialQualityInspectItemMapper.xml
@@ -0,0 +1,14 @@
+<?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.quality.mapper.RawMaterialQualityInspectItemMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.quality.pojo.RawMaterialQualityInspectItem">
+        <id column="id" property="id" />
+        <result column="raw_material_id" property="rawMaterialId" />
+        <result column="quality_inspect_item_id" property="qualityInspectItemId" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+</mapper>

--
Gitblit v1.9.3