From 2e115a96c3e556057886ec6d9487f6981de611f8 Mon Sep 17 00:00:00 2001 From: llllon Date: Tue, 23 Sep 2025 11:58:00 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=97=B6=E9=97=B4=E8=8C=83=E5=9B=B4?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DataLinkUpController.class | Bin 21076 -> 21118 bytes .../impl/PurchaseDataSyncServiceImpl.class | Bin 33727 -> 33927 bytes .../impl/SaleDataSyncServiceImpl.class | Bin 39881 -> 40391 bytes .../compileJava/previous-compilation-data.bin | Bin 9392601 -> 9392601 bytes .../controller/DataLinkUpController.java | 13 +++- .../datalinkup/job/PurchaseDataLinkUpJob.java | 5 ++ .../impl/ProductionDataSyncServiceImpl.java | 36 ++++----- .../impl/PurchaseDataSyncServiceImpl.java | 53 +++++++------ .../service/impl/SaleDataSyncServiceImpl.java | 72 ++++++++++-------- 9 files changed, 100 insertions(+), 79 deletions(-) diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/controller/DataLinkUpController.class b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/controller/DataLinkUpController.class index 6d9a74970c96e44a92ef73447059c9dad535e90c..cf8007065d03af3b2872973772c47b44163eeb4f 100644 GIT binary patch delta 930 zcmZXSZ%oxy7{|Zg^PCG8xL4@MrOWTez0_q0S0xaT3Y`g(AfQ4Nc5TbCVki#(;^rFd zzR)*XYi?)0a7#BgCzIJEZ!vLE)0{OlbwTQ;FM3z9Wx@+9huHBpH#g6Vb3Xf?^L@_q zJbNaObM82Y8)ZQjYgL_B)jP;k4Vm1k-g1z|KCf!@swS^moyAS6*?~_rBzMS(CHsR;4lJix|>VVbw@FghC#gWj4+voGZ5!j^G9=g^afB{;+A;E;E9Xt?}%$R zqvI@Y)|A>eu6qu*%=;}X@=`%kQC+{A;YObXo;1TPpVBeQT8naYP=}C!#_s@!(3{-W z8e`&5eyQeoT73LU3VBAN{94NSjZ||)R&Z1{@SODUTN&V(e9rIW3ws{3`XDdJDgGcM zyeQ+mB)9pK+~c@B;$`h{TnBkwhj>L7@Mm4YtGdpft9VUsu?tId~ke9t^fQ8|VBl%q&N1-Z_8Ln_RNdL8G@R>~TT?XOc zkS*&aYtF?{IZxM80E2RtotE-2ET_5N(u)|C6O332;({DuzNLIzlEZw@l8b(s#;h$Q z`^hliE~a3Y-p6Wt%ak^a#0*qQTw+CmM<-ZglhFw49z4L`NVC~~#5m_89mTeTB`k#( zRl1!qF0hkUtDCuyi;#(WUC%PUiY%3%x!At*V~5UVltq}QdlBO6_K$3v z1Bz`G>i-7vji(JH5vJHl*^lsJ^dsABY>OFb8}-hjQ2QSuFFDqBfc}--0;*N1z2!e7 CDcT?a delta 865 zcmZWnOH7nk6#l+@E-=7Q$vo5_1!V}#Af5U^Q7184z#=dTBUYUa$)q)r7_17Krio6} z#DyA-`E_OOqA|K@l{(RaNqxomj+pqUE1PtKHYo~=YLihsj_Im*anG0UobTN8xbIH# z(Mb-p$SjZf+=n95RK(4u*@t5G7BgnP@R$~lS>Z9Q#oTDxeDIp4%vQNs<}Rs-`bWJc zWnOyC3-iij#=K_S{GIu>BH{P@`nLD>rndEbx1sB+Z?Tj(s73HFdye2zDKUKCqj>bSl9{Y z{f4}xI3-<4>lAhk;z>h9V;tuqes_1YFAF}+$7uu{P2!X|g-$4!$GzKrfKhi{ysA{P zGJ!NKMgabZjhX%NTBgVNvsj*y0uD%kzlg(gQqA+SlouqBTg-m>Iv8{{2ZqqdHBZ8N)V8}Hi=4%-wT;JFs@ zJ!;+9s>*aFS8*Xi5=V@2j3X>5RC6WXA|gxC!WqidNC1}^R1}gUXv`_9447qyYRgPH z|6nEl#dH(pFy1ICH!FFTovNrXYk7(ZuEq?rnTOb=ikX&Z;yl))ERDT#m1~qN#X%Y5 zmz)A0j%j<-RP4tOa*B?k08YyZu2mGofE?vIMUyck2UwwK3a-f>PE|A&H)I#rD{{~; zPmt9{CVkjAUf?h2u|1rxUgo$lq{m@$2IXfYP$HjaPr8u?mnE0e520jhP9 zVMgFVy=`DEXX$r}+1ae)rzk?B4KvEmP>fbPle0MoUL9MlvIv`&rV+O`utxyW8Ibvd_ux diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/service/impl/PurchaseDataSyncServiceImpl.class b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/service/impl/PurchaseDataSyncServiceImpl.class index 1b651f6713a34e341272f2371bea0fc337ce80cf..a57c9c1fabf069ee5ad9879b3080298932bcef71 100644 GIT binary patch delta 10519 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 literal 39881 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 diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/tmp/compileJava/previous-compilation-data.bin b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/tmp/compileJava/previous-compilation-data.bin index edabc98f6a8e617029c38a5acf22ce7d3b836af9..b873c06981c73c0163f12c34f4f45e766a2c22ea 100644 GIT binary patch delta 664 zcmWl~SyK!E003aSg$TP6i%^kcg+#86M8^`zog?Imb(Sk7=Sp(M&X_S64?TJ?W5#%4 z3{O1aiKaKk3xC4r;hV3o_g#7)J;~6=SFgYS98etjP#fy(|DE~ZVN>|&->k14pXy_& zlC=2C7dbttj6gCR`SCfsq5E63^?6Hg^v|QmsV9N=q5ksfaA9fQvv}^8vbV8c$waU# z5e)GEG}0N!AO@4c5QdV;ForXN5Mf4=#VE2F%@`t#WgO$lVFDAGL@s&cGnpwAFqLUc zX9iJbQphZ3GlwGPQp`N&Q^EokvWUejAx0@nSwW_xki%fbaI0(Zqm&yZgYpb+`=9wB>0k{@L$N@E;c%rMQE;lP1$ zFs3UPx27@NnhySej(iT^d_AweM0#ioVkOUher}KCeeW%ZmUaE=Ykyi1?|fI7{^9xi zH(A+jL0@P0w~n+>5Pw-zUjOG~e{LdK+S;A-_jkvO(AQYz>#E8h(XNL6mbyeT@-|3? zn^WNs{~thvfed0WX$)Z~=?o)E1~K9cX9Ob|#c0MbmT`<{0uz};CX<=MRHiYV8O&rB zvzfzO63k;hSu9{7*(_o)OIS({%UI3|R9Hf*o4snH?&QirW&U1lkE^>*> uT;VF$xK0hV)NzBG)N_jlZqvve0`78;CYrg=10M2-7Fv1yDHVQFUHlIe&fH@F diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/controller/DataLinkUpController.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/controller/DataLinkUpController.java index bf947e6..335192f 100644 --- a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/controller/DataLinkUpController.java +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/controller/DataLinkUpController.java @@ -425,7 +425,11 @@ public class DataLinkUpController { // 根据时间范围增加数据分页查询数据存储到BO_EU_BNBM_DATALINKUP_XS_XSL_HZ // 全量分页迁移数据到汇总表 long summarizeStartTime = System.currentTimeMillis(); - dataSyncService.summarizeScopeData(targetTable, null, null, null, hzb); + if (tablename.equals("应收表")){ + dataSyncService.summarizeScopeDataYs(targetTable, null, null, null, hzb); + }else { + dataSyncService.summarizeScopeData(targetTable, null, null, null, hzb); + } LOGGER.info("全量数据汇总完成,耗时:{}ms", System.currentTimeMillis() - summarizeStartTime); } else { // 获取目标表时间字段名 @@ -448,6 +452,13 @@ public class DataLinkUpController { dataSyncService.summarizeScopeDataYs(targetTable, startDate, endDate, targetTimeField, hzb); }else { dataSyncService.summarizeScopeData(targetTable, startDate, endDate, targetTimeField, hzb); + if (hzb.equals("BO_EU_DWD_ORDER_RKD_HZ")){ + int update = DBSql.update("UPDATE BO_EU_DWD_ORDER_RKD_HZ rkd " + + " JOIN BO_EU_ZZDYQY zzd ON rkd.BKGS = zzd.BKGS AND rkd.KCZZ = zzd.XSZZ " + + " SET rkd.QYGS = zzd.QYGS " + + " WHERE rkd.QYGS IS NULL"); + LOGGER.info("更新入库单区域公司条数:{}",update); + } } LOGGER.info("范围数据汇总完成,耗时:{}ms", System.currentTimeMillis() - summarizeStartTime); } diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/PurchaseDataLinkUpJob.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/PurchaseDataLinkUpJob.java index b9cb1b2..1ad4f0e 100644 --- a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/PurchaseDataLinkUpJob.java +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/PurchaseDataLinkUpJob.java @@ -44,6 +44,11 @@ public class PurchaseDataLinkUpJob implements IJob { // 汇总各板块数据 LOGGER.info("======== 开始执行销售汇总各板块数据 ========"); syncService.sumBkTable(mainConfigs); + int update = DBSql.update("UPDATE BO_EU_DWD_ORDER_RKD_HZ rkd " + + " JOIN BO_EU_ZZDYQY zzd ON rkd.BKGS = zzd.BKGS AND rkd.KCZZ = zzd.XSZZ " + + " SET rkd.QYGS = zzd.QYGS " + + " WHERE rkd.QYGS IS NULL"); + LOGGER.info("更新入库单区域公司条数:{}",update); LOGGER.info("======== 销售汇总各板块数据执行完成 ========"); //计算汇总维度 diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/ProductionDataSyncServiceImpl.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/ProductionDataSyncServiceImpl.java index ab83d93..b7328f5 100644 --- a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/ProductionDataSyncServiceImpl.java +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/ProductionDataSyncServiceImpl.java @@ -167,10 +167,13 @@ public class ProductionDataSyncServiceImpl implements DataSyncService { Date startDate, Date endDate) { try { String deleteSql = "DELETE FROM " + targetTable + - " WHERE " + targetTimeField + " BETWEEN ? AND ?"; - int deletedCount = DBSql.update(deleteSql, new Object[]{startDate, endDate}); - LOGGER.info("已删除目标表[{}]中{}条数据(时间范围: {} - {})", - targetTable, deletedCount, startDate, endDate); + " WHERE " + targetTimeField + " >= ? "; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String startDateStr = simpleDateFormat.format(startDate)+" 00:00:00"; + String endDateStr = simpleDateFormat.format(endDate)+" 23:59:59"; + int deletedCount = DBSql.update(deleteSql, new Object[]{startDateStr}); + LOGGER.info("已删除目标表[{}]中{}条数据(时间范围: {} )", + targetTable, deletedCount, startDateStr); } catch (Exception e) { throw new RuntimeException("删除目标表数据失败: " + e.getMessage(), e); } @@ -270,8 +273,8 @@ public class ProductionDataSyncServiceImpl implements DataSyncService { for (int i = 0; i < timeRanges.size(); i++) { Date[] range = timeRanges.get(i); - String startDate = simpleDateFormat2.format(range[0]); - String endDate = simpleDateFormat2.format(range[1]); + String startDate = simpleDateFormat2.format(range[0])+" 00:00:00"; + String endDate = simpleDateFormat2.format(range[1])+" 23:59:59"; LOGGER.info("正在处理第 {} 个时间区间: {} 至 {}", i + 1, startDate, endDate); if ("ORACLE".equalsIgnoreCase(DBname)) { @@ -590,11 +593,6 @@ public class ProductionDataSyncServiceImpl implements DataSyncService { String sourceField = mapping.getString("TBBZD"); String targetField = mapping.getString("LDBZD"); -// if (!source.containsKey(sourceField)) { -// LOGGER.debug("源字段[{}]不存在于查询结果中", sourceField); -// continue; -// } - String operationExpr = mapping.getString("TBBZDJSLJ"); if (StringUtils.isNotBlank(operationExpr)) { // 解析运算表达式 (格式: [运算符][数字]) @@ -743,10 +741,12 @@ public class ProductionDataSyncServiceImpl implements DataSyncService { } // 按时间范围删除 String deleteSql = "DELETE FROM " + hzb + - " WHERE BKGS = '"+bkgs+"' AND " + targetTimeField + " BETWEEN ? AND ?"; - int deletedCount = DBSql.update(deleteSql, new Object[]{startDate, endDate}); - LOGGER.info("已删除目标表[{}]中{}条数据(时间范围: {} - {})", - hzb,deletedCount, startDate, endDate); + " WHERE BKGS = '"+bkgs+"' AND " + targetTimeField + " >= ? "; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String startDateStr = simpleDateFormat.format(startDate)+" 00:00:00"; + int deletedCount = DBSql.update(deleteSql, new Object[]{startDate}); + LOGGER.info("已删除目标表[{}]中{}条数据(时间范围: {} )", + hzb,deletedCount, startDate); // 根据时间范围增加数据分页查询数据存储到BO_EU_BNBM_DATALINKUP_XS_XSL_HZ // 按时间范围分页迁移数据到汇总表 @@ -783,10 +783,10 @@ public class ProductionDataSyncServiceImpl implements DataSyncService { " ORDER BY ID LIMIT " + PAGE_SIZE + " OFFSET " + (pageNo - 1) * PAGE_SIZE; pageData = DBSql.getMaps(pageSql); } else { - startDate = simpleDateFormat.format(startDated); - endDate = simpleDateFormat.format(endDated); + startDate = simpleDateFormat.format(startDated)+" 00:00:00"; + endDate = simpleDateFormat.format(endDated)+" 23:59:59"; pageSql = "SELECT * FROM " + targetTable + - " WHERE " + targetTimeField + " BETWEEN '" + startDate + "' AND '" + endDate + "' " + + " WHERE " + targetTimeField + " >= '" + startDate + "' " + " ORDER BY ID LIMIT " + PAGE_SIZE + " OFFSET " + (pageNo - 1) * PAGE_SIZE; LOGGER.info("执行查询的sql:{}", pageSql); pageData = DBSql.getMaps(pageSql); diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/PurchaseDataSyncServiceImpl.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/PurchaseDataSyncServiceImpl.java index 19267c8..95d65f4 100644 --- a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/PurchaseDataSyncServiceImpl.java +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/PurchaseDataSyncServiceImpl.java @@ -64,8 +64,6 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService { LOGGER.info("处理板块【{}】的{}条配置", plate, plateConfigs.size()); // 处理当前板块的每条配置 - boolean connectionFailed = false; - String errorMsg = ""; for (BO mainConfig : plateConfigs) { try { DateRange dateRange = processMainConfig(mainConfig); @@ -197,8 +195,11 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService { Date startDate, Date endDate) { try { String deleteSql = "DELETE FROM " + targetTable + - " WHERE " + targetTimeField + " BETWEEN ? AND ?"; - int deletedCount = DBSql.update(deleteSql, new Object[]{startDate, endDate}); + " WHERE " + targetTimeField + " >= ? "; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String startDateStr = simpleDateFormat.format(startDate)+" 00:00:00"; + String endDateStr = simpleDateFormat.format(endDate)+" 23:59:59"; + int deletedCount = DBSql.update(deleteSql, new Object[]{startDateStr}); LOGGER.info("已删除目标表[{}]中{}条数据(时间范围: {} - {})", targetTable, deletedCount, startDate, endDate); } catch (Exception e) { @@ -746,8 +747,9 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService { .addQuery("BINDID =", bindId) .list(); //获取板块公司 - String bkgs = DBSql.getString("SELECT BKGS FROM " + targetTable, "BKGS"); - + List maps = DBSql.getMaps("SELECT BKGS FROM " + targetTable + " GROUP BY BKGS"); + String bkgss = maps.stream().map(o -> o.getString("BKGS")).collect(Collectors.joining(",")); + String[] bkgsArr = bkgss.split(","); // 根据时间字段是否为空设置日期范围 Date startDate = null; Date endDate = null; @@ -755,10 +757,12 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService { // 删除目标表数据(根据时间字段是否为空决定删除范围) if (timeField == null || timeField.isEmpty()) { // 全量删除 - String deleteSql = "DELETE FROM "+hzb+" WHERE BKGS = '"+bkgs+"'"; - int deletedCount = DBSql.update(deleteSql); - LOGGER.info("已删除目标表[{}}]中{}条数据(时间范围: {} - {})", - hzb,deletedCount, startDate, endDate); + for (String bkgs : bkgsArr) { + String deleteSql = "DELETE FROM "+hzb+" WHERE BKGS = '"+bkgs+"'"; + int deletedCount = DBSql.update(deleteSql); + LOGGER.info("已删除目标表[{}]中{}条数据(时间范围: {} - {})", + hzb,deletedCount, startDate, endDate); + } // 根据时间范围增加数据分页查询数据存储 // 全量分页迁移数据到汇总表 @@ -777,14 +781,15 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService { LOGGER.error("无法找到源时间字段[{}]对应的目标表字段,跳过同步", timeField); } // 按时间范围删除 - String deleteSql = "DELETE FROM " + hzb + - " WHERE BKGS = '"+bkgs+"' AND " + targetTimeField + " BETWEEN ? AND ?"; - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String startDateStr = simpleDateFormat.format(startDate)+" 00:00:00"; - String endDateStr = simpleDateFormat.format(endDate)+" 23:59:59"; - int deletedCount = DBSql.update(deleteSql, new Object[]{startDateStr, endDateStr}); - LOGGER.info("已删除目标表[{}]中{}条数据(时间范围: {} - {})", - hzb,deletedCount, startDateStr, endDateStr); + for (String bkgs : bkgsArr) { + String deleteSql = "DELETE FROM " + hzb + + " WHERE BKGS = '"+bkgs+"' AND " + targetTimeField + " >= ? "; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String startDateStr = simpleDateFormat.format(startDate)+" 00:00:00"; + int deletedCount = DBSql.update(deleteSql, new Object[]{startDateStr}); + LOGGER.info("已删除目标表["+hzb+"]中{}条数据(时间范围: {} )", + deletedCount, startDate); + } // 根据时间范围增加数据分页查询数据存储到BO_EU_BNBM_DATALINKUP_XS_XSL_HZ // 按时间范围分页迁移数据到汇总表 @@ -837,10 +842,10 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService { " ORDER BY ID LIMIT " + PAGE_SIZE + " OFFSET " + (pageNo - 1) * PAGE_SIZE; pageData = DBSql.getMaps(pageSql); } else { - startDate = simpleDateFormat.format(startDated); - endDate = simpleDateFormat.format(endDated); + startDate = simpleDateFormat.format(startDated)+" 00:00:00"; + endDate = simpleDateFormat.format(endDated)+" 23:59:59"; pageSql = "SELECT * FROM " + targetTable + - " WHERE " + targetTimeField + " BETWEEN '" + startDate + "' AND '" + endDate + "' " + + " WHERE " + targetTimeField + " >= '" + startDate + "' " + " ORDER BY ID LIMIT " + PAGE_SIZE + " OFFSET " + (pageNo - 1) * PAGE_SIZE; LOGGER.info("执行查询的sql:{}", pageSql); pageData = DBSql.getMaps(pageSql); @@ -968,12 +973,6 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService { bos.add(bo); } - int update = DBSql.update("UPDATE BO_EU_DWD_ORDER_RKD_HZ rkd " + - " JOIN BO_EU_ZZDYQY zzd ON rkd.BKGS = zzd.BKGS AND rkd.KCZZ = zzd.XSZZ " + - " SET rkd.QYGS = zzd.QYGS " + - " WHERE rkd.QYGS IS NULL"); - LOGGER.info("更新入库单区域公司条数:{}",update); - SDK.getBOAPI().createDataBO(hzb, bos, UserContext.fromUID("admin")); LOGGER.info("已迁移{}条数据到汇总表(页号: {},时间范围: {} - {})", bos.size(), pageNo, startDate, endDate); diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.java index 327eec9..1d24a56 100644 --- a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.java +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.java @@ -65,13 +65,8 @@ public class SaleDataSyncServiceImpl implements DataSyncService { LOGGER.info("处理板块【{}】的{}条配置", plate, plateConfigs.size()); // 处理当前板块的每条配置 - boolean connectionFailed = false; - String errorMsg = ""; for (BO mainConfig : plateConfigs) { try { -// RDSAPI ccId = SDK.getCCAPI().getRDSAPI(mainConfig.getString("CC_ID")); -// Connection open = ccId.open(); -// open.close(); DateRange dateRange = processMainConfig(mainConfig); list.add(dateRange); } catch (Exception e) { @@ -103,6 +98,7 @@ public class SaleDataSyncServiceImpl implements DataSyncService { String partitionField = mainConfig.getString("FQBZD"); String bkgs = mainConfig.getString("BKGS"); String jezd = mainConfig.getString("JEZD"); + String tablename = mainConfig.getString("TABLENAME"); DateRange dateRange = new DateRange(); LOGGER.info("处理配置:BindID={}, 源表={}, 目标表={}, CC_ID={}, 时间字段={}, 分区字段配置={}", @@ -147,6 +143,14 @@ public class SaleDataSyncServiceImpl implements DataSyncService { // 查询源表数据(跨库查询) querySourceData(ccId, tableName, timeField, startDate, endDate, partitionField, fieldMappings, targetTable,jezd); + if (tablename.equals("应收表")){ + LOGGER.info("开始执行应收的明细汇总"); + querySourceDataYS(ccId, tableName, timeField, startDate, endDate, partitionField, + fieldMappings, targetTable, jezd); + }else { + querySourceData(ccId, tableName, timeField, startDate, endDate, partitionField, + fieldMappings, targetTable, jezd); + } dateRange.setStartDate(startDate); dateRange.setEndDate(endDate); return dateRange; @@ -235,8 +239,8 @@ public class SaleDataSyncServiceImpl implements DataSyncService { for (int i = 0; i < timeRanges.size(); i++) { Date[] range = timeRanges.get(i); - String startDate = simpleDateFormat2.format(range[0]); - String endDate = simpleDateFormat2.format(range[1]); + String startDate = simpleDateFormat2.format(range[0])+" 00:00:00"; + String endDate = simpleDateFormat2.format(range[1])+" 23:59:59"; LOGGER.info("正在处理第 {} 个时间区间: {} 至 {}", i + 1, startDate, endDate); if ("ORACLE".equalsIgnoreCase(DBname)) { @@ -362,7 +366,6 @@ public class SaleDataSyncServiceImpl implements DataSyncService { .append(" AND ") .append(timeField).append(" < ?") .append(" ORDER BY ").append(timeField); - //.append(" BETWEEN ? AND ? ORDER BY " + timeField + ""); if (jezd != null && !jezd.isEmpty()) { conditionBuilder.append(", " + jezd + " "); } @@ -370,8 +373,6 @@ public class SaleDataSyncServiceImpl implements DataSyncService { } } else if (timeField != null && !timeField.isEmpty()) { // 没有分区字段,但时间字段存在,使用时间范围条件 - /*conditionBuilder.append(timeField) - .append(" BETWEEN ? AND ? ORDER BY " + timeField + "");*/ conditionBuilder.append(timeField).append(" >= ?") .append(" AND ") .append(timeField).append(" < ?") @@ -457,10 +458,13 @@ public class SaleDataSyncServiceImpl implements DataSyncService { Date startDate, Date endDate) { try { String deleteSql = "DELETE FROM " + targetTable + - " WHERE " + targetTimeField + " BETWEEN ? AND ?"; - int deletedCount = DBSql.update(deleteSql, new Object[]{startDate, endDate}); - LOGGER.info("已删除目标表[{}]中{}条数据(时间范围: {} - {})", - targetTable, deletedCount, startDate, endDate); + " WHERE " + targetTimeField + " >= ? "; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String startDateStr = simpleDateFormat.format(startDate)+" 00:00:00"; + String endDateStr = simpleDateFormat.format(endDate)+" 23:59:59"; + int deletedCount = DBSql.update(deleteSql, new Object[]{startDateStr}); + LOGGER.info("已删除目标表[{}]中{}条数据(时间范围: {} )", + targetTable, deletedCount, startDateStr); } catch (Exception e) { throw new RuntimeException("删除目标表数据失败: " + e.getMessage(), e); } @@ -729,7 +733,9 @@ public class SaleDataSyncServiceImpl implements DataSyncService { .addQuery("BINDID =", bindId) .list(); //获取板块公司 - String bkgs = DBSql.getString("SELECT BKGS FROM " + targetTable, "BKGS"); + List maps = DBSql.getMaps("SELECT BKGS FROM " + targetTable + " GROUP BY BKGS"); + String bkgss = maps.stream().map(o -> o.getString("BKGS")).collect(Collectors.joining(",")); + String[] bkgsArr = bkgss.split(","); // 根据时间字段是否为空设置日期范围 Date startDate = null; @@ -738,11 +744,12 @@ public class SaleDataSyncServiceImpl implements DataSyncService { // 删除目标表数据(根据时间字段是否为空决定删除范围) if (timeField == null || timeField.isEmpty()) { // 全量删除 - String deleteSql = "DELETE FROM "+hzb+" WHERE BKGS = '"+bkgs+"'"; - int deletedCount = DBSql.update(deleteSql); - LOGGER.info("已删除目标表[{}]中{}条数据(时间范围: {} - {})", - hzb,deletedCount, startDate, endDate); - + for (String bkgs : bkgsArr) { + String deleteSql = "DELETE FROM "+hzb+" WHERE BKGS = '"+bkgs+"'"; + int deletedCount = DBSql.update(deleteSql); + LOGGER.info("已删除目标表[{}]中{}条数据(时间范围: {} - {})", + hzb,deletedCount, startDate, endDate); + } // 根据时间范围增加数据分页查询数据存储到BO_EU_BNBM_DATALINKUP_XS_XSL_HZ // 全量分页迁移数据到汇总表 if (tablename.equals("应收表")){ @@ -757,22 +764,21 @@ public class SaleDataSyncServiceImpl implements DataSyncService { endDate = cal.getTime(); cal.add(Calendar.DATE, -DAYS_BACK + 1); // 30天前(含) startDate = cal.getTime(); - // 获取目标表时间字段名 String targetTimeField = getTargetTimeField(fieldMappings, timeField); if (targetTimeField == null) { LOGGER.error("无法找到源时间字段[{}]对应的目标表字段,跳过同步", timeField); } // 按时间范围删除 - String deleteSql = "DELETE FROM " + hzb + - " WHERE BKGS = '"+bkgs+"' AND " + targetTimeField + " BETWEEN ? AND ?"; - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String startDateStr = simpleDateFormat.format(startDate); - String endDateStr = simpleDateFormat.format(endDate); - int deletedCount = DBSql.update(deleteSql, new Object[]{startDateStr+" 00:00:00", endDateStr+" 23:59:59"}); - LOGGER.info("已删除目标表[{}]中{}条数据(时间范围: {} - {})", - hzb,deletedCount, startDateStr+" 00:00:00", endDateStr+" 23:59:59"); - + for (String bkgs : bkgsArr) { + String deleteSql = "DELETE FROM " + hzb + + " WHERE BKGS = '"+bkgs+"' AND " + targetTimeField + " >= ? "; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String startDateStr = simpleDateFormat.format(startDate)+" 00:00:00"; + int deletedCount = DBSql.update(deleteSql, new Object[]{startDateStr}); + LOGGER.info("已删除目标表["+hzb+"]中{}条数据(时间范围: {} )", + deletedCount, startDateStr); + } // 根据时间范围增加数据分页查询数据存储到BO_EU_BNBM_DATALINKUP_XS_XSL_HZ // 按时间范围分页迁移数据到汇总表 if (tablename.equals("应收表")){ @@ -817,10 +823,10 @@ public class SaleDataSyncServiceImpl implements DataSyncService { " ORDER BY ID LIMIT " + PAGE_SIZE + " OFFSET " + (pageNo - 1) * PAGE_SIZE; pageData = DBSql.getMaps(pageSql); } else { - startDate = simpleDateFormat.format(startDated); - endDate = simpleDateFormat.format(endDated); + startDate = simpleDateFormat.format(startDated) + " 00:00:00"; + endDate = simpleDateFormat.format(endDated) + " 23:59:59"; pageSql = "SELECT * FROM " + targetTable + - " WHERE " + targetTimeField + " BETWEEN '" + startDate + "' AND '" + endDate + "' " + + " WHERE " + targetTimeField + " >= '" + startDate + "' " + " ORDER BY ID LIMIT " + PAGE_SIZE + " OFFSET " + (pageNo - 1) * PAGE_SIZE; LOGGER.info("执行查询的sql:{}", pageSql); pageData = DBSql.getMaps(pageSql);