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 7066943..2577ea1 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 @@ -150,7 +150,7 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { 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 " + + " JLDW, HSDJHYF, SUM(JSHJHYF) AS JSHJHYF, GYSNAME, CGDDH, SUM(DHJE) AS DHJE " + " FROM "+BO_EU_DWD_ORDER_RKD_HZ+" WHERE BKGS = ? AND DATE(DJRQ) >= ? " + " GROUP BY YEARMONTH,DJH,WLMC " + " ORDER BY DJRQ LIMIT ? OFFSET ?"; @@ -334,193 +334,51 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { 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 " + + String currentMonthSql = "SELECT " + + " CONCAT(c.Year, '-', LPAD(c.Month, 2, '0')) AS ny, " + + " c.Year AS year, " + + " c.Month AS month, " + + " c.WLMC AS WLMC, " + + " c.SLGC AS SLGC,, " + + " c.tstotalAmount AS tstotalAmount, " + + " c.totalQuantity AS totalQuantity, " + + " tstotalAmount/totalQuantity AS PJDJ " + " 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 " + + " SELECT " + + " WLMC, " + + " SUM(DHJE) AS tstotalAmount, " + + " SUM(RKSL) AS totalQuantity, " + + " SLGC, " + + " 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); - + " WHERE BKGS = ? " + + " AND DJRQ >= DATE_SUB(?, INTERVAL 2 YEAR) " + + " GROUP BY WLMC, YEAR(DJRQ), MONTH(DJRQ),SLGC " + + " ) c " + + " WHERE c.Year IN (YEAR(?), YEAR(?) + 1) " + + " ORDER BY c.Year, c.Month"; + List currentMonthData = DBSql.getMaps(currentMonthSql, bkgs, startDate,startDate,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"); - 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", yearmonth1); - 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("重钙")) { - 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 { - 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); - } - // 添加除数非零检查 - 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(lytotalAmount) - .divide(BigDecimal.valueOf(lytotalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); - } else { - lyavgPrice = 0; - } - //上期 - if (lmtotalAmount != 0 && lmtotalQuantity != 0) { - lmavgPrice = BigDecimal.valueOf(lmtotalAmount) - .divide(BigDecimal.valueOf(lmtotalQuantity), 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")==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("重钙")) { - 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 { - 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); - } - // 添加除数非零检查 - 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(lytotalAmount) - .divide(BigDecimal.valueOf(lytotalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); - } else { - lyavgPrice = 0; - } - //上期 - if (lmtotalAmount != 0 && lmtotalQuantity != 0) { - lmavgPrice = BigDecimal.valueOf(lmtotalAmount) - .divide(BigDecimal.valueOf(lmtotalQuantity), 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); + summaryBO.set("YEARMONTH",currentMonthRow.getString("ny"));//年月(YYYYMM) + Double tstotalAmount = currentMonthRow.getDouble("tstotalAmount"); + Double totalQuantity = currentMonthRow.getDouble("totalQuantity"); + summaryBO.set("CGZE", tstotalAmount);//采购总额 + summaryBO.set("CGZL",totalQuantity);//采购总量 + summaryBO.set("SLGC",currentMonthRow.getString("SLGC"));//收料工厂 + summaryBO.set("PJDJ",currentMonthRow.getDouble("PJDJ")); bos.add(summaryBO); } if (!bos.isEmpty()) { @@ -555,39 +413,32 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { " WHERE BKGS = ? AND YEARMONTH >= ?"; 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" + + String currentMonthSql = "SELECT " + + " CONCAT(c.Year, '-', LPAD(c.Month, 2, '0')) AS ny, " + + " c.Year AS year, " + + " c.Month AS month, " + + " c.WLMC AS WLMC, " + + " c.tstotalAmount AS tstotalAmount, " + + " c.totalQuantity AS totalQuantity, " + + " tstotalAmount/totalQuantity AS PJDJ " + " 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" + - " FROM BO_EU_DWD_ORDER_RKD_HZ" + - " WHERE BKGS = ? AND DJRQ >= DATE_SUB(?, INTERVAL 1 YEAR)" + - " 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"; - List currentMonthData = DBSql.getMaps(currentMonthSql, bkgs, startDate,bkgs,startDate,bkgs,startDate,startDate); - + " SELECT " + + " WLMC, " + + " SUM(DHJE) AS tstotalAmount, " + + " 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) " + + " ) c " + + " WHERE c.Year IN (YEAR(?), YEAR(?) + 1) " + + " ORDER BY c.Year, c.Month"; + List currentMonthData = DBSql.getMaps(currentMonthSql, bkgs, startDate,startDate,startDate); if (currentMonthData==null){ return; } - // 4. 批量插入 List bos = new ArrayList<>(); for (RowMap currentMonthRow : currentMonthData) { @@ -595,50 +446,16 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService { BO bo = new BO(); bo.set("BKGS",bkgs);//板块 bo.set("WLMC",wlmc);//物料名称 - bo.set("YEARMONTH",currentMonthRow.getString("ASyear_month"));//年月(YYYYMM) - if (bkgs.equals("泰山石膏")) { - Double tstotalAmount = currentMonthRow.getDouble("tstotalAmount"); - double tstotalAmount1 = tstotalAmount==null?0.0: tstotalAmount; - Double totalQuantity = currentMonthRow.getDouble("totalQuantity"); - double totalQuantity1 = totalQuantity==null?0.0: totalQuantity; - bo.set("CGZE", tstotalAmount1);//采购总额 - bo.set("CGZL",totalQuantity1);//采购总量 - if (tstotalAmount1!=0 && totalQuantity1!=0) { - bo.set("PJDJ", tstotalAmount1/totalQuantity1);//平均单价 - }else { - bo.set("PJDJ", 0);//平均单价 - } - bo.set("TQCGZE",currentMonthRow.getString("LY_tstotalAmount"));//同期采购总额 - bo.set("SQCGZE",currentMonthRow.getString("LM_tstotalAmount"));//上期采购总额 - } - else { - Double tstotalAmount = currentMonthRow.getDouble("lptotalAmount"); - double tstotalAmount1 = tstotalAmount==null?0.0: tstotalAmount; - Double totalQuantity = currentMonthRow.getDouble("totalQuantity"); - double totalQuantity1 = totalQuantity==null?0.0: totalQuantity; - bo.set("CGZE", tstotalAmount1);//采购总额 - bo.set("CGZL",totalQuantity1);//采购总量 - if (tstotalAmount1!=0 && totalQuantity1!=0) { - bo.set("PJDJ", tstotalAmount1/totalQuantity1);//平均单价 - }else { - bo.set("PJDJ", 0);//平均单价 - } - bo.set("TQCGZE",currentMonthRow.getString("LY_lptotalAmount"));//同期采购总额 - bo.set("SQCGZE",currentMonthRow.getString("LM_lptotalAmount"));//上期采购总额 - } - bo.set("TQCGZL",currentMonthRow.getString("LY_totalQuantity"));//同期采购总量 - bo.set("SQCGZL",currentMonthRow.getString("LM_totalQuantity"));//上期采购总量 + bo.set("YEARMONTH",currentMonthRow.getString("ny"));//年月(YYYYMM) + Double tstotalAmount = currentMonthRow.getDouble("tstotalAmount"); + Double totalQuantity = currentMonthRow.getDouble("totalQuantity"); + bo.set("CGZE", tstotalAmount);//采购总额 + bo.set("CGZL",totalQuantity);//采购总量 + bo.set("PJDJ",currentMonthRow.getDouble("PJDJ")); bos.add(bo); } - if (!bos.isEmpty()) { - // 批量插入数据 -// int batchSize = 1000; -// for (int i = 0; i < bos.size(); i += batchSize) { -// int end = Math.min(i + batchSize, bos.size()); -// List batch = bos.subList(i, end); - SDK.getBOAPI().createDataBO(PROCUREMENT_DETAILS_YEAR_MONTH, bos, UserContext.fromUID("admin")); -// } + SDK.getBOAPI().createDataBO(PROCUREMENT_DETAILS_YEAR_MONTH, bos, UserContext.fromUID("admin")); } LOGGER.info("成功保存{}条月度汇总数据,板块:{}", bos.size(), bkgs);