|
|
package com.example.demo.Mysql;
import com.example.demo.Util.BaseDES; import com.example.demo.domain.entity.User; import com.example.demo.service.AdminService; import com.example.demo.service.UserService; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.security.SecurityProperties; import org.springframework.http.*; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate;
import javax.sql.DataSource; import java.sql.*; import java.time.LocalDateTime; import java.time.Month; import java.time.format.DateTimeFormatter; import java.util.*;
@Service @Transactional public class MysqlServiceImpl implements MysqlService { @Autowired private RestTemplate restTemplate;
Set<Integer> validZeroTypes = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, 24, 26, 28, 29, 35, 36, 40, 45, 46, 47, 48, 49, 53, 54, 60)); Set<Integer> validOneTypes = new HashSet<>(Arrays.asList(9, 15, 17, 25, 27, 37, 41, 42, 43, 50, 51, 62)); Set<Integer> validTwoTypes = new HashSet<>(Arrays.asList(52,61)); Set<Integer> validThreeTypes = new HashSet<>(Arrays.asList(10, 16, 30, 31, 32, 33, 34, 39, 44)); Set<Integer> validFourTypes = new HashSet<>(Arrays.asList(55, 56, 57, 58, 59, 63, 64, 65)); LocalDateTime now = LocalDateTime.now(); Month currentMonth = now.getMonth(); @Autowired private AdminService adminService; @Autowired private UserService userService;
@Autowired @Qualifier("sqlserver1DataSource") private DataSource sqlserver1DataSource;
@Autowired @Qualifier("mysql1DataSource") private DataSource mysql1DataSource;
private static final Logger logger = LoggerFactory.getLogger(MysqlServiceImpl.class);
@Override @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次
public void getSqlserverData() throws Exception { logger.info("开始从 SQL Server 同步数据到 MySQL"); 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) 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
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); }
mysqlStmt.setInt(2, jwcode); mysqlStmt.setInt(3, free+core_jb+buy_jb); mysqlStmt.setInt(4,buy_jb); // 判断月份
if(currentMonth.getValue() >= 7){ mysqlStmt.setInt(5, free); mysqlStmt.setInt(6, 0); } if(currentMonth.getValue() < 7){ mysqlStmt.setInt(5, 0); mysqlStmt.setInt(6, free); } mysqlStmt.setInt(7, core_jb); if (operation_platform.equals("1")){ mysqlStmt.setString(8, "ERP"); } if (operation_platform.equals("2")){ mysqlStmt.setString(8, "HomilyLink"); } if(operation_platform.equals("3")){ mysqlStmt.setString(8, "HomilyChart"); } if(operation_platform.equals("4")){ continue; }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("测试")){ mysqlStmt.setInt(17, 0); }else { mysqlStmt.setInt(17, 1); }
// 更新时的值
mysqlStmt.addBatch(); logger.info("查询用户是否存在"); User user = userService.selectAllUser(String.valueOf(jwcode)); if(ObjectUtils.isEmpty(user)){ logger.info("用户不存在"); user = new User(); String country = "未知"; BaseDES des = new BaseDES(); String desjwcode= des.encrypt(String.valueOf(jwcode)); System.out.println("desjwcode:"+desjwcode);
// 创建 JSON 请求体
Map<String, String> requestBody = new HashMap<>(); requestBody.put("jwcode", desjwcode);
// 设置请求头
HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON);
// 创建 HttpEntity
HttpEntity<Map<String, String>> entity = new HttpEntity<>(requestBody, headers);
// 发送 POST 请求
try { ResponseEntity<Map> response = restTemplate.exchange( "http://hwapi.rzfwq.com/hwjnApp/hwhc-login/hwhclogin/hc/login/clent/info", HttpMethod.POST, entity, Map.class);
// 检查响应状态码
if (response.getStatusCode().is2xxSuccessful()) { Map<String, Object> responseBody = response.getBody(); if (responseBody != null) { // 获取data部分
Map<String, Object> data = (Map<String, Object>) responseBody.get("data"); if (data != null) { // 提取name和country
name = (String) data.get("name"); country = (String) data.get("country");
// 打印获取到的数据
System.out.println("Name: " + name); System.out.println("Country: " + country); } else { System.out.println("Data is null"); } } else { System.out.println("Response body is null"); } } else { System.out.println("Request failed with status code: " + response.getStatusCode()); } } catch (Exception e) { System.out.println("Error: " + e.getMessage()); // 设置默认的 country 值
country = "未知"; }
user.setJwcode(jwcode); user.setName( name); user.setMarket(country); logger.info("新添用户"); userService.addUser(user); logger.info("用户添加成功"); user = userService.selectAllUser(String.valueOf(jwcode)); }
if(currentMonth.getValue() >= 7){ user.setCurrentFreeJune(user.getCurrentFreeJune()+free); } if(currentMonth.getValue() <7){ user.setCurrentFreeDecember(user.getCurrentFreeDecember()+free); }
user.setCurrentPermanentGold(user.getCurrentPermanentGold()+buy_jb); user.setCurrentTaskGold(user.getCurrentTaskGold()+core_jb); if(validZeroTypes.contains(gtype)) { user.setRechargeNum(user.getRechargeNum() + 1); user.setSumPermanentGold(user.getSumPermanentGold()+buy_jb); user.setSumTaskGold(user.getSumTaskGold()+core_jb); if(currentMonth.getValue() >= 7){ user.setSumFreeJune(user.getSumFreeJune()+free); } if(currentMonth.getValue() < 7){ user.setSumFreeDecember(user.getSumFreeDecember()+free); } } if (validOneTypes.contains(gtype)){ user.setConsumeNum(user.getConsumeNum() + 1); user.setSumConsumePermanent(user.getSumConsumePermanent() + buy_jb); user.setSumConsumeTask(user.getSumConsumeTask() + core_jb); user.setSumConsumeFree(user.getSumConsumeFree() + free); } userService.updateAllGold(user);
} mysqlStmt.executeBatch(); // 批量插入
} } logger.info("数据同步完成"); } catch (SQLException e) { logger.error("数据连接失败", e.getMessage()); throw new RuntimeException("数据链接失败", e); } } }
|