1、运营管理部回填

This commit is contained in:
llllon 2025-10-11 11:56:21 +08:00
parent 86e0029d0e
commit 5835b02cf2
7 changed files with 316 additions and 1 deletions

View File

@ -0,0 +1,70 @@
package com.awspaas.user.apps.bnbm.datalinkup.job;
import com.actionsoft.bpms.bo.engine.BO;
import com.actionsoft.bpms.commons.database.RowMap;
import com.actionsoft.bpms.schedule.IJob;
import com.actionsoft.bpms.util.DBSql;
import com.actionsoft.sdk.local.SDK;
import com.awspaas.user.apps.bnbm.datalinkup.entity.DateRange;
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.PurchaseDataSyncServiceImpl;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @ClassName: PurchaseDataLinkUpJob
* @Description: 运营数据数据同步定时任务
*/
public class ProductionDataLinkUpJob implements IJob{
private static final Logger LOGGER = LoggerFactory.getLogger(ProductionDataLinkUpJob.class);
@Override
public void execute(JobExecutionContext job) throws JobExecutionException {
//时间范围数值
ArrayList<DateRange> list = new ArrayList<>();
ProductionDataSyncServiceImpl syncService = new ProductionDataSyncServiceImpl();
// PurchaseDataSummaryServiceImpl purchaseDataSummaryService = new PurchaseDataSummaryServiceImpl();
LOGGER.info("======== 开始执行运营数据同步任务 ========");
// 查询销售业务的主配置
List<BO> mainConfigs = SDK.getBOAPI().query("BO_EU_BNBM_DATALINKUP_SJGTPZ")
.addQuery("SSYW =", "运营")
.list();
// 使用服务层处理同步逻辑
ArrayList<DateRange> dateRanges = syncService.syncDataByConfigs(mainConfigs);
list.addAll(dateRanges);
LOGGER.info("======== 完成运营数据同步任务 ========");
// 汇总各板块数据
LOGGER.info("======== 开始执行运营汇总各板块数据 ========");
syncService.sumBkTable(mainConfigs);
LOGGER.info("======== 运营汇总各板块数据执行完成 ========");
//计算汇总维度
Set<DateRange> collect = list.stream().filter(o -> o.getStartDate() != null || o.getEndDate() != null)
.collect(Collectors.toSet());
DateRange dateRange = new DateRange();
for (DateRange range : collect) {
if (range!=null || range.getStartDate()==null || range.getEndDate()==null) {
dateRange.setStartDate(range.getStartDate());
dateRange.setEndDate(range.getEndDate());
}
}
LOGGER.info("运营数据汇总计算开始时间为:{},结束时间为:{}",dateRange.getStartDate(),dateRange.getEndDate());
List<RowMap> bkgsMaps = DBSql.getMaps("SELECT BKGS FROM BO_EU_DWD_ORDER_RKD_HZ GROUP BY BKGS");
if (bkgsMaps!=null) {
for (RowMap map : bkgsMaps) {
BO bo = new BO();
bo.set("BKGS", map.getString("BKGS"));
// purchaseDataSummaryService.calculateSummary(dateRange, bo);
}
}
LOGGER.info("======== 运营数据同步任务执行完成 ========");
}
}

View File

@ -0,0 +1,93 @@
package com.awspaas.user.apps.bnbm.datalinkup.job;
import com.actionsoft.bpms.bo.engine.BO;
import com.actionsoft.bpms.commons.database.RowMap;
import com.actionsoft.bpms.schedule.IJob;
import com.actionsoft.bpms.server.UserContext;
import com.actionsoft.bpms.util.DBSql;
import com.actionsoft.sdk.local.SDK;
import org.apache.commons.lang3.StringUtils;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* @ClassName: YyglbDbHtJob
* @Description: 运营管理部对标回填
* @date: 2025/9/29 13:27
* @Blog: https://
*/
public class YyglbDbHtJob implements IJob {
private static final Logger LOGGER = LoggerFactory.getLogger(YyglbDbHtJob.class);
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
LocalDate now = LocalDate.now().minusMonths(1);
int year = now.getYear();
int monthValue = now.getMonthValue();
//分别遍历龙牌梦牌泰山 护面纸石膏煤的对标数量
//公式为当月材料出库数量/当月石膏板折标产量
//龙牌取数为生产出库用量 护面纸取全部脱硫石膏取物料编码为101115110000130煤为包含煤生物质天然气蒸汽
String[] bkgsArr = new String[]{"龙牌","梦牌","泰山石膏"};
HashMap<String, String> wlmcMap = new HashMap<>();
wlmcMap.put("护面纸","HMZ");
wlmcMap.put("石膏","SG");
wlmcMap.put("","MEI");
ArrayList<BO> boList = new ArrayList<>();
try {
int update = DBSql.update("DELETE FROM BO_EU_YY_WLDHCKB WHERE YEAR = '" + year + "' AND MONTH = '" + monthValue + "'");
LOGGER.info("删除{}-{}的数据{}条",year,monthValue,update);
}catch (Exception e){
LOGGER.error("删除运营_物料单耗出库表出错删除范围为{}-{}e",year,monthValue,e.getLocalizedMessage());
}
List<RowMap> maps1 = DBSql.getMaps("SELECT FLZZ FROM BO_EU_BNBM_SCCK_HZ GROUP BY FLZZ");
try {
for (String bkgs : bkgsArr) {
for (RowMap map2 : maps1) {
BO bo = new BO();
for (String wlmckey : wlmcMap.keySet()) {
String wlmcValue = wlmcMap.get(wlmckey);
RowMap map = DBSql.getMap("SELECT SUM(SFSL) AS SFSL FROM BO_EU_BNBM_SCCK_HZ WHERE BKGS = '" + bkgs + "' AND (DJZT = '已审核' OR DJZT = '签字') " +
" AND YEAR = '" + year + "' AND MONTH = '" + monthValue + "' AND WLMC LIKE '%" + wlmckey + "%' " +
" AND FLZZ = '"+map2.getString("FLZZ")+"'");
bo.set(wlmcValue,map.getString("SFSL"));
if (StringUtils.isNotBlank(map2.getString("FLZZ"))){
bo.set("FLZZ",map2.getString("FLZZ"));
RowMap flzz = DBSql.getMap("SELECT SJZZID FROM BO_EU_BNBM_ZZWHB WHERE GSMC = '" + map2.getString("FLZZ") + "'");
if (flzz!=null){
bo.set("ZZNM",flzz.getString("SJZZID"));
}
}
}
bo.set("YEAR",year);
bo.set("MONTH",monthValue);
bo.set("NF",year);
bo.set("YF",monthValue);
bo.set("BKGS",bkgs);
bo.set("BK",bkgs.equals("泰山石膏")?"泰山":bkgs);
RowMap map1 = DBSql.getMap("SELECT SUM(ZBCL) AS zbcl FROM BO_EU_BNBM_SCRK_HZ " +
" WHERE BKGS = '" + bkgs + "' AND YEAR = '" + year + "' AND MONTH = '" + monthValue + "'" +
" AND WLMC LIKE '%石膏板%' AND KCZZ = '"+bo.getString("FLZZ")+"'");
if (map1!=null){
bo.set("SGBZBCL",map1.getString("zbcl"));
}else{
bo.set("SGBZBCL",0);
}
LOGGER.info("存储的值为:{}",bo.toJSONObject().toJSONString());
boList.add(bo);
}
}
SDK.getBOAPI().createDataBO("BO_EU_YY_WLDHCKB",boList, UserContext.fromUID("admin"));
LOGGER.info("单耗对标计算完成时间范围为:{}-{}",year,monthValue);
}catch (Exception e){
LOGGER.error("单耗对标计算报错,错误时间范围为:{}-{}{}",year,monthValue,e.getLocalizedMessage());
}
}
}

View File

@ -11,6 +11,7 @@ import com.actionsoft.sdk.local.SDK;
import com.actionsoft.sdk.local.api.cc.RDSAPI; import com.actionsoft.sdk.local.api.cc.RDSAPI;
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.DataSyncService; import com.awspaas.user.apps.bnbm.datalinkup.service.DataSyncService;
import com.awspaas.user.apps.bnbm.datalinkup.util.PurchaseUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -24,6 +25,8 @@ import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.awspaas.user.apps.bnbm.datalinkup.util.PurchaseUtil.isEqual;
/** /**
* @ClassName: ProductionDataSyncServiceImpl * @ClassName: ProductionDataSyncServiceImpl
* @Description: 生产实现类 * @Description: 生产实现类
@ -754,6 +757,7 @@ public class ProductionDataSyncServiceImpl implements DataSyncService {
// 按时间范围分页迁移数据到汇总表 // 按时间范围分页迁移数据到汇总表
summarizeScopeData(targetTable, startDate, endDate, targetTimeField, hzb); summarizeScopeData(targetTable, startDate, endDate, targetTimeField, hzb);
} }
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("处理配置失败 [板块={}, BindID={}]: {}", LOGGER.error("处理配置失败 [板块={}, BindID={}]: {}",
plate, mainConfig.getString("BINDID"), e.getMessage(), e); plate, mainConfig.getString("BINDID"), e.getMessage(), e);
@ -778,6 +782,7 @@ public class ProductionDataSyncServiceImpl implements DataSyncService {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String startDate = ""; String startDate = "";
String endDate = ""; String endDate = "";
PurchaseUtil purchaseUtil = new PurchaseUtil();
try { try {
do { do {
if (startDated == null || endDated == null) { if (startDated == null || endDated == null) {
@ -823,6 +828,25 @@ public class ProductionDataSyncServiceImpl implements DataSyncService {
bo.set(key, map.get(key)); bo.set(key, map.get(key));
} }
} }
// 如果是采购_入库单汇总 刷新石膏板种类
String newSgbzl = "";
String newSgbhd = "";//石膏板厚度
if (hzb.equals("BO_EU_BNBM_SCRK_HZ")) {
String bkgs = StringUtils.trimToEmpty(bo.getString("BKGS"));
String wlmc = StringUtils.trimToEmpty(bo.getString("WLMC"));
String wlfl = StringUtils.trimToEmpty(bo.getString("WLFL"));
String xl = StringUtils.trimToEmpty(bo.getString("XL"));
String pp = StringUtils.trimToEmpty(bo.getString("PP"));
String zl = StringUtils.trimToEmpty(bo.getString("ZL"));
String gg = StringUtils.trimToEmpty(bo.getString("GG"));
String rksl = StringUtils.trimToEmpty(bo.getString("RKSL"));
if (bkgs.equals("泰山石膏")){
newSgbzl = purchaseUtil.gypsumBoardCategory(wlfl, wlmc, xl, pp, zl);
}
newSgbhd = purchaseUtil.extractThickness(gg);
bo.set("SGBZL", newSgbzl);
bo.set("SGBHD", newSgbhd);
}
bos.add(bo); bos.add(bo);
} }
@ -833,6 +857,13 @@ public class ProductionDataSyncServiceImpl implements DataSyncService {
hasMore = pageData.size() == PAGE_SIZE; hasMore = pageData.size() == PAGE_SIZE;
pageNo++; pageNo++;
} while (hasMore); } while (hasMore);
int update = DBSql.update("UPDATE BO_EU_BNBM_SCRK_HZ a" +
" LEFT JOIN BO_EU_DATALINKUP_ZBXS b ON a.SGBZL = b.TYPE AND a.SGBHD = b.THICKNESS" +
" SET a.ZBCL = a.RKSL * b.ZBXS" +
" WHERE a.BKGS = '泰山石膏' " +
" AND a.WLMC LIKE '%石膏板%' " +
" AND a.RKRQ >= '" + startDate + "'");
LOGGER.info("更新折标产量条数:{}-开始时间为:{}",update,startDate);
}catch (Exception e){ }catch (Exception e){
LOGGER.error("汇总数据失败 [汇总表={}, 第几页={}]: {}", LOGGER.error("汇总数据失败 [汇总表={}, 第几页={}]: {}",
hzb, PAGE_SIZE, e.getMessage(), e); hzb, PAGE_SIZE, e.getMessage(), e);

View File

@ -1400,7 +1400,7 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
lastYearData = rdsapi.getMaps(lastYearQuerySql); lastYearData = rdsapi.getMaps(lastYearQuerySql);
} else { } else {
// 这里需要根据您的rdsapi接口调整参数传递方式 // 这里需要根据您的rdsapi接口调整参数传递方式
lastYearData = rdsapi.getMaps(lastYearQuerySql, lastYearParams.toArray()); lastYearData = rdsapi.getMaps(lastYearQuerySql,lastYearFirstDayStr,lastYearNextMonthFirstDayStr);
} }
if (lastYearData != null && !lastYearData.isEmpty()) { if (lastYearData != null && !lastYearData.isEmpty()) {

View File

@ -4,6 +4,9 @@ import com.awspaas.user.apps.bnbm.datalinkup.service.impl.SaleDataSyncServiceImp
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** /**
* 采购模块工具类 * 采购模块工具类
*/ */
@ -109,4 +112,122 @@ public class PurchaseUtil {
} }
return newWlmc; return newWlmc;
} }
/**
* 生产入库更新石膏板种类
* @param wlfl
* @param cpmc
* @param xl
* @param pp
* @param zl
* @return
*/
public static String gypsumBoardCategory(String wlfl, String cpmc, String xl, String pp, String zl){
if (wlfl.startsWith("58001002")){
return "基材";
} else if (xl.equals("然系列")) {
return "然系列";
} else if (xl.equals("泰山系列") && pp.equals("泰山") && zl.contains("耐火") && !zl.startsWith("耐水")) {
return "泰山耐火系列";
} else if (xl.equals("泰山系列") && pp.equals("泰山") && zl.contains("耐水") && !zl.startsWith("耐火")) {
return "泰山耐水系列";
} else if (wlfl.startsWith("58008") || wlfl.startsWith("58009") || wlfl.startsWith("58012")) {
return "GFP/GFG高密高强";
} else if (cpmc.startsWith("纸面石膏板(墙板)") && xl.equals("泰山系列") && pp.equals("泰山")
&& (zl.equals("观日出") || zl.equals("盘云海") || zl.equals("黄金带") || zl.equals("凌云松")
|| zl.equals("岱盘石") || zl.equals("银河水"))) {
return "印象泰山系列";
} else if (cpmc.startsWith("纸面石膏板(墙板)") && xl.equals("泰山系列") && pp.equals("泰山")
&& (zl.equals("灵鼠献瑞") || zl.equals("福牛贺喜") || zl.equals("虎虎生威") || zl.equals("玉兔拜月")
|| zl.equals("龙凤呈祥") || zl.equals("银蛇报春") || zl.equals("马到成功") || zl.equals("三羊开泰") || zl.equals("金猴送宝")
|| zl.equals("金鸡报晓") || zl.equals("旺狗招财") || zl.equals("金猪送福") )) {
return "十二生肖系列";
} else if (cpmc.startsWith("纸面石膏板(墙板)") && xl.equals("泰山系列") && pp.equals("泰山") && zl.equals("金砖")) {
return "金砖系列";
} else {
return "金砖系列";
}
}
/**
* 从字符串中提取厚度值 - 支持多种格式
* @param input 输入字符串
* @return 提取到的厚度值如9.5如果未找到返回null
*/
public static String extractThickness(String input) {
if (input == null || input.trim().isEmpty()) {
return null;
}
// 统一将"×"替换为"*"便于处理
String normalizedInput = input.replace('×', '*');
// 模式1数字*数字*数字.mm可能包含括号内容
Pattern pattern1 = Pattern.compile("(\\d+)\\*(\\d+)\\*(\\d+(?:\\.\\d+)?)mm");
// 模式2数字*数字*数字.字母******如9.5A******
Pattern pattern2 = Pattern.compile("(\\d+)\\*(\\d+)\\*(\\d+(?:\\.\\d+)?)[A-Z]\\*+");
// 模式3数字*数字*数字.空格如10.0 100张/
Pattern pattern3 = Pattern.compile("(\\d+)\\*(\\d+)\\*(\\d+(?:\\.\\d+)?)\\s");
// 模式4直接匹配厚度值最通用的模式
Pattern pattern4 = Pattern.compile("\\*(\\d+(?:\\.\\d+)?)(?:mm|[A-Z]|\\s|$)");
Matcher matcher;
// 尝试模式1
matcher = pattern1.matcher(normalizedInput);
if (matcher.find() && matcher.groupCount() >= 3) {
try {
return matcher.group(3);
} catch (NumberFormatException e) {
// 继续尝试其他模式
}
}
// 尝试模式2
matcher = pattern2.matcher(input);
if (matcher.find() && matcher.groupCount() >= 3) {
try {
return matcher.group(3);
} catch (NumberFormatException e) {
// 继续尝试其他模式
}
}
// 尝试模式3
matcher = pattern3.matcher(input);
if (matcher.find() && matcher.groupCount() >= 3) {
try {
return matcher.group(3);
} catch (NumberFormatException e) {
// 继续尝试其他模式
}
}
// 尝试模式4最通用的模式
matcher = pattern4.matcher(input);
if (matcher.find()) {
try {
return matcher.group(1);
} catch (NumberFormatException e) {
return null;
}
}
return null;
}
/**
* 判断两个数是否想到
* @param obj1
* @param obj2
* @return
*/
public static boolean isEqual(Object obj1, Object obj2) {
if (obj1 == null && obj2 == null) return true;
if (obj1 == null || obj2 == null) return false;
return obj1.equals(obj2);
}
} }