|
|
@ -65,126 +65,147 @@ public class MysqlServiceImpl implements MysqlService { |
|
|
|
// @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 |
|
|
|
public void getSqlserverData() throws Exception { |
|
|
|
logger.info("开始从 SQL Server 同步数据到 MySQL"); |
|
|
|
try (Connection sqlServerConn = mysql1DataSource.getConnection(); |
|
|
|
|
|
|
|
try (Connection sqlServerConn = sqlserver1DataSource.getConnection(); |
|
|
|
Connection mysqlConn = mysql1DataSource.getConnection()) { |
|
|
|
logger.info("开始查询数据..."); |
|
|
|
// 从 SQL Server 查询数据 |
|
|
|
String querySql = "SELECT gtype,jwcode,free,core_jb,buy_jb,cz_time,cz_user,cz_bz,operation_platform,goods_name " + |
|
|
|
"FROM user_gold_records WHERE flag=1 and cz_time> ?"; |
|
|
|
|
|
|
|
try (PreparedStatement sqlServerStmt = sqlServerConn.prepareStatement(querySql)) { |
|
|
|
sqlServerStmt.setTimestamp(1, Timestamp.valueOf(LocalDateTime.now().minusHours(1))); // 获取最近一小时的数据 |
|
|
|
ResultSet resultSet = sqlServerStmt.executeQuery(); |
|
|
|
logger.info("查询数据完毕!"); |
|
|
|
// 插入到 MySQL |
|
|
|
//退款类型 61:ERP退款(退金币) |
|
|
|
String insertSql = "INSERT INTO user_gold_record (order_code,jwcode,sum_gold,permanent_gold,free_june,free_december," + |
|
|
|
"task_gold,pay_platform,goods_name,refund_type,refund_model,remark,type,admin_id," + |
|
|
|
"audit_status,create_time,flag,update_time,audit_time) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) "; |
|
|
|
try (PreparedStatement mysqlStmt = mysqlConn.prepareStatement(insertSql)) { |
|
|
|
while (resultSet.next()) { |
|
|
|
int gtype = resultSet.getInt("gtype"); |
|
|
|
Integer jwcode = resultSet.getInt("jwcode"); |
|
|
|
int free = resultSet.getInt("free"); |
|
|
|
int core_jb = resultSet.getInt("core_jb"); |
|
|
|
int buy_jb = resultSet.getInt("buy_jb"); |
|
|
|
Timestamp created_at = resultSet.getTimestamp("cz_time"); |
|
|
|
String name = resultSet.getString("cz_user"); |
|
|
|
String remark = resultSet.getString("cz_bz"); |
|
|
|
String operation_platform = resultSet.getString("operation_platform"); |
|
|
|
String goods_name = resultSet.getString("goods_name"); |
|
|
|
String timestampPart = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); |
|
|
|
|
|
|
|
if(StringUtils.isNumeric(name)){ |
|
|
|
Integer admin_id = Integer.valueOf(adminService.getId(name)); |
|
|
|
logger.info("用户传输完毕"); |
|
|
|
mysqlStmt.setInt(14, admin_id); |
|
|
|
}else { |
|
|
|
mysqlStmt.setInt(14, 99999); |
|
|
|
} |
|
|
|
|
|
|
|
Random random = new Random(); |
|
|
|
int randomNumber = random.nextInt(900) + 100; |
|
|
|
// 判断gtype |
|
|
|
// 定义分页参数 |
|
|
|
int pageSize = 100; |
|
|
|
int offset = 0; |
|
|
|
boolean hasMoreData = true; |
|
|
|
|
|
|
|
mysqlStmt.setString(10,null); |
|
|
|
mysqlStmt.setNull(11, java.sql.Types.INTEGER); |
|
|
|
if(validFourTypes.contains(gtype)){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
if(validZeroTypes.contains(gtype)){ |
|
|
|
mysqlStmt.setInt(13, 0); |
|
|
|
mysqlStmt.setString(1, "ERPCZ"+timestampPart+randomNumber); |
|
|
|
} |
|
|
|
if(validOneTypes.contains(gtype)){ |
|
|
|
mysqlStmt.setInt(13, 1); |
|
|
|
mysqlStmt.setString(1, "ERPXF"+timestampPart+randomNumber); |
|
|
|
} |
|
|
|
if(validTwoTypes.contains(gtype)){ |
|
|
|
mysqlStmt.setInt(13, 2); |
|
|
|
mysqlStmt.setString(1, "ERPTK"+timestampPart+randomNumber); |
|
|
|
mysqlStmt.setString(10,"退款商品"); |
|
|
|
mysqlStmt.setInt(11, 0); |
|
|
|
} |
|
|
|
if(validThreeTypes.contains(gtype)){ |
|
|
|
mysqlStmt.setInt(13, 3); |
|
|
|
mysqlStmt.setString(1, "ERPQT"+timestampPart+randomNumber); |
|
|
|
} |
|
|
|
// 查询 SQL Server 数据的 SQL 语句 |
|
|
|
String querySql = """ |
|
|
|
SELECT gtype, jwcode, free, core_jb, buy_jb, cz_time, cz_user, cz_bz, operation_platform, goods_name |
|
|
|
FROM hwhcGold.dbo.user_gold_records |
|
|
|
WHERE flag = 1 AND cz_time > ? |
|
|
|
ORDER BY cz_time ASC |
|
|
|
OFFSET ? ROWS FETCH NEXT ? ROWS ONLY |
|
|
|
"""; |
|
|
|
|
|
|
|
// 插入 MySQL 数据的 SQL 语句 |
|
|
|
String insertSql = "INSERT INTO user_gold_record (order_code, jwcode, sum_gold, permanent_gold, free_june, free_december, " + |
|
|
|
"task_gold, pay_platform, goods_name, refund_type, refund_model, remark, type, admin_id, " + |
|
|
|
"audit_status, create_time, flag, update_time, audit_time, is_refund) " + |
|
|
|
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; |
|
|
|
|
|
|
|
while (hasMoreData) { |
|
|
|
try (PreparedStatement sqlServerStmt = sqlServerConn.prepareStatement(querySql)) { |
|
|
|
sqlServerStmt.setTimestamp(1, Timestamp.valueOf(LocalDateTime.now().minusHours(1))); // 获取最近一小时的数据 |
|
|
|
sqlServerStmt.setInt(2, offset); // 设置 OFFSET |
|
|
|
sqlServerStmt.setInt(3, pageSize); // 设置 FETCH NEXT |
|
|
|
|
|
|
|
ResultSet resultSet = sqlServerStmt.executeQuery(); |
|
|
|
|
|
|
|
// 如果没有数据了,退出循环 |
|
|
|
if (!resultSet.next()) { |
|
|
|
hasMoreData = false; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
mysqlStmt.setInt(2, jwcode); |
|
|
|
mysqlStmt.setInt(3, free+core_jb+buy_jb); |
|
|
|
mysqlStmt.setInt(4,buy_jb); |
|
|
|
// 判断月份 |
|
|
|
if(currentMonth.getValue() >= 7){ |
|
|
|
mysqlStmt.setInt(6, free); |
|
|
|
mysqlStmt.setInt(5, 0); |
|
|
|
} |
|
|
|
if(currentMonth.getValue() < 7){ |
|
|
|
mysqlStmt.setInt(6, 0); |
|
|
|
mysqlStmt.setInt(5, free); |
|
|
|
} |
|
|
|
mysqlStmt.setInt(7, core_jb); |
|
|
|
if (operation_platform.equals("1")){ |
|
|
|
mysqlStmt.setString(8, "ERP"); |
|
|
|
} |
|
|
|
else if (operation_platform.equals("2")){ |
|
|
|
mysqlStmt.setString(8, "HomilyLink"); |
|
|
|
} |
|
|
|
else if(operation_platform.equals("3")){ |
|
|
|
mysqlStmt.setString(8, "HomilyChart"); |
|
|
|
} |
|
|
|
else if(operation_platform.equals("4")){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
else if(operation_platform.equals("0")){ |
|
|
|
mysqlStmt.setString(8, "初始化金币"); |
|
|
|
} |
|
|
|
else { |
|
|
|
mysqlStmt.setString(8, "其他"); |
|
|
|
} |
|
|
|
mysqlStmt.setString(9, goods_name); |
|
|
|
mysqlStmt.setString(12, remark); |
|
|
|
mysqlStmt.setInt(15, 3); |
|
|
|
mysqlStmt.setTimestamp(16, created_at); |
|
|
|
if(remark.contains("测试")&&remark.contains("员工")){ |
|
|
|
mysqlStmt.setInt(17, 0); |
|
|
|
}else { |
|
|
|
mysqlStmt.setInt(17, 1); |
|
|
|
} |
|
|
|
mysqlStmt.setTimestamp(18, created_at); |
|
|
|
mysqlStmt.setTimestamp(19, created_at); |
|
|
|
logger.info("查询到 {} 条数据", pageSize); |
|
|
|
|
|
|
|
try (PreparedStatement mysqlStmt = mysqlConn.prepareStatement(insertSql)) { |
|
|
|
do { |
|
|
|
int gtype = resultSet.getInt("gtype"); |
|
|
|
Integer jwcode = resultSet.getInt("jwcode"); |
|
|
|
int free = resultSet.getInt("free"); |
|
|
|
int core_jb = resultSet.getInt("core_jb"); |
|
|
|
int buy_jb = resultSet.getInt("buy_jb"); |
|
|
|
Timestamp created_at = resultSet.getTimestamp("cz_time"); |
|
|
|
String name = resultSet.getString("cz_user"); |
|
|
|
String remark = resultSet.getString("cz_bz"); |
|
|
|
String operation_platform = resultSet.getString("operation_platform"); |
|
|
|
String goods_name = resultSet.getString("goods_name"); |
|
|
|
String timestampPart = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); |
|
|
|
|
|
|
|
if (StringUtils.isNumeric(name)) { |
|
|
|
Integer admin_id = Integer.valueOf(adminService.getId(name)); |
|
|
|
mysqlStmt.setInt(14, admin_id); |
|
|
|
} else { |
|
|
|
mysqlStmt.setInt(14, 99999); |
|
|
|
} |
|
|
|
|
|
|
|
Random random = new Random(); |
|
|
|
int randomNumber = random.nextInt(900) + 100; |
|
|
|
|
|
|
|
// 根据 gtype 设置不同的值 |
|
|
|
mysqlStmt.setString(10, null); |
|
|
|
mysqlStmt.setNull(11, java.sql.Types.INTEGER); |
|
|
|
if (validFourTypes.contains(gtype)) { |
|
|
|
continue; |
|
|
|
} |
|
|
|
if (validZeroTypes.contains(gtype)) { |
|
|
|
mysqlStmt.setInt(13, 0); |
|
|
|
mysqlStmt.setNull(20, java.sql.Types.INTEGER); |
|
|
|
mysqlStmt.setString(1, "ERPCZ_" + timestampPart + randomNumber); |
|
|
|
} |
|
|
|
if (validOneTypes.contains(gtype)) { |
|
|
|
mysqlStmt.setInt(13, 1); |
|
|
|
mysqlStmt.setInt(20, 0); |
|
|
|
mysqlStmt.setString(1, "ERPXF_" + timestampPart + randomNumber); |
|
|
|
} |
|
|
|
if (validTwoTypes.contains(gtype)) { |
|
|
|
mysqlStmt.setInt(13, 2); |
|
|
|
mysqlStmt.setInt(20, 0); |
|
|
|
mysqlStmt.setString(1, "ERPTK_" + timestampPart + randomNumber); |
|
|
|
mysqlStmt.setString(10, "退款商品"); |
|
|
|
mysqlStmt.setInt(11, 0); |
|
|
|
} |
|
|
|
if (validThreeTypes.contains(gtype)) { |
|
|
|
mysqlStmt.setInt(13, 3); |
|
|
|
mysqlStmt.setString(1, "ERPQT_" + timestampPart + randomNumber); |
|
|
|
} |
|
|
|
|
|
|
|
mysqlStmt.setInt(2, jwcode); |
|
|
|
mysqlStmt.setInt(3, free + core_jb + buy_jb); |
|
|
|
mysqlStmt.setInt(4, buy_jb); |
|
|
|
if (currentMonth.getValue() >= 7) { |
|
|
|
mysqlStmt.setInt(6, free); |
|
|
|
mysqlStmt.setInt(5, 0); |
|
|
|
} |
|
|
|
if (currentMonth.getValue() < 7) { |
|
|
|
mysqlStmt.setInt(6, 0); |
|
|
|
mysqlStmt.setInt(5, free); |
|
|
|
} |
|
|
|
mysqlStmt.setInt(7, core_jb); |
|
|
|
if (operation_platform.equals("1")) { |
|
|
|
mysqlStmt.setString(8, "6"); |
|
|
|
} else if (operation_platform.equals("2")) { |
|
|
|
mysqlStmt.setString(8, "5"); |
|
|
|
} else if (operation_platform.equals("3")) { |
|
|
|
mysqlStmt.setString(8, "3"); |
|
|
|
} else if (operation_platform.equals("4")) { |
|
|
|
continue; |
|
|
|
} else if (operation_platform.equals("0")) { |
|
|
|
mysqlStmt.setString(8, "4"); |
|
|
|
} else { |
|
|
|
mysqlStmt.setString(8, "2"); |
|
|
|
} |
|
|
|
mysqlStmt.setString(9, goods_name); |
|
|
|
mysqlStmt.setString(12, remark); |
|
|
|
mysqlStmt.setInt(15, 3); |
|
|
|
mysqlStmt.setTimestamp(16, created_at); |
|
|
|
if (remark.contains("测试") && remark.contains("员工")) { |
|
|
|
mysqlStmt.setInt(17, 0); |
|
|
|
} else { |
|
|
|
mysqlStmt.setInt(17, 1); |
|
|
|
} |
|
|
|
mysqlStmt.setTimestamp(18, created_at); |
|
|
|
mysqlStmt.setTimestamp(19, created_at); |
|
|
|
|
|
|
|
mysqlStmt.addBatch(); |
|
|
|
|
|
|
|
// 更新时的值 |
|
|
|
mysqlStmt.addBatch(); |
|
|
|
// 更新用户信息逻辑 |
|
|
|
logger.info("查询用户是否存在"); |
|
|
|
User user = userService.selectAllUser(String.valueOf(jwcode)); |
|
|
|
if(ObjectUtils.isEmpty(user)){ |
|
|
|
if (ObjectUtils.isEmpty(user)) { |
|
|
|
logger.info("用户不存在"); |
|
|
|
user = new User(); |
|
|
|
List<String> country = Collections.singletonList("未知"); |
|
|
|
BaseDES des = new BaseDES(); |
|
|
|
String desjwcode= des.encrypt(String.valueOf(jwcode)); |
|
|
|
// System.out.println("desjwcode:"+desjwcode); |
|
|
|
String desjwcode = des.encrypt(String.valueOf(jwcode)); |
|
|
|
|
|
|
|
// 创建 JSON 请求体 |
|
|
|
Map<String, String> requestBody = new HashMap<>(); |
|
|
@ -207,10 +228,10 @@ public class MysqlServiceImpl implements MysqlService { |
|
|
|
if (response.getStatusCode().is2xxSuccessful()) { |
|
|
|
Map<String, Object> responseBody = response.getBody(); |
|
|
|
if (responseBody != null) { |
|
|
|
// 获取data部分 |
|
|
|
// 获取 data 部分 |
|
|
|
Map<String, Object> data = (Map<String, Object>) responseBody.get("data"); |
|
|
|
if (data != null) { |
|
|
|
// 提取name和country |
|
|
|
// 提取 name 和 country |
|
|
|
name = (String) data.get("name"); |
|
|
|
country = (List<String>) data.get("country"); |
|
|
|
|
|
|
@ -232,9 +253,9 @@ public class MysqlServiceImpl implements MysqlService { |
|
|
|
country = Collections.singletonList("未知"); |
|
|
|
} |
|
|
|
|
|
|
|
String market= String.join(",",marketService.getMarketIds(country)); |
|
|
|
String market = String.join(",", marketService.getMarketIds(country)); |
|
|
|
user.setJwcode(jwcode); |
|
|
|
user.setName( name); |
|
|
|
user.setName(name); |
|
|
|
user.setMarket(market); |
|
|
|
logger.info("新添用户"); |
|
|
|
userService.addUser(user); |
|
|
@ -242,8 +263,8 @@ public class MysqlServiceImpl implements MysqlService { |
|
|
|
user = userService.selectAllUser(String.valueOf(jwcode)); |
|
|
|
} |
|
|
|
|
|
|
|
if(currentMonth.getValue() >= 7){ |
|
|
|
if(user.getCurrentFreeJune().add(BigDecimal.valueOf(free)).compareTo(BigDecimal.ZERO)>=0){ |
|
|
|
if (currentMonth.getValue() >= 7) { |
|
|
|
if (user.getCurrentFreeJune().add(BigDecimal.valueOf(free)).compareTo(BigDecimal.ZERO) >= 0) { |
|
|
|
user.setCurrentFreeJune(user.getCurrentFreeJune().add(BigDecimal.valueOf(free))); |
|
|
|
} else { |
|
|
|
BigDecimal remaining = user.getCurrentFreeJune().add(BigDecimal.valueOf(free)); |
|
|
@ -251,8 +272,8 @@ public class MysqlServiceImpl implements MysqlService { |
|
|
|
user.setCurrentFreeDecember(user.getCurrentFreeDecember().add(remaining)); |
|
|
|
} |
|
|
|
} |
|
|
|
if(currentMonth.getValue() <7){ |
|
|
|
if(user.getCurrentFreeDecember().add(BigDecimal.valueOf(free)).compareTo(BigDecimal.ZERO)>=0){ |
|
|
|
if (currentMonth.getValue() < 7) { |
|
|
|
if (user.getCurrentFreeDecember().add(BigDecimal.valueOf(free)).compareTo(BigDecimal.ZERO) >= 0) { |
|
|
|
user.setCurrentFreeDecember(user.getCurrentFreeDecember().add(BigDecimal.valueOf(free))); |
|
|
|
} else { |
|
|
|
BigDecimal remaining = user.getCurrentFreeDecember().add(BigDecimal.valueOf(free)); |
|
|
@ -263,18 +284,18 @@ public class MysqlServiceImpl implements MysqlService { |
|
|
|
|
|
|
|
user.setCurrentPermanentGold(user.getCurrentPermanentGold().add(BigDecimal.valueOf(buy_jb))); |
|
|
|
user.setCurrentTaskGold(user.getCurrentTaskGold().add(BigDecimal.valueOf(core_jb))); |
|
|
|
if(validZeroTypes.contains(gtype)) { |
|
|
|
if (validZeroTypes.contains(gtype)) { |
|
|
|
user.setRechargeNum(user.getRechargeNum() + 1); |
|
|
|
user.setSumPermanentGold(user.getSumPermanentGold().add(BigDecimal.valueOf(buy_jb))); |
|
|
|
user.setSumTaskGold(user.getSumTaskGold().add(BigDecimal.valueOf(core_jb))); |
|
|
|
if(currentMonth.getValue() >= 7){ |
|
|
|
if (currentMonth.getValue() >= 7) { |
|
|
|
user.setSumFreeJune(user.getSumFreeJune().add(BigDecimal.valueOf(free))); |
|
|
|
} |
|
|
|
if(currentMonth.getValue() < 7){ |
|
|
|
if (currentMonth.getValue() < 7) { |
|
|
|
user.setSumFreeDecember(user.getSumFreeDecember().add(BigDecimal.valueOf(free))); |
|
|
|
} |
|
|
|
} |
|
|
|
if (validOneTypes.contains(gtype)){ |
|
|
|
if (validOneTypes.contains(gtype)) { |
|
|
|
user.setConsumeNum(user.getConsumeNum() + 1); |
|
|
|
user.setSumConsumePermanent(user.getSumConsumePermanent().add(BigDecimal.valueOf(buy_jb))); |
|
|
|
user.setSumConsumeTask(user.getSumConsumeTask().add(BigDecimal.valueOf(core_jb))); |
|
|
@ -282,10 +303,18 @@ public class MysqlServiceImpl implements MysqlService { |
|
|
|
} |
|
|
|
userService.updateAllGold(user); |
|
|
|
|
|
|
|
} while (resultSet.next()); |
|
|
|
|
|
|
|
// 批量插入 MySQL |
|
|
|
mysqlStmt.executeBatch(); |
|
|
|
logger.info("已成功插入 {} 条数据", pageSize); |
|
|
|
} |
|
|
|
mysqlStmt.executeBatch(); // 批量插入 |
|
|
|
} |
|
|
|
|
|
|
|
// 更新分页参数 |
|
|
|
offset += pageSize; |
|
|
|
} |
|
|
|
|
|
|
|
logger.info("数据同步完成"); |
|
|
|
} catch (SQLException e) { |
|
|
|
logger.error("数据连接失败", e.getMessage()); |
|
|
@ -304,7 +333,7 @@ public class MysqlServiceImpl implements MysqlService { |
|
|
|
|
|
|
|
try ( |
|
|
|
|
|
|
|
Connection sourceConn = mysql1DataSource.getConnection(); |
|
|
|
Connection sourceConn = sqlserver1DataSource.getConnection(); |
|
|
|
Connection targetConn = mysql1DataSource.getConnection() |
|
|
|
) { |
|
|
|
// 关闭自动提交,手动控制事务 |
|
|
|