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/job/SaleDataLinkUpJob.class b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/job/SaleDataLinkUpJob.class index 274d916..04d2fea 100644 Binary files a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/job/SaleDataLinkUpJob.class and b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/job/SaleDataLinkUpJob.class differ 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 ded2e71..8fd3751 100644 Binary files a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleCountDimensionImpl.class and b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleCountDimensionImpl.class differ 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 91b8f23..4a9d8dc 100644 Binary files a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.class and b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.class differ diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/tmp/compileJava/previous-compilation-data.bin b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/tmp/compileJava/previous-compilation-data.bin index 1354597..b98da5e 100644 Binary files a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/tmp/compileJava/previous-compilation-data.bin and b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/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 340f055..087566b 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 @@ -11,6 +11,7 @@ import com.awspaas.user.apps.bnbm.datalinkup.service.DataSummaryService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.sql.Array; import java.sql.Connection; import java.sql.SQLException; import java.text.SimpleDateFormat; @@ -75,6 +76,10 @@ public class SaleCountDimensionImpl implements DataSummaryService { if (dateRange == null || dateRange.getStartDate() == null || dateRange.getEndDate() == null) { LOGGER.info("未提供有效时间范围,按当前日期计算"); calculateForCurrentDate(bkgs); + // 处理营业收入数据 + newProcessRevenueData(dateRange,bkgs); + // 处理销量销额数据(分页查询) + newProcessSalesVolumeData(dateRange,bkgs); } else { LOGGER.info("开始执行销售数据多维度汇总计算(时间范围: {} 至 {})", dateRange.getStartDate(), dateRange.getEndDate()); @@ -82,6 +87,11 @@ public class SaleCountDimensionImpl implements DataSummaryService { // 计算月度维度数据(按月遍历) calculateMonthlyData(dateRange, bkgs); + // 处理营业收入数据 + newProcessRevenueData(dateRange,bkgs); + // 处理销量销额数据(分页查询) + newProcessSalesVolumeData(dateRange,bkgs); + LOGGER.info("销售数据多维度汇总计算完成"); } } catch (Exception e) { @@ -91,6 +101,178 @@ public class SaleCountDimensionImpl implements DataSummaryService { } } + /** + * 处理销量销额数据 + * @param dateRange 时间范围 + * @param bkgs 板块公司 + */ + private void newProcessSalesVolumeData(DateRange dateRange, String bkgs) { + LOGGER.info("开始处理销量销额数据,年月: {}-{}, 板块公司: {}", dateRange.getStartDate(),dateRange.getEndDate(), bkgs); + + // 删除已存在的记录 + String deleteSql = "DELETE FROM " + BO_EU_XS_XLXE + " 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 { + // 获取公司位置信息 + List companyList = DBSql.getMaps("SELECT GSMC,JD,WD FROM BO_EU_BNBM_DATALINKUP_GSJWD"); + Map resultMap = companyList.stream() + .filter(row -> row.get("GSMC") != null) + .collect(Collectors.toMap( + row -> row.get("GSMC").toString(), + row -> new Location( + row.get("JD") != null ? row.get("JD").toString() : null, + row.get("WD") != null ? row.get("WD").toString() : null + ), + (existing, replacement) -> existing + )); + + String querySql = "SELECT QYGS, KCZZ, LB_1, LB_2, LB_3, SQ, CS, QY, SUM(ZSSL) AS XL," + + " SUM(SSJERMB) AS XE, SUM(XSSL) AS TSXL, YEARMONTH" + + " FROM " + SALES_DETAIL_TABLE + + " WHERE DZRQ >= ? AND DZRQ < ? AND BKGS = ?" + + " GROUP BY QYGS, KCZZ, LB_1, LB_2, LB_3, SQ, CS, QY, YEARMONTH"; + + LOGGER.info("销量销额数据查询,SQL: {}", querySql); + List maps = DBSql.getMaps(querySql, DATE_FORMAT.format(dateRange.getStartDate()), + DATE_FORMAT.format(dateRange.getEndDate()), bkgs); + + if (maps.isEmpty()) { + LOGGER.info("销量销额数据无数据,停止查询"); + } else { + ArrayList bos = new ArrayList<>(); + for (RowMap map : maps) { + String gc = map.getString("KCZZ"); + String yearmonth = map.getString("YEARMONTH"); + BO bo = new BO(); + bo.set("YEARMONTH", yearmonth); + bo.set("BKGS", bkgs); + bo.set("QYGS", map.getString("QYGS")); + bo.set("GC", gc); + bo.set("LB_1", map.getString("LB_1")); + bo.set("LB_2", map.getString("LB_2")); + bo.set("LB_3", map.getString("LB_3")); + bo.set("SQ", map.getString("SQ")); + bo.set("CITY", map.getString("CS")); + bo.set("QX", map.getString("QY")); + if (resultMap.containsKey(gc)) { + Location location = resultMap.get(gc); + bo.set("JD", location.getLongitude()); + bo.set("WD", location.getLatitude()); + } + if ("石膏板".equals(map.getString("LB_1"))){ + bo.set("XL", map.getDouble("TSXL")); + }else { + bo.set("XL", map.getDouble("XL")); + } + bo.set("XE", map.getDouble("XE")); + bo.set("MC_JC", Math.random()%2==0?"面材":"基材"); + bo.set("JZ_GZ", Math.random()%2==0?"家装":"工装"); + bos.add(bo); + } + + // 批量新增BO + if (!bos.isEmpty()) { + int[] admins = SDK.getBOAPI().createDataBO(BO_EU_XS_XLXE, bos, UserContext.fromUID("admin")); + LOGGER.info("{}-销量销额数据处理完成,共查询除{}条记录,导入{}条", bkgs, bos.size(), admins[0]); + } + } + }catch (Exception e){ + LOGGER.error("销量销额-新增数据{}年月-{}板块数据错误,请检查数据库链接:{}", + YEAR_MONTH_FORMAT.format(dateRange.getStartDate()), bkgs,e.getMessage()); + throw e; + } + } + + /** + * 处理营业收入数据 + * @param dateRange 时间范围 + * @param bkgs 板块公司 + */ + private void newProcessRevenueData(DateRange dateRange, String bkgs) { + LOGGER.info("开始处理营业收入数据,年月: {}-{}, 板块公司: {}", dateRange.getStartDate(),dateRange.getEndDate(), bkgs); + + // 删除已存在的记录 + String deleteSql = "DELETE FROM " + BO_EU_XS_YESR + " 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 { + // 获取公司位置信息 + List companyList = DBSql.getMaps("SELECT GSMC,JD,WD FROM BO_EU_BNBM_DATALINKUP_GSJWD"); + Map resultMap = companyList.stream() + .filter(row -> row.get("GSMC") != null) + .collect(Collectors.toMap( + row -> row.get("GSMC").toString(), + row -> new Location( + row.get("JD") != null ? row.get("JD").toString() : null, + row.get("WD") != null ? row.get("WD").toString() : null + ), + (existing, replacement) -> existing + )); + + String querySql = "SELECT QYGS, KCZZ, LB_1, LB_2, LB_3, SQ, CS, QY, SUM(SSJERMB) as YYSR, YEARMONTH" + + " FROM " + SALES_DETAIL_TABLE + + " WHERE DZRQ >= ? AND DZRQ < ? AND BKGS = ?" + + " GROUP BY QYGS, KCZZ, LB_1, LB_2, LB_3, SQ, CS, QY, YEARMONTH"; + + LOGGER.info("营业收入数据查询,SQL: {}", querySql); + List maps = DBSql.getMaps(querySql, DATE_FORMAT.format(dateRange.getStartDate()), + DATE_FORMAT.format(dateRange.getEndDate()), bkgs); + + if (maps.isEmpty()) { + LOGGER.info("营业收入数据无数据,停止查询"); + } else { + ArrayList bos = new ArrayList<>(); + for (RowMap map : maps) { + String gc = map.getString("KCZZ"); + String yearmonth = map.getString("YEARMONTH"); + BO bo = new BO(); + bo.set("YEARMONTH", yearmonth); + bo.set("BKGS", bkgs); + bo.set("QYGS", map.getString("QYGS")); + bo.set("GC", gc); + bo.set("LB_1", map.getString("LB_1")); + bo.set("LB_2", map.getString("LB_2")); + bo.set("LB_3", map.getString("LB_3")); + bo.set("SQ", map.getString("SQ")); + bo.set("CITY", map.getString("CS")); + bo.set("QX", map.getString("QY")); + if (resultMap.containsKey(gc)) { + Location location = resultMap.get(gc); + bo.set("JD", location.getLongitude()); + bo.set("WD", location.getLatitude()); + } + bo.set("YYSR", map.getDouble("YYSR")); + bos.add(bo); + } + + // 批量新增BO + if (!bos.isEmpty()) { + int[] admins = SDK.getBOAPI().createDataBO(BO_EU_XS_YESR, bos, UserContext.fromUID("admin")); + LOGGER.info("{}-营业收入数据处理完成,共查询{}条记录,导入{}条", bkgs, bos.size(), admins[0]); + } + } + }catch (Exception e){ + LOGGER.error("营业收入-新增数据{}年月-{}板块数据错误,请检查数据库链接:{}", + YEAR_MONTH_FORMAT.format(dateRange.getStartDate()), bkgs,e.getMessage()); + throw e; + } + } + /** * 按当前日期计算(无时间范围时使用) */ @@ -129,12 +311,12 @@ public class SaleCountDimensionImpl implements DataSummaryService { processRegionTwoFundsRatio(conn, yearMonth, bkgs); // 1. 处理营业收入数据 - LOGGER.info("开始营业收入数据"); - processRevenueData(conn, yearMonth, bkgs); +// LOGGER.info("开始营业收入数据"); +// processRevenueData(conn, yearMonth, bkgs); // 2. 处理销量销额数据 - LOGGER.info("开始销量销额数据"); - processSalesVolumeData(conn, yearMonth, bkgs); +// LOGGER.info("开始销量销额数据"); +// processSalesVolumeData(conn, yearMonth, bkgs); // 3. 处理应收账款数据 LOGGER.info("开始应收账款数据");