chenhj
3 天以前 8ec375a6fab78e088b3c05e550c0581c9c57152e
原料检测
已修改16个文件
295 ■■■■ 文件已修改
src/main/java/com/ruoyi/common/enums/FileNameType.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/enums/RawMaterialCheckResult.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/enums/RawMaterialCheckType.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/enums/RawMaterialInspectState.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/pojo/DeviceRepair.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/pojo/QualityInspectItem.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/other/service/TempFileService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/controller/RawMaterialController.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/dto/RawMaterialDto.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/pojo/RawMaterialQualityInspectItem.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/service/RawMaterialService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/quality/service/impl/RawMaterialServiceImpl.java 115 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/quality/RawMaterialMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/enums/FileNameType.java
@@ -14,7 +14,8 @@
    SHIP(9),//发货台账
    INSPECTION_PRODUCTION_BEFORE(10),
    INSPECTION_PRODUCTION_AFTER(11),
    INSPECTION(12);//巡检 生产前
    INSPECTION(12),//巡检 生产前
    DeviceRepair(13);// 设备维修
    private final int value;
src/main/java/com/ruoyi/common/enums/RawMaterialCheckResult.java
@@ -26,10 +26,10 @@
     */
    public static RawMaterialCheckResult fromValue(Integer value) {
        for (RawMaterialCheckResult type : values()) {
            if (type.getValue().equals(value)) {
            if (type.getCode().equals(value)) {
                return type;
            }
        }
        throw new IllegalArgumentException("未知的 RawMaterialCheckResult 值: " + value);
        return null;
    }
}
src/main/java/com/ruoyi/common/enums/RawMaterialCheckType.java
@@ -27,10 +27,10 @@
     */
    public static RawMaterialCheckType fromValue(Integer value) {
        for (RawMaterialCheckType type : values()) {
            if (type.getValue().equals(value)) {
            if (type.getCode().equals(value)) {
                return type;
            }
        }
        throw new IllegalArgumentException("未知的 RawMaterialCheckType 值: " + value);
        return null;
    }
}
src/main/java/com/ruoyi/common/enums/RawMaterialInspectState.java
@@ -26,10 +26,10 @@
     */
    public static RawMaterialInspectState fromValue(Integer value) {
        for (RawMaterialInspectState type : values()) {
            if (type.getValue().equals(value)) {
            if (type.getCode().equals(value)) {
                return type;
            }
        }
        throw new IllegalArgumentException("未知的 RawMaterialInspectState 值: " + value);
        return null;
    }
}
src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
@@ -3,11 +3,13 @@
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.sales.pojo.CommonFile;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
@Data
public class DeviceRepairDto {
@@ -74,5 +76,7 @@
    private String sparePartsNames;
    private List<CommonFile> fileList;
}
src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
@@ -4,12 +4,14 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.other.pojo.TempFile;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
@Data
@TableName("device_repair")
@@ -76,5 +78,6 @@
    @ApiModelProperty("领用备件ids")
    private String sparePartsIds;
    @ApiModelProperty("文件列表")
    private List<TempFile> fileList;
}
src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -1,11 +1,12 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.github.xiaoymin.knife4j.core.util.StrUtil;
import com.google.common.collect.Lists;
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.dto.DeviceDefectRecordDto;
@@ -20,14 +21,15 @@
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper;
import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
import com.ruoyi.measuringinstrumentledger.service.SparePartsService;
import com.ruoyi.other.pojo.TempFile;
import com.ruoyi.other.service.TempFileService;
import com.ruoyi.sales.mapper.CommonFileMapper;
import com.ruoyi.sales.pojo.CommonFile;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
@@ -46,12 +48,20 @@
    private IDeviceLedgerService deviceLedgerService;
    @Autowired
    private SparePartsMapper sparePartsMapper;
    @Autowired
    private TempFileService tempFileService;
    @Autowired
    private CommonFileMapper commonFileMapper;
    @Override
    public IPage<DeviceRepairDto> queryPage(Page page, DeviceRepairDto deviceRepairDto) {
        IPage<DeviceRepairDto> deviceRepairDtoIPage = deviceRepairMapper.queryPage(page, deviceRepairDto);
        List<DeviceRepairDto> records = deviceRepairDtoIPage.getRecords();
        List<Long> recordIds = records.stream()
                .map(DeviceRepairDto::getId)
                .collect(Collectors.toList());
        if (!CollectionUtils.isEmpty(records)) {
            // 1. 获取所有唯一的备件ID
            Set<String> allIds = records.stream()
@@ -86,6 +96,12 @@
                    record.setSparePartsNames(names);
                });
            }
            // 处理文件
            List<CommonFile> commonFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>().in(CommonFile::getCommonId, recordIds)
                    .eq(CommonFile::getType, FileNameType.DeviceRepair.getValue()));
            Map<Long, List<CommonFile>> collect = commonFiles.stream()
                    .collect(Collectors.groupingBy(CommonFile::getCommonId));
            records.forEach(record -> record.setFileList(collect.get(record.getId())));
        }
        return deviceRepairDtoIPage;
@@ -94,6 +110,17 @@
    @Override
    public AjaxResult saveDeviceRepair(DeviceRepair deviceRepair) {
        DeviceLedger byId = deviceLedgerService.getById(deviceRepair.getDeviceLedgerId());
        if (CollectionUtils.isNotEmpty(deviceRepair.getFileList())) {
            List<String> fileIds = deviceRepair.getFileList().stream()
                    .map(TempFile::getTempId)
                    .collect(Collectors.toList());
            try {
                tempFileService.migrateTempFilesToFormal(deviceRepair.getId(), fileIds, FileNameType.DeviceRepair.getValue());
            } catch (Exception e) {
                log.error("设备维修文件迁移错误", e);
            }
        }
        deviceRepair.setDeviceName(byId.getDeviceName());
        deviceRepair.setDeviceModel(byId.getDeviceModel());
        boolean save = this.save(deviceRepair);
@@ -106,6 +133,16 @@
    @Override
    public AjaxResult updateDeviceRepair(DeviceRepair deviceRepair) {
        if (this.updateById(deviceRepair)) {
            if (CollectionUtils.isNotEmpty(deviceRepair.getFileList())) {
                List<String> fileIds = deviceRepair.getFileList().stream()
                        .map(TempFile::getTempId)
                        .collect(Collectors.toList());
                try {
                    tempFileService.migrateTempFilesToFormal(deviceRepair.getId(), fileIds, FileNameType.DeviceRepair.getValue());
                } catch (Exception e) {
                    log.error("设备维修文件迁移错误", e);
                }
            }
            Long id = deviceRepair.getId();
            //
            DeviceDefectRecordDto deviceDefectRecordDto = new DeviceDefectRecordDto();
src/main/java/com/ruoyi/inspectiontask/pojo/QualityInspectItem.java
@@ -1,10 +1,12 @@
package com.ruoyi.inspectiontask.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Data;
/**
 * 质量检测项
@@ -59,12 +61,16 @@
     * 
     */
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    /**
     * 
     */
    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    /**
src/main/java/com/ruoyi/other/service/TempFileService.java
@@ -4,9 +4,12 @@
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
public interface TempFileService {
    TempFile uploadFile(MultipartFile file,Integer type) throws IOException;
    String uploadByCommon(MultipartFile file, Integer type, Long id) throws IOException;
    void migrateTempFilesToFormal(Long businessId, List<String> tempFileIds, Integer fileType) throws IOException;
}
src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java
@@ -9,16 +9,13 @@
import com.ruoyi.sales.mapper.CommonFileMapper;
import com.ruoyi.sales.pojo.CommonFile;
import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.util.URLEncoder;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -98,6 +95,7 @@
     * @param fileType     文件类型(来自FileNameType)
     * @throws IOException 文件操作异常
     */
    @Override
    public void migrateTempFilesToFormal(Long businessId, List<String> tempFileIds, Integer fileType) throws IOException {
        if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(tempFileIds)) {
            return;
src/main/java/com/ruoyi/quality/controller/RawMaterialController.java
@@ -1,8 +1,10 @@
package com.ruoyi.quality.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.enums.RawMaterialInspectState;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.quality.dto.RawMaterialDto;
import com.ruoyi.quality.pojo.RawMaterial;
import com.ruoyi.quality.service.RawMaterialService;
import org.springframework.web.bind.annotation.*;
@@ -31,6 +33,13 @@
        return AjaxResult.success(rawMaterialService.listPage(page, rawMaterialDto));
    }
    /**
     * 原料详情
     */
    @GetMapping("/detail/{id}")
    public AjaxResult detail(@PathVariable Long id) {
        return AjaxResult.success(rawMaterialService.detail(id));
    }
    /**
     * 原料新增
@@ -41,11 +50,37 @@
    }
    /**
     * 检测提交
     * @param id 原料id
     * @return
     */
    @PatchMapping("/submit/{id}")
    public AjaxResult submit(@PathVariable Long id) {
        RawMaterial rawMaterial = new RawMaterial();
        rawMaterial.setId(id);
        rawMaterial.setInspectState(RawMaterialInspectState.RawMaterialInspectStateSubmitted.getCode());
        return AjaxResult.success(rawMaterialService.updateById(rawMaterial));
    }
    /**
     * 修改检验人
     * @param rawMaterialDto 原料
     * @return
     */
    @PatchMapping("/updateCheckUserName")
    public AjaxResult updateCheckUserName(@RequestBody RawMaterialDto rawMaterialDto) {
        RawMaterial rawMaterial = new RawMaterial();
        rawMaterial.setId(rawMaterialDto.getId());
        rawMaterial.setCheckUserName(rawMaterialDto.getCheckUserName());
        return AjaxResult.success(rawMaterialService.updateById(rawMaterial));
    }
    /**
     * 原料更新
     */
    @PutMapping("")
    public AjaxResult update(@RequestBody RawMaterialDto rawMaterialDto) {
        return AjaxResult.success(rawMaterialService.updateById(rawMaterialDto));
        return AjaxResult.success(rawMaterialService.update(rawMaterialDto));
    }
    /**
src/main/java/com/ruoyi/quality/dto/RawMaterialDto.java
@@ -1,16 +1,12 @@
package com.ruoyi.quality.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.inspectiontask.pojo.QualityInspectItem;
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;
/**
@@ -24,18 +20,14 @@
    /**
     * 开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty("表单搜索时间范围:开始时间")
    private LocalDate entryDateStart;
    private String entryDateStart;
    /**
     * 结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty("表单搜索时间范围:结束时间")
    private LocalDate entryDateEnd;
    private String entryDateEnd;
    @ApiModelProperty("检验类型 0入场检 1车间检 2出厂检")
    private String checkTypeText;
@@ -46,6 +38,18 @@
     @ApiModelProperty("类别(0:未提交;1:已提交)")
    private String inspectStateText;
     @ApiModelProperty("原料检测项列表ids")
     private List<Long> qualityInspectItemIds;
    @ApiModelProperty("原料检测项列表")
    private List<QualityInspectItem> qualityInspectItem;
    @ApiModelProperty("产品名称")
    private String productName;
    @ApiModelProperty("规格型号")
    private String model;
    @ApiModelProperty("产品id")
    private Long productId;
    @ApiModelProperty("单位")
    private String unit;
}
src/main/java/com/ruoyi/quality/pojo/RawMaterialQualityInspectItem.java
@@ -1,16 +1,13 @@
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 com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
@@ -37,6 +34,9 @@
    @ApiModelProperty("质量检验项id")
    private Long qualityInspectItemId;
    @ApiModelProperty("化验值")
    private String testValue;
    @ApiModelProperty("录入时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
src/main/java/com/ruoyi/quality/service/RawMaterialService.java
@@ -2,10 +2,9 @@
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;
import com.ruoyi.quality.dto.RawMaterialDto;
import com.ruoyi.quality.pojo.RawMaterial;
/**
 * <p>
@@ -18,5 +17,9 @@
public interface RawMaterialService extends IService<RawMaterial> {
    IPage<RawMaterialDto> listPage(Page page, RawMaterialDto rawMaterialDto);
    RawMaterialDto detail(Long id);
    boolean add(RawMaterialDto rawMaterialDto);
    boolean update(RawMaterialDto rawMaterialDto);
}
src/main/java/com/ruoyi/quality/service/impl/RawMaterialServiceImpl.java
@@ -1,25 +1,33 @@
package com.ruoyi.quality.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.collaborativeApproval.dto.DutyPlanDTO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.common.enums.RawMaterialCheckResult;
import com.ruoyi.common.enums.RawMaterialCheckType;
import com.ruoyi.common.enums.RawMaterialInspectState;
import com.ruoyi.production.mapper.ProductProcessRouteMapper;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.inspectiontask.mapper.QualityInspectItemMapper;
import com.ruoyi.inspectiontask.pojo.QualityInspectItem;
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.RawMaterial;
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.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -38,33 +46,106 @@
    private RawMaterialQualityInspectItemService rawMaterialQualityInspectItemService;
    private QualityInspectItemMapper qualityInspectItemMapper;
    private ProductModelMapper productModelMapper;
    private ProductMapper productMapper;
    @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());
        IPage<RawMaterialDto> pageRes = rawMaterialMapper.listPage(page, rawMaterialDto);
        List<RawMaterialDto> rawMaterials = pageRes.getRecords();
        Map<Long, ProductModel> productModelMap = new HashMap<>();
        Map<Long, Product> productMap = new HashMap<>();
        if (CollectionUtils.isNotEmpty(rawMaterials)) {
            List<Long> productModelIds = rawMaterials.stream().map(RawMaterialDto::getProductModelId).collect(Collectors.toList());
            List<ProductModel> productModels = productModelMapper.selectList(new LambdaQueryWrapper<ProductModel>()
                    .in(ProductModel::getId, productModelIds));
            productModelMap = productModels.stream().collect(Collectors.toMap(ProductModel::getId, productModel -> productModel));
            List<Long> productIds = productModels.stream().map(ProductModel::getProductId).collect(Collectors.toList());
            List<Product> products = productMapper.selectList(new LambdaQueryWrapper<Product>()
                    .in(Product::getId, productIds));
            productMap = products.stream().collect(Collectors.toMap(Product::getId, product -> product));
        }
        return rawMaterials;
        for (RawMaterialDto rawMaterial : pageRes.getRecords()) {
            rawMaterial.setCheckTypeText(RawMaterialCheckType.fromValue(rawMaterial.getCheckType()) == null ? "" : RawMaterialCheckType.fromValue(rawMaterial.getCheckType()).getValue());
            rawMaterial.setCheckResultText(RawMaterialCheckResult.fromValue(rawMaterial.getCheckResult()) == null ? "" : RawMaterialCheckResult.fromValue(rawMaterial.getCheckResult()).getValue());
            rawMaterial.setInspectStateText(RawMaterialInspectState.fromValue(rawMaterial.getInspectState()) == null ? "" : RawMaterialInspectState.fromValue(rawMaterial.getInspectState()).getValue());
            rawMaterial.setProductName(productMap.get(productModelMap.get(rawMaterial.getProductModelId()).getProductId()).getProductName());
            rawMaterial.setModel(productModelMap.get(rawMaterial.getProductModelId()).getModel());
            rawMaterial.setProductId(productModelMap.get(rawMaterial.getProductModelId()).getProductId());
        }
        return pageRes;
    }
    @Override
    public RawMaterialDto detail(Long id) {
        RawMaterial rawMaterial = rawMaterialMapper.selectById(id);
        RawMaterialDto rawMaterialDto = new RawMaterialDto();
        BeanUtils.copyBeanProp(rawMaterialDto, rawMaterial);
        // 获取检测项关联关系
        List<RawMaterialQualityInspectItem> rawQualityList = rawMaterialQualityInspectItemService.list(new LambdaQueryWrapper<RawMaterialQualityInspectItem>()
                .eq(RawMaterialQualityInspectItem::getRawMaterialId, id));
        Map<Long, RawMaterialQualityInspectItem> map = rawQualityList.stream().collect(Collectors.toMap(RawMaterialQualityInspectItem::getQualityInspectItemId, qualityInspectItem -> qualityInspectItem));
        // 获取检验项目
        List<QualityInspectItem> qualityInspectItems = qualityInspectItemMapper.selectList(new LambdaQueryWrapper<QualityInspectItem>()
                .in(QualityInspectItem::getId, rawQualityList.stream().map(RawMaterialQualityInspectItem::getQualityInspectItemId).collect(Collectors.toList())));
        // 替换化验值
        qualityInspectItems.forEach(qualityInspectItem -> {
            qualityInspectItem.setTestValue(map.get(qualityInspectItem.getId()).getTestValue());
        });
        rawMaterialDto.setQualityInspectItem(qualityInspectItems);
        // 查询产品id
        ProductModel productModel = productModelMapper.selectById(rawMaterialDto.getProductModelId());
        rawMaterialDto.setProductId(productModel.getProductId());
        rawMaterialDto.setUnit(productModel.getUnit());
        return rawMaterialDto;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean add(RawMaterialDto rawMaterialDto) {
        rawMaterialDto.setInspectState(RawMaterialInspectState.RawMaterialInspectStateUnsubmitted.getCode());
        // 新增原料
        int i = rawMaterialMapper.insert(rawMaterialDto);
        // 新增检测项关联关系
        if (rawMaterialDto.getQualityInspectItemIds() != null && !rawMaterialDto.getQualityInspectItemIds().isEmpty()) {
            List<RawMaterialQualityInspectItem> rawMaterialQualityInspectItems = rawMaterialDto.getQualityInspectItemIds().stream()
                    .map(id -> {
        if (CollectionUtils.isNotEmpty(rawMaterialDto.getQualityInspectItem())) {
            List<RawMaterialQualityInspectItem> rawMaterialQualityInspectItems = rawMaterialDto.getQualityInspectItem().stream()
                    .map(qualityInspectItem -> {
                        RawMaterialQualityInspectItem item = new RawMaterialQualityInspectItem();
                        item.setRawMaterialId(rawMaterialDto.getId());
                        item.setQualityInspectItemId(id);
                        item.setQualityInspectItemId(qualityInspectItem.getId());
                        item.setTestValue(qualityInspectItem.getTestValue());
                        return item;
                    })
                    .collect(Collectors.toList());
            rawMaterialQualityInspectItemService.saveBatch(rawMaterialQualityInspectItems);
        }
        // 新增原料
        return rawMaterialMapper.insert(rawMaterialDto) > 0;
        return i > 0;
    }
    @Override
    public boolean update(RawMaterialDto rawMaterialDto) {
        // 删除所有关联项目重新加载
        rawMaterialQualityInspectItemService.remove(new LambdaQueryWrapper<RawMaterialQualityInspectItem>()
                .eq(RawMaterialQualityInspectItem::getRawMaterialId, rawMaterialDto.getId()));
        int i = rawMaterialMapper.updateById(rawMaterialDto);
        // 新增检测项关联关系
        if (CollectionUtils.isNotEmpty(rawMaterialDto.getQualityInspectItem())) {
            List<RawMaterialQualityInspectItem> rawMaterialQualityInspectItems = rawMaterialDto.getQualityInspectItem().stream()
                    .map(qualityInspectItem -> {
                        RawMaterialQualityInspectItem item = new RawMaterialQualityInspectItem();
                        item.setRawMaterialId(rawMaterialDto.getId());
                        item.setQualityInspectItemId(qualityInspectItem.getId());
                        item.setTestValue(qualityInspectItem.getTestValue());
                        return item;
                    })
                    .collect(Collectors.toList());
            rawMaterialQualityInspectItemService.saveBatch(rawMaterialQualityInspectItems);
        }
        return i > 0;
    }
}
src/main/resources/mapper/quality/RawMaterialMapper.xml
@@ -28,10 +28,10 @@
            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')
            AND rm.check_time &gt;= #{params.entryDateStart}
        </if>
        <if test="params.entryDateEnd != null and params.entryDateEnd != '' ">
            AND rm.check_time &lt;= DATE_FORMAT(#{params.entryDateEnd},'%Y-%m-%d')
            AND rm.check_time &lt;= #{params.entryDateEnd}
        </if>
        ORDER BY rm.check_time DESC
    </select>