1、应收数据分组查询

2、防水涂料计算
3、运营管理部回填
4、9宫格增加sql
This commit is contained in:
llllon 2025-10-27 08:34:47 +08:00
parent af0c5cb8af
commit 490e2efb43
7 changed files with 212 additions and 101 deletions

View File

@ -8,9 +8,13 @@ import com.actionsoft.bpms.util.DBSql;
import com.actionsoft.sdk.local.SDK; import com.actionsoft.sdk.local.SDK;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List;
/** /**
* @ClassName: NineGridCountJob * @ClassName: NineGridCountJob
@ -19,6 +23,7 @@ import java.time.format.DateTimeFormatter;
* @Blog: https:// * @Blog: https://
*/ */
public class NineGridCountJob implements IJob { public class NineGridCountJob implements IJob {
private static final Logger LOGGER = LoggerFactory.getLogger(NineGridCountJob.class);
@Override @Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
LocalDate now = LocalDate.now(); LocalDate now = LocalDate.now();
@ -26,6 +31,13 @@ public class NineGridCountJob implements IJob {
String nowYearMonthStr = now.format(DateTimeFormatter.ofPattern("yyyy-MM")); String nowYearMonthStr = now.format(DateTimeFormatter.ofPattern("yyyy-MM"));
LocalDate nowYearFirstDay = now.withDayOfYear(1); LocalDate nowYearFirstDay = now.withDayOfYear(1);
String nowYearFirstDayStr = nowYearFirstDay.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String nowYearFirstDayStr = nowYearFirstDay.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LOGGER.info("nowYearMonthStr:{},nowYearFirstDayStr:{}",nowYearMonthStr,nowYearFirstDayStr);
//先删除数据
BO boEuOaNineGrid = SDK.getBOAPI().query("BO_EU_OA_NINE_GRID").addQuery("YEARMONTH =", nowYearMonthStr).detail();
if (boEuOaNineGrid!=null){
SDK.getBOAPI().removeByBindId("BO_EU_OA_NINE_GRID",boEuOaNineGrid.getBindId());
}
BO bo = new BO(); BO bo = new BO();
bo.set("YEARMONTH",nowYearMonthStr); bo.set("YEARMONTH",nowYearMonthStr);
//查询销售数据 //查询销售数据
@ -64,6 +76,7 @@ public class NineGridCountJob implements IJob {
" (select SUM(`BUDGETTARGET`) AS BUDGETTARGET from BO_EU_ANNUAL_BUDGET WHERE YEAR = '" + year + "') mb on 1=1"); " (select SUM(`BUDGETTARGET`) AS BUDGETTARGET from BO_EU_ANNUAL_BUDGET WHERE YEAR = '" + year + "') mb on 1=1");
bo.set("ZB4",yswcl.getString("yewcl"));//预算完成率 bo.set("ZB4",yswcl.getString("yewcl"));//预算完成率
String lastMonth = now.minusMonths(1).format(DateTimeFormatter.ofPattern("yyyy-MM")); String lastMonth = now.minusMonths(1).format(DateTimeFormatter.ofPattern("yyyy-MM"));
LOGGER.info("lastMonth:{}",lastMonth);
RowMap cl = DBSql.getMap("SELECT YEARS_MONTH," + RowMap cl = DBSql.getMap("SELECT YEARS_MONTH," +
" MAX(CASE WHEN PRODEUCT = '石膏板' THEN YTD END) AS SGBYTD," + " MAX(CASE WHEN PRODEUCT = '石膏板' THEN YTD END) AS SGBYTD," +
" MAX(CASE WHEN PRODEUCT = '轻钢龙骨' THEN YTD END) AS QGLGYTD" + " MAX(CASE WHEN PRODEUCT = '轻钢龙骨' THEN YTD END) AS QGLGYTD" +
@ -76,6 +89,18 @@ public class NineGridCountJob implements IJob {
bo.set("ZB8",map.getString("steel_keel_avg_price"));// 龙骨均价 bo.set("ZB8",map.getString("steel_keel_avg_price"));// 龙骨均价
bo.set("ZB9","");//总运费 bo.set("ZB9","");//总运费
List<RowMap> maps = DBSql.getMaps("SELECT SUM(a.YSYE) AS total_YSYE, a.BKGS, b.max_rq " +
" FROM BO_EU_BNBM_DATALINKUP_XS_YSL a" +
" INNER JOIN (" +
" SELECT BKGS, MAX(RQ) as max_rq" +
" FROM BO_EU_BNBM_DATALINKUP_XS_YSL" +
" GROUP BY BKGS" +
" ) b ON a.BKGS = b.BKGS AND a.RQ = b.max_rq" +
" GROUP BY a.BKGS, b.max_rq");
BigDecimal totalSum = maps.stream()
.map(o -> (BigDecimal) o.get("total_YSYE"))
.reduce(BigDecimal.ZERO, BigDecimal::add);
bo.set("ZB10",totalSum);//应收总额
//商旅总额 //商旅总额
String querySql_SL ="SELECT SUM(PRICESERVICETOTALFEE) AS PRICESERVICETOTALFEE_SUM FROM BO_EU_TRAVELMODULE_XFMX WHERE TRAVELTIME>=CONCAT(YEAR (CURDATE()),'-01-01')"; String querySql_SL ="SELECT SUM(PRICESERVICETOTALFEE) AS PRICESERVICETOTALFEE_SUM FROM BO_EU_TRAVELMODULE_XFMX WHERE TRAVELTIME>=CONCAT(YEAR (CURDATE()),'-01-01')";

View File

@ -89,13 +89,23 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
String bkgs = section.getBkgs(); String bkgs = section.getBkgs();
String sql = "SELECT QYGS, FCUSTNAME, SQ AS FPROVINCE, CS AS FCITY, QY AS FDISTRICT, XSZZ " + String sql = "SELECT 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 GROUP BY FCUSTNAME,XSZZ"; " FROM " + section.getYsdTable() + " WHERE QYGS IS NOT NULL AND FCUSTNAME IS NOT NULL GROUP BY FCUSTNAME,XSZZ";
// if (bkgs.equals("北新防水")){ if (bkgs.equals("北新防水")){
// sql += " AND XSZZ !='北新防水工程(辽宁)有限公司' " + sql += " AND XSZZ !='北新防水工程(辽宁)有限公司' " +
// "AND XSZZ != '北新防水工程(四川)有限公司' AND F_SFNBJY =''"; "AND XSZZ != '北新防水工程(四川)有限公司' AND F_SFNBJY =''";
// }else { }else {
// sql += " AND F_SFNBJY =''"; sql += " AND F_SFNBJY =''";
// } }
List<RowMap> customerMaps = DBSql.getMaps(sql); List<RowMap> customerMaps = DBSql.getMaps(sql);
// List<RowMap> customerMaps = new ArrayList<>();
// HashMap<String, Object> hashMap = new HashMap<>();
// hashMap.put("QYGS","北方区域公司");
// hashMap.put("FCUSTNAME","大连红太阳防水保温工程有限公司");
// hashMap.put("FPROVINCE","辽宁省");
// hashMap.put("FCITY","大连市");
// hashMap.put("FDISTRICT","");
// hashMap.put("XSZZ","北新禹王防水科技集团有限公司");
// RowMap map = new RowMap(hashMap);
// customerMaps.add(map);
if (customerMaps == null || customerMaps.isEmpty()) { if (customerMaps == null || customerMaps.isEmpty()) {
LOGGER.warn("{}板块未查询到销售组织和客户数据", sectionName); LOGGER.warn("{}板块未查询到销售组织和客户数据", sectionName);
@ -145,6 +155,7 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
.map(row -> row.getString("FCUSTNAME")) .map(row -> row.getString("FCUSTNAME"))
.distinct() .distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
// LOGGER.info("saleOrgUnits:{},custNames:{}",Arrays.toString(saleOrgUnits.toArray()),Arrays.toString(custNames.toArray()));
// 获取需要处理的所有月末日期 // 获取需要处理的所有月末日期
List<LocalDate> monthEndDates = getMonthEndDates(startDate, endDate); List<LocalDate> monthEndDates = getMonthEndDates(startDate, endDate);
@ -231,7 +242,7 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
*/ */
private Map<String, BigDecimal> preloadAllData(Section section, private Map<String, BigDecimal> preloadAllData(Section section,
List<String> saleOrgUnits, List<String> custNames, List<LocalDate> monthEndDates) { List<String> saleOrgUnits, List<String> custNames, List<LocalDate> monthEndDates) {
LOGGER.info("预加载数据开始");
Map<String, BigDecimal> results = new HashMap<>(); Map<String, BigDecimal> results = new HashMap<>();
try { try {
@ -292,17 +303,17 @@ 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 + ") ";
if (bkgs.equals("北新防水")){ if (section.getBkgs().equals("北新防水")){
sql += " AND XSZZ !='北新防水工程(辽宁)有限公司' " + sql += " AND XSZZ !='北新防水工程(辽宁)有限公司' " +
"AND XSZZ != '北新防水工程(四川)有限公司' AND F_SFNBJY =''"; " AND XSZZ != '北新防水工程(四川)有限公司' AND F_SFNBJY =''";
}else { }else {
sql += " AND F_SFNBJY =''"; sql += " AND F_SFNBJY =''";
} }
sql += " GROUP BY XSZZ, FCUSTNAME, DATE_FORMAT(DZRQ, '%Y-%m-%d')"; sql += " GROUP BY XSZZ, FCUSTNAME, DATE_FORMAT(DZRQ, '%Y-%m-%d')";
// LOGGER.info("应收单数据sql = " + sql); // LOGGER.info("应收单数据sql = " + sql);
@ -349,17 +360,16 @@ 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 + ") ";
if (bkgs.equals("北新防水")){ if (section.getBkgs().equals("北新防水")){
sql += " AND FSALEORGUNIT !='北新防水工程(辽宁)有限公司' " + sql += " AND FSALEORGUNIT !='北新防水工程(辽宁)有限公司' " +
"AND FSALEORGUNIT != '北新防水工程(四川)有限公司' AND F_SFNBJY =''"; "AND FSALEORGUNIT != '北新防水工程(四川)有限公司' AND F_SFNBJY =''";
}else { }else {
sql += " AND F_SFNBJY =''"; sql += " AND F_SFNBJY =''";
} }
sql += " GROUP BY FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d')"; sql += " GROUP BY FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d')";
@ -407,17 +417,16 @@ 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 + ") ";
if (bkgs.equals("北新防水")){ if (section.getBkgs().equals("北新防水")){
sql += " AND FSALEORGUNIT !='北新防水工程(辽宁)有限公司' " + sql += " AND FSALEORGUNIT !='北新防水工程(辽宁)有限公司' " +
"AND FSALEORGUNIT != '北新防水工程(四川)有限公司' AND F_SFNBJY =''"; "AND FSALEORGUNIT != '北新防水工程(四川)有限公司' AND F_SFNBJY =''";
}else { }else {
sql += " AND F_SFNBJY =''"; sql += " AND F_SFNBJY =''";
} }
sql += " GROUP BY FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d')"; sql += " GROUP BY FSALEORGUNIT, FCUSTNAME, DATE_FORMAT(FBILLDATE, '%Y-%m-%d')";
@ -490,6 +499,7 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
for (LocalDate monthEndDate : monthEndDates) { for (LocalDate monthEndDate : monthEndDates) {
String dateKey = monthEndDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String dateKey = monthEndDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
// LOGGER.info("dateKey:{}",dateKey);
String fullKeyPrefix = keyPrefix + dateKey; String fullKeyPrefix = keyPrefix + dateKey;
try { try {
@ -499,6 +509,7 @@ public class WaterproofPaintAccountsReceivableJob implements IJob {
// 计算累计销售本年年初到当前月末 // 计算累计销售本年年初到当前月末
LocalDate yearStart = monthEndDate.withDayOfYear(1); LocalDate yearStart = monthEndDate.withDayOfYear(1);
// LOGGER.info("yearStart:{}",yearStart);
BigDecimal ljxs = calculatePeriodBalance(ysData, null, null, saleOrgUnit, custName, yearStart, monthEndDate); BigDecimal ljxs = calculatePeriodBalance(ysData, null, null, saleOrgUnit, custName, yearStart, monthEndDate);
// 计算累计还款本年年初到当前月末 // 计算累计还款本年年初到当前月末

View File

@ -28,10 +28,17 @@ import java.util.stream.Collectors;
public class YyglbDbHtJob implements IJob { public class YyglbDbHtJob implements IJob {
private static final Logger LOGGER = LoggerFactory.getLogger(YyglbDbHtJob.class); private static final Logger LOGGER = LoggerFactory.getLogger(YyglbDbHtJob.class);
@Override @Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { public void execute(JobExecutionContext job) throws JobExecutionException {
String param = SDK.getJobAPI().getJobParameter(job);
int timeRange = StringUtils.isNotBlank(param) ? Integer.parseInt(param) : 0;
LocalDate now = LocalDate.now().minusMonths(1); LocalDate now = LocalDate.now().minusMonths(1);
int year = now.getYear(); int year = now.getYear();
int monthValue = now.getMonthValue(); int monthValue = now.getMonthValue();
if (timeRange!=0){
LOGGER.info("timeRange:{}",timeRange);
monthValue = timeRange;
}
//分别遍历龙牌梦牌泰山 护面纸石膏煤的对标数量 //分别遍历龙牌梦牌泰山 护面纸石膏煤的对标数量
//公式为当月材料出库数量/当月石膏板折标产量 //公式为当月材料出库数量/当月石膏板折标产量
//龙牌取数为生产出库用量 护面纸取全部脱硫石膏取物料编码为101115110000130煤为包含煤生物质天然气蒸汽 //龙牌取数为生产出库用量 护面纸取全部脱硫石膏取物料编码为101115110000130煤为包含煤生物质天然气蒸汽
@ -48,6 +55,7 @@ public class YyglbDbHtJob implements IJob {
}catch (Exception e){ }catch (Exception e){
LOGGER.error("删除运营_物料单耗出库表出错删除范围为{}-{}e",year,monthValue,e.getLocalizedMessage()); LOGGER.error("删除运营_物料单耗出库表出错删除范围为{}-{}e",year,monthValue,e.getLocalizedMessage());
} }
try { try {
for (String bkgs : bkgsArr) { for (String bkgs : bkgsArr) {
List<RowMap> maps1 = DBSql.getMaps("SELECT FLZZ FROM BO_EU_BNBM_SCCK_HZ WHERE BKGS = '"+bkgs+"' " + List<RowMap> maps1 = DBSql.getMaps("SELECT FLZZ FROM BO_EU_BNBM_SCCK_HZ WHERE BKGS = '"+bkgs+"' " +
@ -62,12 +70,17 @@ public class YyglbDbHtJob implements IJob {
" AND FLZZ = '"+map2.getString("FLZZ")+"'"; " AND FLZZ = '"+map2.getString("FLZZ")+"'";
if (wlmckey.equals("石膏")){ if (wlmckey.equals("石膏")){
sql+=" AND WLMC IN ('脱硫石膏','磷石膏','天然石膏')"; sql+=" AND WLMC IN ('脱硫石膏','磷石膏','天然石膏')";
}else { } else if (wlmckey.equals("护面纸")) {
if (bkgs.equals("梦牌")) {
System.out.println("梦牌护面纸的判断");
sql += " AND WLMC LIKE '%" + wlmckey + "%' AND WLMC NOT LIKE '%覆膜%'";
}else {
sql+=" AND WLMC LIKE '%" + wlmckey + "%' ";
}
} else {
sql+=" AND WLMC LIKE '%" + wlmckey + "%' "; sql+=" AND WLMC LIKE '%" + wlmckey + "%' ";
} }
if (bkgs.equals("泰山石膏")){ LOGGER.info("查询执行的sql"+sql);
sql+="AND SCBM NOT LIKE '%穿孔板%' AND SCBM NOT LIKE '%装饰板%'";
}
RowMap map = DBSql.getMap(sql); RowMap map = DBSql.getMap(sql);
bo.set(wlmcValue,map.getString("SFSL")); bo.set(wlmcValue,map.getString("SFSL"));
if (StringUtils.isNotBlank(map2.getString("FLZZ"))){ if (StringUtils.isNotBlank(map2.getString("FLZZ"))){
@ -84,13 +97,26 @@ public class YyglbDbHtJob implements IJob {
bo.set("YF",monthValue); bo.set("YF",monthValue);
bo.set("BKGS",bkgs); bo.set("BKGS",bkgs);
bo.set("BK",bkgs.equals("泰山石膏")?"泰山":bkgs); bo.set("BK",bkgs.equals("泰山石膏")?"泰山":bkgs);
RowMap map1 = DBSql.getMap("SELECT SUM(ZBCL) AS zbcl FROM BO_EU_BNBM_SCRK_HZ " + String sql = "SELECT SUM(ZBCL) AS zbcl,SUM(RKSL) AS rksl FROM BO_EU_BNBM_SCRK_HZ " +
" WHERE BKGS = '" + bkgs + "' AND YEAR = '" + year + "' AND MONTH = '" + monthValue + "'" + " WHERE BKGS = '" + bkgs + "' AND YEAR = '" + year + "' AND MONTH = '" + monthValue + "'" +
" AND WLMC LIKE '%石膏板%' AND KCZZ = '"+bo.getString("FLZZ")+"'"); " AND KCZZ = '"+bo.getString("FLZZ")+"'";
if (bkgs.equals("泰山石膏")){
sql+=" AND WLMC LIKE '%石膏板%' AND SCBM NOT LIKE '%穿孔板%' AND SCBM NOT LIKE '%装饰板%'";
}else if (bkgs.equals("龙牌")){
sql+=" AND WLBM LIKE '3015%' AND WLFL != '装饰板'";
} else if (bkgs.equals("梦牌")) {
sql+=" AND (WLBM LIKE '3015%' OR WLBM LIKE '103071%') AND WLBM NOT LIKE '3015A%'";
} else {
sql+=" AND WLMC LIKE '%石膏板%'";
}
LOGGER.info("查询产量和折标产量的sql{}",sql);
RowMap map1 = DBSql.getMap(sql);
if (map1!=null){ if (map1!=null){
bo.set("SGBZBCL",map1.getString("zbcl")); bo.set("SGBZBCL",map1.getString("zbcl"));
bo.set("SGBRKSL",map1.getString("rksl"));
}else{ }else{
bo.set("SGBZBCL",0); bo.set("SGBZBCL",0);
bo.set("SGBRKSL",0);
} }
LOGGER.info("存储的值为:{}",bo.toJSONObject().toJSONString()); LOGGER.info("存储的值为:{}",bo.toJSONObject().toJSONString());
boList.add(bo); boList.add(bo);
@ -119,6 +145,7 @@ public class YyglbDbHtJob implements IJob {
Double sg = 0.00; Double sg = 0.00;
Double mei = 0.00; Double mei = 0.00;
Double sgbzbcl = 0.00; Double sgbzbcl = 0.00;
Double sgbrksl = 0.00;
try { try {
hmz = StringUtils.isNotBlank(bo.getString("HMZ")) ? Double.parseDouble(bo.getString("HMZ").trim()) : 0.00; hmz = StringUtils.isNotBlank(bo.getString("HMZ")) ? Double.parseDouble(bo.getString("HMZ").trim()) : 0.00;
@ -147,6 +174,12 @@ public class YyglbDbHtJob implements IJob {
LOGGER.warn("SGBZBCL格式错误使用默认值0.00,原始值: {}", bo.getString("SGBZBCL")); LOGGER.warn("SGBZBCL格式错误使用默认值0.00,原始值: {}", bo.getString("SGBZBCL"));
sgbzbcl = 0.00; sgbzbcl = 0.00;
} }
try {
sgbrksl = StringUtils.isNotBlank(bo.getString("SGBRKSL")) ? Double.parseDouble(bo.getString("SGBRKSL").trim()) : 0.00;
} catch (NumberFormatException e) {
LOGGER.warn("SGBRKSL格式错误使用默认值0.00,原始值: {}", bo.getString("SGBRKSL"));
sgbrksl = 0.00;
}
// 检查detail对象是否为空 // 检查detail对象是否为空
if (detail == null) { if (detail == null) {
@ -162,15 +195,15 @@ public class YyglbDbHtJob implements IJob {
LOGGER.warn("flzz或JC字段为空使用空字符串"); LOGGER.warn("flzz或JC字段为空使用空字符串");
} }
LOGGER.info("nf:{};yf:{};bk:{};jc:{};hmz:{};sg:{};mei:{};sgbzbcl:{}", LOGGER.info("nf:{};yf:{};bk:{};jc:{};hmz:{};sg:{};mei:{};sgbzbcl:{},sgbrksl:{}",
nf, yf, bk, jcValue, hmz, sg, mei, sgbzbcl); nf, yf, bk, jcValue, hmz, sg, mei, sgbzbcl,sgbrksl);
if (sgbzbcl != null && sgbzbcl != 0.00) { if (sgbzbcl != null && sgbzbcl != 0.00) {
// 安全处理hmz // 安全处理hmz
if (hmz != null && hmz != 0.00) { if (hmz != null && hmz != 0.00) {
double result = (hmz*1000000) / sgbzbcl; double result = (hmz*1000000) / sgbrksl;
detail.set("HMZ", result); detail.set("HMZ", result);
LOGGER.debug("HMZ计算结果: {} / {} = {}", hmz, sgbzbcl, result); LOGGER.debug("HMZ计算结果: {} / {} = {}", hmz, sgbrksl, result);
} else { } else {
detail.set("HMZ", 0.00); detail.set("HMZ", 0.00);
} }

View File

@ -277,8 +277,8 @@ public class ProductionDataSyncServiceImpl implements DataSyncService {
for (int i = 0; i < timeRanges.size(); i++) { for (int i = 0; i < timeRanges.size(); i++) {
Date[] range = timeRanges.get(i); Date[] range = timeRanges.get(i);
String startDate = simpleDateFormat2.format(range[0])+" 00:00:00"; String startDate = simpleDateFormat2.format(range[0])+"";
String endDate = simpleDateFormat2.format(range[1])+" 23:59:59"; String endDate = simpleDateFormat2.format(range[1])+"";
LOGGER.info("正在处理第 {} 个时间区间: {} 至 {}", i + 1, startDate, endDate); LOGGER.info("正在处理第 {} 个时间区间: {} 至 {}", i + 1, startDate, endDate);
if ("ORACLE".equalsIgnoreCase(DBname)) { if ("ORACLE".equalsIgnoreCase(DBname)) {
@ -432,7 +432,7 @@ public class ProductionDataSyncServiceImpl implements DataSyncService {
String querySql = "SELECT * FROM " + tableName + String querySql = "SELECT * FROM " + tableName +
" WHERE " + conditionBuilder.toString(); " WHERE " + conditionBuilder.toString();
LOGGER.debug("执行查询querySql: {}", querySql); LOGGER.info("执行查询querySql: {}", querySql);
List<RowMap> pageData; List<RowMap> pageData;
// 根据条件类型执行查询 // 根据条件类型执行查询

View File

@ -3,7 +3,6 @@ package com.awspaas.user.apps.bnbm.datalinkup.service.impl;
import com.actionsoft.bpms.bo.engine.BO; import com.actionsoft.bpms.bo.engine.BO;
import com.actionsoft.bpms.commons.database.DBUtils; import com.actionsoft.bpms.commons.database.DBUtils;
import com.actionsoft.bpms.commons.database.RowMap; import com.actionsoft.bpms.commons.database.RowMap;
import com.actionsoft.bpms.commons.pagination.SQLPagination;
import com.actionsoft.bpms.server.UserContext; import com.actionsoft.bpms.server.UserContext;
import com.actionsoft.bpms.util.DBSql; import com.actionsoft.bpms.util.DBSql;
import com.actionsoft.bpms.util.UtilDate; import com.actionsoft.bpms.util.UtilDate;
@ -18,7 +17,6 @@ import org.slf4j.LoggerFactory;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.sql.*;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -1250,10 +1248,18 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
@Override @Override
public void querySourceDataYS(String ccId, String tableName, String timeField, Date startDated, Date endDated, String partitionField, List<BO> fieldMappings, String targetTable, String jezd) { public void querySourceDataYS(String ccId, String tableName, String timeField, Date startDated, Date endDated, String partitionField, List<BO> fieldMappings, String targetTable, String jezd) {
// LOGGER.info("ccId:{},tableName:{},timeField:{},startDated:{},endDated:{},partitionField:{},fieldMappings:{},targetTable:{},jezd:{}",ccId,tableName,timeField,startDated,endDated,partitionField,Arrays.asList(fieldMappings.toArray()),targetTable,jezd); // LOGGER.info("ccId:{},tableName:{},timeField:{},startDated:{},endDated:{},partitionField:{},fieldMappings:{},targetTable:{},jezd:{}",ccId,tableName,timeField,startDated,endDated,partitionField,Arrays.asList(fieldMappings.toArray()),targetTable,jezd);
ArrayList<String> bggsArr = new ArrayList<>();
String bindid = fieldMappings.get(0).getString("BINDID");
BO sjgtpz = SDK.getBOAPI().query("BO_EU_BNBM_DATALINKUP_SJGTPZ").detailByBindId(bindid);
String ssbk = sjgtpz.getString("SSBK");
if (ssbk.equals("龙牌")){
bggsArr.add("龙牌");
bggsArr.add("梦牌");
}else {
bggsArr.add(ssbk);
}
int totalRows = 0; // 总查询行数 int totalRows = 0; // 总查询行数
int totalSuccess = 0; // 总成功插入行数 int totalSuccess = 0; // 总成功插入行数
int pageNo = 1;
boolean hasMore;
RDSAPI rdsapi = null; RDSAPI rdsapi = null;
DBUtils.SUPPLY supply = null; DBUtils.SUPPLY supply = null;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@ -1328,71 +1334,101 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
} }
// 分页查询数据 // 分页查询数据
do { LOGGER.info("==================执行同步应收==============");
String startDate = simpleDateFormat2.format(startDated); Set<String> bkgsSet = new HashSet<>();
String endDate = simpleDateFormat2.format(endDated); // 遍历bggsArr为每个分组条件执行查询
// 修改后的querySourceDataYS方法中的SQL查询部分 for (String bggs : bggsArr) {
String querySql; LOGGER.info("正在处理板块公司: {}", bggs);
if ("ORACLE".equalsIgnoreCase(DBname)) { int groupTotalRows = 0; // 当前分组总查询行数
querySql = "SELECT t1.* FROM " + tableName + " t1 " + int groupTotalSuccess = 0; // 当前分组总成功插入行数
" JOIN (SELECT TRUNC(TO_DATE(" + timeField + ", 'YYYY-MM-DD'), 'MONTH') AS month_start, " + int pageNo = 1;
" MAX(TO_DATE(" + timeField + ", 'YYYY-MM-DD')) AS max_date " + boolean hasMore;
" FROM " + tableName + " WHERE " + conditionBuilder.toString() + do {
" AND TO_DATE(" + timeField + ", 'YYYY-MM-DD') BETWEEN TO_DATE('" + startDate + "', 'YYYY-MM-DD') AND TO_DATE('" + endDate + "', 'YYYY-MM-DD') " + String startDate = simpleDateFormat2.format(startDated);
" GROUP BY TRUNC(TO_DATE(" + timeField + ", 'YYYY-MM-DD'), 'MONTH')) t2 " + String endDate = simpleDateFormat2.format(endDated);
" ON TO_DATE(t1." + timeField + ", 'YYYY-MM-DD') = t2.max_date " + // 修改后的querySourceDataYS方法中的SQL查询部分
" WHERE " + conditionBuilder.toString() +
" AND TO_DATE(t1." + timeField + ", 'YYYY-MM-DD') BETWEEN TO_DATE('" + startDate + "', 'YYYY-MM-DD') AND TO_DATE('" + endDate + "', 'YYYY-MM-DD')";
} else if ("POSTGRESQL".equalsIgnoreCase(DBname) || "GAUSS".equalsIgnoreCase(DBname)) {
querySql = "SELECT t1.* FROM " + tableName + " t1 " +
" JOIN (SELECT DATE_TRUNC('MONTH', " + timeField + "::DATE) AS month_start, " +
" MAX(" + timeField + "::DATE) AS max_date " +
" FROM " + tableName + " WHERE "+conditionBuilder.toString()+" AND "+timeField+"::DATE BETWEEN '"+startDate+"' AND '"+endDate+"' " +
" GROUP BY DATE_TRUNC('MONTH', " + timeField + "::DATE)) t2 " +
" ON t1." + timeField + "::DATE = t2.max_date " +
" WHERE " +conditionBuilder.toString()+
" AND t1."+timeField+"::DATE BETWEEN '"+startDate+"' AND '"+endDate+"'";
} else if ("SQLSERVER".equalsIgnoreCase(DBname)) {
querySql = "SELECT t1.* FROM " + tableName + " t1 " +
" JOIN (SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, CONVERT(DATE, " + timeField + ")), 0) AS month_start, " +
" MAX(CONVERT(DATE, " + timeField + ")) AS max_date " +
" FROM " + tableName + " WHERE " + conditionBuilder.toString() +
" AND CONVERT(DATE, " + timeField + ") BETWEEN CONVERT(DATE, '" + startDate + "') AND CONVERT(DATE, '" + endDate + "') " +
" GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, CONVERT(DATE, " + timeField + ")), 0)) t2 " +
" ON CONVERT(DATE, t1." + timeField + ") = t2.max_date " +
" WHERE " + conditionBuilder.toString() +
" AND CONVERT(DATE, t1." + timeField + ") BETWEEN CONVERT(DATE, '" + startDate + "') AND CONVERT(DATE, '" + endDate + "')";
} else {
// 默认处理如MySQL
querySql = "SELECT t1.* FROM " + tableName + " t1 " +
" JOIN (SELECT DATE_FORMAT(STR_TO_DATE(" + timeField + ", '%Y-%m-%d'), '%Y-%m-01') AS month_start, " +
" MAX(STR_TO_DATE(" + timeField + ", '%Y-%m-%d')) AS max_date " +
" FROM " + tableName + " WHERE " + conditionBuilder.toString() +
" AND STR_TO_DATE(" + timeField + ", '%Y-%m-%d') BETWEEN STR_TO_DATE('" + startDate + "', '%Y-%m-%d') AND STR_TO_DATE('" + endDate + "', '%Y-%m-%d') " +
" GROUP BY DATE_FORMAT(STR_TO_DATE(" + timeField + ", '%Y-%m-%d'), '%Y-%m-01')) t2 " +
" ON STR_TO_DATE(t1." + timeField + ", '%Y-%m-%d') = t2.max_date " +
" WHERE " + conditionBuilder.toString() +
" AND STR_TO_DATE(t1." + timeField + ", '%Y-%m-%d') BETWEEN STR_TO_DATE('" + startDate + "', '%Y-%m-%d') AND STR_TO_DATE('" + endDate + "', '%Y-%m-%d')";
}
LOGGER.info("执行查询: {}", querySql);
List<RowMap> pageData; String querySql;
if (params.isEmpty()) { if ("ORACLE".equalsIgnoreCase(DBname)) {
pageData = rdsapi.getMaps(querySql); querySql = "SELECT t1.* FROM " + tableName + " t1 " +
} else { " JOIN (SELECT TRUNC(TO_DATE(" + timeField + ", 'YYYY-MM-DD'), 'MONTH') AS month_start, " +
pageData = rdsapi.getMaps(querySql); " MAX(TO_DATE(" + timeField + ", 'YYYY-MM-DD')) AS max_date " +
} " FROM " + tableName + " WHERE " + conditionBuilder.toString() +
" AND TO_DATE(" + timeField + ", 'YYYY-MM-DD') BETWEEN TO_DATE('" + startDate + "', 'YYYY-MM-DD') AND TO_DATE('" + endDate + "', 'YYYY-MM-DD') " +
" AND BKGS = '" + bggs + "' " + // 添加分组条件
" GROUP BY TRUNC(TO_DATE(" + timeField + ", 'YYYY-MM-DD'), 'MONTH')) t2 " +
" ON TO_DATE(t1." + timeField + ", 'YYYY-MM-DD') = t2.max_date " +
" WHERE " + conditionBuilder.toString() +
" AND TO_DATE(t1." + timeField + ", 'YYYY-MM-DD') BETWEEN TO_DATE('" + startDate + "', 'YYYY-MM-DD') AND TO_DATE('" + endDate + "', 'YYYY-MM-DD')";
} else if ("POSTGRESQL".equalsIgnoreCase(DBname) || "GAUSS".equalsIgnoreCase(DBname)) {
querySql = "SELECT t1.* FROM " + tableName + " t1 " +
" JOIN (SELECT DATE_TRUNC('MONTH', " + timeField + "::DATE) AS month_start, " +
" MAX(" + timeField + "::DATE) AS max_date " +
" FROM " + tableName + " WHERE " + conditionBuilder.toString() + " AND " + timeField + "::DATE BETWEEN '" + startDate + "' AND '" + endDate + "' " +
" AND BKGS = '" + bggs + "' " + // 添加分组条件
" GROUP BY DATE_TRUNC('MONTH', " + timeField + "::DATE)) t2 " +
" ON t1." + timeField + "::DATE = t2.max_date " +
" WHERE " + conditionBuilder.toString() +
" AND t1." + timeField + "::DATE BETWEEN '" + startDate + "' AND '" + endDate + "'" +
" AND t1.BKGS = '" + bggs + "'"; // 添加分组条件;
} else if ("SQLSERVER".equalsIgnoreCase(DBname)) {
querySql = "SELECT t1.* FROM " + tableName + " t1 " +
" JOIN (SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, CONVERT(DATE, " + timeField + ")), 0) AS month_start, " +
" MAX(CONVERT(DATE, " + timeField + ")) AS max_date " +
" FROM " + tableName + " WHERE " + conditionBuilder.toString() +
" AND CONVERT(DATE, " + timeField + ") BETWEEN CONVERT(DATE, '" + startDate + "') AND CONVERT(DATE, '" + endDate + "') " +
" GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, CONVERT(DATE, " + timeField + ")), 0)) t2 " +
" ON CONVERT(DATE, t1." + timeField + ") = t2.max_date " +
" WHERE " + conditionBuilder.toString() +
" AND CONVERT(DATE, t1." + timeField + ") BETWEEN CONVERT(DATE, '" + startDate + "') AND CONVERT(DATE, '" + endDate + "')" +
" AND t1.BKGS = '" + bggs + "'";
} else {
// 默认处理如MySQL
querySql = "SELECT t1.* FROM " + tableName + " t1 " +
" JOIN (SELECT DATE_FORMAT(STR_TO_DATE(" + timeField + ", '%Y-%m-%d'), '%Y-%m-01') AS month_start, " +
" MAX(STR_TO_DATE(" + timeField + ", '%Y-%m-%d')) AS max_date " +
" FROM " + tableName + " WHERE " + conditionBuilder.toString() +
" AND STR_TO_DATE(" + timeField + ", '%Y-%m-%d') BETWEEN STR_TO_DATE('" + startDate + "', '%Y-%m-%d') AND STR_TO_DATE('" + endDate + "', '%Y-%m-%d') " +
" AND BKGS = '" + bggs + "' " + // 添加分组条件
" GROUP BY DATE_FORMAT(STR_TO_DATE(" + timeField + ", '%Y-%m-%d'), '%Y-%m-01')) t2 " +
" ON STR_TO_DATE(t1." + timeField + ", '%Y-%m-%d') = t2.max_date " +
" WHERE " + conditionBuilder.toString() +
" AND STR_TO_DATE(t1." + timeField + ", '%Y-%m-%d') BETWEEN STR_TO_DATE('" + startDate + "', '%Y-%m-%d') AND STR_TO_DATE('" + endDate + "', '%Y-%m-%d')" +
" AND t1.BKGS = '" + bggs + "'"; // 添加分组条件
}
LOGGER.info("执行查询: {}", querySql);
if (pageData != null && !pageData.isEmpty()) { List<RowMap> pageData;
int successCount = this.processAndInsertData(pageData, fieldMappings, targetTable); if (params.isEmpty()) {
totalRows += pageData.size(); pageData = rdsapi.getMaps(querySql);
totalSuccess += successCount; } else {
hasMore = pageData.size() == PAGE_SIZE; pageData = rdsapi.getMaps(querySql);
pageNo++; }
} else {
hasMore = false; if (pageData != null && !pageData.isEmpty()) {
} int successCount = this.processAndInsertData(pageData, fieldMappings, targetTable);
} while (hasMore); groupTotalRows += pageData.size();
groupTotalSuccess += successCount;
totalRows += pageData.size();
totalSuccess += successCount;
hasMore = pageData.size() == PAGE_SIZE;
pageNo++;
Set<String> bkgsSet2 = pageData.stream().map(o -> o.getString("BKGS")).collect(Collectors.toSet());
if (bkgsSet2 != null) {
for (String s : bkgsSet2) {
bkgsSet.add(s);
}
}
} else {
hasMore = false;
}
} while (hasMore);
LOGGER.info("板块公司[{}]处理完成: 查询{}条数据,成功同步{}条数据",
bggs, groupTotalRows, groupTotalSuccess);
}
String bkgs = bkgsSet.stream().collect(Collectors.joining(", "));
LOGGER.info("同步板块为:{};落地表为:{}",
bkgs,targetTable);
// 每天执行的任务删除去年同期上一天的数据新增去年同期当天的数据 // 每天执行的任务删除去年同期上一天的数据新增去年同期当天的数据
try { try {
@ -1417,6 +1453,12 @@ public class SaleDataSyncServiceImpl implements DataSyncService {
int deletedCount = DBSql.update(deleteLastYearPreviousDaySql); int deletedCount = DBSql.update(deleteLastYearPreviousDaySql);
LOGGER.info("已删除去年同期前一天({})的数据,删除了{}条数据", lastYearPreviousDayStr, deletedCount); LOGGER.info("已删除去年同期前一天({})的数据,删除了{}条数据", lastYearPreviousDayStr, deletedCount);
// 1. 删除去年同期当天的数据
String deleteLastYearDaySql = "DELETE FROM " + targetTable +
" WHERE RQ = '" + lastYearSameDayStr + "'";
int deletedCount2 = DBSql.update(deleteLastYearPreviousDaySql);
LOGGER.info("已删除去年同期当天({})的数据,删除了{}条数据", lastYearSameDayStr, deletedCount2);
// 2. 新增去年同期当天数据 // 2. 新增去年同期当天数据
// 构建查询去年同期当天数据的SQL // 构建查询去年同期当天数据的SQL
String lastYearQuerySql; String lastYearQuerySql;