diff --git a/code/tmc/kdsz-zyf25-tmc-cfm/src/main/java/kdsz/zyf25/tmc/cfm/plugin/form/cdm/PayAndRecBillPlugin.java b/code/tmc/kdsz-zyf25-tmc-cfm/src/main/java/kdsz/zyf25/tmc/cfm/plugin/form/cdm/PayAndRecBillPlugin.java new file mode 100644 index 0000000..298e816 --- /dev/null +++ b/code/tmc/kdsz-zyf25-tmc-cfm/src/main/java/kdsz/zyf25/tmc/cfm/plugin/form/cdm/PayAndRecBillPlugin.java @@ -0,0 +1,56 @@ +package kdsz.zyf25.tmc.cfm.plugin.form.cdm; + +import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.entity.datamodel.events.ChangeData; +import kd.bos.entity.datamodel.events.PropertyChangedArgs; +import kd.sdk.plugin.Plugin; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.Date; +import java.util.EventObject; + +/** + * 应收、应付票据共用界面插件 + */ +public class PayAndRecBillPlugin extends AbstractBillPlugIn implements Plugin { + @Override + public void afterCreateNewData(EventObject e) { + super.afterCreateNewData(e); + Date issueDate = (Date)this.getModel().getValue("issuedate");//出票日期 + Date expireDate = (Date)this.getModel().getValue("draftbillexpiredate");//票据到期日 + calculateTerm(issueDate, expireDate); + } + + @Override + public void propertyChanged(PropertyChangedArgs e) { + super.propertyChanged(e); + String name = e.getProperty().getName(); + //出票日期、到期日变更时计算票据期限 + if ("issuedate".equals(name) || "draftbillexpiredate".equals(name)){ + Date issueDate = (Date)this.getModel().getValue("issuedate");//出票日期 + Date expireDate = (Date)this.getModel().getValue("draftbillexpiredate");//票据到期日 + calculateTerm(issueDate, expireDate); + } + } + private void calculateTerm(Date issueDate,Date expireDate){ + // 如果出票日期或到期日为null,则期限为0天 + if (issueDate == null || expireDate == null){ + this.getModel().setValue("kdsz_term", 0); + return; + } + // 将 Date 转换为 LocalDate(忽略时间部分) + LocalDate localIssueDate = issueDate.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + LocalDate localExpireDate = expireDate.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + + // 计算天数差 + long term = Math.abs(ChronoUnit.DAYS.between(localIssueDate, localExpireDate)); + this.getModel().setValue("kdsz_term", term); + } +} \ No newline at end of file