From d25795d39c8aab563f3711cf5ccef5e45ce8abb8 Mon Sep 17 00:00:00 2001 From: llllon Date: Mon, 8 Sep 2025 18:57:22 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E9=94=80=E5=94=AE=E3=80=81=E4=B8=80?= =?UTF-8?q?=E4=BD=93=E5=8C=96BI=E6=B1=87=E6=80=BBsql=E4=BC=98=E5=8C=96=202?= =?UTF-8?q?=E3=80=81=E7=89=A9=E6=96=99=E5=88=86=E7=B1=BB=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/PurchaseDataSummaryServiceImpl.class | Bin 28665 -> 28498 bytes .../impl/PurchaseDataSyncServiceImpl.class | Bin 28742 -> 29131 bytes .../service/impl/SaleCountDimensionImpl.class | Bin 30470 -> 34515 bytes .../impl/SaleDataSummaryServiceImpl.class | Bin 26971 -> 39222 bytes .../compileJava/previous-compilation-data.bin | Bin 9392464 -> 9392467 bytes .../impl/PurchaseDataSummaryServiceImpl.java | 37 +- .../impl/PurchaseDataSyncServiceImpl.java | 46 +- .../service/impl/SaleCountDimensionImpl.java | 167 +++++-- .../impl/SaleDataSummaryServiceImpl.java | 411 +++++++++++++++++- .../bnbm/datalinkup/util/PurchaseUtil.java | 17 +- 10 files changed, 602 insertions(+), 76 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/service/impl/PurchaseDataSummaryServiceImpl.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/PurchaseDataSummaryServiceImpl.class index 9a5ffb0d88442015a6f94661550836f9969d089d..292c28e01f6f2bdd8b5ccd14d64333105242c1db 100644 GIT binary patch delta 4380 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 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/SaleCountDimensionImpl.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/SaleCountDimensionImpl.class index 8fd37518b5f6d963fc4753f65b4345ec66edeeee..ff2a032e14567323d11bcaa2d469c64b3dfd3423 100644 GIT binary patch literal 34515 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

c>QV;Si>LI=lQFl=}2dEzn!wkiNjG{?2 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 sYF}j6UaQA*m%eV-E%)Vu)Or5@0doxA1ONa4 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/SaleDataSummaryServiceImpl.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/SaleDataSummaryServiceImpl.class index 9d4c2efb88bac6cdeac7193a17f5210e7304cff3..961d08fc509d74236e2ee8775ad5e137ff4c0334 100644 GIT binary patch literal 39222 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 literal 26971 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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 b98da5e0a87ad010a97e43b7d006bf274c502ca6..6739ffedd4572cdf22f50ebed64717a0bb784f77 100644 GIT binary patch delta 867 zcmZY6Z%oVq0LJm_y5FJDFH#aYDJ3UzC2}3riK|4(h4SZ8Q74p;bGnrJrK8wwyr@|; zyBD{{H2bX=%?`JDV_2Cj>xE^rvDy52kxj?+KdhMi`}1Y`r~K~puR{}2u54wrC{%_UCT7wszW#eZta+~^hwGFsr8-m*6IW8^ zQVJ%OS`njj6$zgIS-W45{6Y|v2!;xR>=)FU4)NQJJI`Jn>qs^I>2*K-)i0$u)pCk+ zmi~j7`L0jb>2LNVn~R4(f4tiy*=lBEj%=$5d8`lUA?XK05Q@2&hxrJT^@C!0U%(d0 zZ3xE#EJOqrAretojA$%D43=UUVzC?=tUw%AA|44?g+wG_HIlIgTC7D1)?qzTu|akl zbhVa%qa@9M4rxfoMr2?UHX{>Tphp%A*otk)mNf%85eWg8N=9D}a$&@FD|05=*xz6NooN8706sjgoTaPp%f_YB>}Lff6c7u2#qQ2Q3jzUbSTMF3bHYJSqR|cx8WAJ2R*)^%Omr z7v0X~2$kHNGw1|NYdKj=4v53Pu#KVXLBw{_1umKy9j7>=%-D|-SYX8gl;R)` zp$vy%Lpdr?DVb;Osd15C=0>fZzw0t&;l-ZCH*KP4!Hz0aqXtJ%i=(K61NAtD1~j4x z%{UGxT5tj`wBjUA;a~r0oWWVN;~YBBi7uSS1zf}>T*ei2!;P!x!8P>4gFakGKW;$8 SP29q5cyR}JCC|dZ$F{$Ztbm;W 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/PurchaseDataSummaryServiceImpl.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/PurchaseDataSummaryServiceImpl.java index 42c6cc2..78249bb 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/PurchaseDataSummaryServiceImpl.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/PurchaseDataSummaryServiceImpl.java @@ -820,36 +820,37 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { List bos = new ArrayList<>(); for (String wlmc : distinctList) { RowMap row = dailyMap.get(wlmc); - if (row == null || row.getDouble("totalAmount") == 0.0) continue; + if (row == null) continue; - double avgPrice = 0.00; + // 安全获取数值并处理空值,默认值为0.0 + Double totalQuantity = row.getDouble("totalQuantity"); + Double totalAmount = row.getDouble("totalAmount"); + double safeTotalQuantity = totalQuantity != null ? totalQuantity : 0.0; + double safeTotalAmount = totalAmount != null ? totalAmount : 0.0; + + // 如果总金额为0则跳过 + if (safeTotalAmount == 0.0) continue; + + double avgPrice = 0.0; BO summaryBO = new BO(); summaryBO.set("RQ", dateStr); summaryBO.set("WLMC", wlmc); - // 安全获取数值,处理可能的空值 - Double totalQuantity = row.getDouble("totalQuantity"); - Double totalAmount = row.getDouble("totalAmount"); - - if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")){ - double adjustedQuantity = (totalQuantity != null ? totalQuantity : 0.0) / 1000; + if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) { + double adjustedQuantity = safeTotalQuantity / 1000; summaryBO.set("CGZL", adjustedQuantity); - // 防止除零错误 - if (totalAmount != null && totalAmount != 0 && adjustedQuantity != 0) { - avgPrice = totalAmount / adjustedQuantity; + if (safeTotalAmount != 0 && adjustedQuantity != 0) { + avgPrice = safeTotalAmount / adjustedQuantity; } } else { - double quantity = totalQuantity != null ? totalQuantity : 0.0; - summaryBO.set("CGZL", quantity); - - // 防止除零错误 - if (totalAmount != null && totalAmount != 0 && quantity != 0) { - avgPrice = totalAmount / quantity; + summaryBO.set("CGZL", safeTotalQuantity); + if (safeTotalAmount != 0 && safeTotalQuantity != 0) { + avgPrice = safeTotalAmount / safeTotalQuantity; } } - summaryBO.set("CGZE", totalAmount != null ? totalAmount : 0.0); + summaryBO.set("CGZE", safeTotalAmount); summaryBO.set("PJDJ", avgPrice); summaryBO.set("BKGS", bkgs); bos.add(summaryBO); 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 5ff7595..d847e5d 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 @@ -769,7 +769,7 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService { Double gaiAverage = 0.00; int gaiSum = 0; RowMap map1 = DBSql.getMap("SELECT SUM(RKSL) AS gaiSum, SUM(DJHYF) AS gaiPrice FROM BO_EU_DWD_PUR_PURCHASE_ORDER" + - " WHERE WLMC LIKE '%盖%' AND DJHYF < 5"); + " WHERE WLMC LIKE '%盖%' AND DJHYF < 3.5 AND WLMC NOT LIKE '%桶%' AND WLMC NOT LIKE '%罐%'"); if (map1!=null){ gaiSum = map1.getInt("gaiSum"); Double gaiPrice = map1.getDouble("gaiPrice"); @@ -812,34 +812,43 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService { !key.equalsIgnoreCase("BINDID")) { if (StringUtils.isNotBlank(targetTimeField)) { String targetTimeField1 = map.getString(targetTimeField); - Date parse = UtilDate.parse(targetTimeField1); - int year = UtilDate.getYear(parse); - String monthFormat = UtilDate.monthFormat(parse); - int day = UtilDate.getDay(parse); - bo.set("YEARMONTH", year + monthFormat); - bo.set("YEAR", year); - bo.set("MONTH", monthFormat); - bo.set("DAY", day); + if (StringUtils.isNotBlank(targetTimeField1)) { // 添加空值检查 + try { + Date parse = UtilDate.parse(targetTimeField1); + int year = UtilDate.getYear(parse); + String monthFormat = UtilDate.monthFormat(parse); + int day = UtilDate.getDay(parse); + bo.set("YEARMONTH", year + monthFormat); + bo.set("YEAR", year); + bo.set("MONTH", monthFormat); + bo.set("DAY", day); + } catch (Exception e) { + LOGGER.warn("解析时间字段[{}]的值[{}]失败: {}", targetTimeField, targetTimeField1, e.getMessage()); + } + } else { + LOGGER.warn("时间字段[{}]的值为空,记录ID: {}", targetTimeField, map.getString("ID")); + } } bo.set(key, map.get(key)); } } // 如果是采购_入库单汇总 刷新物料名称 if (hzb.equals("BO_EU_DWD_ORDER_RKD_HZ")) { - String bkgs = bo.getString("BKGS"); - String wlmc = bo.getString("WLMC"); - String wlbm = bo.getString("WLBM"); - String jldw = bo.getString("JLDW"); - String wlfl = bo.getString("WLFL"); - Double djhyfs = bo.get("DJHYF",Double.class); + // 使用 StringUtils.trimToEmpty 处理可能为 null 的字符串 + String bkgs = StringUtils.trimToEmpty(bo.getString("BKGS")); + String wlmc = StringUtils.trimToEmpty(bo.getString("WLMC")); + String wlbm = StringUtils.trimToEmpty(bo.getString("WLBM")); + String jldw = StringUtils.trimToEmpty(bo.getString("JLDW")); + String wlfl = StringUtils.trimToEmpty(bo.getString("WLFL")); + Double djhyfs = bo.get("DJHYF", Double.class); double djhyf = djhyfs != null ? djhyfs : 0.0; String newWlmc = ""; if (StringUtils.isNotBlank(wlmc) || StringUtils.isNotBlank(wlbm) || StringUtils.isNotBlank(jldw) || StringUtils.isNotBlank(wlfl)) { - newWlmc = purchaseUtil.materialClassificationFiltering(bkgs.trim(), - wlmc.trim(), wlbm.trim(), jldw.trim(), djhyf, wlfl.trim()); + newWlmc = purchaseUtil.materialClassificationFiltering(bkgs, + wlmc, wlbm, jldw, djhyf, wlfl); if (bkgs.equals("北新嘉宝莉")) { if (wlmc.contains("盖")&& !wlmc.contains("桶") && !wlmc.contains("罐") && djhyf < 3.5) { continue; @@ -852,6 +861,9 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService { } bo.set("WLMC", newWlmc); bo.set("OLDWLMC", wlmc); + }else { + bo.set("WLMC", wlmc); + bo.set("OLDWLMC", wlmc); } // LOGGER.info("采购_入库单汇总,刷新物料名称------物料名称:{},板块公司:{},物料编码:{},入库单位:{},单价:{},物料分类:{}", wlmc, bkgs, wlbm, jldw, djhyf, wlfl); if ("泰山石膏".equals(bkgs)) { 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/SaleCountDimensionImpl.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/SaleCountDimensionImpl.java index 087566b..f5fab24 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/SaleCountDimensionImpl.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/SaleCountDimensionImpl.java @@ -75,24 +75,40 @@ public class SaleCountDimensionImpl implements DataSummaryService { } if (dateRange == null || dateRange.getStartDate() == null || dateRange.getEndDate() == null) { LOGGER.info("未提供有效时间范围,按当前日期计算"); - calculateForCurrentDate(bkgs); + Calendar cal = Calendar.getInstance(); +// DateRange dateRangeNow = new DateRange(); + + // 设置为当前月的第一天 + cal.set(Calendar.DAY_OF_MONTH, 1); + dateRange.setStartDate(cal.getTime()); + + // 设置为当前月的最后一天 + cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + dateRange.setEndDate(cal.getTime()); +// calculateForCurrentDate(bkgs); + calculateMonthlyData(dateRange, bkgs); // 处理营业收入数据 newProcessRevenueData(dateRange,bkgs); // 处理销量销额数据(分页查询) newProcessSalesVolumeData(dateRange,bkgs); + // 区域两金占比 + newProcessRegionTwoFundsRatio(dateRange,bkgs); + + LOGGER.info("{}销售数据多维度汇总计算完成",bkgs); } else { LOGGER.info("开始执行销售数据多维度汇总计算(时间范围: {} 至 {})", dateRange.getStartDate(), dateRange.getEndDate()); // 计算月度维度数据(按月遍历) calculateMonthlyData(dateRange, bkgs); - // 处理营业收入数据 newProcessRevenueData(dateRange,bkgs); // 处理销量销额数据(分页查询) newProcessSalesVolumeData(dateRange,bkgs); + // 区域两金占比 + newProcessRegionTwoFundsRatio(dateRange,bkgs); - LOGGER.info("销售数据多维度汇总计算完成"); + LOGGER.info("{}销售数据多维度汇总计算完成",bkgs); } } catch (Exception e) { String errorMsg = "销售数据汇总计算失败: " + e.getMessage(); @@ -101,6 +117,120 @@ public class SaleCountDimensionImpl implements DataSummaryService { } } + /** + * 区域两金占比 + * @param dateRange 时间范围 + * @param bkgs 时间范围 + */ + private void newProcessRegionTwoFundsRatio(DateRange dateRange, String bkgs) { + LOGGER.info("开始处理区域两金占比,年月: {}-{}, 板块公司: {}", dateRange.getStartDate(),dateRange.getEndDate(), bkgs); + + // 删除已存在的记录 + String deleteSql = "DELETE FROM " + BO_EU_XS_QYLJZB + " WHERE YEARMONTH >= ? AND BKGS = ?"; + try { + int deleted = DBSql.update(deleteSql, new Object[]{YEAR_MONTH_FORMAT.format(dateRange.getStartDate()), bkgs}); + LOGGER.info("区域两金占比数据-已删除{}-{}条营业收入记录", YEAR_MONTH_FORMAT.format(dateRange.getStartDate()), deleted); + }catch (Exception e){ + LOGGER.error("区域两金占比-删除数据{}年月-{}板块数据错误,删除sql为:{},请检查数据库链接:{}", + YEAR_MONTH_FORMAT.format(dateRange.getStartDate()), bkgs,deleteSql,e.getMessage()); + throw e; + } + + try { + // 第一个SQL:查询应收账款数据 + String receivableSql = "SELECT t1.QYGS AS QYGS, t1.BKGS AS BKGS, DATE_FORMAT( t1.RQ, '%Y-%m' ) ASyear_month, t1.RQ AS max_rq, SUM( t1.YSYE ) AS YSZK" + + " FROM BO_EU_BNBM_DATALINKUP_XS_YSL t1" + + " INNER JOIN (" + + " SELECT QYGS, BKGS, DATE_FORMAT( RQ, '%Y-%m' ) ASyear_month, MAX( RQ ) AS max_rq" + + " FROM BO_EU_BNBM_DATALINKUP_XS_YSL" + + " WHERE RQ >= ? AND RQ < ? AND BKGS = ?" + + " GROUP BY QYGS,BKGS,DATE_FORMAT ( RQ, '%Y-%m' )" + + " ) t2 ON t1.QYGS = t2.QYGS AND t1.BKGS = t2.BKGS AND t1.RQ = t2.max_rq" + + " WHERE t1.RQ >= ? AND t1.RQ < ? AND t1.BKGS = ?" + + " GROUP BY t1.QYGS,t1.BKGS,DATE_FORMAT ( t1.RQ, '%Y-%m' ),t1.RQ"; + + String startDate = DATE_FORMAT.format(dateRange.getStartDate()); + String endDate = DATE_FORMAT.format(dateRange.getEndDate()); + + LOGGER.info("应收账款数据查SQL: {}", receivableSql); + List receivableMaps = DBSql.getMaps(receivableSql, startDate, endDate, bkgs, startDate, endDate, bkgs); + + if (receivableMaps.isEmpty()) { + LOGGER.info("{}应收账款数据无数据,停止分页查询", bkgs); + } else { + ArrayList bos = new ArrayList<>(); + + // 收集所有销售组织用于库存查询 + List xszzList = new ArrayList<>(); + Map receivableMap = new HashMap<>(); + + for (RowMap map : receivableMaps) { + String qygs = map.getString("QYGS"); + List maps = DBSql.getMaps("SELECT * FROM BO_EU_BNBM_QYGSDYB WHERE QYGS = '" + qygs + "'"); + for (RowMap rowMap : maps) { + String xszz = rowMap.getString("XSZZ"); + xszzList.add(xszz); + receivableMap.put(xszz, map); + } + } + + // 合并数据并创建BO对象 + for (RowMap receivable : receivableMaps) { + String xszz = receivable.getString("XSZZ"); + double yszk = receivable.getDouble("YSZK"); + String year_month = receivable.getString("ASyear_month"); + String[] split = year_month.split("-"); + double kcje = 0.0; + // 第二个SQL:查询库存金额数据 + if (!xszzList.isEmpty()) { + String placeholders = String.join(",", Collections.nCopies(xszzList.size(), "?")); + String inClause = xszzList.stream() + .map(s -> "'" + s.replace("'", "''") + "'") // 转义单引号防止SQL注入 + .collect(Collectors.joining(",")); + String inventorySql = "SELECT STOCKORGNAME, SUM(BALANCE_AMOUNT) as KCJE " + + " FROM " + BO_EU_DWD_ORDER_KC_HZ + " " + + " WHERE STOCKORGNAME IN (" + inClause + ") " + + " AND CATEGORY = '产成品' " + + " AND YEAR(INDATE) = YEAR('" + split[0] + "') " + + " AND MONTH(INDATE) = MONTH('" + split[1] + "') " + + " GROUP BY STOCKORGNAME"; + + LOGGER.info("库存金额数据查询,SQL: {}", inventorySql); + + List inventoryMaps = DBSql.getMaps(inventorySql); + Map inventoryMap = inventoryMaps.stream() + .collect(Collectors.toMap( + row -> row.getString("STOCKORGNAME"), + row -> row.getDouble("KCJE"), + (existing, replacement) -> existing + )); + kcje = inventoryMap.getOrDefault(xszz, 0.0); + } + + BO bo = new BO(); + bo.set("YEARMONTH", year_month); + bo.set("BKGS", bkgs); + bo.set("QYGS", receivable.getString("QYGS")); + bo.set("YSZK", yszk); + bo.set("KCJE", kcje); + bos.add(bo); + } + + // 批量新增BO + if (!bos.isEmpty()) { + int[] admins = SDK.getBOAPI().createDataBO(BO_EU_XS_QYLJZB, bos, UserContext.fromUID("admin")); + LOGGER.info("{}:{}-{}范围区域两金占比数据处理完成,查询{}条记录,累计{}条", + bkgs, dateRange.getStartDate(), dateRange.getEndDate(), bos.size(), admins[0]); + } + } + }catch (Exception e){ + LOGGER.error("两金占比-新增数据{}年月-{}板块数据错误,请检查数据库链接:{}", + YEAR_MONTH_FORMAT.format(dateRange.getStartDate()), bkgs,e.getMessage()); + throw e; + } + + } + /** * 处理销量销额数据 * @param dateRange 时间范围 @@ -152,7 +282,7 @@ public class SaleCountDimensionImpl implements DataSummaryService { String gc = map.getString("KCZZ"); String yearmonth = map.getString("YEARMONTH"); BO bo = new BO(); - bo.set("YEARMONTH", yearmonth); + bo.set("YEARMONTH", yearmonth.substring(0, 4) + "-" + yearmonth.substring(4)); bo.set("BKGS", bkgs); bo.set("QYGS", map.getString("QYGS")); bo.set("GC", gc); @@ -241,7 +371,7 @@ public class SaleCountDimensionImpl implements DataSummaryService { String gc = map.getString("KCZZ"); String yearmonth = map.getString("YEARMONTH"); BO bo = new BO(); - bo.set("YEARMONTH", yearmonth); + bo.set("YEARMONTH", yearmonth.substring(0, 4) + "-" + yearmonth.substring(4)); bo.set("BKGS", bkgs); bo.set("QYGS", map.getString("QYGS")); bo.set("GC", gc); @@ -288,7 +418,7 @@ public class SaleCountDimensionImpl implements DataSummaryService { cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); dateRange.setEndDate(cal.getTime()); - calculateMonthlyData(dateRange, bkgs); + } @@ -305,24 +435,9 @@ public class SaleCountDimensionImpl implements DataSummaryService { for (String yearMonth : yearMonths) { LOGGER.info("开始处理{}月份的数据,板块公司: {}", yearMonth, bkgs); - - // 4. 处理区域两金占比 - LOGGER.info("开始区域两金占比"); - processRegionTwoFundsRatio(conn, yearMonth, bkgs); - - // 1. 处理营业收入数据 -// LOGGER.info("开始营业收入数据"); -// processRevenueData(conn, yearMonth, bkgs); - - // 2. 处理销量销额数据 -// LOGGER.info("开始销量销额数据"); -// processSalesVolumeData(conn, yearMonth, bkgs); - // 3. 处理应收账款数据 LOGGER.info("开始应收账款数据"); processReceivableData(conn, yearMonth, bkgs); - - } // conn.commit(); LOGGER.info("所有月份数据处理完成"); @@ -567,8 +682,8 @@ public class SaleCountDimensionImpl implements DataSummaryService { String querySql = "SELECT QYGS, XSZZ, SHENGQU, SHIQU, QX, QCYE, LJXS, LJHK, YSYE, " + "ZLFX0_60, ZLFX60_1, ZLFX1_2, ZLFX2_3, ZLFX3_4, ZLFX4_5, ZLFX5 " + "FROM " + RECEIVABLE_DETAIL_TABLE + " " + - "WHERE DATE(RQ) = ? AND BKGS = ? " + - "LIMIT " + PAGE_SIZE + " OFFSET " + offset; + "WHERE DATE(RQ) = ? AND BKGS = ? "; +// +"LIMIT " + PAGE_SIZE + " OFFSET " + offset; LOGGER.info("应收账款数据查询第{}页,SQL: {}", page + 1, querySql); List maps = DBSql.getMaps(conn, querySql, lastDayOfMonth, bkgs); @@ -609,11 +724,7 @@ public class SaleCountDimensionImpl implements DataSummaryService { // 批量新增BO if (!bos.isEmpty()) { - for (int i = 0; i < bos.size(); i += BATCH_SIZE) { - int end = Math.min(bos.size(), i + BATCH_SIZE); - List batchList = bos.subList(i, end); - SDK.getBOAPI().createDataBO(BO_EU_XS_YSZK, batchList, UserContext.fromUID("admin")); - } + SDK.getBOAPI().createDataBO(BO_EU_XS_YSZK, bos, UserContext.fromUID("admin")); totalCount += bos.size(); LOGGER.info("应收账款数据第{}页处理完成,本页{}条记录,累计{}条", page + 1, bos.size(), totalCount); } 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/SaleDataSummaryServiceImpl.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/SaleDataSummaryServiceImpl.java index a3a2076..258ff92 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/SaleDataSummaryServiceImpl.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/SaleDataSummaryServiceImpl.java @@ -17,7 +17,10 @@ import java.math.RoundingMode; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.time.LocalDate; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.stream.Collectors; /** * 一体化——销售汇总计算实现类 @@ -65,6 +68,10 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { */ private static final String RECEIVABLE_DETAIL_TABLE = "BO_EU_BNBM_DATALINKUP_XS_YSL"; + // 日期格式化 + private static final SimpleDateFormat YEAR_MONTH_FORMAT = new SimpleDateFormat("yyyy-MM"); + private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); + @Override public void calculateSummary(DateRange dateRange, BO mainConfig) { try { @@ -79,16 +86,67 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { } if (dateRange == null || dateRange.getStartDate() == null || dateRange.getEndDate() == null) { LOGGER.info("未提供有效时间范围,按当前日期计算"); - calculateForCurrentDate(bkgs); + Calendar cal = Calendar.getInstance(); + int year = cal.get(Calendar.YEAR); + int month = cal.get(Calendar.MONTH) + 1; + int day = cal.get(Calendar.DAY_OF_MONTH); + String yearMonth = String.format("%04d-%02d", year, month); + + String startDate = DATE_FORMAT.format(cal.getTime()); + + // 1. 计算并保存产品配套率年度数据(按月存储) +// calculateAndSaveMatchingRate(year, month, yearMonth, bkgs); + newcalculateAndSaveMatchingRate(startDate, yearMonth, bkgs); + + // 2. 计算并保存产品销售月明细数据 +// calculateAndSaveProductMonthly(year, month, yearMonth, bkgs); + newcalculateAndSaveProductMonthly(startDate, yearMonth, bkgs); + + // 3. 计算并保存应收账款品牌月明细 +// calculateAndSaveReceivableBrandMonthly(year, month, yearMonth, bkgs); + newcalculateAndSaveReceivableBrandMonthly(startDate, yearMonth, bkgs); + + // 4. 计算并保存应收账款年度汇总(按月存储) +// calculateAndSaveReceivableYear(year, month, yearMonth, bkgs); + newcalculateAndSaveReceivableYear(startDate, yearMonth, bkgs); + + // 5. 计算并保存营业收入年度汇总(按月存储) + calculateAndSaveRevenueYear(year, month, yearMonth, bkgs); + + // 6. 计算并保存产品单价日明细 +// calculateAndSaveUnitPriceDaily(year, month, day, currentDate, bkgs); + newcalculateAndSaveUnitPriceDaily(startDate,year, month, day, bkgs); } else { LOGGER.info("开始执行销售数据多维度汇总计算(时间范围: {} 至 {})", dateRange.getStartDate(), dateRange.getEndDate()); + //从结束时间获取年月 + Calendar startCal = Calendar.getInstance(); + startCal.setTime(dateRange.getStartDate()); + startCal.set(Calendar.DAY_OF_MONTH, 1); // 设置为月份的第一天 + int year = startCal.get(Calendar.YEAR); + int month = startCal.get(Calendar.MONTH) + 1; + int day = startCal.get(Calendar.DAY_OF_MONTH); + String yearMonth = String.format("%04d-%02d", year, month); + + String startDate = DATE_FORMAT.format(dateRange.getStartDate()); + + // 计算并保存产品配套率年度数据(按月存储) + newcalculateAndSaveMatchingRate(startDate, yearMonth, bkgs); + // 计算并保存产品销售月明细数据 + newcalculateAndSaveProductMonthly(startDate, yearMonth, bkgs); + // 计算并保存应收账款品牌月明细 + newcalculateAndSaveReceivableBrandMonthly(startDate, yearMonth, bkgs); + // 计算并保存应收账款年度汇总(按月存储) + newcalculateAndSaveReceivableYear(startDate, yearMonth, bkgs); + // 计算并保存产品单价日明细 + newcalculateAndSaveUnitPriceDaily(startDate,year, month, day, bkgs); // 计算月度维度数据(按月遍历) calculateMonthlyData(dateRange, bkgs); + // 计算日度维度数据(按天遍历) - calculateDailyData(dateRange, bkgs); +// calculateDailyData(dateRange, bkgs); LOGGER.info("销售数据多维度汇总计算完成"); } @@ -99,6 +157,344 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { } } + /** + * 计算并保存产品单价日明细 + * @param startDate + * @param year + * @param month + * @param day + * @param bkgs + */ + private void newcalculateAndSaveUnitPriceDaily(String startDate, int year, int month, int day, String bkgs) { + try { + LOGGER.info("开始计算{}-{}-{}产品单价日明细数据", year, month, day); + + //新增前删除数据YEAR(DZRQ) = '" + year + "' AND MONTH(DZRQ) = '" + month + "AND DAY(DZRQ) = '"+day+"' + int delete = DBSql.update("DELETE FROM " + UNIT_PRICE_DAILY_TABLE + + " WHERE DATE >= '" + startDate + "' AND BKGS = '"+bkgs+"'"); + LOGGER.info("准备同步{}-产品单价日明细数据,删除了{}条数据",startDate,delete); + + String sql = "SELECT DZRQ,LB_1,BKGS,SQ,SUM(XSSL) AS tssales, SUM(ZSSL) AS lpsales,SUM(SSJERMB) AS revenue" + + " FROM " +SALES_DETAIL_TABLE+ + " WHERE LB_1 IN ('石膏板', '轻钢龙骨', '涂料') AND (SQ LIKE '%新疆%' OR SQ LIKE '%海南%' OR SQ LIKE '%西藏%')" + + " GROUP BY DZRQ,LB_1,BKGS ORDER BY DZRQ"; + + List maps = DBSql.getMaps(sql); + if (maps!=null){ + ArrayList list = new ArrayList<>(); + for (RowMap map : maps) { + BigDecimal tssales = BigDecimal.valueOf(map.getDouble("tssales")); + BigDecimal lpsales = BigDecimal.valueOf(map.getDouble("lpsales")); + BigDecimal revenue = BigDecimal.valueOf(map.getDouble("revenue")); + BigDecimal unitPrice = BigDecimal.ZERO; + String bkgs1 = map.getString("BKGS"); + String lb_1 = map.getString("LB_1"); + + BO priceBO = new BO(); + priceBO.set("BKGS", bkgs1); + priceBO.set("DATE", map.getString("DZRQ")); + if ("北新嘉宝莉".equals(bkgs)) { + priceBO.set("PRODUCT_TYPE", "涂料"); + }else { + priceBO.set("PRODUCT_TYPE", lb_1); + } + if (bkgs1.equals("泰山石膏")){ + // 计算单价(避免除零错误) + if (tssales.compareTo(BigDecimal.ZERO) > 0) { + // 石膏板单位转换:万元/万平方米 → 元/平方米 + if ("石膏板".equals(lb_1)) { + unitPrice = revenue.divide(tssales, 4, RoundingMode.HALF_UP); + priceBO.set("SALES_VOLUME", tssales.setScale(2, RoundingMode.HALF_UP)); + } + // 轻钢龙骨单位:元/吨 + if ("轻钢龙骨".equals(lb_1)) { + unitPrice = revenue.divide(lpsales, 2, RoundingMode.HALF_UP); + } + priceBO.set("SALES_VOLUME", lpsales.setScale(2, RoundingMode.HALF_UP)); + } + }else { + // 计算单价(避免除零错误) + if (lpsales.compareTo(BigDecimal.ZERO) > 0) { + // 石膏板单位转换:万元/万平方米 → 元/平方米 + if ("石膏板".equals(lb_1)) { + unitPrice = revenue.divide(lpsales, 4, RoundingMode.HALF_UP); + } + // 轻钢龙骨单位:元/吨 + if ("轻钢龙骨".equals(lb_1)) { + unitPrice = revenue.divide(lpsales, 2, RoundingMode.HALF_UP); + } + priceBO.set("SALES_VOLUME", lpsales.setScale(2, RoundingMode.HALF_UP)); + } + } + priceBO.set("REVENUE_AMOUNT", revenue.setScale(2, RoundingMode.HALF_UP)); + priceBO.set("UNIT_PRICE", unitPrice.setScale(2, RoundingMode.HALF_UP)); + + list.add(priceBO); + } + SDK.getBOAPI().createDataBO(UNIT_PRICE_DAILY_TABLE,list,UserContext.fromUID("admin")); + } + + LOGGER.info("产品单价日明细数据保存成功"); + } catch (Exception e) { + String errorMsg = String.format("产品单价日明细数据计算失败: %s", e.getMessage()); + LOGGER.error(errorMsg, e); + throw new RuntimeException(errorMsg, e); + } + } + + /** + * 计算并保存应收账款年度汇总(按月存储) + * @param startDate + * @param yearMonth + * @param bkgs + */ + private void newcalculateAndSaveReceivableYear(String startDate, String yearMonth, String bkgs) { + try { + LOGGER.info("开始计算{}应收账款累计数据", startDate); + + //新增前删除数据 + int delete = DBSql.update("DELETE FROM " + RECEIVABLE_YEAR_TABLE + + " WHERE YEARMONTH >= '" + yearMonth + "' AND BKGS = '"+bkgs+"'"); + LOGGER.info("准备同步{}-应收账款年度汇总(按月存储),删除了{}条数据",startDate,delete); + + String sql = "SELECT CONCAT(YEAR(RQ), '-', LPAD(MONTH(RQ), 2, '0')) ASyear_month,BKGS," + + " SUM(QCYE) AS QCYE,SUM(LJXS) AS LJXS,SUM(LJHK) AS LJHK,(SUM(QCYE) + SUM(LJXS) - SUM(LJHK)) AS receivable" + + " FROM BO_EU_BNBM_DATALINKUP_XS_YSL" + + " WHERE RQ >= ? AND BKGS = ? AND SHENGQU IN ('新疆维吾尔自治区', '海南', '西藏')" + + " GROUP BY YEAR(RQ), MONTH(RQ)" + + " ORDER BY YEAR(RQ), MONTH(RQ)"; + + List maps = DBSql.getMaps(sql, startDate, bkgs); + + //查询去年数据 + LocalDate localDate = LocalDate.parse(startDate).minusYears(1); + String lastDate = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + List lastMaps = DBSql.getMaps(sql, lastDate, bkgs); + Map resultMap = lastMaps.stream() + .filter(row -> row.getString("ASyear_month") != null) // 过滤掉键为 null 的条目 + .collect(Collectors.toMap( + row -> row.getString("ASyear_month"), + row -> row, + (oldValue, newValue) -> newValue // 重复时取新值 + )); + + if (maps!=null){ + ArrayList list = new ArrayList<>(); + for (RowMap map : maps) { + String aSyear_month = map.getString("ASyear_month"); + BO bo = new BO(); + bo.set("YEARMONTH",aSyear_month);//年月(YYYY-MM) + bo.set("BKGS",map.getString("BKGS"));//板块公司 +// bo.set("RECEIVABLE_TYPE",map.getString(""));//应收类型(板骨/涂料) + bo.set("OPENING_BALANCE",map.getString("QCYE"));//期初余额(万元) + bo.set("CUMULATIVE_SALES",map.getString("LJXS"));//累计销售(万元) + bo.set("CUMULATIVE_REPAYMENT",map.getString("LJHK"));//累计回款(万元) + bo.set("ENDING_BALANCE",map.getString("receivable"));//期末余额(万元) + // 定义日期格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + // 解析字符串为YearMonth对象 + YearMonth current = YearMonth.parse(yearMonth, formatter); + // 获取上一年同月 + YearMonth previous = current.minusYears(1); + String lastYearMonth = previous.format(formatter); + RowMap map1 = resultMap.get(lastYearMonth); + if (map1!=null){ + double lastDou = StringUtils.isNotBlank(map1.getString("receivable"))?Double.parseDouble(map1.getString("receivable")):0; + BigDecimal last = BigDecimal.valueOf(lastDou); + double currentDou = StringUtils.isNotBlank(map.getString("receivable"))?Double.parseDouble(map.getString("receivable")):0; + BigDecimal bigDecimal = BigDecimal.valueOf(currentDou); + if (last == null || last.compareTo(BigDecimal.ZERO) == 0) { + bo.set("YOY_RATE",0.0);//同比变化率(%) + }else { + bo.set("YOY_RATE",bigDecimal.subtract(last) + .divide(last, 4, RoundingMode.HALF_UP) + .multiply(BigDecimal.valueOf(100)));//同比变化率(%) + } + } + list.add(bo); + } + SDK.getBOAPI().createDataBO(RECEIVABLE_YEAR_TABLE,list,UserContext.fromUID("admin")); + } + LOGGER.info("应收账款月度累计数据保存成功"); + } catch (Exception e) { + String errorMsg = String.format("应收账款月度累计数据计算失败: %s", e.getMessage()); + LOGGER.error(errorMsg, e); + throw new RuntimeException(errorMsg, e); + } + + } + + /** + * + * 计算并保存应收账款品牌月明细 + * @param startDate + * @param yearMonth + * @param bkgs + */ + private void newcalculateAndSaveReceivableBrandMonthly(String startDate, String yearMonth, String bkgs) { + try { + LOGGER.info("开始计算{}应收账款品牌明细数据", yearMonth); + + //新增前删除数据 + int delete = DBSql.update("DELETE FROM " + RECEIVABLE_BRAND_MONTHLY_TABLE + + " WHERE YEARMONTH >= '" + yearMonth + "' AND BKGS = '"+bkgs+"'"); + LOGGER.info("{}:准备同步{}-应收账款品牌月明细,删除了{}条数据",bkgs,yearMonth,delete); + + String sql = "SELECT CONCAT(YEAR(t1.RQ), '-', LPAD(MONTH(t1.RQ), 2, '0')) ASyear_month,t1.BKGS AS BKGS, YEAR(t1.RQ) AS year,MONTH(t1.RQ) AS month,t1.SHENGQU,SUM(t1.YSYE) AS receivable " + + " FROM BO_EU_BNBM_DATALINKUP_XS_YSL t1 " + + " INNER JOIN (" + + " SELECT MAX(RQ) AS max_rq,YEAR(RQ) AS year,MONTH(RQ) AS month " + + " FROM BO_EU_BNBM_DATALINKUP_XS_YSL " + + " WHERE RQ >= ? AND BKGS = ? AND SHENGQU IN ('新疆维吾尔自治区', '海南', '西藏') " + + " GROUP BY YEAR(RQ), MONTH(RQ) " + + ") t2 ON t1.RQ = t2.max_rq AND YEAR(t1.RQ) = t2.year AND MONTH(t1.RQ) = t2.month " + + " WHERE t1.BKGS = ? AND t1.SHENGQU IN ('新疆维吾尔自治区', '海南', '西藏') " + + " GROUP BY YEAR(t1.RQ),MONTH(t1.RQ),t1.SHENGQU " + + " ORDER BY year, month, t1.SHENGQU"; + + List maps = DBSql.getMaps(sql, startDate, bkgs, bkgs); + if (maps!=null){ + ArrayList list = new ArrayList<>(); + for (RowMap map : maps) { + BO bo = new BO(); + bo.set("YEARMONTH",map.getString("ASyear_month"));//年月(YYYY-MM) + bo.set("BKGS",map.getString("BKGS"));//板块公司 + bo.set("BRAND",map.getString("BKGS"));//品牌(龙牌/泰山/梦牌/北新/嘉宝莉) + bo.set("RECEIVABLE_AMOUNT",map.getString("receivable"));//应收账款余额(万元) + list.add(bo); + } + SDK.getBOAPI().createDataBO(RECEIVABLE_BRAND_MONTHLY_TABLE,list,UserContext.fromUID("admin")); + } + LOGGER.info("应收账款品牌月明细数据保存成功"); + } catch (Exception e) { + String errorMsg = String.format("应收账款品牌月明细数据计算失败: %s", e.getMessage()); + LOGGER.error(errorMsg, e); + throw new RuntimeException(errorMsg, e); + } + } + + /** + * 计算并保存产品销售月明细数据 + * @param startDate + * @param yearMonth + * @param bkgs + */ + private void newcalculateAndSaveProductMonthly(String startDate, String yearMonth, String bkgs) { + try { + LOGGER.info("开始计算{}-产品销售明细数据", yearMonth); + + //新增前删除数据 + int delete = DBSql.update("DELETE FROM " + PRODUCT_MONTHLY_TABLE + + " WHERE YEARMONTH >= '" + yearMonth + "' AND BKGS = '"+bkgs+"'"); + LOGGER.info("准备同步{}-产品销售明细数据,删除了{}条数据",yearMonth,delete); + + String sql = "SELECT BKGS,LB_1,LB_2 AS brand,CONCAT(YEAR, '-', LPAD(MONTH, 2, '0')) ASyear_month," + + " SUM(ZSSL) AS total_zssl, SUM(XSSL)/10000 AS total_xssl_10k, SUM(SSJERMB) AS total_ssjermb," + + " (SUM(ZSSL)/(SUM(SUM(ZSSL)) OVER (PARTITION BY LB_1, YEAR(DZRQ), MONTH(DZRQ)))) *100 AS lb1_month_zssl_total," + + " ((SUM(XSSL)/10000)/(SUM(SUM(XSSL)) OVER (PARTITION BY LB_1, YEAR(DZRQ), MONTH(DZRQ)) / 10000))*100 AS lb1_month_xssl_total_10k," + + " (SUM(SSJERMB)/(SUM(SUM(SSJERMB)) OVER (PARTITION BY LB_1, YEAR(DZRQ), MONTH(DZRQ))))*100 AS lb1_month_ssjermb_total" + + " FROM BO_EU_BNBM_DATALINKUP_XS_XSL_HZ " + + " WHERE DZRQ>? AND BKGS = ? AND LB_1 IN('石膏板','轻钢龙骨','涂料') AND (SQ LIKE '%新疆%' OR SQ LIKE '%海南%' OR SQ LIKE '%西藏%') " + + " GROUP BY LB_2,year, month" + + " ORDER BY year, month"; + List maps = DBSql.getMaps(sql, startDate, bkgs); + ArrayList list = new ArrayList<>(); + if (maps!=null){ + for (RowMap map : maps) { + String lb_1 = map.getString("LB_1"); + String year_month = map.getString("ASyear_month"); + String brand = map.getString("brand"); + + BO productBO = new BO(); + productBO.set("BKGS", bkgs); // 新增BKGS字段 + productBO.set("YEARMONTH", year_month); + if ("北新嘉宝莉".equals(bkgs) || "北新涂料".equals(bkgs)) { + if ("其他".equals(lb_1)){ + productBO.set("PRODUCT_TYPE", "其他"); + }else { + productBO.set("PRODUCT_TYPE", "涂料"); + } + } else if ("石膏板".equals(lb_1) || "轻钢龙骨".equals(lb_1) ) { + productBO.set("PRODUCT_TYPE", lb_1); + } else { + productBO.set("PRODUCT_TYPE", "其他"); + } + productBO.set("BRAND", brand); + // 设置销量及占比 + if (bkgs.contains("泰山")){ + productBO.set("SALES_VOLUME",map.getString("total_xssl_10k"));// 销售量 + productBO.set("SALES_VOLUME_RATIO",map.getString("lb1_month_xssl_total_10k"));// 销量占比(%) + }else { + productBO.set("SALES_VOLUME",map.getString("total_zssl"));// 销售量 + productBO.set("SALES_VOLUME_RATIO",map.getString("lb1_month_zssl_total"));// 销量占比(%) + } + productBO.set("REVENUE_AMOUNT",map.getString("total_ssjermb"));// 营业收入(万元) + productBO.set("REVENUE_RATIO",map.getString("lb1_month_ssjermb_total"));// 收入占比(%) + list.add(productBO); + } + SDK.getBOAPI().createDataBO(PRODUCT_MONTHLY_TABLE,list,UserContext.fromUID("admin")); + } + + LOGGER.info("产品销售月明细数据保存成功"); + } catch (Exception e) { + String errorMsg = String.format("产品销售月明细数据计算失败: %s", e.getMessage()); + LOGGER.error(errorMsg, e); + throw new RuntimeException(errorMsg, e); + } + } + + /** + * 计算并保存产品配套率年度数据(按月存储) + * @param startDate + * @param yearMonth + * @param bkgs + */ + private void newcalculateAndSaveMatchingRate(String startDate, String yearMonth, String bkgs) { + try { + LOGGER.info("开始计算{}产品配套率数据", yearMonth); + + //新增前删除数据 + int delete = DBSql.update("DELETE FROM " + MATCHING_RATE_YEAR_TABLE + + " WHERE YEARMONTH >= '" + yearMonth + "' AND BKGS = '"+bkgs+"'"); + LOGGER.info("{}:准备同步{}产品配套率数据,删除了{}条数据",bkgs,yearMonth,delete); + + String sql = "SELECT CONCAT(YEAR, '-', LPAD(MONTH, 2, '0')) ASyear_month,YEAR(DZRQ) AS year, MONTH(DZRQ) AS month, SUM(CASE WHEN LB_1 = '石膏板' THEN ZSSL ELSE 0 END) AS gypsum_board_sales, SUM(CASE WHEN LB_1 = '轻钢龙骨' THEN ZSSL ELSE 0 END) AS steel_keel_sales, " + + " CASE " + + " WHEN SUM(CASE WHEN LB_1 = '轻钢龙骨' THEN ZSSL ELSE 0 END) > 0 " + + " THEN ROUND(SUM(CASE WHEN LB_1 = '石膏板' THEN ZSSL ELSE 0 END) / " + + " SUM(CASE WHEN LB_1 = '轻钢龙骨' THEN ZSSL ELSE 0 END), 4) " + + " ELSE 0 " + + " END AS gypsum_to_keel_ratio " + + " FROM BO_EU_BNBM_DATALINKUP_XS_XSL_HZ " + + " WHERE DZRQ >= ? AND BKGS = ? AND (SQ LIKE '%新疆%' OR SQ LIKE '%海南%' OR SQ LIKE '%西藏%') AND LB_1 IN ('石膏板', '轻钢龙骨') " + + " GROUP BY YEAR(DZRQ), MONTH(DZRQ)" + + " ORDER BY year, month"; + + List maps = DBSql.getMaps(sql, startDate, bkgs); + ArrayList list = new ArrayList<>(); + if (maps!=null) { + for (RowMap map : maps) { + String aSyear_month = map.getString("ASyear_month"); + BO matchingRateBO = new BO(); + matchingRateBO.set("YEARMONTH", aSyear_month); + matchingRateBO.set("BKGS", bkgs); + matchingRateBO.set("GYPSUM_SALES_VOLUME", map.getString("gypsum_board_sales")); + matchingRateBO.set("STEEL_SALES_VOLUME", map.getString("steel_keel_sales")); + matchingRateBO.set("MATCHING_RATE", map.getString("gypsum_to_keel_ratio")); + list.add(matchingRateBO); + } + } + // 保存数据 + SDK.getBOAPI().createDataBO(MATCHING_RATE_YEAR_TABLE,list,UserContext.fromUID("admin")); + LOGGER.info("产品配套率月度累计数据保存成功"); + } catch (Exception e) { + String errorMsg = String.format("产品配套率月度累计数据计算失败: %s", e.getMessage()); + LOGGER.error(errorMsg, e); + throw new RuntimeException(errorMsg, e); + } + + } + /** * 按当前日期计算(无时间范围时使用) */ @@ -151,16 +547,16 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { LOGGER.info("计算月度汇总数据: {}-{}", year, month); // 1. 产品配套率年度数据 - calculateAndSaveMatchingRate(year, month, yearMonth, bkgs); +// calculateAndSaveMatchingRate(year, month, yearMonth, bkgs); // 2. 产品销售月明细数据 - calculateAndSaveProductMonthly(year, month, yearMonth, bkgs); +// calculateAndSaveProductMonthly(year, month, yearMonth, bkgs); // 3. 应收账款品牌月明细 - calculateAndSaveReceivableBrandMonthly(year, month, yearMonth, bkgs); +// calculateAndSaveReceivableBrandMonthly(year, month, yearMonth, bkgs); // 4. 应收账款年度汇总 - calculateAndSaveReceivableYear(year, month, yearMonth, bkgs); +// calculateAndSaveReceivableYear(year, month, yearMonth, bkgs); // 5. 营业收入年度汇总 calculateAndSaveRevenueYear(year, month, yearMonth, bkgs); @@ -520,9 +916,6 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { + " WHERE YEAR(DATE) = '" + year + "' AND MONTH(DATE) = '"+month+"' AND DAY(DATE) = '"+day+"' AND BKGS = '"+bkgs+"'"); LOGGER.info("准备同步{}-产品单价日明细数据,删除了{}条数据",date,delete); - List maps = DBSql.getMaps("SELECT LB_1 FROM " + SALES_DETAIL_TABLE + " WHERE BKGS = '" + bkgs + "'" + - "AND (SQ LIKE '%新疆%' OR SQ LIKE '%海南%' OR SQ LIKE '%西藏%') " + // 模糊查询 - " GROUP BY LB_1"); String[] lb1s = new String[]{"石膏板","轻钢龙骨","涂料"}; for (String lb_1 : lb1s) { // String lb_1 = map.getString("LB_1"); diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/util/PurchaseUtil.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/util/PurchaseUtil.java index 8e3e6b8..6c21a97 100644 --- a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/util/PurchaseUtil.java +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/util/PurchaseUtil.java @@ -1,9 +1,15 @@ package com.awspaas.user.apps.bnbm.datalinkup.util; +import com.awspaas.user.apps.bnbm.datalinkup.service.impl.SaleDataSyncServiceImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * 采购模块工具类 */ public class PurchaseUtil { + private static final Logger LOGGER = LoggerFactory.getLogger(PurchaseUtil.class); + /** * 判断物料名称所属分类 * @param bkgs 板块名称 @@ -49,13 +55,15 @@ public class PurchaseUtil { newWlmc = "乳液"; } // 钛白粉 - else if (("北新防水".equals(bkgs) || "北新涂料".equals(bkgs) || "北新嘉宝莉".equals(bkgs)) - && wlmc.contains("钛白粉")) { + else if (("北新防水".equals(bkgs) || "北新涂料".equals(bkgs)) && wlmc.contains("钛白粉")) { + newWlmc = "钛白粉"; + } else if ("北新嘉宝莉".equals(bkgs) && wlbm.startsWith("11PT")) { newWlmc = "钛白粉"; } // 重钙 - else if (("北新防水".equals(bkgs) || "北新涂料".equals(bkgs) || "北新嘉宝莉".equals(bkgs)) - && wlmc.contains("重钙")) { + else if (("北新防水".equals(bkgs) || "北新涂料".equals(bkgs)) && wlmc.contains("重钙")) { + newWlmc = "重钙"; + } else if ("北新嘉宝莉".equals(bkgs) && wlmc.startsWith("11TD")) { newWlmc = "重钙"; } // 包装袋 @@ -92,6 +100,7 @@ public class PurchaseUtil { } }catch (Exception e){ + LOGGER.info("物料分类报错:{}\n{}",e.getMessage(),e); e.printStackTrace(); } return newWlmc;