吴羡
12 小时以前 e5d1fb3d5ce9468b92e79825bbcb38f05ea73aff
Merge remote-tracking branch 'origin/master'
已添加5个文件
已修改11个文件
571 ■■■■■ 文件已修改
basic-server/src/main/java/com/ruoyi/basic/event/StandardMethodSavedEvent.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/pojo/StandardMethod.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/resources/mapper/StandardMethodMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/listener/StandardMethodSearchNewListener.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewFileSeqMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNew.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessMethodSearchNewFileSeqMapper.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/ProcessMethodSearchNewMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-druid.yml 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-xjxj.yml 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
basic-server/src/main/java/com/ruoyi/basic/event/StandardMethodSavedEvent.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.basic.event;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
/** æ ‡å‡†ç»´æŠ¤ä¿å­˜äº‹ä»¶ã€‚ */
@Data
@AllArgsConstructor
@Schema(description = "标准维护保存事件")
public class StandardMethodSavedEvent {
    @Schema(description = "标准方法ID")
    private Integer standardMethodId;
    @Schema(description = "标准编号")
    private String code;
    @Schema(description = "标准描述")
    private String name;
    @Schema(description = "是否查新(0否,1是)")
    private Integer needSearchNew;
    @Schema(description = "是否为编辑操作")
    private boolean edit;
}
basic-server/src/main/java/com/ruoyi/basic/pojo/StandardMethod.java
@@ -15,27 +15,33 @@
 */
@TableName(value ="standard_method")
@Data
@Schema(description = "标准方法")
public class StandardMethod implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    @Schema(description = "标准方法ID")
    private Integer id;
    @Schema(description = "领域")
    private String field;
    @Schema(description = "检验对象")
    private String structureTestObjectId;
    /** æ ‡å‡†åº“一级行业ID(仅接口交互,不落standard_method表) */
    @Schema(description = "标准库一级行业ID")
    @TableField(exist = false)
    private List<Integer> industryIds;
    /** å·²ç»‘定行业名称(列表展示) */
    @Schema(description = "已绑定行业名称")
    @TableField(exist = false)
    private String industryNames;
    /** é™„件数量(列表展示) */
    @Schema(description = "附件数量")
    @TableField(exist = false)
    private Integer attachmentCount;
@@ -69,6 +75,9 @@
    @Schema(description = "是否启用")
    private Integer isUse;
    @Schema(description = "是否查新(0否,1是)")
    private Integer needSearchNew;
    @Schema(description = "创建人id")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
basic-server/src/main/java/com/ruoyi/basic/service/impl/StandardMethodServiceImpl.java
@@ -8,6 +8,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.pojo.StandardMethodList;
import com.ruoyi.basic.event.StandardMethodSavedEvent;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.basic.mapper.StandardMethodMapper;
import com.ruoyi.basic.mapper.StandardProductListMapper;
@@ -31,6 +32,7 @@
import com.ruoyi.basic.utils.StandardTreePath;
import com.ruoyi.basic.utils.StandardTreePathParser;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@@ -66,6 +68,7 @@
    private LaboratoryMapper laboratoryMapper;
    private StandardTreeMapper standardTreeMapper;
    private StandardTreeTemplateBindingMapper standardTreeTemplateBindingMapper;
    private final ApplicationEventPublisher eventPublisher;
    @Value("${file.path}")
    private String filePath;
@@ -86,7 +89,8 @@
                                     StandardMethodAttachmentMapper standardMethodAttachmentMapper,
                                     LaboratoryMapper laboratoryMapper,
                                     StandardTreeMapper standardTreeMapper,
                                     StandardTreeTemplateBindingMapper standardTreeTemplateBindingMapper) {
                                     StandardTreeTemplateBindingMapper standardTreeTemplateBindingMapper,
                                     ApplicationEventPublisher eventPublisher) {
        this.standardMethodMapper = standardMethodMapper;
        this.standardProductListMapper = standardProductListMapper;
        this.standardProductListService = standardProductListService;
@@ -97,6 +101,7 @@
        this.laboratoryMapper = laboratoryMapper;
        this.standardTreeMapper = standardTreeMapper;
        this.standardTreeTemplateBindingMapper = standardTreeTemplateBindingMapper;
        this.eventPublisher = eventPublisher;
    }
    @Override
@@ -117,8 +122,12 @@
    @Transactional(rollbackFor = Exception.class)
    public Integer addStandardMethod(StandardMethod standardMethod) {
        standardMethod.setStructureTestObjectId(null);
        if (standardMethod.getNeedSearchNew() == null) {
            standardMethod.setNeedSearchNew(0);
        }
        standardMethodMapper.insert(standardMethod);
        syncIndustries(standardMethod, Collections.<Integer>emptySet());
        publishSavedEvent(standardMethod, false);
        return standardMethod.getId();
    }
@@ -149,11 +158,22 @@
        if (!oldStandardMethod.getCode().equals(standardMethod.getCode())) {
            CompletableFuture.supplyAsync(() -> replaceMethod(oldStandardMethod.getCode(), standardMethod.getCode()));
        }
        if (standardMethod.getNeedSearchNew() == null) {
            standardMethod.setNeedSearchNew(oldStandardMethod.getNeedSearchNew() == null
                    ? 0 : oldStandardMethod.getNeedSearchNew());
        }
        int i = standardMethodMapper.updateById(standardMethod);
        syncIndustries(standardMethod, new LinkedHashSet<>(selectIndustryIds(oldStandardMethod.getId())));
        publishSavedEvent(standardMethodMapper.selectById(standardMethod.getId()), true);
        return i;
    }
    private void publishSavedEvent(StandardMethod standardMethod, boolean edit) {
        eventPublisher.publishEvent(new StandardMethodSavedEvent(
                standardMethod.getId(), standardMethod.getCode(), standardMethod.getName(),
                standardMethod.getNeedSearchNew(), edit));
    }
    private List<Integer> selectIndustryIds(Integer methodId) {
        List<StandardMethodIndustry> list = standardMethodIndustryMapper.selectList(
                Wrappers.<StandardMethodIndustry>lambdaQuery()
basic-server/src/main/resources/mapper/StandardMethodMapper.xml
@@ -13,6 +13,7 @@
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
        <result property="updateUser" column="update_user" jdbcType="INTEGER"/>
        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
        <result property="needSearchNew" column="need_search_new" jdbcType="INTEGER"/>
    </resultMap>
    <select id="selectStandardMethodList" resultType="com.ruoyi.basic.pojo.StandardMethod">
@@ -30,6 +31,7 @@
                sm.field,
                sm.name_en,
                sm.is_use,
                sm.need_search_new,
                sm.qualification_id,
                COALESCE((SELECT GROUP_CONCAT(l.laboratory_name ORDER BY COALESCE(l.sort, 0), l.id SEPARATOR '、')
                          FROM standard_method_industry smi JOIN laboratory l ON l.id = smi.industry_id
@@ -59,6 +61,7 @@
               sm.field,
               sm.name_en,
               sm.is_use,
               sm.need_search_new,
               sm.qualification_id
        from standard_method sm
                 left join user u1 on sm.create_user = u1.id
cnas-process/src/main/java/com/ruoyi/process/controller/ProcessMethodSearchNewController.java
@@ -55,7 +55,7 @@
    @Operation(summary = "修改标准查新")
    @PostMapping("/updateMethodSearchNew")
    public Result updateMethodSearchNew(@RequestBody ProcessMethodSearchNew processMethodSearchNew ) {
        return Result.success(processMethodSearchNewService.updateById(processMethodSearchNew));
        return Result.success(processMethodSearchNewService.updateMethodSearchNew(processMethodSearchNew));
    }
    /**
@@ -67,6 +67,12 @@
        return Result.success(processMethodSearchNewService.pageMethodSearchNew(page, processMethodSearchNew));
    }
    @Operation(summary = "自动归档记录列表")
    @GetMapping("/pageAutoArchived")
    public Result<IPage<ProcessMethodSearchNew>> pageAutoArchived(ProcessMethodSearchNew processMethodSearchNew, Page page) {
        return Result.success(processMethodSearchNewService.pageAutoArchived(page, processMethodSearchNew));
    }
    @Operation(summary = "标准查新导出")
    @GetMapping("/exportMethodSearchNew")
    public void exportMethodSearchNew(Integer archivedId, HttpServletResponse response) throws Exception {
cnas-process/src/main/java/com/ruoyi/process/listener/StandardMethodSearchNewListener.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
package com.ruoyi.process.listener;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.basic.event.StandardMethodSavedEvent;
import com.ruoyi.basic.mapper.StandardMethodMapper;
import com.ruoyi.basic.pojo.StandardMethod;
import com.ruoyi.process.mapper.ProcessMethodSearchNewFileSeqMapper;
import com.ruoyi.process.mapper.ProcessMethodSearchNewMapper;
import com.ruoyi.process.pojo.ProcessMethodSearchNew;
import lombok.RequiredArgsConstructor;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
/** æ ¹æ®æ ‡å‡†ç»´æŠ¤ä¿å­˜åŠ¨ä½œåŒæ­¥ç”Ÿæˆã€å½’æ¡£æ ‡å‡†æŸ¥æ–°è®°å½•ã€‚ */
@Component
@RequiredArgsConstructor
public class StandardMethodSearchNewListener {
    private static final ZoneId CHINA_ZONE = ZoneId.of("Asia/Shanghai");
    private static final DateTimeFormatter FILE_DATE = DateTimeFormatter.BASIC_ISO_DATE;
    private final StandardMethodMapper standardMethodMapper;
    private final ProcessMethodSearchNewMapper searchNewMapper;
    private final ProcessMethodSearchNewFileSeqMapper fileSeqMapper;
    @EventListener
    public void onStandardMethodSaved(StandardMethodSavedEvent event) {
        if (!Integer.valueOf(1).equals(event.getNeedSearchNew())) {
            return;
        }
        StandardMethod standard = standardMethodMapper.selectOne(Wrappers.<StandardMethod>lambdaQuery()
                .eq(StandardMethod::getId, event.getStandardMethodId())
                .last("FOR UPDATE"));
        if (standard == null) {
            return;
        }
        ProcessMethodSearchNew current = searchNewMapper.selectOne(Wrappers.<ProcessMethodSearchNew>lambdaQuery()
                .eq(ProcessMethodSearchNew::getCurrentAutoStandardId, event.getStandardMethodId())
                .last("FOR UPDATE"));
        if (!event.isEdit() && current != null) {
            return;
        }
        LocalDateTime now = LocalDateTime.now(CHINA_ZONE);
        if (current != null) {
            searchNewMapper.update(null, Wrappers.<ProcessMethodSearchNew>lambdaUpdate()
                    .eq(ProcessMethodSearchNew::getMethodSearchNewId, current.getMethodSearchNewId())
                    .set(ProcessMethodSearchNew::getIsNewStandard, 0)
                    .set(ProcessMethodSearchNew::getIsAutoArchived, 1)
                    .set(ProcessMethodSearchNew::getCurrentAutoStandardId, null)
                    .set(ProcessMethodSearchNew::getAutoArchivedTime, now));
        }
        ProcessMethodSearchNew created = new ProcessMethodSearchNew();
        created.setMethodName(event.getName());
        created.setStandardNo(event.getCode());
        created.setFileNo(nextFileNo(now.toLocalDate()));
        created.setIsNewStandard(1);
        created.setSearchNewSource(null);
        created.setStandardMethodId(event.getStandardMethodId());
        created.setCurrentAutoStandardId(event.getStandardMethodId());
        created.setIsAutoArchived(0);
        searchNewMapper.insert(created);
    }
    private String nextFileNo(LocalDate date) {
        String prefix = date.format(FILE_DATE);
        fileSeqMapper.insertIfAbsent(date);
        Integer stored = fileSeqMapper.selectForUpdate(date);
        Integer existing = fileSeqMapper.selectMaxExisting(prefix);
        int next = Math.max(stored == null ? 0 : stored, existing == null ? 0 : existing) + 1;
        fileSeqMapper.updateValue(date, next);
        return prefix + String.format("%03d", next);
    }
}
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewFileSeqMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.process.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDate;
@Mapper
public interface ProcessMethodSearchNewFileSeqMapper {
    int insertIfAbsent(@Param("seqDate") LocalDate seqDate);
    Integer selectForUpdate(@Param("seqDate") LocalDate seqDate);
    Integer selectMaxExisting(@Param("prefix") String prefix);
    int updateValue(@Param("seqDate") LocalDate seqDate, @Param("value") Integer value);
}
cnas-process/src/main/java/com/ruoyi/process/mapper/ProcessMethodSearchNewMapper.java
@@ -28,5 +28,8 @@
     */
    IPage<ProcessMethodSearchNew> pageMethodSearchNew(@Param("page") Page page, @Param("ew") QueryWrapper<ProcessMethodSearchNewBackupsDto> processMethodSearchNewDtoQueryWrapper, @Param("beginDate") String beginDate, @Param("endDate") String endDate);
    IPage<ProcessMethodSearchNew> pageAutoArchived(@Param("page") Page page,
                                                    @Param("ew") QueryWrapper<ProcessMethodSearchNew> queryWrapper);
}
cnas-process/src/main/java/com/ruoyi/process/pojo/ProcessMethodSearchNew.java
@@ -19,6 +19,7 @@
public class ProcessMethodSearchNew {
    @TableId(type = IdType.AUTO)
    @Schema(description = "标准查新记录ID")
    private Integer methodSearchNewId;
    @Schema(description = "标准方法验证id")
@@ -48,6 +49,19 @@
    @Schema(description = "备注,0作废, 1替换")
    private Integer remark;
    @Schema(description = "来源标准维护ID,自动生成记录使用")
    private Integer standardMethodId;
    @Schema(description = "当前自动记录对应的标准维护ID;归档后为空")
    private Integer currentAutoStandardId;
    @Schema(description = "是否自动归档(0否,1是)")
    private Integer isAutoArchived;
    @Schema(description = "自动归档时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime autoArchivedTime;
    @Schema(description = "创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
cnas-process/src/main/java/com/ruoyi/process/service/ProcessMethodSearchNewService.java
@@ -28,6 +28,8 @@
     */
    boolean addMethodSearchNew(List<ProcessMethodSearchNew> processMethodSearchNewList);
    boolean updateMethodSearchNew(ProcessMethodSearchNew processMethodSearchNew);
    /**
     * æ ‡å‡†æŸ¥æ–°åˆ—表
     * @param processMethodSearchNew
@@ -35,6 +37,8 @@
     */
    IPage<ProcessMethodSearchNew> pageMethodSearchNew(Page page, ProcessMethodSearchNewBackupsDto processMethodSearchNew);
    IPage<ProcessMethodSearchNew> pageAutoArchived(Page page, ProcessMethodSearchNew processMethodSearchNew);
    /**
     * æ ‡å‡†æŸ¥æ–°å¯¼å‡º
     * @param archivedId
cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessMethodSearchNewServiceImpl.java
@@ -73,10 +73,36 @@
    public boolean addMethodSearchNew(List<ProcessMethodSearchNew> processMethodSearchNewList) {
        for (ProcessMethodSearchNew processMethodSearchNew : processMethodSearchNewList) {
            processMethodSearchNew.setIsNewStandard(1);
            processMethodSearchNew.setIsAutoArchived(0);
            processMethodSearchNew.setStandardMethodId(null);
            processMethodSearchNew.setCurrentAutoStandardId(null);
            processMethodSearchNew.setAutoArchivedTime(null);
        }
        // æ–°å¢ž
        this.saveBatch(processMethodSearchNewList);
        return true;
    }
    @Override
    public boolean updateMethodSearchNew(ProcessMethodSearchNew processMethodSearchNew) {
        ProcessMethodSearchNew old = getById(processMethodSearchNew.getMethodSearchNewId());
        if (old == null) {
            throw new ErrorException("标准查新记录不存在");
        }
        if (Integer.valueOf(1).equals(old.getIsAutoArchived())) {
            throw new ErrorException("自动归档记录不允许修改");
        }
        return update(Wrappers.<ProcessMethodSearchNew>lambdaUpdate()
                .eq(ProcessMethodSearchNew::getMethodSearchNewId, old.getMethodSearchNewId())
                .set(ProcessMethodSearchNew::getVerifyId, processMethodSearchNew.getVerifyId())
                .set(ProcessMethodSearchNew::getMethodName, processMethodSearchNew.getMethodName())
                .set(ProcessMethodSearchNew::getStandardNo, processMethodSearchNew.getStandardNo())
                .set(ProcessMethodSearchNew::getFileNo, processMethodSearchNew.getFileNo())
                .set(ProcessMethodSearchNew::getNewMethodName, processMethodSearchNew.getNewMethodName())
                .set(ProcessMethodSearchNew::getNewStandardNo, processMethodSearchNew.getNewStandardNo())
                .set(ProcessMethodSearchNew::getSearchNewSource, processMethodSearchNew.getSearchNewSource())
                .set(ProcessMethodSearchNew::getRemark, processMethodSearchNew.getRemark())
                .set(ProcessMethodSearchNew::getIsNewStandard, 1));
    }
    /**
@@ -92,6 +118,12 @@
        processMethodSearchNew.setBeginDate(null);
        processMethodSearchNew.setEndDate(null);
        return baseMapper.pageMethodSearchNew(page, QueryWrappers.queryWrappers(processMethodSearchNew), beginDate, endDate);
    }
    @Override
    public IPage<ProcessMethodSearchNew> pageAutoArchived(Page page, ProcessMethodSearchNew processMethodSearchNew) {
        processMethodSearchNew.setIsAutoArchived(null);
        return baseMapper.pageAutoArchived(page, QueryWrappers.queryWrappers(processMethodSearchNew));
    }
    /**
@@ -136,7 +168,7 @@
                    searchNewBackupsDto.setRemarkString("作废");
                }
            }
            switch (methodSearchNew.getSearchNewSource()) {
            if (methodSearchNew.getSearchNewSource() != null) switch (methodSearchNew.getSearchNewSource()) {
                case 0:
                    searchNewBackupsDto.setStandardNet("√");
                    break;
@@ -257,20 +289,14 @@
            List<ProcessMethodSearchNew> collect = searchNewDtoList.stream().map(searchNewDto -> {
                ProcessMethodSearchNew searchNew = new ProcessMethodSearchNew();
                BeanUtils.copyProperties(searchNewDto, searchNew);
                // æ˜¯å¦æ˜¯æ›´æ–°
                if (StringUtils.isNotBlank(searchNewDto.getIsNewStandardString())) {
                    if (searchNewDto.getIsNewStandardString().equals("是")) {
                        searchNew.setIsNewStandard(1);
                    } else {
                        searchNew.setIsNewStandard(0);
                    }
                }
                searchNew.setIsNewStandard(1);
                searchNew.setIsAutoArchived(0);
                // æŸ¥æ–°è®°å½•
                if (StringUtils.isNotBlank(searchNewDto.getStandardNet())) {
                    searchNew.setSearchNewSource(0);
                } else if (StringUtils.isNotBlank(searchNewDto.getInformationOffices())) {
                    searchNew.setSearchNewSource(1);
                } else if (StringUtils.isNotBlank(searchNewDto.getIsNewStandardString())) {
                } else if (StringUtils.isNotBlank(searchNewDto.getStandardBookstore())) {
                    searchNew.setSearchNewSource(2);
                } else if (StringUtils.isNotBlank(searchNewDto.getOther())) {
                    searchNew.setSearchNewSource(3);
@@ -309,12 +335,14 @@
        processMethodSearchNewArchivedMapper.insert(archived);
        // æŸ¥è¯¢æ‰€æœ‰çš„æ ‡å‡†æŸ¥æ–°
        List<ProcessMethodSearchNew> searchNewList = this.list();
        List<ProcessMethodSearchNew> searchNewList = this.list(Wrappers.<ProcessMethodSearchNew>lambdaQuery()
                .eq(ProcessMethodSearchNew::getIsAutoArchived, 0));
        // æ–°å¢žå¤åˆ¶
        List<ProcessMethodSearchNewBackups> methodSearchNewBackups = searchNewList.stream().map(processMethodSearchNew -> {
            ProcessMethodSearchNewBackups backups = new ProcessMethodSearchNewBackups();
            BeanUtils.copyProperties(processMethodSearchNew, backups);
            backups.setIsNewStandard(0);
            backups.setArchivedId(archived.getArchivedId());
            return backups;
        }).collect(Collectors.toList());
cnas-process/src/main/resources/mapper/ProcessMethodSearchNewFileSeqMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
<?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.process.mapper.ProcessMethodSearchNewFileSeqMapper">
    <insert id="insertIfAbsent">
        INSERT IGNORE INTO cnas_process_method_search_new_file_seq
            (seq_date, sequence_value)
        VALUES
            (#{seqDate}, 0)
    </insert>
    <select id="selectForUpdate" resultType="java.lang.Integer">
        SELECT sequence_value
        FROM cnas_process_method_search_new_file_seq
        WHERE seq_date = #{seqDate}
        FOR UPDATE
    </select>
    <select id="selectMaxExisting" resultType="java.lang.Integer">
        SELECT COALESCE(MAX(seq_value), 0)
        FROM (
            SELECT CAST(SUBSTRING(file_no, 9) AS UNSIGNED) AS seq_value
            FROM cnas_process_method_search_new
            WHERE file_no REGEXP CONCAT('^', #{prefix}, '[0-9]+$')
            UNION ALL
            SELECT CAST(SUBSTRING(file_no, 9) AS UNSIGNED) AS seq_value
            FROM cnas_process_method_search_new_backups
            WHERE file_no REGEXP CONCAT('^', #{prefix}, '[0-9]+$')
        ) numbers
    </select>
    <update id="updateValue">
        UPDATE cnas_process_method_search_new_file_seq
        SET sequence_value = #{value}
        WHERE seq_date = #{seqDate}
    </update>
</mapper>
cnas-process/src/main/resources/mapper/ProcessMethodSearchNewMapper.xml
@@ -8,6 +8,7 @@
        from (select *
        from cnas_process_method_search_new
        <where>
            and is_auto_archived = 0
            <if test="beginDate != null and beginDate != '' and endDate != null and endDate != ''">
                and create_time between #{beginDate} and #{endDate}
            </if>
@@ -18,4 +19,16 @@
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="pageAutoArchived" resultType="com.ruoyi.process.pojo.ProcessMethodSearchNew">
        select *
        from (
            select * from cnas_process_method_search_new
            where is_auto_archived = 1
            order by auto_archived_time desc, method_search_new_id desc
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
ruoyi-admin/src/main/resources/application-druid.yml
@@ -6,7 +6,7 @@
        druid:
            # ä¸»åº“数据源
            master:
                url: jdbc:mysql://192.168.0.24:3307/lims-xjxj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                url: jdbc:mysql://127.0.0.1:3307/lims-xjxj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: root
                password: 123456
            # ä»Žåº“数据源
@@ -60,6 +60,56 @@
                    config:
                        multi-statement-allow: true
    # Redis è¿žæŽ¥é…ç½®
    data:
        redis:
            host: 127.0.0.1
            port: 6379
            database: 0
            password:
            timeout: 10s
            lettuce:
              pool:
                # è¿žæŽ¥æ± ä¸­çš„æœ€å°ç©ºé—²è¿žæŽ¥
                min-idle: 0
                # è¿žæŽ¥æ± ä¸­çš„æœ€å¤§ç©ºé—²è¿žæŽ¥
                max-idle: 8
                # è¿žæŽ¥æ± çš„æœ€å¤§æ•°æ®åº“连接数
                max-active: 8
                # #连接池最大阻塞等待时间(使用负值表示没有限制)
                max-wait: -1ms
# é¡¹ç›®ç›¸å…³é…ç½®
ruoyi:
  name: RuoYi
  version: 3.9.2
  copyrightYear: 2026
  profile: D:/ruoyi/uploadPath
  addressEnabled: false
# ç”¨æˆ·å¯†ç é…ç½®
user:
  password:
    maxRetryCount: 5
    lockTime: 10
# ä»¤ç‰Œé…ç½®
token:
  header: Authorization
  secret: awertgbadrtawetfgfbsdfawerghbfdsftreagd
  expireTime: 450
# é˜²ç›—链配置
referer:
  enabled: false
  allowed-domains: localhost,127.0.0.1,ruoyi.vip,www.ruoyi.vip
# XSS è¿‡æ»¤é…ç½®
xss:
  enabled: true
  excludes: /system/notice
  urlPatterns: /system/*,/monitor/*,/tool/*
# ç…§ç‰‡å­˜å‚¨è·¯å¾„+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
file:
  path: D:\项目文件存储\image
@@ -67,4 +117,4 @@
  allowed: png,jpg,jpeg,gif
# æŠ¥å‘Š word å­˜å‚¨è·¯å¾„
wordUrl: D:\项目文件存储\word
wordUrl: D:\项目文件存储\word
ruoyi-admin/src/main/resources/application-xjxj.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,150 @@
# è£…备测试库配置
# æ•°æ®æºé…ç½®
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://172.17.0.1:11101/lims-xjxj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: xd@123456..
      # ä»Žåº“数据源
      slave:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭
        enabled: false
        url:
        username:
        password:
      # åˆå§‹è¿žæŽ¥æ•°
      initialSize: 5
      # æœ€å°è¿žæŽ¥æ± æ•°é‡
      minIdle: 10
      # æœ€å¤§è¿žæŽ¥æ± æ•°é‡
      maxActive: 20
      # é…ç½®èŽ·å–è¿žæŽ¥ç­‰å¾…è¶…æ—¶çš„æ—¶é—´
      maxWait: 60000
      # é…ç½®è¿žæŽ¥è¶…æ—¶æ—¶é—´
      connectTimeout: 30000
      # é…ç½®ç½‘络超时时间
      socketTimeout: 60000
      # é…ç½®é—´éš”多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # é…ç½®ä¸€ä¸ªè¿žæŽ¥åœ¨æ± ä¸­æœ€å°ç”Ÿå­˜çš„æ—¶é—´ï¼Œå•位是毫秒
      minEvictableIdleTimeMillis: 300000
      # é…ç½®ä¸€ä¸ªè¿žæŽ¥åœ¨æ± ä¸­æœ€å¤§ç”Ÿå­˜çš„æ—¶é—´ï¼Œå•位是毫秒
      maxEvictableIdleTimeMillis: 900000
      # é…ç½®æ£€æµ‹è¿žæŽ¥æ˜¯å¦æœ‰æ•ˆ
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      webStatFilter:
        enabled: true
      statViewServlet:
        enabled: true
        # è®¾ç½®ç™½åå•,不填则允许所有访问
        allow:
        url-pattern: /druid/*
        # æŽ§åˆ¶å°ç®¡ç†ç”¨æˆ·åå’Œå¯†ç 
        login-username: ruoyi
        login-password: 123456
      filter:
        stat:
          enabled: true
          # æ…¢SQL记录
          log-slow-sql: true
          slow-sql-millis: 1000
          merge-sql: true
        wall:
          config:
            multi-statement-allow: true
  # redis é…ç½®
  data:
    # redis é…ç½®
    redis:
      # åœ°å€
      host: 172.17.0.1
      # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
      port: 11102
      # æ•°æ®åº“索引
      database: 6
      # å¯†ç 
      password:
      # è¿žæŽ¥è¶…æ—¶æ—¶é—´
      timeout: 10s
      lettuce:
        pool:
          # è¿žæŽ¥æ± ä¸­çš„æœ€å°ç©ºé—²è¿žæŽ¥
          min-idle: 0
          # è¿žæŽ¥æ± ä¸­çš„æœ€å¤§ç©ºé—²è¿žæŽ¥
          max-idle: 8
          # è¿žæŽ¥æ± çš„æœ€å¤§æ•°æ®åº“连接数
          max-active: 8
          # #连接池最大阻塞等待时间(使用负值表示没有限制)
          max-wait: -1ms
# mybatis-plus配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# æ—¥å¿—配置
logging:
  file-location: /center-lims/Java
  level:
    root: info
    com.ruoyi: debug
    org.springframework.web: debug
    org.springframework.security: info
    org.mybatis: debug
    com.baomidou.mybatisplus: debug
# Swagger配置
swagger:
  # æ˜¯å¦å¼€å¯swagger
  enabled: true
# é¡¹ç›®ç›¸å…³é…ç½®
ruoyi:
  name: RuoYi
  version: 3.9.2
  copyrightYear: 2026
  profile: D:/ruoyi/uploadPath
  addressEnabled: false
# ç”¨æˆ·å¯†ç é…ç½®
user:
  password:
    maxRetryCount: 5
    lockTime: 10
# ä»¤ç‰Œé…ç½®
token:
  header: Authorization
  secret: awertgbadrtawetfgfbsdfawerghbfdsftreagd
  expireTime: 450
# é˜²ç›—链配置
referer:
  enabled: false
  allowed-domains: localhost,127.0.0.1,ruoyi.vip,www.ruoyi.vip
# XSS è¿‡æ»¤é…ç½®
xss:
  enabled: true
  excludes: /system/notice
  urlPatterns: /system/*,/monitor/*,/tool/*
# ç…§ç‰‡å­˜å‚¨è·¯å¾„+++++++++++++++++++++++++++运维需要配置+++++++++++++++++++++++++++
file:
  path: /center-lims/Work/img
  # ä¸Šä¼ æ–‡ä»¶å…è®¸çš„æ‰©å±•名
  allowed: png,jpg,jpeg,gif
# æŠ¥å‘Šåœ°å€
wordUrl: /center-lims/Work/word
ruoyi-admin/src/main/resources/application.yml
@@ -1,20 +1,7 @@
# é¡¹ç›®ç›¸å…³é…ç½®
ruoyi:
  # åç§°
  name: RuoYi
  # ç‰ˆæœ¬
  version: 3.9.2
  # ç‰ˆæƒå¹´ä»½
  copyrightYear: 2026
  # æ–‡ä»¶è·¯å¾„ ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
  profile: D:/ruoyi/uploadPath
  # èŽ·å–ip地址开关
  addressEnabled: false
# å¼€å‘环境配置
server:
  # æœåŠ¡å™¨çš„HTTP端口,默认为8080
  port: 8002
  # æœåŠ¡å™¨çš„HTTP端口,默认为8080,服务器新聚后端为9509
  port: 9509
  servlet:
    # åº”用的访问路径
    context-path: /
@@ -34,14 +21,6 @@
  level:
    com.ruoyi: debug
    org.springframework: warn
# ç”¨æˆ·é…ç½®
user:
  password:
    # å¯†ç æœ€å¤§é”™è¯¯æ¬¡æ•°
    maxRetryCount: 5
    # å¯†ç é”å®šæ—¶é—´ï¼ˆé»˜è®¤10分钟)
    lockTime: 10
# Spring配置
spring:
@@ -70,39 +49,6 @@
    restart:
      # çƒ­éƒ¨ç½²å¼€å…³
      enabled: true
  data:
    # redis é…ç½®
    redis:
      # åœ°å€
      host: 192.168.0.24
      # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
      port: 6379
      # æ•°æ®åº“索引
      database: 0
      # å¯†ç 
      password:
      # è¿žæŽ¥è¶…æ—¶æ—¶é—´
      timeout: 10s
      lettuce:
        pool:
          # è¿žæŽ¥æ± ä¸­çš„æœ€å°ç©ºé—²è¿žæŽ¥
          min-idle: 0
          # è¿žæŽ¥æ± ä¸­çš„æœ€å¤§ç©ºé—²è¿žæŽ¥
          max-idle: 8
          # è¿žæŽ¥æ± çš„æœ€å¤§æ•°æ®åº“连接数
          max-active: 8
          # #连接池最大阻塞等待时间(使用负值表示没有限制)
          max-wait: -1ms
# token配置
token:
  # ä»¤ç‰Œè‡ªå®šä¹‰æ ‡è¯†
  header: Authorization
  # ä»¤ç‰Œå¯†é’¥
  secret: abcdefghijklmnopqrstuvwxyz
  # ä»¤ç‰Œæœ‰æ•ˆæœŸï¼ˆé»˜è®¤30分钟)
  expireTime: 30
# MyBatis-Plus配置
mybatis-plus:
  # æœç´¢æŒ‡å®šåŒ…别名
@@ -136,19 +82,3 @@
      display-name: '测试模块'
      paths-to-match: '/**'
      packages-to-scan: com.ruoyi
# é˜²ç›—链配置
referer:
  # é˜²ç›—链开关
  enabled: false
  # å…è®¸çš„域名列表
  allowed-domains: localhost,127.0.0.1,ruoyi.vip,www.ruoyi.vip
# é˜²æ­¢XSS攻击
xss:
  # è¿‡æ»¤å¼€å…³
  enabled: true
  # æŽ’除链接(多个用逗号分隔)
  excludes: /system/notice
  # åŒ¹é…é“¾æŽ¥
  urlPatterns: /system/*,/monitor/*,/tool/*