浏览代码

Merge branch 'master' of http://111.75.220.136:10030/Tzz/jxcl

Tzz 4 天之前
父节点
当前提交
7b9f39f88f

+ 70 - 19
base/nckd-base-common/src/main/java/nckd/base/common/utils/GzwSyncBillUtils.java

@@ -58,6 +58,10 @@ public class GzwSyncBillUtils {
      * 设置国资委采集平台对应的表名(业务审批记录)
      * 设置国资委采集平台对应的表名(业务审批记录)
      */
      */
     public final static String BIZ_APPROVE_RECORD = "biz_approve_record";
     public final static String BIZ_APPROVE_RECORD = "biz_approve_record";
+    /**
+     * 设置国资委采集平台对应的表名(业务招待清单-用餐安排-宴请用餐-酒水明细)
+     */
+    public final static String BIZ_DRINK_DETAIL = "biz_drink_detail";
 
 
     /**
     /**
      * @param bizPolicy 业务招待制度
      * @param bizPolicy 业务招待制度
@@ -123,22 +127,24 @@ public class GzwSyncBillUtils {
         String chiefGuestTitle = dailyApply.getString("nckd_zw");
         String chiefGuestTitle = dailyApply.getString("nckd_zw");
         //用餐类型
         //用餐类型
         String type = dailyApply.getString("nckd_combofield");
         String type = dailyApply.getString("nckd_combofield");
+        //来访单位性质
+        String visitUnitType = dailyApply.getString("nckd_combofield1");
         //费用明细
         //费用明细
         DynamicObjectCollection entryEntity = dailyApply.getDynamicObjectCollection("expenseentryentity");
         DynamicObjectCollection entryEntity = dailyApply.getDynamicObjectCollection("expenseentryentity");
         //宴请人均标准
         //宴请人均标准
-        DynamicObject yqEntry = entryEntity.stream().filter(it -> ObjectUtils.isNotEmpty(it.get("treatway")) && type.equals("1") && it.getString("treatway").equals("1")).findAny().orElse(null);
+        DynamicObject yqEntry = entryEntity.stream().filter(it -> ObjectUtils.isNotEmpty(it.get("treatway")) && it.getString("treatway").equals("1")).findAny().orElse(null);
         BigDecimal yqPerAvgStd = null == yqEntry ? BigDecimal.ZERO : yqEntry.getBigDecimal("nckd_decimalfield");
         BigDecimal yqPerAvgStd = null == yqEntry ? BigDecimal.ZERO : yqEntry.getBigDecimal("nckd_decimalfield");
         //日常用餐人均标准
         //日常用餐人均标准
-        DynamicObject rcycEntry = entryEntity.stream().filter(it -> ObjectUtils.isNotEmpty(it.get("treatway")) && type.equals("2") && it.getString("treatway").equals("1")).findAny().orElse(null);
-        BigDecimal rcycPerAvgStd = null == rcycEntry ? BigDecimal.ZERO :  rcycEntry.getBigDecimal("nckd_decimalfield");
+        DynamicObject rcycEntry = entryEntity.stream().filter(it -> ObjectUtils.isNotEmpty(it.get("treatway")) && it.getString("treatway").equals("2")).findAny().orElse(null);
+        BigDecimal rcycPerAvgStd = null == rcycEntry ? BigDecimal.ZERO : rcycEntry.getBigDecimal("nckd_decimalfield");
         //住宿人均标准
         //住宿人均标准
-        DynamicObject zsEntry = entryEntity.stream().filter(it -> ObjectUtils.isNotEmpty(it.get("treatway")) && it.getString("treatway").equals("2")).findAny().orElse(null);
+        DynamicObject zsEntry = entryEntity.stream().filter(it -> ObjectUtils.isNotEmpty(it.get("treatway")) && it.getString("treatway").equals("3")).findAny().orElse(null);
         BigDecimal zsPerAvgStd = null == zsEntry ? BigDecimal.ZERO : zsEntry.getBigDecimal("nckd_decimalfield");
         BigDecimal zsPerAvgStd = null == zsEntry ? BigDecimal.ZERO : zsEntry.getBigDecimal("nckd_decimalfield");
         //纪念品人均标准
         //纪念品人均标准
-        DynamicObject jnpEntry = entryEntity.stream().filter(it -> ObjectUtils.isNotEmpty(it.get("treatway")) && it.getString("treatway").equals("4")).findAny().orElse(null);
+        DynamicObject jnpEntry = entryEntity.stream().filter(it -> ObjectUtils.isNotEmpty(it.get("treatway")) && it.getString("treatway").equals("5")).findAny().orElse(null);
         BigDecimal jnpPerAvgStd = null == jnpEntry ? BigDecimal.ZERO : jnpEntry.getBigDecimal("nckd_decimalfield");
         BigDecimal jnpPerAvgStd = null == jnpEntry ? BigDecimal.ZERO : jnpEntry.getBigDecimal("nckd_decimalfield");
         //用车数量
         //用车数量
-        DynamicObject ycEntry = entryEntity.stream().filter(it -> ObjectUtils.isNotEmpty(it.get("treatway")) && it.getString("treatway").equals("5")).findAny().orElse(null);
+        DynamicObject ycEntry = entryEntity.stream().filter(it -> ObjectUtils.isNotEmpty(it.get("treatway")) && it.getString("treatway").equals("6")).findAny().orElse(null);
         BigDecimal ycQty = null == ycEntry ? BigDecimal.ZERO : ycEntry.getBigDecimal("nckd_integerfield");
         BigDecimal ycQty = null == ycEntry ? BigDecimal.ZERO : ycEntry.getBigDecimal("nckd_integerfield");
 
 
 
 
@@ -154,6 +160,7 @@ public class GzwSyncBillUtils {
         dynamicData.put("visit_organization", visitingUnit);
         dynamicData.put("visit_organization", visitingUnit);
         dynamicData.put("visit_contact", visitingContact);
         dynamicData.put("visit_contact", visitingContact);
         dynamicData.put("visit_contact_phone", visitingPhone);
         dynamicData.put("visit_contact_phone", visitingPhone);
+        dynamicData.put("visit_org_type", visitUnitType);
         dynamicData.put("expect_visit_time", DateUtil.date2str(expectedVisitTime, DateUtil.DATE_FORMAT_YYYY_MM_DD));
         dynamicData.put("expect_visit_time", DateUtil.date2str(expectedVisitTime, DateUtil.DATE_FORMAT_YYYY_MM_DD));
         dynamicData.put("expect_visitors", expectedVisitorCount);
         dynamicData.put("expect_visitors", expectedVisitorCount);
         dynamicData.put("visitor_main_name", chiefGuestName);
         dynamicData.put("visitor_main_name", chiefGuestName);
@@ -193,6 +200,8 @@ public class GzwSyncBillUtils {
         String visitingUnit = entertainment.getString("nckd_visiting_org");
         String visitingUnit = entertainment.getString("nckd_visiting_org");
         //来访联系人
         //来访联系人
         String contact = entertainment.getString("nckd_contact");
         String contact = entertainment.getString("nckd_contact");
+        //来访单位性质
+        String visitUnitType = entertainment.getString("nckd_combofield1");
         //来访联系电话
         //来访联系电话
         String contactPhone = entertainment.getString("nckd_contact_number");
         String contactPhone = entertainment.getString("nckd_contact_number");
         //招待类型
         //招待类型
@@ -210,6 +219,7 @@ public class GzwSyncBillUtils {
         //实际费用合计
         //实际费用合计
         BigDecimal amount = entertainment.getBigDecimal("nckd_amountfield");
         BigDecimal amount = entertainment.getBigDecimal("nckd_amountfield");
 
 
+
         LinkedHashMap<String, Object> dynamicData = new LinkedHashMap<>();
         LinkedHashMap<String, Object> dynamicData = new LinkedHashMap<>();
 
 
         dynamicData.put("uuid", id);
         dynamicData.put("uuid", id);
@@ -224,6 +234,7 @@ public class GzwSyncBillUtils {
         dynamicData.put("visit_organization", visitingUnit);
         dynamicData.put("visit_organization", visitingUnit);
         dynamicData.put("visit_contact", contact);
         dynamicData.put("visit_contact", contact);
         dynamicData.put("visit_contact_phone", contactPhone);
         dynamicData.put("visit_contact_phone", contactPhone);
+        dynamicData.put("visit_org_type", visitUnitType);
         dynamicData.put("reception_time", DateUtil.date2str(receptionTime, DateUtil.DATE_FORMAT_YYYY_MM_DD));
         dynamicData.put("reception_time", DateUtil.date2str(receptionTime, DateUtil.DATE_FORMAT_YYYY_MM_DD));
         dynamicData.put("reception_num", actualQty);
         dynamicData.put("reception_num", actualQty);
         dynamicData.put("visitor_main_name", guestHonor);
         dynamicData.put("visitor_main_name", guestHonor);
@@ -273,7 +284,8 @@ public class GzwSyncBillUtils {
         //过滤招待项目=用餐安排、用餐类型
         //过滤招待项目=用餐安排、用餐类型
         List<DynamicObject> entryList = entryEntity.stream()
         List<DynamicObject> entryList = entryEntity.stream()
                 .filter(it -> it.getString("nckd_program").equals("1")
                 .filter(it -> it.getString("nckd_program").equals("1")
-                        && it.getString("nckd_mealtype").equals(type))
+                        && it.getString("nckd_mealtype").equals(type)
+                )
                 .collect(Collectors.toList());
                 .collect(Collectors.toList());
 
 
         List<LinkedHashMap<String, Object>> dataList = new ArrayList<>();
         List<LinkedHashMap<String, Object>> dataList = new ArrayList<>();
@@ -285,14 +297,6 @@ public class GzwSyncBillUtils {
             int personNum = entry.getInt("nckd_personnum");
             int personNum = entry.getInt("nckd_personnum");
             //是否含酒水
             //是否含酒水
             boolean isHJS = entry.getBoolean("nckd_checkboxfield");
             boolean isHJS = entry.getBoolean("nckd_checkboxfield");
-            //酒水名称
-            String beveragesName = entry.getString("nckd_beveragesname");
-            //酒水数量
-            int beveragesNum = entry.getInt("nckd_beveragesnum");
-            //单价
-            BigDecimal price = entry.getBigDecimal("nckd_beveragesamount");
-            //是否在单位领用
-            boolean isUnit = entry.getBoolean("nckd_isunit");
             //实际费用总额
             //实际费用总额
             BigDecimal totalAmount = entry.getBigDecimal("nckd_totalamount");
             BigDecimal totalAmount = entry.getBigDecimal("nckd_totalamount");
             //实际人均费用
             //实际人均费用
@@ -314,10 +318,6 @@ public class GzwSyncBillUtils {
                 data.put("entertain_time", DateUtil.date2str(receptionTime, DateUtil.DATE_FORMAT_YYYY_MM_DD));
                 data.put("entertain_time", DateUtil.date2str(receptionTime, DateUtil.DATE_FORMAT_YYYY_MM_DD));
                 data.put("entertain_addr", location);
                 data.put("entertain_addr", location);
                 data.put("has_drinks", isHJS ? "1" : "0");
                 data.put("has_drinks", isHJS ? "1" : "0");
-                data.put("drinks_name", beveragesName);
-                data.put("drinks_num", beveragesNum);
-                data.put("price", price);
-                data.put("use_from_org", isUnit ? "1" : "0");
             } else {
             } else {
                 //日常用餐
                 //日常用餐
                 data.put("start_time", DateUtil.date2str(startDate, DateUtil.DATE_FORMAT_YYYY_MM_DD));
                 data.put("start_time", DateUtil.date2str(startDate, DateUtil.DATE_FORMAT_YYYY_MM_DD));
@@ -333,6 +333,57 @@ public class GzwSyncBillUtils {
         return dataList;
         return dataList;
     }
     }
 
 
+    /**
+     * @param entertainment 业务招待清单
+     * @param type          用餐类型 1宴请 2日常用餐
+     * @return 将单据招待明细.用餐安排数据转换成XML动态参数内容
+     */
+    public static List<LinkedHashMap<String, Object>> getEntertainmentYcBeveragesData(DynamicObject entertainment) {
+        String id = entertainment.getString(BaseFieldConst.ID);
+        //招待时间
+        Date receptionTime = entertainment.getDate("nckd_reception_time");
+        //招待明细
+        DynamicObjectCollection entryEntity = entertainment.getDynamicObjectCollection("nckd_entryentity");
+        //过滤招待项目=用餐安排、用餐类型 、 是否含酒水
+        List<DynamicObject> entryList = entryEntity.stream()
+                .filter(it -> it.getString("nckd_program").equals("1")
+                        && it.getString("nckd_mealtype").equals("1")
+                        && it.getBoolean("nckd_checkboxfield")
+                )
+                .collect(Collectors.toList());
+
+        List<LinkedHashMap<String, Object>> dataList = new ArrayList<>();
+        for (DynamicObject entry : entryList) {
+            String entryId = entry.getString(BaseFieldConst.ID);
+
+            //酒水名称
+            String beveragesName = entry.getString("nckd_beveragesname");
+            //酒水数量
+            int beveragesNum = entry.getInt("nckd_beveragesnum");
+            //酒水类型
+            String beveragesType = entry.getString("nckd_combofield2");
+            //酒水容量(ml)
+            int beveragesMl = entry.getInt("nckd_integerfield1");
+            //单价
+            BigDecimal price = entry.getBigDecimal("nckd_beveragesamount");
+            //是否在单位领用
+            boolean isUnit = entry.getBoolean("nckd_isunit");
+
+            LinkedHashMap<String, Object> data = new LinkedHashMap<>();
+            data.put("uuid", entryId);
+            data.put("entertain_uuid", entryId);
+            data.put("drinks_name", beveragesName);
+            data.put("drinks_type", beveragesType);
+            data.put("capacity", beveragesMl);
+            data.put("drinks_num", beveragesNum);
+            data.put("price", price);
+            data.put("use_from_org", isUnit ? "1" : "0");
+
+            dataList.add(data);
+        }
+        return dataList;
+    }
+
     /**
     /**
      * @param entertainment 业务招待清单
      * @param entertainment 业务招待清单
      * @return 将单据招待明细.住宿安排数据转换成XML动态参数内容
      * @return 将单据招待明细.住宿安排数据转换成XML动态参数内容

+ 5 - 0
nckd-fi/src/main/java/nckd/fi/er/opplugin/EntertainmentPushOpPlugin.java

@@ -25,6 +25,8 @@ public class EntertainmentPushOpPlugin extends GzwPushOpPlugin {
         configs.add(new ResCodeConfig(GzwSyncBillUtils.BIZ_ATTEND, GzwCommonUtils.getResMap(GzwSyncBillUtils.BIZ_ATTEND, resParam)));
         configs.add(new ResCodeConfig(GzwSyncBillUtils.BIZ_ATTEND, GzwCommonUtils.getResMap(GzwSyncBillUtils.BIZ_ATTEND, resParam)));
         // 业务招待清单-用餐安排-宴请
         // 业务招待清单-用餐安排-宴请
         configs.add(new ResCodeConfig(GzwSyncBillUtils.BIZ_ENTERTAIN, GzwCommonUtils.getResMap(GzwSyncBillUtils.BIZ_ENTERTAIN, resParam)));
         configs.add(new ResCodeConfig(GzwSyncBillUtils.BIZ_ENTERTAIN, GzwCommonUtils.getResMap(GzwSyncBillUtils.BIZ_ENTERTAIN, resParam)));
+        //业务招待清单-用餐安排-宴请用餐-酒水明细
+        configs.add(new ResCodeConfig(GzwSyncBillUtils.BIZ_DRINK_DETAIL, GzwCommonUtils.getResMap(GzwSyncBillUtils.BIZ_DRINK_DETAIL, resParam)));
         // 业务招待清单-用餐安排- 日常用餐
         // 业务招待清单-用餐安排- 日常用餐
         configs.add(new ResCodeConfig(GzwSyncBillUtils.BIZ_MEAL, GzwCommonUtils.getResMap(GzwSyncBillUtils.BIZ_MEAL, resParam)));
         configs.add(new ResCodeConfig(GzwSyncBillUtils.BIZ_MEAL, GzwCommonUtils.getResMap(GzwSyncBillUtils.BIZ_MEAL, resParam)));
         // 业务招待清单-住宿安排
         // 业务招待清单-住宿安排
@@ -50,6 +52,9 @@ public class EntertainmentPushOpPlugin extends GzwPushOpPlugin {
             case GzwSyncBillUtils.BIZ_ENTERTAIN:
             case GzwSyncBillUtils.BIZ_ENTERTAIN:
                 // 业务招待清单-用餐安排-宴请
                 // 业务招待清单-用餐安排-宴请
                 return GzwSyncBillUtils.getEntertainmentYcData(bill, "1");
                 return GzwSyncBillUtils.getEntertainmentYcData(bill, "1");
+            case GzwSyncBillUtils.BIZ_DRINK_DETAIL:
+                // 业务招待清单-用餐安排-宴请用餐-酒水明细
+                return GzwSyncBillUtils.getEntertainmentYcBeveragesData(bill);
             case GzwSyncBillUtils.BIZ_MEAL:
             case GzwSyncBillUtils.BIZ_MEAL:
                 // 业务招待清单-用餐安排- 日常用餐
                 // 业务招待清单-用餐安排- 日常用餐
                 return GzwSyncBillUtils.getEntertainmentYcData(bill, "2");
                 return GzwSyncBillUtils.getEntertainmentYcData(bill, "2");

+ 183 - 44
nckd-fi/src/main/java/nckd/fi/er/task/MonthlySettlementBillTask.java

@@ -1,5 +1,6 @@
 package nckd.fi.er.task;
 package nckd.fi.er.task;
 
 
+import com.alibaba.dubbo.common.utils.CollectionUtils;
 import kd.bos.context.RequestContext;
 import kd.bos.context.RequestContext;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
@@ -19,6 +20,8 @@ import nckd.base.common.utils.DateUtil;
 import nckd.base.common.utils.ParamUtils;
 import nckd.base.common.utils.ParamUtils;
 import nckd.base.common.utils.TripSyncUtils;
 import nckd.base.common.utils.TripSyncUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.ObjectUtils;
+import org.jetbrains.annotations.NotNull;
+
 import java.text.ParseException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.*;
@@ -51,6 +54,19 @@ public class MonthlySettlementBillTask extends AbstractTask {
         }
         }
     }
     }
 
 
+    private Date parseStringToDateWithSdfMonth(String dateStr) {
+        if (ObjectUtils.isEmpty(dateStr)) {
+            return null;
+        }
+        // 每次新建SimpleDateFormat,避免线程安全问题
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+        try {
+            return sdf.parse(dateStr);
+        } catch (ParseException e) {
+            return null;
+        }
+    }
+
     @Override
     @Override
     public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
     public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
         log.info("月结账单同步调度计划开始执行");
         log.info("月结账单同步调度计划开始执行");
@@ -59,6 +75,7 @@ public class MonthlySettlementBillTask extends AbstractTask {
             log.info("月结账单查询接口 暂无数据-----");
             log.info("月结账单查询接口 暂无数据-----");
             return ;
             return ;
         }
         }
+        List<DynamicObject> ids = new ArrayList<>();
         for (Map<String, Object> resultMap : resultLists) {
         for (Map<String, Object> resultMap : resultLists) {
             //供应商名称-供应商编号
             //供应商名称-供应商编号
             Object service = resultMap.get("supplierNo");
             Object service = resultMap.get("supplierNo");
@@ -110,9 +127,13 @@ public class MonthlySettlementBillTask extends AbstractTask {
             Object innerdownloadurl = resultMap.get("violationCause");
             Object innerdownloadurl = resultMap.get("violationCause");
             //出发时间
             //出发时间
             Object departtime = resultMap.get("takeOffTime");
             Object departtime = resultMap.get("takeOffTime");
+            //业务发生时间
+            Object rebookingTime = resultMap.get("rebookingtime");
             //航班号/车次号-机票航班号/车票车次
             //航班号/车次号-机票航班号/车票车次
             Object number = resultMap.get("flight")==null ? resultMap.get("ticketInfoID") : resultMap.get("flight");
             Object number = resultMap.get("flight")==null ? resultMap.get("ticketInfoID") : resultMap.get("flight");
-           //测试用例
+            //国内/国外
+            Object international = resultMap.get("international");
+            //测试用例
 //            Object invoicefromcity = resultMap.get("cityName");
 //            Object invoicefromcity = resultMap.get("cityName");
 //            Object invoiceno = resultMap.get("subAccCheckBatchNo");
 //            Object invoiceno = resultMap.get("subAccCheckBatchNo");
 //            Object departtime = resultMap.get("startTime");
 //            Object departtime = resultMap.get("startTime");
@@ -134,8 +155,25 @@ public class MonthlySettlementBillTask extends AbstractTask {
                     filters
                     filters
             );
             );
             dynamicBillObj.set("settlemain", conflictBills);
             dynamicBillObj.set("settlemain", conflictBills);
+            String s = null;
+            switch (operationtype.toString()){
+                case "01001":
+                case "01002":
+                case "01003":
+                    if ("1".equals(international.toString())){
+                        s = "2";
+                    }else {
+                        s = "4";
+                    }
+                    break;
+                case "1":
+                case "2":
+                case "3":
+                    s = "6";
+                    break;
+            }
             //服务类型
             //服务类型
-            dynamicBillObj.set("operationtype", operationtype);
+            dynamicBillObj.set("operationtype", s);
             //单据状态
             //单据状态
             dynamicBillObj.set("billstatusname", "4");
             dynamicBillObj.set("billstatusname", "4");
             //币种
             //币种
@@ -195,53 +233,116 @@ public class MonthlySettlementBillTask extends AbstractTask {
                     dynamicBillObj.set("formid", "er_traincheckingbill");
                     dynamicBillObj.set("formid", "er_traincheckingbill");
                     break;
                     break;
             }
             }
+            //调用发票查询接口
+            List<Map<String, Object>> resultInvoiceLists = getInvoiceResult(checkingbillno,rebookingTime);
             //单据体
             //单据体
             DynamicObjectCollection entryEntity = dynamicBillObj.getDynamicObjectCollection("invoiceentry");
             DynamicObjectCollection entryEntity = dynamicBillObj.getDynamicObjectCollection("invoiceentry");
-            //单据体新增一行
-            DynamicObject entry =entryEntity.addNew();
-            //单据体字段赋值
-            //发票类型
-            entry.set("invoicetype",invoicetype);
-            //发票代码
-            entry.set("invoicecode", invoicecode);
-            //发票号码
-            entry.set("invoiceno", invoiceno);
-            //行程单/火车票
-            entry.set("flightitineraryandtrain",flightitineraryandtrain.equals("0100") || flightitineraryandtrain.equals("0200"));
-            //价税合计
-            entry.set("totalamount", totalamount);
-            //税额
-            entry.set("taxamount_invoice", taxamount_invoice);
-            //结算单号
-            entry.set("checkingbillno", checkingbillno);
-            //旅客
-            entry.set("passengername", passengername);
-            //出发地
-            entry.set("invoicefromcity", invoicefromcity);
-            //目的地
-            entry.set("invoicetocity", invoicetocity);
-            //收票公司
-            entry.set("buyerorgname", buyerorgname);
-            //开票公司
-            entry.set("makeoutcompname", makeoutcompname);
-            //下载地址
-            entry.set("downloadurl", downloadurl);
-            //电子客票号
-            entry.set("ticketno", ticketno);
-            //订单类型
-            entry.set("orderstatus",orderstatus);
-            //测试
+            if (CollectionUtils.isEmpty(resultInvoiceLists)){
+                log.info("结算单号:"+checkingbillno+"未查询到发票数据");
+                ids.add(dynamicBillObj);
+                continue;
+            }
+            for (Map<String, Object> resultInvoiceList : resultInvoiceLists){
+                //单据体新增一行
+                DynamicObject entry =entryEntity.addNew();
+                //单据体字段赋值
+                String invoice = getInvoiceType(resultInvoiceList);
+                entry.set("invoicetype",invoice);
+                //发票代码
+                entry.set("invoicecode", resultInvoiceList.get("invoiceCode"));
+                //发票号码
+                entry.set("invoiceno", resultInvoiceList.get("invoiceNumber"));
+                //行程单/火车票
+                entry.set("flightitineraryandtrain",flightitineraryandtrain.equals("0100") || flightitineraryandtrain.equals("0200"));
+                //价税合计
+                entry.set("totalamount", resultInvoiceList.get("invoiceAmount"));
+                //税额
+                entry.set("taxamount_invoice", resultInvoiceList.get("invoiceTax"));
+                //结算单号
+                entry.set("checkingbillno", checkingbillno);
+                //旅客
+                entry.set("passengername", passengername);
+                //出发地
+                entry.set("invoicefromcity", invoicefromcity);
+                //目的地
+                entry.set("invoicetocity", invoicetocity);
+                //收票公司
+                entry.set("buyerorgname", buyerorgname);
+                //开票公司
+                entry.set("makeoutcompname", makeoutcompname);
+                //下载地址
+                entry.set("downloadurl", resultInvoiceList.get("invoiceUrl"));
+                //电子客票号
+                entry.set("ticketno", ticketno);
+                //订单类型
+                entry.set("orderstatus",orderstatus);
+                //测试
 //            entry.set("orderstatus","O");
 //            entry.set("orderstatus","O");
-            //内部下载地址
-            entry.set("innerdownloadurl", innerdownloadurl);
-            //出发时间
-            entry.set("departtime", departtime);
-            //航班号/车次号
-            entry.set("number", number);
-            //保存
-            SaveServiceHelper.save(new DynamicObject[]{dynamicBillObj});
+                //内部下载地址
+                entry.set("innerdownloadurl", resultInvoiceList.get("invoiceUrl"));
+                //出发时间
+                entry.set("departtime", departtime);
+                //航班号/车次号
+                entry.set("number", number);
+                //保存
+                ids.add(dynamicBillObj);
+            }
+        }
+        SaveServiceHelper.save(ids.toArray(new DynamicObject[0]));
+    }
+
+    private static @NotNull String getInvoiceType(Map<String, Object> resultInvoiceList) {
+        //发票类型
+        String invoice= "";
+        if (ObjectUtils.isNotEmpty(resultInvoiceList.get("invoiceType"))){
+            switch (resultInvoiceList.get("invoiceType").toString()){
+                case "air_ticket":
+                case "air_e_ticket":
+                    //行程单
+                    invoice = "4";
+                    break;
+                case "e_vat_invoice":
+                    //全电发票(普票)
+                    invoice = "9";
+                    break;
+                case "e_vats_invoice":
+                    //全电发票(专票)
+                    invoice = "8";
+                    break;
+                case "quota_invoice":
+                    //定额发票
+                    invoice = "6";
+                    break;
+                case "train_ticket":
+                case "train_ticket_refund":
+                    //火车票/退票
+                    invoice = "5";
+                    break;
+                case "vat_invoice":
+                    //增值税普通发票
+                    invoice = "2";
+                    break;
+                case "vate_invoice":
+                    //增值税电子普通发票
+                    invoice = "1";
+                    break;
+                case "vats_invoice":
+                    //增值税专用发票
+                    invoice = "3";
+                    break;
+                case "railway_e_ticket":
+                case "railway_e_ticket_re":
+                    //铁路电子客票
+                    //铁路电子客票退票
+                    invoice = "29";
+                    break;
+                default:
+                    invoice = "999";
+            };
         }
         }
+        return invoice;
     }
     }
+
     /**
     /**
      * @return 获取月结账单列表
      * @return 获取月结账单列表
      */
      */
@@ -285,6 +386,44 @@ public class MonthlySettlementBillTask extends AbstractTask {
         return dataList;
         return dataList;
     }
     }
 
 
+    /**
+     * @return 获取发票明细
+     */
+    private List<Map<String, Object>> getInvoiceResult(Object checkingBillNo,Object rebookingTime) {
+        List<Map<String, Object>> dataList = new ArrayList<>();
+        if (Objects.isNull(rebookingTime) || Objects.isNull(checkingBillNo)) {
+            return dataList;
+        }
+        for (int i = 0; i < totalPage; i++) {
+            //创建接口业务数据参数
+            Map<String, Object> data = new HashMap<>();
+            //当前页
+            data.put("current", i + 1);
+            //每页条数,最多500条
+            data.put("size", size);
+            //结算单号
+            data.put("settlementNo", checkingBillNo.toString());
+            //账期
+            data.put("paymentDays", parseStringToDateWithSdfMonth(rebookingTime.toString()));
+            //企业编号
+            data.put("enterpriseNo","JXWL");
+            Map<String, Object> resp = TripSyncUtils.pushApiCallResult("FCSET_OUTAPI_GetInvoice", Boolean.TRUE, data);
+            //报错终止同步,等待下次计划执行
+            if ((Boolean) resp.get("fail")) {
+                throw new KDBizException(resp.get("message").toString());
+            }
+            Map<String, Object> result = (Map<String, Object>) resp.get("result");
+            List<Map<String, Object>> resultDataList = (List<Map<String, Object>>) result.getOrDefault("invoices", Collections.emptyList());
+            dataList.addAll(resultDataList);
+
+            //当前查询数量小于分页数量时结束循环
+            if (resultDataList.size() < size) {
+                break;
+            }
+        }
+        return dataList;
+    }
+
     /**
     /**
      * @return 获取同步开始时间
      * @return 获取同步开始时间
      */
      */