From 317edd2a6cd5c0553ab77f96ca30a99ef8e7d6a2 Mon Sep 17 00:00:00 2001 From: yuxueliang0813 <407010292@qq.com> Date: Fri, 4 Jul 2025 18:39:42 +0800 Subject: [PATCH] =?UTF-8?q?2=E3=80=81=E6=94=B6=E6=AC=BE=E5=8D=95=E7=9A=84?= =?UTF-8?q?=E6=94=B6=E6=AC=BE=E4=BA=BA=E5=8F=98=E6=9B=B4=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E4=B8=8B=E6=8E=A8=E6=A0=87=E8=AE=B0=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=203=E3=80=81=E6=89=8B=E5=8A=A8=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E6=8B=89=E5=8F=96sap=E5=BA=94=E4=BB=98=E5=87=AD=E8=AF=81=20?= =?UTF-8?q?=E5=90=88=E4=BD=9C=E9=93=B6=E8=A1=8C=E7=B1=BB=E5=9E=8B=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E5=B8=A6=E4=BE=9B=E5=BA=94=E5=95=86=E4=B8=80=E6=9D=A1?= =?UTF-8?q?=E9=93=B6=E8=A1=8C=EF=BC=88=E5=A4=9A=E6=9D=A1=E4=B9=9F=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E6=B5=8B=E8=AF=95=EF=BC=89=20=204=E3=80=81=E6=94=B6?= =?UTF-8?q?=E6=AC=BE=E5=8D=95=E4=B8=8B=E6=8E=A8=E6=B8=85=E8=B4=A6=E5=8D=95?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E6=B8=85=E8=B4=A6=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fi/fi/plugin/form/RecBillFromPlugin.java | 42 ++++++++++++ .../fi/fi/plugin/form/SappzFormPlugin.java | 2 +- .../operate/ClearAccountBillOperation.java | 66 ++++++++++++++++++- .../plugin/operate/RecBillSaveOperation.java | 1 + .../task/QuerySapCreatePayApplyTask.java | 6 +- .../fi/webapi/ApplyAdjustBillControler.java | 2 +- 6 files changed, 114 insertions(+), 5 deletions(-) diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/form/RecBillFromPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/form/RecBillFromPlugin.java index c54d749..aa37052 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/form/RecBillFromPlugin.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/form/RecBillFromPlugin.java @@ -170,8 +170,50 @@ public class RecBillFromPlugin extends AbstractFormPlugin implements Plugin { } } } + //结构性清账客户+业务小类(全部金蝶清账),同时满足时,才允许下推清账明细判断 yxl 20250512 + DynamicObject bizSmall = (DynamicObject) this.getModel().getValue("shjh_bizsmall"); + boolean iskdqbqz = false;//全部金蝶清账标识 + if (null != bizSmall) { + //当收款单【业务小类】清账方式字段=全部金蝶清账 + if ("qbjdqz".equals(bizSmall.getString("shjh_qzfs"))) { + iskdqbqz = true; + } + } + DynamicObjectCollection entryEntity = this.getModel().getEntryEntity("entry"); + if(iskdqbqz){ + for (int i = 0; i < entryEntity.size(); i++) { + this.getModel().setValue("shjh_needpushbill", false, i);//不需要下推清账单 + this.getModel().setValue("shjh_closingstatus", "A", i);//无需金蝶清账 + } + if (null != value && "bd_customer".equals(type)) { + DynamicObject currentorg = (DynamicObject) this.getModel().getValue("org");//单据所属当前公司 + QFilter mapnumber = new QFilter("shjh_customer.id", QCP.equals, value); + mapnumber.and("enable", QCP.equals, "1");//是否可用 + mapnumber.and("shjh_org.id", QCP.equals, currentorg.getLong("id"));//公司 + DynamicObject mappingObj = BusinessDataServiceHelper.loadSingle("shjh_jgqzcust", mapnumber.toArray()); + if (null != mappingObj) { + for (int i = 0; i < entryEntity.size(); i++) { + this.getModel().setValue("shjh_needpushbill", true, i);//需要下推清账单 + this.getModel().setValue("shjh_closingstatus", "B", i);//待清账 + } + } else { + for (int i = 0; i < entryEntity.size(); i++) { + this.getModel().setValue("shjh_needpushbill", false, i);//不需要下推清账单 + this.getModel().setValue("shjh_closingstatus", "A", i);//无需金蝶清账 + } + } + } + }else{ + //【业务小类】清账方式字段 != 全部金蝶清账 + for (int i = 0; i < entryEntity.size(); i++) { + this.getModel().setValue("shjh_needpushbill", false, i);//不需要下推清账单 + this.getModel().setValue("shjh_closingstatus", "A", i);//无需金蝶清账 + } + } + this.getView().updateView(); } + }else if (StringUtils.equals(fieldKey, "shjh_bizsmall")) { //监听业务小类 //付款人类型=客户或者其他,都可以,根据业务小类的清账方式来判断 diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/form/SappzFormPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/form/SappzFormPlugin.java index 50f2f47..a25787f 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/form/SappzFormPlugin.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/form/SappzFormPlugin.java @@ -607,7 +607,7 @@ public class SappzFormPlugin extends AbstractFormPlugin { ap_payapply_entry.set("e_bebank", bank);//开户银行 ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称 ispp = true; - }else if(!EsbUtils.isEmpty(assacct) && bankentrys.size() > 1){ + }else if(!EsbUtils.isEmpty(assacct)){ for (DynamicObject bankentry : bankentrys) { if (assacct.equals(bankentry.getString("shjh_banktype"))) { String bankaccount = bankentry.getString("bankaccount"); diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearAccountBillOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearAccountBillOperation.java index 7237a73..28449d0 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearAccountBillOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearAccountBillOperation.java @@ -37,6 +37,8 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im //更新单据状态为作废 private static final String updateInvalidStatus = "update tk_shjh_clear_account set fbillstatus='D' where fid=?;"; + //更新下推明细单结果 + private static final String updatePushStatus = "update tk_shjh_clear_account set fk_shjh_pushdetail=? where fid=?;"; //更新单据状态为已提交 private static final String updateSubmitStatus = "update tk_shjh_clear_account set fbillstatus='B' where fid=?;"; //手动修改清账状态 @@ -126,6 +128,9 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im super.afterExecuteOperationTransaction(e); String eok = e.getOperationKey(); switch (eok) { + case "save": + handleClear(e);//保存-触发下推清账明细单 + break; case "clearacctount": handleClear(e);//清账-下推清账明细单 break; @@ -320,6 +325,11 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im List receivers = new ArrayList<>(1); for (int i = 0; i < dos.length; i++) { prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName()); + //判断下推明细单结果,如果不是下推成功,则处理,否则不处理 + if("A".equals(prinfo.getString("shjh_pushdetail"))){ + continue; + } + //判断当前清账单是否由收款单补推,如果是,则根据清账单上的被通知人进行通知;否则根据配置表 userinfo = prinfo.getDynamicObject("shjh_noticeuser"); if(userinfo != null){ @@ -344,6 +354,8 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im qFilter.and("shjh_org", QCP.equals, prinfo.getDynamicObject("org").getLong("id")); pzbs = BusinessDataServiceHelper.load(pzbName, "id", qFilter.toArray(), "modifytime desc"); if (pzbs.length == 0) { + //更新清账单下推明细单结果 + DB.update(DBRoute.of("fi"), updatePushStatus, new Object[]{"B", prinfo.getPkValue()}); addErrorInfo(prinfo,"根据结构性清账客户映射表未找到对应通知人,无法下推清账明细单"); continue; } @@ -364,6 +376,8 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im String pcurl = JhzjUtils.getBillPCURL(detailinfo); JhzjUtils.sendEmail("请登录资金系统操作清账明细单", detailinfo.getString("billno") + "
详情页面 "+pcurl+"", receivers, detailinfo); + //更新清账单下推明细单结果 + DB.update(DBRoute.of("fi"), updatePushStatus, new Object[]{"A", prinfo.getPkValue()}); } } } @@ -799,6 +813,56 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im } private void handleNotice(AfterOperationArgs e) { - //通知具体实现 + //通知具体实现 防止OA待办未发送成功的情况 + DynamicObject[] dos = e.getDataEntities(); + DynamicObject prinfo;//清账单 + DynamicObject detailinfo;//清账明细单 + QFilter qFilter; + DynamicObject[] pzbs; + DynamicObject pzbinfo;//配置表 + DynamicObject userinfo;//被通知用户 + DynamicObjectCollection users;//配置表中的被通知人集合 + for (int i = 0; i < dos.length; i++) { + prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName()); + //判断当前清账单是否由收款单补推,如果是,则根据清账单上的被通知人进行通知;否则根据配置表 + userinfo = prinfo.getDynamicObject("shjh_noticeuser"); + if(userinfo != null){ + //根据清账单id和创建人id判断清账明细单是否已生成 + qFilter = new QFilter("shjh_clearbillid", QCP.equals, prinfo.getString("id")); + qFilter.and("creator", QCP.equals, userinfo.getLong("id")); + detailinfo = BusinessDataServiceHelper.loadSingle(entityName, qFilter.toArray()); + if (detailinfo != null) { + //发送清账明细单的OA待办 + JhzjUtils.handleOA(detailinfo, "0", "0"); + } + }else{ + //根据客户、公司、是否可用找到对应的被通知人员(可能多个) + qFilter = new QFilter("enable", QCP.equals, "1"); + qFilter.and("shjh_customer", QCP.equals, prinfo.getDynamicObject("shjh_customer").getLong("id")); + qFilter.and("shjh_org", QCP.equals, prinfo.getDynamicObject("org").getLong("id")); + pzbs = BusinessDataServiceHelper.load(pzbName, "id", qFilter.toArray(), "modifytime desc"); + if (pzbs.length == 0) { + //更新清账单下推明细单结果 + addErrorInfo(prinfo,"根据结构性清账客户映射表未找到对应通知人,无法发送OA待办"); + continue; + } + pzbinfo = BusinessDataServiceHelper.loadSingle(pzbs[0].getLong("id"), pzbName); + users = pzbinfo.getDynamicObjectCollection("shjh_users"); + for (DynamicObject user : users) { + userinfo = user.getDynamicObject("fbasedataid");//fbasedataid + //根据清账单id和创建人id判断清账明细单是否已生成 + qFilter = new QFilter("shjh_clearbillid", QCP.equals, prinfo.getString("id")); + qFilter.and("creator", QCP.equals, userinfo.getLong("id")); + detailinfo = BusinessDataServiceHelper.loadSingle(entityName, qFilter.toArray()); + if (detailinfo != null) { + //发送清账明细单的OA待办 + JhzjUtils.handleOA(detailinfo, "0", "0"); + } + } + } + + //处理完成提示 + this.operationResult.addSuccessPkId(prinfo.getPkValue()); + } } } \ No newline at end of file diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/RecBillSaveOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/RecBillSaveOperation.java index c0f6dab..5ff5497 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/RecBillSaveOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/RecBillSaveOperation.java @@ -599,6 +599,7 @@ public class RecBillSaveOperation extends AbstractOperationServicePlugIn impleme */ private void carryCustomerRule(DynamicObject entry,DynamicObject bill,String oppunit,Long companyId){ //1.先看取映射表按钮是否打开,打开——>取映射表中客户 + //20250704 经过和建彪沟通先注释根据标记来判断的代码 // boolean shjhEGetcustomer = entry.getBoolean("shjh_e_getcustomer"); //取规则得映射表客户标记 // if (shjhEGetcustomer) { QFilter qFilter = new QFilter("shjh_dfhm", QCP.equals, oppunit); diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/QuerySapCreatePayApplyTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/QuerySapCreatePayApplyTask.java index 13e0968..96d4cd9 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/QuerySapCreatePayApplyTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/QuerySapCreatePayApplyTask.java @@ -54,7 +54,9 @@ public class QuerySapCreatePayApplyTask extends AbstractTask { int daysBefore = Integer.parseInt(lq1);//临期_前 int daysAfter = Integer.parseInt(lq);//临期_后 int totalDays = daysBefore + daysAfter;//总天数,后面按照每30天调用一次接口 - //计算按照30天为一个循环,需要循环的次数 + int callInterval = 30; // 调用间隔天数 + // 计算调用次数(向上取整) + int callCount = (int) Math.ceil((double) totalDays / callInterval); // 计算开始日期(临期_前表示今天之前的天数) LocalDate startDate = currentDate; @@ -357,7 +359,7 @@ public class QuerySapCreatePayApplyTask extends AbstractTask { ap_payapply_entry.set("e_bebank", bank);//开户银行 ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称 ispp = true; - }else if(!EsbUtils.isEmpty(assacct) && bankentrys.size() > 1){ + }else if(!EsbUtils.isEmpty(assacct)){ for (DynamicObject bankentry : bankentrys) { if (assacct.equals(bankentry.getString("shjh_banktype"))) { String bankaccount = bankentry.getString("bankaccount"); diff --git a/main/java/shjh/jhzj7/fi/fi/webapi/ApplyAdjustBillControler.java b/main/java/shjh/jhzj7/fi/fi/webapi/ApplyAdjustBillControler.java index 188381e..7734ab8 100644 --- a/main/java/shjh/jhzj7/fi/fi/webapi/ApplyAdjustBillControler.java +++ b/main/java/shjh/jhzj7/fi/fi/webapi/ApplyAdjustBillControler.java @@ -730,7 +730,7 @@ public class ApplyAdjustBillControler { ap_payapply_entry.set("e_bebank", bank);//开户银行 ap_payapply_entry.set("shjh_asstactrealname", accountname);//账户名称 ispp = true; - }else if(!EsbUtils.isEmpty(assacct) && bankentrys.size() > 1){ + }else if(!EsbUtils.isEmpty(assacct)){ for (DynamicObject bankentry : bankentrys) { if (assacct.equals(bankentry.getString("shjh_banktype"))) { String bankaccount = bankentry.getString("bankaccount");