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 5f30f0a..709ca81 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearAccountBillOperation.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/ClearAccountBillOperation.java @@ -62,6 +62,21 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im private static final String pzbName = "shjh_jgqzcust";//结构性清账客户映射表 private static final String voucherName = "gl_voucher";//凭证 + private boolean isNeedOperationCheck(String eok){ + if ("unclearacctount_check".equals(eok)) { + return true; + }else if ("clearacctount".equals(eok)) { + return true; + }else if ("invalid".equals(eok)) { + return true; + }else if ("copyqz".equals(eok)) { + return true; + }else if ("updatestatus".equals(eok)) { + return true; + } + return false; + } + /** * 操作校验通过之后,开启事务之前,触发此事件; * 插件可以在此事件,对通过校验的数据,进行整理 @@ -71,13 +86,17 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im super.beforeExecuteOperationTransaction(e); //反清账、作废、复制、修改清账单状态增加校验。 String eok = e.getOperationKey(); + //如果是由后台定时任务触发收款单自动下推清账单时,需要判断操作代码,防止首次保存操作进来,单子还未存数据库,从而load不到 + if(!isNeedOperationCheck(eok)){ + return; + } DynamicObject[] dos = e.getDataEntities(); DynamicObject prinfo; String billno; String billstatus; String clearstatus; for (int i = 0; i < dos.length; i++) { - //反审核操作之前系统未把info对象所有属性加载出来,尤其是二开的字段,需要在此处重新load一下 + //清账、反清账、作废等操作在列表界面触发时系统未把info对象所有属性加载出来,尤其是二开的字段,需要在此处重新load一下 prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName(), "id,billno,billstatus,shjh_clearstatus,shjh_pzh,shjh_recebillno,shjh_unclearway,shjh_iscopy,shjh_unclaimamount"); billno = prinfo.getString("billno"); @@ -326,9 +345,17 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im String eok = e.getOperationKey(); for (int i = 0; i < dos.length; i++) { prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(), dos[i].getDataEntityType().getName()); - //保存操作时判断下推明细单结果,如果未下推成功,则处理,否则按清账按钮原逻辑处理 - if("save".equals(eok) && "A".equals(prinfo.getString("shjh_pushdetail"))){ - continue; + //保存操作时判断下推明细单结果,如果未下推成功,则先判断是否满足条件再自动下推,否则按清账按钮原逻辑处理 + if("save".equals(eok)){ + //清账单【单据状态】=暂存 and【清账状态】=待清账 and 【未认领收款金额】≠0,才允许自动下推。 + if (!"A".equals(prinfo.getString("billstatus")) || !"B".equals(prinfo.getString("shjh_clearstatus")) || + JhzjUtils.isZERO(prinfo.getBigDecimal("shjh_unclaimamount"))) { + continue; + } + //清账单已下推成功 + if("A".equals(prinfo.getString("shjh_pushdetail"))){ + continue; + } } //判断当前清账单是否由收款单补推,如果是,则根据清账单上的被通知人进行通知;否则根据配置表 @@ -359,7 +386,9 @@ public class ClearAccountBillOperation extends AbstractOperationServicePlugIn im if (pzbs.length == 0) { //更新清账单下推明细单结果 DB.update(DBRoute.of("fi"), updatePushStatus, new Object[]{"B", prinfo.getPkValue()}); - addErrorInfo(prinfo,"根据结构性清账客户映射表未找到对应通知人,无法下推清账明细单"); + if(!"save".equals(eok)){ + addErrorInfo(prinfo,"根据结构性清账客户映射表未找到对应通知人,无法下推清账明细单"); + } continue; } pzbinfo = BusinessDataServiceHelper.loadSingle(pzbs[0].getLong("id"), pzbName); diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/RecBillToClearBillTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/RecBillToClearBillTask.java index 0406376..5c229fa 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/RecBillToClearBillTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/RecBillToClearBillTask.java @@ -16,9 +16,7 @@ import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.sdk.plugin.Plugin; import java.math.BigDecimal; -import java.security.Timestamp; import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Map;