From 5a90a8e12b3ce776822b28618ef0817ed03c5876 Mon Sep 17 00:00:00 2001 From: llllon Date: Thu, 11 Sep 2025 16:28:05 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E9=98=B2=E6=B0=B4?= =?UTF-8?q?=E6=B6=82=E6=96=99=E5=BA=94=E6=94=B6=E8=AE=A1=E7=AE=97=202?= =?UTF-8?q?=E3=80=81=E4=B8=80=E4=BD=93=E5=8C=96=E4=BA=8B=E4=B8=9A=E9=83=A8?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=A2=9E=E5=8A=A0=E5=AD=97=E6=AE=B5=E5=92=8C?= =?UTF-8?q?=E7=9C=81=E4=BB=BD=E7=BB=B4=E5=BA=A6=203=E3=80=81=E6=A2=A6?= =?UTF-8?q?=E7=89=8C=E5=9C=A8=E6=98=8E=E7=BB=86=E6=B1=87=E6=80=BB=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=8C=BA=E5=9F=9F=E5=85=AC=E5=8F=B8=204=E3=80=81?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=B1=87=E6=80=BBsql=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SaleDataSyncServiceImpl.class | Bin 25650 -> 26217 bytes .../compileJava/previous-compilation-data.bin | Bin 9392556 -> 9392561 bytes .../WaterproofPaintAccountsReceivableJob.java | 2 +- .../impl/PurchaseDataSummaryServiceImpl.java | 432 +++++++++++++- .../impl/SaleDataSummaryServiceImpl.java | 551 ++++++++++-------- .../service/impl/SaleDataSyncServiceImpl.java | 31 +- .../apps/bnbm/datalinkup/util/SaleUtil.java | 18 + 7 files changed, 759 insertions(+), 275 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/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 377012e49898b210358ad5ce95c3c46ef72b0675..9d8e4987a84f960f5765a33616f504e4217f121d 100644 GIT binary patch delta 7615 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 delta 7143 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 delta 744 zcmXZROGuLe0Kjp-^?m!yT7GG@N>lrq&sjO`X=P5ErK#1NsXfh1ElqpdQ*F~N^X(4F zz{G+;@Zj2E#8_Z3p@WBL;-y;{odml@m;OPAAN=9(eH#>~G3-zR#(7U=K maps = DBSql.getMaps("SELECT QYGS, FCUSTNAME, SQ AS FPROVINCE,CS AS FCITY FROM " + - section.getYsdTable() + " GROUP BY QYGS, FCUSTNAME, SQ,CS"); + section.getYsdTable() + " WHERE QYGS IS NOT NULL GROUP BY QYGS, FCUSTNAME, SQ,CS"); if (maps == null || maps.isEmpty()) { LOGGER.warn("{}板块未查询到销售组织和客户数据", sectionName); 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 0ceff8b..39a3708 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 @@ -81,29 +81,41 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { String startDate = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern("yyyy-mm-dd")); // 1. 计算并保存各板块物料采购总额、总量、单价(按月存储) // monthlyMaterialSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); -// newmonthlyMaterialSummaryBySegment(startDate, bkgs, distinctList); + newmonthlyMaterialSummaryBySegment(startDate, bkgs, distinctList); // 2. 根据年月汇总板块、基地、年月、当期、上期、同期数据 // monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); + newmonthlyBaseSummaryBySegment(startDate, bkgs, distinctList); // 3. 计算并保存各板块物料采购总额、总量、单价(按日存储) // dailyMaterialSummaryBySegment(year, month, day, currentDate, bkgs, distinctList); + newdailyMaterialSummaryBySegment(startDate, bkgs, distinctList); // 4. 根据日期、入库单号、物料名称分页查询 日期、入库单号、物料编码、物料名称、规格型号、 // (汇总)入库数量、单位、入库单价、(汇总)入库金额、供应商、订单编号、库存数 // dailyWarehousingSummary(year, month, day, currentDate, bkgs, distinctList); - calculateForCurrentDate(bkgs, distinctList); + newdailyWarehousingSummary(startDate, bkgs, distinctList); + +// calculateForCurrentDate(bkgs, distinctList); } else { LOGGER.info("开始执行采购数据多维度汇总计算(时间范围: {} 至 {})", dateRange.getStartDate(), dateRange.getEndDate()); String startDate = DATE_FORMAT.format(dateRange.getStartDate()); //计算并保存各板块物料采购总额、总量、单价(按月存储) -// newmonthlyMaterialSummaryBySegment(startDate, bkgs, distinctList); + newmonthlyMaterialSummaryBySegment(startDate, bkgs, distinctList); + //根据年月汇总板块、基地、年月、当期、上期、同期数据 + newmonthlyBaseSummaryBySegment(startDate, bkgs, distinctList); + //计算并保存各板块物料采购总额、总量、单价(按日存储) + newdailyMaterialSummaryBySegment(startDate, bkgs, distinctList); + // 4. 根据日期、入库单号、物料名称分页查询 日期、入库单号、物料编码、物料名称、规格型号、 + // (汇总)入库数量、单位、入库单价、(汇总)入库金额、供应商、订单编号、库存数 + newdailyWarehousingSummary(startDate, bkgs, distinctList); + // 计算月度维度数据(按月遍历) - calculateMonthlyData(dateRange, bkgs, distinctList); +// calculateMonthlyData(dateRange, bkgs, distinctList); // 计算日度维度数据(按天遍历) - calculateDailyData(dateRange, bkgs, distinctList); +// calculateDailyData(dateRange, bkgs, distinctList); LOGGER.info("采购数据多维度汇总计算完成"); } @@ -114,6 +126,362 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { } } + /** + * 根据日期、入库单号、物料名称分页查询 日期、入库单号、物料编码、物料名称、规格型号、 + * @param startDate + * @param bkgs + * @param distinctList + */ + private void newdailyWarehousingSummary(String startDate, String bkgs, List distinctList) { + LOGGER.info("开始计算{}入库明细日度汇总数据,板块公司:{}", startDate, bkgs); + + try { + // 1. 删除该日期已存在的汇总数据(避免重复) + String deleteSql = "DELETE FROM BO_EU_CG_NYRKMX WHERE BKGS = ? AND DATE >= ?"; + int update = DBSql.update(deleteSql, new Object[]{bkgs, startDate}); + LOGGER.info("已清理{}的旧入库明细数据", startDate); + LOGGER.info("采购_年月入库明细:{}物料采购月度汇总数据,板块公司:{},删除了{}条数据", startDate, bkgs, update); + + // 2. 计算总记录数用于分页 + String countSql = "SELECT COUNT(1) AS total FROM " + BO_EU_DWD_ORDER_RKD_HZ + " " + + "WHERE BKGS = ? AND DATE(DJRQ) >= ?"; + RowMap countResult = DBSql.getMap(countSql, bkgs, startDate); + int totalCount = countResult.getInt("total"); + LOGGER.info("共查询到{}条入库记录需要处理", totalCount); + + if (totalCount == 0) { + LOGGER.info("无入库数据需要处理,跳过"); + return; + } + + // 3. 分页处理数据 + int pageSize = 10000; + int totalPages = (int) Math.ceil((double) totalCount / pageSize); + LOGGER.info("开始分页处理入库数据,共{}页", totalPages); + + for (int page = 0; page < totalPages; page++) { + int offset = page * pageSize; + LOGGER.debug("正在处理第{}页入库数据,偏移量:{}", page + 1, offset); + String querySql = "SELECT BKGS, YEARMONTH, DJRQ, DJH, WLMC, WLBM, GGXH, SLGC, SUM(RKSL) AS RKSL, " + + " JLDW, HSDJHYF, SUM(JSHJHYF) AS JSHJHYF, GYSNAME, CGDDH, DHJE " + + "FROM "+BO_EU_DWD_ORDER_RKD_HZ+" WHERE BKGS = ? AND DATE(DJRQ) >= ? " + + "GROUP BY YEARMONTH,DJH,WLMC " + + "ORDER BY DJRQ LIMIT ? OFFSET ?"; + + List pageData = DBSql.getMaps(querySql, bkgs, startDate, pageSize, offset); + LOGGER.debug("第{}页查询到{}条记录", page + 1, pageData.size()); + + // 转换并批量插入数据 + List bos = new ArrayList<>(); + for (RowMap row : pageData) { + BO detailBO = new BO(); + detailBO.set("DATE", row.getDate("DJRQ")); // 入库日期 + detailBO.set("RKDH", row.getString("DJH")); // 入库单号 + detailBO.set("WLBM", row.getString("WLBM")); // 物料编码 + String wlmc = row.getString("WLMC"); + detailBO.set("WLMC", wlmc); // 物料名称 + detailBO.set("GGXH", row.getString("GGXH")); // 规格型号 + detailBO.set("GC", row.getString("SLGC")); // 收料工厂 + detailBO.set("RKSL", row.getDouble("RKSL")); // 入库数量 + detailBO.set("DW", row.getString("JLDW")); // 单位 + if ("泰山石膏".equals(bkgs)) { + detailBO.set("RKDJ", row.getDouble("HSDJHYF")); // 入库单价(含税单价含运费) + detailBO.set("RKJE", row.getDouble("DHJE")); // 入库金额(金额含运费) + }else { + detailBO.set("RKDJ", row.getDouble("HSDJHYF")); // 入库单价(含税单价含运费) + detailBO.set("RKJE", row.getDouble("JSHJHYF")); // 入库金额(金额含运费) + } + detailBO.set("GYS", row.getString("GYSNAME")); // 供应商 + detailBO.set("DDBH", row.getString("CGDDH")); // 订单编号 + detailBO.set("KCS", 0.00); // 库存数(默认为0,需后续计算) + detailBO.set("BKGS", bkgs); // 板块公司 + String yearmonth = String.format("%04d-%02d", row.getString("YEARMONTH")); + detailBO.set("YEARMONTH", yearmonth); // 年月 + bos.add(detailBO); + } + // 批量插入当前页数据 + if (!bos.isEmpty()) { + SDK.getBOAPI().createDataBO(BO_EU_CG_NYRKMX, bos, UserContext.fromUID("admin")); + LOGGER.debug("入库明细日度汇总数据,板块公司:{}, 第{}页数据插入成功,共{}条,数量总共{}条", + bkgs, page + 1, bos.size(),totalCount); + } + } + + LOGGER.info("{}开始入库明细日度汇总完成,共处理{}条数据", startDate, totalCount); + } catch (Exception e) { + String errorMsg = String.format("日度入库明细汇总失败(日期=%s,板块=%s): %s", + startDate, bkgs, e.getMessage()); + LOGGER.error(errorMsg, e); + throw new RuntimeException(errorMsg, e); + } + } + + /** + * 计算并保存各板块物料采购总额、总量、单价(按日存储) + * @param startDate + * @param bkgs + * @param distinctList + */ + private void newdailyMaterialSummaryBySegment(String startDate, String bkgs, List distinctList) { + try { + // 格式化日期字符串 (yyyy-MM-dd) + LOGGER.info("开始计算{}物料采购日度汇总数据,板块公司:{}", startDate, bkgs); + + // 1. 删除该日期已存在的汇总数据 + String deleteSql = "DELETE FROM " + PROCUREMENT_DETAILS_YEAR_MONTH_DAY + + " WHERE BKGS = ? AND RQ >= ?"; + int update = DBSql.update(deleteSql, new Object[]{bkgs, startDate}); + LOGGER.info("采购_年月日采购明细:{}物料采购月度汇总数据,板块公司:{},删除了{}条数据", startDate, bkgs, update); + + String querySql = "SELECT BKGS,DJRQ,WLMC, SUM(DHJE) AS tstotalAmount,SUM(JSHJHYF) AS lptotalAmount,SUM(RKSL) AS totalQuantity" + + "FROM BO_EU_DWD_ORDER_RKD_HZ WHERE BKGS = ? AND DJRQ >= ?" + + "GROUP BY WLMC,DJRQ" + + "ORDER BY DJRQ"; + List dailyData = DBSql.getMaps(querySql, bkgs, startDate); + // 批量插入 + if (dailyData==null){ + return; + } + List bos = new ArrayList<>(); + for (RowMap row : dailyData) { + String bkgs1 = row.getString("BKGS"); + String wlmc = row.getString("WLMC"); + String djrq = row.getString("DJRQ"); + Double totalQuantity = row.getDouble("totalQuantity"); + double safeTotalQuantity = totalQuantity != null ? totalQuantity : 0.0; + Double totalAmount = 0.0; + double avgPrice = 0.0; + BO summaryBO = new BO(); + summaryBO.set("BKGS", bkgs1); + summaryBO.set("WLMC", wlmc); + summaryBO.set("RQ", djrq); + if (bkgs1.equals("泰山石膏")){ + totalAmount = row.getDouble("tstotalAmount"); + double safeTotalAmount = totalAmount != null ? totalAmount : 0.0; + if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) { + double adjustedQuantity = safeTotalQuantity / 1000; + summaryBO.set("CGZL", adjustedQuantity); + if (safeTotalAmount != 0 && adjustedQuantity != 0) { + avgPrice = safeTotalAmount / adjustedQuantity; + } + } else { + summaryBO.set("CGZL", safeTotalQuantity); + if (safeTotalAmount != 0 && safeTotalQuantity != 0) { + avgPrice = safeTotalAmount / safeTotalQuantity; + } + } + summaryBO.set("CGZE", safeTotalAmount); + }else { + totalAmount = row.getDouble("lptotalAmount"); + double safeTotalAmount = totalAmount != null ? totalAmount : 0.0; + if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) { + double adjustedQuantity = safeTotalQuantity / 1000; + summaryBO.set("CGZL", adjustedQuantity); + if (safeTotalAmount != 0 && adjustedQuantity != 0) { + avgPrice = safeTotalAmount / adjustedQuantity; + } + } else { + summaryBO.set("CGZL", safeTotalQuantity); + if (safeTotalAmount != 0 && safeTotalQuantity != 0) { + avgPrice = safeTotalAmount / safeTotalQuantity; + } + } + summaryBO.set("CGZE", safeTotalAmount); + } + summaryBO.set("PJDJ", avgPrice); + bos.add(summaryBO); + } + if (!bos.isEmpty()) { + SDK.getBOAPI().createDataBO(PROCUREMENT_DETAILS_YEAR_MONTH_DAY, bos, UserContext.fromUID("admin")); + } + + LOGGER.info("成功保存{}条日度汇总数据,板块:{}", bos.size(), bkgs); + } catch (Exception e) { + String errorMsg = String.format("日度汇总计算失败(日期=%s,板块=%s): %s", startDate, bkgs, e.getMessage()); + LOGGER.error(errorMsg, e); + throw new RuntimeException(errorMsg, e); + } + } + + /** + * 根据年月汇总板块、基地、年月、当期、上期、同期数据 + * @param startDate + * @param bkgs + * @param distinctList + */ + private void newmonthlyBaseSummaryBySegment(String startDate, String bkgs, List distinctList) { + try { + LOGGER.info("开始计算{}物料采购各基地月度汇总数据,板块公司:{}", startDate, bkgs); + + // 1. 删除该月份已存在的汇总数据(避免重复) + String deleteSql = "DELETE FROM " + JD_PROCUREMENT_DETAILS_YEAR_MONTH + + " WHERE BKGS = ? AND YEARMONTH >= ?"; + int update = DBSql.update(deleteSql, new Object[]{bkgs, startDate}); + LOGGER.info("采购_基地_年月采购明细:{}物料采购月度汇总数据,板块公司:{},删除了{}条数据", startDate, bkgs, update); + + String currentMonthSql = "SELECT c.BKGS,c.DJRQ,c.YEARMONTH,c.WLMC,c.SLGC,c.tstotalAmount,c.lptotalAmount,c.totalQuantity," + + " ly.tstotalAmount AS ly_tstotalAmount,ly.lptotalAmount AS ly_lptotalAmount,ly.totalQuantity AS ly_totalQuantity," + + " lm.tstotalAmount AS lm_tstotalAmount,lm.lptotalAmount AS lm_lptotalAmount,lm.totalQuantity AS lm_totalQuantity " + + "FROM (" + + " SELECT BKGS,MAX(DJRQ) AS DJRQ,YEARMONTH,WLMC,SLGC,SUM(DHJE) AS tstotalAmount," + + " SUM(JSHJHYF) AS lptotalAmount,SUM(RKSL) AS totalQuantity,YEAR(DJRQ) AS Year,MONTH(DJRQ) AS Month " + + " FROM BO_EU_DWD_ORDER_RKD_HZ " + + " WHERE BKGS = ? AND DJRQ >= ? " + + " GROUP BY WLMC, SLGC, YEARMONTH" + + " ) c LEFT JOIN (" + + " SELECT WLMC,SLGC,SUM(DHJE) AS tstotalAmount,SUM(JSHJHYF) AS lptotalAmount, " + + " SUM(RKSL) AS totalQuantity,YEAR(DJRQ) AS Year,MONTH(DJRQ) AS Month " + + " FROM BO_EU_DWD_ORDER_RKD_HZ " + + " WHERE BKGS = ? AND DJRQ >= DATE_SUB(?, INTERVAL 1 YEAR)" + + " GROUP BY WLMC, SLGC, YEAR(DJRQ), MONTH(DJRQ) " + + ") ly ON c.WLMC = ly.WLMC AND c.SLGC = ly.SLGC AND c.Month = ly.Month AND ly.Year = c.Year - 1 " + + " LEFT JOIN ( " + + " SELECT WLMC,SLGC,SUM(DHJE) AS tstotalAmount,SUM(JSHJHYF) AS lptotalAmount,SUM(RKSL) AS totalQuantity, " + + " YEAR(DJRQ) AS Year,MONTH(DJRQ) AS Month " + + " FROM BO_EU_DWD_ORDER_RKD_HZ " + + " WHERE BKGS = ? AND DJRQ >= DATE_SUB(?, INTERVAL 1 MONTH)" + + " GROUP BY WLMC, SLGC, YEAR(DJRQ), MONTH(DJRQ) " + + ") lm ON c.WLMC = lm.WLMC AND c.SLGC = lm.SLGC " + + " AND ((c.Month > 1 AND c.Year = lm.Year AND c.Month = lm.Month + 1) OR (c.Month = 1 AND c.Year = lm.Year + 1 AND lm.Month = 12)) " + + "ORDER BY c.YEARMONTH"; + List currentMonthData = DBSql.getMaps(currentMonthSql, bkgs, startDate, bkgs, startDate,bkgs, startDate); + + if (currentMonthData==null){ + return; + } + + // 5. 批量插入 + List bos = new ArrayList<>(); + for (RowMap currentMonthRow : currentMonthData) { + String base = currentMonthRow.getString("SLGC"); + String wlmc = currentMonthRow.getString("WLMC"); + String bkgs1 = currentMonthRow.getString("BKGS"); + String yearMonth = currentMonthRow.getString("YEARMONTH"); + BO summaryBO = new BO(); + summaryBO.set("BKGS", bkgs1); + summaryBO.set("JD", base); + summaryBO.set("WLMC",wlmc); + summaryBO.set("YEARMONTH", yearMonth); + double avgPrice = 0.0; + double lyavgPrice = 0.0; + double lmavgPrice = 0.0; + if (bkgs1.equals("泰山石膏")) { + double totalAmount = currentMonthRow.getDouble("tstotalAmount"); + double lytotalAmount = currentMonthRow.getDouble("ly_tstotalAmount"); + double lmtotalAmount = currentMonthRow.getDouble("lm_tstotalAmount"); + double totalQuantity = 0.00; + double lytotalQuantity = 0.00; + double lmtotalQuantity = 0.00; + if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) { + totalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("totalQuantity")) + .divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); + lytotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("ly_totalQuantity")) + .divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); + lmtotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("lm_totalQuantity")) + .divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); + summaryBO.set("CGZL", totalQuantity); + summaryBO.set("TQCGZL", lytotalQuantity); + summaryBO.set("SQCGZL", lmtotalQuantity); + }else { + totalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("totalQuantity")).doubleValue(); + lytotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("ly_totalQuantity")).doubleValue(); + lmtotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("lm_totalQuantity")).doubleValue(); + summaryBO.set("CGZL", totalQuantity); + summaryBO.set("TQCGZL", lytotalQuantity); + summaryBO.set("SQCGZL", lmtotalQuantity); + } + // 添加除数非零检查 + if (totalAmount != 0 && totalQuantity != 0) { + avgPrice = BigDecimal.valueOf(totalAmount) + .divide(BigDecimal.valueOf(totalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); + } else { + avgPrice = 0; + } + //同期 + if (lytotalAmount != 0 && lytotalQuantity != 0) { + lyavgPrice = BigDecimal.valueOf(totalAmount) + .divide(BigDecimal.valueOf(totalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); + } else { + lyavgPrice = 0; + } + //上期 + if (lmtotalAmount != 0 && lmtotalQuantity != 0) { + lmavgPrice = BigDecimal.valueOf(totalAmount) + .divide(BigDecimal.valueOf(totalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); + } else { + lmavgPrice = 0; + } + summaryBO.set("CGZE", totalAmount); + summaryBO.set("TQCGZE", lytotalAmount); + summaryBO.set("SQCGZE", lmtotalAmount); + }else { + double totalAmount = currentMonthRow.getDouble("lptotalAmount"); + double lytotalAmount = currentMonthRow.getDouble("ly_lptotalAmount"); + double lmtotalAmount = currentMonthRow.getDouble("lm_lptotalAmount"); + double totalQuantity = 0.00; + double lytotalQuantity = 0.00; + double lmtotalQuantity = 0.00; + if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) { + totalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("totalQuantity")) + .divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); + lytotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("ly_totalQuantity")) + .divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); + lmtotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("lm_totalQuantity")) + .divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); + summaryBO.set("CGZL", totalQuantity); + summaryBO.set("TQCGZL", lytotalQuantity); + summaryBO.set("SQCGZL", lmtotalQuantity); + }else { + totalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("totalQuantity")).doubleValue(); + lytotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("ly_totalQuantity")).doubleValue(); + lmtotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("lm_totalQuantity")).doubleValue(); + summaryBO.set("CGZL", totalQuantity); + summaryBO.set("TQCGZL", lytotalQuantity); + summaryBO.set("SQCGZL", lmtotalQuantity); + } + // 添加除数非零检查 + if (totalAmount != 0 && totalQuantity != 0) { + avgPrice = BigDecimal.valueOf(totalAmount) + .divide(BigDecimal.valueOf(totalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); + } else { + avgPrice = 0; + } + //同期 + if (lytotalAmount != 0 && lytotalQuantity != 0) { + lyavgPrice = BigDecimal.valueOf(totalAmount) + .divide(BigDecimal.valueOf(totalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); + } else { + lyavgPrice = 0; + } + //上期 + if (lmtotalAmount != 0 && lmtotalQuantity != 0) { + lmavgPrice = BigDecimal.valueOf(totalAmount) + .divide(BigDecimal.valueOf(totalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); + } else { + lmavgPrice = 0; + } + summaryBO.set("CGZE", totalAmount); + summaryBO.set("TQCGZE", lytotalAmount); + summaryBO.set("SQCGZE", lmtotalAmount); + } + summaryBO.set("PJDJ", avgPrice); + summaryBO.set("SQPJDJ", lmavgPrice); + summaryBO.set("TQPJDJ", lyavgPrice); + bos.add(summaryBO); + } + if (!bos.isEmpty()) { + // 批量插入数据 + SDK.getBOAPI().createDataBO(JD_PROCUREMENT_DETAILS_YEAR_MONTH, bos, UserContext.fromUID("admin")); + } + LOGGER.info("成功保存{}条月度基地汇总数据,板块:{}", bos.size(), bkgs); + + } catch (Exception e) { + String errorMsg = String.format("月度基地汇总计算失败(开始时间=%s,板块=%s): %s", startDate, bkgs, e.getMessage()); + LOGGER.error(errorMsg, e); + throw new RuntimeException(errorMsg, e); + } + } + /** * 计算并保存各板块物料采购总额、总量、单价(按月存储) * 逻辑:按物料名称(WLMC)分组,计算月度采购总额(SUM(JSHJ))、采购总量(SUM(YSSL))和平均单价(采购总额/采购总量) @@ -131,33 +499,33 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { int update = DBSql.update(deleteSql, new Object[]{bkgs, startDate}); LOGGER.info("采购_年月采购明细:{}物料采购月度汇总数据,板块公司:{},删除了{}条数据",startDate, bkgs, update); - String currentMonthSql = "SELECT CONCAT(YEAR(DJRQ), '-', LPAD(MONTH(DJRQ), 2, '0')) ASyear_month,c.Year AS year,c.Month AS month,c.WLMC AS WLMC," + + String currentMonthSql = "SELECT CONCAT(c.Year, '-', LPAD(c.Month, 2, '0')) ASyear_month,c.Year AS year,c.Month AS month,c.WLMC AS WLMC," + " c.tstotalAmount AS tstotalAmount,c.lptotalAmount AS lptotalAmount,c.totalQuantity AS totalQuantity," + " ly.tstotalAmount AS LY_tstotalAmount,ly.lptotalAmount AS LY_lptotalAmount,ly.totalQuantity AS LY_totalQuantity," + " lm.tstotalAmount AS LM_tstotalAmount,lm.lptotalAmount AS LM_lptotalAmount,lm.totalQuantity AS LM_totalQuantity" + - " FROM (" + - " SELECT WLMC,SUM(DHJE) AS tstotalAmount,SUM(JSHJHYF) AS lptotalAmount,SUM(RKSL) AS totalQuantity,YEAR(DJRQ) AS Year,MONTH(DJRQ) AS Month" + - " FROM BO_EU_DWD_ORDER_RKD_HZ" + - " WHERE BKGS = ? AND DJRQ >= DATE_FORMAT(DATE_SUB(?, INTERVAL 1 YEAR), '%Y-%m-%d')" + - " GROUP BY WLMC, YEAR(DJRQ), MONTH(DJRQ)" + - " ) c" + + "FROM (" + + " SELECT WLMC,SUM(DHJE) AS tstotalAmount,SUM(JSHJHYF) AS lptotalAmount,SUM(RKSL) AS totalQuantity," + + " YEAR(DJRQ) AS Year,MONTH(DJRQ) AS Month" + + " FROM BO_EU_DWD_ORDER_RKD_HZ" + + " WHERE BKGS = ? AND DJRQ >= DATE_SUB( ? , INTERVAL 1 YEAR)" + + " GROUP BY WLMC, YEAR(DJRQ), MONTH(DJRQ)" + + " ) c LEFT JOIN (" + + " SELECT WLMC,SUM(DHJE) AS tstotalAmount,SUM(JSHJHYF) AS lptotalAmount,SUM(RKSL) AS totalQuantity," + + " YEAR(DJRQ) AS Year,MONTH(DJRQ) AS Month" + + " FROM BO_EU_DWD_ORDER_RKD_HZ" + + " WHERE BKGS = ? AND DJRQ >= DATE_SUB( ? , INTERVAL 2 YEAR)" + + " GROUP BY WLMC, YEAR(DJRQ), MONTH(DJRQ)" + + " ) ly ON c.WLMC = ly.WLMC AND c.Month = ly.Month AND ly.Year = c.Year - 1" + " LEFT JOIN (" + " SELECT WLMC,SUM(DHJE) AS tstotalAmount,SUM(JSHJHYF) AS lptotalAmount,SUM(RKSL) AS totalQuantity," + - " YEAR(DJRQ) AS Year,MONTH(DJRQ) AS Month" + + " YEAR(DJRQ) AS Year,MONTH(DJRQ) AS Month" + " FROM BO_EU_DWD_ORDER_RKD_HZ" + - " WHERE BKGS = ? AND DJRQ >= DATE_FORMAT(DATE_SUB(?, INTERVAL 1 YEAR), '%Y-%m-%d')" + + " WHERE BKGS = ? AND DJRQ >= DATE_SUB(?, INTERVAL 1 YEAR)" + " GROUP BY WLMC, YEAR(DJRQ), MONTH(DJRQ)" + - ") ly ON c.WLMC = ly.WLMC AND c.Month = ly.Month AND ly.Year = c.Year - 1" + - " LEFT JOIN (" + - " SELECT WLMC,SUM(DHJE) AS tstotalAmount,SUM(JSHJHYF) AS lptotalAmount,SUM(RKSL) AS totalQuantity," + - " YEAR(DJRQ) AS Year,MONTH(DJRQ) AS Month" + - " FROM BO_EU_DWD_ORDER_RKD_HZ" + - " WHERE BKGS = ? AND DJRQ >= DATE_FORMAT(DATE_SUB(?, INTERVAL 1 YEAR), '%Y-%m-%d')" + - " GROUP BY WLMC, YEAR(DJRQ), MONTH(DJRQ)" + - ") lm ON c.WLMC = lm.WLMC" + - " AND ( (c.Month > 1 AND c.Year = lm.Year AND c.Month = lm.Month + 1) OR(c.Month = 1 AND c.Year = lm.Year + 1 AND lm.Month = 12))" + - "WHERE c.Year = YEAR(?)" + - "ORDER BY c.Year, c.Month"; + " ) lm ON c.WLMC = lm.WLMC" + + " AND ((c.Month > 1 AND c.Year = lm.Year AND c.Month = lm.Month + 1)" + + " OR (c.Month = 1 AND c.Year = lm.Year + 1 AND lm.Month = 12))" + + "WHERE c.Year = YEAR(?) ORDER BY c.Year, c.Month"; List currentMonthData = DBSql.getMaps(currentMonthSql, bkgs, startDate,bkgs,startDate,bkgs,startDate,startDate); if (currentMonthData==null){ @@ -287,17 +655,17 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { Date currentDate = new Date(System.currentTimeMillis()); // 1. 计算并保存各板块物料采购总额、总量、单价(按月存储) - monthlyMaterialSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); +// monthlyMaterialSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); // 2. 根据年月汇总板块、基地、年月、当期、上期、同期数据 - monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); +// monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); // 3. 计算并保存各板块物料采购总额、总量、单价(按日存储) - dailyMaterialSummaryBySegment(year, month, day, currentDate, bkgs, distinctList); +// dailyMaterialSummaryBySegment(year, month, day, currentDate, bkgs, distinctList); // 4. 根据日期、入库单号、物料名称分页查询 日期、入库单号、物料编码、物料名称、规格型号、 // (汇总)入库数量、单位、入库单价、(汇总)入库金额、供应商、订单编号、库存数 - dailyWarehousingSummary(year, month, day, currentDate, bkgs, distinctList); +// dailyWarehousingSummary(year, month, day, currentDate, bkgs, distinctList); } @@ -338,7 +706,7 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { // monthlyMaterialSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); // 2. 根据年月汇总板块、基地、年月、当期、上期、同期数据 - monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); +// monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); // 移动到下个月 monthCal.add(Calendar.MONTH, 1); @@ -364,11 +732,11 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { LOGGER.info("计算日度汇总数据: {}-{}-{}", year, month, day); // 计算并保存各板块物料采购总额、总量、单价(按日存储) - dailyMaterialSummaryBySegment(year, month, day, currentDate, bkgs, distinctList); +// dailyMaterialSummaryBySegment(year, month, day, currentDate, bkgs, distinctList); // 根据日期、入库单号、物料名称分页查询 日期、入库单号、物料编码、物料名称、规格型号、 //(汇总)入库数量、单位、入库单价、(汇总)入库金额、供应商、订单编号、库存数 - dailyWarehousingSummary(year, month, day, currentDate, bkgs, distinctList); +// dailyWarehousingSummary(year, month, day, currentDate, bkgs, distinctList); // 下一天 dayCal.add(Calendar.DATE, 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/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 258ff92..79f0b26 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 @@ -8,6 +8,7 @@ import com.actionsoft.bpms.util.UtilDate; import com.actionsoft.sdk.local.SDK; import com.awspaas.user.apps.bnbm.datalinkup.entity.DateRange; import com.awspaas.user.apps.bnbm.datalinkup.service.DataSummaryService; +import com.awspaas.user.apps.bnbm.datalinkup.util.SaleUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -174,66 +175,83 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { + " 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"; + HashMap sfMap = new HashMap<>(); + sfMap.put("新疆维吾尔自治区","SQ LIKE '%新疆%' "); + sfMap.put("海南省","SQ LIKE '%海南%' "); + sfMap.put("西藏自治区","SQ LIKE '%西藏%' "); + sfMap.put("一体化","SQ LIKE '%新疆%' OR SQ LIKE '%海南%' OR SQ LIKE '%西藏%') "); + for (String key : sfMap.keySet()) { + // 获取省份简称 + String abbreviation = SaleUtil.getProvinceAbbreviation(key); + String sfSql = sfMap.get(key); - 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"); + String sql = "SELECT DZRQ,LB_1,LB_2,BKGS,SQ,SUM(XSSL) AS tssales, SUM(ZSSL) AS lpsales,SUM(SSJERMB) AS revenue" + + " FROM " +SALES_DETAIL_TABLE+ + " WHERE LB_1 IN ('石膏板', '轻钢龙骨', '涂料') AND ("+sfSql+")" + + " GROUP BY DZRQ,LB_1,BKGS ORDER BY DZRQ"; - 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)); + List maps = DBSql.getMaps(sql); + if (maps!=null){ + // 循环外先获取下公装家装、基材面材类别 + List gzjzList = SDK.getBOAPI().query("BO_EU_DATALINKUP_CPJZGZJCMC").orderBy("CPLB_L2").desc().list(); + 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"); + String lb_2 = map.getString("LB_2"); + + 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); } - }else { - // 计算单价(避免除零错误) - if (lpsales.compareTo(BigDecimal.ZERO) > 0) { - // 石膏板单位转换:万元/万平方米 → 元/平方米 - if ("石膏板".equals(lb_1)) { - unitPrice = revenue.divide(lpsales, 4, RoundingMode.HALF_UP); + 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)); } - // 轻钢龙骨单位:元/吨 - if ("轻钢龙骨".equals(lb_1)) { - unitPrice = revenue.divide(lpsales, 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("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)); + priceBO.set("REVENUE_AMOUNT", revenue.setScale(2, RoundingMode.HALF_UP)); + priceBO.set("UNIT_PRICE", unitPrice.setScale(2, RoundingMode.HALF_UP)); + priceBO.set("SHENGQU", abbreviation);//省区 + String[] gzjzStrings = SaleUtil.matchSingleField(bkgs, lb_1, lb_2, gzjzList, "其他", "其他","其他"); + priceBO.set("MC_JC", gzjzStrings[1]);//面材/基材 + priceBO.set("JZ_GZ", gzjzStrings[0]);//家装/工装 - list.add(priceBO); + list.add(priceBO); + } + SDK.getBOAPI().createDataBO(UNIT_PRICE_DAILY_TABLE,list,UserContext.fromUID("admin")); } - SDK.getBOAPI().createDataBO(UNIT_PRICE_DAILY_TABLE,list,UserContext.fromUID("admin")); } - LOGGER.info("产品单价日明细数据保存成功"); } catch (Exception e) { String errorMsg = String.format("产品单价日明细数据计算失败: %s", e.getMessage()); @@ -257,63 +275,75 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { + " 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)"; + //分别遍历省份 + HashMap sfMap = new HashMap<>(); + sfMap.put("新疆维吾尔自治区","SHENGQU IN ('新疆维吾尔自治区') "); + sfMap.put("海南省","SHENGQU IN ('海南') "); + sfMap.put("西藏自治区","SHENGQU IN ('西藏') "); + sfMap.put("一体化","SHENGQU IN ('新疆维吾尔自治区', '海南', '西藏') "); + for (String key : sfMap.keySet()) { + // 获取省份简称 + String abbreviation = SaleUtil.getProvinceAbbreviation(key); + String sfSql = sfMap.get(key); + 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 "+sfSql+"" + + " GROUP BY YEAR(RQ), MONTH(RQ)" + + " ORDER BY YEAR(RQ), MONTH(RQ)"; - List maps = DBSql.getMaps(sql, startDate, bkgs); + 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 // 重复时取新值 - )); + //查询去年数据 + 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"));//板块公司 + 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)));//同比变化率(%) + 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)));//同比变化率(%) + } } + bo.set("SHENGQU",abbreviation);//省区 + list.add(bo); } - list.add(bo); + SDK.getBOAPI().createDataBO(RECEIVABLE_YEAR_TABLE,list,UserContext.fromUID("admin")); } - SDK.getBOAPI().createDataBO(RECEIVABLE_YEAR_TABLE,list,UserContext.fromUID("admin")); } LOGGER.info("应收账款月度累计数据保存成功"); } catch (Exception e) { @@ -340,30 +370,43 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { + " 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"; + //分别遍历省份 + HashMap sfMap = new HashMap<>(); + sfMap.put("新疆维吾尔自治区","SHENGQU IN ('新疆维吾尔自治区') "); + sfMap.put("海南省","SHENGQU IN ('海南') "); + sfMap.put("西藏自治区","SHENGQU IN ('西藏') "); + sfMap.put("一体化","SHENGQU IN ('新疆维吾尔自治区', '海南', '西藏') "); + for (String key : sfMap.keySet()) { + // 获取省份简称 + String abbreviation = SaleUtil.getProvinceAbbreviation(key); + // 根据省份value值查询数据 + String sfSql = sfMap.get(key); + 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 "+sfSql+" " + + " 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."+sfSql+" " + + " 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); + 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"));//应收账款余额(万元) + bo.set("SHENGQU",abbreviation);//省区 + list.add(bo); + } + SDK.getBOAPI().createDataBO(RECEIVABLE_BRAND_MONTHLY_TABLE,list,UserContext.fromUID("admin")); } - SDK.getBOAPI().createDataBO(RECEIVABLE_BRAND_MONTHLY_TABLE,list,UserContext.fromUID("admin")); } LOGGER.info("应收账款品牌月明细数据保存成功"); } catch (Exception e) { @@ -388,51 +431,64 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { + " 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"); + //分别遍历省份 + HashMap sfMap = new HashMap<>(); + sfMap.put("新疆维吾尔自治区","SQ LIKE '%新疆%'"); + sfMap.put("海南省","SQ LIKE '%海南%'"); + sfMap.put("西藏自治区","SQ LIKE '%西藏%'"); + sfMap.put("一体化","SQ LIKE '%新疆%' OR SQ LIKE '%海南%' OR SQ LIKE '%西藏%'"); + for (String key : sfMap.keySet()) { + // 获取省份简称 + String abbreviation = SaleUtil.getProvinceAbbreviation(key); + // 根据省份value值查询数据 + String sfSql = sfMap.get(key); + 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 ("+sfSql+") " + + " 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)){ + 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", "其他"); - }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"));// 收入占比(%) + productBO.set("SHENGQU",abbreviation);// 省区 + list.add(productBO); } - 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")); } - SDK.getBOAPI().createDataBO(PRODUCT_MONTHLY_TABLE,list,UserContext.fromUID("admin")); } LOGGER.info("产品销售月明细数据保存成功"); @@ -457,35 +513,47 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { int delete = DBSql.update("DELETE FROM " + MATCHING_RATE_YEAR_TABLE + " WHERE YEARMONTH >= '" + yearMonth + "' AND BKGS = '"+bkgs+"'"); LOGGER.info("{}:准备同步{}产品配套率数据,删除了{}条数据",bkgs,yearMonth,delete); + //分别遍历省份 + HashMap sfMap = new HashMap<>(); + sfMap.put("新疆维吾尔自治区","SQ LIKE '%新疆%'"); + sfMap.put("海南省","SQ LIKE '%海南%'"); + sfMap.put("西藏自治区","SQ LIKE '%西藏%'"); + sfMap.put("一体化","SQ LIKE '%新疆%' OR SQ LIKE '%海南%' OR SQ LIKE '%西藏%'"); + for (String key : sfMap.keySet()) { + // 获取省份简称 + String abbreviation = SaleUtil.getProvinceAbbreviation(key); + // 根据省份value值查询数据 + String sfSql = sfMap.get(key); + 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 ("+sfSql+") AND LB_1 IN ('石膏板', '轻钢龙骨') " + + " GROUP BY YEAR(DZRQ), MONTH(DZRQ)" + + " ORDER BY year, month"; - 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); + 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")); + matchingRateBO.set("SHENGQU", abbreviation); + list.add(matchingRateBO); + } } + // 保存数据 + SDK.getBOAPI().createDataBO(MATCHING_RATE_YEAR_TABLE,list,UserContext.fromUID("admin")); } - // 保存数据 - SDK.getBOAPI().createDataBO(MATCHING_RATE_YEAR_TABLE,list,UserContext.fromUID("admin")); LOGGER.info("产品配套率月度累计数据保存成功"); } catch (Exception e) { String errorMsg = String.format("产品配套率月度累计数据计算失败: %s", e.getMessage()); @@ -498,32 +566,32 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { /** * 按当前日期计算(无时间范围时使用) */ - private void calculateForCurrentDate(String 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); - Date currentDate = new Date(System.currentTimeMillis()); - - // 1. 计算并保存产品配套率年度数据(按月存储) - calculateAndSaveMatchingRate(year, month, yearMonth, bkgs); - - // 2. 计算并保存产品销售月明细数据 - calculateAndSaveProductMonthly(year, month, yearMonth, bkgs); - - // 3. 计算并保存应收账款品牌月明细 - calculateAndSaveReceivableBrandMonthly(year, month, yearMonth, bkgs); - - // 4. 计算并保存应收账款年度汇总(按月存储) - calculateAndSaveReceivableYear(year, month, yearMonth, bkgs); - - // 5. 计算并保存营业收入年度汇总(按月存储) - calculateAndSaveRevenueYear(year, month, yearMonth, bkgs); - - // 6. 计算并保存产品单价日明细 - calculateAndSaveUnitPriceDaily(year, month, day, currentDate, bkgs); - } +// private void calculateForCurrentDate(String 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); +// Date currentDate = new Date(System.currentTimeMillis()); +// +// // 1. 计算并保存产品配套率年度数据(按月存储) +// calculateAndSaveMatchingRate(year, month, yearMonth, bkgs); +// +// // 2. 计算并保存产品销售月明细数据 +// calculateAndSaveProductMonthly(year, month, yearMonth, bkgs); +// +// // 3. 计算并保存应收账款品牌月明细 +// calculateAndSaveReceivableBrandMonthly(year, month, yearMonth, bkgs); +// +// // 4. 计算并保存应收账款年度汇总(按月存储) +// calculateAndSaveReceivableYear(year, month, yearMonth, bkgs); +// +// // 5. 计算并保存营业收入年度汇总(按月存储) +// calculateAndSaveRevenueYear(year, month, yearMonth, bkgs); +// +// // 6. 计算并保存产品单价日明细 +// calculateAndSaveUnitPriceDaily(year, month, day, currentDate, bkgs); +// } /** * 计算月度维度数据 @@ -849,26 +917,38 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { int lastYear = year - 1; int lastYearMonth = month; // 去年同月 - if (bkgs.equals("泰山石膏") || bkgs.equals("梦牌") || bkgs.equals("龙牌")) { - // 处理石膏板数据 - 当年当前月 - saveRevenueYearData(yearMonth, "石膏板", - getRevenueToMonth(year, month, "石膏板", bkgs), - getRevenueToMonth(lastYear, lastYearMonth, "石膏板", bkgs), - bkgs); + //分别遍历省份 + HashMap sfMap = new HashMap<>(); + sfMap.put("新疆维吾尔自治区","SQ LIKE '%新疆%' "); + sfMap.put("海南省","SQ LIKE '%海南%' "); + sfMap.put("西藏自治区","SQ LIKE '%西藏%' "); + sfMap.put("一体化","SQ LIKE '%新疆%' OR SQ LIKE '%海南%' OR SQ LIKE '%西藏%') "); + for (String key : sfMap.keySet()) { + // 获取省份简称 + String abbreviation = SaleUtil.getProvinceAbbreviation(key); + String sfSql = sfMap.get(key); + + if (bkgs.equals("泰山石膏") || bkgs.equals("梦牌") || bkgs.equals("龙牌")) { + // 处理石膏板数据 - 当年当前月 + saveRevenueYearData(yearMonth, "石膏板", + getRevenueToMonth(year, month, "石膏板", bkgs, sfSql), + getRevenueToMonth(lastYear, lastYearMonth, "石膏板", bkgs, sfSql), + bkgs,abbreviation); + } + + // 处理轻钢龙骨数据 - 当年当前月 + saveRevenueYearData(yearMonth, "轻钢龙骨", + getRevenueToMonth(year, month, "轻钢龙骨", bkgs,sfSql), + getRevenueToMonth(lastYear, lastYearMonth, "轻钢龙骨", bkgs,sfSql), + bkgs,abbreviation); + + // 处理涂料数据 - 当年1月到当前月 + saveRevenueYearData(yearMonth, "涂料", + getRevenueToMonth(year, month, "涂料", bkgs,sfSql), + getRevenueToMonth(lastYear, lastYearMonth, "涂料", bkgs,sfSql), + bkgs,abbreviation); } - // 处理轻钢龙骨数据 - 当年当前月 - saveRevenueYearData(yearMonth, "轻钢龙骨", - getRevenueToMonth(year, month, "轻钢龙骨", bkgs), - getRevenueToMonth(lastYear, lastYearMonth, "轻钢龙骨", bkgs), - bkgs); - - // 处理涂料数据 - 当年1月到当前月 - saveRevenueYearData(yearMonth, "涂料", - getRevenueToMonth(year, month, "涂料", bkgs), - getRevenueToMonth(lastYear, lastYearMonth, "涂料", bkgs), - bkgs); - LOGGER.info("营业收入月度累计数据保存成功"); } catch (Exception e) { String errorMsg = String.format("营业收入月度累计数据计算失败: %s", e.getMessage()); @@ -881,7 +961,7 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { * 保存营业收入月度累计数据 */ private void saveRevenueYearData(String yearMonth, String category, - BigDecimal currentRevenue, BigDecimal lastRevenue, String bkgs) { + BigDecimal currentRevenue, BigDecimal lastRevenue, String bkgs,String abbreviation) { BigDecimal yoy = calculateYoy(currentRevenue, lastRevenue); BO revenueBO = createBaseBO(bkgs); @@ -900,6 +980,7 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { revenueBO.set("REVENUE_AMOUNT", currentRevenue.setScale(2, RoundingMode.HALF_UP)); revenueBO.set("YOY_RATE", yoy.setScale(2, RoundingMode.HALF_UP)); + revenueBO.set("SHENGQU", abbreviation);//省区 saveSummaryData(revenueBO, REVENUE_YEAR_TABLE); } @@ -1049,7 +1130,7 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService { /** * 获取产品从1月到指定月份的累计营收 */ - private BigDecimal getRevenueToMonth(int year, int month, String category, String bkgs) { + private BigDecimal getRevenueToMonth(int year, int month, String category, String bkgs, String sfSql) { String sql = "SELECT SUM(SSJERMB) AS revenue " + "FROM " + SALES_DETAIL_TABLE + " " + // "WHERE YEAR(DZRQ) = '"+year+"' AND MONTH(DZRQ) BETWEEN 1 AND '"+month+"' AND LB_1 LIKE '%"+category+"%' AND BKGS = '"+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/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 7d51a84..5c7a5a2 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 @@ -756,6 +756,8 @@ public class SaleDataSyncServiceImpl implements DataSyncService { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String startDate = ""; String endDate = ""; + // 查询梦牌区域 + List mpqyList = SDK.getBOAPI().query("BO_EU_DATALINKUP_QYGSED").addQuery("BKGS = ", "梦牌").list(); try { do { if (startDated == null || endDated == null) { @@ -810,13 +812,28 @@ public class SaleDataSyncServiceImpl implements DataSyncService { } } //修改产量类型1 -// if ("龙牌".equals(map.getString("BKGS")) -// && ("装饰石膏板".equals(map.getString("LB_1")) || "鲁班装饰万能板".equals(map.getString("LB_1")))){ -// bo.set("LB_1","石膏板"); -// } else if ("泰山石膏".equals(map.getString("BKGS")) && ("装饰板".equals(map.getString("LB_1")))) { -// bo.set("LB_1","石膏板"); -// } - LOGGER.info("泰山应收的数据:{}",bo.toJSONObject()); + if ("龙牌".equals(map.getString("BKGS")) + && ("装饰石膏板".equals(map.getString("LB_1")) || "鲁班装饰万能板".equals(map.getString("LB_1")))){ + bo.set("LB_1","石膏板"); + } else if ("泰山石膏".equals(map.getString("BKGS")) && ("装饰板".equals(map.getString("LB_1")))) { + bo.set("LB_1","石膏板"); + } +// LOGGER.info("泰山应收的数据:{}",bo.toJSONObject()); + //销售汇总表修改区域公司 + if ("梦牌".equals(map.getString("BKGS")) && hzb.equals("BO_EU_BNBM_DATALINKUP_XS_XSL_HZ")){ + String cs = bo.getString("CS"); + String sq = bo.getString("SQ"); + for (BO bo1 : mpqyList) { + String ss = bo1.getString("SS"); + if (ss.contains(cs)){ + bo.set("QYGS",bo1.getString("QYGS")); + } else if (ss.contains(sq)) { + bo.set("QYGS",bo1.getString("QYGS")); + }else { + bo.set("QYGS","其他"); + } + } + } bos.add(bo); } 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/SaleUtil.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/util/SaleUtil.java index ba93f00..e9f90ad 100644 --- a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/util/SaleUtil.java +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/util/SaleUtil.java @@ -1,6 +1,7 @@ package com.awspaas.user.apps.bnbm.datalinkup.util; import com.actionsoft.bpms.bo.engine.BO; +import com.actionsoft.sdk.local.SDK; import java.util.List; @@ -63,4 +64,21 @@ public class SaleUtil { return 0; } + + /** + * 获取省份简称 + * @param sf 省份全称 + * @return + */ + public static String getProvinceAbbreviation(String sf) { + String sfjc = ""; + BO bo_eu_1755768181783 = SDK.getBOAPI().query("BO_EU_1755768181783").addQuery("F_D2IYKX5I = ", sf).detail(); + if (bo_eu_1755768181783==null){ + sfjc = "其他"; + }else { + sfjc = bo_eu_1755768181783.getString("SQ_SHORT"); + } + return sfjc; + } + }