1、采购_库存增加每月1号将前一天数据存储到快照表里,在全量删除后更新

This commit is contained in:
llllon 2025-08-27 17:19:17 +08:00
parent b207a61f74
commit 7b1ed3e1d5

View File

@ -18,6 +18,7 @@ import org.slf4j.LoggerFactory;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -81,6 +82,7 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService {
String targetTable = mainConfig.getString("LDB"); String targetTable = mainConfig.getString("LDB");
String ccId = mainConfig.getString("CC_ID"); String ccId = mainConfig.getString("CC_ID");
String partitionField = mainConfig.getString("FQBZD"); String partitionField = mainConfig.getString("FQBZD");
String tablename = mainConfig.getString("TABLENAME");
String bkgs = mainConfig.getString("BKGS"); String bkgs = mainConfig.getString("BKGS");
DateRange dateRange = new DateRange(); DateRange dateRange = new DateRange();
@ -102,6 +104,35 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService {
Date startDate = null; Date startDate = null;
Date endDate = null; Date endDate = null;
// 判断库存同步明细和汇总明细如果是月初第一天就将上月最后一天数据存储到快照表
if("库存".equals(tablename)){
if (LocalDate.now().getDayOfMonth() == 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()) { if (timeField == null || timeField.isEmpty()) {
// 全量删除 // 全量删除