huminmin
2026-06-04 5cfa20bbf53a145e2f7abd5d8b61517b780f915c
更改
已添加9个文件
467 ■■■■■ 文件已修改
basic-server/doc/质量管理.sql 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/controller/QualityDefectiveProductController.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/dto/DefectiveProductAuditDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/dto/DefectiveProductDto.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/mapper/QualityDefectiveProductMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/pojo/QualityDefectiveProduct.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/QualityDefectiveProductService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/impl/QualityDefectiveProductServiceImpl.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/resources/mapper/QualityDefectiveProductMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/doc/ÖÊÁ¿¹ÜÀí.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
CREATE TABLE `quality_defective_product` (
                                             `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
                                             `report_no` VARCHAR(100) DEFAULT NULL COMMENT '报告编号',
                                             `product_name` VARCHAR(200) DEFAULT NULL COMMENT '产品名称',
                                             `production_batch` VARCHAR(100) DEFAULT NULL COMMENT '生产批次',
                                             `material_name` VARCHAR(200) DEFAULT NULL COMMENT '物料名称',
                                             `specs_models` VARCHAR(200) DEFAULT NULL COMMENT '规格型号',
                                             `manufacturer` VARCHAR(200) DEFAULT NULL COMMENT '生产厂家',
                                             `raw_material_info` TEXT DEFAULT NULL COMMENT '原材料信息',
                                             `defective_qty` INT DEFAULT NULL COMMENT '不良品数量',
                                             `related_test_info` TEXT DEFAULT NULL COMMENT '关联检测信息',
                                             `unqualified_desc` TEXT DEFAULT NULL COMMENT '不合格描述',
                                             `inspector` VARCHAR(100) DEFAULT NULL COMMENT '检验人员',
                                             `register_by` VARCHAR(100) DEFAULT NULL COMMENT '登记人',
                                             `register_time` DATETIME DEFAULT NULL COMMENT '登记时间',
                                             `audit_status` TINYINT DEFAULT '0' COMMENT '审核状态:0-待审核,1-已审核',
                                             `audit_remark` TEXT DEFAULT NULL COMMENT '审核意见',
                                             `audit_by` VARCHAR(100) DEFAULT NULL COMMENT '审核人',
                                             `audit_time` DATETIME DEFAULT NULL COMMENT '审核时间',
                                             `create_by` VARCHAR(100) DEFAULT NULL COMMENT '创建人',
                                             `update_by` VARCHAR(100) DEFAULT NULL COMMENT '修改人',
                                             `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                             `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                                             PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='不良品登记表';
basic-server/src/main/java/com/ruoyi/basic/controller/QualityDefectiveProductController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,99 @@
package com.ruoyi.basic.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.basic.dto.DefectiveProductAuditDto;
import com.ruoyi.basic.dto.DefectiveProductDto;
import com.ruoyi.basic.pojo.QualityDefectiveProduct;
import com.ruoyi.basic.service.QualityDefectiveProductService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
 * ä¸è‰¯å“ç™»è®°æŽ§åˆ¶å™¨
 */
@Api(tags = "不良品登记")
@RestController
@RequestMapping("/quality/defectiveProduct")
public class QualityDefectiveProductController {
    @Resource
    private QualityDefectiveProductService defectiveProductService;
    /**
     * æŸ¥è¯¢ä¸è‰¯å“ç™»è®°åˆ—表
     */
    @ApiOperation(value = "查询不良品登记列表")
    @GetMapping("/list")
    public Result<IPage<QualityDefectiveProduct>> pageDefectiveProduct(Page<QualityDefectiveProduct> page, QualityDefectiveProduct query) {
        return Result.success(defectiveProductService.selectPage(page, query));
    }
    /**
     * èŽ·å–ä¸è‰¯å“è¯¦æƒ…
     */
    @ApiOperation(value = "获取不良品详情")
    @GetMapping("/get")
    public Result<QualityDefectiveProduct> getDefectiveProduct(Long id) {
        return Result.success(defectiveProductService.selectById(id));
    }
    /**
     * æ–°å¢žä¸è‰¯å“ç™»è®°
     */
    @ApiOperation(value = "新增不良品登记")
    @PostMapping
    public Result<Integer> addDefectiveProduct(@RequestBody DefectiveProductDto data) {
        return Result.success(defectiveProductService.insert(data));
    }
    /**
     * ä¿®æ”¹ä¸è‰¯å“ç™»è®°
     */
    @ApiOperation(value = "修改不良品登记")
    @PostMapping("/update")
    public Result<Integer> updateDefectiveProduct(@RequestBody QualityDefectiveProduct data) {
        return Result.success(defectiveProductService.update(data));
    }
    /**
     * åˆ é™¤ä¸è‰¯å“ç™»è®°ï¼ˆæ”¯æŒæ‰¹é‡åˆ é™¤ï¼‰
     */
    @ApiOperation(value = "删除不良品登记")
    @DeleteMapping("/delete")
    public Result<Integer> deleteDefectiveProduct(Long[] ids) {
        if (ids == null || ids.length == 0) {
            return Result.fail("请选择要删除的记录");
        }
        if (ids.length == 1) {
            return Result.success(defectiveProductService.deleteById(ids[0]));
        }
        return Result.success(defectiveProductService.deleteBatchIds(ids));
    }
    /**
     * æŸ¥è¯¢ä¸è‰¯å“å®¡æ ¸åˆ—表
     */
    @ApiOperation(value = "查询不良品审核列表")
    @GetMapping("/audit/page")
    public Result<IPage<QualityDefectiveProduct>> pageDefectiveProductAudit(Page<QualityDefectiveProduct> page, QualityDefectiveProduct query) {
        // å®¡æ ¸åˆ—表默认只查询待审核状态
        if (query.getAuditStatus() == null) {
            query.setAuditStatus(0);
        }
        return Result.success(defectiveProductService.selectPage(page, query));
    }
    /**
     * ä¸è‰¯å“å®¡æ ¸
     */
    @ApiOperation(value = "不良品审核")
    @PostMapping("/audit")
    public Result<Integer> auditDefectiveProduct(@RequestBody DefectiveProductAuditDto data) {
        return Result.success(defectiveProductService.audit(data));
    }
}
basic-server/src/main/java/com/ruoyi/basic/dto/DefectiveProductAuditDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.basic.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * ä¸è‰¯å“å®¡æ ¸DTO
 */
@Data
public class DefectiveProductAuditDto {
    @ApiModelProperty(value = "主键ID")
    private Long id;
    @ApiModelProperty(value = "审核状态:0-待审核,1-已审核")
    private Integer auditStatus;
    @ApiModelProperty(value = "审核意见")
    private String auditRemark;
}
basic-server/src/main/java/com/ruoyi/basic/dto/DefectiveProductDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
package com.ruoyi.basic.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * ä¸è‰¯å“ç™»è®°DTO
 */
@Data
public class DefectiveProductDto {
    @ApiModelProperty(value = "报告编号")
    private String reportNo;
    @ApiModelProperty(value = "产品名称")
    private String productName;
    @ApiModelProperty(value = "生产批次")
    private String productionBatch;
    @ApiModelProperty(value = "物料名称")
    private String materialName;
    @ApiModelProperty(value = "规格型号")
    private String specsModels;
    @ApiModelProperty(value = "生产厂家")
    private String manufacturer;
    @ApiModelProperty(value = "原材料信息")
    private String rawMaterialInfo;
    @ApiModelProperty(value = "不良品数量")
    private Integer defectiveQty;
    @ApiModelProperty(value = "关联检测信息")
    private String relatedTestInfo;
    @ApiModelProperty(value = "不合格描述")
    private String unqualifiedDesc;
    @ApiModelProperty(value = "检验人员")
    private String inspector;
}
basic-server/src/main/java/com/ruoyi/basic/mapper/QualityDefectiveProductMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.basic.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.pojo.QualityDefectiveProduct;
import org.apache.ibatis.annotations.Param;
/**
 * ä¸è‰¯å“ç™»è®°Mapper接口
 */
public interface QualityDefectiveProductMapper extends BaseMapper<QualityDefectiveProduct> {
    IPage<QualityDefectiveProduct> selectPage(Page<QualityDefectiveProduct> page, @Param("ew") QueryWrapper<QualityDefectiveProduct> ew);
}
basic-server/src/main/java/com/ruoyi/basic/pojo/QualityDefectiveProduct.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
package com.ruoyi.basic.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * ä¸è‰¯å“ç™»è®°
 * @TableName quality_defective_product
 */
@TableName(value ="quality_defective_product")
@Data
public class QualityDefectiveProduct implements Serializable {
    @TableId(type = IdType.AUTO)
    private Long id;
    @ApiModelProperty(value = "报告编号")
    private String reportNo;
    @ApiModelProperty(value = "产品名称")
    private String productName;
    @ApiModelProperty(value = "生产批次")
    private String productionBatch;
    @ApiModelProperty(value = "物料名称")
    private String materialName;
    @ApiModelProperty(value = "规格型号")
    private String specsModels;
    @ApiModelProperty(value = "生产厂家")
    private String manufacturer;
    @ApiModelProperty(value = "原材料信息")
    private String rawMaterialInfo;
    @ApiModelProperty(value = "不良品数量")
    private Integer defectiveQty;
    @ApiModelProperty(value = "关联检测信息")
    private String relatedTestInfo;
    @ApiModelProperty(value = "不合格描述")
    private String unqualifiedDesc;
    @ApiModelProperty(value = "检验人员")
    private String inspector;
    @ApiModelProperty(value = "登记人")
    private String registerBy;
    @ApiModelProperty(value = "登记时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime registerTime;
    @ApiModelProperty(value = "审核状态:0-待审核,1-审核通过,2-驳回")
    private Integer auditStatus;
    @ApiModelProperty(value = "审核意见")
    private String auditRemark;
    @ApiModelProperty(value = "审核人")
    private String auditBy;
    @ApiModelProperty(value = "审核时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime auditTime;
    @ApiModelProperty(value = "创建人")
    private String createBy;
    @ApiModelProperty(value = "修改人")
    private String updateBy;
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @ApiModelProperty(value = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
}
basic-server/src/main/java/com/ruoyi/basic/service/QualityDefectiveProductService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.ruoyi.basic.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.dto.DefectiveProductAuditDto;
import com.ruoyi.basic.dto.DefectiveProductDto;
import com.ruoyi.basic.pojo.QualityDefectiveProduct;
import java.util.List;
/**
 * ä¸è‰¯å“ç™»è®°Service接口
 */
public interface QualityDefectiveProductService {
    IPage<QualityDefectiveProduct> selectPage(Page<QualityDefectiveProduct> page, QualityDefectiveProduct entity);
    QualityDefectiveProduct selectById(Long id);
    int insert(DefectiveProductDto dto);
    int update(Long id, DefectiveProductDto dto);
    int update(QualityDefectiveProduct entity);
    int deleteById(Long id);
    int deleteBatchIds(Long[] ids);
    int audit(DefectiveProductAuditDto auditDto);
    List<QualityDefectiveProduct> selectList();
}
basic-server/src/main/java/com/ruoyi/basic/service/impl/QualityDefectiveProductServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,121 @@
package com.ruoyi.basic.service.impl;
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.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.basic.dto.DefectiveProductAuditDto;
import com.ruoyi.basic.dto.DefectiveProductDto;
import com.ruoyi.basic.mapper.QualityDefectiveProductMapper;
import com.ruoyi.basic.pojo.QualityDefectiveProduct;
import com.ruoyi.basic.service.QualityDefectiveProductService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
/**
 * ä¸è‰¯å“ç™»è®°Service实现类
 */
@Service
public class QualityDefectiveProductServiceImpl implements QualityDefectiveProductService {
    @Resource
    private QualityDefectiveProductMapper defectiveProductMapper;
    @Override
    public IPage<QualityDefectiveProduct> selectPage(Page<QualityDefectiveProduct> page, QualityDefectiveProduct entity) {
        return defectiveProductMapper.selectPage(page, QueryWrappers.queryWrappers(entity));
    }
    @Override
    public QualityDefectiveProduct selectById(Long id) {
        return defectiveProductMapper.selectById(id);
    }
    @Override
    public int insert(DefectiveProductDto dto) {
        QualityDefectiveProduct entity = new QualityDefectiveProduct();
        BeanUtils.copyProperties(dto, entity);
        // èŽ·å–å½“å‰ç™»å½•ç”¨æˆ·
        String username = SecurityUtils.getUsername();
        // è®¾ç½®ç™»è®°ç›¸å…³å­—段
        entity.setRegisterBy(username);
        entity.setRegisterTime(LocalDateTime.now());
        // è®¾ç½®åˆ›å»ºç›¸å…³å­—段
        entity.setCreateBy(username);
        entity.setCreateTime(LocalDateTime.now());
        // è®¾ç½®æ›´æ–°ç›¸å…³å­—段
        entity.setUpdateBy(username);
        entity.setUpdateTime(LocalDateTime.now());
        // è®¾ç½®å®¡æ ¸çŠ¶æ€ä¸ºå¾…å®¡æ ¸
        entity.setAuditStatus(0);
        return defectiveProductMapper.insert(entity);
    }
    @Override
    public int update(Long id, DefectiveProductDto dto) {
        QualityDefectiveProduct entity = defectiveProductMapper.selectById(id);
        if (entity == null) {
            throw new RuntimeException("不良品信息不存在");
        }
        BeanUtils.copyProperties(dto, entity);
        entity.setId(id);
        entity.setUpdateBy(SecurityUtils.getUsername());
        entity.setUpdateTime(LocalDateTime.now());
        return defectiveProductMapper.updateById(entity);
    }
    @Override
    public int update(QualityDefectiveProduct entity) {
        if (entity.getId() == null) {
            throw new RuntimeException("ID不能为空");
        }
        entity.setUpdateBy(SecurityUtils.getUsername());
        entity.setUpdateTime(LocalDateTime.now());
        return defectiveProductMapper.updateById(entity);
    }
    @Override
    public int deleteById(Long id) {
        return defectiveProductMapper.deleteById(id);
    }
    @Override
    public int deleteBatchIds(Long[] ids) {
        return defectiveProductMapper.deleteBatchIds(java.util.Arrays.asList(ids));
    }
    @Override
    public int audit(DefectiveProductAuditDto auditDto) {
        QualityDefectiveProduct entity = defectiveProductMapper.selectById(auditDto.getId());
        if (entity == null) {
            throw new RuntimeException("不良品信息不存在");
        }
        entity.setAuditStatus(auditDto.getAuditStatus());
        entity.setAuditRemark(auditDto.getAuditRemark());
        entity.setAuditBy(SecurityUtils.getUsername());
        entity.setAuditTime(LocalDateTime.now());
        entity.setUpdateBy(SecurityUtils.getUsername());
        entity.setUpdateTime(LocalDateTime.now());
        return defectiveProductMapper.updateById(entity);
    }
    @Override
    public List<QualityDefectiveProduct> selectList() {
        return defectiveProductMapper.selectList(Wrappers.emptyWrapper());
    }
}
basic-server/src/main/resources/mapper/QualityDefectiveProductMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
<?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.basic.mapper.QualityDefectiveProductMapper">
    <select id="selectPage" resultType="com.ruoyi.basic.pojo.QualityDefectiveProduct">
        SELECT
        id, report_no, product_name, production_batch, material_name, specs_models,
        manufacturer, raw_material_info, defective_qty, related_test_info,
        unqualified_desc, inspector, register_by, register_time,
        audit_status, audit_remark, audit_by, audit_time,
        create_by, update_by, create_time, update_time
        FROM quality_defective_product
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
        ORDER BY create_time DESC
    </select>
</mapper>