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<String, String> 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<String, String> 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<Map<String, Object>> processList = jdbcTemplate.queryForList(
|
"SELECT * FROM approve_process WHERE approve_id = ?", oldApproveId);
|
|
if (processList.isEmpty()) {
|
System.out.println(" ⚠ 未找到记录,跳过");
|
return;
|
}
|
|
Map<String, Object> 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<Map<String, Object>> nodeList = jdbcTemplate.queryForList(
|
"SELECT * FROM approve_node WHERE approve_process_id = ?", oldApproveId);
|
|
if (!nodeList.isEmpty()) {
|
Map<String, Object> 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()));
|
}
|
}
|