20260911173133
This commit is contained in:
1 parent
3838ed74b1
commit
f3ad727f1c
60 files changed
+4971
-6621
No files matched your search
@@ -0,0 +1,98 @@
|
||||
import java.io.InputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.Statement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* One-off migration: simplifies s_power keys to bare usage permission codes.
|
||||
* menu/module permission points drop the action suffix:
|
||||
* module.s_i18n_type.read/.create/.update/.delete -> module.s_i18n_type
|
||||
* b_action of the merged rows becomes 'access'; b_name is taken from s_module.b_name when available.
|
||||
* Idempotent: old-style rows (b_type='module' with CRUD action) are merged only once.
|
||||
*/
|
||||
public final class SimplifyPowerKeys {
|
||||
public static void main(String[] args) throws Exception {
|
||||
Path apiRoot = Path.of("").toAbsolutePath().normalize();
|
||||
Path configPath = apiRoot.resolve("config/dbconfigs/g3hd.properties").normalize();
|
||||
Properties properties = new Properties();
|
||||
try (InputStream input = Files.newInputStream(configPath)) {
|
||||
properties.load(input);
|
||||
}
|
||||
try (Connection connection = DriverManager.getConnection(
|
||||
properties.getProperty("url"),
|
||||
properties.getProperty("username"),
|
||||
properties.getProperty("password"))) {
|
||||
if (!"FMS".equalsIgnoreCase(connection.getCatalog())) {
|
||||
throw new IllegalStateException("Refusing to alter database: " + connection.getCatalog());
|
||||
}
|
||||
connection.setAutoCommit(false);
|
||||
try {
|
||||
List<String[]> oldRows = new ArrayList<>();
|
||||
String findSql = "SELECT DISTINCT b_object_type, b_object_id FROM dbo.s_power "
|
||||
+ "WHERE b_type = 'module' AND b_action <> 'access'";
|
||||
try (Statement statement = connection.createStatement();
|
||||
ResultSet rows = statement.executeQuery(findSql)) {
|
||||
while (rows.next()) {
|
||||
oldRows.add(new String[]{rows.getString(1), rows.getString(2)});
|
||||
}
|
||||
}
|
||||
try (PreparedStatement delete = connection.prepareStatement(
|
||||
"DELETE FROM dbo.s_power WHERE b_type = 'module' AND b_object_type = ? AND b_object_id = ?");
|
||||
PreparedStatement insert = connection.prepareStatement(
|
||||
"INSERT INTO dbo.s_power (b_id, b_name, b_i18n, b_type, b_object_type, b_object_id, b_action, b_canuse, b_xh) "
|
||||
+ "VALUES (?, ?, NULL, 'module', ?, ?, 'access', 1, 0)")) {
|
||||
for (String[] objectKey : oldRows) {
|
||||
String objectType = objectKey[0];
|
||||
String objectId = objectKey[1];
|
||||
delete.setString(1, objectType);
|
||||
delete.setString(2, objectId);
|
||||
int removed = delete.executeUpdate();
|
||||
String name = lookupModuleName(connection, objectId);
|
||||
insert.setString(1, "module." + objectId);
|
||||
insert.setString(2, name);
|
||||
insert.setString(3, objectType);
|
||||
insert.setString(4, objectId);
|
||||
insert.executeUpdate();
|
||||
System.out.println("MERGED|" + objectType + ":" + objectId
|
||||
+ "|removed=" + removed + "|new=module." + objectId + "|name=" + name);
|
||||
}
|
||||
}
|
||||
connection.commit();
|
||||
System.out.println("COMMITTED|merged_objects=" + oldRows.size());
|
||||
} catch (Exception exception) {
|
||||
connection.rollback();
|
||||
throw exception;
|
||||
}
|
||||
try (Statement statement = connection.createStatement();
|
||||
ResultSet rows = statement.executeQuery(
|
||||
"SELECT b_id, b_name, b_type, b_object_type, b_object_id, b_action, b_canuse "
|
||||
+ "FROM dbo.s_power ORDER BY b_type, b_id")) {
|
||||
while (rows.next()) {
|
||||
System.out.println("ROW|" + rows.getString(1) + "|" + rows.getString(2)
|
||||
+ "|type=" + rows.getString(3) + "|object=" + rows.getString(4) + ":" + rows.getString(5)
|
||||
+ "|action=" + rows.getString(6) + "|canuse=" + rows.getInt(7));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String lookupModuleName(Connection connection, String moduleId) throws Exception {
|
||||
try (PreparedStatement statement = connection.prepareStatement(
|
||||
"SELECT b_name FROM dbo.s_module WHERE b_id = ?")) {
|
||||
statement.setString(1, moduleId);
|
||||
try (ResultSet rows = statement.executeQuery()) {
|
||||
if (rows.next() && rows.getString(1) != null && !rows.getString(1).isBlank()) {
|
||||
return rows.getString(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
return moduleId;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user