liding
16 小时以前 f7ba5f3fb17abf09b6bd3980c46761c2431a4c31
feat(search-new): 标准维护保存时自动同步生成并归档查新记录
已添加4个文件
已修改9个文件
293 ■■■■■ 文件已修改
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 | 历史
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>