Kaynağa Gözat

出差申请单变更

wanghaiwu 1 hafta önce
ebeveyn
işleme
00e91e1ed3

+ 50 - 2
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/TripReqBillSubmitOpPlugin.java

@@ -13,9 +13,16 @@ 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 java.util.*;
+import java.util.stream.Collectors;
+
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.QueryServiceHelper;
+import kd.fi.er.business.servicehelper.CommonServiceHelper;
+import kd.fi.er.business.trip.util.TripReqChangeUtil;
+import nckd.base.helper.CommonHelperUtils;
 import nckd.jimin.jyyy.fi.common.FinanceCommonUtils;
 
 /**
@@ -33,9 +40,18 @@ public class TripReqBillSubmitOpPlugin extends AbstractOperationServicePlugIn {
         List<String> fieldKeys = e.getFieldKeys();
 
 //        fieldKeys.add("tripentry");
+        fieldKeys.add("ischange");
         fieldKeys.add("applier");
         fieldKeys.add("tripentry.startdate");
         fieldKeys.add("tripentry.enddate");
+
+        Iterator var3 = TripReqChangeUtil.getTriphistoryMappingresult().entrySet().iterator();
+
+        while(var3.hasNext()) {
+            Map.Entry<String, String> entry = (Map.Entry)var3.next();
+            fieldKeys.add(entry.getKey());
+            fieldKeys.add(entry.getValue());
+        }
     }
 
     @Override
@@ -54,7 +70,9 @@ public class TripReqBillSubmitOpPlugin extends AbstractOperationServicePlugIn {
 
                     DynamicObjectCollection tripentry = tripReqInfo.getDynamicObjectCollection("tripentry");
 
+                    int index = 0;
                     for(DynamicObject entry : tripentry){
+                        index++;
                         Date startDate = entry.getDate("startdate");
                         Date endDate = entry.getDate("enddate");
 
@@ -66,11 +84,41 @@ public class TripReqBillSubmitOpPlugin extends AbstractOperationServicePlugIn {
                         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);
                         }
+
+                        //如果是变更行程,需要与变更前的做校验
+                        QFilter qFilter = new QFilter("id", QCP.equals, tripReqInfo.getLong("id"));
+                        qFilter.and(new QFilter("tripchangehistoryentry.srcentryid", QCP.equals, entry.getLong("id")));
+
+                        String selectFields = "tripchangehistoryentry.historystartdate, tripchangehistoryentry.historyenddate, tripchangehistoryentry.changetime";
+
+                        DynamicObjectCollection historyEntities = QueryServiceHelper.query(tripReqInfo.getDataEntityType().getName(), selectFields, qFilter.toArray(), "tripchangehistoryentry.changetime desc");
+
+                        if (tripReqInfo.getBoolean("ischange") && historyEntities.size() > 0) {
+                            DynamicObject historyEntry = historyEntities.get(0);
+                            Date now = new Date();
+                            Date curStartDate = entry.getDate("startdate");
+                            Date hisStartDate = historyEntry.getDate("tripchangehistoryentry.historystartdate");
+
+                            String nowString = CommonHelperUtils.getDateFormatString(now, "yyyy-MM-dd HH:mm:ss");
+                            String curStartDateString = CommonHelperUtils.getDateFormatString(curStartDate, "yyyy-MM-dd HH:mm:ss");
+                            String hisStartDateString = CommonHelperUtils.getDateFormatString(hisStartDate, "yyyy-MM-dd HH:mm:ss");
+
+                            if(hisStartDate.compareTo(now) > 0){
+                                if(curStartDate.compareTo(now) < 0){
+                                    this.addErrorMessage(dataEntity, "行程" + index + ", 出差前变更, 变更后的开始时间(" + curStartDateString + ")不能小于当前时间(" + nowString + ")");
+                                }
+                            } else {
+                                if(curStartDate.compareTo(hisStartDate) < 0){
+                                    this.addErrorMessage(dataEntity, "行程" + index + ", 出差后变更, 变更后的开始时间(" + curStartDateString + ")不能小于原开始时间(" + hisStartDateString + ")");
+                                }
+                            }
+                        }
                     }
                 }
             }