lisheng 1 долоо хоног өмнө
parent
commit
4f90da8df6
12 өөрчлөгдсөн 1751 нэмэгдсэн , 321 устгасан
  1. 4 5
      code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/constant/travelcheck/BusTravelCheckBillConstant.java
  2. 449 102
      code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/constant/travelcheck/FinanceBillConfirmConstant.java
  3. 7 0
      code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/util/CommonUtils.java
  4. 71 0
      code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/common/CurApproveNodeListProvider.java
  5. 204 0
      code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/travelcheck/BusTravelCheckApproveEdit.java
  6. 7 103
      code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/travelcheck/BusTravelCheckBillEdit.java
  7. 36 0
      code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/travelcheck/BusTravelCheckBillList.java
  8. 3 3
      code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/travelcheck/BusTravelCommonEdit.java
  9. 100 0
      code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/travelcheck/BusTravelCheckBillOp.java
  10. 0 77
      code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/travelcheck/FinanDraftConfirmOp.java
  11. 245 0
      code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/travelcheck/FinanceBillConfirmOp.java
  12. 625 31
      code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/task/TravelFinanConfirmCreateTask.java

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

@@ -3,7 +3,8 @@ package nckd.jimin.jyyy.fi.common.constant.travelcheck;
 import nckd.jimin.jyyy.fi.common.constant.BillConstant;
 import nckd.jimin.jyyy.fi.common.constant.BillConstant;
 
 
 import java.util.Arrays;
 import java.util.Arrays;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
 
 
 /**
 /**
  * 商旅对账单常量类
  * 商旅对账单常量类
@@ -23,10 +24,8 @@ public interface BusTravelCheckBillConstant extends BillConstant {
 
 
     String NCKD_NCKD_SOURCEBILLID = "nckd_sourcebillid"; // 底稿确认单
     String NCKD_NCKD_SOURCEBILLID = "nckd_sourcebillid"; // 底稿确认单
 
 
-    List<String> BZ_EDITFIELD = Arrays.asList(NCKD_BZ_ENTRY.NCKD_BZ_SUPDAYS,NCKD_BZ_ENTRY.NCKD_BZ_SUMDAYS,NCKD_BZ_ENTRY.NCKD_BZ_ADJAMOUNT,NCKD_BZ_ENTRY.NCKD_BZ_CHECKAMT,
-            NCKD_BZ_ENTRY.NCKD_BZ_DESCRIBE,NCKD_BZ_ENTRY.NCKD_BZ_PAYERBANK,NCKD_BZ_ENTRY.NCKD_BZ_ACCOUNT);
-    List<String> SL_EDITFIELD = Arrays.asList(NCKD_SL_ENTRY.NCKD_SL_DESCRIBE);
-    List<String> YC_EDITFIELD = Arrays.asList(NCKD_YC_ENTRY.NCKD_YC_DESCRIBE);
+    Set COPY_IGNOREFILED = new HashSet<String>(Arrays.asList("id"));
+
 
 
     interface NCKD_BZ_SUPDATA{
     interface NCKD_BZ_SUPDATA{
 
 

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

@@ -2,6 +2,9 @@ package nckd.jimin.jyyy.fi.common.constant.travelcheck;
 
 
 import nckd.jimin.jyyy.fi.common.constant.BillConstant;
 import nckd.jimin.jyyy.fi.common.constant.BillConstant;
 
 
+import java.util.Arrays;
+import java.util.List;
+
 public interface FinanceBillConfirmConstant extends BillConstant {
 public interface FinanceBillConfirmConstant extends BillConstant {
     String ENTITYID = "nckd_finandraft_confirm";
     String ENTITYID = "nckd_finandraft_confirm";
     String ENTITYID_NCKD_BZ_FINANCONFIRM = "nckd_bz_financonfirm";
     String ENTITYID_NCKD_BZ_FINANCONFIRM = "nckd_bz_financonfirm";
@@ -10,6 +13,15 @@ public interface FinanceBillConfirmConstant extends BillConstant {
 
 
     String ENTITYID_NCKD_YC_FINANCONFIRM = "nckd_yc_financonfirm";
     String ENTITYID_NCKD_YC_FINANCONFIRM = "nckd_yc_financonfirm";
 
 
+    List<String> BZ_EDITFIELD = Arrays.asList(BusTravelCheckBillConstant.NCKD_BZ_ENTRY.NCKD_BZ_SUPDAYS, BusTravelCheckBillConstant.NCKD_BZ_ENTRY.NCKD_BZ_SUMDAYS, BusTravelCheckBillConstant.NCKD_BZ_ENTRY.NCKD_BZ_ADJAMOUNT, BusTravelCheckBillConstant.NCKD_BZ_ENTRY.NCKD_BZ_CHECKAMT,
+            BusTravelCheckBillConstant.NCKD_BZ_ENTRY.NCKD_BZ_DESCRIBE, BusTravelCheckBillConstant.NCKD_BZ_ENTRY.NCKD_BZ_PAYERBANK, BusTravelCheckBillConstant.NCKD_BZ_ENTRY.NCKD_BZ_ACCOUNT);
+    List<String> SL_EDITFIELD = Arrays.asList(BusTravelCheckBillConstant.NCKD_SL_ENTRY.NCKD_SL_DESCRIBE);
+    List<String> YC_EDITFIELD = Arrays.asList(BusTravelCheckBillConstant.NCKD_YC_ENTRY.NCKD_YC_DESCRIBE);
+
+
+
+
+
     /**
     /**
      * 对账期间
      * 对账期间
      */
      */
@@ -19,13 +31,25 @@ public interface FinanceBillConfirmConstant extends BillConstant {
      */
      */
     String NCKD_BZ_CONFRMID = "nckd_bz_confrmid";
     String NCKD_BZ_CONFRMID = "nckd_bz_confrmid";
     /**
     /**
-     * 商旅确认商旅费用D
+     * 商旅确认商旅费用ID
      */
      */
     String NCKD_SL_CONFRMID = "nckd_sl_confrmid";
     String NCKD_SL_CONFRMID = "nckd_sl_confrmid";
     /**
     /**
-     * 商旅确认用车D
+     * 商旅确认用车ID
      */
      */
     String NCKD_YC_CONFRMID = "nckd_yc_confrmid";
     String NCKD_YC_CONFRMID = "nckd_yc_confrmid";
+    /**
+     * 商旅确认超标ID
+     */
+    String NCKD_CB_FINANCONFIRM = "nckd_cb_financonfirm";
+    /**
+     * 商旅确认退改ID
+     */
+    String NCKD_TG_FINANCONFIRM = "nckd_tg_financonfirm";
+    /**
+     * 商旅确认住宿ID
+     */
+    String NCKD_ZS_FINANCONFIRM = "nckd_zs_financonfirm";
 
 
     /**
     /**
      * 下推商旅对账
      * 下推商旅对账
@@ -37,26 +61,83 @@ public interface FinanceBillConfirmConstant extends BillConstant {
     interface NCKD_BZ_ENTRY{
     interface NCKD_BZ_ENTRY{
 
 
         String ENTITYID = "nckd_bz_entry";
         String ENTITYID = "nckd_bz_entry";
-        String NCKD_BZ_DEPSECRETARY = "nckd_bz_depsecretary"; //部门秘书
-        String NCKD_BZ_COMPANY = "nckd_bz_company"; // 法人主体
-        String NCKD_BZ_TRAVELER = "nckd_bz_traveler"; // 出差人
-        String NCKD_BZ_TRAVELERNO = "nckd_bz_travlererno"; // 工号
-        String NCKD_BZ_SUMDAYS = "nckd_bz_sumdays"; // 出差天数合计
-        String NCKD_BZ_AMOUNT = "nckd_bz_amount"; // 补助金额
-        String NCKD_BZ_PAYERBANK = "nckd_bz_payerbank"; // 银行账号
-        String NCKD_BZ_ACCOUNT = "nckd_bz_account"; // 开户行
-        String NCKD_BZ_CHECKAMT = "nckd_bz_checkamt"; // 核定金额
-        String NCKD_BZ_DESCRIBE = "nckd_bz_describe"; // 部门反馈
-        String NCKD_BZ_DEPFULLNAME = "nckd_bz_depfullname"; // 部门名称
-        String NCKD_BZ_POST = "nckd_bz_post"; // 岗位
-        String NCKD_BZ_EXPBURNDEND = "nckd_bz_expburndend"; // 费用承担部门
-        String NCKD_BZ_EXPCOLL = "nckd_bz_expcoll"; // 费用归集说明
-        String NCKD_BZ_SUPDAYS = "nckd_bz_supdays"; // 补助未涵盖天数
-        String NCKD_BZ_TRAVELDAYS = "nckd_bz_traveldays"; // 出差天数
-        String NCKD_BZ_ADJAMOUNT = "nckd_bz_adjamount"; // 补助调整金额
-        String NCKD_BZ_FINOPINION = "nckd_bz_finopinion"; // 财务建议说明
-
-        String NCKD_BZ_FINANDRAFT = "nckd_bz_finandraft"; // 财务对账底稿
+        String  NCKD_BZ_SRCENTRYID = "nckd_bz_srcentryid";
+        /**
+         * 部门秘书
+         */
+        String NCKD_BZ_DEPSECRETARY = "nckd_bz_depsecretary";
+        /**
+         * 法人主体
+         */
+        String NCKD_BZ_COMPANY = "nckd_bz_company";
+        /**
+         * 出差人
+         */
+        String NCKD_BZ_TRAVELER = "nckd_bz_traveler";
+        /**
+         * 工号
+         */
+        String NCKD_BZ_TRAVELERNO = "nckd_bz_travlererno";
+        /**
+         * 出差天数合计
+         */
+        String NCKD_BZ_SUMDAYS = "nckd_bz_sumdays";
+        /**
+         * 补助金额
+         */
+        String NCKD_BZ_AMOUNT = "nckd_bz_amount";
+        /**
+         * 银行账号
+         */
+        String NCKD_BZ_PAYERBANK = "nckd_bz_payerbank";
+        /**
+         * 开户行
+         */
+        String NCKD_BZ_ACCOUNT = "nckd_bz_account";
+        /**
+         * 核定金额
+         */
+        String NCKD_BZ_CHECKAMT = "nckd_bz_checkamt";
+        /**
+         * 部门反馈
+         */
+        String NCKD_BZ_DESCRIBE = "nckd_bz_describe";
+        /**
+         * 部门名称
+         */
+        String NCKD_BZ_DEPFULLNAME = "nckd_bz_depfullname";
+        /**
+         * 岗位
+         */
+        String NCKD_BZ_POST = "nckd_bz_post";
+        /**
+         * 费用承担部门
+         */
+        String NCKD_BZ_EXPBURNDEND = "nckd_bz_expburndend";
+        /**
+         * 费用归集说明
+         */
+        String NCKD_BZ_EXPCOLL = "nckd_bz_expcoll";
+        /**
+         * 补助未涵盖天数
+         */
+        String NCKD_BZ_SUPDAYS = "nckd_bz_supdays";
+        /**
+         * 出差天数
+         */
+        String NCKD_BZ_TRAVELDAYS = "nckd_bz_traveldays";
+        /**
+         * 补助调整金额
+         */
+        String NCKD_BZ_ADJAMOUNT = "nckd_bz_adjamount";
+        /**
+         * 财务建议说明
+         */
+        String NCKD_BZ_FINOPINION = "nckd_bz_finopinion";
+        /**
+         * 财务对账底稿
+         */
+        String NCKD_BZ_FINANDRAFT = "nckd_bz_finandraft";
     }
     }
 
 
 
 
@@ -66,109 +147,375 @@ public interface FinanceBillConfirmConstant extends BillConstant {
     interface NCKD_SL_ENTRY {
     interface NCKD_SL_ENTRY {
 
 
         String ENTITYID = "nckd_sl_entry";
         String ENTITYID = "nckd_sl_entry";
-        String NCKD_SL_DEPSECRETARY = "nckd_sl_depsecretary"; //部门秘书
-        String NCKD_SL_TRAVELER = "nckd_sl_traveler"; // 出差人
-        String NCKD_SL_TRAVELERNO = "nckd_sl_travlererno"; // 工号
-        String NCKD_SL_PLANPAYAMT = "nckd_sl_planpayamt"; // 机票金额
-        String NCKD_SL_TRAINPAYAMT = "nckd_sl_trainpayamt"; // 火车金额
-        String NCKD_SL_HOTELPAYAMT = "nckd_sl_hotelpayamt"; // 酒店金额
-        String NCKD_SL_ORDERAMT = "nckd_sl_orderamt"; // 合计金额
-        String NCKD_SL_SERVER = "nckd_sl_server"; // 服务商
-        String NCKD_SL_COMPANY = "nckd_sl_company"; // 法人单位
-        String NCKD_SL_DEPFULLNAME = "nckd_sl_depfullname"; // 部门
-        String NCKD_SL_POST = "nckd_sl_post"; // 岗位
-        String NCKD_SL_EXPBURNDEND = "nckd_sl_expburndend"; // 费用承担部门
-        String NCKD_SL_EXPCOLL = "nckd_sl_expcoll"; // 费用归集说明
-        String NCKD_SL_FINOPINION = "nckd_sl_finopinion"; // 财务建议说明
+        String  NCKD_SL_SRCENTRYID = "nckd_sl_srcentryid";
+
+        /**
+         * 部门秘书
+         */
+        String NCKD_SL_DEPSECRETARY = "nckd_sl_depsecretary";
+        /**
+         * 出差人
+         */
+        String NCKD_SL_TRAVELER = "nckd_sl_traveler";
+        /**
+         * 工号
+         */
+        String NCKD_SL_TRAVELERNO = "nckd_sl_travlererno";
+        /**
+         * 机票金额
+         */
+        String NCKD_SL_PLANPAYAMT = "nckd_sl_planpayamt";
+
+        /**
+         * 机票服务费
+         */
+        String NCKD_SL_PLANSERVICEFEE = "nckd_sl_planservicefee";
+        /**
+         * 火车金额
+         */
+        String NCKD_SL_TRAINPAYAMT = "nckd_sl_trainpayamt";
+        /**
+         * 火车服务费
+         */
+        String NCKD_SL_TRAINSERVICEFEE = "nckd_sl_trainservicefee";
+        /**
+         * 酒店金额
+         */
+        String NCKD_SL_HOTELPAYAMT = "nckd_sl_hotelpayamt";
+        /**
+         * 酒店服务费
+         */
+        String NCKD_SL_HOTELSERVICEFEEJD = "nckd_sl_hotelservicefeejd";
+        /**
+         * 合计金额
+         */
+        String NCKD_SL_ORDERAMT = "nckd_sl_orderamt";
+        /**
+         * 服务商
+         */
+        String NCKD_SL_SERVER = "nckd_sl_server";
+        /**
+         * 法人单位
+         */
+        String NCKD_SL_COMPANY = "nckd_sl_company";
+        /**
+         * 部门
+         */
+        String NCKD_SL_DEPFULLNAME = "nckd_sl_depfullname";
+        /**
+         * 岗位
+         */
+        String NCKD_SL_POST = "nckd_sl_post";
+        /**
+         * 费用承担部门
+         */
+        String NCKD_SL_EXPBURNDEND = "nckd_sl_expburndend";
+        /**
+         * 费用归集说明
+         */
+        String NCKD_SL_EXPCOLL = "nckd_sl_expcoll";
+        /**
+         * 财务建议说明
+         */
+        String NCKD_SL_FINOPINION = "nckd_sl_finopinion";
     }
     }
 
 
     /**
     /**
      * 用车费用
      * 用车费用
      */
      */
     interface NCKD_YC_ENTRY {
     interface NCKD_YC_ENTRY {
-        String ENTITYID = "nckd_yc";
-        String NCKD_YC_DEPSECRETARY = "nckd_yc_depsecretary"; //部门秘书
-        String NCKD_YC_COMPANY = "nckd_yc_company"; // 法人单位
-        String NCKD_YC_TRAVELER = "nckd_yc_traveler"; // 出差人
-        String NCKD_YC_TRAVELERNO = "nckd_yc_travlererno"; // 工号
-        String NCKD_YC_DEPFULLNAME = "nckd_yc_depfullname"; // 部门
-        String NCKD_YC_POST = "nckd_yc_post"; // 岗位
-        String NCKD_YC_TYPE = "nckd_yc_type"; // 用车类型
-        String NCKD_YC_AMOUNT = "nckd_yc_amount"; // 用车金额
-        String NCKD_YC_DESCRIBE = "nckd_yc_describe"; // 部门反馈
-        String NCKD_YC_FINOPINION = "nckd_yc_finopinion"; // 财务建议说明
-        String NCKD_YC_EXPBURNDEND = "nckd_yc_expburndend"; // 费用承担部门
-        String NCKD_YC_EXPCOLL = "nckd_yc_expcoll"; // 费用归集说明
-        String NCKD_YC_RELATEDTALS = "nckd_yc_relatedtals"; // 联查明细
+        String ENTITYID = "nckd_yc_entry";
+
+        String  NCKD_YC_SRCENTRYID = "nckd_yc_srcentryid";
+
+        /**
+         * 部门秘书
+         */
+        String NCKD_YC_DEPSECRETARY = "nckd_yc_depsecretary";
+        /**
+         * 法人单位
+         */
+        String NCKD_YC_COMPANY = "nckd_yc_company";
+        /**
+         * 出差人
+         */
+        String NCKD_YC_TRAVELER = "nckd_yc_traveler";
+        /**
+         * 工号
+         */
+        String NCKD_YC_TRAVELERNO = "nckd_yc_travlererno";
+        /**
+         * 部门
+         */
+        String NCKD_YC_DEPFULLNAME = "nckd_yc_depfullname";
+        /**
+         * 岗位
+         */
+        String NCKD_YC_POST = "nckd_yc_post";
+        /**
+         * 用车类型
+         */
+        String NCKD_YC_TYPE = "nckd_yc_type";
+        /**
+         * 用车金额
+         */
+        String NCKD_YC_AMOUNT = "nckd_yc_amount";
+        /**
+         * 部门反馈
+         */
+        String NCKD_YC_DESCRIBE = "nckd_yc_describe";
+        /**
+         * 财务建议说明
+         */
+        String NCKD_YC_FINOPINION = "nckd_yc_finopinion";
+        /**
+         * 费用承担部门
+         */
+        String NCKD_YC_EXPBURNDEND = "nckd_yc_expburndend";
+        /**
+         * 费用归集说明
+         */
+        String NCKD_YC_EXPCOLL = "nckd_yc_expcoll";
+        /**
+         * 联查明细
+         */
+        String NCKD_YC_RELATEDTALS = "nckd_yc_relatedtals";
     }
     }
 
 
     /**
     /**
      * 超标明细
      * 超标明细
      */
      */
     interface NCKD_CB_ENTRY {
     interface NCKD_CB_ENTRY {
-        String ENTITYID = "nckd_cb";
-        String NCKD_CB_DEPSECRETARY = "nckd_cb_depsecretary"; //部门秘书
-        String NCKD_CB_COMPANY = "nckd_cb_company"; // 法人单位
-        String NCKD_CB_TRAVELER = "nckd_cb_traveler"; // 出差人
-        String NCKD_CB_TRAVELERNO = "nckd_cb_travlererno"; // 工号
-        String NCKD_CB_DEPFULLNAME = "nckd_cb_depfullname"; // 部门
-        String NCKD_CB_POST = "nckd_cb_post"; // 岗位
-        String NCKD_CB_TRIPREQBILLNO = "nckd_cb_tripreqbillno"; // 出差申请单号
-        String NCKD_CB_ORDERNUM = "nckd_cb_ordernum"; // 订单编号
-        String NCKD_CB_PARAMT = "nckd_cb_paramt"; // 订单金额
-        String NCKD_CB_TYPE = "nckd_cb_type"; // 超标类型
-        String NCKD_CB_STANDARD = "nckd_cb_standard"; // 标准
-        String NCKD_CB_EXCSTAMT = "nckd_cb_excstamt"; // 超标金额
-        String NCKD_CB_FIOPINION = "nckd_cb_fiopinion"; // 财务建议说明
-        String NCKD_CB_DESCRIBE = "nckd_cb_describe"; // 部门反馈
-        String NCKD_CB_OPINION = "nckd_cb_opinion"; // 最终结果
+        String ENTITYID = "nckd_cb_entry";
+
+        String  NCKD_CB_SRCENTRYID = "nckd_cb_srcentryid";
+
+        /**
+         * 部门秘书
+         */
+        String NCKD_CB_DEPSECRETARY = "nckd_cb_depsecretary";
+        /**
+         * 法人单位
+         */
+        String NCKD_CB_COMPANY = "nckd_cb_company";
+        /**
+         * 出差人
+         */
+        String NCKD_CB_TRAVELER = "nckd_cb_traveler";
+        /**
+         * 工号
+         */
+        String NCKD_CB_TRAVELERNO = "nckd_cb_travlererno";
+        /**
+         * 部门
+         */
+        String NCKD_CB_DEPFULLNAME = "nckd_cb_depfullname";
+        /**
+         * 岗位
+         */
+        String NCKD_CB_POST = "nckd_cb_post";
+        /**
+         * 出差申请单号
+         */
+        String NCKD_CB_TRIPREQBILLNO = "nckd_cb_tripreqbillno";
+        /**
+         * 订单编号
+         */
+        String NCKD_CB_ORDERBILLNO = "nckd_cb_orderbillno";
+        /**
+         * 订单金额
+         */
+        String NCKD_CB_ORDERAMT = "nckd_cb_orderamt";
+        /**
+         * 超标类型
+         */
+        String NCKD_CB_TYPE = "nckd_cb_type";
+        /**
+         * 标准
+         */
+        String NCKD_CB_STANDARD = "nckd_cb_standard";
+        /**
+         * 超标金额
+         */
+        String NCKD_CB_EXCSTAMT = "nckd_cb_excstamt";
+
+        String NCKD_CB_CITYNAME = "nckd_cb_cityname";
+        /**
+         * 折扣/座位/酒店
+         */
+        String NCKD_STANDARD_INFO = "nckd_standard_info";
+        /**
+         * 超标原因
+         */
+        String NCKD_OVERREASON = "nckd_overreason";
+        /**
+         * 财务建议说明
+         */
+        String NCKD_CB_FIOPINION = "nckd_cb_fiopinion";
+        /**
+         * 部门反馈
+         */
+        String NCKD_CB_DESCRIBE = "nckd_cb_describe";
+        /**
+         * 最终结果
+         */
+        String NCKD_CB_OPINION = "nckd_cb_opinion";
     }
     }
 
 
     /**
     /**
      * 退改明细
      * 退改明细
      */
      */
     interface NCKD_TG_ENTRY {
     interface NCKD_TG_ENTRY {
-        String ENTITYID = "nckd_tg";
-        String NCKD_TG_DEPSECRETARY = "nckd_tg_depsecretary"; //部门秘书
-        String NCKD_TG_ORDERTYPE = "nckd_tg_ordertype"; // 订单类型
-        String NCKD_TG_TYPE = "nckd_tg_type"; // 退改类型
-        String NCKD_TG_TRAVELER = "nckd_tg_traveler"; // 出差人
-        String NCKD_TG_DEPFULLNAME = "nckd_tg_depfullname"; // 部门
-        String NCKD_TG_POST = "nckd_tg_post"; // 岗位
-        String NCKD_TG_TRIPREQBILLNO = "nckd_tg_tripreqbillno"; // 出差申请单号
-        String NCKD_TG_ORDERNUM = "nckd_tg_ordernum"; // 订单编号
-        String NCKD_TG_HAPPENDDATE = "nckd_tg_happenddate"; // 账单生成时间
-        String NCKD_TG_DEPARTIME = "nckd_tg_departime"; // 出发时间
-        String NCKD_TG_TRIPCTY = "nckd_tg_tripcty"; // 出发地点
-        String NCKD_TG_UPGRADEAMT = "nckd_tg_upgradeamt"; // 升舱费
-        String NCKD_TG_MODIFYAMT = "nckd_tg_modifyamt"; // 退改金额
-        String NCKD_TG_SUMAMT = "nckd_tg_sumamt"; // 总额
-        String NCKD_TG_REASON = "nckd_tg_reason"; // 退改原因
-        String NCKD_TG_DESCRIBE = "nckd_tg_describe"; // 部门反馈
-        String NCKD_TG_OPINION = "nckd_tg_opinion"; // 财务建议说明
+        String ENTITYID = "nckd_tg_entry";
+
+        String  NCKD_TG_SRCENTRYID = "nckd_tg_srcentryid";
+
+        /**
+         * 部门秘书
+         */
+        String NCKD_TG_DEPSECRETARY = "nckd_tg_depsecretary";
+        /**
+         * 订单类型
+         */
+        String NCKD_TG_ORDERTYPE = "nckd_tg_ordertype";
+        /**
+         * 退改类型
+         */
+        String NCKD_TG_TYPE = "nckd_tg_type";
+        /**
+         * 出差人
+         */
+        String NCKD_TG_TRAVELER = "nckd_tg_traveler";
+        /**
+         * 部门
+         */
+        String NCKD_TG_DEPFULLNAME = "nckd_tg_depfullname";
+        /**
+         * 岗位
+         */
+        String NCKD_TG_POST = "nckd_tg_post";
+        /**
+         * 出差申请单号
+         */
+        String NCKD_TG_TRIPREQBILLNO = "nckd_tg_tripreqbillno";
+        /**
+         * 订单编号
+         */
+        String NCKD_TG_ORDERNUM = "nckd_tg_ordernum";
+        /**
+         * 账单生成时间
+         */
+        String NCKD_TG_HAPPENDDATE = "nckd_tg_happenddate";
+        /**
+         * 出发时间
+         */
+        String NCKD_TG_DEPARTIME = "nckd_tg_departime";
+        /**
+         * 出发地点
+         */
+        String NCKD_TG_TRIPCITY = "nckd_tg_tripcity";
+        /**
+         * 升舱费
+         */
+        String NCKD_TG_UPGRADEAMT = "nckd_tg_upgradeamt";
+        /**
+         * 退改金额
+         */
+        String NCKD_TG_MODIFYAMT = "nckd_tg_modifyamt";
+        /**
+         * 总额
+         */
+        String NCKD_TG_SUMAMT = "nckd_tg_sumamt";
+        /**
+         * 退改原因
+         */
+        String NCKD_TG_REASON = "nckd_tg_reason";
+        /**
+         * 部门反馈
+         */
+        String NCKD_TG_DESCRIBE = "nckd_tg_describe";
+        /**
+         * 财务建议说明
+         */
+        String NCKD_TG_OPINION = "nckd_tg_opinion";
     }
     }
 
 
     /**
     /**
      * 住宿明细
      * 住宿明细
      */
      */
     interface NCKD_ZS_ENTRY {
     interface NCKD_ZS_ENTRY {
-        String ENTITYID = "nckd_zs";
-        String NCKD_ZS_DEPSECRETARY = "nckd_zs_depsecretary"; //部门秘书
-        String NCKD_ZS_SOURCEBOOKEDID = "nckd_zs_sourcebookedid"; // 预订单
-        String NCKD_ZS_SOURCEBOOKEDNO = "nckd_zs_sourcebookedno"; // 预订单号
-        String NCKD_ZS_GENDER = "nckd_zs_gender"; // 性别
-        String NCKD_ZS_DEPFULLNAME = "nckd_zs_depfullname"; // 部门
-        String NCKD_ZS_POST = "nckd_zs_post"; // 岗位
-        String NCKD_ZS_CHECKINDATE = "nckd_zs_checkindate"; // 入住日期
-        String NCKD_ZS_CHECKOUTDATE = "nckd_zs_checkoutdate"; // 离店日期
-        String NCKD_ZS_CITYNAME = "nckd_zs_cityname"; // 酒店城市
-        String NCKD_ZS_HOTELNAME = "nckd_zs_hotelname"; // 酒店名称
-        String NCKD_ZS_ROOMTYPE = "nckd_zs_roomtype"; // 房型
-        String NCKD_ZS_LIVEDAYS = "nckd_zs_livedays"; // 入住天数
-        String NCKD_ZS_TOTALAMOUNT = "nckd_zs_totalamount"; // 总价
-        String NCKD_ZS_PERSONALFEE = "nckd_zs_personalfee"; // 超标承担金额
-        String NCKD_ZS_COHABIT = "nckd_zs_cohabit"; // 同住人员
-        String NCKD_ZS_DESCRIBE = "nckd_zs_describe"; // 部门反馈
-        String NCKD_ZS_FINOPINION = "nckd_zs_finopinion"; // 财务建议说明
+        String ENTITYID = "nckd_zs_entry";
+
+        String  NCKD_ZS_SRCENTRYID = "nckd_zs_srcentryid";
+
+        /**
+         * 部门秘书
+         */
+        String NCKD_ZS_DEPSECRETARY = "nckd_zs_depsecretary";
+        /**
+         * 预订单
+         */
+        String NCKD_ZS_SOURCEBOOKEDID = "nckd_zs_sourcebookedid";
+
+        /**
+         * 预订单号
+         */
+        String NCKD_ZS_ORDERNUM = "nckd_zs_ordernum";
+        /**
+         * 性别
+         */
+        String NCKD_ZS_GENDER = "nckd_zs_gender";
+        /**
+         * 部门
+         */
+        String NCKD_ZS_DEPFULLNAME = "nckd_zs_depfullname";
+        /**
+         * 岗位
+         */
+        String NCKD_ZS_POST = "nckd_zs_post";
+        /**
+         * 入住日期
+         */
+        String NCKD_ZS_CHECKINDATE = "nckd_zs_checkindate";
+        /**
+         * 离店日期
+         */
+        String NCKD_ZS_CHECKOUTDATE = "nckd_zs_checkoutdate";
+        /**
+         * 酒店城市
+         */
+        String NCKD_ZS_CITYNAME = "nckd_zs_cityname";
+        /**
+         * 酒店名称
+         */
+        String NCKD_ZS_HOTELNAME = "nckd_zs_hotelname";
+        /**
+         * 房型
+         */
+        String NCKD_ZS_ROOMTYPE = "nckd_zs_roomtype";
+        /**
+         * 入住天数
+         */
+        String NCKD_ZS_LIVEDAYS = "nckd_zs_livedays";
+        /**
+         * 总价
+         */
+        String NCKD_ZS_TOTALAMOUNT = "nckd_zs_totalamount";
+        /**
+         * 超标承担金额
+         */
+        String NCKD_ZS_PERSONALFEE = "nckd_zs_personalfee";
+        /**
+         * 同住人员
+         */
+        String NCKD_ZS_COHABIT = "nckd_zs_cohabit";
+        /**
+         * 部门反馈
+         */
+        String NCKD_ZS_DESCRIBE = "nckd_zs_describe";
+        /**
+         * 财务建议说明
+         */
+        String NCKD_ZS_FINOPINION = "nckd_zs_finopinion";
     }
     }
 }
 }

+ 7 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/util/CommonUtils.java

@@ -209,6 +209,13 @@ public class CommonUtils {
 
 
         return workDays;
         return workDays;
     }
     }
+    public static int getDays(Date startTime, Date endTime){
+        if(startTime != null && endTime != null){
+            long diffInMillis = endTime.getTime() - startTime.getTime();
+            return (int) (diffInMillis / (24 * 60 * 60 * 1000));
+        }
+        return 0;
+    }
 
 
     public static BigDecimal getBzAmount(){
     public static BigDecimal getBzAmount(){
         DynamicObject tripExpenseItem = QueryServiceHelper.queryOne("er_tripexpenseitem", "nckd_travelbzstd", new QFilter("longnumber", QCP.equals, "004").toArray());
         DynamicObject tripExpenseItem = QueryServiceHelper.queryOne("er_tripexpenseitem", "nckd_travelbzstd", new QFilter("longnumber", QCP.equals, "004").toArray());

+ 71 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/common/CurApproveNodeListProvider.java

@@ -0,0 +1,71 @@
+package nckd.jimin.jyyy.fi.plugin.form.common;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.logging.BizLog;
+import kd.bos.mvc.list.ListDataProvider;
+import kd.bos.servicehelper.workflow.WorkflowServiceHelper;
+import kd.bos.workflow.api.BizProcessStatus;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+public class CurApproveNodeListProvider extends ListDataProvider {
+    private static final String NCKD_CURAPPROVENODE = "nckd_curapprovenode";
+    @Override
+    public DynamicObjectCollection getData(int start, int limit) {
+        DynamicObjectCollection dataCol = super.getData(start, limit);
+
+        Set<String> billIdSet = dataCol.stream().map(dyx -> dyx.getString("id")).collect(Collectors.toSet());
+        Map<String, String> approveStepMap = getApproveStep(billIdSet);
+        for(DynamicObject data : dataCol){
+            String dataId = data.getString("id");
+            data.set(NCKD_CURAPPROVENODE,approveStepMap.getOrDefault(dataId, ""));
+        }
+        return dataCol;
+    }
+
+    public Map<String , String> getApproveStep(Set<String> billIdSet){
+        Map<String , String> approveStepMap = new HashMap<>();
+
+        Map<String, List<BizProcessStatus>> allProcessMap = WorkflowServiceHelper.getBizProcessStatus(billIdSet.toArray(new String[0]));
+        for(Map.Entry<String, List<BizProcessStatus>> dataRow : allProcessMap.entrySet()){
+            List<BizProcessStatus> node = dataRow.getValue();
+            int count = 0;
+            String nodeName = "";
+            StringBuilder participantName = new StringBuilder();
+            StringBuilder msg = new StringBuilder();
+            try {
+                for (BizProcessStatus e : node) {
+                    nodeName = e.getCurrentNodeName();
+                    String auditor = e.getParticipantName();
+                    e.getProcessStatus();
+                    if (auditor != null && !"".equals(auditor.trim())) {
+                        participantName.append(",");
+                        participantName.append(auditor);
+                        if (++count == 3) {
+                            participantName.append("...");
+                            break;
+                        }
+                        continue;
+                    }
+                }
+                if (!org.apache.commons.lang3.StringUtils.isBlank(nodeName)) {
+                    msg.append(nodeName);
+                    if (!org.apache.commons.lang3.StringUtils.isBlank(participantName)) {
+                        msg.append('/');
+                        msg.append(participantName.toString().replaceFirst(",", ""));
+                    }
+                }
+                approveStepMap.put(dataRow.getKey(),msg.toString());
+            }
+            catch (Exception e2) {
+                BizLog.log("ErWorkFlowFlexListForOtherPlugin>>>获取审批人出现异常: " + e2.getMessage());
+            }
+        }
+        return approveStepMap;
+    }
+}

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

@@ -0,0 +1,204 @@
+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.form.events.BeforeDoOperationEventArgs;
+import kd.bos.form.operate.FormOperate;
+import kd.bos.org.utils.DynamicObjectUtils;
+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 java.util.EventObject;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class BusTravelCheckApproveEdit extends AbstractBillPlugIn implements FinanceBillConfirmConstant {
+
+    @Override
+    public void beforeBindData(EventObject e) {
+        super.beforeBindData(e);
+        loadDataFromConfirmBill();
+
+    }
+
+    /**
+     * 从财务确认单上带出数据
+     */
+    protected void loadDataFromConfirmBill(){
+        long currUserId = RequestContext.get().getCurrUserId();
+        DynamicObject dataEntity = getModel().getDataEntity(true);
+        DynamicObjectCollection bzEntryCol = dataEntity.getDynamicObjectCollection(NCKD_BZ_ENTRY.ENTITYID);
+        bzEntryCol.removeIf(bzEntry -> bzEntry.getDynamicObject(NCKD_BZ_ENTRY.NCKD_BZ_TRAVELER).getLong(ID) != currUserId);
+
+        DynamicObjectCollection slEntryCol = dataEntity.getDynamicObjectCollection(NCKD_SL_ENTRY.ENTITYID);
+        slEntryCol.removeIf(slEntry -> slEntry.getDynamicObject(NCKD_SL_ENTRY.NCKD_SL_TRAVELER).getLong( ID) != currUserId);
+
+        DynamicObjectCollection ycEntryCol = dataEntity.getDynamicObjectCollection(NCKD_YC_ENTRY.ENTITYID);
+        ycEntryCol.removeIf(ycEntry -> ycEntry.getDynamicObject(NCKD_YC_ENTRY.NCKD_YC_TRAVELER).getLong( ID) != currUserId);
+
+        DynamicObjectCollection cbEntryCol = dataEntity.getDynamicObjectCollection(NCKD_CB_ENTRY.ENTITYID);
+        cbEntryCol.removeIf(cbEntry -> cbEntry.getDynamicObject(NCKD_CB_ENTRY.NCKD_CB_TRAVELER).getLong( ID) != currUserId);
+
+        DynamicObjectCollection tgEntryCol = dataEntity.getDynamicObjectCollection(NCKD_TG_ENTRY.ENTITYID);
+        tgEntryCol.removeIf(tgEntry -> tgEntry.getDynamicObject(NCKD_TG_ENTRY.NCKD_TG_TRAVELER).getLong( ID) != currUserId);
+
+        DynamicObjectCollection zsEntryCol = dataEntity.getDynamicObjectCollection(NCKD_ZS_ENTRY.ENTITYID);
+        zsEntryCol.removeIf(zsEntry -> zsEntry.getDynamicObject(NCKD_ZS_ENTRY.NCKD_ZS_SOURCEBOOKEDID).getLong( ID) != currUserId);
+
+    }
+    @Override
+    public void beforeDoOperation(BeforeDoOperationEventArgs args) {
+        super.beforeDoOperation(args);
+        FormOperate operate = (FormOperate)args.getSource();
+        String operateKey = operate.getOperateKey();
+        // 财务会审保存
+        if("approve_save".equals(operateKey)){
+            // 反写对账单
+            writeBackCheckBill();
+            // 反写确认单
+            writeBackConfirmBill();
+        }
+    }
+
+    protected void writeBackCheckBill(){
+        DynamicObject dataEntity = getModel().getDataEntity(true);
+        Object billId = dataEntity.getPkValue();
+        DynamicObject checkBillInfo = BusinessDataServiceHelper.loadSingle(billId, BusTravelCheckBillConstant.ENTITYID);
+        DynamicObjectCollection bzEntryCol = dataEntity.getDynamicObjectCollection(NCKD_BZ_ENTRY.ENTITYID);
+
+        Map<Long, DynamicObject> bzSrcEntryMap = bzEntryCol.stream().collect(Collectors.toMap(bzEntry -> bzEntry.getLong(ID), bzEntry -> bzEntry));
+        DynamicObjectCollection checkBzEntryCol = checkBillInfo.getDynamicObjectCollection(NCKD_BZ_ENTRY.ENTITYID);
+        for(DynamicObject checkBzEntry : checkBzEntryCol){
+            if(bzSrcEntryMap.containsKey(checkBzEntry.getLong(ID))){
+                DynamicObject bzEntryInfo = bzSrcEntryMap.get(checkBzEntry.getLong(ID));
+                DynamicObjectUtils.copy(bzEntryInfo, checkBzEntry,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);
+        for(DynamicObject checkSlEntry : checkSlEntryCol){
+            if(slSrcEntryMap.containsKey(checkSlEntry.getLong(ID))){
+                DynamicObject slEntryInfo = slSrcEntryMap.get(checkSlEntry.getPkValue());
+                DynamicObjectUtils.copy(slEntryInfo, checkSlEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection ycSrcEntryCol = dataEntity.getDynamicObjectCollection(NCKD_YC_ENTRY.ENTITYID);
+        Map<Long, DynamicObject> ycSrcEntryMap = ycSrcEntryCol.stream().collect(Collectors.toMap(ycEntry -> ycEntry.getLong(ID), ycEntry -> ycEntry));
+        DynamicObjectCollection checkYcEntryCol = checkBillInfo.getDynamicObjectCollection(NCKD_YC_ENTRY.ENTITYID);
+        for(DynamicObject checkYcEntry : checkYcEntryCol){
+            if(ycSrcEntryMap.containsKey(checkYcEntry.getLong(ID))){
+                DynamicObject ycEntryInfo = ycSrcEntryMap.get(checkYcEntry.getLong(ID));
+                DynamicObjectUtils.copy(ycEntryInfo, checkYcEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+
+        DynamicObjectCollection cbSrcEntryCol = dataEntity.getDynamicObjectCollection(NCKD_CB_ENTRY.ENTITYID);
+        Map<Long, DynamicObject> cbSrcEntryMap = cbSrcEntryCol.stream().collect(Collectors.toMap(cbEntry -> cbEntry.getLong(ID), cbEntry -> cbEntry));
+        DynamicObjectCollection checkCbEntryCol = checkBillInfo.getDynamicObjectCollection(NCKD_CB_ENTRY.ENTITYID);
+        for(DynamicObject checkCbEntry : checkCbEntryCol){
+            if(cbSrcEntryMap.containsKey(checkCbEntry.getLong(ID))){
+                DynamicObject cbEntryInfo = cbSrcEntryMap.get(checkCbEntry.getLong(ID));
+                DynamicObjectUtils.copy(cbEntryInfo, checkCbEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection tgSrcEntryCol = dataEntity.getDynamicObjectCollection(NCKD_TG_ENTRY.ENTITYID);
+        Map<Long, DynamicObject> tgSrcEntryMap = tgSrcEntryCol.stream().collect(Collectors.toMap(tgEntry -> tgEntry.getLong(ID), tgEntry -> tgEntry));
+        DynamicObjectCollection checkTgEntryCol = checkBillInfo.getDynamicObjectCollection(NCKD_TG_ENTRY.ENTITYID);
+        for(DynamicObject checkTgEntry : checkTgEntryCol){
+            if(tgSrcEntryMap.containsKey(checkTgEntry.getLong(ID))){
+                DynamicObject tgEntryInfo = tgSrcEntryMap.get(checkTgEntry.getLong(ID));
+                DynamicObjectUtils.copy(tgEntryInfo, checkTgEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection zsSrcEntryCol = dataEntity.getDynamicObjectCollection(NCKD_ZS_ENTRY.ENTITYID);
+        Map<Long, DynamicObject> zsSrcEntryMap = zsSrcEntryCol.stream().collect(Collectors.toMap(zsEntry -> zsEntry.getLong(ID), zsEntry -> zsEntry));
+        DynamicObjectCollection checkZsEntryCol = checkBillInfo.getDynamicObjectCollection(NCKD_ZS_ENTRY.ENTITYID);
+        for(DynamicObject checkZsEntry : checkZsEntryCol){
+            if(zsSrcEntryMap.containsKey(checkZsEntry.getLong(ID))){
+                DynamicObject zsEntryInfo = zsSrcEntryMap.get(checkZsEntry.getLong(ID));
+                DynamicObjectUtils.copy(zsEntryInfo, checkZsEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        SaveServiceHelper.save(new DynamicObject[]{ checkBillInfo});
+    }
+    protected void writeBackConfirmBill(){
+        DynamicObject dataEntity = getModel().getDataEntity(true);
+
+        long confirmBillId = dataEntity.getLong(BusTravelCheckBillConstant.NCKD_NCKD_SOURCEBILLID);
+        DynamicObject confirmBillInfo = BusinessDataServiceHelper.loadSingle(confirmBillId, FinanceBillConfirmConstant.ENTITYID);
+        DynamicObjectCollection bzEntryCol = dataEntity.getDynamicObjectCollection(NCKD_BZ_ENTRY.ENTITYID);
+
+        Map<Long, DynamicObject> bzSrcEntryMap = bzEntryCol.stream().collect(Collectors.toMap(bzEntry -> bzEntry.getLong(NCKD_BZ_ENTRY.NCKD_BZ_SRCENTRYID), bzEntry -> bzEntry));
+        DynamicObjectCollection confirmBzEntryCol = confirmBillInfo.getDynamicObjectCollection(NCKD_BZ_ENTRY.ENTITYID);
+        for(DynamicObject confirmBzEntry : confirmBzEntryCol){
+            if(bzSrcEntryMap.containsKey(confirmBzEntry.getLong(ID))){
+                DynamicObject bzEntryInfo = bzSrcEntryMap.get(confirmBzEntry.getLong(ID));
+                DynamicObjectUtils.copy(bzEntryInfo, confirmBzEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        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));
+        DynamicObjectCollection confirmSlEntryCol = confirmBillInfo.getDynamicObjectCollection(NCKD_SL_ENTRY.ENTITYID);
+        for(DynamicObject confirmSlEntry : confirmSlEntryCol){
+            if(slSrcEntryMap.containsKey(confirmSlEntry.getLong(ID))){
+                DynamicObject slEntryInfo = slSrcEntryMap.get(confirmSlEntry.getLong(ID));
+                DynamicObjectUtils.copy(slEntryInfo, confirmSlEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection ycSrcEntryCol = dataEntity.getDynamicObjectCollection(NCKD_YC_ENTRY.ENTITYID);
+        Map<Long, DynamicObject> ycSrcEntryMap = ycSrcEntryCol.stream().collect(Collectors.toMap(ycEntry -> ycEntry.getLong(NCKD_YC_ENTRY.NCKD_YC_SRCENTRYID), ycEntry -> ycEntry));
+        DynamicObjectCollection confirmYcEntryCol = confirmBillInfo.getDynamicObjectCollection(NCKD_YC_ENTRY.ENTITYID);
+        for(DynamicObject confirmYcEntry : confirmYcEntryCol){
+            if(ycSrcEntryMap.containsKey(confirmYcEntry.getLong(ID))){
+                DynamicObject ycEntryInfo = ycSrcEntryMap.get(confirmYcEntry.getLong(ID));
+                DynamicObjectUtils.copy(ycEntryInfo, confirmYcEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+
+        DynamicObjectCollection cbSrcEntryCol = dataEntity.getDynamicObjectCollection(NCKD_CB_ENTRY.ENTITYID);
+        Map<Long, DynamicObject> cbSrcEntryMap = cbSrcEntryCol.stream().collect(Collectors.toMap(cbEntry -> cbEntry.getLong(NCKD_CB_ENTRY.NCKD_CB_SRCENTRYID), cbEntry -> cbEntry));
+        DynamicObjectCollection confirmCbEntryCol = confirmBillInfo.getDynamicObjectCollection(NCKD_CB_ENTRY.ENTITYID);
+        for(DynamicObject confirmCbEntry : confirmCbEntryCol){
+            if(cbSrcEntryMap.containsKey(confirmCbEntry.getLong(ID))){
+                DynamicObject cbEntryInfo = cbSrcEntryMap.get(confirmCbEntry.getLong(ID));
+                DynamicObjectUtils.copy(cbEntryInfo, confirmCbEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection tgSrcEntryCol = dataEntity.getDynamicObjectCollection(NCKD_TG_ENTRY.ENTITYID);
+        Map<Long, DynamicObject> tgSrcEntryMap = tgSrcEntryCol.stream().collect(Collectors.toMap(tgEntry -> tgEntry.getLong(NCKD_TG_ENTRY.NCKD_TG_SRCENTRYID), tgEntry -> tgEntry));
+        DynamicObjectCollection confirmTgEntryCol = confirmBillInfo.getDynamicObjectCollection(NCKD_TG_ENTRY.ENTITYID);
+        for(DynamicObject confirmTgEntry : confirmTgEntryCol){
+            if(tgSrcEntryMap.containsKey(confirmTgEntry.getLong(ID))){
+                DynamicObject tgEntryInfo = tgSrcEntryMap.get(confirmTgEntry.getLong(ID));
+                DynamicObjectUtils.copy(tgEntryInfo, confirmTgEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection zsSrcEntryCol = dataEntity.getDynamicObjectCollection(NCKD_ZS_ENTRY.ENTITYID);
+        Map<Long, DynamicObject> zsSrcEntryMap = zsSrcEntryCol.stream().collect(Collectors.toMap(zsEntry -> zsEntry.getLong(NCKD_ZS_ENTRY.NCKD_ZS_SRCENTRYID), zsEntry -> zsEntry));
+        DynamicObjectCollection confirmZsEntryCol = confirmBillInfo.getDynamicObjectCollection(NCKD_ZS_ENTRY.ENTITYID);
+        for(DynamicObject confirmZsEntry : confirmZsEntryCol){
+            if(zsSrcEntryMap.containsKey(confirmZsEntry.getLong(ID))){
+                DynamicObject zsEntryInfo = zsSrcEntryMap.get(confirmZsEntry.getLong(ID));
+                DynamicObjectUtils.copy(zsEntryInfo, confirmZsEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        SaveServiceHelper.save(new DynamicObject[]{ confirmBillInfo});
+    }
+}

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

@@ -30,16 +30,10 @@ import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 import java.util.stream.IntStream;
 
 
 public class BusTravelCheckBillEdit extends AbstractBillPlugIn implements BusTravelCheckBillConstant {
 public class BusTravelCheckBillEdit extends AbstractBillPlugIn implements BusTravelCheckBillConstant {
-    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 
 
     @Override
     @Override
     public void beforeBindData(EventObject e) {
     public void beforeBindData(EventObject e) {
         super.beforeBindData(e);
         super.beforeBindData(e);
-        loadDataFromConfirmBill();
-
-        // 重新计算分录补助
-        int entryRowCount = getModel().getEntryRowCount(NCKD_BZ_SUPDATA.ENTITYID);
-        IntStream.range(0, entryRowCount).forEach(this::updateBzEntryFromUnCoveredData);
     }
     }
 
 
     @Override
     @Override
@@ -47,92 +41,8 @@ public class BusTravelCheckBillEdit extends AbstractBillPlugIn implements BusTra
         super.beforeDoOperation(args);
         super.beforeDoOperation(args);
         FormOperate operate = (FormOperate)args.getSource();
         FormOperate operate = (FormOperate)args.getSource();
         String operateKey = operate.getOperateKey();
         String operateKey = operate.getOperateKey();
-        if("save".equals(operateKey) || "submit".equals(operateKey)){
-            writeBackConfirmBill();
-        }
-
     }
     }
 
 
-    protected void writeBackConfirmBill(){
-        writeBackConfirmBillEntryData(NCKD_BZ_ENTRY.ENTITYID,NCKD_BZ_ENTRY.NCKD_BZ_INFO,FinanceBillConfirmConstant.ENTITYID_NCKD_BZ_FINANCONFIRM,BZ_EDITFIELD);
-        writeBackConfirmBillEntryData(NCKD_SL_ENTRY.ENTITYID,NCKD_SL_ENTRY.NCKD_SL_INFO,FinanceBillConfirmConstant.ENTITYID_NCKD_SL_FINANCONFIRM,SL_EDITFIELD);
-        writeBackConfirmBillEntryData(NCKD_YC_ENTRY.ENTITYID,NCKD_YC_ENTRY.NCKD_YC_INFO,FinanceBillConfirmConstant.ENTITYID_NCKD_YC_FINANCONFIRM,YC_EDITFIELD);
-    }
-
-    protected void writeBackConfirmBillEntryData(String entryName , String keyField , String sourceEntity, List<String> filedList){
-        DynamicObjectCollection entryEntity = this.getModel().getEntryEntity(entryName);
-        Map<Object, DynamicObject> keyFiledMap = entryEntity.stream().collect(Collectors.toMap(r -> r.getDynamicObject(keyField).getPkValue(), r -> r, (r1, r2) -> r2));
-        List<Object> entryIdList = entryEntity.stream().map(r -> r.getDynamicObject(keyField).getPkValue()).collect(Collectors.toList());
-        MainEntityType sourceEntityType = EntityMetadataCache.getDataEntityType(sourceEntity);
-        // 来源分录字段
-        DynamicObject[] entryDataArray = BusinessDataServiceHelper.load(entryIdList.toArray(), sourceEntityType);
-        // 当前分录字段
-        for(DynamicObject entryData : entryDataArray){
-            Object entryId = entryData.getPkValue();
-            if(keyFiledMap.containsKey(entryId)){
-                DynamicObject entryInfo = keyFiledMap.get(entryId);
-                for(String field : filedList){
-                    entryData.set(field, entryInfo.get(field));
-                }
-            }
-        }
-        SaveServiceHelper.save(entryDataArray);
-    }
-
-    /**
-     * 从财务确认单上带出数据
-     */
-    protected void loadDataFromConfirmBill(){
-        long currUserId = RequestContext.get().getCurrUserId();
-        DynamicObject dataEntity = getModel().getDataEntity();
-        DynamicObject depSecretary = dataEntity.getDynamicObject(BusTravelCheckBillConstant.NCKD_DEPSECRETARY);
-        long sourceBillId = dataEntity.getLong(BusTravelCheckBillConstant.NCKD_NCKD_SOURCEBILLID);
-        DynamicObject confirmBillInfo = BusinessDataServiceHelper.loadSingle(sourceBillId, FinanceBillConfirmConstant.ENTITYID);
-        // 如果是部门秘书,通过部门秘书过滤,如果不是部门秘书,通过出差人过滤
-        if(depSecretary == null || sourceBillId == 0L){
-            return;
-        }
-        QFilter filter = new QFilter(FinanceBillConfirmConstant.FID, QCP.equals, confirmBillInfo.getPkValue());
-        if(depSecretary.getPkValue().equals(currUserId)){
-            loadEntryData(NCKD_BZ_ENTRY.ENTITYID,NCKD_BZ_ENTRY.NCKD_BZ_INFO,FinanceBillConfirmConstant.ENTITYID_NCKD_BZ_FINANCONFIRM,
-                    new QFilter(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_DEPSECRETARY, QCP.equals, currUserId).and(filter),BZ_EDITFIELD);
-            loadEntryData(NCKD_SL_ENTRY.ENTITYID,NCKD_SL_ENTRY.NCKD_SL_INFO,FinanceBillConfirmConstant.ENTITYID_NCKD_SL_FINANCONFIRM,
-                    new QFilter(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_DEPSECRETARY, QCP.equals, currUserId).and( filter),SL_EDITFIELD);
-            loadEntryData(NCKD_YC_ENTRY.ENTITYID,NCKD_YC_ENTRY.NCKD_YC_INFO,FinanceBillConfirmConstant.ENTITYID_NCKD_YC_FINANCONFIRM,
-                    new QFilter(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_DEPSECRETARY, QCP.equals, currUserId).and( filter),YC_EDITFIELD);
-        }else{
-            loadEntryData(NCKD_BZ_ENTRY.ENTITYID,NCKD_BZ_ENTRY.NCKD_BZ_INFO,FinanceBillConfirmConstant.ENTITYID_NCKD_BZ_FINANCONFIRM,
-                    new QFilter(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_TRAVELER, QCP.equals, currUserId).and( filter),BZ_EDITFIELD);
-            loadEntryData(NCKD_SL_ENTRY.ENTITYID,NCKD_SL_ENTRY.NCKD_SL_INFO,FinanceBillConfirmConstant.ENTITYID_NCKD_SL_FINANCONFIRM,
-                    new QFilter(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_TRAVELER, QCP.equals, currUserId).and( filter),SL_EDITFIELD);
-            loadEntryData(NCKD_YC_ENTRY.ENTITYID,NCKD_YC_ENTRY.NCKD_YC_INFO,FinanceBillConfirmConstant.ENTITYID_NCKD_YC_FINANCONFIRM,
-                    new QFilter(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_TRAVELER, QCP.equals, currUserId).and( filter),YC_EDITFIELD);
-        }
-    }
-
-    protected void loadEntryData(String entryName , String keyField , String sourceEntity, QFilter filters , List<String> filedList){
-        // 查询ID
-        DynamicObjectCollection queryEntryData = QueryServiceHelper.query(sourceEntity, BillConstant.ID, filters.toArray());
-        if(queryEntryData == null || queryEntryData.size() == 0){
-            return ;
-        }
-        List<Long> entryIdList = queryEntryData.stream().map(r -> r.getLong(BillConstant.ID)).collect(Collectors.toList());
-        MainEntityType sourceEntityType = EntityMetadataCache.getDataEntityType(sourceEntity);
-        // 来源分录字段
-        DynamicObject[] entryDataArray = BusinessDataServiceHelper.load(entryIdList.toArray(), sourceEntityType);
-        // 当前分录字段
-        getModel().deleteEntryData(entryName);
-        getModel().batchCreateNewEntryRow(entryName, entryDataArray.length);
-        for(int i = 0; i < entryDataArray.length; i++){
-            DynamicObject entryData = entryDataArray[i];
-            getModel().setValue(keyField, entryData,i);
-            for(String field : filedList){
-                getModel().setValue(field, entryData.get( field),i);
-            }
-        }
-    }
-
-
     @Override
     @Override
     public void propertyChanged(PropertyChangedArgs e) {
     public void propertyChanged(PropertyChangedArgs e) {
         super.propertyChanged(e);
         super.propertyChanged(e);
@@ -211,11 +121,10 @@ public class BusTravelCheckBillEdit extends AbstractBillPlugIn implements BusTra
             getModel().setValue(NCKD_BZ_ENTRY.NCKD_BZ_SUPDAYS, this.getModel().getValue(NCKD_BZ_SUPDATA.NCKD_CHECKSUPDAYS,rowIndex) , updateRow);
             getModel().setValue(NCKD_BZ_ENTRY.NCKD_BZ_SUPDAYS, this.getModel().getValue(NCKD_BZ_SUPDATA.NCKD_CHECKSUPDAYS,rowIndex) , updateRow);
             getModel().setValue(NCKD_BZ_ENTRY.NCKD_BZ_ADJAMOUNT, this.getModel().getValue(NCKD_BZ_SUPDATA.NCKD_SUAPMT,rowIndex)  , updateRow);
             getModel().setValue(NCKD_BZ_ENTRY.NCKD_BZ_ADJAMOUNT, this.getModel().getValue(NCKD_BZ_SUPDATA.NCKD_SUAPMT,rowIndex)  , updateRow);
 
 
-            DynamicObject bzInfo = (DynamicObject)this.getModel().getValue(NCKD_BZ_ENTRY.NCKD_BZ_INFO,updateRow);
             //出差天数合计 = 出差天数 + 补助未涵盖天数
             //出差天数合计 = 出差天数 + 补助未涵盖天数
-            Integer sumDays = bzInfo.getInt(NCKD_BZ_ENTRY.NCKD_BZ_TRAVELDAYS) + (Integer)getModel().getValue(NCKD_BZ_ENTRY.NCKD_BZ_SUPDAYS,updateRow);
+            Integer sumDays = (Integer)getModel().getValue(NCKD_BZ_ENTRY.NCKD_BZ_TRAVELDAYS,updateRow) + (Integer)getModel().getValue(NCKD_BZ_ENTRY.NCKD_BZ_SUPDAYS,updateRow);
             getModel().setValue(NCKD_BZ_ENTRY.NCKD_BZ_SUMDAYS, sumDays, updateRow);
             getModel().setValue(NCKD_BZ_ENTRY.NCKD_BZ_SUMDAYS, sumDays, updateRow);
-            BigDecimal sumAmount = CommonUtils.add(bzInfo.getBigDecimal(NCKD_BZ_ENTRY.NCKD_BZ_AMOUNT),(BigDecimal)getModel().getValue(NCKD_BZ_ENTRY.NCKD_BZ_ADJAMOUNT,updateRow));
+            BigDecimal sumAmount = CommonUtils.add((BigDecimal)getModel().getValue(NCKD_BZ_ENTRY.NCKD_BZ_AMOUNT,updateRow),(BigDecimal)getModel().getValue(NCKD_BZ_ENTRY.NCKD_BZ_ADJAMOUNT,updateRow));
             getModel().setValue(NCKD_BZ_ENTRY.NCKD_BZ_CHECKAMT, sumAmount, updateRow);
             getModel().setValue(NCKD_BZ_ENTRY.NCKD_BZ_CHECKAMT, sumAmount, updateRow);
         }
         }
     }
     }
@@ -223,18 +132,13 @@ public class BusTravelCheckBillEdit extends AbstractBillPlugIn implements BusTra
     protected int getApplierBzEntryRow(Long applierId){
     protected int getApplierBzEntryRow(Long applierId){
         int entryRowCount = this.getModel().getEntryRowCount(NCKD_BZ_ENTRY.ENTITYID);
         int entryRowCount = this.getModel().getEntryRowCount(NCKD_BZ_ENTRY.ENTITYID);
         for(int i = 0 ; i < entryRowCount ; i++){
         for(int i = 0 ; i < entryRowCount ; i++){
-            DynamicObject bzInfo = (DynamicObject) getModel().getValue(NCKD_BZ_ENTRY.NCKD_BZ_INFO, i);
-            if(bzInfo != null){
-                DynamicObject traverInfo = bzInfo.getDynamicObject(NCKD_BZ_ENTRY.NCKD_BZ_TRAVELER);
-                // 通过出差人查询对应的补助分录
-                if(traverInfo != null
-                        && traverInfo.getLong(ID) == applierId){
-                    return i;
-                }
+            DynamicObject traverInfo = (DynamicObject)getModel().getValue(NCKD_BZ_ENTRY.NCKD_BZ_TRAVELER, i);
+            // 通过出差人查询对应的补助分录
+            if(traverInfo != null
+                    && traverInfo.getLong(ID) == applierId){
+                return i;
             }
             }
         }
         }
         return -1;
         return -1;
     }
     }
-
-
 }
 }

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

@@ -0,0 +1,36 @@
+package nckd.jimin.jyyy.fi.plugin.form.travelcheck;
+
+import kd.bos.entity.datamodel.ListSelectedRow;
+import kd.bos.form.events.BeforeCreateListDataProviderArgs;
+import kd.bos.form.events.HyperLinkClickArgs;
+import kd.bos.list.BillList;
+import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.servicehelper.workflow.WorkflowServiceHelper;
+import kd.sdk.plugin.Plugin;
+import nckd.jimin.jyyy.fi.plugin.form.common.CurApproveNodeListProvider;
+
+/**
+ * 标准单据列表插件
+ */
+public class BusTravelCheckBillList extends AbstractListPlugin implements Plugin {
+    @Override
+    public void beforeCreateListDataProvider(BeforeCreateListDataProviderArgs args) {
+        super.beforeCreateListDataProvider(args);
+        args.setListDataProvider(new CurApproveNodeListProvider());
+    }
+
+
+    @Override
+    public void billListHyperLinkClick(HyperLinkClickArgs args) {
+        super.billListHyperLinkClick(args);
+        String fieldName = args.getFieldName();
+        BillList billList = (BillList) args.getHyperLinkClickEvent().getSource();
+        ListSelectedRow selectedRow = billList.getCurrentSelectedRowInfo();
+        if("curapprovenode".equals(fieldName)){
+            if(selectedRow != null){
+                // 打开单据
+                WorkflowServiceHelper.viewFlowchart(getView().getPageId(), selectedRow.getPrimaryKeyValue());
+            }
+        }
+    }
+}

+ 3 - 3
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/travelcheck/BusTravelCommonEdit.java

@@ -25,13 +25,13 @@ public class BusTravelCommonEdit extends AbstractFormPlugin implements FinanceBi
     @Override
     @Override
     public void registerListener(EventObject e) {
     public void registerListener(EventObject e) {
         super.registerListener(e);
         super.registerListener(e);
-        EntryGrid bzEntryGrid = this.getControl(BusTravelCheckBillConstant.NCKD_BZ_ENTRY.ENTITYID);
+        EntryGrid bzEntryGrid = this.getControl(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.ENTITYID);
         bzEntryGrid.addHyperClickListener(this);
         bzEntryGrid.addHyperClickListener(this);
 
 
-        EntryGrid slEntryGrid = this.getControl(BusTravelCheckBillConstant.NCKD_SL_ENTRY.ENTITYID);
+        EntryGrid slEntryGrid = this.getControl(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID);
         slEntryGrid.addHyperClickListener(this);
         slEntryGrid.addHyperClickListener(this);
 
 
-        EntryGrid ycEntryGrid = this.getControl(BusTravelCheckBillConstant.NCKD_YC_ENTRY.ENTITYID);
+        EntryGrid ycEntryGrid = this.getControl(FinanceBillConfirmConstant.NCKD_YC_ENTRY.ENTITYID);
         ycEntryGrid.addHyperClickListener(this);
         ycEntryGrid.addHyperClickListener(this);
     }
     }
 
 

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

@@ -0,0 +1,100 @@
+package nckd.jimin.jyyy.fi.plugin.operate.travelcheck;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+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.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 java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class BusTravelCheckBillOp extends AbstractOperationServicePlugIn {
+
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        super.beginOperationTransaction(e);
+        String operationKey = e.getOperationKey();
+        DynamicObject[] dataEntities = e.getDataEntities();
+        List<Object> idList = Arrays.stream(dataEntities).map(r -> r.getPkValue()).collect(Collectors.toList());
+        DynamicObject[] dataArray = BusinessDataServiceHelper.load(idList.toArray(), EntityMetadataCache.getDataEntityType(BusTravelCheckBillConstant.ENTITYID));
+        if("audit".equals(operationKey)){
+            Arrays.stream(dataArray).forEach(dataEntity -> writeBackConfirmBill(dataEntity));
+        }
+    }
+
+    protected void writeBackConfirmBill(DynamicObject dataEntity){
+
+        long confirmBillId = dataEntity.getLong(BusTravelCheckBillConstant.NCKD_NCKD_SOURCEBILLID);
+        DynamicObject confirmBillInfo = BusinessDataServiceHelper.loadSingle(confirmBillId, FinanceBillConfirmConstant.ENTITYID);
+        DynamicObjectCollection bzEntryCol = dataEntity.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.ENTITYID);
+
+        Map<Long, DynamicObject> bzSrcEntryMap = bzEntryCol.stream().collect(Collectors.toMap(bzEntry -> bzEntry.getLong(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_SRCENTRYID), bzEntry -> bzEntry));
+        DynamicObjectCollection confirmBzEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.ENTITYID);
+        for(DynamicObject confirmBzEntry : confirmBzEntryCol){
+            if(bzSrcEntryMap.containsKey(confirmBzEntry.getPkValue())){
+                DynamicObject bzEntryInfo = bzSrcEntryMap.get(confirmBzEntry.getPkValue());
+                DynamicObjectUtils.copy(bzEntryInfo, confirmBzEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection slSrcEntryCol = dataEntity.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID);
+        Map<Long, DynamicObject> slSrcEntryMap = slSrcEntryCol.stream().collect(Collectors.toMap(slEntry -> slEntry.getLong(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_SRCENTRYID), slEntry -> slEntry));
+        DynamicObjectCollection confirmSlEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID);
+        for(DynamicObject confirmSlEntry : confirmSlEntryCol){
+            if(slSrcEntryMap.containsKey(confirmSlEntry.getPkValue())){
+                DynamicObject slEntryInfo = slSrcEntryMap.get(confirmSlEntry.getPkValue());
+                DynamicObjectUtils.copy(slEntryInfo, confirmSlEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection ycSrcEntryCol = dataEntity.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_YC_ENTRY.ENTITYID);
+        Map<Long, DynamicObject> ycSrcEntryMap = ycSrcEntryCol.stream().collect(Collectors.toMap(ycEntry -> ycEntry.getLong(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_SRCENTRYID), ycEntry -> ycEntry));
+        DynamicObjectCollection confirmYcEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_YC_ENTRY.ENTITYID);
+        for(DynamicObject confirmYcEntry : confirmYcEntryCol){
+            if(ycSrcEntryMap.containsKey(confirmYcEntry.getPkValue())){
+                DynamicObject ycEntryInfo = ycSrcEntryMap.get(confirmYcEntry.getPkValue());
+                DynamicObjectUtils.copy(ycEntryInfo, confirmYcEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+
+        DynamicObjectCollection cbSrcEntryCol = dataEntity.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_CB_ENTRY.ENTITYID);
+        Map<Long, DynamicObject> cbSrcEntryMap = cbSrcEntryCol.stream().collect(Collectors.toMap(cbEntry -> cbEntry.getLong(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_SRCENTRYID), cbEntry -> cbEntry));
+        DynamicObjectCollection confirmCbEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_CB_ENTRY.ENTITYID);
+        for(DynamicObject confirmCbEntry : confirmCbEntryCol){
+            if(cbSrcEntryMap.containsKey(confirmCbEntry.getPkValue())){
+                DynamicObject cbEntryInfo = cbSrcEntryMap.get(confirmCbEntry.getPkValue());
+                DynamicObjectUtils.copy(cbEntryInfo, confirmCbEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection tgSrcEntryCol = dataEntity.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_TG_ENTRY.ENTITYID);
+        Map<Long, DynamicObject> tgSrcEntryMap = tgSrcEntryCol.stream().collect(Collectors.toMap(tgEntry -> tgEntry.getLong(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_SRCENTRYID), tgEntry -> tgEntry));
+        DynamicObjectCollection confirmTgEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_TG_ENTRY.ENTITYID);
+        for(DynamicObject confirmTgEntry : confirmTgEntryCol){
+            if(tgSrcEntryMap.containsKey(confirmTgEntry.getPkValue())){
+                DynamicObject tgEntryInfo = tgSrcEntryMap.get(confirmTgEntry.getPkValue());
+                DynamicObjectUtils.copy(tgEntryInfo, confirmTgEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection zsSrcEntryCol = dataEntity.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.ENTITYID);
+        Map<Long, DynamicObject> zsSrcEntryMap = zsSrcEntryCol.stream().collect(Collectors.toMap(zsEntry -> zsEntry.getLong(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_SRCENTRYID), zsEntry -> zsEntry));
+        DynamicObjectCollection confirmZsEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.ENTITYID);
+        for(DynamicObject confirmZsEntry : confirmZsEntryCol){
+            if(zsSrcEntryMap.containsKey(confirmZsEntry.getPkValue())){
+                DynamicObject zsEntryInfo = zsSrcEntryMap.get(confirmZsEntry.getPkValue());
+                DynamicObjectUtils.copy(zsEntryInfo, confirmZsEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+        SaveServiceHelper.save(new DynamicObject[]{ confirmBillInfo});
+    }
+}

+ 0 - 77
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/travelcheck/FinanDraftConfirmOp.java

@@ -1,77 +0,0 @@
-package nckd.jimin.jyyy.fi.plugin.operate.travelcheck;
-
-import kd.bos.dataentity.entity.DynamicObject;
-import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
-import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
-import kd.bos.logging.Log;
-import kd.bos.logging.LogFactory;
-import kd.bos.orm.ORM;
-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 java.util.Arrays;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-public class FinanDraftConfirmOp extends AbstractOperationServicePlugIn {
-
-    private static final Log logger = LogFactory.getLog(FinanDraftConfirmOp.class);
-
-    @Override
-    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
-        super.beginOperationTransaction(e);
-        String operationKey = e.getOperationKey();
-        if(FinanceBillConfirmConstant.OP_PUSHCHECKBILL.equals(operationKey)){
-            DynamicObject[] dataEntities = e.getDataEntities();
-            Arrays.stream(dataEntities).forEach(r -> createBusTravelCheckBill(r));
-        }
-    }
-
-    protected void createBusTravelCheckBill(DynamicObject confirmBillInfo){
-        // 根据部门秘书创建商旅对账单
-        confirmBillInfo = BusinessDataServiceHelper.loadSingle(confirmBillInfo.getPkValue(),confirmBillInfo.getDynamicObjectType().getName());
-
-
-        // 补助部门秘书
-        Set<Long> bzDepSecretaryIds = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.ENTITYID).stream()
-                .filter(r -> r.getDynamicObject(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_DEPSECRETARY) != null)
-                .map(r -> r.getDynamicObject(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_DEPSECRETARY).getLong(FinanceBillConfirmConstant.ID))
-                .collect(Collectors.toSet());
-        Set<Long> slDepSecretaryIds = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID).stream()
-                .filter(r -> r.getDynamicObject(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_DEPSECRETARY) != null)
-                .map(r -> r.getDynamicObject(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_DEPSECRETARY).getLong(FinanceBillConfirmConstant.ID))
-                .collect(Collectors.toSet());
-        Set<Long> ycDepSecretaryIds = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_YC_ENTRY.ENTITYID).stream()
-                .filter(r -> r.getDynamicObject(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_DEPSECRETARY) != null)
-                .map(r -> r.getDynamicObject(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_DEPSECRETARY).getLong(FinanceBillConfirmConstant.ID))
-                .collect(Collectors.toSet());
-        bzDepSecretaryIds.addAll(slDepSecretaryIds);
-        bzDepSecretaryIds.addAll(ycDepSecretaryIds);
-
-        String checkMonth = confirmBillInfo.getString(FinanceBillConfirmConstant.NCKD_CHECKMONTH);
-        long confirmBillId = confirmBillInfo.getLong(FinanceBillConfirmConstant.ID);
-        bzDepSecretaryIds.forEach(r -> createCheckBill(r, checkMonth,confirmBillId));
-    }
-
-    protected void createCheckBill(Long secretaryId, String checkMonth , Long confrimBillId){
-        // 查询是否存在
-        QFilter qFilter = new QFilter(BusTravelCheckBillConstant.NCKD_NCKD_SOURCEBILLID, QCP.equals,confrimBillId);
-        qFilter.and(BusTravelCheckBillConstant.NCKD_DEPSECRETARY, QCP.equals, secretaryId);
-        if(ORM.create().exists(BusTravelCheckBillConstant.ENTITYID, qFilter.toArray())){
-            logger.info("部门秘书【{}}】已存在商旅对账单【{}}】", secretaryId, checkMonth);
-            return;
-        }
-
-        // 创建
-        DynamicObject busCheckBill = BusinessDataServiceHelper.newDynamicObject(BusTravelCheckBillConstant.ENTITYID);
-        busCheckBill.set(BusTravelCheckBillConstant.NCKD_DEPSECRETARY, secretaryId);
-        busCheckBill.set(BusTravelCheckBillConstant.NCKD_CHECKMONTH, checkMonth);
-        busCheckBill.set(BusTravelCheckBillConstant.NCKD_NCKD_SOURCEBILLID, confrimBillId);
-        busCheckBill.set(BusTravelCheckBillConstant.KEY_BILLSTATUS,"A");
-        SaveServiceHelper.save(new DynamicObject[]{ busCheckBill});
-    }
-}

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

@@ -0,0 +1,245 @@
+package nckd.jimin.jyyy.fi.plugin.operate.travelcheck;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.bos.org.utils.DynamicObjectUtils;
+import kd.bos.orm.ORM;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.coderule.CodeRuleServiceHelper;
+import kd.bos.servicehelper.operation.DeleteServiceHelper;
+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.TravelFinanDraftConstant;
+import nckd.jimin.jyyy.fi.common.constant.travelcheck.TripReqBillConstant;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+public class FinanceBillConfirmOp extends AbstractOperationServicePlugIn {
+
+    private static final Log logger = LogFactory.getLog(FinanceBillConfirmOp.class);
+
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        super.beginOperationTransaction(e);
+        String operationKey = e.getOperationKey();
+        DynamicObject[] dataEntities = e.getDataEntities();
+        if(FinanceBillConfirmConstant.OP_PUSHCHECKBILL.equals(operationKey)){
+            Arrays.stream(dataEntities).forEach(r -> createBusTravelCheckBill(r));
+        }
+        if("delete".equals(operationKey)){
+            Arrays.stream(dataEntities).forEach(r -> clearBillFlag(r));
+        }
+    }
+
+    protected void clearBillFlag(DynamicObject confirmBillInfo){
+        Object confirmBillId = confirmBillInfo.getPkValue();
+        // 删除商旅对账底稿
+        DeleteServiceHelper.delete(TravelFinanDraftConstant.ENTITYID, new QFilter[]{
+            new QFilter(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID, QCP.equals, confirmBillId)
+        });
+
+        // 清除出差申请
+        DynamicObject[] tripReqBillArray = BusinessDataServiceHelper.load(TripReqBillConstant.ENTITYID, FinanceBillConfirmConstant.NCKD_BZ_CONFRMID, new QFilter[]{
+                new QFilter(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID, QCP.equals, confirmBillId)
+        });
+        Arrays.stream(tripReqBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID, 0));
+        SaveServiceHelper.save(tripReqBillArray);
+
+        // 商旅费用
+        DynamicObject[] slAllCheckingBillArray = BusinessDataServiceHelper.load("er_allcheckingbill", FinanceBillConfirmConstant.NCKD_SL_CONFRMID, new QFilter[]{
+                new QFilter(FinanceBillConfirmConstant.NCKD_SL_CONFRMID, QCP.equals, confirmBillId)
+        });
+        Arrays.stream(slAllCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_SL_CONFRMID, 0));
+        SaveServiceHelper.save(slAllCheckingBillArray);
+
+        // 用车
+        DynamicObject[] ycVehicelCheckBillArray = BusinessDataServiceHelper.load("er_vehiclecheckingbill", FinanceBillConfirmConstant.NCKD_YC_CONFRMID, new QFilter[]{
+                new QFilter(FinanceBillConfirmConstant.NCKD_YC_CONFRMID, QCP.equals, confirmBillId)
+        });
+        Arrays.stream(ycVehicelCheckBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_YC_CONFRMID, 0));
+        SaveServiceHelper.save(ycVehicelCheckBillArray);
+
+        // 超标
+        DynamicObject[] cbHotelCheckingBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, new QFilter[]{
+                new QFilter(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, QCP.equals, confirmBillId)
+        });
+        Arrays.stream(cbHotelCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, 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)
+        });
+        Arrays.stream(cbPlaneCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, 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)
+        });
+        Arrays.stream(cbTrainCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, 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)
+        });
+        Arrays.stream(cbVehicleCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, 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)
+        });
+        Arrays.stream(tgHotelCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, 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)
+        });
+        Arrays.stream(tgPlaneCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, 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)
+        });
+        Arrays.stream(tgTrainCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, 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)
+        });
+        Arrays.stream(zhHotelCheckingBillArray).forEach(r -> r.set(FinanceBillConfirmConstant.NCKD_ZS_FINANCONFIRM, 0));
+        SaveServiceHelper.save(zhHotelCheckingBillArray);
+    }
+
+    protected void createBusTravelCheckBill(DynamicObject confirmBillInfo){
+        // 根据部门秘书创建商旅对账单
+        confirmBillInfo = BusinessDataServiceHelper.loadSingle(confirmBillInfo.getPkValue(),confirmBillInfo.getDynamicObjectType().getName());
+        Set<Long> allDepSecretaryIds = new HashSet<>();
+        // 补助部门秘书
+        confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.ENTITYID).stream()
+                .filter(r -> r.getDynamicObject(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_DEPSECRETARY) != null)
+                .forEach(r -> allDepSecretaryIds.add(r.getDynamicObject(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_DEPSECRETARY).getLong(FinanceBillConfirmConstant.ID)));
+
+        confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID).stream()
+                .filter(r -> r.getDynamicObject(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_DEPSECRETARY) != null)
+                .forEach(r -> allDepSecretaryIds.add(r.getDynamicObject(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_DEPSECRETARY).getLong(FinanceBillConfirmConstant.ID)));
+
+        confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_YC_ENTRY.ENTITYID).stream()
+                .filter(r -> r.getDynamicObject(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_DEPSECRETARY) != null)
+                .forEach(r -> allDepSecretaryIds.add(r.getDynamicObject(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_DEPSECRETARY).getLong(FinanceBillConfirmConstant.ID)));
+
+        confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_CB_ENTRY.ENTITYID).stream()
+                .filter(r -> r.getDynamicObject(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_DEPSECRETARY) != null)
+                .forEach(r -> allDepSecretaryIds.add(r.getDynamicObject(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_DEPSECRETARY).getLong(FinanceBillConfirmConstant.ID)));
+
+        confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_TG_ENTRY.ENTITYID).stream()
+                .filter(r -> r.getDynamicObject(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_DEPSECRETARY) != null)
+                .forEach(r -> allDepSecretaryIds.add(r.getDynamicObject(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_DEPSECRETARY).getLong(FinanceBillConfirmConstant.ID)));
+
+        confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.ENTITYID).stream()
+                .filter(r -> r.getDynamicObject(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_DEPSECRETARY) != null)
+                .forEach(r -> allDepSecretaryIds.add(r.getDynamicObject(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_DEPSECRETARY).getLong(FinanceBillConfirmConstant.ID)));
+
+        String checkMonth = confirmBillInfo.getString(FinanceBillConfirmConstant.NCKD_CHECKMONTH);
+        DynamicObject confirmBill = confirmBillInfo;
+        allDepSecretaryIds.forEach(r -> createCheckBill(r, checkMonth,confirmBill));
+    }
+
+    protected void createCheckBill(Long secretaryId, String checkMonth , DynamicObject confirmBillInfo){
+        long confirmBillId = confirmBillInfo.getLong(FinanceBillConfirmConstant.ID);
+        // 查询是否存在
+        QFilter qFilter = new QFilter(BusTravelCheckBillConstant.NCKD_NCKD_SOURCEBILLID, QCP.equals,confirmBillId);
+        qFilter.and(BusTravelCheckBillConstant.NCKD_DEPSECRETARY, QCP.equals, secretaryId);
+        if(ORM.create().exists(BusTravelCheckBillConstant.ENTITYID, qFilter.toArray())){
+            logger.info("部门秘书【{}}】已存在商旅对账单【{}}】", secretaryId, checkMonth);
+            return;
+        }
+
+        // 创建
+        DynamicObject busCheckBill = BusinessDataServiceHelper.newDynamicObject(BusTravelCheckBillConstant.ENTITYID);
+
+        String number = CodeRuleServiceHelper.getNumber(BusTravelCheckBillConstant.ENTITYID, busCheckBill, null);
+        busCheckBill.set(BusTravelCheckBillConstant.KEY_BILLNO, number);
+        busCheckBill.set(BusTravelCheckBillConstant.NCKD_DEPSECRETARY, secretaryId);
+        busCheckBill.set(BusTravelCheckBillConstant.NCKD_CHECKMONTH, checkMonth);
+        busCheckBill.set(BusTravelCheckBillConstant.NCKD_NCKD_SOURCEBILLID, confirmBillId);
+        busCheckBill.set(BusTravelCheckBillConstant.KEY_BILLSTATUS,"A");
+
+        DynamicObjectCollection checkBzEntryCol = busCheckBill.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.ENTITYID);
+        DynamicObjectCollection confirmBzEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.ENTITYID);
+        for(DynamicObject confirmBzEntry : confirmBzEntryCol){
+            DynamicObject depSecretary = confirmBzEntry.getDynamicObject(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_DEPSECRETARY);
+            if(depSecretary != null && depSecretary.getLong(FinanceBillConfirmConstant.ID) == secretaryId){
+                DynamicObject checkEntry = checkBzEntryCol.addNew();
+                checkEntry.set(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_SRCENTRYID, confirmBzEntry.getPkValue());
+                DynamicObjectUtils.copy(confirmBzEntry, checkEntry, BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection checkSlEntryCol = busCheckBill.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID);
+        DynamicObjectCollection confirmSlEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID);
+        for(DynamicObject confirmSlEntry : confirmSlEntryCol){
+            DynamicObject depSecretary = confirmSlEntry.getDynamicObject(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_DEPSECRETARY);
+            if(depSecretary != null && depSecretary.getLong(FinanceBillConfirmConstant.ID) == secretaryId){
+                DynamicObject checkEntry = checkSlEntryCol.addNew();
+                checkEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_SRCENTRYID, confirmSlEntry.getPkValue());
+                DynamicObjectUtils.copy(confirmSlEntry, checkEntry, BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection checkYcEntryCol = busCheckBill.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_YC_ENTRY.ENTITYID);
+        DynamicObjectCollection confirmYcEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_YC_ENTRY.ENTITYID);
+        for(DynamicObject confirmYcEntry : confirmYcEntryCol){
+            DynamicObject depSecretary = confirmYcEntry.getDynamicObject(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_DEPSECRETARY);
+            if(depSecretary != null && depSecretary.getLong(FinanceBillConfirmConstant.ID) == secretaryId){
+                DynamicObject checkEntry = checkYcEntryCol.addNew();
+                checkEntry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_SRCENTRYID, confirmYcEntry.getPkValue());
+                DynamicObjectUtils.copy(confirmYcEntry, checkEntry, BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection checkCbEntryCol = busCheckBill.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_CB_ENTRY.ENTITYID);
+        DynamicObjectCollection confirmCbEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_CB_ENTRY.ENTITYID);
+        for(DynamicObject confirmCbEntry : confirmCbEntryCol){
+            DynamicObject depSecretary = confirmCbEntry.getDynamicObject(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_DEPSECRETARY);
+            if(depSecretary != null && depSecretary.getLong(FinanceBillConfirmConstant.ID) == secretaryId){
+                DynamicObject checkEntry = checkCbEntryCol.addNew();
+                checkEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_SRCENTRYID, confirmCbEntry.getPkValue());
+                DynamicObjectUtils.copy(confirmCbEntry, checkEntry, BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection checkTgEntryCol = busCheckBill.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_TG_ENTRY.ENTITYID);
+        DynamicObjectCollection confirmTgEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_TG_ENTRY.ENTITYID);
+        for(DynamicObject confirmTgEntry : confirmTgEntryCol){
+            DynamicObject depSecretary = confirmTgEntry.getDynamicObject(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_DEPSECRETARY);
+            if(depSecretary != null && depSecretary.getLong(FinanceBillConfirmConstant.ID) == secretaryId){
+                DynamicObject checkEntry = checkTgEntryCol.addNew();
+                checkEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_SRCENTRYID, confirmTgEntry.getPkValue());
+                DynamicObjectUtils.copy(confirmTgEntry, checkEntry, BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        DynamicObjectCollection checkZsEntryCol = busCheckBill.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.ENTITYID);
+        DynamicObjectCollection confirmZsEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.ENTITYID);
+        for(DynamicObject confirmZsEntry : confirmZsEntryCol){
+            DynamicObject depSecretary = confirmZsEntry.getDynamicObject(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_DEPSECRETARY);
+            if(depSecretary != null && depSecretary.getLong(FinanceBillConfirmConstant.ID) == secretaryId){
+                DynamicObject checkEntry = checkZsEntryCol.addNew();
+                checkEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_SRCENTRYID, confirmZsEntry.getPkValue());
+                DynamicObjectUtils.copy(confirmZsEntry, checkEntry, BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            }
+        }
+
+        SaveServiceHelper.save(new DynamicObject[]{ busCheckBill});
+    }
+}

+ 625 - 31
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/task/TravelFinanConfirmCreateTask.java

@@ -17,16 +17,17 @@ import kd.bos.orm.query.QFilter;
 import kd.bos.schedule.executor.AbstractTask;
 import kd.bos.schedule.executor.AbstractTask;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.servicehelper.coderule.CodeRuleServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
 import kd.bos.util.CollectionUtils;
 import kd.bos.util.CollectionUtils;
+import kd.bos.util.StringUtils;
 import nckd.jimin.jyyy.fi.common.constant.BillTypeConstants;
 import nckd.jimin.jyyy.fi.common.constant.BillTypeConstants;
 import nckd.jimin.jyyy.fi.common.constant.travelcheck.*;
 import nckd.jimin.jyyy.fi.common.constant.travelcheck.*;
 import nckd.jimin.jyyy.fi.common.util.CommonUtils;
 import nckd.jimin.jyyy.fi.common.util.CommonUtils;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -36,25 +37,45 @@ import java.util.stream.Collectors;
 public class TravelFinanConfirmCreateTask extends AbstractTask {
 public class TravelFinanConfirmCreateTask extends AbstractTask {
 
 
     private static final Log logger = LogFactory.getLog(TravelFinanConfirmCreateTask.class);
     private static final Log logger = LogFactory.getLog(TravelFinanConfirmCreateTask.class);
+
+    private Date startDate;
+
     @Override
     @Override
     public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
     public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
         logger.info("TravelFinanConfirmCreateTask begin");
         logger.info("TravelFinanConfirmCreateTask begin");
+        startDate = new Date();
         // 创建当月的财务底稿确认单
         // 创建当月的财务底稿确认单
-        String period = CommonUtils.parsePeriod(new Date());
-        if(ORM.create().exists(FinanceBillConfirmConstant.ENTITYID,
-                new QFilter(FinanceBillConfirmConstant.NCKD_CHECKMONTH, QCP.equals, period).toArray())){
-            logger.info(String.format("期间[%s]已经存在商旅对账确认单,请勿重复创建!", period));
-            return;
+       if(map.containsKey("startDate")){
+           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+           try {
+               startDate = sdf.parse((String)map.get("startDate"));
+           } catch (ParseException e) {
+               throw new RuntimeException(e);
+           }
+       }
+       // 开始日期取当月第一天
+        startDate = getFirstDayOfMonth(startDate);
+        String period = CommonUtils.parsePeriod(getFirstDayOfPreviousMonth(startDate));
+        DynamicObject financeConfirmInfo = BusinessDataServiceHelper.loadSingle(FinanceBillConfirmConstant.ENTITYID,
+                FinanceBillConfirmConstant.ID,
+                new QFilter(FinanceBillConfirmConstant.NCKD_CHECKMONTH, QCP.equals, period).toArray());
+        if(financeConfirmInfo != null){
+//            logger.info(String.format("期间[%s]已经存在商旅对账确认单,请勿重复创建!", period));
+//            return;
+            financeConfirmInfo = BusinessDataServiceHelper.loadSingle(financeConfirmInfo.getPkValue(),financeConfirmInfo.getDynamicObjectType().getName());
+        }else{
+            financeConfirmInfo = BusinessDataServiceHelper.newDynamicObject(FinanceBillConfirmConstant.ENTITYID);
+            // 创建ID,用ID来清除已创建的数据
+            long financeConfirmId = ID.genLongId();
+            String number = CodeRuleServiceHelper.getNumber(FinanceBillConfirmConstant.ENTITYID, financeConfirmInfo, null);
+            financeConfirmInfo.set(FinanceBillConfirmConstant.KEY_BILLNO, number);
+            financeConfirmInfo.set(FinanceBillConfirmConstant.ID, financeConfirmId);
+            financeConfirmInfo.set(FinanceBillConfirmConstant.NCKD_CHECKMONTH, period);
+            financeConfirmInfo.set(FinanceBillConfirmConstant.KEY_BILLSTATUS, "A");
         }
         }
         try(TXHandle tx = TX.requiresNew(this.getClass().getName())){
         try(TXHandle tx = TX.requiresNew(this.getClass().getName())){
             try {
             try {
 
 
-                DynamicObject financeConfirmInfo = BusinessDataServiceHelper.newDynamicObject(FinanceBillConfirmConstant.ENTITYID);
-                // 创建ID,用ID来清除已创建的数据
-                long financeConfirmId = ID.genLongId();
-                financeConfirmInfo.set(FinanceBillConfirmConstant.ID, financeConfirmId);
-                financeConfirmInfo.set(FinanceBillConfirmConstant.NCKD_CHECKMONTH, period);
-                financeConfirmInfo.set(FinanceBillConfirmConstant.KEY_BILLSTATUS, "A");
                 // 创建差旅补助
                 // 创建差旅补助
                 createBzEntry(financeConfirmInfo);
                 createBzEntry(financeConfirmInfo);
                 // 创建商旅费用
                 // 创建商旅费用
@@ -62,10 +83,11 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
                 // 创建用车汇总
                 // 创建用车汇总
                 createYcEntry(financeConfirmInfo);
                 createYcEntry(financeConfirmInfo);
                 // 创建超标明细
                 // 创建超标明细
-
+                createCbEntry(financeConfirmInfo);
                 // 创建退改明细
                 // 创建退改明细
-
+                createTgEntry(financeConfirmInfo);
                 // 创建同性别未同住
                 // 创建同性别未同住
+                createZsEntry(financeConfirmInfo);
                 SaveServiceHelper.save(new DynamicObject[]{financeConfirmInfo});
                 SaveServiceHelper.save(new DynamicObject[]{financeConfirmInfo});
 
 
             }catch (Exception e){
             }catch (Exception e){
@@ -75,6 +97,535 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
         }
         }
         logger.info("TravelFinanConfirmCreateTask end");
         logger.info("TravelFinanConfirmCreateTask end");
     }
     }
+    protected void createZsEntry(DynamicObject financeConfirmInfo) {
+        // 查询酒店订单中,相同部门、性别、酒店城市中,入住时间存在交集的数据,按照部门、性别、酒店城市进行排序
+        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("ordertype", QCP.in, Arrays.asList("O","G")),
+                new QFilter("orderstatus", QCP.not_in, Arrays.asList("14","10")),
+        });
+
+        // 按照部门、性别、酒店城市进行分组
+        Map<String, List<DynamicObject>> applierGroupMap = queryHotelCol.stream()
+                .filter(dyx -> StringUtils.isNotEmpty(dyx.getString("org.id")) && StringUtils.isNotEmpty(dyx.getString("applierGender"))
+                        && StringUtils.isNotEmpty(dyx.getString("cityname")))
+                .collect(Collectors.groupingBy(dyx -> String.join("_", dyx.getString("org.id"), dyx.getString("applierGender"), dyx.getString("cityname"))));
+        // 创建分录
+        Map<String, List<DynamicObject>> filterSameDateHotel = filterSameDateHotel(applierGroupMap);
+
+        long confirmBillId = financeConfirmInfo.getLong("id");
+        DynamicObjectCollection zsEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.ENTITYID);
+        zsEntryCol.clear();
+        List<Long> updateHotelBillIdList = new ArrayList<>();
+        for(Map.Entry<String, List<DynamicObject>> sameDeptRow : filterSameDateHotel.entrySet()){
+            String sameDeptRowKey = sameDeptRow.getKey();
+            List<DynamicObject> hotelList = sameDeptRow.getValue();
+            for(DynamicObject hotel : hotelList){
+                DynamicObject zsEntry = zsEntryCol.addNew();
+                Long applierId = hotel.getLong("applierId");
+                DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
+                zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_SOURCEBOOKEDID, applierInfo);
+                zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_ORDERNUM, hotel.getString("ordernum"));
+
+                createApplierInfo(zsEntry,applierInfo);
+                zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_GENDER, hotel.getString("applierGender"));
+                zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_CHECKINDATE, hotel.getDate("checkindate"));
+                zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_CHECKOUTDATE, hotel.getDate("checkoutdate"));
+                zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_CITYNAME, hotel.getString("cityname"));
+                zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_HOTELNAME, hotel.getString("hotelname"));
+                zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_ROOMTYPE, hotel.getString("roomstylename"));
+                zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_LIVEDAYS, CommonUtils.getDays(hotel.getDate("checkindate"), hotel.getDate("checkoutdate")));
+                zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_TOTALAMOUNT, hotel.getBigDecimal("totalamount"));
+                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);
+    }
+
+    /**
+     * 获取指定日期所在月份的第一天
+     * @param stardDate 指定日期
+     * @return 该日期所在月份第一天的日期对象,时间为当月1日00:00:00
+     */
+    public Date getFirstDayOfMonth(Date stardDate) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(stardDate); // 设置为指定日期
+        calendar.set(Calendar.DAY_OF_MONTH, 1); // 设置为该月第一天
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        return calendar.getTime();
+    }
+
+    /**
+     * 获取指定日期的上个月第一天
+     * @param stardDate 指定日期
+     * @return 上个月第一天的日期对象,时间为当月1日00:00:00
+     */
+    public Date getFirstDayOfPreviousMonth(Date stardDate) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(stardDate); // 设置为指定日期
+        calendar.add(Calendar.MONTH, -1); // 回退一个月
+        calendar.set(Calendar.DAY_OF_MONTH, 1); // 设置为该月第一天
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        return calendar.getTime();
+    }
+
+
+    protected  Map<String, List<DynamicObject>> filterSameDateHotel(Map<String, List<DynamicObject>> applierGroupMap){
+        // 过滤出入住时间存在交集的数据
+        Map<String, List<DynamicObject>> filteredApplierGroupMap = new HashMap<>();
+
+        // 遍历每个分组,查找有时间重叠的记录
+        for (Map.Entry<String, List<DynamicObject>> group : applierGroupMap.entrySet()) {
+            List<DynamicObject> recordsWithOverlappingDates = new ArrayList<>();
+            List<DynamicObject> recordsInGroup = group.getValue();
+
+            // 对于分组中的每条记录,检查是否与其他记录的入住/离店时间有重叠
+            for (DynamicObject currentRecord : recordsInGroup) {
+                Date currentCheckin = currentRecord.getDate("checkindate");
+                Date currentCheckout = currentRecord.getDate("checkoutdate");
+
+                // 检查当前记录是否与分组中的其他记录存在时间重叠
+                boolean hasOverlapping = false;
+                for (DynamicObject otherRecord : recordsInGroup) {
+                    // 不与自己比较
+                    if (currentRecord == otherRecord) {
+                        continue;
+                    }
+
+                    // 不与同一预定人比较
+                    if(currentRecord.getLong("applierId") == otherRecord.getLong("applierId")){
+                        continue;
+                    }
+                    Date otherCheckin = otherRecord.getDate("checkindate");
+                    Date otherCheckout = otherRecord.getDate("checkoutdate");
+
+                    // 判断两个时间段是否有重叠:
+                    // 当前记录入住日期早于其他记录离店日期
+                    // 且 当前记录离店日期晚于其他记录入住日期
+                    if (currentCheckin.before(otherCheckout) && currentCheckout.after(otherCheckin)) {
+                        hasOverlapping = true;
+                        break;
+                    }
+                }
+
+                // 如果存在时间重叠,则添加到结果列表中
+                if (hasOverlapping) {
+                    recordsWithOverlappingDates.add(currentRecord);
+                }
+            }
+
+            // 只有当分组中存在有时间重叠的记录时,才添加到最终结果中
+            if (!recordsWithOverlappingDates.isEmpty()) {
+                filteredApplierGroupMap.put(group.getKey(), recordsWithOverlappingDates);
+            }
+        }
+        return filteredApplierGroupMap;
+    }
+    protected void createTgEntry(DynamicObject financeConfirmInfo) {
+        // 通过全部结算单,查询关联的订单号,再通过订单号查询指定状态的订单数据
+
+        long confirmBillId = financeConfirmInfo.getLong("id");
+
+        DynamicObjectCollection tgEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_TG_ENTRY.ENTITYID);
+        tgEntryCol.clear();
+        createTgEntryTrain(confirmBillId , tgEntryCol);
+        createTgEntryPlain(confirmBillId , tgEntryCol);
+        createTgEntryHotel(confirmBillId , tgEntryCol);
+
+    }
+
+    protected void createTgEntryTrain(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+        //火车订单,订单状态=已退票、已改签;
+        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("orderstatus", QFilter.in, Arrays.asList("2","3")),
+                        new QFilter("ordertype", QFilter.in, Arrays.asList("G","T"))
+                });
+        for(DynamicObject trainTgEntry : trainTgEntryCol){
+            DynamicObject tgEntry = tgEntryCol.addNew();
+            long applierId = trainTgEntry.getLong("applierId");
+            DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRAVELER, applierInfo);
+            createApplierInfo(tgEntry,applierInfo);
+
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_ORDERTYPE, "train");
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TYPE, trainTgEntry.getString("ordertype"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_ORDERNUM, trainTgEntry.getString("ordernum"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_HAPPENDDATE, trainTgEntry.getDate("happenddate"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_DEPARTIME, trainTgEntry.getDate("departtime"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRIPCITY, String.join("-", trainTgEntry.getString("departcity"), trainTgEntry.getString("arrivecity")));
+            // 退改金额
+            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);
+    }
+
+    protected void createTgEntryPlain(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+        // 机票订单,订单状态=已退票、已改签;
+        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("orderstatus", QFilter.in, Arrays.asList("50202","50302")),
+                        new QFilter("ordertype", QFilter.in, Arrays.asList("G","T"))
+                });
+        for(DynamicObject trainTgEntry : trainTgEntryCol){
+            DynamicObject tgEntry = tgEntryCol.addNew();
+            long applierId = trainTgEntry.getLong("applierId");
+            DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRAVELER, applierInfo);
+            createApplierInfo(tgEntry,applierInfo);
+
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_ORDERTYPE, "air");
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TYPE, trainTgEntry.getString("ordertype"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_ORDERNUM, trainTgEntry.getString("ordernum"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_HAPPENDDATE, trainTgEntry.getDate("happenddate"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_DEPARTIME, trainTgEntry.getDate("takeofftime"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRIPCITY, String.join("-", trainTgEntry.getString("fromcityname"), trainTgEntry.getString("tocityname")));
+            // 退改金额
+            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);
+    }
+
+    protected void createTgEntryHotel(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+        // 酒店订单,订单状态=已退订;
+        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("orderstatus", QFilter.equals, "10"),
+                        new QFilter("ordertype", QFilter.in, Arrays.asList("G","T"))
+                });
+        for(DynamicObject trainTgEntry : hotelTgEntryCol){
+            DynamicObject tgEntry = tgEntryCol.addNew();
+            long applierId = trainTgEntry.getLong("applierId");
+            DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRAVELER, applierInfo);
+            createApplierInfo(tgEntry,applierInfo);
+
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_ORDERTYPE, "hotal");
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TYPE, trainTgEntry.getString("ordertype"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_ORDERNUM, trainTgEntry.getString("ordernum"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_HAPPENDDATE, trainTgEntry.getDate("happenddate"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_DEPARTIME, trainTgEntry.getDate("checkindate"));
+            //tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRIPCTY, trainTgEntry.getString("arrivecity"));
+            // 退改金额
+            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);
+    }
+
+    protected void createCbEntry(DynamicObject financeConfirmInfo) {
+        long confirmBillId = financeConfirmInfo.getLong("id");
+        DynamicObjectCollection cbEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_CB_ENTRY.ENTITYID);
+        cbEntryCol.clear();
+        createCbEntryTrain(confirmBillId , cbEntryCol);
+        createCbEntryPlain(confirmBillId , cbEntryCol);
+        createCbEntryHotel(confirmBillId , cbEntryCol);
+        createCbEntryVehicle(confirmBillId , cbEntryCol);
+    }
+
+    protected void createCbEntryTrain(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+        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)),
+                });
+        // 通过火车订单过滤出超标的订单
+        List<String> parentOrderList = trainTgEntryCol.stream().map(r -> r.getString("ordernum")).collect(Collectors.toList());
+        Map<String, String> orderOverDescMap = QueryServiceHelper.query("er_trainbill", "ordernum,overdesc", new QFilter[]{
+                        new QFilter("ordernum", QCP.in, parentOrderList),
+                        QFilter.isNotNull("overdesc")
+                }).stream()
+                .filter(r -> StringUtils.isNotEmpty(r.getString("overdesc")))
+                .collect(Collectors.toMap(r -> r.getString("ordernum"), r -> r.getString("overdesc")));
+        for(DynamicObject trainTgEntry : trainTgEntryCol){
+            if(orderOverDescMap.containsKey(trainTgEntry.getString("ordernum"))){
+                DynamicObject tgEntry = tgEntryCol.addNew();
+                long applierId = trainTgEntry.getLong("applierId");
+                DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRAVELER, applierInfo);
+                createApplierInfo(tgEntry,applierInfo);
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERBILLNO, trainTgEntry.getString("ordernum"));
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERAMT, trainTgEntry.getBigDecimal("totalamount"));
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TYPE, "train");
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_STANDARD, BigDecimal.ZERO);
+                String standardInfo = "";
+                // 通过员工的岗位,查询对应的报销级别
+                DynamicObject reimLeverSettingInfo = QueryServiceHelper.queryOne("er_reimbursesetting_rel", "reimburselevel.id", new QFilter("user", QCP.equals, applierInfo.getLong("id")).toArray());
+                if(reimLeverSettingInfo != null && reimLeverSettingInfo.getLong("reimburselevel.id") != 0L){
+                    // 通过差旅报销级别,查询对应的报销标准
+                    DynamicObject tripStandard = BusinessDataServiceHelper.loadSingle("er_tripstandard_vehicle","seats",new QFilter[]{
+                            new QFilter("reimburselevel.fbasedataid.id", QCP.equals, reimLeverSettingInfo.getLong("reimburselevel.id")),
+                            new QFilter("standardtype", QCP.equals, "train")
+                    });
+                    if(tripStandard != null){
+                        standardInfo = tripStandard.getDynamicObjectCollection("seats")
+                                .stream()
+                                .map(r -> r.getDynamicObject("fbasedataid").getString("name"))
+                                .collect(Collectors.joining(";"));
+                    }
+                }
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_STANDARD_INFO, standardInfo);
+                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);
+    }
+
+
+    protected void createCbEntryPlain(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+        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)),
+                });
+        // 通过火车订单过滤出超标的订单
+        List<String> parentOrderList = trainTgEntryCol.stream().map(r -> r.getString("ordernum")).collect(Collectors.toList());
+        Map<String, DynamicObject> orderOverDescMap = QueryServiceHelper.query("er_planebill", "ordernum,overdesc,standprice", new QFilter[]{
+                        new QFilter("ordernum", QCP.in, parentOrderList)
+                }).stream()
+                .collect(Collectors.toMap(r -> r.getString("ordernum"), r -> r));
+        for(DynamicObject trainTgEntry : trainTgEntryCol){
+            // 机票超标的或者折扣额度大于60%
+            BigDecimal discount = Optional.ofNullable(trainTgEntry.getBigDecimal("discount")).orElse(BigDecimal.ZERO);
+            // 额度超标
+            Boolean isOverDiscount = discount.compareTo(new BigDecimal(60)) > 0?true:false;
+
+            if(orderOverDescMap.containsKey(trainTgEntry.getString("ordernum"))){
+
+                DynamicObject planOrderInfo = orderOverDescMap.get(trainTgEntry.getString("ordernum"));
+
+                if(StringUtils.isEmpty(planOrderInfo.getString("overdesc")) || !isOverDiscount){
+                    continue;
+                }
+
+                DynamicObject tgEntry = tgEntryCol.addNew();
+
+                long applierId = trainTgEntry.getLong("applierId");
+                // 机票价格
+                BigDecimal ticketPrice = Optional.ofNullable(trainTgEntry.getBigDecimal("ticketprice")).orElse(BigDecimal.ZERO);
+
+                BigDecimal standPrice = Optional.ofNullable(planOrderInfo.getBigDecimal("standprice")).orElse(BigDecimal.ZERO);
+
+                DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRAVELER, applierInfo);
+                createApplierInfo(tgEntry,applierInfo);
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERBILLNO, trainTgEntry.getString("ordernum"));
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERAMT, ticketPrice);
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TYPE, "air");
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_STANDARD, BigDecimal.ZERO);
+
+                if(isOverDiscount){
+                    // 机票价格-标准价格*0.6
+                    tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_EXCSTAMT, standPrice.subtract(standPrice.multiply(new BigDecimal(0.6))));
+                }
+                String standardInfo = "";
+                // 通过员工的岗位,查询对应的报销级别
+                DynamicObject reimLeverSettingInfo = QueryServiceHelper.queryOne("er_reimbursesetting_rel", "reimburselevel.id", new QFilter("user", QCP.equals, applierInfo.getLong("id")).toArray());
+                if(reimLeverSettingInfo != null && reimLeverSettingInfo.getLong("reimburselevel.id") != 0L){
+                    // 通过差旅报销级别,查询对应的报销标准
+                    DynamicObject tripStandard = BusinessDataServiceHelper.loadSingle("er_tripstandard_vehicle","seats",new QFilter[]{
+                            new QFilter("reimburselevel.fbasedataid.id", QCP.equals, reimLeverSettingInfo.getLong("reimburselevel.id")),
+                            new QFilter("standardtype", QCP.equals, "air")
+                    });
+                    if(tripStandard != null){
+                        standardInfo = tripStandard.getDynamicObjectCollection("seats")
+                                .stream()
+                                .map(r -> r.getDynamicObject("fbasedataid").getString("name"))
+                                .collect(Collectors.joining(";"));
+                    }
+                }
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_STANDARD_INFO, standardInfo);
+                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);
+    }
+
+    protected void createCbEntryHotel(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+        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)),
+                });
+        // 通过火车订单过滤出超标的订单
+        List<String> parentOrderList = trainTgEntryCol.stream().map(r -> r.getString("ordernum")).collect(Collectors.toList());
+        Map<String, String> orderOverDescMap = QueryServiceHelper.query("er_hotelbill", "ordernum,overdesc", new QFilter[]{
+                        new QFilter("ordernum", QCP.in, parentOrderList),
+                        QFilter.isNotNull("overdesc")
+                }).stream()
+                .filter(r -> StringUtils.isNotEmpty(r.getString("overdesc")))
+                .collect(Collectors.toMap(r -> r.getString("ordernum"), r -> r.getString("overdesc")));
+        for(DynamicObject trainTgEntry : trainTgEntryCol){
+            if(orderOverDescMap.containsKey(trainTgEntry.getString("ordernum"))){
+                DynamicObject tgEntry = tgEntryCol.addNew();
+
+                long applierId = trainTgEntry.getLong("applierId");
+                DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRAVELER, applierInfo);
+                createApplierInfo(tgEntry,applierInfo);
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERBILLNO, trainTgEntry.getString("ordernum"));
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERAMT, trainTgEntry.getBigDecimal("totalamount"));
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TYPE, "hotal");
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_STANDARD, BigDecimal.ZERO);
+                // 通过员工的岗位,查询对应的报销级别
+                DynamicObject reimLeverSettingInfo = QueryServiceHelper.queryOne("er_reimbursesetting_rel", "reimburselevel.id", new QFilter("user", QCP.equals, applierInfo.getLong("id")).toArray());
+                if(reimLeverSettingInfo != null && reimLeverSettingInfo.getLong("reimburselevel.id") != 0L){
+                    // 通过差旅报销级别,查询报销标准金额
+                    String cityName = trainTgEntry.getString("cityname");
+                    tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_CITYNAME, cityName);
+                    // 查询行政区划
+                    DynamicObject cityInfo = QueryServiceHelper.queryOne("bd_admindivision", "id", new QFilter("name", QCP.like, cityName + "%").toArray());
+                    if(cityInfo != null){
+                        // 查询出差地域
+                        DynamicObject tripArea = QueryServiceHelper.queryOne("er_triparea", "id", new QFilter("citysf7.fbasedataid", QCP.equals, cityInfo.getLong("id")).toArray());
+                        if(tripArea != null){
+                            // 住宿补助标准
+                            DynamicObject hotelStandard = QueryServiceHelper.queryOne("er_tripstand_accmodation", "entryentity.standardamount", new QFilter[]{
+                                    new QFilter("reimburselevel.fbasedataid", QCP.equals, reimLeverSettingInfo.getLong("reimburselevel.id")),
+                                    new QFilter("entryentity.triparea", QCP.equals, tripArea.getLong("id")),
+                                    new QFilter("entryentity.tripstandardtype.number", QCP.equals, "002"),
+                            });
+                            if(hotelStandard != null){
+                                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_STANDARD, hotelStandard.getBigDecimal("entryentity.standardamount"));
+                            }
+                        }
+
+                    }
+
+                }
+                tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_STANDARD_INFO, trainTgEntry.getString("hotelname"));
+                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);
+    }
+
+    protected void createCbEntryVehicle(Long confirmBillId , DynamicObjectCollection tgEntryCol){
+        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)),
+                });
+        for(DynamicObject trainTgEntry : trainTgEntryCol){
+            long applierId = trainTgEntry.getLong("applierId");
+            DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
+            BigDecimal orderPrice = Optional.ofNullable(trainTgEntry.getBigDecimal("totalamount")).orElse(BigDecimal.ZERO);
+
+            BigDecimal standardAmount = null;
+            // 通过员工的岗位,查询对应的报销级别
+            DynamicObject jobLeverInfo = QueryServiceHelper.queryOne(BillTypeConstants.HRPI_EMPJOBREL, "joblevel.id", new QFilter[]{
+                    new QFilter("businessstatus", QCP.equals, "1"),
+                    new QFilter("datastatus", QCP.equals, "1"),
+                    new QFilter("iscurrentversion", QCP.equals, "1"),
+                    new QFilter("person.number", QCP.equals, applierInfo.getString("number"))
+            });
+            if(jobLeverInfo != null){
+                DynamicObject checkStandard = QueryServiceHelper.queryOne("nckd_checkstandard", "nckd_amount", new QFilter[]{
+                        new QFilter("nckd_type", QCP.equals, "001"),
+                        new QFilter("nckd_multi_joblever.fbasedataid", QCP.equals, jobLeverInfo.getLong("joblevel.id"))
+                });
+                if(checkStandard != null){
+                    standardAmount = checkStandard.getBigDecimal("nckd_amount");
+                }
+            }
+            BigDecimal cbAmount = BigDecimal.ZERO;
+            if(standardAmount != null){
+                cbAmount = orderPrice.subtract(standardAmount);
+                if(cbAmount.compareTo(BigDecimal.ZERO) <= 0){
+                    // 超标金额没有大于0,则没有超标
+                    continue;
+                }
+            }
+            DynamicObject tgEntry = tgEntryCol.addNew();
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_STANDARD, standardAmount);
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_EXCSTAMT, cbAmount);
+
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRAVELER, applierInfo);
+            createApplierInfo(tgEntry,applierInfo);
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERBILLNO, trainTgEntry.getString("ordernum"));
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERAMT, orderPrice);
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TYPE, "train");
+            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_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);
+    }
     protected void createYcEntry(DynamicObject financeConfirmInfo) {
     protected void createYcEntry(DynamicObject financeConfirmInfo) {
 
 
         DynamicObjectCollection ycEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_YC_ENTRY.ENTITYID);
         DynamicObjectCollection ycEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_YC_ENTRY.ENTITYID);
@@ -82,8 +633,9 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
         long confirmBillId = financeConfirmInfo.getLong("id");
         long confirmBillId = financeConfirmInfo.getLong("id");
 
 
         // 查询用车结算单
         // 查询用车结算单
-        DynamicObjectCollection vehicleCheckCol = QueryServiceHelper.query("er_vehiclecheckingbill", "id,oabillnum,server,sourcebookedid.id applierId,totalamount", new QFilter[]{
-                new QFilter("happenddate", QCP.less_equals, new Date()),
+        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)
                 new QFilter(FinanceBillConfirmConstant.NCKD_YC_CONFRMID, QFilter.equals, 0)
                         .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_YC_CONFRMID)),
                         .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_YC_CONFRMID)),
         });
         });
@@ -91,17 +643,20 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             return;
             return;
         }
         }
 
 
-        Map<Long, List<DynamicObject>> applierGroupList = vehicleCheckCol.stream().collect(Collectors.groupingBy(r -> r.getLong("applierId")));
-        for (Map.Entry<Long, List<DynamicObject>> applierRow : applierGroupList.entrySet()) {
-            Long applierId = applierRow.getKey();
+        Map<String, List<DynamicObject>> applierGroupList = vehicleCheckCol.stream()
+                .collect(Collectors.groupingBy(r -> r.getLong("applierId") + "_" + r.getString("vehicletype")));
+        for (Map.Entry<String, List<DynamicObject>> applierRow : applierGroupList.entrySet()) {
+            String applierId = applierRow.getKey().split("_")[0];
+            String vehicletype = applierRow.getKey().split("_")[1];
             List<DynamicObject> dataList = applierRow.getValue();
             List<DynamicObject> dataList = applierRow.getValue();
             DynamicObject ycEntry = ycEntryCol.addNew();
             DynamicObject ycEntry = ycEntryCol.addNew();
-            DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
+            DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(Long.valueOf(applierId), "bos_user");
             ycEntry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_TRAVELER, applierInfo);
             ycEntry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_TRAVELER, applierInfo);
             createApplierInfo(ycEntry,applierInfo);
             createApplierInfo(ycEntry,applierInfo);
             BigDecimal totalAmount = dataList.stream()
             BigDecimal totalAmount = dataList.stream()
                     .map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
                     .map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
             ycEntry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_AMOUNT, totalAmount);
             ycEntry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_AMOUNT, totalAmount);
+            ycEntry.set("nckd_yc_vehicletype", vehicletype);
         }
         }
 
 
         List<Long> vehicleBillIdList = vehicleCheckCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
         List<Long> vehicleBillIdList = vehicleCheckCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
@@ -115,12 +670,15 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
     protected void createSlEntry(DynamicObject financeConfirmInfo) {
     protected void createSlEntry(DynamicObject financeConfirmInfo) {
         // 该方法从各个明细中查询,注释掉,改成从全部订单上查询
         // 该方法从各个明细中查询,注释掉,改成从全部订单上查询
         //DynamicObjectCollection slOrderDataCol = getSlOrderDataCol();
         //DynamicObjectCollection slOrderDataCol = getSlOrderDataCol();
-        DynamicObjectCollection slOrderDataCol = QueryServiceHelper.query("er_allcheckingbill", "id,oabillnum,server,sourcebookedid.id applierId,totalamount,operationtype", new QFilter[]{
-                new QFilter("happenddate", QCP.less_equals, new Date()),
+        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)
                 new QFilter(FinanceBillConfirmConstant.NCKD_SL_CONFRMID, QFilter.equals, 0)
                         .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_SL_CONFRMID)),
                         .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_SL_CONFRMID)),
                 new QFilter("operationtype", QFilter.in, Arrays.asList("1","2","4","5","6")),
                 new QFilter("operationtype", QFilter.in, Arrays.asList("1","2","4","5","6")),
         });
         });
+
+
         long confirmBillId = financeConfirmInfo.getLong("id");
         long confirmBillId = financeConfirmInfo.getLong("id");
         DynamicObjectCollection slEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID);
         DynamicObjectCollection slEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID);
         slEntryCol.clear();
         slEntryCol.clear();
@@ -136,16 +694,39 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             // 服务商已经和实施沟通,取第一个就行,按理只会出现同城
             // 服务商已经和实施沟通,取第一个就行,按理只会出现同城
             slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_SERVER,dataList.get(0).getString("server"));
             slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_SERVER,dataList.get(0).getString("server"));
             // 对火车订单金额合计
             // 对火车订单金额合计
+            List<String> trainNoList = dataList.stream()
+                    .filter(r -> "6".equals(r.getString("operationtype")))
+                    .map(r -> r.getString("ordernum")).collect(Collectors.toList());
+            BigDecimal trainServiceAmount = QueryServiceHelper.query("er_traincheckingbill", "id,servicefee", new QFilter[]{
+                    new QFilter("ordernum", QCP.in, trainNoList)
+            }).stream().map(r -> r.getBigDecimal("servicefee")).reduce(BigDecimal.ZERO, BigDecimal::add);
+            slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_TRAINSERVICEFEE, trainServiceAmount);
             BigDecimal trainTotalAmount = dataList.stream()
             BigDecimal trainTotalAmount = dataList.stream()
                     .filter(r -> "6".equals(r.getString("operationtype")))
                     .filter(r -> "6".equals(r.getString("operationtype")))
                     .map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
                     .map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
             slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_TRAINPAYAMT, trainTotalAmount);
             slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_TRAINPAYAMT, trainTotalAmount);
             // 对机票订单金额合计
             // 对机票订单金额合计
+            List<String> planNoList = dataList.stream()
+                    .filter(r -> "2".equals(r.getString("operationtype")) || "4".equals(r.getString("operationtype")))
+                    .map(r -> r.getString("ordernum")).collect(Collectors.toList());
+            BigDecimal planeServiceAmount = QueryServiceHelper.query("er_planecheckingbill", "id,servicefee", new QFilter[]{
+                    new QFilter("ordernum", QCP.in, planNoList)
+            }).stream().map(r -> r.getBigDecimal("servicefee")).reduce(BigDecimal.ZERO, BigDecimal::add);
+            slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_PLANSERVICEFEE, planeServiceAmount);
+
             BigDecimal planeTotalAmount = dataList.stream()
             BigDecimal planeTotalAmount = dataList.stream()
                     .filter(r -> "2".equals(r.getString("operationtype")) || "4".equals(r.getString("operationtype")))
                     .filter(r -> "2".equals(r.getString("operationtype")) || "4".equals(r.getString("operationtype")))
                     .map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
                     .map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
-            slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_PLANPAYAMT, planeTotalAmount);
+            slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_PLANSERVICEFEE, planeTotalAmount);
             // 对酒店订单金额合计
             // 对酒店订单金额合计
+            List<String> hotelNoList = dataList.stream()
+                    .filter(r ->"1".equals(r.getString("operationtype")) || "5".equals(r.getString("operationtype")))
+                    .map(r -> r.getString("ordernum")).collect(Collectors.toList());
+            BigDecimal hotelServiceAmount = QueryServiceHelper.query("er_hotelcheckingbill", "id,servicefee", new QFilter[]{
+                    new QFilter("ordernum", QCP.in, hotelNoList)
+            }).stream().map(r -> r.getBigDecimal("servicefee")).reduce(BigDecimal.ZERO, BigDecimal::add);
+            slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_HOTELSERVICEFEEJD, hotelServiceAmount);
+
             BigDecimal hotelTotalAmount = dataList.stream()
             BigDecimal hotelTotalAmount = dataList.stream()
                     .filter(r ->"1".equals(r.getString("operationtype")) || "5".equals(r.getString("operationtype")))
                     .filter(r ->"1".equals(r.getString("operationtype")) || "5".equals(r.getString("operationtype")))
                     .map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
                     .map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -188,18 +769,13 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
     protected void createBzEntry(DynamicObject financeConfirmInfo){
     protected void createBzEntry(DynamicObject financeConfirmInfo){
         long confirmBillId = financeConfirmInfo.getLong(FinanceBillConfirmConstant.ID);
         long confirmBillId = financeConfirmInfo.getLong(FinanceBillConfirmConstant.ID);
         BigDecimal bzAmount = CommonUtils.getBzAmount();
         BigDecimal bzAmount = CommonUtils.getBzAmount();
-        // 获取本月月初
-        LocalDateTime firstDayStart = LocalDate.now().withDayOfMonth(1).atStartOfDay();
-        // 转换为Date对象
-        Date firstDay = Date.from(firstDayStart.atZone(ZoneId.systemDefault()).toInstant());
-
         // 查询出差申请单
         // 查询出差申请单
         DynamicObjectCollection tripReqBillCol = QueryServiceHelper.query(TripReqBillConstant.ENTITYID, String.join(",",TripReqBillConstant.ID,TripReqBillConstant.BILLNO), new QFilter[]{
         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(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, 0)
                         .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID)),
                         .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID)),
-                new QFilter(TripReqBillConstant.RENDDATE, QFilter.less_than, firstDay),
+                new QFilter(TripReqBillConstant.RENDDATE, QFilter.less_than, startDate),
         },"createtime desc" );
         },"createtime desc" );
         if(tripReqBillCol == null || tripReqBillCol.size() == 0){
         if(tripReqBillCol == null || tripReqBillCol.size() == 0){
             return ;
             return ;
@@ -285,6 +861,24 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
                 entry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_COMPANY, company);
                 entry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_COMPANY, company);
                 entry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_DEPSECRETARY, travelDeptSecretary);
                 entry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_DEPSECRETARY, travelDeptSecretary);
             }
             }
+            if(FinanceBillConfirmConstant.NCKD_CB_ENTRY.ENTITYID.equals(entryEntityName)){
+                entry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_DEPFULLNAME, userInfo.getString("entryentity.orgstructure.fullname"));
+                entry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_POST, userInfo.getString("entryentity.post.name"));
+                entry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_COMPANY, company);
+                entry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_DEPSECRETARY, travelDeptSecretary);
+            }
+
+            if(FinanceBillConfirmConstant.NCKD_TG_ENTRY.ENTITYID.equals(entryEntityName)){
+                entry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_DEPFULLNAME, userInfo.getString("entryentity.orgstructure.fullname"));
+                entry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_POST, userInfo.getString("entryentity.post.name"));
+                entry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_DEPSECRETARY, travelDeptSecretary);
+            }
+
+            if(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.ENTITYID.equals(entryEntityName)){
+                entry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_DEPFULLNAME, userInfo.getString("entryentity.orgstructure.fullname"));
+                entry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_POST, userInfo.getString("entryentity.post.name"));
+                entry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_DEPSECRETARY, travelDeptSecretary);
+            }
         }
         }
     }
     }