1、代码修改提交
This commit is contained in:
parent
3b544b04a2
commit
86e0029d0e
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -53,7 +53,7 @@ public class NineGridCountJob implements IJob {
|
||||
int year = now.minusMonths(1).getYear();
|
||||
RowMap cwsj = DBSql.getMap("SELECT DNSJLJ FROM BO_EU_CWSJ_INTERFACE_LRZE " +
|
||||
"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 " +
|
||||
" from " +
|
||||
|
||||
@ -86,10 +86,16 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
|
||||
LOGGER.info("已删除目标表[{}]中{}条数据", section.getTargetTable(), deleteCount);
|
||||
|
||||
// 获取所有销售组织-客户组合
|
||||
List<RowMap> customerMaps = DBSql.getMaps(
|
||||
"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"
|
||||
);
|
||||
String bkgs = section.getBkgs();
|
||||
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";
|
||||
// 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()) {
|
||||
LOGGER.warn("{}板块未查询到销售组织和客户数据", sectionName);
|
||||
@ -142,6 +148,7 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
|
||||
|
||||
// 获取需要处理的所有月末日期
|
||||
List<LocalDate> monthEndDates = getMonthEndDates(startDate, endDate);
|
||||
LOGGER.info("查看时间范围:{}",Arrays.toString(monthEndDates.toArray()));
|
||||
|
||||
// 批量预加载所有需要的数据
|
||||
Map<String, BigDecimal> preloadedResults = preloadAllData(
|
||||
@ -155,13 +162,18 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
|
||||
String saleOrgUnit = customer.getString("XSZZ");
|
||||
String custName = customer.getString("FCUSTNAME");
|
||||
String keyPrefix = saleOrgUnit + "_" + custName + "_";
|
||||
// LOGGER.info("客户、销售组织:{}",keyPrefix);
|
||||
|
||||
try {
|
||||
// 从预加载数据中获取计算结果
|
||||
BigDecimal qcye = getPreloadedValue(preloadedResults, keyPrefix + "QCYE_" + monthEndDate);
|
||||
// LOGGER.info("计算出来的期初余额:{}",qcye.doubleValue());
|
||||
BigDecimal ljxs = getPreloadedValue(preloadedResults, keyPrefix + "LJXS_" + monthEndDate);
|
||||
// LOGGER.info("计算出来的累计销售:{}",ljxs.doubleValue());
|
||||
BigDecimal ljhk = getPreloadedValue(preloadedResults, keyPrefix + "LJHK_" + monthEndDate);
|
||||
// LOGGER.info("计算出来的累计还款:{}",ljhk.doubleValue());
|
||||
BigDecimal ysye = qcye.add(ljxs).subtract(ljhk);
|
||||
// LOGGER.info("计算出来的应收余额:{}",ysye.doubleValue());
|
||||
|
||||
// 从预加载数据中获取账龄分析
|
||||
Map<String, BigDecimal> zlfx = new HashMap<>();
|
||||
@ -223,21 +235,20 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
|
||||
Map<String, BigDecimal> results = new HashMap<>();
|
||||
|
||||
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) {
|
||||
LOGGER.error("预加载数据时发生错误", e);
|
||||
}
|
||||
@ -275,12 +286,19 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
|
||||
.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 " +
|
||||
"FROM " + section.getYsdTable() +
|
||||
" WHERE XSZZ IN (" + inSaleOrgs + ") " +
|
||||
" AND FCUSTNAME IN (" + inCustNames + ") " +
|
||||
" AND (" + dateCondition + ") " +
|
||||
" GROUP BY XSZZ, FCUSTNAME, DATE_FORMAT(DZRQ, '%Y-%m-%d')";
|
||||
" AND (" + dateCondition + ") ";
|
||||
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);
|
||||
|
||||
@ -322,12 +340,19 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
|
||||
.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 " +
|
||||
"FROM " + section.getSkdTable() +
|
||||
" WHERE FSALEORGUNIT IN (" + inSaleOrgs + ") " +
|
||||
" AND FCUSTNAME IN (" + inCustNames + ") " +
|
||||
" AND (" + dateCondition + ") " +
|
||||
" GROUP BY FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d')";
|
||||
" AND (" + dateCondition + ") ";
|
||||
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);
|
||||
|
||||
@ -369,12 +394,19 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
|
||||
.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 " +
|
||||
"FROM " + section.getSktkdTable() +
|
||||
" WHERE FSALEORGUNIT IN (" + inSaleOrgs + ") " +
|
||||
" AND FCUSTNAME IN (" + inCustNames + ") " +
|
||||
" AND (" + dateCondition + ") " +
|
||||
" GROUP BY FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d')";
|
||||
" AND (" + dateCondition + ") ";
|
||||
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);
|
||||
|
||||
@ -433,7 +465,8 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
|
||||
private void calculateAllMetrics(Map<String, BigDecimal> results,
|
||||
Map<String, BigDecimal> ysData, Map<String, BigDecimal> skData,
|
||||
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) {
|
||||
@ -444,10 +477,10 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
|
||||
String dateKey = monthEndDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
||||
String fullKeyPrefix = keyPrefix + dateKey;
|
||||
|
||||
// 计算期初余额(上一年度累计)
|
||||
LocalDate previousYearStart = monthEndDate.minusYears(1).withDayOfYear(1);
|
||||
LocalDate previousYearEnd = monthEndDate.minusYears(1).withDayOfYear(365);
|
||||
BigDecimal qcye = calculatePeriodBalance(ysData, skData, sktkData, saleOrgUnit, custName, previousYearStart, previousYearEnd);
|
||||
try {
|
||||
// 计算期初余额(上一年度末余额)
|
||||
LocalDate previousYearEnd = monthEndDate.minusYears(1).withDayOfYear(monthEndDate.minusYears(1).lengthOfYear());
|
||||
BigDecimal qcye = calculatePeriodBalance(ysData, skData, sktkData, saleOrgUnit, custName, previousYearEnd.withDayOfYear(1), previousYearEnd);
|
||||
|
||||
// 计算累计销售(本年年初到当前月末)
|
||||
LocalDate yearStart = monthEndDate.withDayOfYear(1);
|
||||
@ -467,10 +500,18 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
|
||||
results.put(keyPrefix + "LJXS_" + monthEndDate, ljxs);
|
||||
results.put(keyPrefix + "LJHK_" + monthEndDate, ljhk);
|
||||
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()) {
|
||||
results.put(keyPrefix + entry.getKey() + "_" + monthEndDate, entry.getValue());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("计算指标时发生错误,销售组织: {}, 客户: {}, 日期: {}",
|
||||
saleOrgUnit, custName, monthEndDate, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -448,7 +448,7 @@ public class SaleCountDimensionImpl implements DataSummaryService {
|
||||
" LB_2, LB_3, SQ, CS, QY, SUM(ZSSL) AS XL," +
|
||||
" SUM(SSJERMB) AS XE, SUM(XSSL) AS TSXL, SUM(NMNY) AS BHSXE,YEARMONTH" +
|
||||
" FROM " + SALES_DETAIL_TABLE +
|
||||
" WHERE DZRQ >= ? AND BKGS = ?" +
|
||||
" WHERE DZRQ >= DATE_FORMAT(?, '%Y-%m-01') AND BKGS = ?" +
|
||||
" GROUP BY QYGS, KCZZ, " +
|
||||
" CASE " +
|
||||
" WHEN BKGS = '龙牌' AND LB_1 IN ('装饰石膏板', '鲁班装饰万能板', '石膏板') THEN '石膏板'" +
|
||||
@ -501,12 +501,14 @@ public class SaleCountDimensionImpl implements DataSummaryService {
|
||||
bo.set("JD", location.getLongitude());
|
||||
bo.set("WD", location.getLatitude());
|
||||
}
|
||||
if ("石膏板".equals(lb_1)
|
||||
|| (bkgs.equals("北新防水") && ("高分子".equals(lb_1) || "卷材".equals(lb_1) || "涂料".equals(lb_1)))
|
||||
|| (bkgs.equals("北新涂料") && "涂料".equals(lb_1))){
|
||||
if ("石膏板".equals(lb_1)){
|
||||
bo.set("XL", map.getDouble("TSXL"));
|
||||
bo.set("SNTQXL", map.getString("sntqtsxl"));
|
||||
}else {
|
||||
} else if ((bkgs.equals("北新防水") && ("高分子".equals(lb_1) || "卷材".equals(lb_1) || "涂料".equals(lb_1)))
|
||||
|| (bkgs.equals("北新涂料") && "涂料".equals(lb_1))) {
|
||||
bo.set("XL", map.getDouble("TSXL"));
|
||||
bo.set("SNTQXL", map.getString("sntqtsxl"));
|
||||
} else {
|
||||
bo.set("XL", map.getDouble("XL"));
|
||||
bo.set("SNTQXL", map.getString("sntqXL"));
|
||||
}
|
||||
@ -582,7 +584,7 @@ public class SaleCountDimensionImpl implements DataSummaryService {
|
||||
" END AS LB_1," +
|
||||
" LB_2, LB_3, SQ, CS, QY, SUM(NMNY) as BHSYYSR, SUM(SSJERMB) AS YYSR, YEARMONTH" +
|
||||
" 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, " +
|
||||
" CASE " +
|
||||
" WHEN BKGS = '龙牌' AND LB_1 IN ('装饰石膏板', '鲁班装饰万能板', '石膏板') THEN '石膏板'" +
|
||||
|
||||
@ -104,6 +104,10 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
|
||||
|
||||
LOGGER.info("处理配置:BindID={}, 源表={}, 目标表={}, CC_ID={}, 时间字段={}, 分区字段配置={}, 板块={}",
|
||||
bindId, tableName, targetTable, ccId,timeField,partitionField,bkgs);
|
||||
if (tablename.equals("应收表") && (bkgs.equals("北新防水") || bkgs.equals("北新涂料"))) {
|
||||
LOGGER.info("北新防水、北新涂料不需要定时器拉取应收单数据");
|
||||
return dateRange;
|
||||
}
|
||||
|
||||
// 查询子表字段映射配置
|
||||
List<BO> fieldMappings = SDK.getBOAPI()
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
package com.awspaas.user.apps.bnbm.datalinkup.util;
|
||||
|
||||
import com.actionsoft.bpms.bo.engine.BO;
|
||||
import com.actionsoft.bpms.util.UtilString;
|
||||
import com.actionsoft.sdk.local.SDK;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -18,6 +20,9 @@ public class SaleUtil {
|
||||
if (boList == null || boList.isEmpty()) {
|
||||
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) {
|
||||
String bbgs = bo.getString("BBGS");
|
||||
String cpdl = bo.getString("CPDL");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user