Quellcode durchsuchen

商旅对账测试问题修复

lisheng vor 4 Tagen
Ursprung
Commit
16e638170c

+ 5 - 3
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/constant/travelcheck/FinanceBillConfirmConstant.java

@@ -43,15 +43,17 @@ public interface FinanceBillConfirmConstant extends BillConstant {
     /**
      * 商旅确认超标ID
      */
-    String NCKD_CB_FINANCONFIRM = "nckd_cb_financonfirm";
+    String NCKD_CB_CONFRMID = "nckd_cb_confrmid";
     /**
      * 商旅确认退改ID
      */
-    String NCKD_TG_FINANCONFIRM = "nckd_tg_financonfirm";
+    String NCKD_TG_CONFRMID = "nckd_tg_confrmid";
     /**
      * 商旅确认住宿ID
      */
-    String NCKD_ZS_FINANCONFIRM = "nckd_zs_financonfirm";
+    String NCKD_ZS_CONFRMID = "nckd_zs_confrmid";
+
+    String  NCKD_SUP_CHECKID = "nckd_sup_checkid";
 
     /**
      * 下推商旅对账

+ 30 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/travelcheck/BusTravelCheckApproveEdit.java

@@ -13,6 +13,7 @@ import nckd.jimin.jyyy.fi.common.constant.travelcheck.BusTravelCheckBillConstant
 import nckd.jimin.jyyy.fi.common.constant.travelcheck.FinanceBillConfirmConstant;
 
 import java.util.EventObject;
+import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
@@ -79,6 +80,20 @@ public class BusTravelCheckApproveEdit extends AbstractBillPlugIn implements Fin
             }
         }
 
+        DynamicObjectCollection supEntryCol = dataEntity.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
+        List<Long> supEntryIdList = supEntryCol.stream().map(confirmSupEntry -> confirmSupEntry.getLong(BusTravelCheckBillConstant.ID)).collect(Collectors.toList());
+
+        DynamicObjectCollection checkSupEntryCol = checkBillInfo.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
+        checkSupEntryCol.removeIf(confirmSupEntry -> supEntryIdList.contains(confirmSupEntry.getLong(BusTravelCheckBillConstant.ID)));
+        checkSupEntryCol.removeIf(confirmSupEntry -> confirmSupEntry.getDynamicObject(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL) == null);
+
+        Map<Long, DynamicObject> checkSupEntryMap = checkSupEntryCol.stream().collect(Collectors.toMap(supEntry -> supEntry.getLong(ID), supEntry -> supEntry));
+        for(DynamicObject supEntry : supEntryCol){
+            Long supEntryId = supEntry.getLong(BusTravelCheckBillConstant.ID);
+            DynamicObject checkSupEntry = checkSupEntryMap.getOrDefault(supEntryId, checkSupEntryCol.addNew());
+            DynamicObjectUtils.copy(supEntry, checkSupEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+        }
+
         DynamicObjectCollection slSrcEntryCol = dataEntity.getDynamicObjectCollection(NCKD_SL_ENTRY.ENTITYID);
         Map<Long, DynamicObject> slSrcEntryMap = slSrcEntryCol.stream().collect(Collectors.toMap(slEntry -> slEntry.getLong(ID), slEntry -> slEntry));
         DynamicObjectCollection checkSlEntryCol = checkBillInfo.getDynamicObjectCollection(NCKD_SL_ENTRY.ENTITYID);
@@ -147,6 +162,21 @@ public class BusTravelCheckApproveEdit extends AbstractBillPlugIn implements Fin
                 DynamicObjectUtils.copy(bzEntryInfo, confirmBzEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
             }
         }
+        // 补助未涵盖反写确认单
+        DynamicObjectCollection supEntryCol = dataEntity.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
+
+        DynamicObjectCollection confirmSupEntryCol = confirmBillInfo.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
+
+        List<Long> supEntryIdList = supEntryCol.stream().map(confirmSupEntry -> confirmSupEntry.getLong(BusTravelCheckBillConstant.ID)).collect(Collectors.toList());
+        confirmSupEntryCol.removeIf(confirmSupEntry -> supEntryIdList.contains(confirmSupEntry.getLong(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID)));
+        confirmSupEntryCol.removeIf(confirmSupEntry -> confirmSupEntry.getLong(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID) == 0L);
+        // 删除来源确认单的数据
+        for(DynamicObject supEntry : supEntryCol){
+            Long supEntryId = supEntry.getLong(BusTravelCheckBillConstant.ID);
+            DynamicObject confirmSupEntry = confirmSupEntryCol.addNew();
+            DynamicObjectUtils.copy(supEntry, confirmSupEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            confirmSupEntry.set(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID, supEntryId);
+        }
 
         DynamicObjectCollection slSrcEntryCol = dataEntity.getDynamicObjectCollection(NCKD_SL_ENTRY.ENTITYID);
         Map<Long, DynamicObject> slSrcEntryMap = slSrcEntryCol.stream().collect(Collectors.toMap(slEntry -> slEntry.getLong(NCKD_SL_ENTRY.NCKD_SL_SRCENTRYID), slEntry -> slEntry));

+ 64 - 24
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/travelcheck/BusTravelCheckBillEdit.java

@@ -1,35 +1,35 @@
 package nckd.jimin.jyyy.fi.plugin.form.travelcheck;
 
 import kd.bos.bill.AbstractBillPlugIn;
-import kd.bos.context.RequestContext;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
-import kd.bos.entity.EntityMetadataCache;
-import kd.bos.entity.MainEntityType;
 import kd.bos.entity.datamodel.events.PropertyChangedArgs;
 import kd.bos.form.events.BeforeDoOperationEventArgs;
+import kd.bos.form.field.BasedataEdit;
+import kd.bos.form.field.events.BeforeF7SelectEvent;
+import kd.bos.form.field.events.BeforeF7SelectListener;
 import kd.bos.form.operate.FormOperate;
-import kd.bos.orm.query.QCP;
+import kd.bos.list.ListShowParameter;
 import kd.bos.orm.query.QFilter;
-import kd.bos.servicehelper.BusinessDataServiceHelper;
-import kd.bos.servicehelper.QueryServiceHelper;
-import kd.bos.servicehelper.operation.SaveServiceHelper;
-import nckd.jimin.jyyy.fi.common.constant.BillConstant;
 import nckd.jimin.jyyy.fi.common.constant.travelcheck.BusTravelCheckBillConstant;
-import nckd.jimin.jyyy.fi.common.constant.travelcheck.FinanceBillConfirmConstant;
 import nckd.jimin.jyyy.fi.common.constant.travelcheck.TripReqBillConstant;
 import nckd.jimin.jyyy.fi.common.util.CommonUtils;
 
 import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.EventObject;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
-import java.util.stream.IntStream;
 
-public class BusTravelCheckBillEdit extends AbstractBillPlugIn implements BusTravelCheckBillConstant {
+public class BusTravelCheckBillEdit extends AbstractBillPlugIn implements BusTravelCheckBillConstant, BeforeF7SelectListener {
+
+
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        BasedataEdit tripReqBillEdit = this.getControl(NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL);
+        tripReqBillEdit.addBeforeF7SelectListener(this);
+    }
 
     @Override
     public void beforeBindData(EventObject e) {
@@ -50,7 +50,6 @@ public class BusTravelCheckBillEdit extends AbstractBillPlugIn implements BusTra
         int rowIndex = e.getChangeSet()[0].getRowIndex();
         Object oldValue = e.getChangeSet()[0].getOldValue();
         Object newValue = e.getChangeSet()[0].getNewValue();
-        DynamicObject entryRow = getModel().getEntryRowEntity(NCKD_BZ_SUPDATA.ENTITYID, rowIndex);
         // 出差申请单号
         if (NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL.equals(name)) {
             tripReqBillChanged(oldValue, newValue, rowIndex);
@@ -66,27 +65,36 @@ public class BusTravelCheckBillEdit extends AbstractBillPlugIn implements BusTra
         }
         //监听单据内设置字段的值改变,用于计算新的日期范围控件的最早可选日期
         if (NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE.equals(name)){
+            DynamicObject entryRow = getModel().getEntryRowEntity(NCKD_BZ_SUPDATA.ENTITYID, rowIndex);
             Date startDate = entryRow.getDate(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE);
             Date tripStartDate = new Date(entryRow.getDynamicObject(NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getDate(TripReqBillConstant.RSTARTDATE).getTime());
-            if(startDate != null && tripStartDate != null && startDate.before(tripStartDate)){
-                getView().showTipNotification("未涵盖日期范围不能早于行程开始时间。");
-                entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE,null);
-                entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE,null);
-                return;
+            if(startDate != null && tripStartDate != null){
+                tripStartDate = CommonUtils.getStartOfDay(tripStartDate);
+                if(startDate.before(tripStartDate)){
+                    getView().showTipNotification("未涵盖日期范围不能早于行程开始时间。");
+                    entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE,null);
+                    entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE,null);
+                    return;
+                }
             }
         }
         if(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE.equals(name)){
+            DynamicObject entryRow = getModel().getEntryRowEntity(NCKD_BZ_SUPDATA.ENTITYID, rowIndex);
             Date endDate = entryRow.getDate(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE);
             Date tripEndDate = new Date(entryRow.getDynamicObject(NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getDate(TripReqBillConstant.RENDDATE).getTime());
-            if(endDate != null && tripEndDate != null && endDate.after(tripEndDate)){
-                getView().showTipNotification("未涵盖日期范围不能晚于行程结束时间。");
-                entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE,null);
-                entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE,null);
-                return;
+            if(endDate != null && tripEndDate != null){
+                tripEndDate = CommonUtils.getStartOfDay(tripEndDate);
+                if(endDate.after(tripEndDate)){
+                    getView().showTipNotification("未涵盖日期范围不能晚于行程结束时间。");
+                    entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE,null);
+                    entryRow.set(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE,null);
+                    return;
+                }
             }
         }
         if (NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE.equals(name) ||
                 NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE.equals(name)) {
+            DynamicObject entryRow = getModel().getEntryRowEntity(NCKD_BZ_SUPDATA.ENTITYID, rowIndex);
             Date startDate = entryRow.getDate(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RSTARTDATE);
             Date endDate = entryRow.getDate(NCKD_BZ_SUPDATA.NCKD_BZDATERANGE_RENDDATE);
 
@@ -142,4 +150,36 @@ public class BusTravelCheckBillEdit extends AbstractBillPlugIn implements BusTra
         }
         return -1;
     }
+
+    @Override
+    public void beforeF7Select(BeforeF7SelectEvent event) {
+        String propertyName = event.getProperty().getName();
+        ListShowParameter showParameter = (ListShowParameter) event.getFormShowParameter();
+        List<QFilter> filterList = showParameter.getListFilterParameter().getQFilters();
+        if(NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL.equals(propertyName)){
+            // 过滤不为空
+//            filterList.add(new QFilter(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID, QFilter.equals, 0)
+//                    .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID)));
+//            filterList.add(QFilter.isNotNull(FinanceBillConfirmConstant.NCKD_SUP_CHECKID));
+            DynamicObjectCollection supDataEntryCol = getModel().getEntryEntity(NCKD_BZ_SUPDATA.ENTITYID);
+            // 过滤已选择的出差申请
+            List<Object> selectRow = supDataEntryCol.stream()
+                    .filter(entryRow -> entryRow.getDynamicObject(NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL) != null)
+                    .map(entryRow -> entryRow.getDynamicObject(NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getPkValue())
+                    .collect(Collectors.toList());
+
+            DynamicObjectCollection bzEntryCol = getModel().getEntryEntity(NCKD_BZ_ENTRY.ENTITYID);
+            List<Object> bzTravelIdList = bzEntryCol.stream()
+                    .filter(entryRow -> entryRow.getDynamicObject(NCKD_BZ_ENTRY.NCKD_BZ_TRAVELER) != null)
+                    .map(entryRow -> entryRow.getDynamicObject(NCKD_BZ_ENTRY.NCKD_BZ_TRAVELER).getPkValue())
+                    .collect(Collectors.toList());
+//            if(selectRow.size() > 0){
+//                filterList.add(new QFilter(TripReqBillConstant.ID, QFilter.not_in, selectRow));
+//            }
+            if(bzTravelIdList.size() > 0){
+                filterList.add(new QFilter(TripReqBillConstant.APPLIER, QFilter.in, bzTravelIdList));
+            }
+            filterList.addAll(filterList);
+        }
+    }
 }

+ 46 - 3
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/travelcheck/BusTravelCheckBillOp.java

@@ -6,10 +6,13 @@ import kd.bos.entity.EntityMetadataCache;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
 import kd.bos.org.utils.DynamicObjectUtils;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
 import nckd.jimin.jyyy.fi.common.constant.travelcheck.BusTravelCheckBillConstant;
 import nckd.jimin.jyyy.fi.common.constant.travelcheck.FinanceBillConfirmConstant;
+import nckd.jimin.jyyy.fi.common.constant.travelcheck.TripReqBillConstant;
 
 import java.util.Arrays;
 import java.util.List;
@@ -28,6 +31,45 @@ public class BusTravelCheckBillOp extends AbstractOperationServicePlugIn {
         if("audit".equals(operationKey)){
             Arrays.stream(dataArray).forEach(dataEntity -> writeBackConfirmBill(dataEntity));
         }
+        if("save".equals(operationKey) || "submit".equals(operationKey)){
+            // 解除对账单关联的出差申请
+            for(DynamicObject dataEntity : dataArray){
+                unBindTripReqBill(dataEntity);
+                writeBackSupDataTripReq(dataEntity);
+            }
+        }
+        if("delete".equals(operationKey)){
+            Arrays.stream(dataArray).forEach(dataEntity -> unBindTripReqBill(dataEntity));
+        }
+    }
+    protected void unBindTripReqBill(DynamicObject dataEntity){
+        Long checkBillId = dataEntity.getLong(BusTravelCheckBillConstant.ID);
+        if(checkBillId != null && checkBillId != 0L){
+            DynamicObject[] tripReqBillArray = BusinessDataServiceHelper.load(TripReqBillConstant.ENTITYID_F7, FinanceBillConfirmConstant.NCKD_BZ_CONFRMID, new QFilter[]{
+                    new QFilter(FinanceBillConfirmConstant.NCKD_SUP_CHECKID, QCP.equals, checkBillId)
+            });
+            for(DynamicObject tripReqBill : tripReqBillArray){
+                tripReqBill.set(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID, null);
+            }
+            SaveServiceHelper.save(tripReqBillArray);
+        }
+    }
+
+    protected void writeBackSupDataTripReq(DynamicObject dataEntity){
+        Long checkBillId = dataEntity.getLong(BusTravelCheckBillConstant.ID);
+        if(checkBillId != null && checkBillId != 0L){
+            DynamicObjectCollection supDataEntryCol = dataEntity.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
+            List<Object> tripReqBillList = supDataEntryCol.stream()
+                    .map(r -> r.getDynamicObject(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getPkValue())
+                    .collect(Collectors.toList());
+            DynamicObject[] tripReqBillArray = BusinessDataServiceHelper.load(TripReqBillConstant.ENTITYID_F7, FinanceBillConfirmConstant.NCKD_SUP_CHECKID, new QFilter[]{
+                    new QFilter(FinanceBillConfirmConstant.ID, QCP.in, tripReqBillList)
+            });
+            for(DynamicObject tripReqBill : tripReqBillArray){
+                tripReqBill.set(FinanceBillConfirmConstant.NCKD_SUP_CHECKID, checkBillId);
+            }
+            SaveServiceHelper.save(tripReqBillArray);
+        }
     }
 
     protected void writeBackConfirmBill(DynamicObject dataEntity){
@@ -51,11 +93,12 @@ public class BusTravelCheckBillOp extends AbstractOperationServicePlugIn {
 
         DynamicObjectCollection confirmSupEntryCol = confirmBillInfo.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
         // 删除来源确认单的数据
-        confirmSupEntryCol.removeIf(confirmSupEntry -> confirmSupEntry.getLong(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID) == checkBillId);
+        Map<Long, DynamicObject> confirmSupEntryMap = confirmSupEntryCol.stream().collect(Collectors.toMap(confirmSupEntry -> confirmSupEntry.getLong(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID), confirmSupEntry -> confirmSupEntry));
         for(DynamicObject supEntry : supEntryCol){
-            DynamicObject confirmSupEntry = confirmSupEntryCol.addNew();
+            Long supEntryId = supEntry.getLong(BusTravelCheckBillConstant.ID);
+            DynamicObject confirmSupEntry = confirmSupEntryMap.getOrDefault(supEntryId, confirmSupEntryCol.addNew());
             DynamicObjectUtils.copy(supEntry, confirmSupEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
-            confirmSupEntry.set(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID, checkBillId);
+            confirmSupEntry.set(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID, supEntryId);
         }
 
         DynamicObjectCollection slSrcEntryCol = dataEntity.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID);

+ 24 - 24
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/travelcheck/FinanceBillConfirmOp.java

@@ -69,54 +69,54 @@ public class FinanceBillConfirmOp extends AbstractOperationServicePlugIn {
         SaveServiceHelper.save(ycVehicelCheckBillArray);
 
         // 超标
-        DynamicObject[] cbHotelCheckingBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, new QFilter[]{
-                new QFilter(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, QCP.equals, confirmBillId)
+        DynamicObject[] cbHotelCheckingBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_CB_CONFRMID, new QFilter[]{
+                new QFilter(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, QCP.equals, confirmBillId)
         });
-        Arrays.stream(cbHotelCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, 0));
+        Arrays.stream(cbHotelCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, 0));
         SaveServiceHelper.save(cbHotelCheckingBillArray);
 
-        DynamicObject[] cbPlaneCheckingBillArray = BusinessDataServiceHelper.load("er_planecheckingbill", FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, new QFilter[]{
-                new QFilter(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, QCP.equals, confirmBillId)
+        DynamicObject[] cbPlaneCheckingBillArray = BusinessDataServiceHelper.load("er_planecheckingbill", FinanceBillConfirmConstant.NCKD_CB_CONFRMID, new QFilter[]{
+                new QFilter(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, QCP.equals, confirmBillId)
         });
-        Arrays.stream(cbPlaneCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, 0));
+        Arrays.stream(cbPlaneCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, 0));
         SaveServiceHelper.save(cbPlaneCheckingBillArray);
 
-        DynamicObject[] cbTrainCheckingBillArray = BusinessDataServiceHelper.load("er_traincheckingbill", FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, new QFilter[]{
-                new QFilter(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, QCP.equals, confirmBillId)
+        DynamicObject[] cbTrainCheckingBillArray = BusinessDataServiceHelper.load("er_traincheckingbill", FinanceBillConfirmConstant.NCKD_CB_CONFRMID, new QFilter[]{
+                new QFilter(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, QCP.equals, confirmBillId)
         });
-        Arrays.stream(cbTrainCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, 0));
+        Arrays.stream(cbTrainCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, 0));
         SaveServiceHelper.save(cbTrainCheckingBillArray);
 
-        DynamicObject[] cbVehicleCheckingBillArray = BusinessDataServiceHelper.load("er_vehiclecheckingbill", FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, new QFilter[]{
-                new QFilter(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, QCP.equals, confirmBillId)
+        DynamicObject[] cbVehicleCheckingBillArray = BusinessDataServiceHelper.load("er_vehiclecheckingbill", FinanceBillConfirmConstant.NCKD_CB_CONFRMID, new QFilter[]{
+                new QFilter(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, QCP.equals, confirmBillId)
         });
-        Arrays.stream(cbVehicleCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, 0));
+        Arrays.stream(cbVehicleCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, 0));
         SaveServiceHelper.save(cbVehicleCheckingBillArray);
 
         // 退改
-        DynamicObject[] tgHotelCheckingBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, new QFilter[]{
-                new QFilter(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, QCP.equals, confirmBillId)
+        DynamicObject[] tgHotelCheckingBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_TG_CONFRMID, new QFilter[]{
+                new QFilter(FinanceBillConfirmConstant.NCKD_TG_CONFRMID, QCP.equals, confirmBillId)
         });
-        Arrays.stream(tgHotelCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, 0));
+        Arrays.stream(tgHotelCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_TG_CONFRMID, 0));
         SaveServiceHelper.save(tgHotelCheckingBillArray);
 
-        DynamicObject[] tgPlaneCheckingBillArray = BusinessDataServiceHelper.load("er_planecheckingbill", FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, new QFilter[]{
-                new QFilter(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, QCP.equals, confirmBillId)
+        DynamicObject[] tgPlaneCheckingBillArray = BusinessDataServiceHelper.load("er_planecheckingbill", FinanceBillConfirmConstant.NCKD_TG_CONFRMID, new QFilter[]{
+                new QFilter(FinanceBillConfirmConstant.NCKD_TG_CONFRMID, QCP.equals, confirmBillId)
         });
-        Arrays.stream(tgPlaneCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, 0));
+         Arrays.stream(tgPlaneCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_TG_CONFRMID, 0));
         SaveServiceHelper.save(tgPlaneCheckingBillArray);
 
-        DynamicObject[] tgTrainCheckingBillArray = BusinessDataServiceHelper.load("er_traincheckingbill", FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, new QFilter[]{
-                new QFilter(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, QCP.equals, confirmBillId)
+        DynamicObject[] tgTrainCheckingBillArray = BusinessDataServiceHelper.load("er_traincheckingbill", FinanceBillConfirmConstant.NCKD_TG_CONFRMID, new QFilter[]{
+                new QFilter(FinanceBillConfirmConstant.NCKD_TG_CONFRMID, QCP.equals, confirmBillId)
         });
-        Arrays.stream(tgTrainCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, 0));
+        Arrays.stream(tgTrainCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_TG_CONFRMID, 0));
         SaveServiceHelper.save(tgTrainCheckingBillArray);
 
         // 住宿
-        DynamicObject[] zhHotelCheckingBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_ZS_FINANCONFIRM, new QFilter[]{
-                new QFilter(FinanceBillConfirmConstant.NCKD_ZS_FINANCONFIRM, QCP.equals, confirmBillId)
+        DynamicObject[] zhHotelCheckingBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_ZS_CONFRMID, new QFilter[]{
+                new QFilter(FinanceBillConfirmConstant.NCKD_ZS_CONFRMID, QCP.equals, confirmBillId)
         });
-        Arrays.stream(zhHotelCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_ZS_FINANCONFIRM, 0));
+        Arrays.stream(zhHotelCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_ZS_CONFRMID, 0));
         SaveServiceHelper.save(zhHotelCheckingBillArray);
     }
 

+ 210 - 102
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/task/TravelFinanConfirmCreateTask.java

@@ -38,24 +38,34 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
 
     private static final Log logger = LogFactory.getLog(TravelFinanConfirmCreateTask.class);
 
-    private Date startDate;
+    /**
+     * 执行期间,默认为当前时间
+     */
+    private Date periodEndDate;
+
+    /**
+     * 账期时间,默认为上个月第一天
+     */
+    private Date periodStartDate;
 
     @Override
     public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
         logger.info("TravelFinanConfirmCreateTask begin");
-        startDate = new Date();
+        periodEndDate = new Date();
         // 创建当月的财务底稿确认单
        if(map.containsKey("startDate")){
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
            try {
-               startDate = sdf.parse((String)map.get("startDate"));
+               periodEndDate = sdf.parse((String)map.get("startDate"));
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
        }
        // 开始日期取当月第一天
-        startDate = getFirstDayOfMonth(startDate);
-        String period = CommonUtils.parsePeriod(getFirstDayOfPreviousMonth(startDate));
+        periodEndDate = getFirstDayOfMonth(periodEndDate);
+        periodStartDate = getFirstDayOfPreviousMonth(periodEndDate);
+
+        String period = CommonUtils.parsePeriod(periodStartDate);
         DynamicObject financeConfirmInfo = BusinessDataServiceHelper.loadSingle(FinanceBillConfirmConstant.ENTITYID,
                 FinanceBillConfirmConstant.ID,
                 new QFilter(FinanceBillConfirmConstant.NCKD_CHECKMONTH, QCP.equals, period).toArray());
@@ -97,19 +107,29 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             }catch (Exception e){
                 tx.markRollback();
                 logger.error(String.format("创建期间[%s]下的商旅对账确认单失败。", period),e);
+                throw e;
             }
         }
         logger.info("TravelFinanConfirmCreateTask end");
     }
     protected void createZsEntry(DynamicObject financeConfirmInfo) {
+
+        DynamicObjectCollection checkingBillCol = QueryServiceHelper.query("er_checkingbill", "billnum", new QFilter[]{
+                new QFilter("periodstartdate", QCP.large_equals, periodStartDate),
+                new QFilter("periodenddate", QCP.less_than, periodEndDate),
+                new QFilter("operationtype", QFilter.in, Arrays.asList("1","5")),
+        });
+        if(CollectionUtils.isEmpty(checkingBillCol)){
+            return;
+        }
+        List<String> billNumList = checkingBillCol.stream().map(r -> r.getString("billnum")).collect(Collectors.toList());
+
         // 查询酒店订单中,相同部门、性别、酒店城市中,入住时间存在交集的数据,按照部门、性别、酒店城市进行排序
         DynamicObjectCollection queryHotelCol = QueryServiceHelper.query("er_hotelcheckingbill",
                 "id,org.id,oabillnum,sourcebookedid.id applierId,sourcebookedid.gender applierGender,totalamount,cityname,checkindate,checkoutdate," +
                         "hotelname,roomstylename,ordernum", new QFilter[]{
-                new QFilter("happenddate", QCP.less_equals, startDate),
                 QFilter.isNotNull("sourcebookedid"),
-                new QFilter(FinanceBillConfirmConstant.NCKD_ZS_FINANCONFIRM, QFilter.equals, 0)
-                        .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_ZS_FINANCONFIRM)),
+                        new QFilter("ordernum", QCP.in, billNumList),
                 new QFilter("ordertype", QCP.in, Arrays.asList("O","G")),
                 new QFilter("orderstatus", QCP.not_in, Arrays.asList("14","10")),
         });
@@ -148,11 +168,11 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
                 updateHotelBillIdList.add(hotel.getLong("id"));
             }
         }
-        DynamicObject[] updateHotelBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_ZS_FINANCONFIRM, new QFilter("id", QCP.in, updateHotelBillIdList).toArray());
-        for(DynamicObject  hotel : updateHotelBillArray){
-            hotel.set(FinanceBillConfirmConstant.NCKD_ZS_FINANCONFIRM, confirmBillId);
-        }
-        SaveServiceHelper.save(updateHotelBillArray);
+//        DynamicObject[] updateHotelBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_ZS_CONFRMID, new QFilter("id", QCP.in, updateHotelBillIdList).toArray());
+//        for(DynamicObject  hotel : updateHotelBillArray){
+//            hotel.set(FinanceBillConfirmConstant.NCKD_ZS_CONFRMID, confirmBillId);
+//        }
+//        SaveServiceHelper.save(updateHotelBillArray);
     }
 
     /**
@@ -254,13 +274,22 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
     }
 
     protected void createTgEntryTrain(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+        DynamicObjectCollection checkingBillCol = QueryServiceHelper.query("er_checkingbill", "billnum", new QFilter[]{
+                new QFilter("periodstartdate", QCP.large_equals, periodStartDate),
+                new QFilter("periodenddate", QCP.less_than, periodEndDate),
+                new QFilter("operationtype", QFilter.equals, "6"),
+        });
+        if(CollectionUtils.isEmpty(checkingBillCol)){
+            return;
+        }
+
+        List<String> billNumList = checkingBillCol.stream().map(r -> r.getString("billnum")).collect(Collectors.toList());
+
         //火车订单,订单状态=已退票、已改签;
         DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_traincheckingbill",
                 "id,oabillnum,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate,departtime,arrivecity,departcity" +
                         ",refundamount", new QFilter[]{
-                        new QFilter("happenddate", QCP.less_equals, startDate),
-                        new QFilter(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, QFilter.equals, 0)
-                                .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM)),
+                        new QFilter("ordernum", QCP.in, billNumList),
                         new QFilter("orderstatus", QFilter.in, Arrays.asList("2","3")),
                         new QFilter("ordertype", QFilter.in, Arrays.asList("G","T"))
                 });
@@ -282,22 +311,31 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_MODIFYAMT, trainTgEntry.getBigDecimal("refundamount"));
             //tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_SUMAMT, trainTgEntry.getBigDecimal("totalamount"));
         }
-        List<Long> idList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
-        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_traincheckingbill", FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, new QFilter("id", QCP.in, idList).toArray());
-        for(DynamicObject updateBill : updateBillArray){
-            updateBill.set(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, confirmBillId);
-        }
-        SaveServiceHelper.save(updateBillArray);
+//        List<Long> idList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
+//        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_traincheckingbill", FinanceBillConfirmConstant.NCKD_ZS_CONFRMID, new QFilter("id", QCP.in, idList).toArray());
+//        for(DynamicObject updateBill : updateBillArray){
+//            updateBill.set(FinanceBillConfirmConstant.NCKD_ZS_CONFRMID, confirmBillId);
+//        }
+//        SaveServiceHelper.save(updateBillArray);
     }
 
     protected void createTgEntryPlain(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+
+        DynamicObjectCollection checkingBillCol = QueryServiceHelper.query("er_checkingbill", "billnum", new QFilter[]{
+                new QFilter("periodstartdate", QCP.large_equals, periodStartDate),
+                new QFilter("periodenddate", QCP.less_than, periodEndDate),
+                new QFilter("operationtype", QFilter.in, Arrays.asList("2","4")),
+        });
+        if(CollectionUtils.isEmpty(checkingBillCol)){
+            return;
+        }
+
+        List<String> billNumList = checkingBillCol.stream().map(r -> r.getString("billnum")).collect(Collectors.toList());
         // 机票订单,订单状态=已退票、已改签;
         DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_planecheckingbill",
                 "id,oabillnum,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate,takeofftime,fromcityname,tocityname," +
                         "refundamount,endorsementamount", new QFilter[]{
-                        new QFilter("happenddate", QCP.less_equals, startDate),
-                        new QFilter(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, QFilter.equals, 0)
-                                .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM)),
+                        new QFilter("ordernum", QCP.in, billNumList),
                         new QFilter("orderstatus", QFilter.in, Arrays.asList("50202","50302")),
                         new QFilter("ordertype", QFilter.in, Arrays.asList("G","T"))
                 });
@@ -319,22 +357,31 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_MODIFYAMT, CommonUtils.add(trainTgEntry.getBigDecimal("refundamount"), trainTgEntry.getBigDecimal("endorsementamount")));
             //tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_SUMAMT, trainTgEntry.getBigDecimal("totalamount"));
         }
-        List<Long> idList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
-        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_planecheckingbill", FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, new QFilter("id", QCP.in, idList).toArray());
-        for(DynamicObject updateBill : updateBillArray){
-            updateBill.set(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, confirmBillId);
-        }
-        SaveServiceHelper.save(updateBillArray);
+//        List<Long> idList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
+//        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_planecheckingbill", FinanceBillConfirmConstant.NCKD_ZS_CONFRMID, new QFilter("id", QCP.in, idList).toArray());
+//        for(DynamicObject updateBill : updateBillArray){
+//            updateBill.set(FinanceBillConfirmConstant.NCKD_ZS_CONFRMID, confirmBillId);
+//        }
+//        SaveServiceHelper.save(updateBillArray);
     }
 
     protected void createTgEntryHotel(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+
+        DynamicObjectCollection checkingBillCol = QueryServiceHelper.query("er_checkingbill", "billnum", new QFilter[]{
+                new QFilter("periodstartdate", QCP.large_equals, periodStartDate),
+                new QFilter("periodenddate", QCP.less_than, periodEndDate),
+                new QFilter("operationtype", QFilter.in, Arrays.asList("1","5")),
+        });
+        if(CollectionUtils.isEmpty(checkingBillCol)){
+            return;
+        }
+
+        List<String> billNumList = checkingBillCol.stream().map(r -> r.getString("billnum")).collect(Collectors.toList());
         // 酒店订单,订单状态=已退订;
         DynamicObjectCollection hotelTgEntryCol = QueryServiceHelper.query("er_hotelcheckingbill",
                 "id,oabillnum,server,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate," +
                         "unbookfee,checkindate", new QFilter[]{
-                        new QFilter("happenddate", QCP.less_equals, startDate),
-                        new QFilter(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, QFilter.equals, 0)
-                                .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM)),
+                        new QFilter("ordernum", QCP.in, billNumList),
                         new QFilter("orderstatus", QFilter.equals, "10"),
                         new QFilter("ordertype", QFilter.in, Arrays.asList("G","T"))
                 });
@@ -355,12 +402,12 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             // 退改金额
             tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_MODIFYAMT, trainTgEntry.getBigDecimal("unbookfee"));
         }
-        List<Long> idList = hotelTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
-        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, new QFilter("id", QCP.in, idList).toArray());
-        for(DynamicObject updateBill : updateBillArray){
-            updateBill.set(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, confirmBillId);
-        }
-        SaveServiceHelper.save(updateBillArray);
+//        List<Long> idList = hotelTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
+//        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_ZS_CONFRMID, new QFilter("id", QCP.in, idList).toArray());
+//        for(DynamicObject updateBill : updateBillArray){
+//            updateBill.set(FinanceBillConfirmConstant.NCKD_ZS_CONFRMID, confirmBillId);
+//        }
+//        SaveServiceHelper.save(updateBillArray);
     }
 
     protected void createCbEntry(DynamicObject financeConfirmInfo) {
@@ -374,11 +421,22 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
     }
 
     protected void createCbEntryTrain(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+
+        DynamicObjectCollection checkingBillCol = QueryServiceHelper.query("er_checkingbill", "billnum", new QFilter[]{
+                new QFilter("periodstartdate", QCP.large_equals, periodStartDate),
+                new QFilter("periodenddate", QCP.less_than, periodEndDate),
+//                new QFilter(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, QFilter.equals, 0)
+//                        .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_CB_CONFRMID)),
+                new QFilter("operationtype", QFilter.equals, "6"),
+        });
+        if(CollectionUtils.isEmpty(checkingBillCol)){
+            return;
+        }
+        List<String> billNumList = checkingBillCol.stream().map(r -> r.getString("billnum")).collect(Collectors.toList());
+
         DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_traincheckingbill",
                 "id,oabillnum,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate", new QFilter[]{
-                        new QFilter("happenddate", QCP.less_equals, startDate),
-                        new QFilter(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, QFilter.equals, 0)
-                                .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM)),
+                        new QFilter("checkingbillnum", QCP.in, billNumList)
                 });
         // 通过火车订单过滤出超标的订单
         List<String> parentOrderList = trainTgEntryCol.stream().map(r -> r.getString("ordernum")).collect(Collectors.toList());
@@ -420,22 +478,33 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
                 tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_OVERREASON, orderOverDescMap.get(trainTgEntry.getString("ordernum")));
             }
         }
-        List<Long> updateIdList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
-        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_traincheckingbill", FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, new QFilter("id", QCP.in, updateIdList).toArray());
-        for(DynamicObject updateBill : updateBillArray){
-            updateBill.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, confirmBillId);
-        }
-        SaveServiceHelper.save(updateBillArray);
+//        List<Long> updateIdList = checkingBillCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
+//        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_checkingbill", FinanceBillConfirmConstant.NCKD_CB_CONFRMID, new QFilter("id", QCP.in, updateIdList).toArray());
+//        for(DynamicObject updateBill : updateBillArray){
+//            updateBill.set(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, confirmBillId);
+//        }
+//        SaveServiceHelper.save(updateBillArray);
     }
 
 
     protected void createCbEntryPlain(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+
+        DynamicObjectCollection checkingBillCol = QueryServiceHelper.query("er_checkingbill", "billnum", new QFilter[]{
+                new QFilter("periodstartdate", QCP.large_equals, periodStartDate),
+                new QFilter("periodenddate", QCP.less_than, periodEndDate),
+//                new QFilter(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, QFilter.equals, 0)
+//                        .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_CB_CONFRMID)),
+                new QFilter("operationtype", QFilter.in, Arrays.asList("2","4")),
+        });
+        if(CollectionUtils.isEmpty(checkingBillCol)){
+            return;
+        }
+        List<String> billNumList = checkingBillCol.stream().map(r -> r.getString("billnum")).collect(Collectors.toList());
+
         DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_planecheckingbill",
                 "id,oabillnum,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate," +
                         "ticketprice,refundamount,endorsementamount,discount", new QFilter[]{
-                        new QFilter("happenddate", QCP.less_equals, startDate),
-                        new QFilter(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, QFilter.equals, 0)
-                                .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM)),
+                        new QFilter("checkingbillnum", QCP.in, billNumList)
                 });
         // 通过火车订单过滤出超标的订单
         List<String> parentOrderList = trainTgEntryCol.stream().map(r -> r.getString("ordernum")).collect(Collectors.toList());
@@ -498,21 +567,32 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
                 tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_OVERREASON, planOrderInfo.getString("overdesc"));
             }
         }
-        List<Long> updateIdList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
-        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_planecheckingbill", FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, new QFilter("id", QCP.in, updateIdList).toArray());
-        for(DynamicObject updateBill : updateBillArray){
-            updateBill.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, confirmBillId);
-        }
-        SaveServiceHelper.save(updateBillArray);
+//        List<Long> updateIdList = checkingBillCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
+//        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_checkingbill", FinanceBillConfirmConstant.NCKD_CB_CONFRMID, new QFilter("id", QCP.in, updateIdList).toArray());
+//        for(DynamicObject updateBill : updateBillArray){
+//            updateBill.set(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, confirmBillId);
+//        }
+//        SaveServiceHelper.save(updateBillArray);
     }
 
     protected void createCbEntryHotel(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+
+        DynamicObjectCollection checkingBillCol = QueryServiceHelper.query("er_checkingbill", "billnum", new QFilter[]{
+                new QFilter("periodstartdate", QCP.large_equals, periodStartDate),
+                new QFilter("periodenddate", QCP.less_than, periodEndDate),
+//                new QFilter(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, QFilter.equals, 0)
+//                        .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_CB_CONFRMID)),
+                new QFilter("operationtype", QFilter.in, Arrays.asList("1","5")),
+        });
+        if(CollectionUtils.isEmpty(checkingBillCol)){
+            return;
+        }
+
+        List<String> billNumList = checkingBillCol.stream().map(r -> r.getString("billnum")).collect(Collectors.toList());
         DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_hotelcheckingbill",
                 "id,oabillnum,server,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate" +
                         ",unbookfee,checkindate,hotelname,cityname", new QFilter[]{
-                        new QFilter("happenddate", QCP.less_equals, startDate),
-                        new QFilter(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, QFilter.equals, 0)
-                                .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM)),
+                        new QFilter("checkingbillnum", QCP.in, billNumList)
                 });
         // 通过火车订单过滤出超标的订单
         List<String> parentOrderList = trainTgEntryCol.stream().map(r -> r.getString("ordernum")).collect(Collectors.toList());
@@ -565,20 +645,31 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
                 tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_OVERREASON, orderOverDescMap.get(trainTgEntry.getString("ordernum")));
             }
         }
-        List<Long> updateIdList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
-        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, new QFilter("id", QCP.in, updateIdList).toArray());
-        for(DynamicObject updateBill : updateBillArray){
-            updateBill.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, confirmBillId);
-        }
-        SaveServiceHelper.save(updateBillArray);
+//        List<Long> updateIdList = checkingBillCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
+//        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_checkingbill", FinanceBillConfirmConstant.NCKD_CB_CONFRMID, new QFilter("id", QCP.in, updateIdList).toArray());
+//        for(DynamicObject updateBill : updateBillArray){
+//            updateBill.set(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, confirmBillId);
+//        }
+//        SaveServiceHelper.save(updateBillArray);
     }
 
     protected void createCbEntryVehicle(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+
+        DynamicObjectCollection checkingBillCol = QueryServiceHelper.query("er_checkingbill", "billnum", new QFilter[]{
+                new QFilter("periodstartdate", QCP.large_equals, periodStartDate),
+                new QFilter("periodenddate", QCP.less_than, periodEndDate),
+//                new QFilter(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, QFilter.equals, 0)
+//                        .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_CB_CONFRMID)),
+                new QFilter("operationtype", QFilter.equals, "3"),
+        });
+        if(CollectionUtils.isEmpty(checkingBillCol)){
+            return;
+        }
+
+        List<String> billNumList = checkingBillCol.stream().map(r -> r.getString("billnum")).collect(Collectors.toList());
         DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_vehiclecheckingbill",
                 "id,oabillnum,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate", new QFilter[]{
-                        new QFilter("happenddate", QCP.less_equals, startDate),
-                        new QFilter(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, QFilter.equals, 0)
-                                .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM)),
+                        new QFilter("checkingbillnum", QCP.in, billNumList)
                 });
         for(DynamicObject trainTgEntry : trainTgEntryCol){
             long applierId = trainTgEntry.getLong("applierId");
@@ -628,12 +719,12 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_STANDARD, BigDecimal.ZERO);
 
         }
-        List<Long> updateIdList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
-        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_vehiclecheckingbill", FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, new QFilter("id", QCP.in, updateIdList).toArray());
-        for(DynamicObject updateBill : updateBillArray){
-            updateBill.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, confirmBillId);
-        }
-        SaveServiceHelper.save(updateBillArray);
+//        List<Long> updateIdList = checkingBillCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
+//        DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_checkingbill", FinanceBillConfirmConstant.NCKD_CB_CONFRMID, new QFilter("id", QCP.in, updateIdList).toArray());
+//        for(DynamicObject updateBill : updateBillArray){
+//            updateBill.set(FinanceBillConfirmConstant.NCKD_CB_CONFRMID, confirmBillId);
+//        }
+//        SaveServiceHelper.save(updateBillArray);
     }
     protected void createYcEntry(DynamicObject financeConfirmInfo) {
 
@@ -641,12 +732,21 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
         ycEntryCol.clear();
         long confirmBillId = financeConfirmInfo.getLong("id");
 
+        DynamicObjectCollection checkingBillCol = QueryServiceHelper.query("er_checkingbill", "billnum", new QFilter[]{
+                new QFilter("periodstartdate", QCP.large_equals, periodStartDate),
+                new QFilter("periodenddate", QCP.less_than, periodEndDate),
+//                new QFilter(FinanceBillConfirmConstant.NCKD_YC_CONFRMID, QFilter.equals, 0)
+//                        .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_YC_CONFRMID)),
+                new QFilter("operationtype", QFilter.equals, "3"),
+        });
+        if(CollectionUtils.isEmpty(checkingBillCol)){
+            return;
+        }
+        List<String> billNumList = checkingBillCol.stream().map(r -> r.getString("billnum")).collect(Collectors.toList());
         // 查询用车结算单
         DynamicObjectCollection vehicleCheckCol = QueryServiceHelper.query("er_vehiclecheckingbill",
                 "id,oabillnum,server,sourcebookedid.id applierId,totalamount,vehicletype", new QFilter[]{
-                new QFilter("happenddate", QCP.less_equals, startDate),
-                new QFilter(FinanceBillConfirmConstant.NCKD_YC_CONFRMID, QFilter.equals, 0)
-                        .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_YC_CONFRMID)),
+                new QFilter("checkingbillnum", QCP.in, billNumList)
         });
         if(CollectionUtils.isEmpty(vehicleCheckCol)){
             return;
@@ -668,23 +768,30 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             ycEntry.set("nckd_yc_vehicletype", vehicletype);
         }
 
-        List<Long> vehicleBillIdList = vehicleCheckCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
-        DynamicObject[] vehicleCheckBillArray = BusinessDataServiceHelper.load("er_vehiclecheckingbill", FinanceBillConfirmConstant.NCKD_YC_CONFRMID, new QFilter("id", QCP.in, vehicleBillIdList).toArray());
-        for(DynamicObject vehicleCheckBill : vehicleCheckBillArray){
-            vehicleCheckBill.set(FinanceBillConfirmConstant.NCKD_YC_CONFRMID, confirmBillId);
-        }
-        SaveServiceHelper.save(vehicleCheckBillArray);
+//        List<Long> vehicleBillIdList = checkingBillCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
+//        DynamicObject[] vehicleCheckBillArray = BusinessDataServiceHelper.load("er_checkingbill", FinanceBillConfirmConstant.NCKD_YC_CONFRMID, new QFilter("id", QCP.in, vehicleBillIdList).toArray());
+//        for(DynamicObject vehicleCheckBill : vehicleCheckBillArray){
+//            vehicleCheckBill.set(FinanceBillConfirmConstant.NCKD_YC_CONFRMID, confirmBillId);
+//        }
+//        SaveServiceHelper.save(vehicleCheckBillArray);
     }
 
     protected void createSlEntry(DynamicObject financeConfirmInfo) {
-        // 该方法从各个明细中查询,注释掉,改成从全部订单上查询
-        //DynamicObjectCollection slOrderDataCol = getSlOrderDataCol();
+
+        DynamicObjectCollection checkingBillCol = QueryServiceHelper.query("er_checkingbill", "billnum", new QFilter[]{
+                new QFilter("periodstartdate", QCP.large_equals, periodStartDate),
+                new QFilter("periodenddate", QCP.less_than, periodEndDate),
+//                new QFilter(FinanceBillConfirmConstant.NCKD_SL_CONFRMID, QFilter.equals, 0)
+//                        .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_SL_CONFRMID)),
+                new QFilter("operationtype", QFilter.in, Arrays.asList("1","2","4","5","6")),
+        });
+        if(CollectionUtils.isEmpty(checkingBillCol)){
+            return;
+        }
+        List<String> billNumList = checkingBillCol.stream().map(r -> r.getString("billnum")).collect(Collectors.toList());
         DynamicObjectCollection slOrderDataCol = QueryServiceHelper.query("er_allcheckingbill",
                 "id,oabillnum,server,sourcebookedid.id applierId,totalamount,operationtype,ordernum", new QFilter[]{
-                new QFilter("happenddate", QCP.less_equals, startDate),
-                new QFilter(FinanceBillConfirmConstant.NCKD_SL_CONFRMID, QFilter.equals, 0)
-                        .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_SL_CONFRMID)),
-                new QFilter("operationtype", QFilter.in, Arrays.asList("1","2","4","5","6")),
+                new QFilter("checkingbillnum", QCP.in, billNumList)
         });
 
 
@@ -746,12 +853,12 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_ORDERAMT, trainTotalAmount.add(planeTotalAmount).add(hotelTotalAmount));
 
         }
-        List<Long> allBillIdList = slOrderDataCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
-        DynamicObject[] allCheckBillArray = BusinessDataServiceHelper.load("er_allcheckingbill", FinanceBillConfirmConstant.NCKD_SL_CONFRMID, new QFilter("id", QCP.in, allBillIdList).toArray());
-        for(DynamicObject allCheckBill : allCheckBillArray){
-            allCheckBill.set(FinanceBillConfirmConstant.NCKD_SL_CONFRMID, confirmBillId);
-        }
-        SaveServiceHelper.save(allCheckBillArray);
+//        List<Long> allBillIdList = checkingBillCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
+//        DynamicObject[] allCheckBillArray = BusinessDataServiceHelper.load("er_checkingbill", FinanceBillConfirmConstant.NCKD_SL_CONFRMID, new QFilter("id", QCP.in, allBillIdList).toArray());
+//        for(DynamicObject allCheckBill : allCheckBillArray){
+//            allCheckBill.set(FinanceBillConfirmConstant.NCKD_SL_CONFRMID, confirmBillId);
+//        }
+//        SaveServiceHelper.save(allCheckBillArray);
     }
     protected DynamicObjectCollection getSlOrderDataCol(){
 
@@ -784,9 +891,10 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
         DynamicObjectCollection tripReqBillCol = QueryServiceHelper.query(TripReqBillConstant.ENTITYID, String.join(",",TripReqBillConstant.ID,TripReqBillConstant.BILLNO), new QFilter[]{
                 // 状态为审核通过、已付款、关闭
                 new QFilter(TripReqBillConstant.KEY_BILLSTATUS, QFilter.in, Arrays.asList("E", "G", "I")),
-                new QFilter(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID, QFilter.equals, 0)
+                new QFilter(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID, QFilter.equals, 0L)
                         .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID)),
-                new QFilter(TripReqBillConstant.RENDDATE, QFilter.less_than, startDate),
+                QFilter.isNotNull(FinanceBillConfirmConstant.NCKD_SUP_CHECKID),
+                new QFilter(TripReqBillConstant.RENDDATE, QFilter.less_than, periodEndDate),
         },"createtime desc" );
         if(tripReqBillCol == null || tripReqBillCol.size() == 0){
             return ;
@@ -1038,7 +1146,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
         DynamicObject draftData = getDraftData(draftEntry, source, orderNum, startTime, endTime, from, to, amount);
         String sourceStatusValue = "";
         //国内火车
-        if("6".equals(orderType)){
+        if("6".equals(source)){
             switch (sourceStatus) {
                 case "1":
                     sourceStatusValue = "已出票";
@@ -1067,7 +1175,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             }
 
             //国内机票
-        }else if("2".equals(orderType)){
+        }else if("2".equals(source)){
             switch (sourceStatus) {
                 case "40000":
                     sourceStatusValue = "已出票";
@@ -1111,7 +1219,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             }
 
             //国内酒店
-        }else if("1".equals(orderType)){
+        }else if("1".equals(source)){
             switch (sourceStatus) {
                 case "1":
                     sourceStatusValue = "待审批";