yuan
7 天以前 dd3c0399c9f3c2e70bfd0072cddadcd8d34f18bb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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()));
    }
}