package com.ruoyi.approve.service.impl; import com.ruoyi.approve.mapper.ApproveNodeMapper; import com.ruoyi.approve.mapper.ApproveProcessMapper; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.jdbc.core.JdbcTemplate; import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @SpringBootTest public class ApproveProcessIdModifyTest { @Autowired private JdbcTemplate jdbcTemplate; @Autowired private ApproveProcessMapper approveProcessMapper; @Autowired private ApproveNodeMapper approveNodeMapper; /** * 修改审批流程编号 */ @Test void testModifyApproveId() { Map modifyMap = new LinkedHashMap<>(); modifyMap.put("20260523020", "2026-05-09"); modifyMap.put("20260523019", "2026-04-29"); modifyMap.put("20260523018", "2026-04-16"); modifyMap.put("20260523009", "2026-05-07"); modifyMap.put("20260523008", "2026-04-11"); modifyMap.put("20260523007", "2026-04-10"); modifyMap.put("20260523006", "2026-04-07"); modifyMap.put("20260523003", "2026-04-07"); for (Map.Entry entry : modifyMap.entrySet()) { processOne(entry.getKey(), entry.getValue()); } System.out.println("全部完成!"); } private void processOne(String oldApproveId, String targetDateStr) { LocalDate targetDate = LocalDate.parse(targetDateStr); String datePrefix = targetDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")); String maxId = jdbcTemplate.queryForObject( "SELECT MAX(approve_id) FROM approve_process WHERE approve_id LIKE ?", String.class, datePrefix + "%"); long nextSeq = 1; if (maxId != null && maxId.length() >= 11) { nextSeq = Long.parseLong(maxId.substring(8)) + 1; } String newApproveId = datePrefix + String.format("%03d", nextSeq); System.out.println("旧批号: " + oldApproveId + " -> 新批号: " + newApproveId); List> processList = jdbcTemplate.queryForList( "SELECT * FROM approve_process WHERE approve_id = ?", oldApproveId); if (processList.isEmpty()) { System.out.println(" ⚠ 未找到记录,跳过"); return; } Map process = processList.get(0); Timestamp newApproveTime = replaceDate(process.get("approve_time"), targetDate); Timestamp newApproveOverTime = replaceDate(process.get("approve_over_time"), targetDate); Timestamp newCreateTime = replaceDate(process.get("create_time"), targetDate); jdbcTemplate.update( "UPDATE approve_process SET approve_id = ?, approve_time = ?, approve_over_time = ?, create_time = ? WHERE approve_id = ?", newApproveId, newApproveTime, newApproveOverTime, newCreateTime, oldApproveId); System.out.println(" ✓ approve_process 已更新"); List> nodeList = jdbcTemplate.queryForList( "SELECT * FROM approve_node WHERE approve_process_id = ?", oldApproveId); if (!nodeList.isEmpty()) { Map node = nodeList.get(0); Timestamp newNodeTime = replaceDate(node.get("approve_node_time"), targetDate); Timestamp newNodeCreateTime = replaceDate(node.get("create_time"), targetDate); Timestamp newNodeUpdateTime = replaceDate(node.get("update_time"), targetDate); jdbcTemplate.update( "UPDATE approve_node SET approve_process_id = ?, approve_node_time = ?, create_time = ?, update_time = ? WHERE approve_process_id = ?", newApproveId, newNodeTime, newNodeCreateTime, newNodeUpdateTime, oldApproveId); System.out.println(" ✓ approve_node 已更新 (" + nodeList.size() + " 条)"); } else { System.out.println(" - approve_node 无记录"); } } private static Timestamp replaceDate(Object dateObj, LocalDate targetDate) { if (dateObj == null) return null; LocalDateTime ldt; if (dateObj instanceof Timestamp ts) { ldt = ts.toLocalDateTime(); } else if (dateObj instanceof LocalDateTime dt) { ldt = dt; } else { return null; } return Timestamp.valueOf(LocalDateTime.of(targetDate, ldt.toLocalTime())); } }