Commit 2969d16f authored by 王果's avatar 王果

36671 子 【一张图替换站端系统】-自动化数据处理 / 数据同步:系统账号

parent e6f2ffd0
......@@ -59,6 +59,12 @@
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.21</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
......
......@@ -7,6 +7,7 @@ import com.yeejoin.amos.adpter.model.AreaExcelModel;
import com.yeejoin.amos.adpter.model.DeviceExcelModel;
import com.yeejoin.amos.adpter.model.PersonExcelModel;
import com.yeejoin.amos.adpter.model.SystemExcelModel;
import com.yeejoin.amos.adpter.util.HutoolIdGenerator;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.jdbc.RuntimeSqlException;
import org.apache.ibatis.jdbc.ScriptRunner;
......@@ -86,6 +87,14 @@ public class AdpterService {
@Value("${goal.jdbc.ip.project}")
String goalJdbcProject;
@Value("${goal.jdbc.ip.project.org.seq}")
String projectOrgSeq;
@Value("${goal.jdbc.ip.project.role.seq}")
String projectRoleSeq;
public Map<String, String> handle() {
Map<String, String> rMap = new HashMap<>();
......@@ -137,83 +146,95 @@ public class AdpterService {
log.info("执行结束================");
return rMap;
}
public Map<String, String> cpSysUserOrg() {
Map<String, String> rMap = new HashMap<>();
// //同步amos_project库用户表
//// copy(goalJdbcProject, sourceJdbcProject, "auth_login_info", "auth_login_info", "SEQUENCE_NBR", rMap);
// String srcTableName = "auth_login_info";
// String destTableName = "auth_login_info";
// String id = "SEQUENCE_NBR";
// startTime = System.currentTimeMillis();
//
// Connection conn = null;
// PreparedStatement pst = null;
// conn = getConnection(goalJdbcProject);
//
//// int count[] = new int[0];
// List<String> list = new ArrayList<>();
//
// //查询数据
// String sql = String.format("select * from %s ", srcTableName);
// //查询数据
// String sqlGoal = "select count(1) as num from " + destTableName + " where " + id + " = ";
// List<Map<String, Object>> queryOld = query(sourceJdbcProject, sql);
// List<Map<String, Object>> query = new ArrayList<>();
// //插入数据
// String insertSql = "insert into %s(%s) values(%s)";
// StringBuilder key = new StringBuilder();
// StringBuilder value = new StringBuilder();
// List<String> columns = new ArrayList<>();
// List<List<Object>> params = new ArrayList<>();
//// 剔除已存在的数据
// for (Map<String, Object> map : queryOld) {
// map.put("SALT", "10ICG834E4");
// map.put("PASSWORD", "ACCB2DE8AD752638D55F6F0FE7CA928");//设置密码为a1234560
// map.put("AGENCY_CODE", "ONEPLOT");
// try {
// pst = conn.prepareStatement(sqlGoal + map.get(id));
// ResultSet resultSet = pst.executeQuery();
// log.debug("严重重复数据查询:{}", sqlGoal + map.get(id));
// while (resultSet.next()) {
// int num = resultSet.getInt("num");
// if (num < 1) {
// query.add(map);
// }
// }
// } catch (SQLException throwables) {
// throwables.printStackTrace();
// } finally {
// try {
// if (pst != null && !pst.isClosed()) {
// pst.close();
// }
// } catch (SQLException e) {
// e.printStackTrace();
// }
// }
// }
//
// if (!query.isEmpty()) {
// for (String column : query.get(0).keySet()) {
// key.append(column).append(",");
// value.append("?,");
// columns.add(column);
// }
// insertSql = String.format(insertSql,
// destTableName,
// key.substring(0, key.length() - 1),
// value.substring(0, value.length() - 1));
//
// for (Map<String, Object> map : query) {
// List<Object> param = new ArrayList<>();
// for (String column : columns) {
// param.add(map.get(column));
// }
// params.add(param);
// }
// int[] count = executeBatch(goalJdbcProject, insertSql, params, destTableName);
// log.debug("复制表{}成功,用时:{}ms,复制数据行数:{}", destTableName, (System.currentTimeMillis() - startTime), count.length);
// }
String srcTableName = "auth_login_info";
String destTableName = "auth_login_info";
String id = "SEQUENCE_NBR";
startTime = System.currentTimeMillis();
Connection conn = getConnection(goalJdbcProject);
PreparedStatement pst = null;
//查询数据
String sql = String.format("select * from %s ", srcTableName);
//查询数据
String sqlGoal = "select count(1) as num from " + destTableName + " where " + id + " = ";
List<Map<String, Object>> queryOld = query(sourceJdbcProject, sql);
List<Map<String, Object>> query = new ArrayList<>();
//插入数据
String insertSql = "insert into %s(%s) values(%s)";
StringBuilder key = new StringBuilder();
StringBuilder value = new StringBuilder();
List<String> columns = new ArrayList<>();
List<List<Object>> params = new ArrayList<>();
List<String> sqlList = new ArrayList<>();
// 剔除已存在的数据
for (Map<String, Object> map : queryOld) {
map.put("SALT", "10ICG834E4");
map.put("PASSWORD", "ACCB2DE8AD752638D55F6F0FE7CA928");//设置密码为a1234560
map.put("AGENCY_CODE", "ONEPLOT");
map.put("REC_DATE", new Date());
try {
pst = conn.prepareStatement(sqlGoal + map.get(id));
ResultSet resultSet = pst.executeQuery();
log.debug("重复数据查询:{}", sqlGoal + map.get(id));
while (resultSet.next()) {
int num = resultSet.getInt("num");
if (num < 1) {
query.add(map);
}
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
try {
if (pst != null && !pst.isClosed()) {
pst.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
if (!query.isEmpty()) {
for (String column : query.get(0).keySet()) {
key.append(column).append(",");
value.append("?,");
columns.add(column);
}
insertSql = String.format(insertSql,
destTableName,
key.substring(0, key.length() - 1),
value.substring(0, value.length() - 1));
for (Map<String, Object> map : query) {
List<Object> param = new ArrayList<>();
for (String column : columns) {
param.add(map.get(column));
}
params.add(param);
//用户公司表数据、用户角色表数据、用户与应用关联表数据插入
if (map.containsKey("USER_ID") && !ObjectUtils.isEmpty(map.get("USER_ID"))) {
sqlList.add("INSERT INTO `privilege_group_user` (`SEQUENCE_NBR`, `GROUP_SEQ`, `USER_ID`, `AGENCY_CODE`, `REC_DATE`, `REC_USER_ID`, `SUB_ORG_SEQ`) VALUES (" + HutoolIdGenerator.generate() + ", " + projectOrgSeq + ", '" + map.get("USER_ID") + "', 'ONEPLOT', '2025-05-19 11:18:44', '4950517', NULL)");
sqlList.add("INSERT INTO `privilege_user_org_role` (`SEQUENCE_NBR`, `REC_DATE`, `REC_USER_ID`, `USER_ID`, `COMPANY_SEQ`, `DEPARTMENT_SEQ`, `AGENCY_CODE`, `ROLE_SEQ`) VALUES (" + HutoolIdGenerator.generate() + ", '2025-05-19 11:18:44', '4950517', '" + map.get("USER_ID") + "', " + projectRoleSeq + ", NULL, 'ONEPLOT', " + projectOrgSeq + ")");
sqlList.add("INSERT INTO `privilege_user_application` (`SEQUENCE_NBR`, `REC_DATE`, `REC_USER_ID`, `AGENCY_CODE`, `APP_CODE`, `USER_ID`, `SUB_ORG_SEQ`) VALUES (" + HutoolIdGenerator.generate() + ", '2025-05-19 11:18:44', '4950517', 'ONEPLOT', 'AMOS_STUDIO', '" + map.get("USER_ID") + "', NULL)");
sqlList.add("INSERT INTO `privilege_user_application` (`SEQUENCE_NBR`, `REC_DATE`, `REC_USER_ID`, `AGENCY_CODE`, `APP_CODE`, `USER_ID`, `SUB_ORG_SEQ`) VALUES (" + HutoolIdGenerator.generate() + ", '2025-05-19 11:18:44', '4950517', 'ONEPLOT', 'AMOS_ONEPLOT_DP', '" + map.get("USER_ID") + "', NULL)");
sqlList.add("INSERT INTO `privilege_user_application` (`SEQUENCE_NBR`, `REC_DATE`, `REC_USER_ID`, `AGENCY_CODE`, `APP_CODE`, `USER_ID`, `SUB_ORG_SEQ`) VALUES (" + HutoolIdGenerator.generate() + ", '2025-05-19 11:18:44', '4950517', 'ONEPLOT', 'AMOS_ADMIN', '" + map.get("USER_ID") + "', NULL)");
sqlList.add("INSERT INTO `privilege_user_application` (`SEQUENCE_NBR`, `REC_DATE`, `REC_USER_ID`, `AGENCY_CODE`, `APP_CODE`, `USER_ID`, `SUB_ORG_SEQ`) VALUES (" + HutoolIdGenerator.generate() + ", '2025-05-19 11:18:44', '4950517', 'ONEPLOT', 'AMOS_ONEPLOT', '" + map.get("USER_ID") + "', NULL)");
sqlList.add("INSERT INTO `privilege_user_application` (`SEQUENCE_NBR`, `REC_DATE`, `REC_USER_ID`, `AGENCY_CODE`, `APP_CODE`, `USER_ID`, `SUB_ORG_SEQ`) VALUES (" + HutoolIdGenerator.generate() + ", '2025-05-19 11:18:44', '4950517', 'ONEPLOT', 'AMOS_ONEPLOT_SP', '" + map.get("USER_ID") + "', NULL)");
}
}
int[] count = executeBatch(goalJdbcProject, insertSql, params, destTableName);
log.debug("复制表{}成功,用时:{}ms,复制数据行数:{}", destTableName, (System.currentTimeMillis() - startTime), count.length);
}
if(!ObjectUtils.isEmpty(sqlList)){
executeBySql(sqlList, goalJdbcProject, userName, pwd);
log.debug("处理用户角色单位数据成功,用时:{}ms", (System.currentTimeMillis() - startTime));
}
copyUser(sourceJdbcProject, goalJdbcProject, "privilege_agency_user", "privilege_agency_user", "SEQUENCE_NBR", rMap);
log.info("执行结束================");
return rMap;
......@@ -405,9 +426,10 @@ public class AdpterService {
// 剔除已存在的数据
for (Map map : queryOld) {
map.put("AGENCY_CODE","ONEPLOT");
map.put("PASSWORD_RESET",0);
map.put("SUPER_ORG_CODE","10*11");
map.put("AGENCY_CODE", "ONEPLOT");
map.put("PASSWORD_RESET", 0);
map.put("SUPER_ORG_CODE", "10*11");
map.put("REC_DATE", new Date());
try {
pst = conn.prepareStatement(sqlGoal + map.get(id));
ResultSet resultSet = pst.executeQuery();
......@@ -461,6 +483,7 @@ public class AdpterService {
}
return count;
}
/**
* 批量执行一个 SQL 语句,可以传不同的参数
*
......@@ -914,6 +937,44 @@ public class AdpterService {
}
private void executeBySql(List<String> sqlList, String url, String username, String password) {
Connection connection = null;
Statement statement = null;
try {
// 获取数据库连接
connection = DriverManager.getConnection(url, username, password);
connection.setAutoCommit(false);
statement = connection.createStatement();
Statement finalStatement = statement;
for (String sql : sqlList) {
finalStatement.addBatch(sql);
log.debug("执sql:{}", sql);
}
// 执行批处理
int[] result = statement.executeBatch();
// 提交事务
connection.commit();
System.out.println("批量插入完成,影响行数: " + Arrays.toString(result));
} catch (SQLException e) {
if (connection != null) {
try {
connection.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
} finally {
// 关闭资源
try {
if (statement != null) statement.close();
if (connection != null) connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private void execute(List<Map<String, Object>> params, String url, String username, String password) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Connection connection = null;
......@@ -1125,7 +1186,7 @@ public class AdpterService {
sql2 = sql2 + String.join(",", arrayList) + ") and field_value is not NULL and field_value !=''";
List<Map<String, Object>> list2 = query(dlCom, sql2);
ArrayList<PersonExcelModel> models = new ArrayList<>();
String sql3 = "select * from cb_firefighters_post where org_usr_id in ("+ String.join(",", arrayList) + ")";
String sql3 = "select * from cb_firefighters_post where org_usr_id in (" + String.join(",", arrayList) + ")";
List<Map<String, Object>> list3 = query(dlCom, sql3);
String sql4 = "select CONCAT(b.name,'-',a.name) as name from cb_data_dictionary a " +
"left join cb_data_dictionary b on a.parent = b.sequence_nbr " +
......@@ -1157,7 +1218,8 @@ public class AdpterService {
model.setGender(ObjectUtils.isEmpty(objectMap.get("field_value_label")) ? objectMap.get("field_value").toString() : objectMap.get("field_value_label").toString());
}
if (objectMap.get("field_code").equals("certificatesTypeCode") && !ObjectUtils.isEmpty(objectMap.get("field_value"))) {
model.setIdType(ObjectUtils.isEmpty(objectMap.get("field_value_label")) ? objectMap.get("field_value").toString() : objectMap.get("field_value_label").toString());
String s = ObjectUtils.isEmpty(objectMap.get("field_value_label")) ? objectMap.get("field_value").toString() : objectMap.get("field_value_label").toString();
model.setIdType("120".equals(s) ? "身份证" : s);
}
if (objectMap.get("field_code").equals("certificatesNumber") && !ObjectUtils.isEmpty(objectMap.get("field_value"))) {
model.setIdNum(ObjectUtils.isEmpty(objectMap.get("field_value_label")) ? objectMap.get("field_value").toString() : objectMap.get("field_value_label").toString());
......@@ -1178,21 +1240,21 @@ public class AdpterService {
}
for (Map<String, Object> objectMap : list3) {
if (map.get("sequence_nbr").toString().equals(objectMap.get("org_usr_id").toString())) {
if(!ObjectUtils.isEmpty(objectMap.get("post_qualification"))){
if (!ObjectUtils.isEmpty(objectMap.get("post_qualification"))) {
String qualification = objectMap.get("post_qualification").toString();
List<Map<String, Object>> maps = list4.stream().filter(v -> v.get("name").toString().contains(qualification)).collect(Collectors.toList());
if(!ObjectUtils.isEmpty(maps)){
if (!ObjectUtils.isEmpty(maps)) {
model.setQualification(maps.get(0).get("name").toString());
}
}
if(!ObjectUtils.isEmpty(objectMap.get("qualification_certificate"))){
if (!ObjectUtils.isEmpty(objectMap.get("qualification_certificate"))) {
model.setFirePost(objectMap.get("qualification_certificate").toString());
}
if(!ObjectUtils.isEmpty(objectMap.get("job_title"))){
if (!ObjectUtils.isEmpty(objectMap.get("job_title"))) {
model.setPost(objectMap.get("job_title").toString());
}
}
}
}
model.setObjType("人员");
models.add(model);
}
......
package com.yeejoin.amos.adpter.util;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
public class HutoolIdGenerator {
public static long generate() {
Snowflake snowflake = IdUtil.getSnowflake(1, 1); // 指定workerId和datacenterId
return snowflake.nextId();
}
// 示例调用
public static void main(String[] args) {
long id = HutoolIdGenerator.generate();
System.out.println("Hutool生成的ID: " + id);
}
}
\ No newline at end of file
......@@ -36,6 +36,10 @@ goal.jdbc.ip.dlcom=jdbc:mysql://172.16.11.201:3307/gusu_common?allowMultiQueries
goal.jdbc.ip.project=jdbc:mysql://39.100.71.139:3307/amos_project?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
source.jdbc.ip.project=jdbc:mysql://39.100.71.139:3307/wh_project?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
## 系统用户要同步公司的ID
goal.jdbc.ip.project.org.seq=1921835551384690690
## 系统用户要同步角色的ID
goal.jdbc.ip.project.role.seq=1921835551384690690
yeejoin.user=root
yeejoin.pwd=Yeejoin@2020
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment