1、销售sql修改

This commit is contained in:
llllon 2025-09-12 10:26:07 +08:00
parent 5a90a8e12b
commit d2a02fdf56
7 changed files with 149 additions and 77 deletions

View File

@ -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.service.DataSummaryService;
import com.awspaas.user.apps.bnbm.datalinkup.util.PurchaseUtil; import com.awspaas.user.apps.bnbm.datalinkup.util.PurchaseUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.docx4j.org.apache.poi.util.StringUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -74,27 +76,27 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
} }
// 获取物料分类列表带缓存 // 获取物料分类列表带缓存
List<String> distinctList = getDistinctMaterialList(); // List<String> distinctList = getDistinctMaterialList();
if (dateRange == null || dateRange.getStartDate() == null || dateRange.getEndDate() == null) { if (dateRange == null || dateRange.getStartDate() == null || dateRange.getEndDate() == null) {
LOGGER.info("未提供有效时间范围,按当前日期计算"); LOGGER.info("未提供有效时间范围,按当前日期计算");
String startDate = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern("yyyy-mm-dd")); String startDate = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern("yyyy-mm-dd"));
// 1. 计算并保存各板块物料采购总额总量单价(按月存储) // 1. 计算并保存各板块物料采购总额总量单价(按月存储)
// monthlyMaterialSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); // monthlyMaterialSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList);
newmonthlyMaterialSummaryBySegment(startDate, bkgs, distinctList); newmonthlyMaterialSummaryBySegment(startDate, bkgs);
// 2. 根据年月汇总板块基地年月当期上期同期数据 // 2. 根据年月汇总板块基地年月当期上期同期数据
// monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); // monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList);
newmonthlyBaseSummaryBySegment(startDate, bkgs, distinctList); newmonthlyBaseSummaryBySegment(startDate, bkgs);
// 3. 计算并保存各板块物料采购总额总量单价(按日存储) // 3. 计算并保存各板块物料采购总额总量单价(按日存储)
// dailyMaterialSummaryBySegment(year, month, day, currentDate, bkgs, distinctList); // dailyMaterialSummaryBySegment(year, month, day, currentDate, bkgs, distinctList);
newdailyMaterialSummaryBySegment(startDate, bkgs, distinctList); newdailyMaterialSummaryBySegment(startDate, bkgs);
// 4. 根据日期入库单号物料名称分页查询 日期入库单号物料编码物料名称规格型号 // 4. 根据日期入库单号物料名称分页查询 日期入库单号物料编码物料名称规格型号
// 汇总入库数量单位入库单价汇总入库金额供应商订单编号库存数 // 汇总入库数量单位入库单价汇总入库金额供应商订单编号库存数
// dailyWarehousingSummary(year, month, day, currentDate, bkgs, distinctList); // dailyWarehousingSummary(year, month, day, currentDate, bkgs, distinctList);
newdailyWarehousingSummary(startDate, bkgs, distinctList); newdailyWarehousingSummary(startDate, bkgs);
// calculateForCurrentDate(bkgs, distinctList); // calculateForCurrentDate(bkgs, distinctList);
} else { } else {
@ -102,14 +104,14 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
dateRange.getStartDate(), dateRange.getEndDate()); dateRange.getStartDate(), dateRange.getEndDate());
String startDate = DATE_FORMAT.format(dateRange.getStartDate()); 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. 根据日期入库单号物料名称分页查询 日期入库单号物料编码物料名称规格型号 // 4. 根据日期入库单号物料名称分页查询 日期入库单号物料编码物料名称规格型号
// 汇总入库数量单位入库单价汇总入库金额供应商订单编号库存数 // 汇总入库数量单位入库单价汇总入库金额供应商订单编号库存数
newdailyWarehousingSummary(startDate, bkgs, distinctList); newdailyWarehousingSummary(startDate, bkgs);
// 计算月度维度数据按月遍历 // 计算月度维度数据按月遍历
// calculateMonthlyData(dateRange, bkgs, distinctList); // calculateMonthlyData(dateRange, bkgs, distinctList);
@ -130,9 +132,9 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
* 根据日期入库单号物料名称分页查询 日期入库单号物料编码物料名称规格型号 * 根据日期入库单号物料名称分页查询 日期入库单号物料编码物料名称规格型号
* @param startDate * @param startDate
* @param bkgs * @param bkgs
* @param distinctList * @param
*/ */
private void newdailyWarehousingSummary(String startDate, String bkgs, List<String> distinctList) { private void newdailyWarehousingSummary(String startDate, String bkgs) {
LOGGER.info("开始计算{}入库明细日度汇总数据,板块公司:{}", startDate, bkgs); LOGGER.info("开始计算{}入库明细日度汇总数据,板块公司:{}", startDate, bkgs);
try { try {
@ -144,7 +146,7 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
// 2. 计算总记录数用于分页 // 2. 计算总记录数用于分页
String countSql = "SELECT COUNT(1) AS total FROM " + BO_EU_DWD_ORDER_RKD_HZ + " " + 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); RowMap countResult = DBSql.getMap(countSql, bkgs, startDate);
int totalCount = countResult.getInt("total"); int totalCount = countResult.getInt("total");
LOGGER.info("共查询到{}条入库记录需要处理", totalCount); LOGGER.info("共查询到{}条入库记录需要处理", totalCount);
@ -164,9 +166,9 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
LOGGER.debug("正在处理第{}页入库数据,偏移量:{}", page + 1, offset); LOGGER.debug("正在处理第{}页入库数据,偏移量:{}", page + 1, offset);
String querySql = "SELECT BKGS, YEARMONTH, DJRQ, DJH, WLMC, WLBM, GGXH, SLGC, SUM(RKSL) AS RKSL, " + 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, DHJE " +
"FROM "+BO_EU_DWD_ORDER_RKD_HZ+" WHERE BKGS = ? AND DATE(DJRQ) >= ? " + " FROM "+BO_EU_DWD_ORDER_RKD_HZ+" WHERE BKGS = ? AND DATE(DJRQ) >= ? " +
"GROUP BY YEARMONTH,DJH,WLMC " + " GROUP BY YEARMONTH,DJH,WLMC " +
"ORDER BY DJRQ LIMIT ? OFFSET ?"; " ORDER BY DJRQ LIMIT ? OFFSET ?";
List<RowMap> pageData = DBSql.getMaps(querySql, bkgs, startDate, pageSize, offset); List<RowMap> pageData = DBSql.getMaps(querySql, bkgs, startDate, pageSize, offset);
LOGGER.debug("第{}页查询到{}条记录", page + 1, pageData.size()); LOGGER.debug("第{}页查询到{}条记录", page + 1, pageData.size());
@ -182,20 +184,36 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
detailBO.set("WLMC", wlmc); // 物料名称 detailBO.set("WLMC", wlmc); // 物料名称
detailBO.set("GGXH", row.getString("GGXH")); // 规格型号 detailBO.set("GGXH", row.getString("GGXH")); // 规格型号
detailBO.set("GC", row.getString("SLGC")); // 收料工厂 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")); // 单位 detailBO.set("DW", row.getString("JLDW")); // 单位
if ("泰山石膏".equals(bkgs)) {
detailBO.set("RKDJ", row.getDouble("HSDJHYF")); // 入库单价含税单价含运费 // 处理单价和金额添加除零检查
detailBO.set("RKJE", row.getDouble("DHJE")); // 入库金额金额含运费 Double hsdjhyf = row.getDouble("HSDJHYF");
}else { double rkdj = 0.0;
detailBO.set("RKDJ", row.getDouble("HSDJHYF")); // 入库单价含税单价含运费 if (hsdjhyf != null && hsdjhyf != 0 && rksl != null && rksl != 0) {
detailBO.set("RKJE", row.getDouble("JSHJHYF")); // 入库金额金额含运费 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("GYS", row.getString("GYSNAME")); // 供应商
detailBO.set("DDBH", row.getString("CGDDH")); // 订单编号 detailBO.set("DDBH", row.getString("CGDDH")); // 订单编号
detailBO.set("KCS", 0.00); // 库存数默认为0需后续计算 detailBO.set("KCS", 0.00); // 库存数默认为0需后续计算
detailBO.set("BKGS", bkgs); // 板块公司 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); // 年月 detailBO.set("YEARMONTH", yearmonth); // 年月
bos.add(detailBO); bos.add(detailBO);
} }
@ -220,13 +238,12 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
* 计算并保存各板块物料采购总额总量单价(按日存储) * 计算并保存各板块物料采购总额总量单价(按日存储)
* @param startDate * @param startDate
* @param bkgs * @param bkgs
* @param distinctList * @param
*/ */
private void newdailyMaterialSummaryBySegment(String startDate, String bkgs, List<String> distinctList) { private void newdailyMaterialSummaryBySegment(String startDate, String bkgs) {
try { try {
// 格式化日期字符串 (yyyy-MM-dd) // 格式化日期字符串 (yyyy-MM-dd)
LOGGER.info("开始计算{}物料采购日度汇总数据,板块公司:{}", startDate, bkgs); LOGGER.info("开始计算{}物料采购日度汇总数据,板块公司:{}", startDate, bkgs);
// 1. 删除该日期已存在的汇总数据 // 1. 删除该日期已存在的汇总数据
String deleteSql = "DELETE FROM " + PROCUREMENT_DETAILS_YEAR_MONTH_DAY + String deleteSql = "DELETE FROM " + PROCUREMENT_DETAILS_YEAR_MONTH_DAY +
" WHERE BKGS = ? AND RQ >= ?"; " WHERE BKGS = ? AND RQ >= ?";
@ -234,9 +251,9 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
LOGGER.info("采购_年月日采购明细{}物料采购月度汇总数据,板块公司:{},删除了{}条数据", startDate, bkgs, update); LOGGER.info("采购_年月日采购明细{}物料采购月度汇总数据,板块公司:{},删除了{}条数据", startDate, bkgs, update);
String querySql = "SELECT BKGS,DJRQ,WLMC, SUM(DHJE) AS tstotalAmount,SUM(JSHJHYF) AS lptotalAmount,SUM(RKSL) AS totalQuantity" + 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 >= ?" + " FROM BO_EU_DWD_ORDER_RKD_HZ WHERE BKGS = ? AND DJRQ >= ?" +
"GROUP BY WLMC,DJRQ" + " GROUP BY WLMC,DJRQ" +
"ORDER BY DJRQ"; " ORDER BY DJRQ";
List<RowMap> dailyData = DBSql.getMaps(querySql, bkgs, startDate); List<RowMap> dailyData = DBSql.getMaps(querySql, bkgs, startDate);
// 批量插入 // 批量插入
if (dailyData==null){ if (dailyData==null){
@ -261,13 +278,19 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) { if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) {
double adjustedQuantity = safeTotalQuantity / 1000; double adjustedQuantity = safeTotalQuantity / 1000;
summaryBO.set("CGZL", adjustedQuantity); summaryBO.set("CGZL", adjustedQuantity);
// 添加除零检查
if (safeTotalAmount != 0 && adjustedQuantity != 0) { if (safeTotalAmount != 0 && adjustedQuantity != 0) {
avgPrice = safeTotalAmount / adjustedQuantity; avgPrice = safeTotalAmount / adjustedQuantity;
} else {
avgPrice = 0.0;
} }
} else { } else {
summaryBO.set("CGZL", safeTotalQuantity); summaryBO.set("CGZL", safeTotalQuantity);
// 添加除零检查
if (safeTotalAmount != 0 && safeTotalQuantity != 0) { if (safeTotalAmount != 0 && safeTotalQuantity != 0) {
avgPrice = safeTotalAmount / safeTotalQuantity; avgPrice = safeTotalAmount / safeTotalQuantity;
} else {
avgPrice = 0.0;
} }
} }
summaryBO.set("CGZE", safeTotalAmount); summaryBO.set("CGZE", safeTotalAmount);
@ -277,13 +300,19 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) { if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) {
double adjustedQuantity = safeTotalQuantity / 1000; double adjustedQuantity = safeTotalQuantity / 1000;
summaryBO.set("CGZL", adjustedQuantity); summaryBO.set("CGZL", adjustedQuantity);
// 添加除零检查
if (safeTotalAmount != 0 && adjustedQuantity != 0) { if (safeTotalAmount != 0 && adjustedQuantity != 0) {
avgPrice = safeTotalAmount / adjustedQuantity; avgPrice = safeTotalAmount / adjustedQuantity;
} else {
avgPrice = 0.0;
} }
} else { } else {
summaryBO.set("CGZL", safeTotalQuantity); summaryBO.set("CGZL", safeTotalQuantity);
// 添加除零检查
if (safeTotalAmount != 0 && safeTotalQuantity != 0) { if (safeTotalAmount != 0 && safeTotalQuantity != 0) {
avgPrice = safeTotalAmount / safeTotalQuantity; avgPrice = safeTotalAmount / safeTotalQuantity;
} else {
avgPrice = 0.0;
} }
} }
summaryBO.set("CGZE", safeTotalAmount); summaryBO.set("CGZE", safeTotalAmount);
@ -307,22 +336,24 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
* 根据年月汇总板块基地年月当期上期同期数据 * 根据年月汇总板块基地年月当期上期同期数据
* @param startDate * @param startDate
* @param bkgs * @param bkgs
* @param distinctList * @param
*/ */
private void newmonthlyBaseSummaryBySegment(String startDate, String bkgs, List<String> distinctList) { private void newmonthlyBaseSummaryBySegment(String startDate, String bkgs) {
try { try {
LOGGER.info("开始计算{}物料采购各基地月度汇总数据,板块公司:{}", startDate, bkgs); LOGGER.info("开始计算{}物料采购各基地月度汇总数据,板块公司:{}", startDate, bkgs);
LocalDate date = LocalDate.parse(startDate);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
String yearMonth = date.format(formatter);
// 1. 删除该月份已存在的汇总数据避免重复 // 1. 删除该月份已存在的汇总数据避免重复
String deleteSql = "DELETE FROM " + JD_PROCUREMENT_DETAILS_YEAR_MONTH + String deleteSql = "DELETE FROM " + JD_PROCUREMENT_DETAILS_YEAR_MONTH +
" WHERE BKGS = ? AND YEARMONTH >= ?"; " WHERE BKGS = ? AND YEARMONTH >= ?";
int update = DBSql.update(deleteSql, new Object[]{bkgs, startDate}); int update = DBSql.update(deleteSql, new Object[]{bkgs, yearMonth});
LOGGER.info("采购_基地_年月采购明细{}物料采购月度汇总数据,板块公司:{},删除了{}条数据", startDate, bkgs, update); LOGGER.info("采购_基地_年月采购明细{}年月物料采购月度汇总数据,板块公司:{},删除了{}条数据", yearMonth, bkgs, update);
String currentMonthSql = "SELECT c.BKGS,c.DJRQ,c.YEARMONTH,c.WLMC,c.SLGC,c.tstotalAmount,c.lptotalAmount,c.totalQuantity," + 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," + " 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 " + " 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," + " 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 " + " SUM(JSHJHYF) AS lptotalAmount,SUM(RKSL) AS totalQuantity,YEAR(DJRQ) AS Year,MONTH(DJRQ) AS Month " +
" FROM BO_EU_DWD_ORDER_RKD_HZ " + " FROM BO_EU_DWD_ORDER_RKD_HZ " +
@ -334,16 +365,16 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
" FROM BO_EU_DWD_ORDER_RKD_HZ " + " FROM BO_EU_DWD_ORDER_RKD_HZ " +
" WHERE BKGS = ? AND DJRQ >= DATE_SUB(?, INTERVAL 1 YEAR)" + " WHERE BKGS = ? AND DJRQ >= DATE_SUB(?, INTERVAL 1 YEAR)" +
" GROUP BY WLMC, SLGC, YEAR(DJRQ), MONTH(DJRQ) " + " 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 ( " + " LEFT JOIN ( " +
" SELECT WLMC,SLGC,SUM(DHJE) AS tstotalAmount,SUM(JSHJHYF) AS lptotalAmount,SUM(RKSL) AS totalQuantity, " + " SELECT WLMC,SLGC,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 " + " FROM BO_EU_DWD_ORDER_RKD_HZ " +
" WHERE BKGS = ? AND DJRQ >= DATE_SUB(?, INTERVAL 1 MONTH)" + " WHERE BKGS = ? AND DJRQ >= DATE_SUB(?, INTERVAL 1 MONTH)" +
" GROUP BY WLMC, SLGC, YEAR(DJRQ), MONTH(DJRQ) " + " 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)) " + " 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<RowMap> currentMonthData = DBSql.getMaps(currentMonthSql, bkgs, startDate, bkgs, startDate,bkgs, startDate); List<RowMap> currentMonthData = DBSql.getMaps(currentMonthSql, bkgs, startDate, bkgs, startDate,bkgs, startDate);
if (currentMonthData==null){ if (currentMonthData==null){
@ -356,12 +387,14 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
String base = currentMonthRow.getString("SLGC"); String base = currentMonthRow.getString("SLGC");
String wlmc = currentMonthRow.getString("WLMC"); String wlmc = currentMonthRow.getString("WLMC");
String bkgs1 = currentMonthRow.getString("BKGS"); 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(); BO summaryBO = new BO();
summaryBO.set("BKGS", bkgs1); summaryBO.set("BKGS", bkgs1);
summaryBO.set("JD", base); summaryBO.set("JD", base);
summaryBO.set("WLMC",wlmc); summaryBO.set("WLMC",wlmc);
summaryBO.set("YEARMONTH", yearMonth); summaryBO.set("YEARMONTH", yearmonth1);
double avgPrice = 0.0; double avgPrice = 0.0;
double lyavgPrice = 0.0; double lyavgPrice = 0.0;
double lmavgPrice = 0.0; double lmavgPrice = 0.0;
@ -373,19 +406,37 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
double lytotalQuantity = 0.00; double lytotalQuantity = 0.00;
double lmtotalQuantity = 0.00; double lmtotalQuantity = 0.00;
if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) { if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) {
totalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("totalQuantity")) double Quantity = currentMonthRow.getDouble("totalQuantity")==0.0?0.00:currentMonthRow.getDouble("totalQuantity");
.divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); if (Quantity==0.0){
lytotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("ly_totalQuantity")) totalQuantity=0.0;
.divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); }else {
lmtotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("lm_totalQuantity")) totalQuantity = BigDecimal.valueOf(Quantity)
.divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); .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("CGZL", totalQuantity);
summaryBO.set("TQCGZL", lytotalQuantity); summaryBO.set("TQCGZL", lytotalQuantity);
summaryBO.set("SQCGZL", lmtotalQuantity); summaryBO.set("SQCGZL", lmtotalQuantity);
}else { }else {
totalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("totalQuantity")).doubleValue(); double Quantity = currentMonthRow.getDouble("totalQuantity")==0.0?0.00:currentMonthRow.getDouble("totalQuantity");
lytotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("ly_totalQuantity")).doubleValue(); totalQuantity = BigDecimal.valueOf(Quantity).doubleValue();
lmtotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("lm_totalQuantity")).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("CGZL", totalQuantity);
summaryBO.set("TQCGZL", lytotalQuantity); summaryBO.set("TQCGZL", lytotalQuantity);
summaryBO.set("SQCGZL", lmtotalQuantity); summaryBO.set("SQCGZL", lmtotalQuantity);
@ -399,15 +450,15 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
} }
//同期 //同期
if (lytotalAmount != 0 && lytotalQuantity != 0) { if (lytotalAmount != 0 && lytotalQuantity != 0) {
lyavgPrice = BigDecimal.valueOf(totalAmount) lyavgPrice = BigDecimal.valueOf(lytotalAmount)
.divide(BigDecimal.valueOf(totalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); .divide(BigDecimal.valueOf(lytotalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue();
} else { } else {
lyavgPrice = 0; lyavgPrice = 0;
} }
//上期 //上期
if (lmtotalAmount != 0 && lmtotalQuantity != 0) { if (lmtotalAmount != 0 && lmtotalQuantity != 0) {
lmavgPrice = BigDecimal.valueOf(totalAmount) lmavgPrice = BigDecimal.valueOf(lmtotalAmount)
.divide(BigDecimal.valueOf(totalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); .divide(BigDecimal.valueOf(lmtotalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue();
} else { } else {
lmavgPrice = 0; lmavgPrice = 0;
} }
@ -415,26 +466,44 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
summaryBO.set("TQCGZE", lytotalAmount); summaryBO.set("TQCGZE", lytotalAmount);
summaryBO.set("SQCGZE", lmtotalAmount); summaryBO.set("SQCGZE", lmtotalAmount);
}else { }else {
double totalAmount = currentMonthRow.getDouble("lptotalAmount"); double totalAmount = currentMonthRow.getDouble("lptotalAmount")==0.0?0.0:currentMonthRow.getDouble("lptotalAmount");
double lytotalAmount = currentMonthRow.getDouble("ly_lptotalAmount"); double lytotalAmount = currentMonthRow.getDouble("ly_lptotalAmount")==0.0?0.0:currentMonthRow.getDouble("ly_lptotalAmount");
double lmtotalAmount = currentMonthRow.getDouble("lm_lptotalAmount"); double lmtotalAmount = currentMonthRow.getDouble("lm_lptotalAmount")==0.0?0.0:currentMonthRow.getDouble("lm_lptotalAmount");
double totalQuantity = 0.00; double totalQuantity = 0.00;
double lytotalQuantity = 0.00; double lytotalQuantity = 0.00;
double lmtotalQuantity = 0.00; double lmtotalQuantity = 0.00;
if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) { if (wlmc.equals("乳液") || wlmc.equals("钛白粉") || wlmc.equals("重钙")) {
totalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("totalQuantity")) double Quantity = currentMonthRow.getDouble("totalQuantity")==0.0?0.0:currentMonthRow.getDouble("totalQuantity");
.divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); if (Quantity==0.00) {
lytotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("ly_totalQuantity")) totalQuantity = 0.0;
.divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); }else {
lmtotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("lm_totalQuantity")) totalQuantity = BigDecimal.valueOf(Quantity)
.divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); .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("CGZL", totalQuantity);
summaryBO.set("TQCGZL", lytotalQuantity); summaryBO.set("TQCGZL", lytotalQuantity);
summaryBO.set("SQCGZL", lmtotalQuantity); summaryBO.set("SQCGZL", lmtotalQuantity);
}else { }else {
totalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("totalQuantity")).doubleValue(); double Quantity = currentMonthRow.getDouble("totalQuantity")==0.0?0.0:currentMonthRow.getDouble("totalQuantity");
lytotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("ly_totalQuantity")).doubleValue(); double lyQuantity = currentMonthRow.getDouble("ly_totalQuantity")==0.0?0.0:currentMonthRow.getDouble("ly_totalQuantity");
lmtotalQuantity = BigDecimal.valueOf(currentMonthRow.getDouble("lm_totalQuantity")).doubleValue(); 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("CGZL", totalQuantity);
summaryBO.set("TQCGZL", lytotalQuantity); summaryBO.set("TQCGZL", lytotalQuantity);
summaryBO.set("SQCGZL", lmtotalQuantity); summaryBO.set("SQCGZL", lmtotalQuantity);
@ -448,15 +517,15 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
} }
//同期 //同期
if (lytotalAmount != 0 && lytotalQuantity != 0) { if (lytotalAmount != 0 && lytotalQuantity != 0) {
lyavgPrice = BigDecimal.valueOf(totalAmount) lyavgPrice = BigDecimal.valueOf(lytotalAmount)
.divide(BigDecimal.valueOf(totalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); .divide(BigDecimal.valueOf(lytotalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue();
} else { } else {
lyavgPrice = 0; lyavgPrice = 0;
} }
//上期 //上期
if (lmtotalAmount != 0 && lmtotalQuantity != 0) { if (lmtotalAmount != 0 && lmtotalQuantity != 0) {
lmavgPrice = BigDecimal.valueOf(totalAmount) lmavgPrice = BigDecimal.valueOf(lmtotalAmount)
.divide(BigDecimal.valueOf(totalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue(); .divide(BigDecimal.valueOf(lmtotalQuantity), 2, BigDecimal.ROUND_HALF_UP).doubleValue();
} else { } else {
lmavgPrice = 0; lmavgPrice = 0;
} }
@ -487,23 +556,26 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
* 逻辑按物料名称(WLMC)分组计算月度采购总额(SUM(JSHJ))采购总量(SUM(YSSL))和平均单价(采购总额/采购总量) * 逻辑按物料名称(WLMC)分组计算月度采购总额(SUM(JSHJ))采购总量(SUM(YSSL))和平均单价(采购总额/采购总量)
* @param startDate * @param startDate
* @param bkgs * @param bkgs
* @param distinctList * @param
*/ */
private void newmonthlyMaterialSummaryBySegment(String startDate, String bkgs, List<String> distinctList) { private void newmonthlyMaterialSummaryBySegment(String startDate, String bkgs) {
try { try {
LOGGER.info("开始计算{}物料采购月度汇总数据,板块公司:{}", startDate, bkgs); LOGGER.info("开始计算{}物料采购月度汇总数据,板块公司:{}", startDate, bkgs);
LocalDate date = LocalDate.parse(startDate);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
String yearMonth = date.format(formatter);
// 1. 删除该月份已存在的汇总数据避免重复 // 1. 删除该月份已存在的汇总数据避免重复
String deleteSql = "DELETE FROM " + PROCUREMENT_DETAILS_YEAR_MONTH + String deleteSql = "DELETE FROM " + PROCUREMENT_DETAILS_YEAR_MONTH +
" WHERE BKGS = ? AND YEARMONTH >= ?"; " WHERE BKGS = ? AND YEARMONTH >= ?";
int update = DBSql.update(deleteSql, new Object[]{bkgs, startDate}); int update = DBSql.update(deleteSql, new Object[]{bkgs, yearMonth});
LOGGER.info("采购_年月采购明细{}物料采购月度汇总数据,板块公司:{},删除了{}条数据",startDate, bkgs, update); 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," + 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," + " 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," + " 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" + " 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," + " 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" + " FROM BO_EU_DWD_ORDER_RKD_HZ" +
@ -525,7 +597,7 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
" ) lm ON c.WLMC = lm.WLMC" + " ) lm ON c.WLMC = lm.WLMC" +
" AND ((c.Month > 1 AND c.Year = lm.Year AND c.Month = lm.Month + 1)" + " 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))" + " 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<RowMap> currentMonthData = DBSql.getMaps(currentMonthSql, bkgs, startDate,bkgs,startDate,bkgs,startDate,startDate); List<RowMap> currentMonthData = DBSql.getMaps(currentMonthSql, bkgs, startDate,bkgs,startDate,bkgs,startDate,startDate);
if (currentMonthData==null){ if (currentMonthData==null){

View File

@ -278,7 +278,7 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
" WHERE " + conditionBuilder.toString() + " WHERE " + conditionBuilder.toString() +
orderByBuilder.toString(); // 添加排序子句 orderByBuilder.toString(); // 添加排序子句
LOGGER.debug("执行Oracle查询: {}", querySql); LOGGER.info("执行Oracle查询: {}", querySql);
List<RowMap> pageData; List<RowMap> pageData;
// 根据条件类型执行查询 // 根据条件类型执行查询

View File

@ -74,7 +74,7 @@ public class SaleUtil {
String sfjc = ""; String sfjc = "";
BO bo_eu_1755768181783 = SDK.getBOAPI().query("BO_EU_1755768181783").addQuery("F_D2IYKX5I = ", sf).detail(); BO bo_eu_1755768181783 = SDK.getBOAPI().query("BO_EU_1755768181783").addQuery("F_D2IYKX5I = ", sf).detail();
if (bo_eu_1755768181783==null){ if (bo_eu_1755768181783==null){
sfjc = "其他"; sfjc = sf;
}else { }else {
sfjc = bo_eu_1755768181783.getString("SQ_SHORT"); sfjc = bo_eu_1755768181783.getString("SQ_SHORT");
} }