1、采购sql优化
2、销售:应收账款取前一天的应收余额各板块汇总(取不含税金额) 两金应收取各区域前一天应收余额汇总 回款率取各区域还款/应收*100 销售金额修改取不含税的值 石膏板装饰板鲁班万能板=平米单位
This commit is contained in:
parent
d25795d39c
commit
5a7cdb05d0
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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("')");
|
||||||
// 构建排序子句
|
// 构建排序子句
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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("')");
|
||||||
// 构建排序子句
|
// 构建排序子句
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user