Browse Source

<feat>:新增
1、出差申请、用车申请提交插件

wanghaiwu 3 days ago
parent
commit
2cdeeb43b2

+ 97 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/FinanceCommonUtils.java

@@ -0,0 +1,97 @@
+package nckd.jimin.jyyy.fi.common;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 财务帮助类
+ * @author wanghaiwu_kd
+ * @date 2025/04/29
+ */
+public class FinanceCommonUtils {
+
+    private static final Log logger = LogFactory.getLog(FinanceCommonUtils.class);
+
+    /**
+     * 校验出差申请单、外办单是否存在与参数startDate, endDate存在时间交叉的记录
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    public static String checkDateIsExists(Long billId, Long userId, Date startDate, Date endDate){
+        String checkMsg = "";
+
+        String selectFields = "id, billno";
+
+        QFilter qFilter = buildSearchFilter("er_tripreqbill", billId, userId, startDate, endDate);
+        //出差申请单
+        DynamicObject[] tripReqBillArray = BusinessDataServiceHelper.load("er_tripreqbill", selectFields, qFilter.toArray());
+
+        qFilter = buildSearchFilter("er_dailyvehiclebill", billId, userId, startDate, endDate);
+        //外办单
+        DynamicObject[] vehicleBillArray = BusinessDataServiceHelper.load("er_dailyvehiclebill", selectFields, qFilter.toArray());
+
+        String tripReqBills = "";
+        if(tripReqBillArray.length > 0){
+            List<String> numberList = (List) Arrays.stream(tripReqBillArray).map((o) -> {
+                return o.getString("billno");
+            }).collect(Collectors.toList());
+
+            tripReqBills = String.join(",", numberList);
+        }
+        String vehicleBills = "";
+        if(vehicleBillArray.length > 0){
+            List<String> numberList = (List) Arrays.stream(vehicleBillArray).map((o) -> {
+                return o.getString("billno");
+            }).collect(Collectors.toList());
+
+            vehicleBills = String.join(",", numberList);
+        }
+
+        if(tripReqBills.length() > 0){
+            checkMsg += "出差申请单:" + tripReqBills;
+        }
+        if(vehicleBills.length() > 0){
+            checkMsg += "外办单:" + vehicleBills;
+        }
+
+        return checkMsg;
+    }
+
+    /**
+     * 构造查询条件
+     * @param entityName
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    public static QFilter buildSearchFilter(String entityName, Long billId, Long userId, Date startDate, Date endDate){
+        String prefix = "";
+
+        if("er_tripreqbill".equals(entityName)){
+            prefix = "tripentry.";
+        }
+
+        QFilter qFilter = new QFilter("billstatus", QCP.equals, "A");
+        qFilter.and(new QFilter("id", QCP.not_equals, billId));
+        qFilter.and(new QFilter("applier", QCP.equals, userId));
+
+        QFilter startFilter = new QFilter(prefix + "startDate", QCP.less_equals, startDate);
+        startFilter.and(new QFilter(prefix + "endDate", QCP.large_equals, startDate));
+
+        QFilter endFilter = new QFilter(prefix + "startDate", QCP.less_equals, endDate);
+        endFilter.and(new QFilter(prefix + "endDate", QCP.large_equals, endDate));
+
+        qFilter.and(startFilter.or(endFilter));
+
+        return qFilter;
+    }
+}

+ 92 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/DailyVehicleBillSubmitOpPlugin.java

@@ -0,0 +1,92 @@
+package nckd.jimin.jyyy.fi.plugin.operate;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.ExtendedDataEntity;
+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.EndOperationTransactionArgs;
+import kd.bos.entity.validate.AbstractValidator;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import nckd.jimin.jyyy.fi.common.FinanceCommonUtils;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 表单标识:外办单(用车申请单nckd_er_dailyvehicleb_ext)
+ * @author wanghaiwu_kd
+ * @date 2025/04/29
+ */
+public class DailyVehicleBillSubmitOpPlugin extends AbstractOperationServicePlugIn {
+    private static final Log logger = LogFactory.getLog(DailyVehicleBillSubmitOpPlugin.class);
+
+    @Override
+    public void onPreparePropertys(PreparePropertysEventArgs e) {
+        super.onPreparePropertys(e);
+
+        List<String> fieldKeys = e.getFieldKeys();
+
+        fieldKeys.add("applier");
+        fieldKeys.add("startdate");
+        fieldKeys.add("enddate");
+    }
+
+    @Override
+    public void onAddValidators(AddValidatorsEventArgs e) {
+        super.onAddValidators(e);
+
+        e.addValidator(new AbstractValidator() {
+            @Override
+            public void validate() {
+                ExtendedDataEntity[] dataEntitys = this.getDataEntities();
+                for (ExtendedDataEntity dataEntity : dataEntitys) {
+                    if(dataEntity == null){
+                        continue;
+                    }
+                    DynamicObject vehicleReqBillInfo = dataEntity.getDataEntity();
+
+                    Date startDate = vehicleReqBillInfo.getDate("startdate");
+                    Date endDate = vehicleReqBillInfo.getDate("enddate");
+
+                    if(startDate == null || endDate == null){
+                        this.addErrorMessage(dataEntity, "开始时间、结束时间不能为空!");
+                    }
+
+                    Long billId = vehicleReqBillInfo.getLong("id");
+                    Long userId = vehicleReqBillInfo.getDynamicObject("applier").getLong("id");
+
+                    String checkMsg = FinanceCommonUtils.checkDateIsExists(billId, userId, startDate, endDate);
+
+                    if(checkMsg.length() > 0) {
+                        this.addErrorMessage(dataEntity, "存在开始时间、结束时间重叠的单据!" + checkMsg);
+                    }
+                }
+            }
+        });
+    }
+
+    @Override
+    public void beforeExecuteOperationTransaction(BeforeOperationArgs e) {
+        super.beforeExecuteOperationTransaction(e);
+    }
+
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        super.beginOperationTransaction(e);
+    }
+
+    @Override
+    public void endOperationTransaction(EndOperationTransactionArgs e) {
+        super.endOperationTransaction(e);
+    }
+
+    @Override
+    public void afterExecuteOperationTransaction(AfterOperationArgs e) {
+        super.afterExecuteOperationTransaction(e);
+    }
+}

+ 99 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/TripReqBillSubmitOpPlugin.java

@@ -0,0 +1,99 @@
+package nckd.jimin.jyyy.fi.plugin.operate;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.ExtendedDataEntity;
+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.EndOperationTransactionArgs;
+import kd.bos.entity.validate.AbstractValidator;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import java.util.Date;
+import java.util.List;
+
+import nckd.jimin.jyyy.fi.common.FinanceCommonUtils;
+
+/**
+ * 表单标识:出差申请单(nckd_er_tripreqbill_ext)
+ * @author wanghaiwu_kd
+ * @date 2025/04/29
+ */
+public class TripReqBillSubmitOpPlugin extends AbstractOperationServicePlugIn {
+    private static final Log logger = LogFactory.getLog(TripReqBillSubmitOpPlugin.class);
+
+    @Override
+    public void onPreparePropertys(PreparePropertysEventArgs e) {
+        super.onPreparePropertys(e);
+
+        List<String> fieldKeys = e.getFieldKeys();
+
+//        fieldKeys.add("tripentry");
+        fieldKeys.add("applier");
+        fieldKeys.add("tripentry.startdate");
+        fieldKeys.add("tripentry.enddate");
+    }
+
+    @Override
+    public void onAddValidators(AddValidatorsEventArgs e) {
+        super.onAddValidators(e);
+
+        e.addValidator(new AbstractValidator() {
+            @Override
+            public void validate() {
+                ExtendedDataEntity[] dataEntitys = this.getDataEntities();
+                for (ExtendedDataEntity dataEntity : dataEntitys) {
+                    if(dataEntity == null){
+                        continue;
+                    }
+                    DynamicObject tripReqInfo = dataEntity.getDataEntity();
+
+                    DynamicObjectCollection tripentry = tripReqInfo.getDynamicObjectCollection("tripentry");
+
+                    for(DynamicObject entry : tripentry){
+                        Date startDate = entry.getDate("startdate");
+                        Date endDate = entry.getDate("enddate");
+
+                        if(startDate == null || endDate == null){
+                            this.addErrorMessage(dataEntity, "开始时间、结束时间不能为空!");
+                            continue;
+                        }
+
+                        Long billId = tripReqInfo.getLong("id");
+                        Long userId = tripReqInfo.getDynamicObject("applier").getLong("id");
+
+                        String checkMsg = FinanceCommonUtils.checkDateIsExists(billId, userId, startDate, endDate);
+
+                        if(checkMsg.length() > 0) {
+                            this.addErrorMessage(dataEntity, "存在开始时间、结束时间重叠的单据!" + checkMsg);
+                        }
+                    }
+                }
+            }
+        });
+    }
+
+    @Override
+    public void beforeExecuteOperationTransaction(BeforeOperationArgs e) {
+        super.beforeExecuteOperationTransaction(e);
+    }
+
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        super.beginOperationTransaction(e);
+    }
+
+    @Override
+    public void endOperationTransaction(EndOperationTransactionArgs e) {
+        super.endOperationTransaction(e);
+    }
+
+    @Override
+    public void afterExecuteOperationTransaction(AfterOperationArgs e) {
+        super.afterExecuteOperationTransaction(e);
+    }
+}