1、代码修改提交

This commit is contained in:
llllon 2025-10-09 09:44:57 +08:00
parent 3b544b04a2
commit 86e0029d0e
9 changed files with 100 additions and 48 deletions

View File

@ -53,7 +53,7 @@ public class NineGridCountJob implements IJob {
int year = now.minusMonths(1).getYear(); int year = now.minusMonths(1).getYear();
RowMap cwsj = DBSql.getMap("SELECT DNSJLJ FROM BO_EU_CWSJ_INTERFACE_LRZE " + RowMap cwsj = DBSql.getMap("SELECT DNSJLJ FROM BO_EU_CWSJ_INTERFACE_LRZE " +
"WHERE BK = '公司整体' AND DWMC = '合并' AND YEAR = '" + year + "' AND MONTH = '" + lastMonthValue + "'"); "WHERE BK = '公司整体' AND DWMC = '合并' AND YEAR = '" + year + "' AND MONTH = '" + lastMonthValue + "'");
bo.set("ZB3",cwsj.getString("DNSJLJ"));//利润总额 bo.set("ZB3",cwsj==null?"":cwsj.getString("DNSJLJ"));//利润总额
//预算完成率 //预算完成率
RowMap yswcl = DBSql.getMap("select hz.ysze AS ysze,BUDGETTARGET,(hz.ysze / mb.BUDGETTARGET)*100 AS yewcl " + RowMap yswcl = DBSql.getMap("select hz.ysze AS ysze,BUDGETTARGET,(hz.ysze / mb.BUDGETTARGET)*100 AS yewcl " +
" from " + " from " +

View File

@ -86,10 +86,16 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
LOGGER.info("已删除目标表[{}]中{}条数据", section.getTargetTable(), deleteCount); LOGGER.info("已删除目标表[{}]中{}条数据", section.getTargetTable(), deleteCount);
// 获取所有销售组织-客户组合 // 获取所有销售组织-客户组合
List<RowMap> customerMaps = DBSql.getMaps( String bkgs = section.getBkgs();
"SELECT DISTINCT QYGS, FCUSTNAME, SQ AS FPROVINCE, CS AS FCITY, QY AS FDISTRICT, XSZZ " + String sql = "SELECT DISTINCT QYGS, FCUSTNAME, SQ AS FPROVINCE, CS AS FCITY, QY AS FDISTRICT, XSZZ " +
"FROM " + section.getYsdTable() + " WHERE QYGS IS NOT NULL AND FCUSTNAME IS NOT NULL" " FROM " + section.getYsdTable() + " WHERE QYGS IS NOT NULL AND FCUSTNAME IS NOT NULL";
); // if (bkgs.equals("北新防水")){
// sql += " AND XSZZ !='北新防水工程(辽宁)有限公司' " +
// "AND XSZZ != '北新防水工程(四川)有限公司' AND F_SFNBJY ='是'";
// }else {
// sql += " AND F_SFNBJY ='是'";
// }
List<RowMap> customerMaps = DBSql.getMaps(sql);
if (customerMaps == null || customerMaps.isEmpty()) { if (customerMaps == null || customerMaps.isEmpty()) {
LOGGER.warn("{}板块未查询到销售组织和客户数据", sectionName); LOGGER.warn("{}板块未查询到销售组织和客户数据", sectionName);
@ -142,6 +148,7 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
// 获取需要处理的所有月末日期 // 获取需要处理的所有月末日期
List<LocalDate> monthEndDates = getMonthEndDates(startDate, endDate); List<LocalDate> monthEndDates = getMonthEndDates(startDate, endDate);
LOGGER.info("查看时间范围:{}",Arrays.toString(monthEndDates.toArray()));
// 批量预加载所有需要的数据 // 批量预加载所有需要的数据
Map<String, BigDecimal> preloadedResults = preloadAllData( Map<String, BigDecimal> preloadedResults = preloadAllData(
@ -155,13 +162,18 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
String saleOrgUnit = customer.getString("XSZZ"); String saleOrgUnit = customer.getString("XSZZ");
String custName = customer.getString("FCUSTNAME"); String custName = customer.getString("FCUSTNAME");
String keyPrefix = saleOrgUnit + "_" + custName + "_"; String keyPrefix = saleOrgUnit + "_" + custName + "_";
// LOGGER.info("客户、销售组织:{}",keyPrefix);
try { try {
// 从预加载数据中获取计算结果 // 从预加载数据中获取计算结果
BigDecimal qcye = getPreloadedValue(preloadedResults, keyPrefix + "QCYE_" + monthEndDate); BigDecimal qcye = getPreloadedValue(preloadedResults, keyPrefix + "QCYE_" + monthEndDate);
// LOGGER.info("计算出来的期初余额:{}",qcye.doubleValue());
BigDecimal ljxs = getPreloadedValue(preloadedResults, keyPrefix + "LJXS_" + monthEndDate); BigDecimal ljxs = getPreloadedValue(preloadedResults, keyPrefix + "LJXS_" + monthEndDate);
// LOGGER.info("计算出来的累计销售:{}",ljxs.doubleValue());
BigDecimal ljhk = getPreloadedValue(preloadedResults, keyPrefix + "LJHK_" + monthEndDate); BigDecimal ljhk = getPreloadedValue(preloadedResults, keyPrefix + "LJHK_" + monthEndDate);
// LOGGER.info("计算出来的累计还款:{}",ljhk.doubleValue());
BigDecimal ysye = qcye.add(ljxs).subtract(ljhk); BigDecimal ysye = qcye.add(ljxs).subtract(ljhk);
// LOGGER.info("计算出来的应收余额:{}",ysye.doubleValue());
// 从预加载数据中获取账龄分析 // 从预加载数据中获取账龄分析
Map<String, BigDecimal> zlfx = new HashMap<>(); Map<String, BigDecimal> zlfx = new HashMap<>();
@ -223,21 +235,20 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
Map<String, BigDecimal> results = new HashMap<>(); Map<String, BigDecimal> results = new HashMap<>();
try { try {
// 扩展日期范围包含去年完整数据和当前时间范围
LocalDate extendedStartDate = monthEndDates.get(0).minusYears(1).withDayOfYear(1);
LocalDate extendedEndDate = monthEndDates.get(monthEndDates.size() - 1);
List<LocalDate> extendedMonthEndDates = getMonthEndDates(extendedStartDate, extendedEndDate);
// 批量查询应收单数据 // 批量查询应收单数据
Map<String, BigDecimal> ysData = batchQueryYSDData(section, saleOrgUnits, custNames, monthEndDates); Map<String, BigDecimal> ysData = batchQueryYSDData(section, saleOrgUnits, custNames, extendedMonthEndDates);
// 批量查询收款单数据 // 批量查询收款单数据
Map<String, BigDecimal> skData = batchQuerySKDData(section, saleOrgUnits, custNames, monthEndDates); Map<String, BigDecimal> skData = batchQuerySKDData(section, saleOrgUnits, custNames, extendedMonthEndDates);
// 批量查询收款退款单数据 // 批量查询收款退款单数据
Map<String, BigDecimal> sktkData = batchQuerySKTKDData(section, saleOrgUnits, custNames, monthEndDates); Map<String, BigDecimal> sktkData = batchQuerySKTKDData(section, saleOrgUnits, custNames, extendedMonthEndDates);
// 批量查询历史余额数据 // 批量查询历史余额数据
Map<String, BigDecimal> historyData = batchQueryHistoryBalance(section, saleOrgUnits, custNames, monthEndDates); Map<String, BigDecimal> historyData = batchQueryHistoryBalance(section, saleOrgUnits, custNames, extendedMonthEndDates);
// 计算所有需要的指标 // 计算所有需要的指标
calculateAllMetrics(results, ysData, skData, sktkData, historyData, saleOrgUnits, custNames, monthEndDates); calculateAllMetrics(results, ysData, skData, sktkData, historyData, saleOrgUnits, custNames, monthEndDates,extendedMonthEndDates);
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("预加载数据时发生错误", e); LOGGER.error("预加载数据时发生错误", e);
} }
@ -275,12 +286,19 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
.append(" 23:59:59')"); .append(" 23:59:59')");
} }
String bkgs = section.getBkgs();
String sql = "SELECT XSZZ, FCUSTNAME, DATE_FORMAT(DZRQ, '%Y-%m-%d') as BILL_DATE, SUM(SSJERMB) as TOTAL " + String sql = "SELECT XSZZ, FCUSTNAME, DATE_FORMAT(DZRQ, '%Y-%m-%d') as BILL_DATE, SUM(SSJERMB) as TOTAL " +
"FROM " + section.getYsdTable() + "FROM " + section.getYsdTable() +
" WHERE XSZZ IN (" + inSaleOrgs + ") " + " WHERE XSZZ IN (" + inSaleOrgs + ") " +
" AND FCUSTNAME IN (" + inCustNames + ") " + " AND FCUSTNAME IN (" + inCustNames + ") " +
" AND (" + dateCondition + ") " + " AND (" + dateCondition + ") ";
" GROUP BY XSZZ, FCUSTNAME, DATE_FORMAT(DZRQ, '%Y-%m-%d')"; if (bkgs.equals("北新防水")){
sql += " AND XSZZ !='北新防水工程(辽宁)有限公司' " +
"AND XSZZ != '北新防水工程(四川)有限公司' AND F_SFNBJY ='是'";
}else {
sql += " AND F_SFNBJY ='是'";
}
sql += " GROUP BY XSZZ, FCUSTNAME, DATE_FORMAT(DZRQ, '%Y-%m-%d')";
List<RowMap> queryResults = DBSql.getMaps(sql); List<RowMap> queryResults = DBSql.getMaps(sql);
@ -322,12 +340,19 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
.append(" 23:59:59')"); .append(" 23:59:59')");
} }
String bkgs = section.getBkgs();
String sql = "SELECT FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d') as BILL_DATE, SUM(FSALEAMOUNTRMB) as TOTAL " + String sql = "SELECT FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d') as BILL_DATE, SUM(FSALEAMOUNTRMB) as TOTAL " +
"FROM " + section.getSkdTable() + "FROM " + section.getSkdTable() +
" WHERE FSALEORGUNIT IN (" + inSaleOrgs + ") " + " WHERE FSALEORGUNIT IN (" + inSaleOrgs + ") " +
" AND FCUSTNAME IN (" + inCustNames + ") " + " AND FCUSTNAME IN (" + inCustNames + ") " +
" AND (" + dateCondition + ") " + " AND (" + dateCondition + ") ";
" GROUP BY FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d')"; if (bkgs.equals("北新防水")){
sql += " AND FSALEORGUNIT !='北新防水工程(辽宁)有限公司' " +
"AND FSALEORGUNIT != '北新防水工程(四川)有限公司' AND F_SFNBJY ='是'";
}else {
sql += " AND F_SFNBJY ='是'";
}
sql += " GROUP BY FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d')";
List<RowMap> queryResults = DBSql.getMaps(sql); List<RowMap> queryResults = DBSql.getMaps(sql);
@ -369,12 +394,19 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
.append(" 23:59:59')"); .append(" 23:59:59')");
} }
String bkgs = section.getBkgs();
String sql = "SELECT FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d') as BILL_DATE, SUM(FSALEAMOUNTRMB) as TOTAL " + String sql = "SELECT FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d') as BILL_DATE, SUM(FSALEAMOUNTRMB) as TOTAL " +
"FROM " + section.getSktkdTable() + "FROM " + section.getSktkdTable() +
" WHERE FSALEORGUNIT IN (" + inSaleOrgs + ") " + " WHERE FSALEORGUNIT IN (" + inSaleOrgs + ") " +
" AND FCUSTNAME IN (" + inCustNames + ") " + " AND FCUSTNAME IN (" + inCustNames + ") " +
" AND (" + dateCondition + ") " + " AND (" + dateCondition + ") ";
" GROUP BY FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d')"; if (bkgs.equals("北新防水")){
sql += " AND FSALEORGUNIT !='北新防水工程(辽宁)有限公司' " +
"AND FSALEORGUNIT != '北新防水工程(四川)有限公司' AND F_SFNBJY ='是'";
}else {
sql += " AND F_SFNBJY ='是'";
}
sql += " GROUP BY FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d')";
List<RowMap> queryResults = DBSql.getMaps(sql); List<RowMap> queryResults = DBSql.getMaps(sql);
@ -433,7 +465,8 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
private void calculateAllMetrics(Map<String, BigDecimal> results, private void calculateAllMetrics(Map<String, BigDecimal> results,
Map<String, BigDecimal> ysData, Map<String, BigDecimal> skData, Map<String, BigDecimal> ysData, Map<String, BigDecimal> skData,
Map<String, BigDecimal> sktkData, Map<String, BigDecimal> historyData, Map<String, BigDecimal> sktkData, Map<String, BigDecimal> historyData,
List<String> saleOrgUnits, List<String> custNames, List<LocalDate> monthEndDates) { List<String> saleOrgUnits, List<String> custNames, List<LocalDate> monthEndDates,
List<LocalDate> extendedMonthEndDates) {
// 计算每个客户每个月的指标 // 计算每个客户每个月的指标
for (String saleOrgUnit : saleOrgUnits) { for (String saleOrgUnit : saleOrgUnits) {
@ -444,10 +477,10 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
String dateKey = monthEndDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String dateKey = monthEndDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
String fullKeyPrefix = keyPrefix + dateKey; String fullKeyPrefix = keyPrefix + dateKey;
// 计算期初余额上一年度累计 try {
LocalDate previousYearStart = monthEndDate.minusYears(1).withDayOfYear(1); // 计算期初余额上一年度末余额
LocalDate previousYearEnd = monthEndDate.minusYears(1).withDayOfYear(365); LocalDate previousYearEnd = monthEndDate.minusYears(1).withDayOfYear(monthEndDate.minusYears(1).lengthOfYear());
BigDecimal qcye = calculatePeriodBalance(ysData, skData, sktkData, saleOrgUnit, custName, previousYearStart, previousYearEnd); BigDecimal qcye = calculatePeriodBalance(ysData, skData, sktkData, saleOrgUnit, custName, previousYearEnd.withDayOfYear(1), previousYearEnd);
// 计算累计销售本年年初到当前月末 // 计算累计销售本年年初到当前月末
LocalDate yearStart = monthEndDate.withDayOfYear(1); LocalDate yearStart = monthEndDate.withDayOfYear(1);
@ -467,10 +500,18 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
results.put(keyPrefix + "LJXS_" + monthEndDate, ljxs); results.put(keyPrefix + "LJXS_" + monthEndDate, ljxs);
results.put(keyPrefix + "LJHK_" + monthEndDate, ljhk); results.put(keyPrefix + "LJHK_" + monthEndDate, ljhk);
results.put(keyPrefix + "YSYE_" + monthEndDate, ysye); results.put(keyPrefix + "YSYE_" + monthEndDate, ysye);
// LOGGER.info("计算{}{}",keyPrefix + "QCYE_" + monthEndDate,qcye);
// LOGGER.info("计算{}{}",keyPrefix + "LJXS_" + monthEndDate, ljxs);
// LOGGER.info("计算{}{}",keyPrefix + "LJHK_" + monthEndDate, ljhk);
// LOGGER.info("计算{}{}",keyPrefix + "YSYE_" + monthEndDate, ysye);
for (Map.Entry<String, BigDecimal> entry : zlfx.entrySet()) { for (Map.Entry<String, BigDecimal> entry : zlfx.entrySet()) {
results.put(keyPrefix + entry.getKey() + "_" + monthEndDate, entry.getValue()); results.put(keyPrefix + entry.getKey() + "_" + monthEndDate, entry.getValue());
} }
} catch (Exception e) {
LOGGER.error("计算指标时发生错误,销售组织: {}, 客户: {}, 日期: {}",
saleOrgUnit, custName, monthEndDate, e);
}
} }
} }
} }

View File

@ -448,7 +448,7 @@ public class SaleCountDimensionImpl implements DataSummaryService {
" LB_2, LB_3, SQ, CS, QY, SUM(ZSSL) AS XL," + " LB_2, LB_3, SQ, CS, QY, SUM(ZSSL) AS XL," +
" SUM(SSJERMB) AS XE, SUM(XSSL) AS TSXL, SUM(NMNY) AS BHSXE,YEARMONTH" + " SUM(SSJERMB) AS XE, SUM(XSSL) AS TSXL, SUM(NMNY) AS BHSXE,YEARMONTH" +
" FROM " + SALES_DETAIL_TABLE + " FROM " + SALES_DETAIL_TABLE +
" WHERE DZRQ >= ? AND BKGS = ?" + " WHERE DZRQ >= DATE_FORMAT(?, '%Y-%m-01') AND BKGS = ?" +
" GROUP BY QYGS, KCZZ, " + " GROUP BY QYGS, KCZZ, " +
" CASE " + " CASE " +
" WHEN BKGS = '龙牌' AND LB_1 IN ('装饰石膏板', '鲁班装饰万能板', '石膏板') THEN '石膏板'" + " WHEN BKGS = '龙牌' AND LB_1 IN ('装饰石膏板', '鲁班装饰万能板', '石膏板') THEN '石膏板'" +
@ -501,8 +501,10 @@ public class SaleCountDimensionImpl implements DataSummaryService {
bo.set("JD", location.getLongitude()); bo.set("JD", location.getLongitude());
bo.set("WD", location.getLatitude()); bo.set("WD", location.getLatitude());
} }
if ("石膏板".equals(lb_1) if ("石膏板".equals(lb_1)){
|| (bkgs.equals("北新防水") && ("高分子".equals(lb_1) || "卷材".equals(lb_1) || "涂料".equals(lb_1))) bo.set("XL", map.getDouble("TSXL"));
bo.set("SNTQXL", map.getString("sntqtsxl"));
} else if ((bkgs.equals("北新防水") && ("高分子".equals(lb_1) || "卷材".equals(lb_1) || "涂料".equals(lb_1)))
|| (bkgs.equals("北新涂料") && "涂料".equals(lb_1))) { || (bkgs.equals("北新涂料") && "涂料".equals(lb_1))) {
bo.set("XL", map.getDouble("TSXL")); bo.set("XL", map.getDouble("TSXL"));
bo.set("SNTQXL", map.getString("sntqtsxl")); bo.set("SNTQXL", map.getString("sntqtsxl"));
@ -582,7 +584,7 @@ public class SaleCountDimensionImpl implements DataSummaryService {
" END AS LB_1," + " END AS LB_1," +
" LB_2, LB_3, SQ, CS, QY, SUM(NMNY) as BHSYYSR, SUM(SSJERMB) AS YYSR, YEARMONTH" + " LB_2, LB_3, SQ, CS, QY, SUM(NMNY) as BHSYYSR, SUM(SSJERMB) AS YYSR, YEARMONTH" +
" FROM " + SALES_DETAIL_TABLE + " FROM " + SALES_DETAIL_TABLE +
" WHERE DZRQ >= ? AND DZRQ < ? AND BKGS = ?" + " WHERE DZRQ >= DATE_FORMAT(?, '%Y-%m-01') AND DZRQ < ? AND BKGS = ?" +
" GROUP BY QYGS, KCZZ, " + " GROUP BY QYGS, KCZZ, " +
" CASE " + " CASE " +
" WHEN BKGS = '龙牌' AND LB_1 IN ('装饰石膏板', '鲁班装饰万能板', '石膏板') THEN '石膏板'" + " WHEN BKGS = '龙牌' AND LB_1 IN ('装饰石膏板', '鲁班装饰万能板', '石膏板') THEN '石膏板'" +

View File

@ -104,6 +104,10 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
LOGGER.info("处理配置BindID={}, 源表={}, 目标表={}, CC_ID={}, 时间字段={}, 分区字段配置={}, 板块={}", LOGGER.info("处理配置BindID={}, 源表={}, 目标表={}, CC_ID={}, 时间字段={}, 分区字段配置={}, 板块={}",
bindId, tableName, targetTable, ccId,timeField,partitionField,bkgs); bindId, tableName, targetTable, ccId,timeField,partitionField,bkgs);
if (tablename.equals("应收表") && (bkgs.equals("北新防水") || bkgs.equals("北新涂料"))) {
LOGGER.info("北新防水、北新涂料不需要定时器拉取应收单数据");
return dateRange;
}
// 查询子表字段映射配置 // 查询子表字段映射配置
List<BO> fieldMappings = SDK.getBOAPI() List<BO> fieldMappings = SDK.getBOAPI()

View File

@ -1,7 +1,9 @@
package com.awspaas.user.apps.bnbm.datalinkup.util; package com.awspaas.user.apps.bnbm.datalinkup.util;
import com.actionsoft.bpms.bo.engine.BO; import com.actionsoft.bpms.bo.engine.BO;
import com.actionsoft.bpms.util.UtilString;
import com.actionsoft.sdk.local.SDK; import com.actionsoft.sdk.local.SDK;
import org.apache.commons.lang3.StringUtils;
import java.util.List; import java.util.List;
@ -18,6 +20,9 @@ public class SaleUtil {
if (boList == null || boList.isEmpty()) { if (boList == null || boList.isEmpty()) {
return new String[]{defaultJzgz, defaultJcmc,defaultProdCat}; return new String[]{defaultJzgz, defaultJcmc,defaultProdCat};
} }
lb_1 = StringUtils.isBlank(lb_1)?"":lb_1;
lb_2 = StringUtils.isBlank(lb_2)?"":lb_2;
lb_3 = StringUtils.isBlank(lb_3)?"":lb_3;
for (BO bo : boList) { for (BO bo : boList) {
String bbgs = bo.getString("BBGS"); String bbgs = bo.getString("BBGS");
String cpdl = bo.getString("CPDL"); String cpdl = bo.getString("CPDL");