diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.class b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.class index 3040459..db83417 100644 Binary files a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.class and b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/classes/java/main/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.class differ diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/tmp/compileJava/previous-compilation-data.bin b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/tmp/compileJava/previous-compilation-data.bin index 1223efe..8ebab4d 100644 Binary files a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/tmp/compileJava/previous-compilation-data.bin and b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/ProductionDataLinkUpJob.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/ProductionDataLinkUpJob.java new file mode 100644 index 0000000..4571df3 --- /dev/null +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/ProductionDataLinkUpJob.java @@ -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 list = new ArrayList<>(); + ProductionDataSyncServiceImpl syncService = new ProductionDataSyncServiceImpl(); +// PurchaseDataSummaryServiceImpl purchaseDataSummaryService = new PurchaseDataSummaryServiceImpl(); + LOGGER.info("======== 开始执行运营数据同步任务 ========"); + // 查询销售业务的主配置 + List mainConfigs = SDK.getBOAPI().query("BO_EU_BNBM_DATALINKUP_SJGTPZ") + .addQuery("SSYW =", "运营") + .list(); + // 使用服务层处理同步逻辑 + ArrayList dateRanges = syncService.syncDataByConfigs(mainConfigs); + list.addAll(dateRanges); + LOGGER.info("======== 完成运营数据同步任务 ========"); + + // 汇总各板块数据 + LOGGER.info("======== 开始执行运营汇总各板块数据 ========"); + syncService.sumBkTable(mainConfigs); + LOGGER.info("======== 运营汇总各板块数据执行完成 ========"); + + //计算汇总维度 + Set 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 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("======== 运营数据同步任务执行完成 ========"); + } +} diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/YyglbDbHtJob.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/YyglbDbHtJob.java new file mode 100644 index 0000000..dc0c1d3 --- /dev/null +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/job/YyglbDbHtJob.java @@ -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 wlmcMap = new HashMap<>(); + wlmcMap.put("护面纸","HMZ"); + wlmcMap.put("石膏","SG"); + wlmcMap.put("煤","MEI"); + ArrayList 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 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()); + } + + } +} diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/ProductionDataSyncServiceImpl.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/ProductionDataSyncServiceImpl.java index 4ab0fe8..6c79d19 100644 --- a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/ProductionDataSyncServiceImpl.java +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/ProductionDataSyncServiceImpl.java @@ -11,6 +11,7 @@ import com.actionsoft.sdk.local.SDK; import com.actionsoft.sdk.local.api.cc.RDSAPI; 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.util.PurchaseUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,6 +25,8 @@ import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; +import static com.awspaas.user.apps.bnbm.datalinkup.util.PurchaseUtil.isEqual; + /** * @ClassName: ProductionDataSyncServiceImpl * @Description: 生产实现类 @@ -754,6 +757,7 @@ public class ProductionDataSyncServiceImpl implements DataSyncService { // 按时间范围分页迁移数据到汇总表 summarizeScopeData(targetTable, startDate, endDate, targetTimeField, hzb); } + } catch (Exception e) { LOGGER.error("处理配置失败 [板块={}, BindID={}]: {}", plate, mainConfig.getString("BINDID"), e.getMessage(), e); @@ -778,6 +782,7 @@ public class ProductionDataSyncServiceImpl implements DataSyncService { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String startDate = ""; String endDate = ""; + PurchaseUtil purchaseUtil = new PurchaseUtil(); try { do { if (startDated == null || endDated == null) { @@ -823,6 +828,25 @@ public class ProductionDataSyncServiceImpl implements DataSyncService { 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); } @@ -833,6 +857,13 @@ public class ProductionDataSyncServiceImpl implements DataSyncService { hasMore = pageData.size() == PAGE_SIZE; pageNo++; } 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){ LOGGER.error("汇总数据失败 [汇总表={}, 第几页={}]: {}", hzb, PAGE_SIZE, e.getMessage(), e); diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.java index 8d065ee..8e0efe4 100644 --- a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.java +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/service/impl/SaleDataSyncServiceImpl.java @@ -1400,7 +1400,7 @@ public class SaleDataSyncServiceImpl implements DataSyncService { lastYearData = rdsapi.getMaps(lastYearQuerySql); } else { // 这里需要根据您的rdsapi接口调整参数传递方式 - lastYearData = rdsapi.getMaps(lastYearQuerySql, lastYearParams.toArray()); + lastYearData = rdsapi.getMaps(lastYearQuerySql,lastYearFirstDayStr,lastYearNextMonthFirstDayStr); } if (lastYearData != null && !lastYearData.isEmpty()) { diff --git a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/util/PurchaseUtil.java b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/util/PurchaseUtil.java index 046bdd9..9cb1af4 100644 --- a/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/util/PurchaseUtil.java +++ b/com.awspaas.user.apps.bnbm.datalinkup/com.awspaas.user.apps.bnbm.datalinkup/src/main/java/com/awspaas/user/apps/bnbm/datalinkup/util/PurchaseUtil.java @@ -4,6 +4,9 @@ import com.awspaas.user.apps.bnbm.datalinkup.service.impl.SaleDataSyncServiceImp import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * 采购模块工具类 */ @@ -109,4 +112,122 @@ public class PurchaseUtil { } 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); + } }