diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/ZjjhTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/ZjjhTask.java index 91bc941..e9c94e4 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/ZjjhTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/ZjjhTask.java @@ -12,10 +12,14 @@ import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.schedule.executor.AbstractTask; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.botp.BFTrackerServiceHelper; import kd.bos.util.StringUtils; import kd.sdk.plugin.Plugin; import shjh.jhzj7.fi.fi.utils.JhzjUtils; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; import static shjh.jhzj7.fi.fi.plugin.operate.PayBillSaveOperation.xdMembersubject; @@ -28,18 +32,38 @@ public class ZjjhTask extends AbstractTask implements Plugin { private static final String payapplyName = "ap_payapply";//付款申请单 -// private static final String updateZero = "update T_CAS_PaymentBill set fk_shjh_membersubject=0 where fid=?";//更新资金计划科目为0 + // private static final String updateZero = "update T_CAS_PaymentBill set fk_shjh_membersubject=0 where fid=?";//更新资金计划科目为0 private static final String updateKM = "update T_CAS_PaymentBill set fk_shjh_membersubject=? where fid=?";//更新资金计划科目为指定科目 @Override public void execute(RequestContext requestContext, Map map) throws KDException { + if (map.size()==0){ + logger.info("未配置调度参数,不执行任务"); + return; + } + QFilter q1 = new QFilter("paymentidentify.number", QCP.equals, "FKBS02");//付款标识为被动付款 QFilter q2 = new QFilter("paymentidentify.number", QCP.equals, "FKBS01");//付款标识为主动付款 QFilter q3 = new QFilter("shjh_sourcesystem", QCP.equals, "A");//来源系统,A_sap,B_fk QFilter q4 = new QFilter("shjh_sourcesystem", QCP.equals, "B");//来源系统,A_sap,B_fk - QFilter filter = q1.or(q2.and(q3.or(q4)));//filter条件为被动付款 或者 主动付款(且来源系统为sap或费控) + QFilter q5 = new QFilter("billno", QCP.equals, "FKZJ2025074480");//来源系统,A_sap,B_fk + QFilter filter = q1.or(q2.and(q3.or(q4))).and(q5);//filter条件为被动付款 或者 主动付款(且来源系统为sap或费控) + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + for (Map.Entry objectEntry : map.entrySet()) { + LocalDate localDate = LocalDate.parse((String) objectEntry.getValue(), formatter); + + if (objectEntry.getKey().equals("开始日期")){ + QFilter startFilter=new QFilter("bizdate",QCP.large_equals,localDate); + filter.and(startFilter); + } + if (objectEntry.getKey().equals("结束日期")){ + QFilter endFilter= new QFilter("bizdate",QCP.less_equals,localDate); + filter.and(endFilter); + } + } DynamicObject[] paybills = BusinessDataServiceHelper.load(paybillName, "id", filter.toArray()); - if (paybills.length != 0){ + if (paybills.length != 0) { ArrayList ids = new ArrayList<>(); for (DynamicObject dynamicObject : paybills) { ids.add(dynamicObject.getLong("id")); @@ -57,63 +81,75 @@ public class ZjjhTask extends AbstractTask implements Plugin { //被动 如果是被动付款,则将现有付款单保存操作后,获取资金计划科目的代码直接复制拷贝至此; if ("FKBS02".equals(paymentidentify)) { zjjhkm = xdMembersubject(cas_paybill); - if(zjjhkm == null){ + if (zjjhkm == null) { //科目为空,将单子上的字段值置为0--经讨论不用处理 - logger.info(billno+"对应新资金计划科目为空"); + logger.info(billno + "对应新资金计划科目为空"); // DB.update(DBRoute.of("fi"), updateZero, new Object[]{cas_paybill.getPkValue()}); - }else if(oldbillkm != null && oldbillkm.getLong("id") != zjjhkm.getLong("id")){ + } else if (oldbillkm != null && oldbillkm.getLong("id") != zjjhkm.getLong("id")) { //当单据上原科目和这次查询到科目不一致时将科目id更新到表字段上--增加前台日志 - logger.info(billno+"对应新资金计划科目为"+zjjhkm.getPkValue()); + logger.info(billno + "对应新资金计划科目为" + zjjhkm.getPkValue()); DB.update(DBRoute.of("fi"), updateKM, new Object[]{zjjhkm.getPkValue(), cas_paybill.getPkValue()}); - JhzjUtils.saveLog(billno,"付款单更新资金计划科目","原科目id:"+oldbillkm.getPkValue()+" 新科目id:"+zjjhkm.getPkValue(), - null,true,"task"); - }else if(oldbillkm == null){ + JhzjUtils.saveLog(billno, "付款单更新资金计划科目", "原科目id:" + oldbillkm.getPkValue() + " 新科目id:" + zjjhkm.getPkValue(), + null, true, "task"); + } else if (oldbillkm == null) { //原单上资金计划科目为空,现在获取到新的科目需要更新 - logger.info(billno+"对应新资金计划科目为"+zjjhkm.getPkValue()); + logger.info(billno + "对应新资金计划科目为" + zjjhkm.getPkValue()); DB.update(DBRoute.of("fi"), updateKM, new Object[]{zjjhkm.getPkValue(), cas_paybill.getPkValue()}); - JhzjUtils.saveLog(billno,"付款单更新资金计划科目","原科目id为空 新科目id:"+zjjhkm.getPkValue(), - null,true,"task0"); + JhzjUtils.saveLog(billno, "付款单更新资金计划科目", "原科目id为空 新科目id:" + zjjhkm.getPkValue(), + null, true, "task0"); + }else { + logger.info("被动付款"+billno+"原有资金计划科目=条件查询计划科目,不执行更新"); } // cas_paybill.set("shjh_membersubject", ); // SaveServiceHelper.save(new DynamicObject[]{cas_paybill}); - }else if ("FKBS01".equals(paymentidentify)) { + } else if ("FKBS01".equals(paymentidentify)) { //主动 如果是主动付款,根据付款单查找到上游某一个付款申请单即可,再根据付款申请单对象,将现有付款申请单保存操作后获取资金计划科目的代码直接复制拷贝至此; //根据付款单查找到上游某一个付款申请单即可 - payapply = BusinessDataServiceHelper.loadSingle(cas_paybill.getLong("sourcebillid"), payapplyName); - if (null != payapply) { + + Map> sourceBills = BFTrackerServiceHelper.findSourceBills(paybillName, new Long[]{(Long) cas_paybill.getPkValue()}); + if (sourceBills.containsKey(payapplyName)) { + Set billIds = sourceBills.get(payapplyName); + for (Long billId : billIds) { + payapply = BusinessDataServiceHelper.loadSingle(billId, payapplyName); + + //payapply = BusinessDataServiceHelper.loadSingle(cas_paybill.getLong("sourcebillid"), payapplyName); + if (null != payapply) { // DynamicObject xdMembersubject = xdMembersubject(payapply); // payapply.set("shjh_membersubject",xdMembersubject); // SaveServiceHelper.save(new DynamicObject[]{payapply});//此代码是更新付款申请单的,先不更新 - //将现有付款申请单保存操作后获取资金计划科目的代码直接复制拷贝至此,更新付款单上的资金计划科目 - zjjhkm = getzjkmbyapply(payapply); - if(zjjhkm == null){ - //科目为空,将单子上的字段值置为0 - logger.info(billno+"对应新资金计划科目为空"); -// DB.update(DBRoute.of("fi"), updateZero, new Object[]{cas_paybill.getPkValue()}); - }else if(oldbillkm != null && oldbillkm.getLong("id") != zjjhkm.getLong("id")){ - //将科目id更新到表字段上 - logger.info(billno+"对应新资金计划科目为"+zjjhkm.getPkValue()); - DB.update(DBRoute.of("fi"), updateKM, new Object[]{zjjhkm.getPkValue(), cas_paybill.getPkValue()}); - JhzjUtils.saveLog(billno,"付款单更新资金计划科目","原科目id:"+oldbillkm.getPkValue()+" 新科目id:"+zjjhkm.getPkValue(), - null,true,"task"); - }else if(oldbillkm == null){ - //原单上资金计划科目为空,现在获取到新的科目需要更新 - logger.info(billno+"对应新资金计划科目为"+zjjhkm.getPkValue()); - DB.update(DBRoute.of("fi"), updateKM, new Object[]{zjjhkm.getPkValue(), cas_paybill.getPkValue()}); - JhzjUtils.saveLog(billno,"付款单更新资金计划科目","原科目id为空 新科目id:"+zjjhkm.getPkValue(), - null,true,"task0"); - } + //将现有付款申请单保存操作后获取资金计划科目的代码直接复制拷贝至此,更新付款单上的资金计划科目 + zjjhkm = getzjkmbyapply(payapply); + if (zjjhkm == null) { + //科目为空,将单子上的字段值置为0 + logger.info(billno + "对应新资金计划科目为空"); + } else if (oldbillkm != null && oldbillkm.getLong("id") != zjjhkm.getLong("id")) { + //将科目id更新到表字段上 + logger.info(billno + "对应新资金计划科目为" + zjjhkm.getPkValue()); + DB.update(DBRoute.of("fi"), updateKM, new Object[]{zjjhkm.getPkValue(), cas_paybill.getPkValue()}); + JhzjUtils.saveLog(billno, "付款单更新资金计划科目", "原科目id:" + oldbillkm.getPkValue() + " 新科目id:" + zjjhkm.getPkValue(), + null, true, "task"); + } else if (oldbillkm == null) { + //原单上资金计划科目为空,现在获取到新的科目需要更新 + logger.info(billno + "对应新资金计划科目为" + zjjhkm.getPkValue()); + DB.update(DBRoute.of("fi"), updateKM, new Object[]{zjjhkm.getPkValue(), cas_paybill.getPkValue()}); + JhzjUtils.saveLog(billno, "付款单更新资金计划科目", "原科目id为空 新科目id:" + zjjhkm.getPkValue(), + null, true, "task0"); + }else { + logger.info("主动付款"+billno+"原有资金计划科目=条件查询计划科目,不执行更新"); + } // cas_paybill.set("shjh_membersubject", xdMembersubject); // SaveServiceHelper.save(new DynamicObject[]{cas_paybill}); + } + } } } } } } - public DynamicObject getzjkmbyapply(DynamicObject bill){ + public DynamicObject getzjkmbyapply(DynamicObject bill) { //SAP应付凭证生成付款申请单后,系统自动根据配置表(shjh_request_account)带出资金计划科目 - QFilter qFilter = new QFilter("shjh_biztype", QCP.equals,"A");//业务类型:付款 + QFilter qFilter = new QFilter("shjh_biztype", QCP.equals, "A");//业务类型:付款 qFilter.and(new QFilter("enable", QCP.equals, "1"));//启用 qFilter.and(new QFilter("status", QCP.equals, "C"));//审核 //公司范围_多选基础资料 && 不包含公司 @@ -136,7 +172,7 @@ public class ZjjhTask extends AbstractTask implements Plugin { QFilter q3 = new QFilter("shjh_bbhywdl.fbasedataid", QCP.not_equals, shjhBizbigid);//不包含业务大类 QFilter q4 = new QFilter("shjh_bbhywdl.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q1.or(q2)).and(q3.or(q4)); - }else { + } else { QFilter q2 = new QFilter("shjh_bizbig.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q2); } @@ -147,7 +183,7 @@ public class ZjjhTask extends AbstractTask implements Plugin { QFilter q1 = new QFilter("shjh_bizsmall.fbasedataid", QCP.equals, shjhbizsmallid); QFilter q2 = new QFilter("shjh_bizsmall.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q1.or(q2)); - }else { + } else { QFilter q2 = new QFilter("shjh_bizsmall.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q2); } @@ -158,7 +194,7 @@ public class ZjjhTask extends AbstractTask implements Plugin { QFilter q1 = new QFilter("shjh_yym.fbasedataid", QCP.equals, yymid); QFilter q2 = new QFilter("shjh_yym.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q1.or(q2)); - }else { + } else { QFilter q2 = new QFilter("shjh_yym.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q2); } @@ -189,7 +225,7 @@ public class ZjjhTask extends AbstractTask implements Plugin { QFilter q6 = new QFilter("shjh_division.fbasedataid", QCP.equals, divisionid); QFilter q7 = new QFilter("shjh_division.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q6.or(q7)); - }else { + } else { QFilter q7 = new QFilter("shjh_division.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q7); } @@ -202,7 +238,7 @@ public class ZjjhTask extends AbstractTask implements Plugin { QFilter q6 = new QFilter("shjh_kjkm.fbasedataid.number", QCP.equals, shjhSapkjkm.getString("number")); QFilter q7 = new QFilter("shjh_kjkm.fbasedataid.number", QCP.equals, null); qFilter = qFilter.and(q6.or(q7)); - }else { + } else { QFilter q7 = new QFilter("shjh_kjkm.fbasedataid.number", QCP.equals, null); qFilter = qFilter.and(q7); } @@ -221,7 +257,7 @@ public class ZjjhTask extends AbstractTask implements Plugin { QFilter q33 = new QFilter("shjh_bbhgys.fbasedataid", QCP.equals, eAsstactid);//不包含供应商 QFilter q44 = new QFilter("shjh_bbhgys.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q11.or(q22)).and(q33.or(q44)); - }else { + } else { QFilter q22 = new QFilter("shjh_supplier.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q22); } @@ -237,7 +273,7 @@ public class ZjjhTask extends AbstractTask implements Plugin { QFilter q33 = new QFilter("shjh_bbhkh.fbasedataid", QCP.equals, eAsstactid);//不包含客户 QFilter q44 = new QFilter("shjh_bbhkh.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q11.or(q22)).and(q33.or(q44)); - }else { + } else { QFilter q22 = new QFilter("shjh_kh.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q22); } @@ -260,7 +296,7 @@ public class ZjjhTask extends AbstractTask implements Plugin { QFilter q3 = new QFilter("shjh_tdrbsybm.fbasedataid", QCP.equals, secondarydeptid);//提单人不属于部门(付款单申请) QFilter q4 = new QFilter("shjh_tdrbsybm.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q1.or(q2)).and(q3.or(q4)); - }else { + } else { QFilter q2 = new QFilter("shjh_tdrssbm.fbasedataid", QCP.equals, null); qFilter = qFilter.and(q2); } @@ -275,7 +311,7 @@ public class ZjjhTask extends AbstractTask implements Plugin { QFilter endDateFilter = new QFilter("shjh_enddate", QCP.large_equals, currentDate); QFilter newFilter = qFilter.and(startDateFilter).and(endDateFilter); //优先级为高的 - accounts = BusinessDataServiceHelper.load("shjh_request_account", "id,shjh_cgz,shjh_bbhcgz", newFilter.toArray(),"shjh_priority"); + accounts = BusinessDataServiceHelper.load("shjh_request_account", "id,shjh_cgz,shjh_bbhcgz", newFilter.toArray(), "shjh_priority"); } // 转换为 List 以便支持 remove 操作 List configList = new ArrayList<>(Arrays.asList(accounts)); @@ -334,7 +370,7 @@ public class ZjjhTask extends AbstractTask implements Plugin { String bbhdjlx = account.getString("shjh_bbhdjlx"); // 不包含单据类型_包含剔除 - if (bbhdjlx.contains(shjhExternalsystemdocume)&& StringUtils.isNotEmpty(shjhExternalsystemdocume)) { + if (bbhdjlx.contains(shjhExternalsystemdocume) && StringUtils.isNotEmpty(shjhExternalsystemdocume)) { iterator.remove(); } }