1、物料分类逻辑增加其他6类,转移到在详情汇总时进行物料分类处理

This commit is contained in:
llllon 2025-08-28 16:45:29 +08:00
parent 7b1ed3e1d5
commit 4f39842877
10 changed files with 140 additions and 34 deletions

View File

@ -137,6 +137,7 @@ public class DataLinkUpController {
String targetTable = config.getString("LDB");
String partitionField = config.getString("FQBZD");
String tableName = config.getString("TBB");
String tablename = config.getString("TABLENAME");
String bkgs = config.getString("SSBK");
List<BO> fieldMappings = SDK.getBOAPI()
@ -144,6 +145,36 @@ public class DataLinkUpController {
.addQuery("BINDID =", config.optString("_BINDID"))
.list();
// 判断库存同步明细和汇总明细如果是月初第一天就将上月最后一天数据存储到快照表
if("库存".equals(tablename)){
if (LocalDate.now().getDayOfMonth() == 1) {
LOGGER.info("当天为1号将前一天同步的全部数据存为快照在删除同步新的全量库存数据");
// 执行同步逻辑
List<BO> list = SDK.getBOAPI().query(targetTable).list();
int pageSize = 1000;
int total = list.size();
// 分页处理并批量插入
for (int start = 0; start < total; start += pageSize) {
int end = Math.min(start + pageSize, total);
List<BO> subList = list.subList(start, end);
// 将子列表转换为目标BO的实例如果需要字段映射需在此处实现
ArrayList<BO> boList = new ArrayList<>();
for (BO sourceBo : subList) {
// 这里应根据实际字段映射关系复制属性
// 例如targetBo.set("fieldName", sourceBo.get("fieldName"));
boList.add(sourceBo);
}
// 批量插入当前分页数据
if (!boList.isEmpty()) {
SDK.getBOAPI().createDataBO("BO_EU_CG_KC_YDKBB", boList, UserContext.fromUID("admin"));
}
}
}
}
// 删除目标表数据根据时间字段是否为空决定删除范围
if (timeField == null || timeField.isEmpty()) {
// 全量删除

View File

@ -7,6 +7,7 @@ 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.DataSummaryService;
import com.awspaas.user.apps.bnbm.datalinkup.util.PurchaseUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -204,25 +205,11 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
// 2. 根据年月汇总板块基地年月当期上期同期数据
monthlyBaseSummaryBySegment(year, month, yearMonth, yearLastMonth, lastYearMonth, bkgs, distinctList);
// 库存方法汇总 每月板块库存组织
// calculateMonthlyInventoryData(year, month, yearMonth, bkgs, distinctList);
// 移动到下个月
monthCal.add(Calendar.MONTH, 1);
}
}
/**
* 库存方法汇总 每月板块库存组织
* @param year
* @param month
* @param yearMonth
* @param bkgs
* @param distinctList
*/
private void calculateMonthlyInventoryData(int year, int month, String yearMonth, String bkgs, List<String> distinctList) {
}
/**
* 计算日度维度数据
*/
@ -599,26 +586,7 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
BO summaryBO = new BO();
summaryBO.set("YEARMONTH", yearMonth);
// List<BO> bnbmCgPzwlfl = SDK.getBOAPI().query("BO_EU_BNBM_CG_PZWLFL").
// addQuery("BKMC = ", bkgs).addQuery("WLMC LIKE '%" + wlmc + "%'", null).list();
// if (bnbmCgPzwlfl!=null){
// String wlfl = bnbmCgPzwlfl.stream().map(o -> o.getString("WLFL")).collect(Collectors.joining("|"));
// summaryBO.set("WLMC", wlfl);
// }else {
if(("龙牌".equals(bkgs) || "梦牌".equals(bkgs) || "泰山石膏".equals(bkgs))
&& (wlmc.contains("脱硫石膏") || wlmc.contains("护面纸"))){
summaryBO.set("WLMC", "脱硫石膏");
} else if ("泰山石膏".equals(bkgs) && wlmc.contains("镀锌带钢")) {
summaryBO.set("WLMC", "镀锌带钢");
} else if (("龙牌".equals(bkgs) || "梦牌".equals(bkgs))
&& (wlmc.equals("轻钢镀锌带钢") || wlmc.equals("镀锌带钢"))) {
summaryBO.set("WLMC", "镀锌带钢");
} else if (("泰山石膏".equals(bkgs) || "龙牌".equals(bkgs) || "梦牌".equals(bkgs)) && wlmc.contains("乳液")) {
continue;
}else {
summaryBO.set("WLMC", wlmc);
}
// }
summaryBO.set("WLMC", wlmc);
summaryBO.set("CGZE", currentMonthRow.getDouble("totalAmount"));
summaryBO.set("CGZL", currentMonthRow.getDouble("totalQuantity"));
double avgPrice = currentMonthRow.getDouble("totalQuantity") != 0 ?

View File

@ -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;
@ -107,6 +108,7 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService {
// 判断库存同步明细和汇总明细如果是月初第一天就将上月最后一天数据存储到快照表
if("库存".equals(tablename)){
if (LocalDate.now().getDayOfMonth() == 1) {
LOGGER.info("当天为1号将前一天同步的全部数据存为快照在删除同步新的全量库存数据");
// 执行同步逻辑
List<BO> list = SDK.getBOAPI().query(targetTable).list();
int pageSize = 1000;
@ -667,6 +669,7 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String startDate = "";
String endDate = "";
PurchaseUtil purchaseUtil = new PurchaseUtil();
try {
do {
if (startDated == null || endDated == null) {
@ -712,6 +715,18 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService {
bo.set(key, map.get(key));
}
}
// 如果是采购_入库单汇总 刷新物料名称
if (hzb.equals("BO_EU_DWD_ORDER_RKD_HZ")){
String wlmc = bo.getString("WLMC");
String bkgs = bo.getString("BKGS");
String wlbm = bo.getString("WLBM");
String jldw = bo.getString("JLDW");
String wlfl = bo.getString("WLFL");
Double djhyf = Double.parseDouble(bo.getString("DJHYF"));
String newWlmc = purchaseUtil.materialClassificationFiltering(bkgs, wlmc, wlbm, jldw, djhyf, wlfl);
bo.set("WLMC",newWlmc);
LOGGER.info("采购_入库单汇总,刷新物料名称------物料名称:{},板块公司:{},物料编码:{},入库单位:{},单价:{},物料分类:{}",wlmc,bkgs,wlbm,jldw,djhyf,wlfl);
}
bos.add(bo);
}

View File

@ -0,0 +1,92 @@
package com.awspaas.user.apps.bnbm.datalinkup.util;
/**
* 采购模块工具类
*/
public class PurchaseUtil {
/**
* 判断物料名称所属分类
* @param bkgs 板块名称
* @param wlmc 物料名称
* @param wlbm 物料编码
* @param jldw 计量单位
* @param djhyf 单价含运费
* @param wlfl 物料分类
* @return newWlmc 物料名称
*/
public static String materialClassificationFiltering(String bkgs, String wlmc, String wlbm, String jldw, Double djhyf, String wlfl) {
String newWlmc = "";
// 脱硫石膏
if(("龙牌".equals(bkgs) || "梦牌".equals(bkgs) || "泰山石膏".equals(bkgs)) && wlmc.contains("脱硫石膏")){
newWlmc = "脱硫石膏";
}
// 镀锌带钢
else if ("泰山石膏".equals(bkgs) && wlmc.contains("镀锌带钢")) {
newWlmc = "镀锌带钢";
} else if (("龙牌".equals(bkgs) || "梦牌".equals(bkgs))
&& (wlmc.equals("轻钢镀锌带钢") || wlmc.equals("镀锌带钢"))) {
newWlmc = "镀锌带钢";
}
// 煤炭
else if (("龙牌".equals(bkgs) || "梦牌".equals(bkgs)
&& ("煤炭".contains(wlmc) || "籽煤".contains(wlmc) || "褐煤".contains(wlmc)))) {
newWlmc = "煤炭";
} else if ("泰山石膏".equals(bkgs) && ("原煤".contains(wlmc) || "contains".equals(wlmc) || "contains".equals(wlmc))) {
newWlmc = "煤炭";
}
// 护面纸
else if (("龙牌".equals(bkgs) || "泰山石膏".equals(bkgs))
&& "护面纸".contains(wlmc)) {
newWlmc = "护面纸";
}
// 乳液
else if (("北新防水".equals(bkgs) || "北新涂料".equals(bkgs) || "北新嘉宝莉".equals(bkgs)
&& "乳液".contains(wlmc))){
newWlmc = "乳液";
}
// 钛白粉
else if (("北新防水".equals(bkgs) || "北新涂料".equals(bkgs) || "北新嘉宝莉".equals(bkgs)
&& "钛白粉".contains(wlmc))){
newWlmc = "钛白粉";
}
// 重钙
else if (("北新防水".equals(bkgs) || "北新涂料".equals(bkgs) || "北新嘉宝莉".equals(bkgs)
&& "重钙".contains(wlmc))){
newWlmc = "重钙";
}
// 包装袋
else if ("龙牌".equals(bkgs) && ("编织袋".equals(wlmc) || "阀口袋".equals(wlmc) || "两纸一膜".equals(wlmc)
|| "三纸一膜".contains(wlmc) || "包装袋".contains(wlmc) || "包装".contains(wlmc))) {
newWlmc = "包装袋";
} else if ("泰山石膏".equals(bkgs) && ("编织袋".contains(wlmc) || "纸袋".contains(wlmc))) {
newWlmc = "包装袋";
} else if ("梦牌".equals(bkgs) && "包装袋".contains(wlmc)) {
newWlmc = "包装袋";
} else if ("北新防水".equals(bkgs) && ("包装袋".contains(wlmc) || "阀口袋".contains(wlmc) || "口袋".contains(wlmc))) {
newWlmc = "包装袋";
} else if ("北新涂料".equals(bkgs) && "包装袋".contains(wlmc)) {
newWlmc = "包装袋";
} else if ("北新嘉宝莉".equals(bkgs) && ("阀口袋".contains(wlmc) || "腻子粉袋".contains(wlmc) || "阀口纸袋".contains(wlmc)
|| "纸袋".equals(wlmc) || "编织袋".equals(wlmc))) {
newWlmc = "包装袋";
}
// 包装桶
else if ("龙牌".equals(bkgs) && wlbm.contains("1023411")) {
newWlmc = "包装桶";
} else if ("北新防水".equals(bkgs) && wlmc.contains("") && jldw.contains("")) {
newWlmc = "包装桶";
} else if ("北新嘉宝莉".equals(bkgs) && wlmc.contains("") && djhyf < 5.0) {
newWlmc = "桶盖";
} else if ("北新嘉宝莉".equals(bkgs) && wlmc.contains("桶身")) {
newWlmc = "包装桶";
} else if ("北新嘉宝莉".equals(bkgs) && wlmc.contains("") && jldw.contains("")) {
newWlmc = "包装桶";
} else if ("北新嘉宝莉".equals(bkgs) && wlmc.contains("")
&& !wlmc.contains("") && wlfl.contains("包装物") && jldw.equals("")) {
newWlmc = "包装桶";
} else {
newWlmc = wlmc;
}
return newWlmc;
}
}