1、增加应收明细汇总方法

2、采购泰年月明细取值
This commit is contained in:
llllon 2025-09-16 13:50:47 +08:00
parent 6379f48756
commit f06f0a8a0b
12 changed files with 185 additions and 15 deletions

View File

@ -388,6 +388,7 @@ public class DataLinkUpController {
LOGGER.info("汇总板块数据——采购的接口");
}else {
LOGGER.error("{}当前表没有汇总表",ssyw);
return ro.err(ssyw+"当前表没有汇总表");
}
LOGGER.info("即将同步的数据:{}",plate);
@ -437,7 +438,11 @@ public class DataLinkUpController {
// 根据时间范围增加数据分页查询数据存储到BO_EU_BNBM_DATALINKUP_XS_XSL_HZ
// 按时间范围分页迁移数据到汇总表
long summarizeStartTime = System.currentTimeMillis();
dataSyncService.summarizeScopeData(targetTable, startDate, endDate, targetTimeField, hzb);
// if (tablename.equals("应收表")){
// dataSyncService.summarizeScopeDataYs(targetTable, startDate, endDate, targetTimeField, hzb);
// }else {
dataSyncService.summarizeScopeData(targetTable, startDate, endDate, targetTimeField, hzb);
// }
LOGGER.info("范围数据汇总完成,耗时:{}ms", System.currentTimeMillis() - summarizeStartTime);
}
LOGGER.info("【完成处理】配置项[{}],板块:{},总耗时:{}ms",

View File

@ -100,4 +100,13 @@ public interface DataSyncService {
* @return 转换后的BO对象
*/
BO convertFields(RowMap source, List<BO> mappings);
/**
* 应收将范围内数据汇总
* @param targetTable
* @param startDate
* @param endDate
* @param targetTimeField
*/
void summarizeScopeDataYs(String targetTable, Date startDated, Date endDated, String targetTimeField, String hzb);
}

View File

@ -797,4 +797,9 @@ public class ProductionDataSyncServiceImpl implements DataSyncService {
hzb, PAGE_SIZE, e.getMessage(), e);
}
}
@Override
public void summarizeScopeDataYs(String targetTable, Date startDated, Date endDated, String targetTimeField, String hzb) {
}
}

View File

@ -169,29 +169,28 @@ public class PurchaseDataSummaryServiceImpl implements DataSummaryService {
detailBO.set("WLMC", wlmc); // 物料名称
detailBO.set("GGXH", row.getString("GGXH")); // 规格型号
detailBO.set("GC", row.getString("SLGC")); // 收料工厂
// 处理入库数量防止空值
Double rksl = row.getDouble("RKSL");
detailBO.set("RKSL", rksl != null ? rksl : 0.0); // 入库数量
detailBO.set("DW", row.getString("JLDW")); // 单位
// 处理单价和金额添加除零检查
Double jshjhyf = row.getDouble("JSHJHYF");
double rkdj = 0.0;
if (jshjhyf != null && jshjhyf != 0 && rksl != null && rksl != 0) {
rkdj = jshjhyf / rksl;
}
detailBO.set("RKDJ", rkdj); // 入库单价
if ("泰山石膏".equals(bkgs)) {
Double dhje = row.getDouble("DHJE");
detailBO.set("RKJE", dhje != null ? dhje : 0.0); // 入库金额
Double dhje = row.getDouble("DHJE");
double rkdj = 0.0;
if (dhje != null && dhje != 0 && rksl != null && rksl != 0) {
rkdj = dhje / rksl;
}
detailBO.set("RKDJ", rkdj); // 入库单价
detailBO.set("RKJE", dhje != null ? dhje : 0.0); // 入库单价
} else {
// Double jshjhyf = row.getDouble("JSHJHYF");
Double jshjhyf = row.getDouble("JSHJHYF");
double rkdj = 0.0;
if (jshjhyf != null && jshjhyf != 0 && rksl != null && rksl != 0) {
rkdj = jshjhyf / rksl;
}
detailBO.set("RKDJ", rkdj); // 入库单价
detailBO.set("RKJE", jshjhyf != null ? jshjhyf : 0.0); // 入库金额
}
detailBO.set("GYS", row.getString("GYSNAME")); // 供应商
detailBO.set("DDBH", row.getString("CGDDH")); // 订单编号
detailBO.set("KCS", 0.00); // 库存数默认为0需后续计算

View File

@ -895,6 +895,17 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService {
&& !allowedSuppliers.contains(bkgs)) {
continue;
}
if (bkgs.equals("北新嘉宝莉")){
Double thsl = bo.get("THSL",Double.class);
double thsl2 = thsl!=null?thsl:0.0;
Double rkslDou = bo.get("RKSL", Double.class);
double rkslDou2 = rkslDou!=null?rkslDou:0.0;
if (rkslDou2==0.0){
bo.set("RKSL",rkslDou2-thsl2);
}else {
bo.set("RKSL",rkslDou2-thsl2);
}
}
}
bos.add(bo);
}
@ -912,4 +923,9 @@ public class PurchaseDataSyncServiceImpl implements DataSyncService {
e.printStackTrace();
}
}
@Override
public void summarizeScopeDataYs(String targetTable, Date startDated, Date endDated, String targetTimeField, String hzb) {
}
}

View File

@ -868,4 +868,140 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
}
}
/**
* 汇总各板块销售数据汇总
* @param targetTable 落地表字段
* @param startDated 开始时间
* @param endDated 结束时间
* @param targetTimeField 时间范围字段
* @param hzb 汇总表
*/
@Override
public void summarizeScopeDataYs(String targetTable, Date startDated, Date endDated, String targetTimeField, String hzb) {
int pageNo = 1;
boolean hasMore;
String pageSql = "";
List<RowMap> pageData = null;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String startDate = "";
String endDate = "";
// 查询梦牌区域
List<BO> mpqyList = SDK.getBOAPI().query("BO_EU_DATALINKUP_QYGSED").addQuery("BKGS = ", "梦牌").list();
// 查询龙牌区域
List<BO> lpqyList = SDK.getBOAPI().query("BO_EU_QYGX").list();
try {
do {
// 构建查询每月最大日期的SQL
String maxDateSubQuery = "SELECT MAX(DATE(" + targetTimeField + ")) as max_date " +
"FROM " + targetTable +
" WHERE DATE_FORMAT(" + targetTimeField + ", '%Y-%m') = " +
"DATE_FORMAT(t." + targetTimeField + ", '%Y-%m')";
if (startDated == null || endDated == null) {
pageSql = "SELECT t.* FROM " + targetTable + " t " +
"WHERE DATE(t." + targetTimeField + ") = (" + maxDateSubQuery + ") " +
"ORDER BY t.ID LIMIT " + PAGE_SIZE + " OFFSET " + (pageNo - 1) * PAGE_SIZE;
pageData = DBSql.getMaps(pageSql);
} else {
startDate = simpleDateFormat.format(startDated);
endDate = simpleDateFormat.format(endDated);
pageSql = "SELECT t.* FROM " + targetTable + " t " +
"WHERE t." + targetTimeField + " BETWEEN '" + startDate + "' AND '" + endDate + "' " +
"AND DATE(t." + targetTimeField + ") = (" + maxDateSubQuery + ") " +
"ORDER BY t.ID LIMIT " + PAGE_SIZE + " OFFSET " + (pageNo - 1) * PAGE_SIZE;
LOGGER.info("执行查询的sql{}", pageSql);
pageData = DBSql.getMaps(pageSql);
}
if (pageData.isEmpty()) break;
List<BO> bos = new ArrayList<>();
for (RowMap map : pageData) {
BO bo = new BO();
if ("梦牌".equals(map.getString("BKGS")) && "梦牌新材料(平邑)有限公司".equals(map.getString("XSZZ"))){
continue;
}
if ("北新防水".equals(map.getString("BKGS")) && "".equals(map.getString("F_SFNBJY"))
&& !map.getString("XSZZ").equals("北新防水工程(辽宁)有限公司")
&& !map.getString("XSZZ").equals("北新防水工程(四川)有限公司")){
continue;
}
// 复制所有字段排除系统字段
for (String key : map.keySet()) {
if (!key.equalsIgnoreCase("ID") &&
!key.equalsIgnoreCase("ORGID") &&
!key.equalsIgnoreCase("CREATEDATE") &&
!key.equalsIgnoreCase("CREATEUSER") &&
!key.equalsIgnoreCase("UPDATEDATE") &&
!key.equalsIgnoreCase("UPDATEUSER") &&
!key.equalsIgnoreCase("ISEND") &&
!key.equalsIgnoreCase("BINDID")) {
if (StringUtils.isNotBlank(targetTimeField)) {
String targetTimeField1 = map.getString(targetTimeField);
Date parse = UtilDate.parse(targetTimeField1);
int year = UtilDate.getYear(parse);
String monthFormat = UtilDate.monthFormat(parse);
int day = UtilDate.getDay(parse);
bo.set("YEARMONTH", year + monthFormat);
bo.set("YEAR", year);
bo.set("MONTH", monthFormat);
bo.set("DAY", day);
}
bo.set(key, map.get(key));
}
}
//销售汇总表修改区域公司
if ("梦牌".equals(bo.getString("BKGS"))) {
String cs = StringUtils.isBlank(bo.getString("CS"))?"":bo.getString("CS");
String sq = StringUtils.isBlank(bo.getString("SQ"))?"":bo.getString("SQ");
boolean found = false; // 标记是否找到匹配
for (BO bo1 : mpqyList) {
String ss = bo1.getString("SS");
if (ss.contains(cs)) {
bo.set("QYGS", bo1.getString("QYGS"));
found = true;
break; // 找到后立即跳出循环
} else if (ss.contains(sq)) {
bo.set("QYGS", bo1.getString("QYGS"));
found = true;
break; // 找到后立即跳出循环
}
}
if (!found) {
bo.set("QYGS", "其他"); // 循环结束后仍未找到则设為"其他"
}
}else if ("龙牌".equals(bo.getString("BKGS"))){
String xszz = StringUtils.isBlank(bo.getString("XSZZ"))?"":bo.getString("XSZZ");
boolean found = false; // 标记是否找到匹配
// 修改龙牌的区域公司
for (BO bo1 : lpqyList) {
String swfb = bo1.getString("SWFB");
String[] split = swfb.split(",");
String qygs = bo1.getString("QYGS");
for (String s : split) {
if (xszz.equals(s)){
bo.set("QYGS",qygs);
found = true;
}
}
}
if (!found) {
bo.set("QYGS", "其他"); // 循环结束后仍未找到则设為"其他"
}
}
bos.add(bo);
}
SDK.getBOAPI().createDataBO(hzb, bos, UserContext.fromUID("admin"));
LOGGER.info("已迁移{}条数据到汇总表(页号: {},时间范围: {} - {}",
bos.size(), pageNo, startDate, endDate);
hasMore = pageData.size() == PAGE_SIZE;
pageNo++;
} while (hasMore);
}catch (Exception e){
LOGGER.error("汇总数据失败 [汇总表={}, 第几页={}]: {}",
hzb, PAGE_SIZE, e.getMessage(), e);
}
}
}