1、采购sql优化

2、销售:应收账款取前一天的应收余额各板块汇总(取不含税金额)
两金应收取各区域前一天应收余额汇总
回款率取各区域还款/应收*100
销售金额修改取不含税的值
石膏板装饰板鲁班万能板=平米单位
This commit is contained in:
llllon 2025-09-09 13:19:35 +08:00
parent d25795d39c
commit 5a7cdb05d0
10 changed files with 209 additions and 28 deletions

View File

@ -252,13 +252,17 @@ public class ProductionDataSyncServiceImpl implements DataSyncService {
// 如果时间字段存在添加时间范围条件 // 如果时间字段存在添加时间范围条件
if (timeField != null && !timeField.isEmpty()) { if (timeField != null && !timeField.isEmpty()) {
conditionBuilder.append(" AND TO_DATE(") conditionBuilder.append("TO_DATE(")
.append(timeField) .append(timeField)
.append(", '") .append(", '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("') BETWEEN TO_DATE(?, '") .append("') >= TO_DATE(?, '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("') AND TO_DATE(?, '") .append("') AND TO_DATE(")
.append(timeField)
.append(", '")
.append(ORACLE_DATE_FORMAT)
.append("') < TO_DATE(?, '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("')"); .append("')");
@ -278,9 +282,13 @@ public class ProductionDataSyncServiceImpl implements DataSyncService {
.append(timeField) .append(timeField)
.append(", '") .append(", '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("') BETWEEN TO_DATE(?, '") .append("') >= TO_DATE(?, '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("') AND TO_DATE(?, '") .append("') AND TO_DATE(")
.append(timeField)
.append(", '")
.append(ORACLE_DATE_FORMAT)
.append("') < TO_DATE(?, '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("')"); .append("')");
// 构建排序子句 // 构建排序子句

View File

@ -13,6 +13,9 @@ 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.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -50,6 +53,10 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
*/ */
private static final String BO_EU_DWD_ORDER_RKD_HZ = "BO_EU_DWD_ORDER_RKD_HZ"; private static final String BO_EU_DWD_ORDER_RKD_HZ = "BO_EU_DWD_ORDER_RKD_HZ";
// 日期格式化
private static final SimpleDateFormat YEAR_MONTH_FORMAT = new SimpleDateFormat("yyyy-MM");
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
// 缓存物料分类列表 // 缓存物料分类列表
private List<String> distinctMaterialList = null; private List<String> distinctMaterialList = null;
@ -71,11 +78,27 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
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"));
// 1. 计算并保存各板块物料采购总额总量单价(按月存储)
// monthlyMaterialSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList);
newmonthlyMaterialSummaryBySegment(startDate, bkgs, distinctList);
// 2. 根据年月汇总板块基地年月当期上期同期数据
// monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList);
// 3. 计算并保存各板块物料采购总额总量单价(按日存储)
// dailyMaterialSummaryBySegment(year, month, day, currentDate, bkgs, distinctList);
// 4. 根据日期入库单号物料名称分页查询 日期入库单号物料编码物料名称规格型号
// 汇总入库数量单位入库单价汇总入库金额供应商订单编号库存数
// dailyWarehousingSummary(year, month, day, currentDate, bkgs, distinctList);
calculateForCurrentDate(bkgs, distinctList); calculateForCurrentDate(bkgs, distinctList);
} else { } else {
LOGGER.info("开始执行采购数据多维度汇总计算(时间范围: {} 至 {})", LOGGER.info("开始执行采购数据多维度汇总计算(时间范围: {} 至 {})",
dateRange.getStartDate(), dateRange.getEndDate()); dateRange.getStartDate(), dateRange.getEndDate());
String startDate = DATE_FORMAT.format(dateRange.getStartDate());
//计算并保存各板块物料采购总额总量单价(按月存储)
newmonthlyMaterialSummaryBySegment(startDate, bkgs, distinctList);
// 计算月度维度数据按月遍历 // 计算月度维度数据按月遍历
calculateMonthlyData(dateRange, bkgs, distinctList); calculateMonthlyData(dateRange, bkgs, distinctList);
@ -91,6 +114,117 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
} }
} }
/**
* 计算并保存各板块物料采购总额总量单价(按月存储)
* 逻辑按物料名称(WLMC)分组计算月度采购总额(SUM(JSHJ))采购总量(SUM(YSSL))和平均单价(采购总额/采购总量)
* @param startDate
* @param bkgs
* @param distinctList
*/
private void newmonthlyMaterialSummaryBySegment(String startDate, String bkgs, List<String> distinctList) {
try {
LOGGER.info("开始计算{}物料采购月度汇总数据,板块公司:{}", startDate, bkgs);
// 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);
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," +
" 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" +
" 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)" +
") 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";
List<RowMap> currentMonthData = DBSql.getMaps(currentMonthSql, bkgs, startDate,bkgs,startDate,bkgs,startDate,startDate);
if (currentMonthData==null){
return;
}
// 4. 批量插入
List<BO> bos = new ArrayList<>();
for (RowMap currentMonthRow : currentMonthData) {
String wlmc = currentMonthRow.getString("WLMC");
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"));//上期采购总量
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<BO> batch = bos.subList(i, end);
SDK.getBOAPI().createDataBO(PROCUREMENT_DETAILS_YEAR_MONTH, batch, 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);
}
}
/** /**
* 获取物料分类列表带缓存 * 获取物料分类列表带缓存
*/ */
@ -153,7 +287,7 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
Date currentDate = new Date(System.currentTimeMillis()); Date currentDate = new Date(System.currentTimeMillis());
// 1. 计算并保存各板块物料采购总额总量单价(按月存储) // 1. 计算并保存各板块物料采购总额总量单价(按月存储)
monthlyMaterialSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); // monthlyMaterialSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList);
// 2. 根据年月汇总板块基地年月当期上期同期数据 // 2. 根据年月汇总板块基地年月当期上期同期数据
monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList);
@ -201,7 +335,7 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
LOGGER.info("计算月度汇总数据: {}-{};上月:{};上年同期:{}", year, month, yearLastMonth, lastYearMonth); LOGGER.info("计算月度汇总数据: {}-{};上月:{};上年同期:{}", year, month, yearLastMonth, lastYearMonth);
// 1. 计算并保存各板块物料采购总额总量单价(按月存储) // 1. 计算并保存各板块物料采购总额总量单价(按月存储)
monthlyMaterialSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); // monthlyMaterialSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList);
// 2. 根据年月汇总板块基地年月当期上期同期数据 // 2. 根据年月汇总板块基地年月当期上期同期数据
monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList); monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList);

View File

@ -282,13 +282,17 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService {
// 如果时间字段存在添加时间范围条件 // 如果时间字段存在添加时间范围条件
if (timeField != null && !timeField.isEmpty()) { if (timeField != null && !timeField.isEmpty()) {
conditionBuilder.append(" AND TO_DATE(") conditionBuilder.append("TO_DATE(")
.append(timeField) .append(timeField)
.append(", '") .append(", '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("') BETWEEN TO_DATE(?, '") .append("') >= TO_DATE(?, '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("') AND TO_DATE(?, '") .append("') AND TO_DATE(")
.append(timeField)
.append(", '")
.append(ORACLE_DATE_FORMAT)
.append("') < TO_DATE(?, '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("')"); .append("')");
@ -308,9 +312,13 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService {
.append(timeField) .append(timeField)
.append(", '") .append(", '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("') BETWEEN TO_DATE(?, '") .append("') >= TO_DATE(?, '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("') AND TO_DATE(?, '") .append("') AND TO_DATE(")
.append(timeField)
.append(", '")
.append(ORACLE_DATE_FORMAT)
.append("') < TO_DATE(?, '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("')"); .append("')");
// 构建排序子句 // 构建排序子句

View File

@ -86,7 +86,7 @@ public class SaleCountDimensionImpl implements DataSummaryService {
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
dateRange.setEndDate(cal.getTime()); dateRange.setEndDate(cal.getTime());
// calculateForCurrentDate(bkgs); // calculateForCurrentDate(bkgs);
calculateMonthlyData(dateRange, bkgs); // calculateMonthlyData(dateRange, bkgs);
// 处理营业收入数据 // 处理营业收入数据
newProcessRevenueData(dateRange,bkgs); newProcessRevenueData(dateRange,bkgs);
// 处理销量销额数据分页查询 // 处理销量销额数据分页查询
@ -138,7 +138,13 @@ public class SaleCountDimensionImpl implements DataSummaryService {
try { try {
// 第一个SQL查询应收账款数据 // 第一个SQL查询应收账款数据
String receivableSql = "SELECT t1.QYGS AS QYGS, t1.BKGS AS BKGS, DATE_FORMAT( t1.RQ, '%Y-%m' ) ASyear_month, t1.RQ AS max_rq, SUM( t1.YSYE ) AS YSZK" + String receivableSql = "SELECT t1.XSZZ AS XSZZ, t1.QYGS AS QYGS, t1.BKGS AS BKGS," +
" DATE_FORMAT( t1.RQ, '%Y-%m' ) ASyear_month, t1.RQ AS max_rq, SUM( t1.YSYE ) AS YSZK," +
" SUM(t1.LJHK) AS LJHK,SUM(t1.LJXS) AS LJXS," +
" CASE " +
" WHEN SUM(t1.LJXS) != 0 THEN SUM(t1.LJHK) / SUM(t1.LJXS)" +
" ELSE NULL " +
" END AS hkl" +
" FROM BO_EU_BNBM_DATALINKUP_XS_YSL t1" + " FROM BO_EU_BNBM_DATALINKUP_XS_YSL t1" +
" INNER JOIN (" + " INNER JOIN (" +
" SELECT QYGS, BKGS, DATE_FORMAT( RQ, '%Y-%m' ) ASyear_month, MAX( RQ ) AS max_rq" + " SELECT QYGS, BKGS, DATE_FORMAT( RQ, '%Y-%m' ) ASyear_month, MAX( RQ ) AS max_rq" +
@ -149,11 +155,12 @@ public class SaleCountDimensionImpl implements DataSummaryService {
" WHERE t1.RQ >= ? AND t1.RQ < ? AND t1.BKGS = ?" + " WHERE t1.RQ >= ? AND t1.RQ < ? AND t1.BKGS = ?" +
" GROUP BY t1.QYGS,t1.BKGS,DATE_FORMAT ( t1.RQ, '%Y-%m' ),t1.RQ"; " GROUP BY t1.QYGS,t1.BKGS,DATE_FORMAT ( t1.RQ, '%Y-%m' ),t1.RQ";
String startDate = DATE_FORMAT.format(dateRange.getStartDate()); String startDate = DATE_FORMAT.format(dateRange.getStartDate());
String endDate = DATE_FORMAT.format(dateRange.getEndDate()); String endDate = DATE_FORMAT.format(dateRange.getEndDate());
LOGGER.info("应收账款数据查SQL: {}", receivableSql); LOGGER.info("应收账款数据查SQL: {}", receivableSql);
List<RowMap> receivableMaps = DBSql.getMaps(receivableSql, startDate, endDate, bkgs, startDate, endDate, bkgs); List<RowMap> receivableMaps = DBSql.getMaps(receivableSql, startDate, endDate, bkgs,startDate, endDate, bkgs);
if (receivableMaps.isEmpty()) { if (receivableMaps.isEmpty()) {
LOGGER.info("{}应收账款数据无数据,停止分页查询", bkgs); LOGGER.info("{}应收账款数据无数据,停止分页查询", bkgs);
@ -212,7 +219,10 @@ public class SaleCountDimensionImpl implements DataSummaryService {
bo.set("BKGS", bkgs); bo.set("BKGS", bkgs);
bo.set("QYGS", receivable.getString("QYGS")); bo.set("QYGS", receivable.getString("QYGS"));
bo.set("YSZK", yszk); bo.set("YSZK", yszk);
bo.set("KCJE", kcje); bo.set("CCJE", kcje);
bo.set("LJHK", receivable.getString("LJHK"));
bo.set("LJXS", receivable.getString("LJXS"));
bo.set("HKL", receivable.getString("HKL"));
bos.add(bo); bos.add(bo);
} }
@ -265,7 +275,7 @@ public class SaleCountDimensionImpl implements DataSummaryService {
)); ));
String querySql = "SELECT QYGS, KCZZ, LB_1, LB_2, LB_3, SQ, CS, QY, SUM(ZSSL) AS XL," + 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" + " SUM(SSJERMB) AS XE, SUM(XSSL) AS TSXL, NMNY ,YEARMONTH" +
" FROM " + SALES_DETAIL_TABLE + " FROM " + SALES_DETAIL_TABLE +
" WHERE DZRQ >= ? AND DZRQ < ? AND BKGS = ?" + " WHERE DZRQ >= ? AND DZRQ < ? AND BKGS = ?" +
" GROUP BY QYGS, KCZZ, LB_1, LB_2, LB_3, SQ, CS, QY, YEARMONTH"; " GROUP BY QYGS, KCZZ, LB_1, LB_2, LB_3, SQ, CS, QY, YEARMONTH";
@ -302,7 +312,9 @@ public class SaleCountDimensionImpl implements DataSummaryService {
}else { }else {
bo.set("XL", map.getDouble("XL")); bo.set("XL", map.getDouble("XL"));
} }
bo.set("XE", map.getDouble("XE")); Double ssjermb = map.getDouble("SSJERMB");
Double xe = map.getDouble("XE");
bo.set("XE", ssjermb!=null?ssjermb:xe!=null?(xe*0.13):0.00);
bo.set("MC_JC", Math.random()%2==0?"面材":"基材"); bo.set("MC_JC", Math.random()%2==0?"面材":"基材");
bo.set("JZ_GZ", Math.random()%2==0?"家装":"工装"); bo.set("JZ_GZ", Math.random()%2==0?"家装":"工装");
bos.add(bo); bos.add(bo);
@ -354,7 +366,7 @@ public class SaleCountDimensionImpl implements DataSummaryService {
(existing, replacement) -> existing (existing, replacement) -> existing
)); ));
String querySql = "SELECT QYGS, KCZZ, LB_1, LB_2, LB_3, SQ, CS, QY, SUM(SSJERMB) as YYSR, YEARMONTH" + String querySql = "SELECT QYGS, KCZZ, LB_1, LB_2, LB_3, SQ, CS, QY, SUM(NMNY) as YYSR, YEARMONTH" +
" FROM " + SALES_DETAIL_TABLE + " FROM " + SALES_DETAIL_TABLE +
" WHERE DZRQ >= ? AND DZRQ < ? AND BKGS = ?" + " WHERE DZRQ >= ? AND DZRQ < ? AND BKGS = ?" +
" GROUP BY QYGS, KCZZ, LB_1, LB_2, LB_3, SQ, CS, QY, YEARMONTH"; " GROUP BY QYGS, KCZZ, LB_1, LB_2, LB_3, SQ, CS, QY, YEARMONTH";
@ -682,8 +694,8 @@ public class SaleCountDimensionImpl implements DataSummaryService {
String querySql = "SELECT QYGS, XSZZ, SHENGQU, SHIQU, QX, QCYE, LJXS, LJHK, YSYE, " + String querySql = "SELECT QYGS, XSZZ, SHENGQU, SHIQU, QX, QCYE, LJXS, LJHK, YSYE, " +
"ZLFX0_60, ZLFX60_1, ZLFX1_2, ZLFX2_3, ZLFX3_4, ZLFX4_5, ZLFX5 " + "ZLFX0_60, ZLFX60_1, ZLFX1_2, ZLFX2_3, ZLFX3_4, ZLFX4_5, ZLFX5 " +
"FROM " + RECEIVABLE_DETAIL_TABLE + " " + "FROM " + RECEIVABLE_DETAIL_TABLE + " " +
"WHERE DATE(RQ) = ? AND BKGS = ? "; "WHERE DATE(RQ) = ? AND BKGS = ? " +
// +"LIMIT " + PAGE_SIZE + " OFFSET " + offset; "LIMIT " + PAGE_SIZE + " OFFSET " + offset;
LOGGER.info("应收账款数据查询第{}页SQL: {}", page + 1, querySql); LOGGER.info("应收账款数据查询第{}页SQL: {}", page + 1, querySql);
List<RowMap> maps = DBSql.getMaps(conn, querySql, lastDayOfMonth, bkgs); List<RowMap> maps = DBSql.getMaps(conn, querySql, lastDayOfMonth, bkgs);
@ -724,7 +736,11 @@ public class SaleCountDimensionImpl implements DataSummaryService {
// 批量新增BO // 批量新增BO
if (!bos.isEmpty()) { if (!bos.isEmpty()) {
SDK.getBOAPI().createDataBO(BO_EU_XS_YSZK, bos, UserContext.fromUID("admin")); for (int i = 0; i < bos.size(); i += BATCH_SIZE) {
int end = Math.min(bos.size(), i + BATCH_SIZE);
List<BO> batchList = bos.subList(i, end);
SDK.getBOAPI().createDataBO(BO_EU_XS_YSZK, batchList, UserContext.fromUID("admin"));
}
totalCount += bos.size(); totalCount += bos.size();
LOGGER.info("应收账款数据第{}页处理完成,本页{}条记录,累计{}条", page + 1, bos.size(), totalCount); LOGGER.info("应收账款数据第{}页处理完成,本页{}条记录,累计{}条", page + 1, bos.size(), totalCount);
} }

View File

@ -218,13 +218,17 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
// 如果时间字段存在添加时间范围条件 // 如果时间字段存在添加时间范围条件
if (timeField != null && !timeField.isEmpty()) { if (timeField != null && !timeField.isEmpty()) {
conditionBuilder.append(" AND TO_DATE(") conditionBuilder.append("TO_DATE(")
.append(timeField) .append(timeField)
.append(", '") .append(", '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("') BETWEEN TO_DATE(?, '") .append("') >= TO_DATE(?, '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("') AND TO_DATE(?, '") .append("') AND TO_DATE(")
.append(timeField)
.append(", '")
.append(ORACLE_DATE_FORMAT)
.append("') < TO_DATE(?, '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("')"); .append("')");
@ -244,9 +248,13 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
.append(timeField) .append(timeField)
.append(", '") .append(", '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("') BETWEEN TO_DATE(?, '") .append("') >= TO_DATE(?, '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("') AND TO_DATE(?, '") .append("') AND TO_DATE(")
.append(timeField)
.append(", '")
.append(ORACLE_DATE_FORMAT)
.append("') < TO_DATE(?, '")
.append(ORACLE_DATE_FORMAT) .append(ORACLE_DATE_FORMAT)
.append("')"); .append("')");
// 构建排序子句 // 构建排序子句
@ -801,6 +809,13 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
bo.set(key, map.get(key)); bo.set(key, map.get(key));
} }
} }
//修改产量类型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","石膏板");
}
bos.add(bo); bos.add(bo);
} }