1、运营BI汇总
This commit is contained in:
parent
933c7f83d4
commit
26e1b6db5d
@ -270,7 +270,7 @@ public class DataLinkUpController {
|
|||||||
summaryService = new PurchaseDataSummaryServiceImpl();
|
summaryService = new PurchaseDataSummaryServiceImpl();
|
||||||
LOGGER.info("采购业务检测到,创建summaryService实例");
|
LOGGER.info("采购业务检测到,创建summaryService实例");
|
||||||
} else if ("运营".equals(ssyw)) {
|
} else if ("运营".equals(ssyw)) {
|
||||||
// summaryService = new ProductionDataSyncServiceImpl();
|
summaryService = new ProductionDataSummaryServiceImpl();
|
||||||
LOGGER.info("运营业务检测到,创建summaryService实例");
|
LOGGER.info("运营业务检测到,创建summaryService实例");
|
||||||
} else {
|
} else {
|
||||||
LOGGER.error("{}没有汇总类",ssyw);
|
LOGGER.error("{}没有汇总类",ssyw);
|
||||||
|
|||||||
@ -6,6 +6,8 @@ import com.actionsoft.bpms.schedule.IJob;
|
|||||||
import com.actionsoft.bpms.util.DBSql;
|
import com.actionsoft.bpms.util.DBSql;
|
||||||
import com.actionsoft.sdk.local.SDK;
|
import com.actionsoft.sdk.local.SDK;
|
||||||
import com.awspaas.user.apps.bnbm.datalinkup.entity.DateRange;
|
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.impl.ProductionDataSummaryServiceImpl;
|
||||||
import com.awspaas.user.apps.bnbm.datalinkup.service.impl.ProductionDataSyncServiceImpl;
|
import com.awspaas.user.apps.bnbm.datalinkup.service.impl.ProductionDataSyncServiceImpl;
|
||||||
import com.awspaas.user.apps.bnbm.datalinkup.service.impl.PurchaseDataSummaryServiceImpl;
|
import com.awspaas.user.apps.bnbm.datalinkup.service.impl.PurchaseDataSummaryServiceImpl;
|
||||||
import com.awspaas.user.apps.bnbm.datalinkup.service.impl.PurchaseDataSyncServiceImpl;
|
import com.awspaas.user.apps.bnbm.datalinkup.service.impl.PurchaseDataSyncServiceImpl;
|
||||||
@ -30,7 +32,7 @@ public class ProductionDataLinkUpJob implements IJob{
|
|||||||
//时间范围数值
|
//时间范围数值
|
||||||
ArrayList<DateRange> list = new ArrayList<>();
|
ArrayList<DateRange> list = new ArrayList<>();
|
||||||
ProductionDataSyncServiceImpl syncService = new ProductionDataSyncServiceImpl();
|
ProductionDataSyncServiceImpl syncService = new ProductionDataSyncServiceImpl();
|
||||||
// PurchaseDataSummaryServiceImpl purchaseDataSummaryService = new PurchaseDataSummaryServiceImpl();
|
DataSummaryService productionDataSummaryService = new ProductionDataSummaryServiceImpl();
|
||||||
LOGGER.info("======== 开始执行运营数据同步任务 ========");
|
LOGGER.info("======== 开始执行运营数据同步任务 ========");
|
||||||
// 查询销售业务的主配置
|
// 查询销售业务的主配置
|
||||||
List<BO> mainConfigs = SDK.getBOAPI().query("BO_EU_BNBM_DATALINKUP_SJGTPZ")
|
List<BO> mainConfigs = SDK.getBOAPI().query("BO_EU_BNBM_DATALINKUP_SJGTPZ")
|
||||||
@ -62,7 +64,7 @@ public class ProductionDataLinkUpJob implements IJob{
|
|||||||
for (RowMap map : bkgsMaps) {
|
for (RowMap map : bkgsMaps) {
|
||||||
BO bo = new BO();
|
BO bo = new BO();
|
||||||
bo.set("BKGS", map.getString("BKGS"));
|
bo.set("BKGS", map.getString("BKGS"));
|
||||||
// purchaseDataSummaryService.calculateSummary(dateRange, bo);
|
productionDataSummaryService.calculateSummary(dateRange, bo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOGGER.info("======== 运营数据同步任务执行完成 ========");
|
LOGGER.info("======== 运营数据同步任务执行完成 ========");
|
||||||
|
|||||||
@ -0,0 +1,234 @@
|
|||||||
|
package com.awspaas.user.apps.bnbm.datalinkup.service.impl;
|
||||||
|
|
||||||
|
import com.actionsoft.bpms.bo.engine.BO;
|
||||||
|
import com.actionsoft.bpms.commons.database.RowMap;
|
||||||
|
import com.actionsoft.bpms.server.UserContext;
|
||||||
|
import com.actionsoft.bpms.util.DBSql;
|
||||||
|
import com.actionsoft.exception.AWSDataAccessException;
|
||||||
|
import com.actionsoft.exception.AWSException;
|
||||||
|
import com.actionsoft.sdk.local.SDK;
|
||||||
|
import com.awspaas.user.apps.bnbm.datalinkup.entity.DateRange;
|
||||||
|
import com.awspaas.user.apps.bnbm.datalinkup.service.DataSummaryService;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName: ProductionDataSummaryServiceImpl
|
||||||
|
* @Description: 运营数据汇总
|
||||||
|
* @date: 2025/10/31 10:05
|
||||||
|
* @Blog: https://
|
||||||
|
*/
|
||||||
|
public class ProductionDataSummaryServiceImpl implements DataSummaryService {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(ProductionDataSummaryServiceImpl.class);
|
||||||
|
/**
|
||||||
|
* 运营_产量汇总
|
||||||
|
*/
|
||||||
|
private static final String BO_EU_YY_CLHZ = "BO_EU_YY_CLHZ";
|
||||||
|
/**
|
||||||
|
* 运营_对标单耗汇总
|
||||||
|
*/
|
||||||
|
private static final String BO_EU_YY_DBDHHZ = "BO_EU_YY_DBDHHZ";
|
||||||
|
|
||||||
|
// 日期格式化
|
||||||
|
private static final SimpleDateFormat YEAR_MONTH_FORMAT = new SimpleDateFormat("yyyy-MM");
|
||||||
|
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void calculateSummary(DateRange dateRange, BO mainConfig) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 从主配置获取BKGS值
|
||||||
|
String bkgs = mainConfig.getString("BKGS");
|
||||||
|
if (bkgs == null || bkgs.isEmpty()) {
|
||||||
|
LOGGER.error("主配置中BKGS为空,无法进行汇总计算");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (LocalDate.now().getDayOfMonth()!=32){
|
||||||
|
LOGGER.error("等待开始同步时间");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (dateRange == null || dateRange.getStartDate() == null || dateRange.getEndDate() == null) {
|
||||||
|
LOGGER.info("未提供有效时间范围,按当前日期计算");
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
// DateRange dateRangeNow = new DateRange();
|
||||||
|
|
||||||
|
// 设置为当前月的第一天
|
||||||
|
cal.set(Calendar.DAY_OF_MONTH, 1);
|
||||||
|
dateRange.setStartDate(cal.getTime());
|
||||||
|
|
||||||
|
// 设置为当前月的最后一天
|
||||||
|
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
|
||||||
|
dateRange.setEndDate(cal.getTime());
|
||||||
|
|
||||||
|
//产量汇总
|
||||||
|
productionSummary(dateRange,bkgs);
|
||||||
|
//对标单耗汇总
|
||||||
|
summaryOfBenchmarkConsumption(dateRange,bkgs);
|
||||||
|
|
||||||
|
LOGGER.info("{}运营数据多维度汇总计算完成",bkgs);
|
||||||
|
} else {
|
||||||
|
LOGGER.info("开始执行运营数据多维度汇总计算(时间范围: {} 至 {})",
|
||||||
|
dateRange.getStartDate(), dateRange.getEndDate());
|
||||||
|
//产量汇总
|
||||||
|
productionSummary(dateRange,bkgs);
|
||||||
|
//对标单耗汇总
|
||||||
|
summaryOfBenchmarkConsumption(dateRange,bkgs);
|
||||||
|
|
||||||
|
LOGGER.info("{}运营数据多维度汇总计算完成",bkgs);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
String errorMsg = "运营数据汇总计算失败: " + e.getMessage();
|
||||||
|
LOGGER.error(errorMsg, e);
|
||||||
|
throw new RuntimeException(errorMsg, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对标单耗汇总
|
||||||
|
* @param dateRange 时间区间
|
||||||
|
* @param bkgs 板块公司
|
||||||
|
*/
|
||||||
|
private void summaryOfBenchmarkConsumption(DateRange dateRange, String bkgs) {
|
||||||
|
LOGGER.info("开始对标单耗汇总数据,年月: {}-{}, 板块公司: {}", dateRange.getStartDate(),dateRange.getEndDate(), bkgs);
|
||||||
|
|
||||||
|
// 删除已存在的记录
|
||||||
|
String deleteSql = "DELETE FROM " + BO_EU_YY_DBDHHZ + " WHERE YEARMONTH >= ?";
|
||||||
|
try {
|
||||||
|
int deleted = DBSql.update(deleteSql, new Object[]{YEAR_MONTH_FORMAT.format(dateRange.getStartDate())});
|
||||||
|
LOGGER.info("对标单耗汇总数据-已删除{}-{}条营业收入记录", YEAR_MONTH_FORMAT.format(dateRange.getStartDate()), deleted);
|
||||||
|
}catch (Exception e){
|
||||||
|
LOGGER.error("对标单耗汇总-删除数据{}年月-{}板块数据错误,删除sql为:{},请检查数据库链接:{}",
|
||||||
|
YEAR_MONTH_FORMAT.format(dateRange.getStartDate()), bkgs,deleteSql,e.getMessage());
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
String yyyy_mm_dd = DATE_FORMAT.format(dateRange.getStartDate());
|
||||||
|
LocalDate parse = LocalDate.parse(yyyy_mm_dd);
|
||||||
|
int year = parse.getYear();
|
||||||
|
int monthValue = parse.getMonthValue();
|
||||||
|
//创建遍历从cp和查询字段
|
||||||
|
HashMap<String, String> hashMap = new HashMap<>();
|
||||||
|
hashMap.put("护面纸","HMZDH_SZ");
|
||||||
|
hashMap.put("石膏","SGDH_SZ");
|
||||||
|
hashMap.put("煤耗","MH_SZ");
|
||||||
|
hashMap.put("电耗","DH_SZ");
|
||||||
|
ArrayList<BO> bos = new ArrayList<>();
|
||||||
|
for (String cpKey:hashMap.keySet()) {
|
||||||
|
String sql = "SELECT CONCAT(NF, '-', LPAD(YF, 2, '0')) AS YEARMONTH," +
|
||||||
|
" BK AS BKGS," +
|
||||||
|
" ? AS CP," +
|
||||||
|
" ? AS DH" +
|
||||||
|
"FROM BO_EU_YYGLB_DB_SGBYDDF_XMDBZ" +
|
||||||
|
"WHERE HMZDH_SZ IS NOT NULL AND NF = ? AND YF = ? AND XM = '合计'" +
|
||||||
|
"GROUP BY NF, YF, BK";
|
||||||
|
LOGGER.info("对标单耗汇总数据查询,SQL: {}", sql);
|
||||||
|
List<RowMap> maps = DBSql.getMaps(sql, cpKey, hashMap.get(cpKey), year, monthValue);
|
||||||
|
if (maps.isEmpty()) {
|
||||||
|
LOGGER.info("对标单耗汇总数据无数据,停止查询");
|
||||||
|
} else {
|
||||||
|
for (RowMap map : maps) {
|
||||||
|
String yearmonth = map.getString("YEARMONTH");
|
||||||
|
String bk = map.getString("BKGS");
|
||||||
|
String cp = map.getString("CP");
|
||||||
|
String dh = map.getString("DH");
|
||||||
|
BO bo = new BO();
|
||||||
|
bo.set("YEARMONTH",yearmonth);
|
||||||
|
bo.set("BKGS",bk);
|
||||||
|
bo.set("CP",cp);
|
||||||
|
bo.set("DH",dh);
|
||||||
|
bos.add(bo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 批量新增BO
|
||||||
|
if (!bos.isEmpty()) {
|
||||||
|
int[] admins = SDK.getBOAPI().createDataBO(BO_EU_YY_DBDHHZ, bos, UserContext.fromUID("admin"));
|
||||||
|
LOGGER.info("{}-对标单耗汇总数据处理完成,共查询{}条记录,导入{}条", bkgs, bos.size(), admins[0]);
|
||||||
|
}
|
||||||
|
} catch (AWSDataAccessException e) {
|
||||||
|
LOGGER.error("对标单耗汇总-新增数据{}年月-{}板块数据错误,请检查数据库链接:{}",
|
||||||
|
YEAR_MONTH_FORMAT.format(dateRange.getStartDate()), bkgs,e.getMessage());
|
||||||
|
throw new AWSException("对标单耗汇总-新增数据"+YEAR_MONTH_FORMAT.format(dateRange.getStartDate())+"年月-"+bkgs+"板块数据错误,请检查数据库链接:"+e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 产量汇总
|
||||||
|
* @param dateRange 时间区间
|
||||||
|
* @param bkgs 板块公司
|
||||||
|
*/
|
||||||
|
private void productionSummary(DateRange dateRange, String bkgs) {
|
||||||
|
LOGGER.info("开始处理产量汇总数据,年月: {}-{}, 板块公司: {}", dateRange.getStartDate(),dateRange.getEndDate(), bkgs);
|
||||||
|
|
||||||
|
// 删除已存在的记录
|
||||||
|
String deleteSql = "DELETE FROM " + BO_EU_YY_CLHZ + " WHERE YEARMONTH >= ?";
|
||||||
|
try {
|
||||||
|
int deleted = DBSql.update(deleteSql, new Object[]{YEAR_MONTH_FORMAT.format(dateRange.getStartDate())});
|
||||||
|
LOGGER.info("产量汇总数据-已删除{}-{}条营业收入记录", YEAR_MONTH_FORMAT.format(dateRange.getStartDate()), deleted);
|
||||||
|
}catch (Exception e){
|
||||||
|
LOGGER.error("产量汇总-删除数据{}年月-{}板块数据错误,删除sql为:{},请检查数据库链接:{}",
|
||||||
|
YEAR_MONTH_FORMAT.format(dateRange.getStartDate()), bkgs,deleteSql,e.getMessage());
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
String yyyy_mm = YEAR_MONTH_FORMAT.format(dateRange.getStartDate());
|
||||||
|
String sql = "SELECT clmxb.YEARS_MONTH AS YEARMONTH, '' AS BKGS, clmxb.PRODEUCT AS CP," +
|
||||||
|
" SUM(CAST(clmxb.CURRENT_PRODUCTION AS DECIMAL(16,4))) AS CL," +
|
||||||
|
" CASE" +
|
||||||
|
" WHEN SUM(cnmxb.YXCN) IS NULL OR SUM(cnmxb.YXCN) = 0 THEN 0" +
|
||||||
|
" ELSE SUM(CAST(clmxb.CURRENT_PRODUCTION AS DECIMAL(16,4))) / SUM(cnmxb.YXCN)" +
|
||||||
|
" END AS CNLYL," +
|
||||||
|
" SUM(cnmxb.YXCN) AS CN" +
|
||||||
|
" FROM BO_EU_CLMXB clmxb" +
|
||||||
|
" LEFT JOIN (" +
|
||||||
|
" SELECT CP COLLATE utf8mb4_general_ci AS CP," +
|
||||||
|
" CONCAT(CAST(YEAR AS CHAR), '-', LPAD(CAST(MONTH AS CHAR), 2, '0')) AS YEARMONTH," +
|
||||||
|
" CAST(YXCN AS DECIMAL(16,4)) AS YXCN" +
|
||||||
|
" FROM BO_EU_DATALINKUP_CNMXB" +
|
||||||
|
" WHERE CONCAT(CAST(YEAR AS CHAR), '-', LPAD(CAST(MONTH AS CHAR), 2, '0')) = " +
|
||||||
|
" (SELECT MAX(CONCAT(CAST(YEAR AS CHAR), '-', LPAD(CAST(MONTH AS CHAR), 2, '0')))" +
|
||||||
|
" FROM BO_EU_DATALINKUP_CNMXB )" +
|
||||||
|
" ) cnmxb ON clmxb.PRODEUCT = cnmxb.CP" +
|
||||||
|
" WHERE clmxb.GONGCHANG NOT LIKE '%小计%' AND clmxb.YEARS_MONTH >= ?" +
|
||||||
|
" GROUP BY clmxb.PRODEUCT";
|
||||||
|
LOGGER.info("产量汇总数据查询,SQL: {}", sql);
|
||||||
|
List<RowMap> maps = DBSql.getMaps(sql, yyyy_mm);
|
||||||
|
if (maps.isEmpty()) {
|
||||||
|
LOGGER.info("产量汇总数据无数据,停止查询");
|
||||||
|
} else {
|
||||||
|
ArrayList<BO> bos = new ArrayList<>();
|
||||||
|
for (RowMap map : maps) {
|
||||||
|
String yearmonth = map.getString("YEARMONTH");
|
||||||
|
String cp = map.getString("CP");
|
||||||
|
String cl = map.getString("CL");
|
||||||
|
String cnlyl = map.getString("CNLYL");
|
||||||
|
String cn = map.getString("CN");
|
||||||
|
BO bo = new BO();
|
||||||
|
bo.set("YEARMONTH",yearmonth);
|
||||||
|
bo.set("CP",cp);
|
||||||
|
bo.set("CL",cl);
|
||||||
|
bo.set("CNLYL",cnlyl);
|
||||||
|
bo.set("CN",cn);
|
||||||
|
bos.add(bo);
|
||||||
|
}
|
||||||
|
// 批量新增BO
|
||||||
|
if (!bos.isEmpty()) {
|
||||||
|
int[] admins = SDK.getBOAPI().createDataBO(BO_EU_YY_CLHZ, bos, UserContext.fromUID("admin"));
|
||||||
|
LOGGER.info("{}-产量汇总数据处理完成,共查询{}条记录,导入{}条", bkgs, bos.size(), admins[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (AWSDataAccessException e) {
|
||||||
|
LOGGER.error("产量汇总-新增数据{}年月-{}板块数据错误,请检查数据库链接:{}",
|
||||||
|
YEAR_MONTH_FORMAT.format(dateRange.getStartDate()), bkgs,e.getMessage());
|
||||||
|
throw new AWSException("产量汇总-新增数据"+YEAR_MONTH_FORMAT.format(dateRange.getStartDate())+"年月-"+bkgs+"板块数据错误,请检查数据库链接:"+e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user