DtsController.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. package com.kxs.transfer.api.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.aliyun.dts.subscribe.clients.record.DefaultUserRecord;
  4. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  5. import com.kxs.product.api.model.KxsMerchant;
  6. import com.kxs.store.api.model.KxsMachineAdvance;
  7. import com.kxs.store.api.model.KxsMachineApply;
  8. import com.kxs.store.api.model.KxsWarehouseLimitLog;
  9. import com.kxs.store.api.model.KxsWarehouseStockLog;
  10. import com.kxs.system.api.model.KxsSchoolStudy;
  11. import com.kxs.transfer.api.annotation.DtsMsgListener;
  12. import com.kxs.transfer.api.mapper.user.KxsUserByStageMapper;
  13. import com.kxs.transfer.api.model.KxsDtsErrorLog;
  14. import com.kxs.transfer.api.model.KxsDtsLog;
  15. import com.kxs.transfer.api.model.table.DMLData;
  16. import com.kxs.transfer.api.service.KxsDtsErrorLogService;
  17. import com.kxs.transfer.api.service.KxsDtsLogService;
  18. import com.kxs.transfer.api.service.product.*;
  19. import com.kxs.transfer.api.service.product.impl.KxsMachineTrackService;
  20. import com.kxs.transfer.api.service.product.impl.KxsShopOrderService;
  21. import com.kxs.transfer.api.service.stat.*;
  22. import com.kxs.transfer.api.service.store.KxsMachineRecycleService;
  23. import com.kxs.transfer.api.service.store.KxsWarehouseService;
  24. import com.kxs.transfer.api.service.store.impl.*;
  25. import com.kxs.transfer.api.service.sys.*;
  26. import com.kxs.transfer.api.service.user.*;
  27. import com.kxs.transfer.api.service.user.impl.KxsUserPresetBeforeService;
  28. import com.kxs.transfer.api.service.user.impl.KxsUserReRealService;
  29. import com.kxs.user.api.model.KxsLeaderAmountLog;
  30. import com.kxs.user.api.model.KxsPartner;
  31. import com.kxs.user.api.model.KxsUserByStage;
  32. import lombok.RequiredArgsConstructor;
  33. import lombok.extern.slf4j.Slf4j;
  34. import org.apache.commons.lang.exception.ExceptionUtils;
  35. import org.springframework.beans.factory.annotation.Value;
  36. import org.springframework.web.bind.annotation.RestController;
  37. import java.util.List;
  38. /**
  39. * <p>
  40. * DTS控制器
  41. * 在此控制器里做数据分发
  42. * 比如将数据分发到不同的数据源中
  43. * </p>
  44. *
  45. * @author 没秃顶的码农
  46. * @date 2024-01-25
  47. */
  48. @RestController
  49. @Slf4j
  50. @RequiredArgsConstructor
  51. public class DtsController {
  52. private final KxsDtsLogService kxsDtsLogService;
  53. private final KxsDtsErrorLogService kxsDtsErrorLogService;
  54. private final KxsUserService kxsUserService;
  55. private final KxsUserPresetLogService kxsUserPresetLogService;
  56. private final KxsUserAddressService kxsUserAddressService;
  57. private final KxsUserAmountService kxsUserAmountService;
  58. private final KxsUserAdvanceService kxsUserAdvanceService;
  59. private final KxsUserAmountLogService kxsUserAmountLogService;
  60. private final KxsUserWithdrawalService kxsUserWithdrawalService;
  61. private final KxsLeaderService kxsLeaderService;
  62. private final KxsPartnerService kxsPartnerService;
  63. private final KxsMorningService kxsMorningService;
  64. private final KxsSchoolStudyService kxsSchoolStudyService;
  65. private final KxsSysMsgService kxsSysMsgService;
  66. private final KxsBankChangeLogService kxsBankChangeLogService;
  67. private final KxsUserByStageService kxsUserByStageService;
  68. private final KxsLeaderAmountLogService kxsLeaderAmountLogService;
  69. private final KxsLeaderAccountLogService kxsLeaderAccountLogService;
  70. private final KxsUserReRealService kxsUserReRealService;
  71. private final KxsUserPresetBeforeService kxsUserPresetBeforeService;
  72. private final KxsMachineService kxsMachineService;
  73. //产品模块
  74. private final KxsShopGoodsService kxsShopGoodsService;
  75. private final KxsMachinePledgeService kxsMachinePledgeService;
  76. private final KxsMachineRatioService kxsMachineRatioService;
  77. private final KxsTicketService kxsTicketService;
  78. private final KxsTicketTransferService kxsTicketTransferService;
  79. private final KxsMerchantService kxsMerchantService;
  80. private final KxsMachineTransferService kxsMachineTransferService;
  81. private final KxsMachineTrackService kxsMachineTrackService;
  82. private final KxsShopOrderService kxsShopOrderService;
  83. //仓库模块
  84. private final KxsWarehouseService kxsWarehouseService;
  85. private final KxsMachineRecycleService kxsMachineRecycleService;
  86. private final KxsMachineApplyService kxsMachineApplyService;
  87. private final KxsMachineAdvanceService kxsMachineAdvanceService;
  88. private final KxsWarehouseMachineApplyService kxsWarehouseMachineApplyService;
  89. private final KxsWarehouseStockLogService kxsWarehouseStockLogService;
  90. private final KxsWarehouseLimitLogService kxsWarehouseLimitLogService;
  91. private final KxsActTotalService kxsActTotalService;
  92. //统计模块
  93. private final KxsUserTradeService kxsUserTradeService;
  94. private final KxsUserTradeBeforeService kxsUserTradeBeforeService;
  95. private final KxsUserTradeAfterService kxsUserTradeAfterService;
  96. private final KxsUserActTradeService kxsUserActTradeService;
  97. private final KxsMerchantTradeService kxsMerchantTradeService;
  98. private final KxsUserLogoutTradeService kxsUserLogoutTradeService;
  99. private final KxsUserGdTradeService kxsUserGdTradeService;
  100. private final KxsZlbTradeService kxsZlbTradeService;
  101. private final KxsUserNewTradeService kxsUserNewTradeService;
  102. private final KxsBannerService kxsBannerService;
  103. private final KxsColService kxsColService;
  104. @Value("${spring.profiles.active}")
  105. private String active;
  106. @DtsMsgListener
  107. public void dtsListener(Long dataId, DMLData dmlData, DefaultUserRecord record) {
  108. try {
  109. //过滤无效数据
  110. if ("Users".equals(dmlData.getTableName())) {
  111. List<String> changeFieldList = dmlData.getChangeFieldList();
  112. //过滤Users老表记录登陆设备的信息日志
  113. if (changeFieldList.size() == 2 && changeFieldList.contains("DeviceId") && changeFieldList.contains("DeviceType")) {
  114. record.commit(String.valueOf(record.getSourceTimestamp()));
  115. return;
  116. }
  117. if (changeFieldList.size() == 1 && changeFieldList.contains("DeviceId")) {
  118. // 如果changeFieldList的大小为1,且changeFieldList包含DeviceId,则提交记录
  119. record.commit(String.valueOf(record.getSourceTimestamp()));
  120. return;
  121. }
  122. //过滤Users库存更新字段
  123. if (changeFieldList.size() == 1 && changeFieldList.contains("StoreStock")) {
  124. record.commit(String.valueOf(record.getSourceTimestamp()));
  125. return;
  126. }
  127. }
  128. //去重数据
  129. KxsDtsLog dtsLog = kxsDtsLogService.getOne(Wrappers.<KxsDtsLog>lambdaQuery().eq(KxsDtsLog::getDataId, dataId));
  130. if (dtsLog != null) {
  131. // log.info("dts的数据重复:{},dataID:{}", dmlData.getValidFieldDataMap(), dataId);
  132. record.commit(String.valueOf(record.getSourceTimestamp()));
  133. return;
  134. }
  135. // if (!"UserMoveInfo".equals(dmlData.getTableName())) {
  136. // log.info("开始消费:{}表的数据,dataID:{}, 表名:{}", dmlData.getTableName(), dataId, dmlData.getDatabaseName());
  137. // }
  138. //用户表
  139. if ("Users".equals(dmlData.getTableName())) {
  140. kxsUserService.changeUser(dmlData);
  141. }
  142. //用户预设职级表
  143. if ("UserRankWhite".equals(dmlData.getTableName())) {
  144. kxsUserPresetLogService.changeUser(dmlData);
  145. }
  146. //用户存量预设
  147. if ("UserRankWhiteBefore".equals(dmlData.getTableName())) {
  148. kxsUserPresetBeforeService.changeData(dmlData);
  149. }
  150. //密码操作
  151. if ("UserMoveInfo".equals(dmlData.getTableName())) {
  152. kxsUserService.changeUserPwd(dmlData);
  153. //密码操作不存储原始数据
  154. record.commit(String.valueOf(record.getSourceTimestamp()));
  155. return;
  156. }
  157. //用户地址表
  158. if ("UserAddress".equals(dmlData.getTableName())) {
  159. kxsUserAddressService.changeData(dmlData);
  160. }
  161. //用户账户
  162. if ("UserAccount".equals(dmlData.getTableName()) && ("dev".equals(active) || "test".equals(active) ? "KxsMainServer":"KxsProfitServer").equals(dmlData.getDatabaseName())) {
  163. kxsUserAmountService.changeData(dmlData);
  164. }
  165. //用户预扣款表
  166. if ("ToChargeBackRecord".equals(dmlData.getTableName())) {
  167. kxsUserAdvanceService.changeData(dmlData);
  168. }
  169. //用户账户余额日志
  170. if ("UserAccountRecord".equals(dmlData.getTableName())) {
  171. kxsUserAmountLogService.changeData(dmlData);
  172. }
  173. //用户提现申请记录
  174. if ("UserCashRecord".equals(dmlData.getTableName()) && ("dev".equals(active) || "test".equals(active) ? "KxsMainServer":"KxsProfitServer").equals(dmlData.getDatabaseName())) {
  175. kxsUserWithdrawalService.changeData(dmlData);
  176. }
  177. //盟主表
  178. if ("Leaders".equals(dmlData.getTableName())) {
  179. kxsLeaderService.changeData(dmlData);
  180. }
  181. //盟主金额变动记录表
  182. if ("LeaderReserveRecord".equals(dmlData.getTableName())) {
  183. kxsLeaderAmountLogService.changeData(dmlData);
  184. //盟主运营中心合并的新表,此表只同步盟主储蓄金
  185. kxsLeaderAccountLogService.changeData(dmlData);
  186. }
  187. //盟主可提现金额变动记录表
  188. if ("LeaderAccountRecord".equals(dmlData.getTableName())) {
  189. kxsLeaderAccountLogService.change2Data(dmlData);
  190. }
  191. //合伙人表
  192. if ("OperatorRankWhite".equals(dmlData.getTableName())) {
  193. kxsPartnerService.changeData(dmlData);
  194. //盟主表
  195. kxsLeaderService.changeLeaderData(dmlData);
  196. }
  197. //合伙人账户 -> 合伙人表
  198. if ("UserAccount".equals(dmlData.getTableName()) && "KxsOpServer".equals(dmlData.getDatabaseName())) {
  199. kxsPartnerService.changeAccountData(dmlData);
  200. kxsLeaderService.changeAccountData(dmlData);
  201. }
  202. //合伙人账户余额变动记录表
  203. if ("AmountRecordNew".equals(dmlData.getTableName()) && "KxsOpServer".equals(dmlData.getDatabaseName())) {
  204. kxsPartnerService.changeAccountLogData(dmlData);
  205. //盟主金额变动记录
  206. kxsLeaderAccountLogService.changePartnerData(dmlData);
  207. }
  208. //用户结算卡变更记录
  209. if ("SettlementCardChangeRecord".equals(dmlData.getTableName())) {
  210. kxsBankChangeLogService.changeData(dmlData);
  211. }
  212. //分期表数据同步
  213. if ("ToChargeByStage".equals(dmlData.getTableName())) {
  214. kxsUserByStageService.changeData(dmlData);
  215. }
  216. //分期期数表数据同步
  217. if ("ToChargeBackRecordSub".equals(dmlData.getTableName())) {
  218. kxsUserByStageService.changeInfoData(dmlData);
  219. }
  220. //创客重新实名开放表
  221. if ("UserSetUnAuthRecord".equals(dmlData.getTableName())) {
  222. kxsUserReRealService.changeData(dmlData);
  223. }
  224. //商品表同步
  225. if ("Products".equals(dmlData.getTableName())) {
  226. kxsShopGoodsService.changeData(dmlData);
  227. }
  228. //商品订单同步
  229. if ("Orders".equals(dmlData.getTableName())) {
  230. kxsShopOrderService.changeData(dmlData);
  231. }
  232. //商品订单详情
  233. if ("OrderProduct".equals(dmlData.getTableName())) {
  234. kxsShopOrderService.changeInfoData(dmlData);
  235. }
  236. //每日晨会同步
  237. if ("SchoolMorningMeet".equals(dmlData.getTableName())) {
  238. kxsMorningService.changeData(dmlData);
  239. }
  240. if ("SchoolMorningMeetLog".equals(dmlData.getTableName())) {
  241. kxsMorningService.changeLogData(dmlData);
  242. }
  243. //创客学堂
  244. if ("SchoolMakerStudy".equals(dmlData.getTableName())) {
  245. kxsSchoolStudyService.changeData(dmlData);
  246. }
  247. //机具表
  248. if ("PosMachinesTwo".equals(dmlData.getTableName())) {
  249. kxsMachineService.changeData(dmlData);
  250. }
  251. //未绑定划拨记录表
  252. if ("UserStoreChange".equals(dmlData.getTableName())) {
  253. kxsMachineTransferService.changeData(dmlData);
  254. }
  255. //机具轨迹记录表
  256. if ("StoreChangeHistory".equals(dmlData.getTableName())) {
  257. kxsMachineTrackService.changeData(dmlData);
  258. }
  259. //商户表
  260. if ("PosMerchantInfo".equals(dmlData.getTableName())) {
  261. kxsMerchantService.changeData(dmlData);
  262. }
  263. //机具回收表
  264. if ("RecycMachineOrder".equals(dmlData.getTableName())) {
  265. kxsMachineRecycleService.changeData(dmlData);
  266. }
  267. if ("RecycMachineOrderPos".equals(dmlData.getTableName())) {
  268. kxsMachineRecycleService.changeInfoData(dmlData);
  269. }
  270. //机具押金调整记录
  271. if ("MerchantDepositSet".equals(dmlData.getTableName())) {
  272. kxsMachinePledgeService.changeData(dmlData);
  273. }
  274. //机具费率调整记录
  275. if ("PosMachinesFeeChangeRecord".equals(dmlData.getTableName())) {
  276. kxsMachineRatioService.changeData(dmlData);
  277. }
  278. //券码表同步
  279. if ("PosCoupons".equals(dmlData.getTableName())) {
  280. kxsTicketService.changeData(dmlData);
  281. }
  282. //券码划拨表同步
  283. if ("PosCouponOrders".equals(dmlData.getTableName())) {
  284. kxsTicketTransferService.changeData(dmlData);
  285. }
  286. //券码划拨记录表同步
  287. if ("PosCouponRecord".equals(dmlData.getTableName())) {
  288. kxsTicketTransferService.changeInfoData(dmlData);
  289. }
  290. //仓库表
  291. if ("StoreHouse".equals(dmlData.getTableName())) {
  292. kxsWarehouseService.changeData(dmlData);
  293. }
  294. //机具申请订单表
  295. if ("MachineApply".equals(dmlData.getTableName())) {
  296. kxsMachineApplyService.changeData(dmlData);
  297. }
  298. //仓库预发机
  299. if ("PreSendStockDetail".equals(dmlData.getTableName())) {
  300. kxsMachineAdvanceService.changeData(dmlData);
  301. }
  302. //分仓机具申请表
  303. if ("StoreMachineApply".equals(dmlData.getTableName())) {
  304. kxsWarehouseMachineApplyService.changeData(dmlData);
  305. }
  306. //仓库担保记录
  307. if ("StoreHouseAmountPromiss".equals(dmlData.getTableName())) {
  308. kxsWarehouseService.changeCreditData(dmlData);
  309. }
  310. //仓库库存变动记录表
  311. if ("StoreBalance".equals(dmlData.getTableName())) {
  312. kxsWarehouseStockLogService.changeData(dmlData);
  313. }
  314. //仓库额度变动记录表
  315. if ("StoreHouseAmountRecord".equals(dmlData.getTableName())) {
  316. kxsWarehouseLimitLogService.changeData(dmlData);
  317. }
  318. //小分仓额度变动记录表
  319. if ("PreAmountRecord".equals(dmlData.getTableName())) {
  320. kxsWarehouseLimitLogService.changeSmallData(dmlData);
  321. }
  322. //仓库激活统计表
  323. if ("StoreSnActivateSummary".equals(dmlData.getTableName())) {
  324. kxsActTotalService.changeData(dmlData);
  325. }
  326. //仓库额度表
  327. if ("UserAccount".equals(dmlData.getTableName()) && ("dev".equals(active) || "test".equals(active) ? "KxsMainServer":"KxsProfitServer").equals(dmlData.getDatabaseName())) {
  328. kxsWarehouseService.changeAccountData(dmlData);
  329. }
  330. //小分仓库额度表
  331. if ("UserAccount".equals(dmlData.getTableName()) && ("dev".equals(active) || "test".equals(active) ? "KxsMainServer":"KxsProfitServer").equals(dmlData.getDatabaseName())) {
  332. kxsWarehouseService.changeAccountMinData(dmlData);
  333. }
  334. //广告分类
  335. if ("Col".equals(dmlData.getTableName()) && "KxsBsServer".equals(dmlData.getDatabaseName())) {
  336. kxsColService.changeData(dmlData);
  337. }
  338. if ("Advertisment".equals(dmlData.getTableName()) && "KxsBsServer".equals(dmlData.getDatabaseName())) {
  339. kxsBannerService.changeData(dmlData);
  340. }
  341. //创客消息表
  342. if ("MsgPersonal".equals(dmlData.getTableName())) {
  343. kxsSysMsgService.changeUserData(dmlData);
  344. }
  345. //系统消息表
  346. if ("MsgPlacard".equals(dmlData.getTableName())) {
  347. kxsSysMsgService.changeSysData(dmlData);
  348. }
  349. if ("MsgPlacardRead".equals(dmlData.getTableName())) {
  350. kxsSysMsgService.changeSysReadData(dmlData);
  351. }
  352. //系统弹窗表
  353. if ("MsgAlert".equals(dmlData.getTableName())) {
  354. kxsSysMsgService.changeModalData(dmlData);
  355. }
  356. //创客交易额统计表
  357. if ("TradeDaySummary".equals(dmlData.getTableName())) {
  358. kxsUserTradeService.changeData(dmlData);
  359. }
  360. if ("TradeDaySummary2".equals(dmlData.getTableName())) {
  361. kxsUserTradeService.change2Data(dmlData);
  362. }
  363. //存量
  364. if ("TradeDaySummaryBefore".equals(dmlData.getTableName())) {
  365. kxsUserTradeBeforeService.changeData(dmlData);
  366. }
  367. if ("TradeDaySummary2Before".equals(dmlData.getTableName())) {
  368. kxsUserTradeBeforeService.change2Data(dmlData);
  369. }
  370. //增量
  371. if ("TradeDaySummaryAfter".equals(dmlData.getTableName())) {
  372. kxsUserTradeAfterService.changeData(dmlData);
  373. }
  374. if ("TradeDaySummary2After".equals(dmlData.getTableName())) {
  375. kxsUserTradeAfterService.change2Data(dmlData);
  376. }
  377. //创客激活统计
  378. if ("UserTradeMonthSummary".equals(dmlData.getTableName())) {
  379. kxsUserActTradeService.changeData(dmlData);
  380. }
  381. //商户交易额统计
  382. if ("PosMerchantTradeSummay".equals(dmlData.getTableName())) {
  383. kxsMerchantTradeService.changeData(dmlData);
  384. }
  385. //广电注销统计表
  386. if ("UserSimActSummary".equals(dmlData.getTableName())) {
  387. kxsUserLogoutTradeService.changeData(dmlData);
  388. }
  389. //广电话费统计表
  390. if ("SimCardDaySummary".equals(dmlData.getTableName())) {
  391. kxsUserGdTradeService.changeData(dmlData);
  392. }
  393. //助力宝统计
  394. if ("HelpProfitUserTradeSummay".equals(dmlData.getTableName())) {
  395. kxsZlbTradeService.changeData(dmlData);
  396. }
  397. //创客新增统计表
  398. if ("PullnewSummary".equals(dmlData.getTableName())) {
  399. kxsUserNewTradeService.changeData(dmlData);
  400. }
  401. //存储历史数据
  402. KxsDtsLog kxsDtsLog = new KxsDtsLog();
  403. kxsDtsLog.setDataId(dataId);
  404. // kxsDtsLog.setContent(JSON.toJSONString(dmlData));
  405. kxsDtsLog.setTableName(dmlData.getTableName());
  406. kxsDtsLog.setOperation(dmlData.getOperation().toString());
  407. kxsDtsLogService.save(kxsDtsLog);
  408. //删除错误记录,不管有没有都删除,因为很快
  409. // kxsDtsErrorLogService.removeById(dataId);
  410. record.commit(String.valueOf(record.getSourceTimestamp()));
  411. } catch (Exception e) {
  412. //详细错误信息
  413. String fullStackTrace = ExceptionUtils.getFullStackTrace(e);
  414. //存储错误数据
  415. KxsDtsErrorLog kxsDtsLog = new KxsDtsErrorLog();
  416. kxsDtsLog.setId(dataId);
  417. kxsDtsLog.setContent(JSON.toJSONString(dmlData));
  418. kxsDtsLog.setTableName(dmlData.getTableName());
  419. kxsDtsLog.setOperation(dmlData.getOperation().toString());
  420. kxsDtsLog.setErrorStr(fullStackTrace);
  421. kxsDtsErrorLogService.save(kxsDtsLog);
  422. record.commit(String.valueOf(record.getSourceTimestamp()));
  423. log.error(fullStackTrace);
  424. }
  425. }
  426. }