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/SaleDataSyncServiceImpl.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/SaleDataSyncServiceImpl.class index 656c031..05f4d52 100644 Binary files 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/SaleDataSyncServiceImpl.class and 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/SaleDataSyncServiceImpl.class differ 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 05ae81e..db98d4b 100644 Binary files a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/tmp/compileJava/previous-compilation-data.bin and b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/tmp/compileJava/previous-compilation-data.bin differ 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/NineGridCountJob.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/NineGridCountJob.java index f9f54cd..84eadbb 100644 --- a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/NineGridCountJob.java +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/NineGridCountJob.java @@ -8,9 +8,13 @@ import com.actionsoft.bpms.util.DBSql; import com.actionsoft.sdk.local.SDK; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.List; /** * @ClassName: NineGridCountJob @@ -19,6 +23,7 @@ import java.time.format.DateTimeFormatter; * @Blog: https:// */ public class NineGridCountJob implements IJob { + private static final Logger LOGGER = LoggerFactory.getLogger(NineGridCountJob.class); @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { LocalDate now = LocalDate.now(); @@ -26,6 +31,13 @@ public class NineGridCountJob implements IJob { String nowYearMonthStr = now.format(DateTimeFormatter.ofPattern("yyyy-MM")); LocalDate nowYearFirstDay = now.withDayOfYear(1); String nowYearFirstDayStr = nowYearFirstDay.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + LOGGER.info("nowYearMonthStr:{},nowYearFirstDayStr:{}",nowYearMonthStr,nowYearFirstDayStr); + //先删除数据 + BO boEuOaNineGrid = SDK.getBOAPI().query("BO_EU_OA_NINE_GRID").addQuery("YEARMONTH =", nowYearMonthStr).detail(); + if (boEuOaNineGrid!=null){ + SDK.getBOAPI().removeByBindId("BO_EU_OA_NINE_GRID",boEuOaNineGrid.getBindId()); + } + BO bo = new BO(); bo.set("YEARMONTH",nowYearMonthStr); //查询销售数据 @@ -64,6 +76,7 @@ public class NineGridCountJob implements IJob { " (select SUM(`BUDGETTARGET`) AS BUDGETTARGET from BO_EU_ANNUAL_BUDGET WHERE YEAR = '" + year + "') mb on 1=1"); bo.set("ZB4",yswcl.getString("yewcl"));//预算完成率 String lastMonth = now.minusMonths(1).format(DateTimeFormatter.ofPattern("yyyy-MM")); + LOGGER.info("lastMonth:{}",lastMonth); RowMap cl = DBSql.getMap("SELECT YEARS_MONTH," + " MAX(CASE WHEN PRODEUCT = '石膏板' THEN YTD END) AS SGBYTD," + " MAX(CASE WHEN PRODEUCT = '轻钢龙骨' THEN YTD END) AS QGLGYTD" + @@ -76,6 +89,18 @@ public class NineGridCountJob implements IJob { bo.set("ZB8",map.getString("steel_keel_avg_price"));// 龙骨均价 bo.set("ZB9","");//总运费 + List maps = DBSql.getMaps("SELECT SUM(a.YSYE) AS total_YSYE, a.BKGS, b.max_rq " + + " FROM BO_EU_BNBM_DATALINKUP_XS_YSL a" + + " INNER JOIN (" + + " SELECT BKGS, MAX(RQ) as max_rq" + + " FROM BO_EU_BNBM_DATALINKUP_XS_YSL" + + " GROUP BY BKGS" + + " ) b ON a.BKGS = b.BKGS AND a.RQ = b.max_rq" + + " GROUP BY a.BKGS, b.max_rq"); + BigDecimal totalSum = maps.stream() + .map(o -> (BigDecimal) o.get("total_YSYE")) + .reduce(BigDecimal.ZERO, BigDecimal::add); + bo.set("ZB10",totalSum);//应收总额 //商旅总额 String querySql_SL ="SELECT SUM(PRICESERVICETOTALFEE) AS PRICESERVICETOTALFEE_SUM FROM BO_EU_TRAVELMODULE_XFMX WHERE TRAVELTIME>=CONCAT(YEAR (CURDATE()),'-01-01')"; 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/WaterproofPaintAccountsReceivableJob.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/WaterproofPaintAccountsReceivableJob.java index 3372fea..c10dc91 100644 --- a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/WaterproofPaintAccountsReceivableJob.java +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/WaterproofPaintAccountsReceivableJob.java @@ -89,13 +89,23 @@ public class WaterproofPaintAccountsReceivableJob implements IJob { String bkgs = section.getBkgs(); String sql = "SELECT QYGS, FCUSTNAME, SQ AS FPROVINCE, CS AS FCITY, QY AS FDISTRICT, XSZZ " + " FROM " + section.getYsdTable() + " WHERE QYGS IS NOT NULL AND FCUSTNAME IS NOT NULL GROUP BY FCUSTNAME,XSZZ"; -// if (bkgs.equals("北新防水")){ -// sql += " AND XSZZ !='北新防水工程(辽宁)有限公司' " + -// "AND XSZZ != '北新防水工程(四川)有限公司' AND F_SFNBJY ='是'"; -// }else { -// sql += " AND F_SFNBJY ='是'"; -// } + if (bkgs.equals("北新防水")){ + sql += " AND XSZZ !='北新防水工程(辽宁)有限公司' " + + "AND XSZZ != '北新防水工程(四川)有限公司' AND F_SFNBJY ='否'"; + }else { + sql += " AND F_SFNBJY ='否'"; + } List customerMaps = DBSql.getMaps(sql); +// List customerMaps = new ArrayList<>(); +// HashMap hashMap = new HashMap<>(); +// hashMap.put("QYGS","北方区域公司"); +// hashMap.put("FCUSTNAME","大连红太阳防水保温工程有限公司"); +// hashMap.put("FPROVINCE","辽宁省"); +// hashMap.put("FCITY","大连市"); +// hashMap.put("FDISTRICT",""); +// hashMap.put("XSZZ","北新禹王防水科技集团有限公司"); +// RowMap map = new RowMap(hashMap); +// customerMaps.add(map); if (customerMaps == null || customerMaps.isEmpty()) { LOGGER.warn("{}板块未查询到销售组织和客户数据", sectionName); @@ -145,6 +155,7 @@ public class WaterproofPaintAccountsReceivableJob implements IJob { .map(row -> row.getString("FCUSTNAME")) .distinct() .collect(Collectors.toList()); +// LOGGER.info("saleOrgUnits:{},custNames:{}",Arrays.toString(saleOrgUnits.toArray()),Arrays.toString(custNames.toArray())); // 获取需要处理的所有月末日期 List monthEndDates = getMonthEndDates(startDate, endDate); @@ -231,7 +242,7 @@ public class WaterproofPaintAccountsReceivableJob implements IJob { */ private Map preloadAllData(Section section, List saleOrgUnits, List custNames, List monthEndDates) { - + LOGGER.info("预加载数据开始"); Map results = new HashMap<>(); try { @@ -292,17 +303,17 @@ public class WaterproofPaintAccountsReceivableJob implements IJob { // .append(" 23:59:59')"); // } - String bkgs = section.getBkgs(); + String sql = "SELECT XSZZ, FCUSTNAME, DATE_FORMAT(DZRQ, '%Y-%m-%d') as BILL_DATE, SUM(SSJERMB) as TOTAL " + - "FROM " + section.getYsdTable() + + " FROM " + section.getYsdTable() + " WHERE XSZZ IN (" + inSaleOrgs + ") " + " AND FCUSTNAME IN (" + inCustNames + ") " + " AND (" + dateCondition + ") "; - if (bkgs.equals("北新防水")){ + if (section.getBkgs().equals("北新防水")){ sql += " AND XSZZ !='北新防水工程(辽宁)有限公司' " + - "AND XSZZ != '北新防水工程(四川)有限公司' AND F_SFNBJY ='是'"; + " AND XSZZ != '北新防水工程(四川)有限公司' AND F_SFNBJY ='否'"; }else { - sql += " AND F_SFNBJY ='是'"; + sql += " AND F_SFNBJY ='否'"; } sql += " GROUP BY XSZZ, FCUSTNAME, DATE_FORMAT(DZRQ, '%Y-%m-%d')"; // LOGGER.info("应收单数据sql = " + sql); @@ -349,17 +360,16 @@ public class WaterproofPaintAccountsReceivableJob implements IJob { // .append(" 23:59:59')"); // } - String bkgs = section.getBkgs(); String sql = "SELECT FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d') as BILL_DATE, SUM(FSALEAMOUNTRMB) as TOTAL " + "FROM " + section.getSkdTable() + " WHERE FSALEORGUNIT IN (" + inSaleOrgs + ") " + " AND FCUSTNAME IN (" + inCustNames + ") " + " AND (" + dateCondition + ") "; - if (bkgs.equals("北新防水")){ + if (section.getBkgs().equals("北新防水")){ sql += " AND FSALEORGUNIT !='北新防水工程(辽宁)有限公司' " + - "AND FSALEORGUNIT != '北新防水工程(四川)有限公司' AND F_SFNBJY ='是'"; + "AND FSALEORGUNIT != '北新防水工程(四川)有限公司' AND F_SFNBJY ='否'"; }else { - sql += " AND F_SFNBJY ='是'"; + sql += " AND F_SFNBJY ='否'"; } sql += " GROUP BY FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d')"; @@ -407,17 +417,16 @@ public class WaterproofPaintAccountsReceivableJob implements IJob { // .append(" 23:59:59')"); // } - String bkgs = section.getBkgs(); String sql = "SELECT FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d') as BILL_DATE, SUM(FSALEAMOUNTRMB) as TOTAL " + "FROM " + section.getSktkdTable() + " WHERE FSALEORGUNIT IN (" + inSaleOrgs + ") " + " AND FCUSTNAME IN (" + inCustNames + ") " + " AND (" + dateCondition + ") "; - if (bkgs.equals("北新防水")){ + if (section.getBkgs().equals("北新防水")){ sql += " AND FSALEORGUNIT !='北新防水工程(辽宁)有限公司' " + - "AND FSALEORGUNIT != '北新防水工程(四川)有限公司' AND F_SFNBJY ='是'"; + "AND FSALEORGUNIT != '北新防水工程(四川)有限公司' AND F_SFNBJY ='否'"; }else { - sql += " AND F_SFNBJY ='是'"; + sql += " AND F_SFNBJY ='否'"; } sql += " GROUP BY FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d')"; @@ -490,6 +499,7 @@ public class WaterproofPaintAccountsReceivableJob implements IJob { for (LocalDate monthEndDate : monthEndDates) { String dateKey = monthEndDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); +// LOGGER.info("dateKey:{}",dateKey); String fullKeyPrefix = keyPrefix + dateKey; try { @@ -499,6 +509,7 @@ public class WaterproofPaintAccountsReceivableJob implements IJob { // 计算累计销售(本年年初到当前月末) LocalDate yearStart = monthEndDate.withDayOfYear(1); +// LOGGER.info("yearStart:{}",yearStart); BigDecimal ljxs = calculatePeriodBalance(ysData, null, null, saleOrgUnit, custName, yearStart, monthEndDate); // 计算累计还款(本年年初到当前月末) 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/YyglbDbHtJob.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/YyglbDbHtJob.java index 0d51eea..b14992d 100644 --- a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/YyglbDbHtJob.java +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/YyglbDbHtJob.java @@ -28,10 +28,17 @@ import java.util.stream.Collectors; public class YyglbDbHtJob implements IJob { private static final Logger LOGGER = LoggerFactory.getLogger(YyglbDbHtJob.class); @Override - public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + public void execute(JobExecutionContext job) throws JobExecutionException { + String param = SDK.getJobAPI().getJobParameter(job); + int timeRange = StringUtils.isNotBlank(param) ? Integer.parseInt(param) : 0; + LocalDate now = LocalDate.now().minusMonths(1); int year = now.getYear(); int monthValue = now.getMonthValue(); + if (timeRange!=0){ + LOGGER.info("timeRange:{}",timeRange); + monthValue = timeRange; + } //分别遍历龙牌梦牌泰山 护面纸、石膏、煤的对标数量 //公式为:当月材料出库数量/当月石膏板折标产量 //龙牌取数为:生产出库用量 护面纸取全部、脱硫石膏取物料编码为101115110000130、煤为包含煤、生物质、天然气、蒸汽 @@ -48,6 +55,7 @@ public class YyglbDbHtJob implements IJob { }catch (Exception e){ LOGGER.error("删除运营_物料单耗出库表出错,删除范围为:{}-{}:e",year,monthValue,e.getLocalizedMessage()); } + try { for (String bkgs : bkgsArr) { List maps1 = DBSql.getMaps("SELECT FLZZ FROM BO_EU_BNBM_SCCK_HZ WHERE BKGS = '"+bkgs+"' " + @@ -62,12 +70,17 @@ public class YyglbDbHtJob implements IJob { " AND FLZZ = '"+map2.getString("FLZZ")+"'"; if (wlmckey.equals("石膏")){ sql+=" AND WLMC IN ('脱硫石膏','磷石膏','天然石膏')"; - }else { + } else if (wlmckey.equals("护面纸")) { + if (bkgs.equals("梦牌")) { + System.out.println("梦牌护面纸的判断"); + sql += " AND WLMC LIKE '%" + wlmckey + "%' AND WLMC NOT LIKE '%覆膜%'"; + }else { + sql+=" AND WLMC LIKE '%" + wlmckey + "%' "; + } + } else { sql+=" AND WLMC LIKE '%" + wlmckey + "%' "; } - if (bkgs.equals("泰山石膏")){ - sql+="AND SCBM NOT LIKE '%穿孔板%' AND SCBM NOT LIKE '%装饰板%'"; - } + LOGGER.info("查询执行的sql:"+sql); RowMap map = DBSql.getMap(sql); bo.set(wlmcValue,map.getString("SFSL")); if (StringUtils.isNotBlank(map2.getString("FLZZ"))){ @@ -84,13 +97,26 @@ public class YyglbDbHtJob implements IJob { bo.set("YF",monthValue); bo.set("BKGS",bkgs); bo.set("BK",bkgs.equals("泰山石膏")?"泰山":bkgs); - RowMap map1 = DBSql.getMap("SELECT SUM(ZBCL) AS zbcl FROM BO_EU_BNBM_SCRK_HZ " + + String sql = "SELECT SUM(ZBCL) AS zbcl,SUM(RKSL) AS rksl FROM BO_EU_BNBM_SCRK_HZ " + " WHERE BKGS = '" + bkgs + "' AND YEAR = '" + year + "' AND MONTH = '" + monthValue + "'" + - " AND WLMC LIKE '%石膏板%' AND KCZZ = '"+bo.getString("FLZZ")+"'"); + " AND KCZZ = '"+bo.getString("FLZZ")+"'"; + if (bkgs.equals("泰山石膏")){ + sql+=" AND WLMC LIKE '%石膏板%' AND SCBM NOT LIKE '%穿孔板%' AND SCBM NOT LIKE '%装饰板%'"; + }else if (bkgs.equals("龙牌")){ + sql+=" AND WLBM LIKE '3015%' AND WLFL != '装饰板'"; + } else if (bkgs.equals("梦牌")) { + sql+=" AND (WLBM LIKE '3015%' OR WLBM LIKE '103071%') AND WLBM NOT LIKE '3015A%'"; + } else { + sql+=" AND WLMC LIKE '%石膏板%'"; + } + LOGGER.info("查询产量和折标产量的sql:{}",sql); + RowMap map1 = DBSql.getMap(sql); if (map1!=null){ bo.set("SGBZBCL",map1.getString("zbcl")); + bo.set("SGBRKSL",map1.getString("rksl")); }else{ bo.set("SGBZBCL",0); + bo.set("SGBRKSL",0); } LOGGER.info("存储的值为:{}",bo.toJSONObject().toJSONString()); boList.add(bo); @@ -119,6 +145,7 @@ public class YyglbDbHtJob implements IJob { Double sg = 0.00; Double mei = 0.00; Double sgbzbcl = 0.00; + Double sgbrksl = 0.00; try { hmz = StringUtils.isNotBlank(bo.getString("HMZ")) ? Double.parseDouble(bo.getString("HMZ").trim()) : 0.00; @@ -147,6 +174,12 @@ public class YyglbDbHtJob implements IJob { LOGGER.warn("SGBZBCL格式错误,使用默认值0.00,原始值: {}", bo.getString("SGBZBCL")); sgbzbcl = 0.00; } + try { + sgbrksl = StringUtils.isNotBlank(bo.getString("SGBRKSL")) ? Double.parseDouble(bo.getString("SGBRKSL").trim()) : 0.00; + } catch (NumberFormatException e) { + LOGGER.warn("SGBRKSL格式错误,使用默认值0.00,原始值: {}", bo.getString("SGBRKSL")); + sgbrksl = 0.00; + } // 检查detail对象是否为空 if (detail == null) { @@ -162,15 +195,15 @@ public class YyglbDbHtJob implements IJob { LOGGER.warn("flzz或JC字段为空,使用空字符串"); } - LOGGER.info("nf:{};yf:{};bk:{};jc:{};hmz:{};sg:{};mei:{};sgbzbcl:{}", - nf, yf, bk, jcValue, hmz, sg, mei, sgbzbcl); + LOGGER.info("nf:{};yf:{};bk:{};jc:{};hmz:{};sg:{};mei:{};sgbzbcl:{},sgbrksl:{}", + nf, yf, bk, jcValue, hmz, sg, mei, sgbzbcl,sgbrksl); if (sgbzbcl != null && sgbzbcl != 0.00) { // 安全处理hmz if (hmz != null && hmz != 0.00) { - double result = (hmz*1000000) / sgbzbcl; + double result = (hmz*1000000) / sgbrksl; detail.set("HMZ", result); - LOGGER.debug("HMZ计算结果: {} / {} = {}", hmz, sgbzbcl, result); + LOGGER.debug("HMZ计算结果: {} / {} = {}", hmz, sgbrksl, result); } else { detail.set("HMZ", 0.00); } 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 cebbd3f..818b6f2 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 @@ -277,8 +277,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])+" 00:00:00"; - String endDate = simpleDateFormat2.format(range[1])+" 23:59:59"; + String startDate = simpleDateFormat2.format(range[0])+""; + String endDate = simpleDateFormat2.format(range[1])+""; LOGGER.info("正在处理第 {} 个时间区间: {} 至 {}", i + 1, startDate, endDate); if ("ORACLE".equalsIgnoreCase(DBname)) { @@ -432,7 +432,7 @@ public class ProductionDataSyncServiceImpl implements DataSyncService { String querySql = "SELECT * FROM " + tableName + " WHERE " + conditionBuilder.toString(); - LOGGER.debug("执行查询querySql: {}", querySql); + LOGGER.info("执行查询querySql: {}", querySql); List pageData; // 根据条件类型执行查询 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 260e66d..b226d42 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 @@ -3,7 +3,6 @@ package com.awspaas.user.apps.bnbm.datalinkup.service.impl; import com.actionsoft.bpms.bo.engine.BO; import com.actionsoft.bpms.commons.database.DBUtils; import com.actionsoft.bpms.commons.database.RowMap; -import com.actionsoft.bpms.commons.pagination.SQLPagination; import com.actionsoft.bpms.server.UserContext; import com.actionsoft.bpms.util.DBSql; import com.actionsoft.bpms.util.UtilDate; @@ -18,7 +17,6 @@ import org.slf4j.LoggerFactory; import java.math.BigDecimal; import java.math.RoundingMode; -import java.sql.*; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; @@ -1250,10 +1248,18 @@ public class SaleDataSyncServiceImpl implements DataSyncService { @Override public void querySourceDataYS(String ccId, String tableName, String timeField, Date startDated, Date endDated, String partitionField, List fieldMappings, String targetTable, String jezd) { // LOGGER.info("ccId:{},tableName:{},timeField:{},startDated:{},endDated:{},partitionField:{},fieldMappings:{},targetTable:{},jezd:{}",ccId,tableName,timeField,startDated,endDated,partitionField,Arrays.asList(fieldMappings.toArray()),targetTable,jezd); + ArrayList bggsArr = new ArrayList<>(); + String bindid = fieldMappings.get(0).getString("BINDID"); + BO sjgtpz = SDK.getBOAPI().query("BO_EU_BNBM_DATALINKUP_SJGTPZ").detailByBindId(bindid); + String ssbk = sjgtpz.getString("SSBK"); + if (ssbk.equals("龙牌")){ + bggsArr.add("龙牌"); + bggsArr.add("梦牌"); + }else { + bggsArr.add(ssbk); + } int totalRows = 0; // 总查询行数 int totalSuccess = 0; // 总成功插入行数 - int pageNo = 1; - boolean hasMore; RDSAPI rdsapi = null; DBUtils.SUPPLY supply = null; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -1328,71 +1334,101 @@ public class SaleDataSyncServiceImpl implements DataSyncService { } // 分页查询数据 - do { - String startDate = simpleDateFormat2.format(startDated); - String endDate = simpleDateFormat2.format(endDated); - // 修改后的querySourceDataYS方法中的SQL查询部分 - String querySql; - if ("ORACLE".equalsIgnoreCase(DBname)) { - querySql = "SELECT t1.* FROM " + tableName + " t1 " + - " JOIN (SELECT TRUNC(TO_DATE(" + timeField + ", 'YYYY-MM-DD'), 'MONTH') AS month_start, " + - " MAX(TO_DATE(" + timeField + ", 'YYYY-MM-DD')) AS max_date " + - " FROM " + tableName + " WHERE " + conditionBuilder.toString() + - " AND TO_DATE(" + timeField + ", 'YYYY-MM-DD') BETWEEN TO_DATE('" + startDate + "', 'YYYY-MM-DD') AND TO_DATE('" + endDate + "', 'YYYY-MM-DD') " + - " GROUP BY TRUNC(TO_DATE(" + timeField + ", 'YYYY-MM-DD'), 'MONTH')) t2 " + - " ON TO_DATE(t1." + timeField + ", 'YYYY-MM-DD') = t2.max_date " + - " WHERE " + conditionBuilder.toString() + - " AND TO_DATE(t1." + timeField + ", 'YYYY-MM-DD') BETWEEN TO_DATE('" + startDate + "', 'YYYY-MM-DD') AND TO_DATE('" + endDate + "', 'YYYY-MM-DD')"; - } else if ("POSTGRESQL".equalsIgnoreCase(DBname) || "GAUSS".equalsIgnoreCase(DBname)) { - querySql = "SELECT t1.* FROM " + tableName + " t1 " + - " JOIN (SELECT DATE_TRUNC('MONTH', " + timeField + "::DATE) AS month_start, " + - " MAX(" + timeField + "::DATE) AS max_date " + - " FROM " + tableName + " WHERE "+conditionBuilder.toString()+" AND "+timeField+"::DATE BETWEEN '"+startDate+"' AND '"+endDate+"' " + - " GROUP BY DATE_TRUNC('MONTH', " + timeField + "::DATE)) t2 " + - " ON t1." + timeField + "::DATE = t2.max_date " + - " WHERE " +conditionBuilder.toString()+ - " AND t1."+timeField+"::DATE BETWEEN '"+startDate+"' AND '"+endDate+"'"; - } else if ("SQLSERVER".equalsIgnoreCase(DBname)) { - querySql = "SELECT t1.* FROM " + tableName + " t1 " + - " JOIN (SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, CONVERT(DATE, " + timeField + ")), 0) AS month_start, " + - " MAX(CONVERT(DATE, " + timeField + ")) AS max_date " + - " FROM " + tableName + " WHERE " + conditionBuilder.toString() + - " AND CONVERT(DATE, " + timeField + ") BETWEEN CONVERT(DATE, '" + startDate + "') AND CONVERT(DATE, '" + endDate + "') " + - " GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, CONVERT(DATE, " + timeField + ")), 0)) t2 " + - " ON CONVERT(DATE, t1." + timeField + ") = t2.max_date " + - " WHERE " + conditionBuilder.toString() + - " AND CONVERT(DATE, t1." + timeField + ") BETWEEN CONVERT(DATE, '" + startDate + "') AND CONVERT(DATE, '" + endDate + "')"; - } else { - // 默认处理(如MySQL) - querySql = "SELECT t1.* FROM " + tableName + " t1 " + - " JOIN (SELECT DATE_FORMAT(STR_TO_DATE(" + timeField + ", '%Y-%m-%d'), '%Y-%m-01') AS month_start, " + - " MAX(STR_TO_DATE(" + timeField + ", '%Y-%m-%d')) AS max_date " + - " FROM " + tableName + " WHERE " + conditionBuilder.toString() + - " AND STR_TO_DATE(" + timeField + ", '%Y-%m-%d') BETWEEN STR_TO_DATE('" + startDate + "', '%Y-%m-%d') AND STR_TO_DATE('" + endDate + "', '%Y-%m-%d') " + - " GROUP BY DATE_FORMAT(STR_TO_DATE(" + timeField + ", '%Y-%m-%d'), '%Y-%m-01')) t2 " + - " ON STR_TO_DATE(t1." + timeField + ", '%Y-%m-%d') = t2.max_date " + - " WHERE " + conditionBuilder.toString() + - " AND STR_TO_DATE(t1." + timeField + ", '%Y-%m-%d') BETWEEN STR_TO_DATE('" + startDate + "', '%Y-%m-%d') AND STR_TO_DATE('" + endDate + "', '%Y-%m-%d')"; - } - LOGGER.info("执行查询: {}", querySql); + LOGGER.info("==================执行同步应收=============="); + Set bkgsSet = new HashSet<>(); + // 遍历bggsArr,为每个分组条件执行查询 + for (String bggs : bggsArr) { + LOGGER.info("正在处理板块公司: {}", bggs); + int groupTotalRows = 0; // 当前分组总查询行数 + int groupTotalSuccess = 0; // 当前分组总成功插入行数 + int pageNo = 1; + boolean hasMore; + do { + String startDate = simpleDateFormat2.format(startDated); + String endDate = simpleDateFormat2.format(endDated); + // 修改后的querySourceDataYS方法中的SQL查询部分 - List pageData; - if (params.isEmpty()) { - pageData = rdsapi.getMaps(querySql); - } else { - pageData = rdsapi.getMaps(querySql); - } + String querySql; + if ("ORACLE".equalsIgnoreCase(DBname)) { + querySql = "SELECT t1.* FROM " + tableName + " t1 " + + " JOIN (SELECT TRUNC(TO_DATE(" + timeField + ", 'YYYY-MM-DD'), 'MONTH') AS month_start, " + + " MAX(TO_DATE(" + timeField + ", 'YYYY-MM-DD')) AS max_date " + + " FROM " + tableName + " WHERE " + conditionBuilder.toString() + + " AND TO_DATE(" + timeField + ", 'YYYY-MM-DD') BETWEEN TO_DATE('" + startDate + "', 'YYYY-MM-DD') AND TO_DATE('" + endDate + "', 'YYYY-MM-DD') " + + " AND BKGS = '" + bggs + "' " + // 添加分组条件 + " GROUP BY TRUNC(TO_DATE(" + timeField + ", 'YYYY-MM-DD'), 'MONTH')) t2 " + + " ON TO_DATE(t1." + timeField + ", 'YYYY-MM-DD') = t2.max_date " + + " WHERE " + conditionBuilder.toString() + + " AND TO_DATE(t1." + timeField + ", 'YYYY-MM-DD') BETWEEN TO_DATE('" + startDate + "', 'YYYY-MM-DD') AND TO_DATE('" + endDate + "', 'YYYY-MM-DD')"; + } else if ("POSTGRESQL".equalsIgnoreCase(DBname) || "GAUSS".equalsIgnoreCase(DBname)) { + querySql = "SELECT t1.* FROM " + tableName + " t1 " + + " JOIN (SELECT DATE_TRUNC('MONTH', " + timeField + "::DATE) AS month_start, " + + " MAX(" + timeField + "::DATE) AS max_date " + + " FROM " + tableName + " WHERE " + conditionBuilder.toString() + " AND " + timeField + "::DATE BETWEEN '" + startDate + "' AND '" + endDate + "' " + + " AND BKGS = '" + bggs + "' " + // 添加分组条件 + " GROUP BY DATE_TRUNC('MONTH', " + timeField + "::DATE)) t2 " + + " ON t1." + timeField + "::DATE = t2.max_date " + + " WHERE " + conditionBuilder.toString() + + " AND t1." + timeField + "::DATE BETWEEN '" + startDate + "' AND '" + endDate + "'" + + " AND t1.BKGS = '" + bggs + "'"; // 添加分组条件; + } else if ("SQLSERVER".equalsIgnoreCase(DBname)) { + querySql = "SELECT t1.* FROM " + tableName + " t1 " + + " JOIN (SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, CONVERT(DATE, " + timeField + ")), 0) AS month_start, " + + " MAX(CONVERT(DATE, " + timeField + ")) AS max_date " + + " FROM " + tableName + " WHERE " + conditionBuilder.toString() + + " AND CONVERT(DATE, " + timeField + ") BETWEEN CONVERT(DATE, '" + startDate + "') AND CONVERT(DATE, '" + endDate + "') " + + " GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, CONVERT(DATE, " + timeField + ")), 0)) t2 " + + " ON CONVERT(DATE, t1." + timeField + ") = t2.max_date " + + " WHERE " + conditionBuilder.toString() + + " AND CONVERT(DATE, t1." + timeField + ") BETWEEN CONVERT(DATE, '" + startDate + "') AND CONVERT(DATE, '" + endDate + "')" + + " AND t1.BKGS = '" + bggs + "'"; + } else { + // 默认处理(如MySQL) + querySql = "SELECT t1.* FROM " + tableName + " t1 " + + " JOIN (SELECT DATE_FORMAT(STR_TO_DATE(" + timeField + ", '%Y-%m-%d'), '%Y-%m-01') AS month_start, " + + " MAX(STR_TO_DATE(" + timeField + ", '%Y-%m-%d')) AS max_date " + + " FROM " + tableName + " WHERE " + conditionBuilder.toString() + + " AND STR_TO_DATE(" + timeField + ", '%Y-%m-%d') BETWEEN STR_TO_DATE('" + startDate + "', '%Y-%m-%d') AND STR_TO_DATE('" + endDate + "', '%Y-%m-%d') " + + " AND BKGS = '" + bggs + "' " + // 添加分组条件 + " GROUP BY DATE_FORMAT(STR_TO_DATE(" + timeField + ", '%Y-%m-%d'), '%Y-%m-01')) t2 " + + " ON STR_TO_DATE(t1." + timeField + ", '%Y-%m-%d') = t2.max_date " + + " WHERE " + conditionBuilder.toString() + + " AND STR_TO_DATE(t1." + timeField + ", '%Y-%m-%d') BETWEEN STR_TO_DATE('" + startDate + "', '%Y-%m-%d') AND STR_TO_DATE('" + endDate + "', '%Y-%m-%d')" + + " AND t1.BKGS = '" + bggs + "'"; // 添加分组条件 + } + LOGGER.info("执行查询: {}", querySql); - if (pageData != null && !pageData.isEmpty()) { - int successCount = this.processAndInsertData(pageData, fieldMappings, targetTable); - totalRows += pageData.size(); - totalSuccess += successCount; - hasMore = pageData.size() == PAGE_SIZE; - pageNo++; - } else { - hasMore = false; - } - } while (hasMore); + List pageData; + if (params.isEmpty()) { + pageData = rdsapi.getMaps(querySql); + } else { + pageData = rdsapi.getMaps(querySql); + } + + if (pageData != null && !pageData.isEmpty()) { + int successCount = this.processAndInsertData(pageData, fieldMappings, targetTable); + groupTotalRows += pageData.size(); + groupTotalSuccess += successCount; + totalRows += pageData.size(); + totalSuccess += successCount; + hasMore = pageData.size() == PAGE_SIZE; + pageNo++; + Set bkgsSet2 = pageData.stream().map(o -> o.getString("BKGS")).collect(Collectors.toSet()); + if (bkgsSet2 != null) { + for (String s : bkgsSet2) { + bkgsSet.add(s); + } + } + } else { + hasMore = false; + } + } while (hasMore); + LOGGER.info("板块公司[{}]处理完成: 查询{}条数据,成功同步{}条数据", + bggs, groupTotalRows, groupTotalSuccess); + } + String bkgs = bkgsSet.stream().collect(Collectors.joining(", ")); + LOGGER.info("同步板块为:{};落地表为:{}", + bkgs,targetTable); // 每天执行的任务:删除去年同期上一天的数据,新增去年同期当天的数据 try { @@ -1417,6 +1453,12 @@ public class SaleDataSyncServiceImpl implements DataSyncService { int deletedCount = DBSql.update(deleteLastYearPreviousDaySql); LOGGER.info("已删除去年同期前一天({})的数据,删除了{}条数据", lastYearPreviousDayStr, deletedCount); + // 1. 删除去年同期当天的数据 + String deleteLastYearDaySql = "DELETE FROM " + targetTable + + " WHERE RQ = '" + lastYearSameDayStr + "'"; + int deletedCount2 = DBSql.update(deleteLastYearPreviousDaySql); + LOGGER.info("已删除去年同期当天({})的数据,删除了{}条数据", lastYearSameDayStr, deletedCount2); + // 2. 新增去年同期当天数据 // 构建查询去年同期当天数据的SQL String lastYearQuerySql;