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 85fc6ae..e542fe3 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/PurchaseDataSummaryServiceImpl.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/PurchaseDataSummaryServiceImpl.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/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 961d08f..97e0a6b 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/SaleDataSummaryServiceImpl.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/SaleDataSummaryServiceImpl.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 9d8e498..a2f633c 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 c4226a5..73ccecf 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/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 39a3708..db90f0d 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 @@ -9,12 +9,14 @@ 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.PurchaseUtil; import org.apache.commons.lang3.StringUtils; +import org.docx4j.org.apache.poi.util.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.math.BigDecimal; 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; @@ -74,27 +76,27 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { } // 获取物料分类列表(带缓存) - List distinctList = getDistinctMaterialList(); +// List distinctList = getDistinctMaterialList(); if (dateRange == null || dateRange.getStartDate() == null || dateRange.getEndDate() == null) { LOGGER.info("未提供有效时间范围,按当前日期计算"); 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); // 2. 根据年月汇总板块、基地、年月、当期、上期、同期数据 // monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); - newmonthlyBaseSummaryBySegment(startDate, bkgs, distinctList); + newmonthlyBaseSummaryBySegment(startDate, bkgs); // 3. 计算并保存各板块物料采购总额、总量、单价(按日存储) // dailyMaterialSummaryBySegment(year, month, day, currentDate, bkgs, distinctList); - newdailyMaterialSummaryBySegment(startDate, bkgs, distinctList); + newdailyMaterialSummaryBySegment(startDate, bkgs); // 4. 根据日期、入库单号、物料名称分页查询 日期、入库单号、物料编码、物料名称、规格型号、 // (汇总)入库数量、单位、入库单价、(汇总)入库金额、供应商、订单编号、库存数 // dailyWarehousingSummary(year, month, day, currentDate, bkgs, distinctList); - newdailyWarehousingSummary(startDate, bkgs, distinctList); + newdailyWarehousingSummary(startDate, bkgs); // calculateForCurrentDate(bkgs, distinctList); } else { @@ -102,14 +104,14 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { dateRange.getStartDate(), dateRange.getEndDate()); String startDate = DATE_FORMAT.format(dateRange.getStartDate()); //计算并保存各板块物料采购总额、总量、单价(按月存储) - newmonthlyMaterialSummaryBySegment(startDate, bkgs, distinctList); + newmonthlyMaterialSummaryBySegment(startDate, bkgs); //根据年月汇总板块、基地、年月、当期、上期、同期数据 - newmonthlyBaseSummaryBySegment(startDate, bkgs, distinctList); + newmonthlyBaseSummaryBySegment(startDate, bkgs); //计算并保存各板块物料采购总额、总量、单价(按日存储) - newdailyMaterialSummaryBySegment(startDate, bkgs, distinctList); + newdailyMaterialSummaryBySegment(startDate, bkgs); // 4. 根据日期、入库单号、物料名称分页查询 日期、入库单号、物料编码、物料名称、规格型号、 // (汇总)入库数量、单位、入库单价、(汇总)入库金额、供应商、订单编号、库存数 - newdailyWarehousingSummary(startDate, bkgs, distinctList); + newdailyWarehousingSummary(startDate, bkgs); // 计算月度维度数据(按月遍历) // calculateMonthlyData(dateRange, bkgs, distinctList); @@ -130,9 +132,9 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { * 根据日期、入库单号、物料名称分页查询 日期、入库单号、物料编码、物料名称、规格型号、 * @param startDate * @param bkgs - * @param distinctList + * @param */ - private void newdailyWarehousingSummary(String startDate, String bkgs, List distinctList) { + private void newdailyWarehousingSummary(String startDate, String bkgs) { LOGGER.info("开始计算{}入库明细日度汇总数据,板块公司:{}", startDate, bkgs); try { @@ -144,7 +146,7 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { // 2. 计算总记录数用于分页 String countSql = "SELECT COUNT(1) AS total FROM " + BO_EU_DWD_ORDER_RKD_HZ + " " + - "WHERE BKGS = ? AND DATE(DJRQ) >= ?"; + " WHERE BKGS = ? AND DATE(DJRQ) >= ?"; RowMap countResult = DBSql.getMap(countSql, bkgs, startDate); int totalCount = countResult.getInt("total"); LOGGER.info("共查询到{}条入库记录需要处理", totalCount); @@ -164,9 +166,9 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { 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 ?"; + " 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()); @@ -182,20 +184,36 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { detailBO.set("WLMC", wlmc); // 物料名称 detailBO.set("GGXH", row.getString("GGXH")); // 规格型号 detailBO.set("GC", row.getString("SLGC")); // 收料工厂 - detailBO.set("RKSL", row.getDouble("RKSL")); // 入库数量 + + // 处理入库数量,防止空值 + Double rksl = row.getDouble("RKSL"); + detailBO.set("RKSL", rksl != null ? rksl : 0.0); // 入库数量 + 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")); // 入库金额(金额含运费) + + // 处理单价和金额,添加除零检查 + Double hsdjhyf = row.getDouble("HSDJHYF"); + double rkdj = 0.0; + if (hsdjhyf != null && hsdjhyf != 0 && rksl != null && rksl != 0) { + rkdj = hsdjhyf / rksl; } + detailBO.set("RKDJ", rkdj); // 入库单价 + + if ("泰山石膏".equals(bkgs)) { + Double dhje = row.getDouble("DHJE"); + detailBO.set("RKJE", dhje != null ? dhje : 0.0); // 入库金额 + } else { + Double jshjhyf = row.getDouble("JSHJHYF"); + detailBO.set("RKJE", jshjhyf != null ? jshjhyf : 0.0); // 入库金额 + } + 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")); + LocalDate date = LocalDate.parse(startDate); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + String yearmonth = date.format(formatter); detailBO.set("YEARMONTH", yearmonth); // 年月 bos.add(detailBO); } @@ -220,13 +238,12 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { * 计算并保存各板块物料采购总额、总量、单价(按日存储) * @param startDate * @param bkgs - * @param distinctList + * @param */ - private void newdailyMaterialSummaryBySegment(String startDate, String bkgs, List distinctList) { + private void newdailyMaterialSummaryBySegment(String startDate, String bkgs) { try { // 格式化日期字符串 (yyyy-MM-dd) LOGGER.info("开始计算{}物料采购日度汇总数据,板块公司:{}", startDate, bkgs); - // 1. 删除该日期已存在的汇总数据 String deleteSql = "DELETE FROM " + PROCUREMENT_DETAILS_YEAR_MONTH_DAY + " WHERE BKGS = ? AND RQ >= ?"; @@ -234,9 +251,9 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { 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"; + " 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){ @@ -261,13 +278,19 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) { double adjustedQuantity = safeTotalQuantity / 1000; summaryBO.set("CGZL", adjustedQuantity); + // 添加除零检查 if (safeTotalAmount != 0 && adjustedQuantity != 0) { avgPrice = safeTotalAmount / adjustedQuantity; + } else { + avgPrice = 0.0; } } else { summaryBO.set("CGZL", safeTotalQuantity); + // 添加除零检查 if (safeTotalAmount != 0 && safeTotalQuantity != 0) { avgPrice = safeTotalAmount / safeTotalQuantity; + } else { + avgPrice = 0.0; } } summaryBO.set("CGZE", safeTotalAmount); @@ -277,13 +300,19 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) { double adjustedQuantity = safeTotalQuantity / 1000; summaryBO.set("CGZL", adjustedQuantity); + // 添加除零检查 if (safeTotalAmount != 0 && adjustedQuantity != 0) { avgPrice = safeTotalAmount / adjustedQuantity; + } else { + avgPrice = 0.0; } } else { summaryBO.set("CGZL", safeTotalQuantity); + // 添加除零检查 if (safeTotalAmount != 0 && safeTotalQuantity != 0) { avgPrice = safeTotalAmount / safeTotalQuantity; + } else { + avgPrice = 0.0; } } summaryBO.set("CGZE", safeTotalAmount); @@ -307,22 +336,24 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { * 根据年月汇总板块、基地、年月、当期、上期、同期数据 * @param startDate * @param bkgs - * @param distinctList + * @param */ - private void newmonthlyBaseSummaryBySegment(String startDate, String bkgs, List distinctList) { + private void newmonthlyBaseSummaryBySegment(String startDate, String bkgs) { try { LOGGER.info("开始计算{}物料采购各基地月度汇总数据,板块公司:{}", startDate, bkgs); - + LocalDate date = LocalDate.parse(startDate); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + String yearMonth = date.format(formatter); // 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); + int update = DBSql.update(deleteSql, new Object[]{bkgs, yearMonth}); + LOGGER.info("采购_基地_年月采购明细:{}年月物料采购月度汇总数据,板块公司:{},删除了{}条数据", yearMonth, 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 (" + + " 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 " + @@ -334,16 +365,16 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { " 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 " + + " ) 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 " + + " ) 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"; + " ORDER BY c.YEARMONTH"; List currentMonthData = DBSql.getMaps(currentMonthSql, bkgs, startDate, bkgs, startDate,bkgs, startDate); if (currentMonthData==null){ @@ -356,12 +387,14 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { String base = currentMonthRow.getString("SLGC"); String wlmc = currentMonthRow.getString("WLMC"); String bkgs1 = currentMonthRow.getString("BKGS"); - String yearMonth = currentMonthRow.getString("YEARMONTH"); + YearMonth yearMonths = YearMonth.parse(currentMonthRow.getString("YEARMONTH"), DateTimeFormatter.ofPattern("yyyyMM")); + DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM"); + String yearmonth1 = yearMonths.format(outputFormatter); BO summaryBO = new BO(); summaryBO.set("BKGS", bkgs1); summaryBO.set("JD", base); summaryBO.set("WLMC",wlmc); - summaryBO.set("YEARMONTH", yearMonth); + summaryBO.set("YEARMONTH", yearmonth1); double avgPrice = 0.0; double lyavgPrice = 0.0; double lmavgPrice = 0.0; @@ -373,19 +406,37 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { 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(); + double Quantity = currentMonthRow.getDouble("totalQuantity")==0.0?0.00:currentMonthRow.getDouble("totalQuantity"); + if (Quantity==0.0){ + totalQuantity=0.0; + }else { + totalQuantity = BigDecimal.valueOf(Quantity) + .divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); + } + double lyQuantity = currentMonthRow.getDouble("ly_totalQuantity")==0.0?0.00:currentMonthRow.getDouble("ly_totalQuantity"); + if (lyQuantity==0.0){ + lytotalQuantity = 0.0; + }else { + lytotalQuantity = BigDecimal.valueOf(lyQuantity) + .divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); + } + double lmQuantity = currentMonthRow.getDouble("lm_totalQuantity")==0.0?0.00:currentMonthRow.getDouble("lm_totalQuantity"); + if (lmQuantity==0.0){ + lmQuantity = 0.0; + }else { + lmtotalQuantity = BigDecimal.valueOf(lmQuantity) + .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(); + double Quantity = currentMonthRow.getDouble("totalQuantity")==0.0?0.00:currentMonthRow.getDouble("totalQuantity"); + totalQuantity = BigDecimal.valueOf(Quantity).doubleValue(); + double lyQuantity = currentMonthRow.getDouble("ly_totalQuantity")==0.0?0.00:currentMonthRow.getDouble("ly_totalQuantity"); + lytotalQuantity = BigDecimal.valueOf(lyQuantity).doubleValue(); + double lmQuantity = currentMonthRow.getDouble("lm_totalQuantity")==0.0?0.00:currentMonthRow.getDouble("lm_totalQuantity"); + lmtotalQuantity = BigDecimal.valueOf(lmQuantity).doubleValue(); summaryBO.set("CGZL", totalQuantity); summaryBO.set("TQCGZL", lytotalQuantity); summaryBO.set("SQCGZL", lmtotalQuantity); @@ -399,15 +450,15 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { } //同期 if (lytotalAmount != 0 && lytotalQuantity != 0) { - lyavgPrice = BigDecimal.valueOf(totalAmount) - .divide(BigDecimal.valueOf(totalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); + lyavgPrice = BigDecimal.valueOf(lytotalAmount) + .divide(BigDecimal.valueOf(lytotalQuantity), 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(); + lmavgPrice = BigDecimal.valueOf(lmtotalAmount) + .divide(BigDecimal.valueOf(lmtotalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); } else { lmavgPrice = 0; } @@ -415,26 +466,44 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { 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 totalAmount = currentMonthRow.getDouble("lptotalAmount")==0.0?0.0:currentMonthRow.getDouble("lptotalAmount"); + double lytotalAmount = currentMonthRow.getDouble("ly_lptotalAmount")==0.0?0.0:currentMonthRow.getDouble("ly_lptotalAmount"); + double lmtotalAmount = currentMonthRow.getDouble("lm_lptotalAmount")==0.0?0.0: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(); + double Quantity = currentMonthRow.getDouble("totalQuantity")==0.0?0.0:currentMonthRow.getDouble("totalQuantity"); + if (Quantity==0.00) { + totalQuantity = 0.0; + }else { + totalQuantity = BigDecimal.valueOf(Quantity) + .divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); + } + double lyQuantity = currentMonthRow.getDouble("ly_totalQuantity")==0.0?0.0:currentMonthRow.getDouble("ly_totalQuantity"); + if (lyQuantity==0.0){ + lytotalQuantity = 0.0; + }else { + lytotalQuantity = BigDecimal.valueOf(lyQuantity) + .divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); + } + double lmQuantity = currentMonthRow.getDouble("lm_totalQuantity")==0.0?0.0:currentMonthRow.getDouble("lm_totalQuantity"); + if (lmQuantity==0.0){ + lmtotalQuantity = 0.0; + }else { + lmtotalQuantity = BigDecimal.valueOf(lmQuantity) + .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(); + double Quantity = currentMonthRow.getDouble("totalQuantity")==0.0?0.0:currentMonthRow.getDouble("totalQuantity"); + double lyQuantity = currentMonthRow.getDouble("ly_totalQuantity")==0.0?0.0:currentMonthRow.getDouble("ly_totalQuantity"); + double lmQuantity = currentMonthRow.getDouble("lm_totalQuantity")==0.0?0.0:currentMonthRow.getDouble("lm_totalQuantity"); + totalQuantity = BigDecimal.valueOf(Quantity).doubleValue(); + lytotalQuantity = BigDecimal.valueOf(lyQuantity).doubleValue(); + lmtotalQuantity = BigDecimal.valueOf(lmQuantity).doubleValue(); summaryBO.set("CGZL", totalQuantity); summaryBO.set("TQCGZL", lytotalQuantity); summaryBO.set("SQCGZL", lmtotalQuantity); @@ -448,15 +517,15 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { } //同期 if (lytotalAmount != 0 && lytotalQuantity != 0) { - lyavgPrice = BigDecimal.valueOf(totalAmount) - .divide(BigDecimal.valueOf(totalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); + lyavgPrice = BigDecimal.valueOf(lytotalAmount) + .divide(BigDecimal.valueOf(lytotalQuantity), 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(); + lmavgPrice = BigDecimal.valueOf(lmtotalAmount) + .divide(BigDecimal.valueOf(lmtotalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); } else { lmavgPrice = 0; } @@ -487,23 +556,26 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { * 逻辑:按物料名称(WLMC)分组,计算月度采购总额(SUM(JSHJ))、采购总量(SUM(YSSL))和平均单价(采购总额/采购总量) * @param startDate * @param bkgs - * @param distinctList + * @param */ - private void newmonthlyMaterialSummaryBySegment(String startDate, String bkgs, List distinctList) { + private void newmonthlyMaterialSummaryBySegment(String startDate, String bkgs) { try { LOGGER.info("开始计算{}物料采购月度汇总数据,板块公司:{}", startDate, bkgs); + LocalDate date = LocalDate.parse(startDate); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + String yearMonth = date.format(formatter); // 1. 删除该月份已存在的汇总数据(避免重复) String deleteSql = "DELETE FROM " + PROCUREMENT_DETAILS_YEAR_MONTH + " WHERE BKGS = ? AND YEARMONTH >= ?"; - int update = DBSql.update(deleteSql, new Object[]{bkgs, startDate}); - LOGGER.info("采购_年月采购明细:{}物料采购月度汇总数据,板块公司:{},删除了{}条数据",startDate, bkgs, update); + int update = DBSql.update(deleteSql, new Object[]{bkgs, yearMonth}); + LOGGER.info("采购_年月采购明细:{}年月物料采购月度汇总数据,板块公司:{},删除了{}条数据",yearMonth, bkgs, update); 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 (" + + " 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" + @@ -525,7 +597,7 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { " ) 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"; + " 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){ 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 5c7a5a2..cdb6205 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 @@ -278,7 +278,7 @@ public class SaleDataSyncServiceImpl implements DataSyncService { " WHERE " + conditionBuilder.toString() + orderByBuilder.toString(); // 添加排序子句 - LOGGER.debug("执行Oracle查询: {}", querySql); + LOGGER.info("执行Oracle查询: {}", querySql); List pageData; // 根据条件类型执行查询 diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/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 e9f90ad..bee7a5e 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 @@ -74,7 +74,7 @@ public class SaleUtil { String sfjc = ""; BO bo_eu_1755768181783 = SDK.getBOAPI().query("BO_EU_1755768181783").addQuery("F_D2IYKX5I = ", sf).detail(); if (bo_eu_1755768181783==null){ - sfjc = "其他"; + sfjc = sf; }else { sfjc = bo_eu_1755768181783.getString("SQ_SHORT"); }