From 6c60bffed8f85813e04d4aec4e75e48b05bda0ac Mon Sep 17 00:00:00 2001 From: chenshaoxin <1981897232@qq.com> Date: Fri, 13 Jun 2025 14:15:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A=E9=99=88?= =?UTF-8?q?=E7=BB=8D=E9=91=AB=20=E6=97=A5=E6=9C=9F=EF=BC=9A2025/6/13=2014?= =?UTF-8?q?=EF=BC=9A30=20=E5=86=85=E5=AE=B9:=E6=8C=89=E9=92=AE=E5=86=B7?= =?UTF-8?q?=E5=8D=B410=E7=A7=92=E6=93=8D=E4=BD=9C=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operation/ElectronicPayDealOPPlugin.java | 102 ++++++++++++++++++ .../operation/domain/TimeValidator.java | 35 ++++++ 2 files changed, 137 insertions(+) create mode 100644 sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/ElectronicPayDealOPPlugin.java create mode 100644 sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/domain/TimeValidator.java diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/ElectronicPayDealOPPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/ElectronicPayDealOPPlugin.java new file mode 100644 index 0000000..2d78595 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/ElectronicPayDealOPPlugin.java @@ -0,0 +1,102 @@ +package shkd.sys.sys.plugin.operation; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.operate.result.OperateErrorInfo; +import kd.bos.entity.operate.result.OperationResult; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.AddValidatorsEventArgs; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.plugin.args.AfterOperationArgs; +import kd.bos.entity.plugin.args.BeforeOperationArgs; +import kd.bos.entity.plugin.args.BeginOperationTransactionArgs; +import kd.bos.entity.plugin.args.ReturnOperationArgs; +import kd.bos.entity.validate.AbstractValidator; +import kd.bos.entity.validate.ValidatePriority; +import kd.bos.entity.validate.ValidateResult; +import kd.bos.entity.validate.ValidateResultCollection; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.sdk.plugin.Plugin; +import shkd.sys.sys.plugin.operation.domain.TimeValidator; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.*; + +public class ElectronicPayDealOPPlugin extends AbstractOperationServicePlugIn implements Plugin { + + private static final Log logger = LogFactory.getLog(ElectronicPayDealOPPlugin.class); + + + public static Map timemap=new HashMap<>(); + + @Override + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + Iterator> iterator = timemap.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + Duration duration = Duration.between(entry.getValue(), LocalDateTime.now()); + if (duration.getSeconds() > 10) { + iterator.remove(); + } + } + } + + @Override + public void beforeExecuteOperationTransaction(BeforeOperationArgs e) { + super.beforeExecuteOperationTransaction(e); + } + + @Override + public void onAddValidators(AddValidatorsEventArgs e) { + super.onAddValidators(e); + e.addValidator(new TimeValidator()); + List validators = e.getValidators(); + for (AbstractValidator validator : validators) { + if (validator instanceof TimeValidator) { + // 是你的类或者子类 + validator.setValidatePriority(ValidatePriority.First); + } + } + } + + @Override + public void beginOperationTransaction(BeginOperationTransactionArgs e) { + super.beginOperationTransaction(e); + } + + @Override + public void initializeOperationResult(OperationResult result) { + super.initializeOperationResult(result); + } + + @Override + public void afterExecuteOperationTransaction(AfterOperationArgs e) { + super.afterExecuteOperationTransaction(e); + } + + @Override + public void onReturnOperation(ReturnOperationArgs e) { + List overtime = new ArrayList<>();//存放因连续点击而校验失败的数据 + super.onReturnOperation(e); + ValidateResultCollection validateResult = this.operationResult.getValidateResult(); + List validateErrors = validateResult.getValidateErrors(); + for (ValidateResult validateError : validateErrors) { + List allErrorInfo = validateError.getAllErrorInfo(); + for (OperateErrorInfo operateErrorInfo : allErrorInfo) { + String message = operateErrorInfo.getMessage(); + if (message.contains("当前单据已更新操作结果,请十秒后再更新")){ + overtime.add(operateErrorInfo.getPkValue()); + } + } + } + List successPkIds = e.getOperationResult().getSuccessPkIds();//执行成功的数据 + Map billNos = ((OperationResult) e.getOperationResult()).getBillNos(); + billNos.keySet().removeAll(successPkIds); + billNos.keySet().removeAll(overtime); + for (Object key : billNos.keySet()) { + timemap.remove(key); + } + } +} diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/domain/TimeValidator.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/domain/TimeValidator.java new file mode 100644 index 0000000..bbd4fd7 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/operation/domain/TimeValidator.java @@ -0,0 +1,35 @@ +package shkd.sys.sys.plugin.operation.domain; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.ExtendedDataEntity; +import kd.bos.entity.validate.AbstractValidator; +import kd.bos.entity.validate.ErrorLevel; +import shkd.sys.sys.plugin.operation.ElectronicPayDealOPPlugin; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.Map; + +public class TimeValidator extends AbstractValidator { + + @Override + public void validate() { + ExtendedDataEntity[] dataEntities = this.getDataEntities();//获取操作执行时的所有单据数据的集合 + for(ExtendedDataEntity obj :dataEntities){ + DynamicObject bill = obj.getDataEntity();//获取当前单据的数据包 + Long id = bill.getLong("id");//进一步获取编码字段 + Map timemap = ElectronicPayDealOPPlugin.timemap; + LocalDateTime localDateTime = timemap.get(id); + LocalDateTime currentTime = LocalDateTime.now(); + if (localDateTime!=null){ + + Duration duration = Duration.between(localDateTime, currentTime); + // 判断时间差是否超过 10 秒 + if (duration.getSeconds() <= 10) { + this.addMessage(obj,"当前单据已更新操作结果,请十秒后再更新", ErrorLevel.Error);//错误消息 + } + } + timemap.put(id,currentTime); + } + } +}