1、采购sql修改

2、销售增加sum不含税金额
3、一体化增加城市、月旬,修改拼接条件bug
This commit is contained in:
llllon 2025-09-12 17:01:51 +08:00
parent 6200b5f5aa
commit cb42eb80cd
10 changed files with 60 additions and 43 deletions

View File

@ -82,23 +82,14 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
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);
newmonthlyMaterialSummaryBySegment(startDate, bkgs); newmonthlyMaterialSummaryBySegment(startDate, bkgs);
// 2. 根据年月汇总板块基地年月当期上期同期数据 // 2. 根据年月汇总板块基地年月当期上期同期数据
// monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList);
newmonthlyBaseSummaryBySegment(startDate, bkgs); newmonthlyBaseSummaryBySegment(startDate, bkgs);
// 3. 计算并保存各板块物料采购总额总量单价(按日存储) // 3. 计算并保存各板块物料采购总额总量单价(按日存储)
// dailyMaterialSummaryBySegment(year, month, day, currentDate, bkgs, distinctList);
newdailyMaterialSummaryBySegment(startDate, bkgs); newdailyMaterialSummaryBySegment(startDate, bkgs);
// 4. 根据日期入库单号物料名称分页查询 日期入库单号物料编码物料名称规格型号 // 4. 根据日期入库单号物料名称分页查询 日期入库单号物料编码物料名称规格型号
// 汇总入库数量单位入库单价汇总入库金额供应商订单编号库存数 // 汇总入库数量单位入库单价汇总入库金额供应商订单编号库存数
// dailyWarehousingSummary(year, month, day, currentDate, bkgs, distinctList);
newdailyWarehousingSummary(startDate, bkgs); newdailyWarehousingSummary(startDate, bkgs);
// calculateForCurrentDate(bkgs, distinctList);
} else { } else {
LOGGER.info("开始执行采购数据多维度汇总计算(时间范围: {} 至 {})", LOGGER.info("开始执行采购数据多维度汇总计算(时间范围: {} 至 {})",
dateRange.getStartDate(), dateRange.getEndDate()); dateRange.getStartDate(), dateRange.getEndDate());
@ -113,12 +104,6 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
// 汇总入库数量单位入库单价汇总入库金额供应商订单编号库存数 // 汇总入库数量单位入库单价汇总入库金额供应商订单编号库存数
newdailyWarehousingSummary(startDate, bkgs); newdailyWarehousingSummary(startDate, bkgs);
// 计算月度维度数据按月遍历
// calculateMonthlyData(dateRange, bkgs, distinctList);
// 计算日度维度数据按天遍历
// calculateDailyData(dateRange, bkgs, distinctList);
LOGGER.info("采购数据多维度汇总计算完成"); LOGGER.info("采购数据多维度汇总计算完成");
} }
} catch (Exception e) { } catch (Exception e) {
@ -211,9 +196,9 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
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); // 板块公司
LocalDate date = LocalDate.parse(startDate); YearMonth yearMonths = YearMonth.parse(row.getString("YEARMONTH"), DateTimeFormatter.ofPattern("yyyyMM"));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM");
String yearmonth = date.format(formatter); String yearmonth = yearMonths.format(outputFormatter);
detailBO.set("YEARMONTH", yearmonth); // 年月 detailBO.set("YEARMONTH", yearmonth); // 年月
bos.add(detailBO); bos.add(detailBO);
} }
@ -648,12 +633,12 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
if (!bos.isEmpty()) { if (!bos.isEmpty()) {
// 批量插入数据 // 批量插入数据
int batchSize = 1000; // int batchSize = 1000;
for (int i = 0; i < bos.size(); i += batchSize) { // for (int i = 0; i < bos.size(); i += batchSize) {
int end = Math.min(i + batchSize, bos.size()); // int end = Math.min(i + batchSize, bos.size());
List<BO> batch = bos.subList(i, end); // List<BO> batch = bos.subList(i, end);
SDK.getBOAPI().createDataBO(PROCUREMENT_DETAILS_YEAR_MONTH, batch, UserContext.fromUID("admin")); SDK.getBOAPI().createDataBO(PROCUREMENT_DETAILS_YEAR_MONTH, bos, UserContext.fromUID("admin"));
} // }
} }
LOGGER.info("成功保存{}条月度汇总数据,板块:{}", bos.size(), bkgs); LOGGER.info("成功保存{}条月度汇总数据,板块:{}", bos.size(), bkgs);

View File

@ -398,7 +398,7 @@ public class SaleCountDimensionImpl implements DataSummaryService {
)); ));
String querySql = "SELECT DZRQ,QYGS, KCZZ, LB_1, LB_2, LB_3, SQ, CS, QY, SUM(ZSSL) AS XL," + String querySql = "SELECT DZRQ,QYGS, KCZZ, LB_1, LB_2, LB_3, SQ, CS, QY, SUM(ZSSL) AS XL," +
" SUM(SSJERMB) AS XE, SUM(XSSL) AS TSXL, NMNY ,YEARMONTH" + " SUM(SSJERMB) AS XE, SUM(XSSL) AS TSXL, SUM(NMNY) AS BHSXE,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";
@ -435,13 +435,6 @@ public class SaleCountDimensionImpl implements DataSummaryService {
bo.set("JD", location.getLongitude()); bo.set("JD", location.getLongitude());
bo.set("WD", location.getLatitude()); bo.set("WD", location.getLatitude());
} }
String querySql2 = "SELECT SUM(ZSSL) AS XL,SUM(SSJERMB) AS XE, SUM(XSSL) AS TSXL" +
" FROM " + SALES_DETAIL_TABLE +
" WHERE DZRQ = ? AND BKGS = ? AND QYGS = ? AND KCZZ = ? AND LB_1 = ?";
// LocalDate parse = LocalDate.parse(dzrq,DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));
// YearMonth yearMonth = YearMonth.of(parse.getYear(), parse.getMonthValue());
// LocalDate lastYear = yearMonth.atEndOfMonth();
// RowMap map1 = DBSql.getMap(querySql2, lastYear.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")), bkgs, qygs, gc, lb_1);
if ("石膏板".equals(map.getString("LB_1"))){ if ("石膏板".equals(map.getString("LB_1"))){
bo.set("XL", map.getDouble("TSXL")); bo.set("XL", map.getDouble("TSXL"));
// if (map1!=null) { // if (map1!=null) {
@ -454,7 +447,7 @@ public class SaleCountDimensionImpl implements DataSummaryService {
// } // }
} }
Double ssjermb = map.getDouble("XE"); Double ssjermb = map.getDouble("XE");
Double xe = map.getDouble("NMNY"); Double xe = map.getDouble("BHSXE");
bo.set("XE", xe); bo.set("XE", xe);
// bo.set("SNTQXE", map1.getString("XE")); // bo.set("SNTQXE", map1.getString("XE"));
// 匹配公装家装类别如果未匹配到则默认未其他 // 匹配公装家装类别如果未匹配到则默认未其他

View File

@ -179,16 +179,16 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService {
sfMap.put("新疆维吾尔自治区","SQ LIKE '%新疆%' "); sfMap.put("新疆维吾尔自治区","SQ LIKE '%新疆%' ");
sfMap.put("海南省","SQ LIKE '%海南%' "); sfMap.put("海南省","SQ LIKE '%海南%' ");
sfMap.put("西藏自治区","SQ LIKE '%西藏%' "); sfMap.put("西藏自治区","SQ LIKE '%西藏%' ");
sfMap.put("一体化","SQ LIKE '%新疆%' OR SQ LIKE '%海南%' OR SQ LIKE '%西藏%') "); sfMap.put("一体化","SQ LIKE '%新疆%' OR SQ LIKE '%海南%' OR SQ LIKE '%西藏%' ");
for (String key : sfMap.keySet()) { for (String key : sfMap.keySet()) {
// 获取省份简称 // 获取省份简称
String abbreviation = SaleUtil.getProvinceAbbreviation(key); String abbreviation = SaleUtil.getProvinceAbbreviation(key);
String sfSql = sfMap.get(key); String sfSql = sfMap.get(key);
String sql = "SELECT DZRQ,LB_1,LB_2,BKGS,SQ,SUM(XSSL) AS tssales, SUM(ZSSL) AS lpsales,SUM(SSJERMB) AS revenue" + String sql = "SELECT DZRQ,LB_1,LB_2,BKGS,SQ,CS,SUM(XSSL) AS tssales, SUM(ZSSL) AS lpsales,SUM(SSJERMB) AS revenue" +
" FROM " +SALES_DETAIL_TABLE+ " FROM " +SALES_DETAIL_TABLE+
" WHERE LB_1 IN ('石膏板', '轻钢龙骨', '涂料') AND ("+sfSql+")" + " WHERE LB_1 IN ('石膏板', '轻钢龙骨', '涂料') AND ("+sfSql+")" +
" GROUP BY DZRQ,LB_1,BKGS ORDER BY DZRQ"; " GROUP BY DZRQ,LB_1,BKGS,CS ORDER BY DZRQ";
List<RowMap> maps = DBSql.getMaps(sql); List<RowMap> maps = DBSql.getMaps(sql);
if (maps!=null){ if (maps!=null){
@ -203,10 +203,12 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService {
String bkgs1 = map.getString("BKGS"); String bkgs1 = map.getString("BKGS");
String lb_1 = map.getString("LB_1"); String lb_1 = map.getString("LB_1");
String lb_2 = map.getString("LB_2"); String lb_2 = map.getString("LB_2");
String dzrq = map.getString("DZRQ");
BO priceBO = new BO(); BO priceBO = new BO();
priceBO.set("BKGS", bkgs1); priceBO.set("BKGS", bkgs1);
priceBO.set("DATE", map.getString("DZRQ")); priceBO.set("DATE", dzrq);
priceBO.set("CITY", map.getString("CS"));
if ("北新嘉宝莉".equals(bkgs)) { if ("北新嘉宝莉".equals(bkgs)) {
priceBO.set("PRODUCT_TYPE", "涂料"); priceBO.set("PRODUCT_TYPE", "涂料");
}else { }else {
@ -231,7 +233,7 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService {
if (lpsales.compareTo(BigDecimal.ZERO) > 0) { if (lpsales.compareTo(BigDecimal.ZERO) > 0) {
// 石膏板单位转换万元/万平方米 /平方米 // 石膏板单位转换万元/万平方米 /平方米
if ("石膏板".equals(lb_1)) { if ("石膏板".equals(lb_1)) {
unitPrice = revenue.divide(lpsales, 4, RoundingMode.HALF_UP); unitPrice = revenue.divide(tssales, 4, RoundingMode.HALF_UP);
} }
// 轻钢龙骨单位/ // 轻钢龙骨单位/
if ("轻钢龙骨".equals(lb_1)) { if ("轻钢龙骨".equals(lb_1)) {
@ -246,6 +248,9 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService {
String[] gzjzStrings = SaleUtil.matchSingleField(bkgs, lb_1, lb_2, gzjzList, "其他", "其他","其他"); String[] gzjzStrings = SaleUtil.matchSingleField(bkgs, lb_1, lb_2, gzjzList, "其他", "其他","其他");
priceBO.set("MC_JC", gzjzStrings[1]);//面材/基材 priceBO.set("MC_JC", gzjzStrings[1]);//面材/基材
priceBO.set("JZ_GZ", gzjzStrings[0]);//家装/工装 priceBO.set("JZ_GZ", gzjzStrings[0]);//家装/工装
priceBO.set("PROD_CAT", gzjzStrings[2]);//产品类型
String monthPeriod = SaleUtil.getMonthPeriod(dzrq);
priceBO.set("XUN", monthPeriod);//月寻
list.add(priceBO); list.add(priceBO);
} }
@ -922,7 +927,7 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService {
sfMap.put("新疆维吾尔自治区","SQ LIKE '%新疆%' "); sfMap.put("新疆维吾尔自治区","SQ LIKE '%新疆%' ");
sfMap.put("海南省","SQ LIKE '%海南%' "); sfMap.put("海南省","SQ LIKE '%海南%' ");
sfMap.put("西藏自治区","SQ LIKE '%西藏%' "); sfMap.put("西藏自治区","SQ LIKE '%西藏%' ");
sfMap.put("一体化","SQ LIKE '%新疆%' OR SQ LIKE '%海南%' OR SQ LIKE '%西藏%') "); sfMap.put("一体化","SQ LIKE '%新疆%' OR SQ LIKE '%海南%' OR SQ LIKE '%西藏%' ");
for (String key : sfMap.keySet()) { for (String key : sfMap.keySet()) {
// 获取省份简称 // 获取省份简称
String abbreviation = SaleUtil.getProvinceAbbreviation(key); String abbreviation = SaleUtil.getProvinceAbbreviation(key);
@ -1135,7 +1140,7 @@ public class SaleDataSummaryServiceImpl implements DataSummaryService {
"FROM " + SALES_DETAIL_TABLE + " " + "FROM " + SALES_DETAIL_TABLE + " " +
// "WHERE YEAR(DZRQ) = '"+year+"' AND MONTH(DZRQ) BETWEEN 1 AND '"+month+"' AND LB_1 LIKE '%"+category+"%' AND BKGS = '"+bkgs+"'"+ // "WHERE YEAR(DZRQ) = '"+year+"' AND MONTH(DZRQ) BETWEEN 1 AND '"+month+"' AND LB_1 LIKE '%"+category+"%' AND BKGS = '"+bkgs+"'"+
"WHERE YEAR(DZRQ) = '"+year+"' AND MONTH(DZRQ) = '"+month+"' AND LB_1 LIKE '%"+category+"%' AND BKGS = '"+bkgs+"'"+ "WHERE YEAR(DZRQ) = '"+year+"' AND MONTH(DZRQ) = '"+month+"' AND LB_1 LIKE '%"+category+"%' AND BKGS = '"+bkgs+"'"+
"AND (SQ LIKE '%新疆%' OR SQ LIKE '%海南%' OR SQ LIKE '%西藏%')"; // 模糊查询 "AND ("+sfSql+")"; // 模糊查询
double value = DBSql.getDouble(sql, "revenue"); double value = DBSql.getDouble(sql, "revenue");
return BigDecimal.valueOf(value); return BigDecimal.valueOf(value);
} }

View File

@ -758,6 +758,8 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
String endDate = ""; String endDate = "";
// 查询梦牌区域 // 查询梦牌区域
List<BO> mpqyList = SDK.getBOAPI().query("BO_EU_DATALINKUP_QYGSED").addQuery("BKGS = ", "梦牌").list(); List<BO> mpqyList = SDK.getBOAPI().query("BO_EU_DATALINKUP_QYGSED").addQuery("BKGS = ", "梦牌").list();
// 查询龙牌区域
List<BO> lpqyList = SDK.getBOAPI().query("BO_EU_QYGX").list();
try { try {
do { do {
if (startDated == null || endDated == null) { if (startDated == null || endDated == null) {
@ -820,14 +822,26 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
} }
// LOGGER.info("泰山应收的数据:{}",bo.toJSONObject()); // LOGGER.info("泰山应收的数据:{}",bo.toJSONObject());
//销售汇总表修改区域公司 //销售汇总表修改区域公司
if ("梦牌".equals(map.getString("BKGS")) && hzb.equals("BO_EU_BNBM_DATALINKUP_XS_XSL_HZ")){ if ("梦牌".equals(map.getString("BKGS"))){
String cs = bo.getString("CS"); String cs = bo.getString("CS");
String sq = bo.getString("SQ"); String sq = bo.getString("SQ");
for (BO bo1 : mpqyList) { for (BO bo1 : mpqyList) {
String ss = bo1.getString("SS"); String ss = bo1.getString("SS");
if (ss.contains(cs)){ if (StringUtils.isNotBlank(cs) && ss.contains(cs)){
bo.set("QYGS",bo1.getString("QYGS")); bo.set("QYGS",bo1.getString("QYGS"));
} else if (ss.contains(sq)) { } else if (StringUtils.isNotBlank(sq) && ss.contains(sq)) {
bo.set("QYGS",bo1.getString("QYGS"));
}else {
bo.set("QYGS","其他");
}
}
}
//龙牌
if ("龙牌".equals(map.getString("BKGS"))){
String xszz = bo.getString("XSZZ");
for (BO bo1 : lpqyList) {
String swfb = bo1.getString("SWFB");
if (swfb.contains(xszz)){
bo.set("QYGS",bo1.getString("QYGS")); bo.set("QYGS",bo1.getString("QYGS"));
}else { }else {
bo.set("QYGS","其他"); bo.set("QYGS","其他");

View File

@ -81,4 +81,24 @@ public class SaleUtil {
return sfjc; return sfjc;
} }
/**
* 计算月旬
* @param dateTimeStr
* @return
*/
public static String getMonthPeriod(String dateTimeStr) {
// 提取日期部分假设格式为"yyyy-MM-dd HH:mm:ss"
String dateStr = dateTimeStr.split(" ")[0];
// 获取日期的天数部分
int day = Integer.parseInt(dateStr.split("-")[2]);
if (day <= 10) {
return "上旬";
} else if (day <= 20) {
return "中旬";
} else {
return "下旬";
}
}
} }