소스 검색

20190627dev

suochencheng 6 년 전
부모
커밋
6179ff09d3
60개의 변경된 파일7838개의 추가작업 그리고 76개의 파일을 삭제
  1. 63 76
      src/main/java/com/izouma/awesomeadmin/constant/AppConstant.java
  2. 33 0
      src/main/java/com/izouma/awesomeadmin/dao/ProductInfoMapper.java
  3. 799 0
      src/main/java/com/izouma/awesomeadmin/dao/ProductInfoMapper.xml
  4. 277 0
      src/main/java/com/izouma/awesomeadmin/model/ProductInfo.java
  5. 27 0
      src/main/java/com/izouma/awesomeadmin/service/ProductInfoService.java
  6. 137 0
      src/main/java/com/izouma/awesomeadmin/service/impl/ProductInfoServiceImpl.java
  7. 439 0
      src/main/java/com/izouma/awesomeadmin/tuniu/common/DateUtil.java
  8. 200 0
      src/main/java/com/izouma/awesomeadmin/tuniu/common/SendHttpRequest.java
  9. 7 0
      src/main/java/com/izouma/awesomeadmin/tuniu/common/URLConfig.java
  10. 76 0
      src/main/java/com/izouma/awesomeadmin/tuniu/constants/DomesticFlightUrl.java
  11. 61 0
      src/main/java/com/izouma/awesomeadmin/tuniu/demo/CommonApiDemo.java
  12. 206 0
      src/main/java/com/izouma/awesomeadmin/tuniu/demo/DemoMain.java
  13. 564 0
      src/main/java/com/izouma/awesomeadmin/tuniu/demo/DomesticFlightDemo.java
  14. 224 0
      src/main/java/com/izouma/awesomeadmin/tuniu/demo/DomesticHotelDemo.java
  15. 340 0
      src/main/java/com/izouma/awesomeadmin/tuniu/demo/InternationalFlightDemo.java
  16. 56 0
      src/main/java/com/izouma/awesomeadmin/tuniu/demo/MyDemoMain.java
  17. 286 0
      src/main/java/com/izouma/awesomeadmin/tuniu/demo/TicketDemo.java
  18. 220 0
      src/main/java/com/izouma/awesomeadmin/tuniu/demo/ToursDemo.java
  19. 50 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Contact.java
  20. 59 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Delivery.java
  21. 68 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/CalendarDto.java
  22. 32 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/CancelOrderDto.java
  23. 46 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/CheckCabinAndPriceDto.java
  24. 25 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/CheckCharacterDto.java
  25. 98 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/CreateOrderDto.java
  26. 64 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/InquiryDto.java
  27. 89 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/OnewaySpecialDto.java
  28. 23 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/OrderDto.java
  29. 123 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/QueryFareRemarkDto.java
  30. 59 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/QueryRefundFeeDto.java
  31. 35 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/RefundOrderDto.java
  32. 59 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/SubmitOrderDto.java
  33. 117 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/TwowaySpecialDto.java
  34. 68 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/FareBreakDown.java
  35. 40 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/FeeInfo.java
  36. 95 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/FlightCabin.java
  37. 294 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/FlightSeg.java
  38. 59 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/InsuranceInfo.java
  39. 25 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/JourneyCabin.java
  40. 100 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/JourneyPrice.java
  41. 25 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/JourneySeg.java
  42. 40 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Passenger.java
  43. 120 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Person.java
  44. 77 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Resource.java
  45. 71 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/RuleInfo.java
  46. 102 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/SaleControl.java
  47. 41 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Segment.java
  48. 68 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/StopPoint.java
  49. 67 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Ticket.java
  50. 33 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Tourist.java
  51. 72 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/TouristList.java
  52. 34 0
      src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Weeks.java
  53. 163 0
      src/main/java/com/izouma/awesomeadmin/tuniu/util/SigntrueUtil.java
  54. 22 0
      src/main/java/com/izouma/awesomeadmin/tuniu/util/TestSignature.java
  55. 178 0
      src/main/java/com/izouma/awesomeadmin/web/ProductInfoController.java
  56. 111 0
      src/main/java/com/izouma/awesomeadmin/web/TuNiuOpenApiController.java
  57. 3 0
      src/main/resources/properties/outsidews.properties
  58. 214 0
      src/main/vue/src/pages/ProductInfo.vue
  59. 744 0
      src/main/vue/src/pages/ProductInfos.vue
  60. 10 0
      src/main/vue/src/router/index.js

+ 63 - 76
src/main/java/com/izouma/awesomeadmin/constant/AppConstant.java

@@ -8,21 +8,6 @@ package com.izouma.awesomeadmin.constant;
 public interface AppConstant {
 public interface AppConstant {
 
 
 
 
-//    /**
-//     * 商户号
-//     */
-//    String MCH_ID = "1379284802";
-//
-//    /**
-//     * 子商户号
-//     */
-//    String SUB_MCH_ID = "";
-//
-//    /**
-//     * 商户密钥
-//     */
-//    String MCH_SECRET = "R4q0yoo5GXh9A3CDiKJ6v7hgiE0aT0rM";
-
     /**
     /**
      * 货币类型
      * 货币类型
      */
      */
@@ -48,35 +33,6 @@ public interface AppConstant {
      */
      */
     String DEVICE_INFO = "WEB";
     String DEVICE_INFO = "WEB";
 
 
-//    /**
-//     * 标题
-//     */
-//    String BODY = "工蜂家服产品";
-//
-//    /**
-//     * 标题
-//     */
-//    String BODY_RECHARGE = "工蜂家服充值";
-//
-//    /**
-//     * 通知地址
-//     */
-//    String NOTIFY_URL = "http://www.gfjiafu.com/wxpay/notify";
-//
-//    /**
-//     * 通知地址
-//     */
-//    String GXNOTIFY_URL = "http://www.gfjiafu.com/GXwxpay/notify";
-//
-//    /**
-//     * 通知地址
-//     */
-//    String NOTIFY_URL_RECHARGE = "http://www.gfjiafu.com/wxpay/notifyRecharge";
-//
-//    /**
-//     * 商户名称
-//     */
-//    String SEND_NAME = "工蜂家服";
 
 
     String PAGE = "page";
     String PAGE = "page";
 
 
@@ -86,23 +42,23 @@ public interface AppConstant {
         /**
         /**
          * 支付宝
          * 支付宝
          */
          */
-        Integer ALIPAY = 0;
+        int ALIPAY = 0;
 
 
         /**
         /**
          * 微信
          * 微信
          */
          */
-        Integer WEI_XIN = 1;
+        int WEI_XIN = 1;
 
 
         /**
         /**
          * 电子币
          * 电子币
          */
          */
-        Integer COIN = 2;
+        int COIN = 2;
 
 
 
 
         /**
         /**
          * 第三方支付
          * 第三方支付
          */
          */
-        Integer AG_PAY = 3;
+        int AG_PAY = 3;
 
 
     }
     }
 
 
@@ -111,17 +67,17 @@ public interface AppConstant {
         /**
         /**
          * 产品抵扣
          * 产品抵扣
          */
          */
-        Integer DISCOUNT = 0;
+        int DISCOUNT = 0;
 
 
         /**
         /**
          * 任务
          * 任务
          */
          */
-        Integer TASK = 1;
+        int TASK = 1;
 
 
         /**
         /**
          * 充值
          * 充值
          */
          */
-        Integer RECHARGE = 2;
+        int RECHARGE = 2;
     }
     }
 
 
     public interface OrderStatus {
     public interface OrderStatus {
@@ -129,60 +85,60 @@ public interface AppConstant {
         /**
         /**
          * 下单,待付款
          * 下单,待付款
          */
          */
-        Integer NO_PAY = 0;
+        int NO_PAY = 0;
 
 
         /**
         /**
          * 支付完成,待上传原图、代发货
          * 支付完成,待上传原图、代发货
          */
          */
-        Integer PAY_OVER = 1;
+        int PAY_OVER = 1;
 
 
         /**
         /**
          * 待修图、已发货
          * 待修图、已发货
          */
          */
-        Integer WAIT_REPAIR = 2;
+        int WAIT_REPAIR = 2;
 
 
         /**
         /**
          * 修图完成待验收、
          * 修图完成待验收、
          */
          */
-        Integer ACCEPT = 3;
+        int ACCEPT = 3;
 
 
         /**
         /**
          * 验收不通过,待返修
          * 验收不通过,待返修
          */
          */
-        Integer REWORK = 4;
+        int REWORK = 4;
 
 
 
 
         /**
         /**
          * 验收完成待评论、已收货待评论
          * 验收完成待评论、已收货待评论
          */
          */
-        Integer FINISH = 5;
+        int FINISH = 5;
 
 
         /**
         /**
          * 结束
          * 结束
          */
          */
-        Integer END = 6;
+        int END = 6;
 
 
 
 
         /**
         /**
          * 退款中
          * 退款中
          */
          */
-        Integer REFUNDING = 7;
+        int REFUNDING = 7;
 
 
         /**
         /**
          * 已经取消
          * 已经取消
          */
          */
-        Integer CANCEL = 8;
+        int CANCEL = 8;
 
 
 
 
         /**
         /**
          * 退款失败
          * 退款失败
          */
          */
-        Integer REFUND_FAIL = 9;
+        int REFUND_FAIL = 9;
 
 
         /**
         /**
          * 退款成功
          * 退款成功
          */
          */
-        Integer REFUND_SUCCESS = 10;
+        int REFUND_SUCCESS = 10;
 
 
 
 
     }
     }
@@ -200,49 +156,49 @@ public interface AppConstant {
         /**
         /**
          * 充值
          * 充值
          */
          */
-        Integer RECHARGE = 0;
+        int RECHARGE = 0;
 
 
         /**
         /**
          * 消费
          * 消费
          */
          */
-        Integer CONSUMPTION = 1;
+        int CONSUMPTION = 1;
 
 
         /**
         /**
          * 兑换
          * 兑换
          */
          */
-        Integer EXCHANGE = 2;
+        int EXCHANGE = 2;
 
 
         /**
         /**
          * 提现
          * 提现
          */
          */
-        Integer CASH = 3;
+        int CASH = 3;
 
 
         /**
         /**
          * 税收
          * 税收
          */
          */
-        Integer TAXES = 4;
+        int TAXES = 4;
 
 
 
 
         /**
         /**
          * 销售
          * 销售
          */
          */
-        Integer SALE = 5;
+        int SALE = 5;
 
 
         /**
         /**
          * 返还
          * 返还
          */
          */
-        Integer FAN_HUAN = 6;
+        int FAN_HUAN = 6;
 
 
 
 
         /**
         /**
          * 退款
          * 退款
          */
          */
-        Integer REFUND = 7;
+        int REFUND = 7;
 
 
         /**
         /**
          * 赠送
          * 赠送
          */
          */
-        Integer SONG = 8;
+        int SONG = 8;
 
 
     }
     }
 
 
@@ -271,17 +227,17 @@ public interface AppConstant {
         /**
         /**
          * typeFlag, 购买,订单付款
          * typeFlag, 购买,订单付款
          */
          */
-        Integer BUY = 0;
+        int BUY = 0;
 
 
         /**
         /**
          * typeFlag,充值
          * typeFlag,充值
          */
          */
-        Integer RECHARGE = 1;
+        int RECHARGE = 1;
 
 
         /**
         /**
          * 押金
          * 押金
          */
          */
-        Integer CASH_PLEDGE = 2;
+        int CASH_PLEDGE = 2;
 
 
     }
     }
 
 
@@ -293,11 +249,42 @@ public interface AppConstant {
         /**
         /**
          * 减免
          * 减免
          */
          */
-        Integer REDUCTION = 1;
+        int REDUCTION = 1;
 
 
         /**
         /**
          * 折扣
          * 折扣
          */
          */
-        Integer DISCOUNT = 2;
+        int DISCOUNT = 2;
+    }
+
+    /**
+     * 产品类型
+     */
+    public interface ProductType {
+
+        /**
+         * 门票
+         */
+        int TICKET = 0;
+
+        /**
+         * 导航包
+         */
+        int NAVIGATION_PACKAGE = 1;
+
+        /**
+         * 兑换券,实物券
+         */
+        int EXCHANGE_VOUCHERS = 2;
+
+        /**
+         * 优惠券
+         */
+        int COUPON = 3;
+
+        /**
+         * 组合商品
+         */
+        int COMPOSITE = 4;
     }
     }
 }
 }

+ 33 - 0
src/main/java/com/izouma/awesomeadmin/dao/ProductInfoMapper.java

@@ -0,0 +1,33 @@
+package com.izouma.awesomeadmin.dao;
+
+import java.util.*;
+import com.izouma.awesomeadmin.datasource.DataSource;
+import org.springframework.stereotype.Repository;
+import com.izouma.awesomeadmin.model.ProductInfo;
+
+
+/**
+*  Dao接口
+*/
+@Repository("com.zoumaframe.dao.ProductInfoMapper")
+public interface ProductInfoMapper{
+
+    int deleteByPrimaryKey(Integer id);
+
+    int insertSelective(ProductInfo record);
+
+    ProductInfo selectByPrimaryKey(Integer id);
+
+    int updateByPrimaryKeySelective(ProductInfo record);
+
+    List<ProductInfo> queryAllProductInfo(ProductInfo record);
+
+    List<ProductInfo> queryProductInfoByPage(Map<String, Object> parameter);
+
+    int delete(ProductInfo record);
+
+    ProductInfo queryProductInfo(ProductInfo record);
+
+    List<ProductInfo> query(ProductInfo record);
+}
+

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 799 - 0
src/main/java/com/izouma/awesomeadmin/dao/ProductInfoMapper.xml


+ 277 - 0
src/main/java/com/izouma/awesomeadmin/model/ProductInfo.java

@@ -0,0 +1,277 @@
+package com.izouma.awesomeadmin.model;
+
+import java.math.BigDecimal;
+import java.util.*;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+
+@JsonAutoDetect
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ProductInfo{
+    private Integer id;
+    private String delFlag;
+    private Date updateTime;
+    private String updateUser;
+    private Date createTime;
+    private String createUser;
+    private Integer typeFlag;
+    private String useScope;
+    private Integer landmarkId;
+    private String productName;
+    private BigDecimal price;
+    private String image;
+    private String productContent;
+    private Integer stockNum;
+    private Integer limitNum;
+    private Date limitDate;
+    private String ticketId;
+    private String scenicId;
+    private String scenicName;
+    private String ticketName;
+    private String webPrice;
+    private String salePrice;
+    private String priceLowFlag;
+    private String remark;
+    private String shelfFlag;
+    private String packageIds;
+    private String productIds;
+
+private String idStr;
+
+private String searchKey;
+
+/**
+* and,test_name,like,value;or,remark,=,123
+*/
+private String advancedQuery;
+
+/**
+* column_name_,desc_;column_name_,asc
+*/
+private String orderByStr;
+
+    public Integer getId(){
+        return this.id;
+    }
+
+    public void setId(Integer id){
+        this.id = id;
+    }
+    public String getDelFlag(){
+        return this.delFlag;
+    }
+
+    public void setDelFlag(String delFlag){
+        this.delFlag = delFlag;
+    }
+    public Date getUpdateTime(){
+        return this.updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime){
+        this.updateTime = updateTime;
+    }
+    public String getUpdateUser(){
+        return this.updateUser;
+    }
+
+    public void setUpdateUser(String updateUser){
+        this.updateUser = updateUser;
+    }
+    public Date getCreateTime(){
+        return this.createTime;
+    }
+
+    public void setCreateTime(Date createTime){
+        this.createTime = createTime;
+    }
+    public String getCreateUser(){
+        return this.createUser;
+    }
+
+    public void setCreateUser(String createUser){
+        this.createUser = createUser;
+    }
+    public Integer getTypeFlag(){
+        return this.typeFlag;
+    }
+
+    public void setTypeFlag(Integer typeFlag){
+        this.typeFlag = typeFlag;
+    }
+    public String getUseScope(){
+        return this.useScope;
+    }
+
+    public void setUseScope(String useScope){
+        this.useScope = useScope;
+    }
+    public Integer getLandmarkId(){
+        return this.landmarkId;
+    }
+
+    public void setLandmarkId(Integer landmarkId){
+        this.landmarkId = landmarkId;
+    }
+    public String getProductName(){
+        return this.productName;
+    }
+
+    public void setProductName(String productName){
+        this.productName = productName;
+    }
+    public BigDecimal getPrice(){
+        return this.price;
+    }
+
+    public void setPrice(BigDecimal price){
+        this.price = price;
+    }
+    public String getImage(){
+        return this.image;
+    }
+
+    public void setImage(String image){
+        this.image = image;
+    }
+    public String getProductContent(){
+        return this.productContent;
+    }
+
+    public void setProductContent(String productContent){
+        this.productContent = productContent;
+    }
+    public Integer getStockNum(){
+        return this.stockNum;
+    }
+
+    public void setStockNum(Integer stockNum){
+        this.stockNum = stockNum;
+    }
+    public Integer getLimitNum(){
+        return this.limitNum;
+    }
+
+    public void setLimitNum(Integer limitNum){
+        this.limitNum = limitNum;
+    }
+    public Date getLimitDate(){
+        return this.limitDate;
+    }
+
+    public void setLimitDate(Date limitDate){
+        this.limitDate = limitDate;
+    }
+    public String getTicketId(){
+        return this.ticketId;
+    }
+
+    public void setTicketId(String ticketId){
+        this.ticketId = ticketId;
+    }
+    public String getScenicId(){
+        return this.scenicId;
+    }
+
+    public void setScenicId(String scenicId){
+        this.scenicId = scenicId;
+    }
+    public String getScenicName(){
+        return this.scenicName;
+    }
+
+    public void setScenicName(String scenicName){
+        this.scenicName = scenicName;
+    }
+    public String getTicketName(){
+        return this.ticketName;
+    }
+
+    public void setTicketName(String ticketName){
+        this.ticketName = ticketName;
+    }
+    public String getWebPrice(){
+        return this.webPrice;
+    }
+
+    public void setWebPrice(String webPrice){
+        this.webPrice = webPrice;
+    }
+    public String getSalePrice(){
+        return this.salePrice;
+    }
+
+    public void setSalePrice(String salePrice){
+        this.salePrice = salePrice;
+    }
+    public String getPriceLowFlag(){
+        return this.priceLowFlag;
+    }
+
+    public void setPriceLowFlag(String priceLowFlag){
+        this.priceLowFlag = priceLowFlag;
+    }
+    public String getRemark(){
+        return this.remark;
+    }
+
+    public void setRemark(String remark){
+        this.remark = remark;
+    }
+    public String getShelfFlag(){
+        return this.shelfFlag;
+    }
+
+    public void setShelfFlag(String shelfFlag){
+        this.shelfFlag = shelfFlag;
+    }
+    public String getPackageIds(){
+        return this.packageIds;
+    }
+
+    public void setPackageIds(String packageIds){
+        this.packageIds = packageIds;
+    }
+    public String getProductIds(){
+        return this.productIds;
+    }
+
+    public void setProductIds(String productIds){
+        this.productIds = productIds;
+    }
+
+public String getSearchKey() {
+    return searchKey;
+}
+
+public void setSearchKey(String searchKey) {
+    this.searchKey = searchKey;
+}
+
+public String getAdvancedQuery() {
+    return advancedQuery;
+}
+
+public void setAdvancedQuery(String advancedQuery) {
+    this.advancedQuery = advancedQuery;
+}
+
+public String getOrderByStr() {
+    return orderByStr;
+}
+
+public void setOrderByStr(String orderByStr) {
+    this.orderByStr = orderByStr;
+}
+
+public String getIdStr() {
+    return idStr;
+}
+
+public void setIdStr(String idStr) {
+    this.idStr = idStr;
+}
+
+}
+

+ 27 - 0
src/main/java/com/izouma/awesomeadmin/service/ProductInfoService.java

@@ -0,0 +1,27 @@
+package com.izouma.awesomeadmin.service;
+
+import java.util.*;
+import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.model.ProductInfo;
+
+
+/**
+*  service接口类
+*/
+public interface ProductInfoService{
+
+    List<ProductInfo> getProductInfoList(ProductInfo record);
+
+    List<ProductInfo> getProductInfoByPage(Page page, ProductInfo record);
+
+    ProductInfo getProductInfoById(String id);
+
+    ProductInfo getProductInfo(ProductInfo record);
+
+    boolean createProductInfo(ProductInfo record);
+
+    boolean deleteProductInfo(ProductInfo record);
+
+    boolean updateProductInfo(ProductInfo record);
+}
+

+ 137 - 0
src/main/java/com/izouma/awesomeadmin/service/impl/ProductInfoServiceImpl.java

@@ -0,0 +1,137 @@
+package com.izouma.awesomeadmin.service.impl;
+
+import java.util.*;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.izouma.awesomeadmin.constant.AppConstant;
+import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.model.ProductInfo;
+import com.izouma.awesomeadmin.service.ProductInfoService;
+import com.izouma.awesomeadmin.dao.ProductInfoMapper;
+
+/**
+*  service接口实现类
+*/
+@Service
+public class ProductInfoServiceImpl implements ProductInfoService{
+
+    private static Logger logger = Logger.getLogger(ProductInfoServiceImpl.class);
+
+    @Autowired
+    private ProductInfoMapper productInfoMapper;
+
+    @Override
+    public List<ProductInfo> getProductInfoList(ProductInfo record) {
+
+        logger.info("getProductInfoList");
+        try {
+
+        return productInfoMapper.queryAllProductInfo(record);
+        } catch (Exception e) {
+        logger.error("getProductInfoList", e);
+        }
+
+        return null;
+    }
+    @Override
+    public List<ProductInfo> getProductInfoByPage(Page page, ProductInfo record) {
+
+        logger.info("getProductInfoByPage");
+        try {
+
+        Map<String, Object> parameter = new HashMap<String, Object>();
+        parameter.put("record", record);
+        parameter.put(AppConstant.PAGE, page);
+
+        return productInfoMapper.queryProductInfoByPage(parameter);
+        } catch (Exception e) {
+        logger.error("getProductInfoByPage", e);
+        }
+
+        return null;
+    }
+
+    @Override
+    public ProductInfo getProductInfoById(String id) {
+
+        logger.info("getProductInfoyId");
+        try {
+
+            return productInfoMapper.selectByPrimaryKey(Integer.valueOf(id));
+        } catch (Exception e) {
+        logger.error("getProductInfoById", e);
+        }
+
+        return null;
+    }
+
+    @Override
+    public ProductInfo getProductInfo(ProductInfo record) {
+
+        logger.info("getProductInfo");
+        try {
+
+            return productInfoMapper.queryProductInfo(record);
+        } catch (Exception e) {
+        logger.error("getProductInfo", e);
+        }
+
+        return null;
+    }
+
+    @Override
+    public boolean createProductInfo(ProductInfo record) {
+
+        logger.info("createProductInfo");
+        try {
+
+            int updates = productInfoMapper.insertSelective(record);
+
+            if (updates > 0) {
+                 return true;
+            }
+        } catch (Exception e) {
+            logger.error("createProductInfo", e);
+        }
+
+        return false;
+    }
+
+    @Override
+    public boolean deleteProductInfo(ProductInfo record) {
+
+        logger.info("deleteProductInfo");
+        try {
+
+             int updates = productInfoMapper.delete(record);
+
+            if (updates > 0) {
+                 return true;
+            }
+        } catch (Exception e) {
+             logger.error("deleteProductInfo", e);
+        }
+
+        return false;
+    }
+
+    @Override
+    public boolean updateProductInfo(ProductInfo record) {
+
+        logger.info("updateProductInfo");
+        try {
+
+            int updates = productInfoMapper.updateByPrimaryKeySelective(record);
+
+            if (updates > 0) {
+                 return true;
+            }
+        } catch (Exception e) {
+             logger.error("updateProductInfo", e);
+        }
+
+        return false;
+    }
+}
+

+ 439 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/common/DateUtil.java

@@ -0,0 +1,439 @@
+package com.izouma.awesomeadmin.tuniu.common;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+public class DateUtil {
+
+	private static final String FORMAT_YYYY_MM_DD = "yyyy-MM-dd";
+	private static final String FORMAT_YYYYMMDD = "yyyyMMdd";
+	private static final String FORMAT_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
+	private static final String FORMAT_YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
+	private static final String FORMAT_YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
+	private static final String FORMAT_YYYYMMDD_HH_MM_SS = "yyyyMMdd HH:mm:ss";
+	private static String[] weeks = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
+
+	private final static SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+	public static String format(Date date) {
+		return format1.format(date);
+	}
+
+	public static Date dateFormat(String dateStr) throws ParseException {
+		SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_YYYY_MM_DD);
+		return sdf.parse(dateStr);
+	}
+
+	public static Date dateFormatCustom(String dateStr, String pattern) throws ParseException {
+		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
+		return sdf.parse(dateStr);
+	}
+
+	/**
+	 * 获取当前时间
+	 *
+	 * @return 当前的时间
+	 */
+	public static String getNow() {
+		SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_YYYY_MM_DD_HH_MM_SS, Locale.CHINA);
+		return sdf.format(DateUtil.getDate());
+	}
+
+	/**
+	 * 当前的时间
+	 *
+	 * @return 当前的时间
+	 */
+	public static Date getDate() {
+		return new Date();
+	}
+
+	/**
+	 * 当前的日期
+	 *
+	 * @return 当前的日期(2016-1-4)
+	 */
+	public static String getSimpleDate() {
+		return formatSimpleDate(getDate());
+	}
+
+	/**
+	 * 获取当前时间
+	 *
+	 * @return 当前的时间
+	 */
+	public static String getBeforDay(int n) {
+		SimpleDateFormat sp = new SimpleDateFormat(FORMAT_YYYY_MM_DD_HH_MM_SS);
+		Date date = getDate();
+		Calendar calendar = new GregorianCalendar();
+		calendar.setTime(date);
+		calendar.add(calendar.DATE, 0 - n);// 把日期往后增加一天.整数往后推,负数往前移动
+		date = calendar.getTime(); // 这个时间就是日期往后推一天的结果
+		return sp.format(date);
+	}
+
+	/**
+	 * 本年 或下一年  某月的起始区间
+	 *
+	 * @param month
+	 * @return
+	 */
+	public static Map<String, Date> getMonthDiff(int month) throws ParseException {
+		Calendar cal = Calendar.getInstance();
+		int currentYear = cal.get(Calendar.YEAR);
+		int currentMonth = cal.get(Calendar.MONTH);
+		if (month < currentMonth) {
+			currentYear = currentYear + 1;
+		}
+		Map<String, Date> map = new HashMap<>();
+		Date lastDate = getLastDayOfMonth(currentYear, month - 1);
+		Date firstDate = getFirstDayOfMonth(currentYear, month - 1);
+		SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_YYYY_MM_DD);
+		map.put("lastDate", parseDate(sdf.format(lastDate)));
+		map.put("firstDate", parseDate(sdf.format(firstDate)));
+		return map;
+	}
+
+	public static Date getLastDayOfMonth(int year, int month) {
+		Calendar cal = Calendar.getInstance();
+		cal.set(Calendar.YEAR, year);
+		cal.set(Calendar.MONTH, month);
+		cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
+		return cal.getTime();
+	}
+
+	public static Date getFirstDayOfMonth(int year, int month) {
+		Calendar cal = Calendar.getInstance();
+		cal.set(Calendar.YEAR, year);
+		cal.set(Calendar.MONTH, month);
+		cal.set(Calendar.DAY_OF_MONTH, cal.getMinimum(Calendar.DATE));
+		return cal.getTime();
+	}
+
+
+	/**
+	 * 获取当前时间,时区为;"Asia/Shanghai"
+	 *
+	 * @return
+	 */
+	public static String timestamp() {
+		String timestamp;
+		Calendar cal = Calendar.getInstance();
+		DateFormat dfm = new SimpleDateFormat(FORMAT_YYYYMMDDHHMMSS);
+		dfm.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
+		timestamp = dfm.format(cal.getTime());
+		return timestamp;
+	}
+
+	/**
+	 * 根据原来的时间(MONTH)获得相对偏移 N 月的时间
+	 *
+	 * @param protoDate                原来的时间(java.util.Date)
+	 * @param monthOffset(向前移正数,向后移负数)
+	 * @return 时间(java.util.Date)
+	 */
+	public static Date getOffsetMonthDate(Date protoDate, int monthOffset) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(protoDate);
+		cal.add(Calendar.MONTH, monthOffset);
+		return cal.getTime();
+	}
+
+
+	/**
+	 * 根据原来的时间(Date)获得相对偏移 N 天的时间(Date)
+	 *
+	 * @param protoDate              原来的时间(java.util.Date)
+	 * @param dayOffset(向前移正数,向后移负数)
+	 * @return 时间(java.util.Date)
+	 */
+	public static Date getOffsetDayDate(Date protoDate, int dayOffset) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(protoDate);
+		cal.add(Calendar.DATE, dayOffset);
+		return cal.getTime();
+	}
+
+	/**
+	 * 根据原来的时间(HOUR)获得相对偏移 N 小时的时间
+	 *
+	 * @param protoDate          原来的时间(java.util.Date)
+	 * @param hours(向前移正数,向后移负数)
+	 * @return 时间(java.util.Date)
+	 */
+	public static Date getOffsetHour(Date protoDate, int hours) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(protoDate);
+		cal.add(Calendar.HOUR, hours);
+		return cal.getTime();
+	}
+
+	/**
+	 * 根据原来的时间(MINUTE)获得相对偏移 N 分钟的时间
+	 *
+	 * @param protoDate            原来的时间(java.util.Date)
+	 * @param minutes(向前移正数,向后移负数)
+	 * @return 时间(java.util.Date)
+	 */
+	public static Date getOffsetMinute(Date protoDate, int minutes) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(protoDate);
+		cal.add(Calendar.MINUTE, minutes);
+		return cal.getTime();
+	}
+
+
+	/**
+	 * 根据原来的时间(MINUTE)获得相对偏移 N 分钟的时间
+	 *
+	 * @param protoDateStr         原来的时间(String)
+	 * @param minutes(向前移正数,向后移负数)
+	 * @return 时间(java.util.Date)
+	 */
+	public static String getOffsetMinute(String protoDateStr, int minutes) {
+		SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_YYYY_MM_DD_HH_MM_SS);
+		try {
+			Date protoDate = sdf.parse(protoDateStr);
+			Calendar cal = Calendar.getInstance();
+			cal.setTime(protoDate);
+			cal.add(Calendar.MINUTE, minutes);
+			return sdf.format(cal.getTime());
+		} catch (ParseException e) {
+		}
+		return null;
+	}
+
+	/**
+	 * 根据原来的时间(SECOND)获得相对偏移 N 秒的时间
+	 *
+	 * @param protoDate            原来的时间(java.util.Date)
+	 * @param seconds(向前移正数,向后移负数)
+	 * @return 时间(java.util.Date)
+	 */
+	public static Date getOffsetSecond(Date protoDate, int seconds) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(protoDate);
+		cal.add(Calendar.SECOND, seconds);
+		return cal.getTime();
+	}
+
+
+	/**
+	 * 设置时间
+	 *
+	 * @param protoDate 原来的时间(java.util.Date)
+	 * @param time
+	 * @return 时间(java.util.Date)
+	 */
+	public static Date setTime(Date protoDate, String time) throws ParseException {
+		String dateStr = formatSimpleDate(protoDate) + " " + time;
+		return parseDate(dateStr);
+	}
+
+	/**
+	 * 根据原来的时间(YEAR)获得相对偏移 N 年的时间
+	 *
+	 * @param protoDate               原来的时间(java.util.Date)
+	 * @param yearOffset(向前移正数,向后移负数)
+	 * @return 时间(java.util.Date)
+	 */
+	public static Date getOffsetYearDate(Date protoDate, int yearOffset) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(protoDate);
+		cal.add(Calendar.YEAR, yearOffset);
+		return cal.getTime();
+	}
+
+	/**
+	 * 根据原来的时间(Date)获得相对偏移 N 月的时间(Date)
+	 *
+	 * @param protoDate                原来的时间(java.util.Date)
+	 * @param yearOffset(向前移正数,向后移负数)
+	 * @param monthOffset(向前移正数,向后移负数)
+	 * @param dayOffset(向前移正数,向后移负数)
+	 * @return 时间(java.util.Date)
+	 */
+	public static Date getOffsetDate(Date protoDate, int yearOffset, int monthOffset, int dayOffset) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(protoDate);
+		cal.add(Calendar.YEAR, yearOffset);
+		cal.add(Calendar.MONTH, monthOffset);
+		cal.add(Calendar.DATE, dayOffset);
+		return cal.getTime();
+	}
+
+
+	/**
+	 * 将字符串转换为Date类型
+	 *
+	 * @param str
+	 * @return
+	 */
+	public static Date stringToDate(String str) throws ParseException {
+		return new SimpleDateFormat(FORMAT_YYYY_MM_DD_HH_MM_SS).parse(str);
+	}
+
+	/**
+	 * 格式化字符串,解决从MySql中查出来的数据后面多了0的问题
+	 *
+	 * @param date
+	 * @return
+	 */
+	public static String formatDate(Date date) {
+		return new SimpleDateFormat(FORMAT_YYYY_MM_DD_HH_MM_SS).format(date);
+	}
+
+	/**
+	 * 格式化字符串(yyyy-MM-dd)
+	 *
+	 * @param date
+	 * @return
+	 */
+	public static String formatSimpleDate(Date date) {
+		return new SimpleDateFormat(FORMAT_YYYY_MM_DD).format(date);
+	}
+
+
+	public static Date parseDate(String str) throws ParseException {
+		return org.apache.commons.lang3.time.DateUtils.parseDate(str, new String[]{FORMAT_YYYY_MM_DD, FORMAT_YYYYMMDD, FORMAT_YYYY_MM_DD_HH_MM_SS, FORMAT_YYYYMMDDHHMMSS, FORMAT_YYYYMMDD_HH_MM_SS});
+	}
+
+	public static boolean isDate(String dateStr) {
+		String eL = "^(((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/])(10|12|0?[13578])([-\\/])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/])(11|0?[469])([-\\/])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/])(0?2)([-\\/])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\\/])(0?2)([-\\/])(29)$)|(^([3579][26]00)([-\\/])(0?2)([-\\/])(29)$)|(^([1][89][0][48])([-\\/])(0?2)([-\\/])(29)$)|(^([2-9][0-9][0][48])([-\\/])(0?2)([-\\/])(29)$)|(^([1][89][2468][048])([-\\/])(0?2)([-\\/])(29)$)|(^([2-9][0-9][2468][048])([-\\/])(0?2)([-\\/])(29)$)|(^([1][89][13579][26])([-\\/])(0?2)([-\\/])(29)$)|(^([2-9][0-9][13579][26])([-\\/])(0?2)([-\\/])(29))|(((((0[13578])|([13578])|(1[02]))[\\-\\/\\s]?((0[1-9])|([1-9])|([1-2][0-9])|(3[01])))|((([469])|(11))[\\-\\/\\s]?((0[1-9])|([1-9])|([1-2][0-9])|(30)))|((02|2)[\\-\\/\\s]?((0[1-9])|([1-9])|([1-2][0-9]))))[\\-\\/\\s]?\\d{4})(\\s(((0[1-9])|([1-9])|(1[0-2]))\\:([0-5][0-9])((\\s)|(\\:([0-5][0-9])\\s))([AM|PM|am|pm]{2,2})))";
+		Pattern p = Pattern.compile(eL);
+		Matcher m = p.matcher(dateStr);
+		return m.matches();
+	}
+
+
+	public static int compareDate(Date from, Date to) {
+		return from.compareTo(to);
+	}
+
+	/**
+	 * 偏移比较时间
+	 *
+	 * @param fromStr
+	 * @param toStr
+	 * @param hour
+	 * @return
+	 */
+	public static int compareDate(String fromStr, String toStr, int hour) {
+		SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_YYYY_MM_DD_HH_MM);
+		try {
+			Date fromDate = sdf.parse(fromStr);
+			Date offsetDate = getOffsetHour(fromDate, hour);
+			Date toDate = sdf.parse(toStr);
+			return offsetDate.compareTo(toDate);
+		} catch (ParseException e) {
+		}
+		return -1;
+	}
+
+	public static long getCurrentDateDiff(String dateStr) throws ParseException {
+		Date date = parseDate(dateStr);
+		long diff = getDate().getTime() - date.getTime();
+		return diff / 1000;
+	}
+
+	public static String dateToString(Date date, String format) {
+		SimpleDateFormat sdf = new SimpleDateFormat(format);
+		return sdf.format(date);
+	}
+
+	/**
+	 * 根据出发日期,和产品详情中的"day ":(Integer)行程天数,算出每次行程的出发日期。
+	 * 例如输入 2015-12-20,13 输出 2016-01-01
+	 *
+	 * @param departDateStr 出发日期
+	 * @param day           行程天数
+	 * @return
+	 */
+	public static String getStartDate(String departDateStr, int day) {
+		SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_YYYY_MM_DD);
+		try {
+			Date departDate = sdf.parse(departDateStr);
+			Calendar cal = Calendar.getInstance();
+			cal.setTime(departDate);
+			cal.add(Calendar.DATE, day - 1);
+			return new SimpleDateFormat(FORMAT_YYYY_MM_DD).format(cal.getTime());
+		} catch (ParseException e) {
+		}
+		return null;
+	}
+
+	public static String getWeekFromDate(Date date) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(date);
+		int weekIndex = cal.get(Calendar.DAY_OF_WEEK) - 1;
+		if (weekIndex < 0) {
+			weekIndex = 0;
+		}
+		return weeks[weekIndex];
+	}
+
+	/**
+	 * 将日期加指定天数
+	 *
+	 * @param departDateStr
+	 * @param day
+	 * @return
+	 */
+	public static String addDateByDays(String departDateStr, int day) {
+
+		SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_YYYY_MM_DD);
+		try {
+			Date departDate = sdf.parse(departDateStr);
+			Calendar cal = Calendar.getInstance();
+			cal.setTime(departDate);
+			cal.add(Calendar.DATE, day);
+			return new SimpleDateFormat(FORMAT_YYYY_MM_DD).format(cal.getTime());
+		} catch (ParseException e) {
+		}
+		return null;
+	}
+
+
+	/**
+	 * 计算两个日期之间相差的天数
+	 *
+	 * @param smdate 较小的时间
+	 * @param bdate  较大的时间
+	 * @return 相差天数
+	 * @throws ParseException
+	 */
+	public static int daysBetween(Date smdate, Date bdate) throws ParseException {
+		SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_YYYY_MM_DD);
+		Date sm = sdf.parse(sdf.format(smdate));
+		Date bd = sdf.parse(sdf.format(bdate));
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(sm);
+		long time1 = cal.getTimeInMillis();
+		cal.setTime(bd);
+		long time2 = cal.getTimeInMillis();
+		long betweenDays = (time2 - time1) / (1000 * 3600 * 24);
+
+		return Integer.parseInt(String.valueOf(betweenDays));
+	}
+
+	/**
+	 * 字符串的日期格式的计算
+	 */
+	public static Integer daysBetween(String smdate, String bdate) throws ParseException {
+		SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_YYYY_MM_DD);
+		Calendar cal = Calendar.getInstance();
+		cal.setTime(sdf.parse(smdate));
+		long time1 = cal.getTimeInMillis();
+		cal.setTime(sdf.parse(bdate));
+		long time2 = cal.getTimeInMillis();
+		long betweenDays = (time2 - time1) / (1000 * 3600 * 24);
+
+		return Integer.parseInt(String.valueOf(betweenDays));
+	}
+
+}

+ 200 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/common/SendHttpRequest.java

@@ -0,0 +1,200 @@
+package com.izouma.awesomeadmin.tuniu.common;
+
+import com.alibaba.fastjson.JSONObject;
+import com.izouma.awesomeadmin.tuniu.util.SigntrueUtil;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.ProtocolException;
+import java.net.URL;
+import java.util.Date;
+import java.util.Map;
+import java.util.logging.Logger;
+
+
+/**
+ * 2016-12-06 http请求调用
+ *
+ * @author tengyong
+ */
+public class SendHttpRequest {
+    private static final Logger logger = Logger.getLogger("SendHttpRequest");
+
+    /**
+     * get连接请求
+     *
+     * @param url 完整url
+     * @return
+     */
+    public static String sendGetConn(String url, Map<String, Object> paramsMap) {
+
+        try {
+
+            // 获取签名参数字符串
+//			String params = createUrlStr(paramsMap, apiKey, secretKey);
+//			if(params == null){
+//				System.out.println("***********  error message  ************");
+//				System.out.println("创建签名参数字符串失败。");
+//				return null;
+//			}
+
+            String params = "";
+            for (Map.Entry<String, Object> entry : paramsMap.entrySet()) {
+                params += (entry.getKey() + "=" + entry.getValue() + "&");
+            }
+
+            if (!params.equals("")) {
+                url += ("?" + params.substring(0, params.length() - 1));
+            }
+
+            System.out.println(url);
+
+            URL getUrl = new URL(url);
+
+            HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection();
+            // 编码
+            connection.setRequestProperty("contentType", "UTF-8");
+            // 请求超时,10秒
+            connection.setConnectTimeout(10 * 1000);
+            //
+            connection.setRequestMethod("GET");
+
+            connection.connect();
+            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
+
+            String lines;
+            while ((lines = reader.readLine()) != null) {
+                System.out.println(lines);
+            }
+            reader.close();
+            connection.disconnect();
+
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    /**
+     * post连接请求
+     *
+     * @param url 完整的url
+     * @return
+     */
+    public static String sendPostConn(String url, Object param, String apiKey, String secretKey) {
+        logger.info(url);
+        try {
+            // 获取签名参数字符串
+            String params = createUrlStr(param, apiKey, secretKey);
+            if (params == null) {
+                logger.warning("创建签名参数字符串失败。");
+                return null;
+            }
+
+            // 发送请求
+            URL postUrl = new URL(url);
+            HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();
+            connection.setDoOutput(true);
+            connection.setDoInput(true);
+            connection.setRequestMethod("POST");
+            connection.setRequestProperty("contentType", "UTF-8");
+            connection.setUseCaches(false);
+            connection.setInstanceFollowRedirects(true);
+            connection.setRequestProperty("Content-Type", "application/json");
+
+            connection.connect();
+
+            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "utf-8");
+
+            logger.info(params);
+            out.write(params);
+
+            out.flush();
+            out.close();
+
+            // 获取接口返回结果
+            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
+
+            StringBuffer result = new StringBuffer("");
+            String line;
+            while ((line = reader.readLine()) != null) {
+                result.append(line);
+            }
+            reader.close();
+            connection.disconnect();
+
+            // 返回结果
+            if("".equals(result.toString())){
+                logger.warning("获取返回接口失败");
+                return null;
+            } else {
+                logger.info("获取返回结果成功:\r\n" + result.toString());
+                return result.toString();
+            }
+        } catch (MalformedURLException e) {
+            logger.warning("请确认请求的URL地址是否正确");
+            e.printStackTrace();
+        } catch (ProtocolException e) {
+            logger.warning("设置请求类型错误,确认是否是POST请求?");
+            e.printStackTrace();
+        } catch (IOException e) {
+            logger.warning("访问地址不可用。");
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 创建签名后的url
+     *
+     * @param param
+     * @param apiKey
+     * @param secretKey
+     * @return
+     */
+    private static String createUrlStr(Object param, String apiKey, String secretKey) {
+
+
+        // 组织数据格式,获取签名
+        JSONObject temp = new JSONObject();
+
+        if (apiKey != null && !"".equals(apiKey)) {
+            temp.put("apiKey", apiKey);
+        } else {
+            logger.warning("apiKey 不能为空。");
+            return null;
+        }
+
+        if (secretKey != null && !"".equals(secretKey)) {
+
+        } else {
+            logger.warning("密钥[secretKey]不能为空。");
+            return null;
+        }
+
+        temp.put("timestamp", DateUtil.format(new Date()));
+
+        temp.put("data", param);
+
+        try {
+            // 签名后的url
+            String params = SigntrueUtil.getSignature(JSONObject.parseObject(JSONObject.toJSONString(temp)), secretKey);
+            logger.info("***********  获取签名成功   ************");
+            logger.info(params);
+            temp.put("sign", params);
+        } catch (Exception e) {
+            logger.warning("***********  获取签名异常   ************\n" + e);
+        }
+
+        return JSONObject.toJSONString(temp);
+    }
+
+
+}

+ 7 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/common/URLConfig.java

@@ -0,0 +1,7 @@
+package com.izouma.awesomeadmin.tuniu.common;
+
+public class URLConfig {
+
+    public final static String URL = "https://doptest-api.dfyoo.com/";
+    //public final static String URL = "http://172.31.2.45:8080/";
+}

+ 76 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/constants/DomesticFlightUrl.java

@@ -0,0 +1,76 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.constants;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class DomesticFlightUrl {
+
+    public static final String API_KEY = "jdtest";
+    public static final String SECRE_KEY = "aaaaaaaa";
+
+    public static final String BUSINESS_CODE = "DomesticFlight";
+    public static final String OUTER_PATH = "/" + BUSINESS_CODE;
+
+    //3.1	航班查询接口
+    public static final String QUERY_OUTER_PATH = "/inquiry";
+
+    //3.2	验舱验价接口
+    public static final String CHECK_OUTER_PATH = "/checkCabinAndPrice";
+
+    //3.3	退改签查询接口
+    public static final String QUERYFARE_OUTER_PATH = "/queryFareRemark";
+
+    //3.4	保险方案查询接口
+    public static final String INSURANCE_OUTER_PATH = "/insurance";
+
+    //4.1	创建订单接口
+    public static final String CREATEORDER_OUTER_PATH = "/createOrder";
+
+
+    //4.2	取消订单接口
+    public static final String CANCELORDER_OUTER_PATH = "/cancelOrder";
+
+
+    //4.3	提交订单(出票)接口
+    public static final String SUBMITORDER_OUTER_PATH = "/submitOrder";
+
+
+    //4.4	订单详情接口
+    public static final String ORDERDETAIL_OUTER_PATH = "/orderDetail";
+
+    //4.5	订单状态查询接口
+    public static final String ORDERSTATUS_OUTER_PATH = "/orderStatus";
+
+    //5.1	退票费查询接口
+    public static final String QUERYREFUNDFEE_OUTER_PATH = "/queryRefundFee";
+
+    //5.2	退票接口
+    public static final String REFUNDORDER_OUTER_PATH = "/refundOrder";
+
+    //5.2	日历接口
+    public static final String CALENDAR_OUTER_PATH = "/calendar";
+
+    //5.2	ATD特惠机票单程查询接口
+    public static final String ONEWAY_SPECIAL_OUTER_PATH = "/onewaySpecial";
+
+    //5.2	ATD特惠机票推荐往返查询接口
+    public static final String TWOWAY_SPECIAL_OUTER_PATH = "/twowaySpecial";
+
+    //6.2	航变处理接口
+    public static final String DOAIRCHANGE_OUTER_PATH = "/doAirChange";
+
+    //6.3	生僻字校验接口
+    public static final String CHECKCHARACTER_OUTER_PATH = "/checkCharacter";
+
+    //6.4	航变查询接口
+    public static final String CHANGEDETAIL_OUTER_PATH = "/changeDetail";
+
+    //6.5	航变查询接口
+    public static final String ORDERMONEY_OUTER_PATH = "/orderMoney";
+}

+ 61 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/demo/CommonApiDemo.java

@@ -0,0 +1,61 @@
+package com.izouma.awesomeadmin.tuniu.demo;
+
+
+
+import com.izouma.awesomeadmin.tuniu.common.SendHttpRequest;
+import com.izouma.awesomeadmin.tuniu.common.URLConfig;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class CommonApiDemo {
+
+    /**
+     * 查询代扣账单
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void query(String apiKey, String secretKey) {
+        System.out.println("****************************  公共查询:查询代扣账单  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Bill/query";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("acctId", "1"); //
+        params.put("accType", 1); //
+        params.put("billType", 2); //
+        params.put("status", 1); //
+        params.put("beginTime", ""); //
+        params.put("endTime", ""); //
+        params.put("start", 1); //
+        params.put("limit", 10); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  公共查询:查询代扣账单  end *******************************************");
+    }
+
+    /**
+     * 订单状态通知接口
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void orderChange() {
+        System.out.println("****************************  公共查询:订单状态通知接口  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "orderCallback/orderChange";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("orderId", 28066080); //
+
+        SendHttpRequest.sendGetConn(URLConfig.URL + url, params);
+
+        System.out.println("\r\n****************************  公共查询:订单状态通知接口  end *******************************************");
+    }
+}

+ 206 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/demo/DemoMain.java

@@ -0,0 +1,206 @@
+package com.izouma.awesomeadmin.tuniu.demo;
+
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class DemoMain {
+    public static void main1(String[] args) {
+        List list = a(
+                "H=value",
+                "w=null",
+                "adultQuantity=3",
+                "departDate=2016-04-19",
+                "apiKey=jdtest",
+                "arriveCityCode=SHA",
+                "babyQuantity=0",
+                "childQuantity=0",
+                "departCityCode=PNZ",
+                "timestamp=2016-04-08 11:21:25"
+        );
+        Collections.sort(list);
+        System.out.println(list);
+    }
+    private static List a(String...strings){
+        List list = new ArrayList<>();
+        for (String x : strings) {
+            list.add(x);
+        }
+        return list;
+    }
+
+    public static void main(String[] args) {
+        // 密钥
+        String secretKey = "aaaaaaaa";
+
+
+        // // 国际机票的apiKey
+        //String apiKey = "jdtest";
+
+
+        // 国内机票:航班查询接口
+        //DomesticFlightDemo.inquiry();
+
+        // 国内机票:验舱验价
+        //DomesticFlightDemo.checkCabinAndPrice();
+
+        // 国内机票:退改签查询
+        //DomesticFlightDemo.queryFareRemark();
+
+        // 国内机票:价格日历
+        //DomesticFlightDemo.calendar();
+
+        // 国内机票:单程特价机票
+        //DomesticFlightDemo.onewaySpecial();
+
+        // 国内机票:往返特价机票
+        //DomesticFlightDemo.twowaySpecial(apiKey, secretKey);
+
+        // 国内机票:生僻字查询接口
+        //DomesticFlightDemo.checkCharacter();
+
+        // 国内机票:创建订单
+        //DomesticFlightDemo.createOrder();
+
+        // 国内机票:订单取消
+        //DomesticFlightDemo.cancelOrder();
+
+        //改升费用查询
+        //DomesticFlightDemo.orderMoney();
+
+        //改升详情查询
+        //DomesticFlightDemo.changeDetail();
+
+        // 国内机票:出票(代扣)
+        // ***************  日志中没有相关数据,参照接口文档设置参数,调接口报参数错误,没调通  *************
+        //DomesticFlightDemo.submitOrder();
+
+        // 国内机票:订单详情
+//        for (int i = 0; i < 20 ; i++) {
+//            DomesticFlightDemo.orderDetail();
+//        }
+
+        // 国内机票:订单状态
+        //DomesticFlightDemo.orderStatus(apiKey, secretKey);
+
+        // 国内机票:退票费查询
+        //DomesticFlightDemo.queryRefundFee();
+
+        // 国内机票:退票
+        //DomesticFlightDemo.refundOrder(apiKey, secretKey);
+
+        //DomesticFlightDemo.chengeDetail(apiKey, secretKey);
+
+
+        // 国际机票的apiKey
+        //String interApiKey = "intlflighttest";
+        // 国际机票:航班查询
+        //InternationalFlightDemo.searchFlight(interApiKey, secretKey);
+
+        // 国际机票:验舱验价
+        //InternationalFlightDemo.checkCabinAndPrice(interApiKey, secretKey);
+
+        // 国际机票:退改签规则查询
+        //InternationalFlightDemo.queryFareRemark(interApiKey, secretKey);
+
+        // 国际机票:创建订单
+        //InternationalFlightDemo.addNewOrder(interApiKey, secretKey);
+
+        // 国际机票:订单详情
+        //InternationalFlightDemo.getOrderDetail(interApiKey, secretKey);
+
+        // 国际机票:订单取消
+        //InternationalFlightDemo.cancelOrder(interApiKey, secretKey);
+
+        // 国际机票:订单状态
+        //InternationalFlightDemo.getOrderStatus(interApiKey, secretKey);
+
+        // 国际机票:出票(代扣)
+        //InternationalFlightDemo.submitOrder(interApiKey, secretKey);
+
+        // 国际机票:订单列表
+        //InternationalFlightDemo.getOrderList(interApiKey, secretKey);
+
+
+        String ticketApiKey = "tickettest";
+
+        // 门票:景点列表查询
+        TicketDemo.scenicList(ticketApiKey, secretKey);
+
+        // 门票:景点详情
+//        TicketDemo.scenicDetail(ticketApiKey, secretKey);
+
+        // 门票:特权门票查询
+        //TicketDemo.privilegeTicketList(ticketApiKey, secretKey);
+
+        // 门票:门票详情
+        //TicketDemo.detail(ticketApiKey, secretKey);
+
+        // 门票:创建订单
+        //TicketDemo.createOrder(ticketApiKey, secretKey);
+
+        // 门票:取消订单
+        //TicketDemo.cancelOrder(ticketApiKey, secretKey);
+
+        // 门票:出票(代扣)
+        //TicketDemo.submitOrder(ticketApiKey, secretKey);
+
+        // 门票:订单详情
+        //TicketDemo.orderDetail(ticketApiKey, secretKey);
+
+        // 门票:订单状态
+        //TicketDemo.orderStatus(ticketApiKey, secretKey);
+
+        // 门票:退票申请
+        //TicketDemo.refundOrder(ticketApiKey, secretKey);
+
+        // 门票:门票核销查询
+        //TicketDemo.verifyOrder(ticketApiKey, secretKey);
+
+
+        String toursApiKey = "tourstest";
+
+        // 跟团:跟团列表查询
+        //ToursDemo.list(toursApiKey, secretKey);
+
+        // 跟团:跟团详情
+        //ToursDemo.detail(toursApiKey, secretKey);
+
+        // 跟团:价格日历
+        //ToursDemo.calendar(toursApiKey, secretKey);
+
+        // 跟团:单房差资源
+        //ToursDemo.roomCharge(toursApiKey, secretKey);
+
+        // 跟团:创建订单
+        //ToursDemo.createOrder(toursApiKey, secretKey);
+
+        // 跟团:出票(代扣)
+        //ToursDemo.submitOrder(toursApiKey, secretKey);
+
+        // 跟团:订单详情
+        //ToursDemo.orderDetail(toursApiKey, secretKey);
+
+        // 跟团:订单状态
+        //ToursDemo.orderStatus(toursApiKey, secretKey);
+
+
+        // 公共查询:查询代扣账单
+//		CommonApiDemo.query(apiKey, secretKey);
+
+        // 公共查询:订单状态通知接口
+        // 该接口是get方式
+        //CommonApiDemo.orderChange();
+        //国内酒店的apiKey
+        String hotelApiKey = "hoteltest";
+//        DomesticHotelDemo.queryHotelList(hotelApiKey, secretKey);
+//        DomesticHotelDemo.queryHotelDetail(hotelApiKey, secretKey);
+//        DomesticHotelDemo.queryRatePlanInfo(hotelApiKey, secretKey);
+//        DomesticHotelDemo.realTimeRatePlan(hotelApiKey, secretKey);
+//        DomesticHotelDemo.queryAddOrder(hotelApiKey, secretKey);
+//        DomesticHotelDemo.queryOrderDetail(hotelApiKey, secretKey);
+//        DomesticHotelDemo.queryCancelOrder(hotelApiKey, secretKey);
+//        DomesticHotelDemo.submitOrder(hotelApiKey, secretKey);
+    }
+}

+ 564 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/demo/DomesticFlightDemo.java

@@ -0,0 +1,564 @@
+package com.izouma.awesomeadmin.tuniu.demo;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.izouma.awesomeadmin.tuniu.common.SendHttpRequest;
+import com.izouma.awesomeadmin.tuniu.common.URLConfig;
+import com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.*;
+import com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto.*;
+import org.apache.commons.collections.map.HashedMap;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+
+import static com.izouma.awesomeadmin.tuniu.constants.DomesticFlightUrl.*;
+
+/**
+ * 国内机票
+ *
+ * @author tengyong
+ */
+public class DomesticFlightDemo {
+    private static final Logger logger = Logger.getLogger("DomesticFlightDemo");
+
+    private static final String URL = URLConfig.URL + OUTER_PATH;
+
+    private static final String TESTURL = "http://183.62.49.171:7080/bpbp-gateway-plane/orderCallback/orderChange";
+
+    public static void main(String[] args){
+        JSONObject json = new JSONObject();
+        json.put("orderId",1008189319);
+        String result = SendHttpRequest.sendPostConn(TESTURL, json,  API_KEY, SECRE_KEY);
+        logger.info("result: " + result);
+    }
+
+    /**
+     * 国内机票:航班查询接口
+     *
+     */
+    public static void inquiry() {
+        logger.info("****************************  国内机票:航班查询接口  start *******************************************\r\n");
+
+        InquiryDto inquiryDto = new InquiryDto();
+        List<Segment> segmentList = new ArrayList<>();
+        Segment segment = new Segment();
+
+        segment.setArriveCityCode("CKG");
+        segment.setDepartCityCode("XMN");
+        segment.setDepartDate("2017-03-09");
+        segmentList.add(segment);
+         /*
+        往返,只需要出发地、目的地对调一下,日期设置一下即可
+        */
+        /*
+        Segment segmentBack = new Segment();
+        segmentBack.setArriveCityCode("XMN");
+        segmentBack.setDepartCityCode("CKG");
+        segmentBack.setDepartDate("2016-12-30");
+        SegmentList.add(segmentBack);
+        */
+
+        inquiryDto.setAdultQuantity(1);
+        inquiryDto.setChildQuantity(0);
+        inquiryDto.setSegmentList(segmentList);
+        inquiryDto.setMaxDrawOrderTime(0);
+        inquiryDto.setMaxDrawTicketTime(0);
+
+        SendHttpRequest.sendPostConn(URL + QUERY_OUTER_PATH, inquiryDto,  API_KEY, SECRE_KEY);
+
+        logger.info("****************************  国内机票:航班查询接口  end *******************************************");
+    }
+
+    /**
+     * 国内机票:验舱验价
+     */
+    public static void checkCabinAndPrice() {
+        logger.info("****************************  国内机票:验舱验价  start *******************************************\r\n");
+
+
+        CheckCabinAndPriceDto checkCabinAndPriceDto = new CheckCabinAndPriceDto();
+        List<TouristList> touristList = new ArrayList<>();
+        TouristList tourist = new TouristList();
+        List<Resource> resourceList = new ArrayList<>();
+        Resource resource = new Resource();
+
+        tourist.setName("途牛测试");
+        tourist.setPersonType(1);
+        tourist.setPsptId("610152199201021139");
+        tourist.setPsptType(1);
+        tourist.setTel("");
+        tourist.setBirthday("1992-01-02");
+
+        tourist = new TouristList();
+        tourist.setName("途牛测试");
+        tourist.setPersonType(1);
+        tourist.setPsptId("450330199308101122");
+        tourist.setPsptType(1);
+        tourist.setTel("");
+        tourist.setBirthday("1993-08-10");
+
+        resource.setChildPrice(0);
+        resource.setDepartureDate("2016-12-25");
+        resource.setExternalInfo("");
+        resource.setPrice(0);
+        resource.setResId("1721238006");
+        resource.setSolutionId("8");
+        resource.setVendorPolicyId("0");
+
+        touristList.add(tourist);
+        touristList.add(tourist);
+        resourceList.add(resource);
+        checkCabinAndPriceDto.setType(3);
+        checkCabinAndPriceDto.setTouristList(touristList);
+        checkCabinAndPriceDto.setResourceList(resourceList);
+
+        SendHttpRequest.sendPostConn(URL + CHECK_OUTER_PATH, checkCabinAndPriceDto, API_KEY, SECRE_KEY);
+        logger.info("****************************  国内机票:验舱验价  end *******************************************");
+
+    }
+
+    /**
+     * 国内机票:退改签查询
+     *
+     */
+    public static void queryFareRemark() {
+        logger.info("****************************  国内机票:退改签查询  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "DomesticFlight/queryFareRemark";
+
+        QueryFareRemarkDto queryFareRemarkDto = new QueryFareRemarkDto();
+        queryFareRemarkDto.setSolutionId(8);
+        queryFareRemarkDto.setFlightNo("HO1022");
+        queryFareRemarkDto.setCabin("A");
+        queryFareRemarkDto.setOrgAirportCode("BJS");
+        queryFareRemarkDto.setDstAirportCode("SHA");
+        queryFareRemarkDto.setDepartureDate("2016-10-30");
+        queryFareRemarkDto.setCostPrice(1976);
+        queryFareRemarkDto.setFullPrice(2000);
+        queryFareRemarkDto.setSalePrice(1976);
+        queryFareRemarkDto.setVendorPolicyId(1913916816L);
+        queryFareRemarkDto.setPolicyId(1913916816);
+
+        SendHttpRequest.sendPostConn(URL + QUERYFARE_OUTER_PATH, queryFareRemarkDto, API_KEY, SECRE_KEY);
+        logger.info("****************************  国内机票:退改签查询  end *******************************************");
+
+    }
+
+    /**
+     * 国内机票:价格日历
+     *
+     */
+    public static void calendar() {
+        logger.info("****************************  国内机票:价格日历  start *******************************************\r\n");
+
+        CalendarDto calendarDto = new CalendarDto();
+        calendarDto.setType(1);
+        calendarDto.setOrgCityCode("HZG");
+        calendarDto.setDstCityCode("SHA");
+        calendarDto.setDepartureDate2("2017-01-30");
+        calendarDto.setDepartureDate("2017-01-20");
+        calendarDto.setBackDate("2016-12-30");
+
+        SendHttpRequest.sendPostConn(URL + CALENDAR_OUTER_PATH, calendarDto, API_KEY, SECRE_KEY);
+        logger.info("****************************  国内机票:价格日历  end *******************************************");
+
+    }
+
+    /**
+     * 国内机票:单程特价机票
+     *
+     */
+    public static void onewaySpecial() {
+        logger.info("****************************  国内机票:单程特价机票  start *******************************************\r\n");
+
+
+        OnewaySpecialDto onewaySpecialDto = new OnewaySpecialDto();
+        List weeks = new LinkedList<>();
+        List airCompanys = new LinkedList<>();
+
+        weeks.add(2);
+        airCompanys.add("");
+
+        onewaySpecialDto.setBeginDate("2017-01-20");
+        onewaySpecialDto.setDepartureDate("2017-01-23");
+        onewaySpecialDto.setEndDate("2017-01-25");
+        onewaySpecialDto.setOrgCityIataCode("SHA");
+        onewaySpecialDto.setDstCityIataCode("BJS");
+        onewaySpecialDto.setWeeks(weeks);
+        //onewaySpecialDto.setAirCompanys(airCompanys);//如果没有,则不要传,空字符串也不要传,否则无法查到数据
+        onewaySpecialDto.setLimit(10);
+
+
+        SendHttpRequest.sendPostConn(URL + ONEWAY_SPECIAL_OUTER_PATH, onewaySpecialDto, API_KEY, SECRE_KEY);
+        logger.info("****************************  国内机票:单程特价机票  end *******************************************");
+
+    }
+
+    /**
+     * 国内机票:往返特价机票
+     *
+     */
+    public static void twowaySpecial() {
+        logger.info("****************************  国内机票:往返特价机票  start *******************************************\r\n");
+
+        TwowaySpecialDto twowaySpecialDto = new TwowaySpecialDto();
+        List weeksList = new LinkedList<>();
+        Weeks weeks = new Weeks();
+        List goWeek = new LinkedList<>();
+        List backWeek = new LinkedList<>();
+        List airCompanys = new LinkedList<>();
+
+        airCompanys.add("");
+
+        goWeek.add(3);
+        backWeek.add(2);
+        weeks.setGoWeek(goWeek);
+        weeks.setBackWeek(backWeek);
+        weeksList.add(weeks);
+
+        twowaySpecialDto.setOrgCityIataCode("BJS");
+        //twowaySpecialDto.setDstCityIataCode("SHA");
+        twowaySpecialDto.setGoBeginDate("2017-01-01");
+        twowaySpecialDto.setGoEndDate("2017-01-03");
+        twowaySpecialDto.setGoDepartureDate("2017-01-04");
+        twowaySpecialDto.setBackBeginDate("2017-01-06");
+        twowaySpecialDto.setBackEndDate("2017-01-08");
+        twowaySpecialDto.setBackDepartureDate("2017-01-10");
+        //twowaySpecialDto.setWeeks(weeksList);
+        //twowaySpecialDto.setAirCompanys(airCompanys);
+        twowaySpecialDto.setLimit(10);
+
+        SendHttpRequest.sendPostConn(URL + TWOWAY_SPECIAL_OUTER_PATH, twowaySpecialDto, API_KEY, SECRE_KEY);
+        logger.info("****************************  国内机票:往返特价机票  end *******************************************");
+
+    }
+
+    /**
+     * 国内机票:生僻字查询接口
+     *
+     */
+    public static void checkCharacter() {
+        logger.info("****************************  国内机票:生僻字查询接口  start *******************************************\r\n");
+
+        CheckCharacterDto checkCharacterDto = new CheckCharacterDto();
+        List nameList = new LinkedList<>();
+        Map name1 = new HashedMap();
+        Map name2 = new HashedMap();
+
+        name2.put("name", "小小");
+        name1.put("name", "玥玥");
+
+        nameList.add(name1);
+        nameList.add(name2);
+
+        checkCharacterDto.setNameList(nameList);
+
+        String result = SendHttpRequest.sendPostConn(URL + CHECKCHARACTER_OUTER_PATH, checkCharacterDto, API_KEY, SECRE_KEY);
+        logger.info(result);
+        logger.info("****************************  国内机票:生僻字查询接口  end *******************************************");
+
+    }
+
+    /**
+     * 国内机票:创建订单
+     *
+     */
+    public static void createOrder() {
+        logger.info("****************************  国内机票:创建订单  start *******************************************\r\n");
+
+        CreateOrderDto createOrderDto = new CreateOrderDto();
+
+        List personList = new LinkedList<>();
+        List journeyPriceList = new LinkedList<>();
+        List journeySegList = new LinkedList<>();
+        List flightSegList = new LinkedList<>();
+        List stopPointList = new LinkedList<>();
+        List journeyCabinList = new LinkedList<>();
+        List fareBreakDownList = new LinkedList<>();
+        List flightCabinList = new LinkedList<>();
+
+        JourneySeg journeySeg = new JourneySeg();
+        JourneyPrice journeyPrice = new JourneyPrice();
+        JourneyCabin journeyCabin = new JourneyCabin();
+        Delivery delivery = new Delivery();
+        Contact contact = new Contact();
+        Person person = new Person();
+        SaleControl saleControl = new SaleControl();
+        FlightCabin flightCabin = new FlightCabin();
+        FareBreakDown fareBreakDown = new FareBreakDown();
+        Passenger passenger = new Passenger();
+        FlightSeg flightSeg = new FlightSeg();
+
+        flightSeg.setAirlineCompany("中国国际航空");
+        flightSeg.setAirlineIataCode("CA");
+        flightSeg.setArriveAirportCode("XIY");
+        flightSeg.setArriveAirportName("咸阳国际机场");
+        flightSeg.setArriveAirportTerminal("T3");
+        flightSeg.setArriveCityIataCode("SIA");
+        flightSeg.setArriveCityName("西安");
+        flightSeg.setArriveDate("2017-01-31");
+        flightSeg.setArriveTime("16:35");
+        flightSeg.setCraftType("73K(中)");
+        flightSeg.setDepartAirportCode("PEK");
+        flightSeg.setDepartAirportTerminal("T3");
+        flightSeg.setDepartCityIataCode("BJS");
+        flightSeg.setDepartCityName("北京");
+        flightSeg.setDepartAirportName("首都国际机场");
+        flightSeg.setDepartDate("2017-01-31");
+        flightSeg.setDepartTime("14:20");
+        flightSeg.setDuration("2:15");
+        flightSeg.setFlightNo("CA1201");
+        flightSeg.setFullPrice(1850);
+        flightSeg.setFullPriceC(0);
+        flightSeg.setFullPriceF(0);
+        flightSeg.setIsShare(0);
+        flightSeg.setMeal("");
+        flightSeg.setMealFlag(0);
+        flightSeg.setShareAirline("");
+        flightSeg.setShareAirlineName("");
+        flightSeg.setShareFlightNo("");
+        flightSeg.setStopInformation("");
+        flightSeg.setStopNum(0);
+        flightSeg.setStopPointList(stopPointList);
+        flightSegList.add(flightSeg);
+        journeySeg.setFlightSegList(flightSegList);
+        journeySegList.add(journeySeg);
+
+        saleControl.setApplicableTravelerCategory("");
+        saleControl.setCorePassengerNum(0);
+        saleControl.setMaxAdultNum(9);
+        saleControl.setMaxChildNum(6);
+        saleControl.setMaxPassengerNum(9);
+        saleControl.setMinAdultNum(1);
+        saleControl.setMinPassengerNum(1);
+        saleControl.setMinChildNum(0);
+        saleControl.setPassengerRatio("2:1");
+
+        flightCabin.setBillType(1);
+        flightCabin.setBillTypeName("行程单");
+        flightCabin.setCabinClass("Y");
+        flightCabin.setCabinCode("L");
+        flightCabin.setFreeLuggage("20KG");
+        flightCabin.setOverloadLuggage("");
+        flightCabin.setSeatStatus("9");
+        flightCabin.setSeatType("经济舱");
+        flightCabin.setSeatTypeCode(1);
+        flightCabinList.add(flightCabin);
+        journeyCabin.setFlightCabinList(flightCabinList);
+        journeyCabinList.add(journeyCabin);
+
+        fareBreakDown.setBaseFare(840);
+        fareBreakDown.setDiscount(0.227);
+        fareBreakDown.setFuel(0);
+        fareBreakDown.setPrice(840);
+        fareBreakDown.setTax(100);
+        passenger.setQuantity(1);
+        passenger.setType("ADT");
+        fareBreakDown.setPassenger(passenger);
+        fareBreakDownList.add(fareBreakDown);
+
+        journeyPrice.setDrawOrderTime("90");
+        journeyPrice.setDrawTicketTime("0");
+        journeyPrice.setExternalInfo("");
+        journeyPrice.setFareBreakDownList(fareBreakDownList);
+        journeyPrice.setJourneyCabinList(journeyCabinList);
+        journeyPrice.setResId("1564529630");
+        journeyPrice.setSaleControl(saleControl);
+        journeyPrice.setSolutionId("1");
+        journeyPrice.setVendorPolicyId("0");
+        journeyPriceList.add(journeyPrice);
+
+        contact.setTel("18366188081");
+        contact.setName("途牛测试");
+        contact.setApplication("0");
+        contact.setEmail("xucaigui@tuniu.com");
+
+        person.setBirthday("1993-08-10");
+        person.setFirstName("");
+        person.setIdentityNo("450330199308101111");
+        person.setIdentityType(1);
+        person.setLastName("");
+        person.setPassengerName("途牛测试");
+        person.setPersonType(1);
+        personList.add(person);
+
+        delivery.setAddress("途牛");
+        delivery.setInvoiceTitle("飞机票项目订票测试");
+        delivery.setReceiverName("途牛测试");
+        delivery.setTelNum("18366188081");
+        delivery.setZipCode("");
+
+        createOrderDto.setSourceOrderId("201612291840");
+        createOrderDto.setJourneySegList(journeySegList);
+        createOrderDto.setContact(contact);
+        createOrderDto.setDelivery(delivery);
+        createOrderDto.setJourneyPriceList(journeyPriceList);
+        createOrderDto.setPersonList(personList);
+
+        SendHttpRequest.sendPostConn(URL + CREATEORDER_OUTER_PATH, createOrderDto, API_KEY, SECRE_KEY);
+        logger.info("****************************  国内机票:创建订单  end *******************************************");
+
+    }
+
+    /**
+     * 国内机票:订单取消
+     *
+     */
+    public static void cancelOrder() {
+        logger.info("****************************  国内机票:订单取消  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "DomesticFlight/cancelOrder";
+
+        CancelOrderDto cancelOrderDto = new CancelOrderDto();
+        cancelOrderDto.setOrderId(1007289587);
+        cancelOrderDto.setReason("途牛测试");
+
+        SendHttpRequest.sendPostConn(URL + CANCELORDER_OUTER_PATH, cancelOrderDto, API_KEY, SECRE_KEY);
+        logger.info("****************************  国内机票:订单取消  end *******************************************");
+
+    }
+
+    public static void orderMoney() {
+        logger.info("****************************  国内机票:改升费用查询  start *******************************************\r\n");
+        OrderDto orderMoneyDto = new OrderDto();
+
+        orderMoneyDto.setOrderId(1007289587);
+
+        SendHttpRequest.sendPostConn(URL + ORDERMONEY_OUTER_PATH, orderMoneyDto, API_KEY, SECRE_KEY);
+    }
+    public static void changeDetail() {
+        logger.info("****************************  国内机票:改升详情查询  start *******************************************\r\n");
+        OrderDto orderDetailDto = new OrderDto();
+
+        orderDetailDto.setOrderId(1007289587);
+
+        SendHttpRequest.sendPostConn(URL + CHANGEDETAIL_OUTER_PATH, orderDetailDto, API_KEY, SECRE_KEY);
+    }
+
+    /**
+     * 国内机票:出票(代扣)
+     *
+     */
+    public static void submitOrder() {
+        logger.info("****************************  国内机票:出票(代扣)  start *******************************************\r\n");
+
+        SubmitOrderDto submitOrderDto = new SubmitOrderDto();
+        submitOrderDto.setAcctId("100012");
+        submitOrderDto.setOrderId(1009674830);
+        submitOrderDto.setPay("1499");
+        submitOrderDto.setPayType(1);
+        submitOrderDto.setPlatform("10001");
+
+        SendHttpRequest.sendPostConn(URL + SUBMITORDER_OUTER_PATH, submitOrderDto, API_KEY, SECRE_KEY);
+        logger.info("****************************  国内机票:出票(代扣)  end *******************************************");
+
+    }
+
+    /**
+     * 国内机票:订单详情
+     *
+     */
+    private static int a;
+    public static void orderDetail() {
+        logger.info("****************************  国内机票:订单详情  start *******************************************\r\n");
+
+        OrderDto orderDto = new OrderDto();
+        orderDto.setOrderId(1010560318);
+        String data = SendHttpRequest.sendPostConn(URL + ORDERDETAIL_OUTER_PATH, orderDto, API_KEY, SECRE_KEY);
+
+        logger.info("request data:" + data);
+        logger.info("****************************  国内机票:订单详情  end *******************************************");
+        logger.info("成功访问" + (a++) + "次");
+    }
+
+    /**
+     * 国内机票:订单状态
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void orderStatus(String apiKey, String secretKey) {
+        logger.info("****************************  国内机票:订单状态  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "DomesticFlight/orderStatus";
+        JSONObject jsonObject = new JSONObject();
+
+        List orderIdList = new ArrayList<>();
+        OrderDto orderDto = new OrderDto();
+        orderDto.setOrderId(1007289588);
+        orderIdList.add(orderDto);
+        jsonObject.put("orderIdList", orderIdList); // 订单ID(组)
+
+        SendHttpRequest.sendPostConn(URL + ORDERSTATUS_OUTER_PATH, jsonObject, API_KEY, SECRE_KEY);
+        logger.info("****************************  国内机票:订单状态  end *******************************************");
+
+    }
+
+    /**
+     * 国内机票:退票费查询
+     *
+     */
+    public static void queryRefundFee() {
+        logger.info("****************************  国内机票:退票费查询  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "DomesticFlight/queryRefundFee";
+
+        QueryRefundFeeDto queryRefundFeeDto = new QueryRefundFeeDto();
+        queryRefundFeeDto.setDepartureDate("2016-12-01");
+        queryRefundFeeDto.setFlightNum("CA1201");
+        queryRefundFeeDto.setOrderId(1006933880);
+        queryRefundFeeDto.setPsptId("450330199308101676");
+        queryRefundFeeDto.setPsptType(1);
+
+        SendHttpRequest.sendPostConn(URL + QUERYREFUNDFEE_OUTER_PATH, queryRefundFeeDto, API_KEY, SECRE_KEY);
+        logger.info("****************************  国内机票:退票费查询  end *******************************************");
+
+    }
+
+    /**
+     * 国内机票:退票
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void refundOrder(String apiKey, String secretKey) {
+        logger.info("****************************  国内机票:退票  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "DomesticFlight/refundOrder";
+
+        TouristList touristList = new TouristList();
+        RefundOrderDto refundOrderDto = new RefundOrderDto();
+        List tourists = new LinkedList<>();
+
+        refundOrderDto.setOrderId(1006933880);
+        touristList.setPsptId("450330199308101676");
+        touristList.setPsptType(1);
+        touristList.setTel("");
+        touristList.setBirthday("1993-08-10");
+        touristList.setName("");
+/*
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("orderId", 1006933880); // 订单ID
+        List touristList = new ArrayList<>();
+        Map param = new HashedMap();
+        param.put("psptType", "1"); // 退票人证件类型
+        param.put("psptId", "450330199308101676"); // 退票人证件号码
+        param.put("flightNum", "CA1201"); // 退票航班号
+        param.put("departureDate", "2016-12-01"); // 退票的起飞日期
+        param.put("refundType", 1); // 退票类型  1=部分使用自愿退票
+        touristList.add(param);
+        params.put("touristList", touristList);*/
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, touristList, apiKey, secretKey);
+        logger.info("****************************  国内机票:退票  end *******************************************");
+
+    }
+}

+ 224 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/demo/DomesticHotelDemo.java

@@ -0,0 +1,224 @@
+package com.izouma.awesomeadmin.tuniu.demo;
+
+
+import com.izouma.awesomeadmin.tuniu.common.DateUtil;
+import com.izouma.awesomeadmin.tuniu.common.SendHttpRequest;
+import com.izouma.awesomeadmin.tuniu.common.URLConfig;
+
+import java.util.*;
+
+/**
+ * Created by liujianqiang2 on 2018/5/3.
+ */
+public class DomesticHotelDemo {
+    /**
+     * 国内酒店:列表查询接口
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void queryHotelList(String apiKey, String secretKey){
+        System.out.println("****************************  国内酒店:列表查询接口  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "DomesticHotel/query/hotelList";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        String checkInDate = DateUtil.addDateByDays(DateUtil.formatSimpleDate(new Date()), 5);
+        String checkOutDate = DateUtil.addDateByDays(DateUtil.formatSimpleDate(new Date()), 6);
+        params.put("start",0); // 分页开始
+        params.put("limit",5); // 分页数量
+        params.put("cityName","南京"); //酒店所在城市
+        params.put("checkInDate",checkInDate); //入店时间
+        params.put("checkOutDate",checkOutDate); //离店时间
+        Map<String, Object> filter = new HashMap<String, Object>();
+        List<String> star = new ArrayList<>();
+        List<Integer> feature = new ArrayList<>();
+        List<String> price = new ArrayList<>();
+        List<Integer> facility = new ArrayList<>();
+        feature.add(4);
+        price.add("151-1500");
+        facility.add(6);
+        star.add("6000");
+        filter.put("star", star); // 星级
+        filter.put("feature",feature); // 特色
+        filter.put("price",price);  // 价格范围
+        filter.put("facility",facility);  //设施
+        params.put("filter",filter);
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国内酒店:列表查询接口  end *******************************************");
+    }
+    /**
+     * 国内酒店:详情查询接口
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void queryHotelDetail(String apiKey, String secretKey){
+        System.out.println("****************************  国内酒店:详情查询接口  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "DomesticHotel/query/hotelDetail";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+
+        params.put("hotelId", 6114393); //酒店Id
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国内酒店:详情查询接口  end *******************************************");
+    }
+    /**
+     * 国内酒店:房型和价格计划查询接口
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void queryRatePlanInfo(String apiKey, String secretKey){
+        System.out.println("****************************  国内酒店:房型和价格计划查询接口  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "DomesticHotel/query/ratePlanInfo";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        String checkInDate = DateUtil.addDateByDays(DateUtil.formatSimpleDate(new Date()), 5);
+        String checkOutDate = DateUtil.addDateByDays(DateUtil.formatSimpleDate(new Date()), 6);
+        params.put("hotelId",34240); //酒店Id
+        params.put("checkin",checkInDate); //入店时间
+        params.put("checkout",checkOutDate); //离店时间
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国内酒店:房型和价格计划查询接口  end *******************************************");
+    }
+    /**
+     * 国内酒店:实时询价查询接口
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void realTimeRatePlan(String apiKey, String secretKey){
+        System.out.println("**************************** 国内酒店:实时询价查询接口  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "DomesticHotel/realTime/ratePlan";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        String checkInDate = DateUtil.addDateByDays(DateUtil.formatSimpleDate(new Date()), 5);
+        String checkOutDate = DateUtil.addDateByDays(DateUtil.formatSimpleDate(new Date()), 6);
+        params.put("hotelId",34240); //酒店Id
+        params.put("checkin",checkInDate); //入店时间
+        params.put("checkout",checkOutDate); //离店时间
+        params.put("roomId","1_200_27478_1748927221"); //价格计划ID
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国内酒店:实时询价查询接口  end *******************************************");
+    }
+    /**
+     * 国内酒店:下单接口
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void queryAddOrder(String apiKey, String secretKey){
+        System.out.println("**************************** 国内酒店:下单接口  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "DomesticHotel/query/addOrder";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        String checkInDate = DateUtil.addDateByDays(DateUtil.formatSimpleDate(new Date()), 5);
+        String checkOutDate = DateUtil.addDateByDays(DateUtil.formatSimpleDate(new Date()), 6);
+        List<String> customerInfo = new ArrayList<>();
+        customerInfo.add("张三");//入住人姓名
+        customerInfo.add("李四");//入住人姓名
+        params.put("hotelId",750893); //酒店Id
+        params.put("checkin",checkInDate); //入店时间
+        params.put("checkout",checkOutDate); //离店时间
+        params.put("ratePlanId","1_200_23690_1870905719"); //价格计划ID
+        params.put("sourceOrderId","HT20180426000004"); //分销商订单号
+        params.put("numberofRooms",1); //预定房间数
+        params.put("totalPrice",2154); //订单价格
+        params.put("contactEmail","132@qq.com"); //联系人邮箱
+        params.put("contactName","张三"); //联系人姓名
+        params.put("acctId",100012); //账号Id
+        params.put("contactPhone","15210349877"); //联系人电话
+        params.put("specialRemarks","10,12");//特殊需求
+        params.put("surcharge","");
+        params.put("customerInfo",customerInfo);//入住人信息
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国内酒店:下单接口  end *******************************************");
+    }
+    /**
+     * 国内酒店:订单详情查询接口
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void queryOrderDetail(String apiKey, String secretKey){
+        System.out.println("**************************** 国内酒店:订单详情查询接口  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "DomesticHotel/query/orderDetail";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("orderId",1031719267); //订单Id
+        params.put("acctId",100012); //账号Id
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国内酒店:订单详情查询接口  end *******************************************");
+    }
+    /**
+     * 国内酒店:取消订单查询接口
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void queryCancelOrder(String apiKey, String secretKey){
+        System.out.println("**************************** 国内酒店:取消订单查询接口  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "DomesticHotel/query/cancelOrder";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("orderId",1031719267); //订单Id
+        params.put("acctId",100012); //账号Id
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n**************************** 国内酒店:取消订单查询接口 end *******************************************");
+    }
+    /**
+     * 国内酒店:代扣接口
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void submitOrder(String apiKey, String secretKey){
+        System.out.println("**************************** 国内酒店:代扣接口  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "DomesticHotel/submitOrder";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("payType",1); //代扣类型
+        params.put("acctId",100012); //账号Id
+        params.put("orderId",1006422650); //订单Id
+        params.put("pay","1100"); //代扣金额
+        params.put("platform","10001"); //支付平台
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n**************************** 国内酒店:代扣接口 end *******************************************");
+    }
+}

+ 340 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/demo/InternationalFlightDemo.java

@@ -0,0 +1,340 @@
+package com.izouma.awesomeadmin.tuniu.demo;
+
+
+
+import com.izouma.awesomeadmin.tuniu.common.SendHttpRequest;
+import com.izouma.awesomeadmin.tuniu.common.URLConfig;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 国际机票
+ *
+ * @author tengyong
+ */
+public class InternationalFlightDemo {
+
+    /**
+     * 国际机票:航班查询接口
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void searchFlight(String apiKey, String secretKey) {
+        System.out.println("****************************  国际机票:航班查询接口  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "IntlFlight/searchFlight";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("adultQuantity", 1); // 成人人数,默认值为1
+       // params.put("childQuantity", 0); // 儿童人数,默认值为0
+       // params.put("babyQuantity", 0); // 婴儿人数,默认值为0
+        //params.put("cabinClass", 0);
+        params.put("channelCount", 0);
+        params.put("direct", 1);
+
+        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+        Map<String, Object> tmp = new HashMap<String, Object>();
+        tmp.put("aCityIataCode", "HKG"); // 目的地
+        tmp.put("dCityIataCode", "SHA");  // 出发地
+        tmp.put("departDate", "2017-01-16"); // 日期
+        list.add(tmp);
+
+        params.put("segmentList", list);
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国际机票:航班查询接口  end *******************************************");
+    }
+
+    /**
+     * 国际机票:验舱验价
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void checkCabinAndPrice(String apiKey, String secretKey) {
+        System.out.println("****************************  国际机票:验舱验价  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "IntlFlight/checkCabinAndPrice";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("systemId", 61); //
+        params.put("vendorId", 0);
+        params.put("flightNos", "MU001");
+        params.put("queryId", "Y2l0eUtleXM9Rk9DLVRZTyNUWU8tRk9DLGRlcGFydHVyZURhdGU9MjAxNi0wNi0yMSxkZXBhcnR1cmVEYXRlcz0wIzkscGFzc2VuZ2VyUXVhbnRpdHk9MSxwaHlzaWNhbENhYmluPTA=="); //
+        params.put("type", 3); //
+        params.put("checkID", ""); //
+
+        List<Map<String, Object>> fareBreakdownList = new ArrayList<Map<String, Object>>();
+        Map<String, Object> tmp = new HashMap<String, Object>();
+        tmp.put("babyQuantity", 0); //
+        tmp.put("baseFare", 1640);  //
+        tmp.put("adultQuantity", 1); //
+        tmp.put("taxes", 245); //
+        tmp.put("childQuantity", 0); //
+        fareBreakdownList.add(tmp);
+
+        params.put("fareBreakdownList", fareBreakdownList);
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国际机票:验舱验价  end *******************************************");
+    }
+
+    /**
+     * 国际机票:退改签规则查询
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void queryFareRemark(String apiKey, String secretKey) {
+        System.out.println("****************************  国际机票:退改签规则查询  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "IntlFlight/queryFareRemark";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("vendorId", 12); //
+        //params.put("ruleKey", "W3siYWlyTGluZUNvZGUiOiJDWCIsImFycml2YWxBaXJwb3J0IjoiVFlPIiwiZGRlcGFydHVyZVRpbWUiOiIyMDoyMCIsImRlcGFydHVyZUFpcnBvcnQiOiJGT0MiLCJkZXBhcnR1cmVEYXRlIjoiMjAxNi0wNi0yMSIsImZhcmVCYXNpc0NvZGUiOiJRMTREQ05SWCIsInJlZjEiOiJHRVBZMDEoVVNFUihCSlMsJzFFJywmbHQ7Jmd0OyxZLERFUFQoJmx0OyZndDssJmx0OyZndDspLCZsdDsmZ3Q7LCZsdDsmZ3Q7LCZsdDsmZ3Q7KSxQRjIoWSxbKEFHRU5DWShOS0cxNjYpLElBVEFOVU0oJzA4MzE5NDYzJyksTildLFtdLFtdLFtdLE4sJmx0OyZndDspLCZsdDsmZ3Q7KSIsInJlZjIiOiI4ODRDTjQyRUhOQURUWTAwMjAwMDAxMDBBVFAiLCJzb2x1dGlvbklkIjowfSx7ImFpckxpbmVDb2RlIjoiQ1giLCJhcnJpdmFsQWlycG9ydCI6IlRZTyIsImRkZXBhcnR1cmVUaW1lIjoiMDk6MjUiLCJkZXBhcnR1cmVBaXJwb3J0IjoiRk9DIiwiZGVwYXJ0dXJlRGF0ZSI6IjIwMTYtMDYtMzAiLCJmYXJlQmFzaXNDb2RlIjoiUTE0RENOUlgiLCJyZWYxIjoiR0VQWTAxKFVTRVIoQkpTLCcxRScsJmx0OyZndDssWSxERVBUKCZsdDsmZ3Q7LCZsdDsmZ3Q7KSwmbHQ7Jmd0OywmbHQ7Jmd0OywmbHQ7Jmd0OyksUEYyKFksWyhBR0VOQ1koTktHMTY2KSxJQVRBTlVNKCcwODMxOTQ2MycpLE4pXSxbXSxbXSxbXSxOLCZsdDsmZ3Q7KSwmbHQ7Jmd0OykiLCJyZWYyIjoiODg0Q040MkVITkFEVFkwMDIwMDAwMTAwQVRQIiwic29sdXRpb25JZCI6MH1d-CX5663:20公斤。CX524:20公斤。CX509:20公斤。KA662:20公斤。");
+        params.put("ruleKey", "test");
+        params.put("ruleType", 1); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国际机票:退改签规则查询  end *******************************************");
+    }
+
+    /**
+     * 国际机票:创建订单
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void addNewOrder(String apiKey, String secretKey) {
+        System.out.println("****************************  国际机票:创建订单  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "IntlFlight/addNewOrder";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("contactEmail", "test@qq.com");
+        params.put("contactName", "途牛测试");
+        params.put("contactTel", "18366188081");
+        params.put("flightType", 1);
+        params.put("price", 1214);
+        params.put("acctId", "100012");
+        params.put("sourceOrderId", "201612270134926");
+
+        Map<String, Object> requirement = new HashMap<String, Object>();
+        requirement.put("adultCount", 1);
+        requirement.put("childCount", 0);
+        requirement.put("babyCount", 0);
+        requirement.put("desCityCode", "SEL");
+        requirement.put("startCityCode", "BJS");
+        requirement.put("startDate", "2017-01-28");
+        params.put("requirement", requirement);
+
+        Map<String, Object> distributeInfo = new HashMap<String, Object>();
+        distributeInfo.put("vendorId", "92");
+        distributeInfo.put("flightNos", "SC4852-SC4707");
+        distributeInfo.put("queryId", "Y2l0eUtleXM9QkpTLVNFTCxkZXBhcnR1cmVEYXRlPTIwMTctMDEtMjgsZGVwYXJ0dXJlRGF0ZXM9MCxwYXNzZW5nZXJRdWFudGl0eT0xIzAjMCxwaHlzaWNhbENhYmluPTE=");
+        params.put("distributeInfo", distributeInfo);
+
+        List<Map<String, Object>> flightsInfoList = new ArrayList<Map<String, Object>>();
+        Map<String, Object> flightsInfoListMap = new HashMap<String, Object>();
+        flightsInfoListMap.put("airLineName", "山东航空");
+        flightsInfoListMap.put("departTime", "2017-01-28 09:55");
+        flightsInfoListMap.put("arrivalTime", "2017-01-28 11:20");
+        flightsInfoListMap.put("flightNo", "SC4852");
+        flightsInfoListMap.put("goOrBackTrip", 1);
+        flightsInfoListMap.put("resourceId", 0);
+        flightsInfoListMap.put("departCity", "北京");
+        flightsInfoListMap.put("arrivalCity", "烟台");
+        flightsInfoListMap.put("seatType", "经济舱");
+        flightsInfoList.add(flightsInfoListMap);
+
+        flightsInfoListMap.put("airLineName", "山东航空");
+        flightsInfoListMap.put("departTime", "2017-01-28 18:30");
+        flightsInfoListMap.put("arrivalTime", "2017-01-28 20:45");
+        flightsInfoListMap.put("flightNo", "SC4707");
+        flightsInfoListMap.put("goOrBackTrip", 1);
+        flightsInfoListMap.put("resourceId", 0);
+        flightsInfoListMap.put("departCity", "烟台");
+        flightsInfoListMap.put("arrivalCity", "首尔");
+        flightsInfoListMap.put("seatType", "经济舱");
+
+        params.put("flightsInfoList", flightsInfoList);
+
+        List<Map<String, Object>> priceList = new ArrayList<Map<String, Object>>();
+        Map<String, Object> priceListMap = new HashMap<String, Object>();
+        priceListMap.put("flightNos", "SC4852-SC4707");
+
+        List<Map<String, Object>> pricesList = new ArrayList<Map<String, Object>>();
+        Map<String, Object> pricesListMap = new HashMap<String, Object>();
+        pricesListMap.put("price", 688);
+        pricesListMap.put("tax", 528);
+        pricesListMap.put("type", 1);
+        pricesList.add(pricesListMap);
+        priceListMap.put("prices", pricesList);
+
+        priceList.add(priceListMap);
+        params.put("priceList", priceList);
+
+        List<Map<String, Object>> touristList = new ArrayList<Map<String, Object>>();
+        Map<String, Object> touristListMap = new HashMap<String, Object>();
+        touristListMap.put("Birthday", "1993-08-10");
+        touristListMap.put("firstname", "SHI");
+        touristListMap.put("Lastname", "CE");
+        touristListMap.put("psptId", "12165465465");
+        touristListMap.put("psptEndDate", "2018-12-27");
+        touristListMap.put("issueOrgan", "中国大陆");
+        touristListMap.put("psptType", "2");
+        touristListMap.put("sex", 1);
+        touristListMap.put("touristType", 0);
+        touristListMap.put("country", "中国大陆");
+        touristList.add(touristListMap);
+        params.put("touristList", touristList);
+
+        Map<String, Object> delivery = new HashMap<String, Object>();
+        delivery.put("deliveryEndAddress", "tuniu");
+        delivery.put("deliveryPrice", 10);
+        delivery.put("deliveryType", 1);
+        delivery.put("provinceName", "江苏省");
+        delivery.put("telNum", "18366188081");
+        params.put("delivery", delivery);
+
+        List<Map<String, Object>> invoiceList = new ArrayList<Map<String, Object>>();
+        Map<String, Object> invoiceListMap = new HashMap<String, Object>();
+        invoiceListMap.put("title", "test");
+        invoiceList.add(invoiceListMap);
+        params.put("invoiceList", invoiceList);
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国际机票:创建订单  end *******************************************");
+    }
+
+    /**
+     * 国际机票:订单详情
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void getOrderDetail(String apiKey, String secretKey) {
+        System.out.println("****************************  国际机票:订单详情  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "IntlFlight/getOrderDetail";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("orderId", 33394136); //
+        params.put("acctId", "100012"); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国际机票:订单详情  end *******************************************");
+    }
+
+    /**
+     * 国际机票:订单取消
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void cancelOrder(String apiKey, String secretKey) {
+        System.out.println("****************************  国际机票:订单取消  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "IntlFlight/cancelOrder";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("orderId", 33394136); //
+        params.put("acctId", "100012"); //
+        params.put("cancelReason", "test"); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国际机票:订单取消  end *******************************************");
+    }
+
+    /**
+     * 国际机票:订单状态
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void getOrderStatus(String apiKey, String secretKey) {
+        System.out.println("****************************  国际机票:订单状态  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "IntlFlight/getOrderStatus";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("orderId", 33394136); //
+        params.put("acctId", "100012"); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国际机票:订单状态  end *******************************************");
+    }
+
+    /**
+     * 国际机票:出票(代扣)
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void submitOrder(String apiKey, String secretKey) {
+        System.out.println("****************************  国际机票:出票(代扣)  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "IntlFlight/submitOrder";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("acctId", "100012"); //
+        params.put("orderId", 33394136); //
+        params.put("payType", 1); //
+        params.put("pay", 1216); //
+        params.put("platform", "10001"); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国际机票:出票(代扣)  end *******************************************");
+    }
+
+    /**
+     * 国际机票:订单列表
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void getOrderList(String apiKey, String secretKey) {
+        System.out.println("****************************  国际机票:订单列表  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "IntlFlight/getOrderList";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("orderId", 33394136); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  国际机票:订单列表  end *******************************************");
+    }
+
+}

+ 56 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/demo/MyDemoMain.java

@@ -0,0 +1,56 @@
+package com.izouma.awesomeadmin.tuniu.demo;
+
+
+
+public class MyDemoMain {
+
+    public static void main(String[] args) {
+        // 密钥
+        String secretKey = "aaaaaaaa";
+
+
+
+        String ticketApiKey = "tickettest";
+
+        // 门票:景点列表查询
+        TicketDemo.scenicList(ticketApiKey, secretKey);
+
+        // 门票:景点详情
+        TicketDemo.scenicDetail(ticketApiKey, secretKey);
+
+        // 门票:特权门票查询
+        //TicketDemo.privilegeTicketList(ticketApiKey, secretKey);
+
+        // 门票:门票详情
+        //TicketDemo.detail(ticketApiKey, secretKey);
+
+        // 门票:创建订单
+        //TicketDemo.createOrder(ticketApiKey, secretKey);
+
+        // 门票:取消订单
+        //TicketDemo.cancelOrder(ticketApiKey, secretKey);
+
+        // 门票:出票(代扣)
+        //TicketDemo.submitOrder(ticketApiKey, secretKey);
+
+        // 门票:订单详情
+        //TicketDemo.orderDetail(ticketApiKey, secretKey);
+
+        // 门票:订单状态
+        //TicketDemo.orderStatus(ticketApiKey, secretKey);
+
+        // 门票:退票申请
+        //TicketDemo.refundOrder(ticketApiKey, secretKey);
+
+        // 门票:门票核销查询
+        //TicketDemo.verifyOrder(ticketApiKey, secretKey);
+
+
+        // 公共查询:查询代扣账单
+//		CommonApiDemo.query(apiKey, secretKey);
+
+        // 公共查询:订单状态通知接口
+        // 该接口是get方式
+        //CommonApiDemo.orderChange();
+    }
+}

+ 286 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/demo/TicketDemo.java

@@ -0,0 +1,286 @@
+package com.izouma.awesomeadmin.tuniu.demo;
+
+
+import com.izouma.awesomeadmin.tuniu.common.SendHttpRequest;
+import com.izouma.awesomeadmin.tuniu.common.URLConfig;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 门票
+ *
+ * @author tengyong
+ */
+public class TicketDemo {
+
+    /**
+     * 门票:景点列表查询
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void scenicList(String apiKey, String secretKey) {
+        System.out.println("****************************  门票:景点列表查询  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Ticket/scenicList";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("page", 1); //
+        params.put("pageSize", 1); //
+        params.put("key", "南京"); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  门票:景点列表查询  end *******************************************");
+    }
+
+    /**
+     * 门票:景点详情
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void scenicDetail(String apiKey, String secretKey) {
+        System.out.println("****************************  门票:景点详情  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Ticket/scenicDetail";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("scenicId", "poi824"); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  门票:景点详情  end *******************************************");
+    }
+
+    /**
+     * 门票:特权门票查询
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void privilegeTicketList(String apiKey, String secretKey) {
+        System.out.println("****************************  门票:特权门票查询  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Ticket/privilegeTicketList";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("page", 1); //
+        params.put("pageSize", 1); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  门票:特权门票查询  end *******************************************");
+    }
+
+    /**
+     * 门票:门票详情
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void detail(String apiKey, String secretKey) {
+        System.out.println("****************************  门票:门票详情  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Ticket/detail";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("productId", 5165355); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  门票:门票详情  end *******************************************");
+    }
+
+    /**
+     * 门票:创建订单
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void createOrder(String apiKey, String secretKey) {
+        System.out.println("****************************  门票:创建订单  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Ticket/createOrder";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("startTime", "2016-12-27"); //
+
+        List<Map<String, Object>> menpiaoResourceList = new ArrayList<Map<String, Object>>();
+        Map<String, Object> menpiaoResourceListMap = new HashMap<String, Object>();
+        menpiaoResourceListMap.put("resourceId", 33840011);
+        menpiaoResourceListMap.put("drawType", 0);
+        menpiaoResourceListMap.put("salePrice", "1");
+        menpiaoResourceListMap.put("spotId", 12);
+        menpiaoResourceListMap.put("bookNumber", 1);
+        menpiaoResourceListMap.put("startPrice", "1");
+        menpiaoResourceListMap.put("resourceType", 4);
+        menpiaoResourceList.add(menpiaoResourceListMap);
+        params.put("menpiaoResourceList", menpiaoResourceList); //
+
+        params.put("acctId", "100012"); //
+        params.put("productLineId", 65866); //
+
+        Map<String, Object> contact = new HashMap<String, Object>();
+        contact.put("contactName", "fa");
+        params.put("contact", contact); //
+
+        params.put("contactName", "aa"); //
+        params.put("contactTel", "1234213421"); //
+        params.put("sourceOrderId", "PS16120620441609065"); //
+        params.put("productName", "<测试  瘦西湖门票>儿童票"); //
+        params.put("touristList", new ArrayList<Object>()); //
+        params.put("productId", 5165355); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  门票:创建订单  end *******************************************");
+    }
+
+    /**
+     * 门票:取消订单
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void cancelOrder(String apiKey, String secretKey) {
+        System.out.println("****************************  门票:取消订单  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Ticket/cancelOrder";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("orderId", 33434532); //
+        params.put("remark", "test"); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  门票:取消订单  end *******************************************");
+    }
+
+    /**
+     * 门票:出票(代扣)
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void submitOrder(String apiKey, String secretKey) {
+        System.out.println("****************************  门票:出票(代扣)  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Ticket/submitOrder";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("acctId", "100012"); //
+        params.put("orderId", 33409697); //
+        params.put("payType", 1); //
+        params.put("pay", 38); //
+        params.put("platform", "10001"); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  门票:出票(代扣)  end *******************************************");
+    }
+
+    /**
+     * 门票:订单详情
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void orderDetail(String apiKey, String secretKey) {
+        System.out.println("****************************  门票:订单详情  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Ticket/orderDetail";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("acctId", "100012"); //
+        params.put("orderId", 33434532); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  门票:订单详情  end *******************************************");
+    }
+
+    /**
+     * 门票:订单状态
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void orderStatus(String apiKey, String secretKey) {
+        System.out.println("****************************  门票:订单状态  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Ticket/orderStatus";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("acctId", "100012"); //
+        params.put("orderId", 33410374); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  门票:订单状态  end *******************************************");
+    }
+
+    /**
+     * 门票:退票申请
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void refundOrder(String apiKey, String secretKey) {
+        System.out.println("****************************  门票:退票申请  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Ticket/refundOrder";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("remark", "100012"); //
+        params.put("orderId", 33294814); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  门票:退票申请  end *******************************************");
+    }
+
+    /**
+     * 门票:门票核销查询
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void verifyOrder(String apiKey, String secretKey) {
+        System.out.println("****************************  门票:门票核销查询  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Ticket/verifyOrder";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("orderId", 33294814); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  门票:门票核销查询  end *******************************************");
+    }
+}

+ 220 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/demo/ToursDemo.java

@@ -0,0 +1,220 @@
+package com.izouma.awesomeadmin.tuniu.demo;
+
+
+
+import com.izouma.awesomeadmin.tuniu.common.SendHttpRequest;
+import com.izouma.awesomeadmin.tuniu.common.URLConfig;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class ToursDemo {
+
+    /**
+     * 跟团:跟团列表查询
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void list(String apiKey, String secretKey) {
+        System.out.println("****************************  跟团:跟团列表查询  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Tours/list";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("page", 1); //
+        params.put("manager", 10); //
+        params.put("pageSize", 10); //
+        params.put("bookCityId", 200); //
+        List<Integer> departCity = new ArrayList<Integer>();
+        departCity.add(200);
+        params.put("departCity", departCity); //
+        params.put("beginDate", "2017-01-04"); //
+        params.put("endDate", "2017-01-10"); //
+        params.put("key", ""); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  跟团:跟团列表查询  end *******************************************");
+    }
+
+    /**
+     * 跟团:跟团详情
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void detail(String apiKey, String secretKey) {
+        System.out.println("****************************  跟团:跟团详情  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Tours/detail";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("productId", "210130972"); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  跟团:跟团详情  end *******************************************");
+    }
+
+    /**
+     * 跟团:价格日历
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void calendar(String apiKey, String secretKey) {
+        System.out.println("****************************  跟团:价格日历  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Tours/calendar";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("acctId", "100012"); //
+        params.put("productId", 210130972); //
+        params.put("departDate", "2017-01-29"); //
+        params.put("bookCityId", 200); //
+        params.put("departCityId", 200); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  跟团:价格日历  end *******************************************");
+    }
+
+    /**
+     * 跟团:单房差资源
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void roomCharge(String apiKey, String secretKey) {
+        System.out.println("****************************  跟团:单房差资源  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Tours/roomCharge";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("productId", 210091124); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  跟团:单房差资源  end *******************************************");
+    }
+
+    /**
+     * 跟团:创建订单
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void createOrder(String apiKey, String secretKey) {
+        System.out.println("****************************  跟团:创建订单  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Tours/createOrder";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("sourceOrderId", "201612171912");
+        params.put("productId", "210108882"); //
+        params.put("productName", "测试测试"); //
+        params.put("acctId", "100012"); //
+        params.put("contactTel", "18366188081"); //
+        params.put("contactName", "途牛测试"); //
+        params.put("contactEmail", "xucaigui@tuniu.com"); //
+        params.put("groupCost", "34"); //
+        params.put("startTime", "2017-01-13"); //
+        params.put("endTime", "2017-01-15"); //
+        params.put("bookCity", "上海"); //
+        params.put("bookCityCode", "2500"); //
+        params.put("startCity", "上海"); //
+        params.put("startCityCode", 2500); //
+        params.put("destCity", "南京"); //
+        params.put("destCityCode", "1602"); //
+        params.put("adultNum", "1"); //
+        params.put("proMode", "1"); //
+        params.put("roomCharge", "4"); //
+        params.put("remark", "【分销订单】成人495/人,儿童396/人。 分销商:分销-测试专用(200003)【其他需求】"); //
+        params.put("childNum", "0"); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  跟团:创建订单  end *******************************************");
+    }
+
+    /**
+     * 跟团:出票(代扣)
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void submitOrder(String apiKey, String secretKey) {
+        System.out.println("****************************  跟团:出票(代扣)  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Tours/submitOrder";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("acctId", "100012");
+        params.put("payType", 1);
+        params.put("pay", 1000);
+        params.put("orderId", 1004425021); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  跟团:出票(代扣)  end *******************************************");
+    }
+
+    /**
+     * 跟团:订单详情
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void orderDetail(String apiKey, String secretKey) {
+        System.out.println("****************************  跟团:订单详情  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Tours/orderDetail";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("orderId", 1004425021); //
+        params.put("acctId", "100012"); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  跟团:订单详情  end *******************************************");
+    }
+
+    /**
+     * 跟团:订单状态
+     *
+     * @param apiKey
+     * @param secretKey
+     */
+    public static void orderStatus(String apiKey, String secretKey) {
+        System.out.println("****************************  跟团:订单状态  start *******************************************\r\n");
+
+        // 请求的接口地址
+        String url = "Tours/orderStatus";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("orderId", 1004425021); //
+        params.put("acctId", "100012"); //
+
+        SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        System.out.println("\r\n****************************  跟团:订单状态  end *******************************************");
+    }
+}

+ 50 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Contact.java

@@ -0,0 +1,50 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class Contact {
+    private String name;//姓名
+    private String tel;//手机号码
+    private String email;//Email地址
+    private String application;//1先生 2女士 0为未知
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setTel(String tel) {
+        this.tel = tel;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public void setApplication(String application) {
+        this.application = application;
+    }
+
+    public String getName() {
+
+        return name;
+    }
+
+    public String getTel() {
+        return tel;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public String getApplication() {
+        return application;
+    }
+}

+ 59 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Delivery.java

@@ -0,0 +1,59 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class Delivery {
+    private String receiverName;//收件人姓名
+    private String telNum;//收件人手机号码
+    private String address;//收件人地址
+    private String zipCode;//邮编
+    private String invoiceTitle;//发票信息
+
+    public void setReceiverName(String receiverName) {
+        this.receiverName = receiverName;
+    }
+
+    public void setTelNum(String telNum) {
+        this.telNum = telNum;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public void setZipCode(String zipCode) {
+        this.zipCode = zipCode;
+    }
+
+    public void setInvoiceTitle(String invoiceTitle) {
+        this.invoiceTitle = invoiceTitle;
+    }
+
+    public String getReceiverName() {
+
+        return receiverName;
+    }
+
+    public String getTelNum() {
+        return telNum;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public String getZipCode() {
+        return zipCode;
+    }
+
+    public String getInvoiceTitle() {
+        return invoiceTitle;
+    }
+}

+ 68 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/CalendarDto.java

@@ -0,0 +1,68 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto;
+
+/**
+ * TODO: description
+ * Date: 2016-12-29
+ *
+ * @author xucaigui
+ */
+public class CalendarDto {
+    private String orgCityCode;//出发城市三字码
+    private String dstCityCode;//到达城市三字码
+    private String departureDate;//起始出发日期,格式如:"2015-06-19"
+    private String departureDate2;//截止出发日期,格式如:"2015-06-19"。默认请传起始出发日期+3个月;
+    private String backDate;//起始返回日期,格式如:"2015-06-19"。(单程不用关心,往返必传);
+    private Integer type;//日历类型(1 单程,2 往返);
+
+    public void setOrgCityCode(String orgCityCode) {
+        this.orgCityCode = orgCityCode;
+    }
+
+    public void setDstCityCode(String dstCityCode) {
+        this.dstCityCode = dstCityCode;
+    }
+
+    public void setDepartureDate(String departureDate) {
+        this.departureDate = departureDate;
+    }
+
+    public void setDepartureDate2(String departureDate2) {
+        this.departureDate2 = departureDate2;
+    }
+
+    public void setBackDate(String backDate) {
+        this.backDate = backDate;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getOrgCityCode() {
+
+        return orgCityCode;
+    }
+
+    public String getDstCityCode() {
+        return dstCityCode;
+    }
+
+    public String getDepartureDate() {
+        return departureDate;
+    }
+
+    public String getDepartureDate2() {
+        return departureDate2;
+    }
+
+    public String getBackDate() {
+        return backDate;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+}

+ 32 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/CancelOrderDto.java

@@ -0,0 +1,32 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto;
+
+/**
+ * TODO: description
+ * Date: 2016-12-29
+ *
+ * @author xucaigui
+ */
+public class CancelOrderDto {
+    private Integer orderId;//途牛订单号
+    private String reason;//取消订单理由 选填
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public Integer getOrderId() {
+
+        return orderId;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+}

+ 46 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/CheckCabinAndPriceDto.java

@@ -0,0 +1,46 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto;
+
+import com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.Resource;
+import com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.TouristList;
+
+import java.util.List;
+
+/**
+ * TODO: description
+ * Date: 2016-12-29
+ *
+ * @author xucaigui
+ */
+public class CheckCabinAndPriceDto {
+    private Integer type;// 1.验舱  2.验价  3.验舱+验价
+    private List<Resource> resourceList;//资源列表
+    private List<TouristList> touristList;//乘客列表
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public void setResourceList(List<Resource> resourceList) {
+        this.resourceList = resourceList;
+    }
+
+    public void setTouristList(List<TouristList> touristList) {
+        this.touristList = touristList;
+    }
+
+    public Integer getType() {
+
+        return type;
+    }
+
+    public List<Resource> getResourceList() {
+        return resourceList;
+    }
+
+    public List<TouristList> getTouristList() {
+        return touristList;
+    }
+}

+ 25 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/CheckCharacterDto.java

@@ -0,0 +1,25 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto;
+
+import java.util.List;
+
+/**
+ * TODO: description
+ * Date: 2016-12-29
+ *
+ * @author xucaigui
+ */
+public class CheckCharacterDto {
+    private List nameList;//名字列表
+
+    public void setNameList(List nameList) {
+        this.nameList = nameList;
+    }
+
+    public List getNameList() {
+
+        return nameList;
+    }
+}

+ 98 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/CreateOrderDto.java

@@ -0,0 +1,98 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto;
+
+
+import com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.Contact;
+import com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.Delivery;
+
+import java.util.List;
+
+/**
+ * TODO: description
+ * Date: 2016-12-29
+ *
+ * @author xucaigui
+ */
+public class CreateOrderDto {
+    /**
+     * 分销商订单号
+     * 非空时,可防止重复下单。若重复下单,则返回之前已生成的orderId,且isNewFlag=0。
+     */
+    private String sourceOrderId;
+    /**
+     * 航程信息列表
+     * JourneySeg:航程(出发城市到目的城市)中各航段的航班信息集合。
+     * 单程:航程长度为1,即出发城市到目的城市。
+     * 往返:航程长度为2,即出发城市到目的城市、目的城市到出发城市。
+     */
+    private List journeySegList;
+    /**
+     * 需要下单的全航程的价格信息列表
+     * 使用验舱验价的结果作为下单的参数传入。
+     */
+    private List journeyPriceList;
+    /**
+     * 联系人信息
+     */
+    private Contact contact;
+    /**
+     * 乘客资料列表
+     */
+    private List personList;
+    /**
+     * 发票配送信息。
+     * 若不为空,则需要配送费10元,请在前端提示用户,并在下单金额中加上配送费。
+     */
+    private Delivery delivery;
+
+    public void setSourceOrderId(String sourceOrderId) {
+        this.sourceOrderId = sourceOrderId;
+    }
+
+    public void setJourneySegList(List journeySegList) {
+        this.journeySegList = journeySegList;
+    }
+
+    public void setJourneyPriceList(List journeyPriceList) {
+        this.journeyPriceList = journeyPriceList;
+    }
+
+    public void setContact(Contact contact) {
+        this.contact = contact;
+    }
+
+    public void setPersonList(List personList) {
+        this.personList = personList;
+    }
+
+    public void setDelivery(Delivery delivery) {
+        this.delivery = delivery;
+    }
+
+    public String getSourceOrderId() {
+
+        return sourceOrderId;
+    }
+
+    public List getJourneySegList() {
+        return journeySegList;
+    }
+
+    public List getJourneyPriceList() {
+        return journeyPriceList;
+    }
+
+    public Contact getContact() {
+        return contact;
+    }
+
+    public List getPersonList() {
+        return personList;
+    }
+
+    public Delivery getDelivery() {
+        return delivery;
+    }
+}

+ 64 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/InquiryDto.java

@@ -0,0 +1,64 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto;
+
+import com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.Segment;
+
+import java.util.List;
+
+/**
+ * TODO: description
+ * Date: 2016-12-29
+ *
+ * @author xucaigui
+ */
+public class InquiryDto {
+    private Integer adultQuantity = 1;// 成人人数,默认值为1
+    private Integer childQuantity = 0;// 儿童人数,默认值为0
+    private List<Segment> SegmentList;
+    private Integer maxDrawOrderTime;
+    private Integer maxDrawTicketTime;
+
+    public void setMaxDrawOrderTime(Integer maxDrawOrderTime) {
+        this.maxDrawOrderTime = maxDrawOrderTime;
+    }
+
+    public void setMaxDrawTicketTime(Integer maxDrawTicketTime) {
+        this.maxDrawTicketTime = maxDrawTicketTime;
+    }
+
+    public Integer getMaxDrawOrderTime() {
+
+        return maxDrawOrderTime;
+    }
+
+    public Integer getMaxDrawTicketTime() {
+        return maxDrawTicketTime;
+    }
+
+    public void setChildQuantity(Integer childQuantity) {
+        this.childQuantity = childQuantity;
+    }
+
+    public void setSegmentList(List<Segment> segmentList) {
+        SegmentList = segmentList;
+    }
+
+    public void setAdultQuantity(Integer adultQuantity) {
+        this.adultQuantity = adultQuantity;
+    }
+
+    public Integer getAdultQuantity() {
+
+        return adultQuantity;
+    }
+
+    public Integer getChildQuantity() {
+        return childQuantity;
+    }
+
+    public List<Segment> getSegmentList() {
+        return SegmentList;
+    }
+}

+ 89 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/OnewaySpecialDto.java

@@ -0,0 +1,89 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto;
+
+
+import java.util.List;
+
+/**
+ * TODO: description
+ * Date: 2016-12-29
+ *
+ * @author xucaigui
+ */
+public class OnewaySpecialDto {
+    private String orgCityIataCode;//出发城市三字码
+    private String dstCityIataCode;//到达城市三字码
+    private String departureDate;//去程日期,如"2016-09-01"
+    private String beginDate;//起始去程日期,用于时间范围内查询,格式如:2016-09-01
+    private String endDate;//结束去程日期,用于时间范围内查询,格式如:2016-09-01
+    private List weeks;//周几,以去程返程为一对,可以有多对
+    private List airCompanys;//航司,可以多个航司查询
+    private Integer limit = 10;//返回条数,默认10
+
+    public void setOrgCityIataCode(String orgCityIataCode) {
+        this.orgCityIataCode = orgCityIataCode;
+    }
+
+    public void setDstCityIataCode(String dstCityIataCode) {
+        this.dstCityIataCode = dstCityIataCode;
+    }
+
+    public void setDepartureDate(String departureDate) {
+        this.departureDate = departureDate;
+    }
+
+    public void setBeginDate(String beginDate) {
+        this.beginDate = beginDate;
+    }
+
+    public void setEndDate(String endDate) {
+        this.endDate = endDate;
+    }
+
+    public void setWeeks(List weeks) {
+        this.weeks = weeks;
+    }
+
+    public void setAirCompanys(List airCompanys) {
+        this.airCompanys = airCompanys;
+    }
+
+    public void setLimit(Integer limit) {
+        this.limit = limit;
+    }
+
+    public String getOrgCityIataCode() {
+
+        return orgCityIataCode;
+    }
+
+    public String getDstCityIataCode() {
+        return dstCityIataCode;
+    }
+
+    public String getDepartureDate() {
+        return departureDate;
+    }
+
+    public String getBeginDate() {
+        return beginDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    public List getWeeks() {
+        return weeks;
+    }
+
+    public List getAirCompanys() {
+        return airCompanys;
+    }
+
+    public Integer getLimit() {
+        return limit;
+    }
+}

+ 23 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/OrderDto.java

@@ -0,0 +1,23 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto;
+
+/**
+ * TODO: description
+ * Date: 2016-12-30
+ *
+ * @author xucaigui
+ */
+public class OrderDto {
+    private Integer orderId;
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public Integer getOrderId() {
+
+        return orderId;
+    }
+}

+ 123 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/QueryFareRemarkDto.java

@@ -0,0 +1,123 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class QueryFareRemarkDto {
+    private Integer solutionId;//来源ID。
+    private String flightNo;//航班:AU2011
+    private String cabin;//舱位,对应查询接口中的cabinCode
+    private String orgAirportCode;//出发机场三字码
+    private String dstAirportCode;//到达机场三字码
+    private String departureDate;//起飞日期
+    private Integer costPrice;//票面价。对应fareBreakDownList.prie
+    private Integer fullPrice;//舱等全价。对应flightSegList.fullPrice/fullPriceC/fullPriceF
+    private Integer salePrice;//售价。对应fareBreakDownList.baseFare
+    private Long vendorPolicyId;//政策ID
+    private Integer policyId;//政策ID两个政策ID都是查询拿到,拿到什么传入什么即可。
+    private String externInfo;//航司直连特有
+
+    public void setPolicyId(Integer policyId) {
+        this.policyId = policyId;
+    }
+
+    public Integer getPolicyId() {
+
+        return policyId;
+    }
+
+    public void setSolutionId(Integer solutionId) {
+        this.solutionId = solutionId;
+    }
+
+    public void setFlightNo(String flightNo) {
+        this.flightNo = flightNo;
+    }
+
+    public void setCabin(String cabin) {
+        this.cabin = cabin;
+    }
+
+    public void setOrgAirportCode(String orgAirportCode) {
+        this.orgAirportCode = orgAirportCode;
+    }
+
+    public void setDstAirportCode(String dstAirportCode) {
+        this.dstAirportCode = dstAirportCode;
+    }
+
+    public void setDepartureDate(String departureDate) {
+        this.departureDate = departureDate;
+    }
+
+    public void setCostPrice(Integer costPrice) {
+        this.costPrice = costPrice;
+    }
+
+    public void setFullPrice(Integer fullPrice) {
+        this.fullPrice = fullPrice;
+    }
+
+    public void setSalePrice(Integer salePrice) {
+        this.salePrice = salePrice;
+    }
+
+    public void setVendorPolicyId(Long vendorPolicyId) {
+        this.vendorPolicyId = vendorPolicyId;
+    }
+
+    public void setExternInfo(String externInfo) {
+        this.externInfo = externInfo;
+    }
+
+    public Integer getSolutionId() {
+
+        return solutionId;
+    }
+
+    public String getFlightNo() {
+        return flightNo;
+    }
+
+    public String getCabin() {
+        return cabin;
+    }
+
+    public String getOrgAirportCode() {
+        return orgAirportCode;
+    }
+
+    public String getDstAirportCode() {
+        return dstAirportCode;
+    }
+
+    public String getDepartureDate() {
+        return departureDate;
+    }
+
+    public Integer getCostPrice() {
+        return costPrice;
+    }
+
+    public Integer getFullPrice() {
+        return fullPrice;
+    }
+
+    public Integer getSalePrice() {
+        return salePrice;
+    }
+
+    public Long getVendorPolicyId() {
+        return vendorPolicyId;
+    }
+
+    public String getExternInfo() {
+        return externInfo;
+    }
+}

+ 59 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/QueryRefundFeeDto.java

@@ -0,0 +1,59 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto;
+
+/**
+ * TODO: description
+ * Date: 2016-12-30
+ *
+ * @author xucaigui
+ */
+public class QueryRefundFeeDto {
+    private Integer orderId;//原订单ID
+    private String flightNum;//航班号
+    private String departureDate;//出发日期。格式如:2016-09-20
+    private Integer psptType;//出游人证件类型
+    private String psptId;//出游人证件号
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public void setFlightNum(String flightNum) {
+        this.flightNum = flightNum;
+    }
+
+    public void setDepartureDate(String departureDate) {
+        this.departureDate = departureDate;
+    }
+
+    public void setPsptType(Integer psptType) {
+        this.psptType = psptType;
+    }
+
+    public void setPsptId(String psptId) {
+        this.psptId = psptId;
+    }
+
+    public Integer getOrderId() {
+
+        return orderId;
+    }
+
+    public String getFlightNum() {
+        return flightNum;
+    }
+
+    public String getDepartureDate() {
+        return departureDate;
+    }
+
+    public Integer getPsptType() {
+        return psptType;
+    }
+
+    public String getPsptId() {
+        return psptId;
+    }
+}

+ 35 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/RefundOrderDto.java

@@ -0,0 +1,35 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto;
+
+
+import java.util.List;
+
+/**
+ * TODO: description
+ * Date: 2016-12-30
+ *
+ * @author xucaigui
+ */
+public class RefundOrderDto {
+    private Integer orderId;
+    private List touristList;
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public void setTouristList(List touristList) {
+        this.touristList = touristList;
+    }
+
+    public Integer getOrderId() {
+
+        return orderId;
+    }
+
+    public List getTouristList() {
+        return touristList;
+    }
+}

+ 59 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/SubmitOrderDto.java

@@ -0,0 +1,59 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto;
+
+/**
+ * TODO: description
+ * Date: 2016-12-30
+ *
+ * @author xucaigui
+ */
+public class SubmitOrderDto {
+    private String acctId;//管理员账号
+    private Integer orderId;//订单ID
+    private Integer payType;//支付方式.1:途牛钱包代扣;
+    private String pay;//付款金额(=订单总价-已支付金额)
+    private String platform;//平台标识(10001:PC,20000:m站,30001:app安卓,30002:appIOS,30003:appWindows,30004:app未知其他系统)(默认是pc)
+
+    public void setAcctId(String acctId) {
+        this.acctId = acctId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public void setPayType(Integer payType) {
+        this.payType = payType;
+    }
+
+    public void setPay(String pay) {
+        this.pay = pay;
+    }
+
+    public void setPlatform(String platform) {
+        this.platform = platform;
+    }
+
+    public String getAcctId() {
+
+        return acctId;
+    }
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public Integer getPayType() {
+        return payType;
+    }
+
+    public String getPay() {
+        return pay;
+    }
+
+    public String getPlatform() {
+        return platform;
+    }
+}

+ 117 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/DomesticFlightDto/TwowaySpecialDto.java

@@ -0,0 +1,117 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.DomesticFlightDto;
+
+import com.izouma.awesomeadmin.tuniu.dto.DomesticFlight.Weeks;
+
+import java.util.List;
+
+/**
+ * TODO: description
+ * Date: 2016-12-29
+ *
+ * @author xucaigui
+ */
+public class TwowaySpecialDto {
+    private String orgCityIataCode;//出发城市三字码
+    private String dstCityIataCode;//到达城市三字码
+    private String goDepartureDate;//去程日期,如"2016-09-01"
+    private String backDepartureDate;//返程日期,如"2016-09-05"
+    private String goBeginDate;//起始去程日期,用于时间范围内查询,格式如:2016-09-01
+    private String goEndDate;//结束去程日期,用于时间范围内查询,格式如:2016-09-01
+    private String backBeginDate;//起始返程日期,用于时间范围内查询,格式如:2016-09-01
+    private String backEndDate;//结束返程日期,用于时间范围内查询,格式如:2016-09-01
+    private List<Weeks> weeks;//周几,以去程返程为一对,可以有多对
+    private List airCompanys;//航司,可以多个航司查询
+    private Integer limit = 10;//返回条数,默认10
+
+    public void setOrgCityIataCode(String orgCityIataCode) {
+        this.orgCityIataCode = orgCityIataCode;
+    }
+
+    public void setDstCityIataCode(String dstCityIataCode) {
+        this.dstCityIataCode = dstCityIataCode;
+    }
+
+    public void setGoDepartureDate(String goDepartureDate) {
+        this.goDepartureDate = goDepartureDate;
+    }
+
+    public void setBackDepartureDate(String backDepartureDate) {
+        this.backDepartureDate = backDepartureDate;
+    }
+
+    public void setGoBeginDate(String goBeginDate) {
+        this.goBeginDate = goBeginDate;
+    }
+
+    public void setGoEndDate(String goEndDate) {
+        this.goEndDate = goEndDate;
+    }
+
+    public void setBackBeginDate(String backBeginDate) {
+        this.backBeginDate = backBeginDate;
+    }
+
+    public void setBackEndDate(String backEndDate) {
+        this.backEndDate = backEndDate;
+    }
+
+    public void setWeeks(List<Weeks> weeks) {
+        this.weeks = weeks;
+    }
+
+    public void setAirCompanys(List airCompanys) {
+        this.airCompanys = airCompanys;
+    }
+
+    public void setLimit(Integer limit) {
+        this.limit = limit;
+    }
+
+    public String getOrgCityIataCode() {
+
+        return orgCityIataCode;
+    }
+
+    public String getDstCityIataCode() {
+        return dstCityIataCode;
+    }
+
+    public String getGoDepartureDate() {
+        return goDepartureDate;
+    }
+
+    public String getBackDepartureDate() {
+        return backDepartureDate;
+    }
+
+    public String getGoBeginDate() {
+        return goBeginDate;
+    }
+
+    public String getGoEndDate() {
+        return goEndDate;
+    }
+
+    public String getBackBeginDate() {
+        return backBeginDate;
+    }
+
+    public String getBackEndDate() {
+        return backEndDate;
+    }
+
+    public List<Weeks> getWeeks() {
+        return weeks;
+    }
+
+    public List getAirCompanys() {
+        return airCompanys;
+    }
+
+    public Integer getLimit() {
+        return limit;
+    }
+}

+ 68 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/FareBreakDown.java

@@ -0,0 +1,68 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class FareBreakDown {
+    private Passenger passenger;//乘客信息:乘客类型、乘客数量
+    private Integer baseFare;//销售价(下单价)
+    private Integer price;//票面价(原价)
+    private Integer tax;//机场建设费
+    private Integer fuel;//燃油附加税
+    private Double discount;//折扣(用于展示)
+
+    public void setPassenger(Passenger passenger) {
+        this.passenger = passenger;
+    }
+
+    public void setBaseFare(Integer baseFare) {
+        this.baseFare = baseFare;
+    }
+
+    public void setPrice(Integer price) {
+        this.price = price;
+    }
+
+    public void setTax(Integer tax) {
+        this.tax = tax;
+    }
+
+    public void setFuel(Integer fuel) {
+        this.fuel = fuel;
+    }
+
+    public void setDiscount(Double discount) {
+        this.discount = discount;
+    }
+
+    public Passenger getPassenger() {
+
+        return passenger;
+    }
+
+    public Integer getBaseFare() {
+        return baseFare;
+    }
+
+    public Integer getPrice() {
+        return price;
+    }
+
+    public Integer getTax() {
+        return tax;
+    }
+
+    public Integer getFuel() {
+        return fuel;
+    }
+
+    public Double getDiscount() {
+        return discount;
+    }
+}

+ 40 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/FeeInfo.java

@@ -0,0 +1,40 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class FeeInfo {
+    /*
+    名称
+如:起飞前2小时内、起飞前2小时外等
+     */
+    private String name;
+    /*
+    收费
+如:275元/人
+     */
+    private String value;
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+
+        return name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+}

+ 95 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/FlightCabin.java

@@ -0,0 +1,95 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class FlightCabin {
+    private String seatType;//舱位基本类型:经济舱、公务舱、头等舱
+    private Integer seatTypeCode;//舱位基本类型:1、经济舱2、公务舱3、头等舱
+    private String cabinClass;//舱等码:如Y、C、F等
+    private String cabinCode;//舱位码:如:Y、C、F、A、D、H、J等(一个舱等有N个舱位码)
+    private String seatStatus;//舱位余位:1-9。(>=9返回9)
+    private String freeLuggage;//赠送行李额。如:20KG
+    private String overloadLuggage;//逾重行李额说明文本
+    private Integer billType;//单据类型:0未知1行程单2仅发票3发票(可提供行程单+差额发票)
+    private String billTypeName;//单据类型中文。如:行程单
+
+    public void setSeatType(String seatType) {
+        this.seatType = seatType;
+    }
+
+    public void setSeatTypeCode(Integer seatTypeCode) {
+        this.seatTypeCode = seatTypeCode;
+    }
+
+    public void setCabinClass(String cabinClass) {
+        this.cabinClass = cabinClass;
+    }
+
+    public void setCabinCode(String cabinCode) {
+        this.cabinCode = cabinCode;
+    }
+
+    public void setSeatStatus(String seatStatus) {
+        this.seatStatus = seatStatus;
+    }
+
+    public void setFreeLuggage(String freeLuggage) {
+        this.freeLuggage = freeLuggage;
+    }
+
+    public void setOverloadLuggage(String overloadLuggage) {
+        this.overloadLuggage = overloadLuggage;
+    }
+
+    public void setBillType(Integer billType) {
+        this.billType = billType;
+    }
+
+    public void setBillTypeName(String billTypeName) {
+        this.billTypeName = billTypeName;
+    }
+
+    public String getSeatType() {
+
+        return seatType;
+    }
+
+    public Integer getSeatTypeCode() {
+        return seatTypeCode;
+    }
+
+    public String getCabinClass() {
+        return cabinClass;
+    }
+
+    public String getCabinCode() {
+        return cabinCode;
+    }
+
+    public String getSeatStatus() {
+        return seatStatus;
+    }
+
+    public String getFreeLuggage() {
+        return freeLuggage;
+    }
+
+    public String getOverloadLuggage() {
+        return overloadLuggage;
+    }
+
+    public Integer getBillType() {
+        return billType;
+    }
+
+    public String getBillTypeName() {
+        return billTypeName;
+    }
+}

+ 294 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/FlightSeg.java

@@ -0,0 +1,294 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+import java.util.List;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class FlightSeg {
+    private String flightNo;//航班号,使用大写字母.如:MU2881
+    private String departDate;//出发日期,格式yyyy-MM-dd.如:2016-01-16
+    private String departTime;//出发时间,格式HH:mm.如:07:35
+    private String departCityIataCode;//出发城市三字码
+    private String departCityName;//出发城市名
+    private String departAirportCode;//出发机场三字码,使用大写字母.如:NKG
+    private String departAirportName;//出发机场名
+    private String departAirportTerminal;//出发航站楼,如:T1
+    private String arriveCityIataCode;//到达城市三字码
+    private String arriveCityName;//到达城市名
+    private String arriveDate;//到达日期.如:2016-01-16
+    private String arriveTime;//到达时间,格式HH:mm.如:09:35
+    private String arriveAirportName;//到达机场名
+    private String arriveAirportCode;//到达机场三字码,使用大写字母.如:NKG
+    private String arriveAirportTerminal;//到达航站楼,如:T4
+    private String craftType;//机型,如:737
+    private String airlineIataCode;//航空公司二字码,如:CA
+    private String airlineCompany;//航空公司名称,如:南方航空
+    private String duration;//飞行时长,格式HH:mm.如:3:05,表示飞行3 小时5分钟
+    private Integer isShare;//是否共享航班。1.共享 0.非共享
+    private String shareFlightNo;//共享航班号。如:CA1841
+    private String shareAirline;//共享航司二字码。如:CA
+    private String shareAirlineName;//共享航司名称。如:中国国际航空公司
+    private Integer mealFlag;//餐食标识 0:无 ;1:有
+    private String meal;//餐食类型:B:早餐;L:午餐;S:小吃;D:晚餐
+    private String stopInformation;//经停信息。如:长沙,黄花国际机场,2016-08-10 15:15,2016-08-10 14:30;
+    private Integer stopNum;//经停次数
+    private List<StopPoint> stopPointList;//经停信息列表。
+    private Integer fullPrice;//经济舱舱等全价。如:1000
+    private Integer fullPriceC;//公务舱舱等全价。如:2000
+    private Integer fullPriceF;//头等舱舱等全价。如:3000
+
+    public void setFlightNo(String flightNo) {
+        this.flightNo = flightNo;
+    }
+
+    public void setDepartDate(String departDate) {
+        this.departDate = departDate;
+    }
+
+    public void setDepartTime(String departTime) {
+        this.departTime = departTime;
+    }
+
+    public void setDepartCityIataCode(String departCityIataCode) {
+        this.departCityIataCode = departCityIataCode;
+    }
+
+    public void setDepartCityName(String departCityName) {
+        this.departCityName = departCityName;
+    }
+
+    public void setDepartAirportCode(String departAirportCode) {
+        this.departAirportCode = departAirportCode;
+    }
+
+    public void setDepartAirportName(String departAirportName) {
+        this.departAirportName = departAirportName;
+    }
+
+    public void setDepartAirportTerminal(String departAirportTerminal) {
+        this.departAirportTerminal = departAirportTerminal;
+    }
+
+    public void setArriveCityIataCode(String arriveCityIataCode) {
+        this.arriveCityIataCode = arriveCityIataCode;
+    }
+
+    public void setArriveCityName(String arriveCityName) {
+        this.arriveCityName = arriveCityName;
+    }
+
+    public void setArriveDate(String arriveDate) {
+        this.arriveDate = arriveDate;
+    }
+
+    public void setArriveTime(String arriveTime) {
+        this.arriveTime = arriveTime;
+    }
+
+    public void setArriveAirportName(String arriveAirportName) {
+        this.arriveAirportName = arriveAirportName;
+    }
+
+    public void setArriveAirportCode(String arriveAirportCode) {
+        this.arriveAirportCode = arriveAirportCode;
+    }
+
+    public void setArriveAirportTerminal(String arriveAirportTerminal) {
+        this.arriveAirportTerminal = arriveAirportTerminal;
+    }
+
+    public void setCraftType(String craftType) {
+        this.craftType = craftType;
+    }
+
+    public void setAirlineIataCode(String airlineIataCode) {
+        this.airlineIataCode = airlineIataCode;
+    }
+
+    public void setAirlineCompany(String airlineCompany) {
+        this.airlineCompany = airlineCompany;
+    }
+
+    public void setDuration(String duration) {
+        this.duration = duration;
+    }
+
+    public void setIsShare(Integer isShare) {
+        this.isShare = isShare;
+    }
+
+    public void setShareFlightNo(String shareFlightNo) {
+        this.shareFlightNo = shareFlightNo;
+    }
+
+    public void setShareAirline(String shareAirline) {
+        this.shareAirline = shareAirline;
+    }
+
+    public void setShareAirlineName(String shareAirlineName) {
+        this.shareAirlineName = shareAirlineName;
+    }
+
+    public void setMealFlag(Integer mealFlag) {
+        this.mealFlag = mealFlag;
+    }
+
+    public void setMeal(String meal) {
+        this.meal = meal;
+    }
+
+    public void setStopInformation(String stopInformation) {
+        this.stopInformation = stopInformation;
+    }
+
+    public void setStopNum(Integer stopNum) {
+        this.stopNum = stopNum;
+    }
+
+    public void setStopPointList(List<StopPoint> stopPointList) {
+        this.stopPointList = stopPointList;
+    }
+
+    public void setFullPrice(Integer fullPrice) {
+        this.fullPrice = fullPrice;
+    }
+
+    public void setFullPriceC(Integer fullPriceC) {
+        this.fullPriceC = fullPriceC;
+    }
+
+    public void setFullPriceF(Integer fullPriceF) {
+        this.fullPriceF = fullPriceF;
+    }
+
+    public String getFlightNo() {
+        return flightNo;
+    }
+
+    public String getDepartDate() {
+        return departDate;
+    }
+
+    public String getDepartTime() {
+        return departTime;
+    }
+
+    public String getDepartCityIataCode() {
+        return departCityIataCode;
+    }
+
+    public String getDepartCityName() {
+        return departCityName;
+    }
+
+    public String getDepartAirportCode() {
+        return departAirportCode;
+    }
+
+    public String getDepartAirportName() {
+        return departAirportName;
+    }
+
+    public String getDepartAirportTerminal() {
+        return departAirportTerminal;
+    }
+
+    public String getArriveCityIataCode() {
+        return arriveCityIataCode;
+    }
+
+    public String getArriveCityName() {
+        return arriveCityName;
+    }
+
+    public String getArriveDate() {
+        return arriveDate;
+    }
+
+    public String getArriveTime() {
+        return arriveTime;
+    }
+
+    public String getArriveAirportName() {
+        return arriveAirportName;
+    }
+
+    public String getArriveAirportCode() {
+        return arriveAirportCode;
+    }
+
+    public String getArriveAirportTerminal() {
+        return arriveAirportTerminal;
+    }
+
+    public String getCraftType() {
+        return craftType;
+    }
+
+    public String getAirlineIataCode() {
+        return airlineIataCode;
+    }
+
+    public String getAirlineCompany() {
+        return airlineCompany;
+    }
+
+    public String getDuration() {
+        return duration;
+    }
+
+    public Integer getIsShare() {
+        return isShare;
+    }
+
+    public String getShareFlightNo() {
+        return shareFlightNo;
+    }
+
+    public String getShareAirline() {
+        return shareAirline;
+    }
+
+    public String getShareAirlineName() {
+        return shareAirlineName;
+    }
+
+    public Integer getMealFlag() {
+        return mealFlag;
+    }
+
+    public String getMeal() {
+        return meal;
+    }
+
+    public String getStopInformation() {
+        return stopInformation;
+    }
+
+    public Integer getStopNum() {
+        return stopNum;
+    }
+
+    public List<StopPoint> getStopPointList() {
+        return stopPointList;
+    }
+
+    public Integer getFullPrice() {
+        return fullPrice;
+    }
+
+    public Integer getFullPriceC() {
+        return fullPriceC;
+    }
+
+    public Integer getFullPriceF() {
+        return fullPriceF;
+    }
+}

+ 59 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/InsuranceInfo.java

@@ -0,0 +1,59 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class InsuranceInfo {
+    private String id;//保险方案标示
+    private Integer type;//保险类型 1、航空意外险 2、航空延误险
+    private String name;//保险方案名称.如:航空意外险A款、航空延误险
+    private String remark;//保险方案备注.如:最高赔付¥60万,贴心的旅行保障
+    private Integer cost;//保险收费(单位:元/人)
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public void setCost(Integer cost) {
+        this.cost = cost;
+    }
+
+    public String getId() {
+
+        return id;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public Integer getCost() {
+        return cost;
+    }
+}

+ 25 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/JourneyCabin.java

@@ -0,0 +1,25 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+import java.util.List;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class JourneyCabin {
+    private List<FlightCabin> flightCabinList;//航段舱位信息列表(中转会有多个航段)
+
+    public void setFlightCabinList(List<FlightCabin> flightCabinList) {
+        this.flightCabinList = flightCabinList;
+    }
+
+    public List<FlightCabin> getFlightCabinList() {
+
+        return flightCabinList;
+    }
+}

+ 100 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/JourneyPrice.java

@@ -0,0 +1,100 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+import java.util.List;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class JourneyPrice {
+    private String solutionId;//来源ID 1航信,6携程,8开放平台,9航司直连
+    private String resId;//资源ID
+    private String vendorPolicyId;//开放平台政策ID
+    private String drawTicketTime;//预计起飞前的出票时长(分钟),0表示没有规则
+    private String drawOrderTime;//预计付款后的出票时长(分钟),0表示没有规则;
+    //航程舱位信息列表(去程/往返).验舱验价接口中type为验价时可不填
+    private List<JourneyCabin> journeyCabinList;
+    //运价基本信息
+    //每个乘客类型1条记录
+    private List<FareBreakDown> fareBreakDownList;
+    private SaleControl saleControl;//销控信息。用于提示用户和校验。
+    private String externalInfo;//航司直连特有字段
+
+    public void setSolutionId(String solutionId) {
+        this.solutionId = solutionId;
+    }
+
+    public void setResId(String resId) {
+        this.resId = resId;
+    }
+
+    public void setVendorPolicyId(String vendorPolicyId) {
+        this.vendorPolicyId = vendorPolicyId;
+    }
+
+    public void setDrawTicketTime(String drawTicketTime) {
+        this.drawTicketTime = drawTicketTime;
+    }
+
+    public void setDrawOrderTime(String drawOrderTime) {
+        this.drawOrderTime = drawOrderTime;
+    }
+
+    public void setJourneyCabinList(List<JourneyCabin> journeyCabinList) {
+        this.journeyCabinList = journeyCabinList;
+    }
+
+    public void setFareBreakDownList(List<FareBreakDown> fareBreakDownList) {
+        this.fareBreakDownList = fareBreakDownList;
+    }
+
+    public void setSaleControl(SaleControl saleControl) {
+        this.saleControl = saleControl;
+    }
+
+    public void setExternalInfo(String externalInfo) {
+        this.externalInfo = externalInfo;
+    }
+
+    public String getSolutionId() {
+
+        return solutionId;
+    }
+
+    public String getResId() {
+        return resId;
+    }
+
+    public String getVendorPolicyId() {
+        return vendorPolicyId;
+    }
+
+    public String getDrawTicketTime() {
+        return drawTicketTime;
+    }
+
+    public String getDrawOrderTime() {
+        return drawOrderTime;
+    }
+
+    public List<JourneyCabin> getJourneyCabinList() {
+        return journeyCabinList;
+    }
+
+    public List<FareBreakDown> getFareBreakDownList() {
+        return fareBreakDownList;
+    }
+
+    public SaleControl getSaleControl() {
+        return saleControl;
+    }
+
+    public String getExternalInfo() {
+        return externalInfo;
+    }
+}

+ 25 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/JourneySeg.java

@@ -0,0 +1,25 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+import java.util.List;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class JourneySeg {
+    private List flightSegList;//航段信息列表。(中转会有多个航段)
+
+    public void setFlightSegList(List flightSegList) {
+        this.flightSegList = flightSegList;
+    }
+
+    public List getFlightSegList() {
+
+        return flightSegList;
+    }
+}

+ 40 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Passenger.java

@@ -0,0 +1,40 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class Passenger {
+    /*
+    乘客类型:
+ADT:成人;CHD:儿童;
+     */
+    private String type;
+    /*
+    乘客数量
+     */
+    private Integer quantity;
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public void setQuantity(Integer quantity) {
+        this.quantity = quantity;
+    }
+
+    public Integer getQuantity() {
+
+        return quantity;
+    }
+
+    public String getType() {
+
+        return type;
+    }
+}

+ 120 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Person.java

@@ -0,0 +1,120 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class Person {
+    //乘客类型:1、成人 2、儿童
+    private Integer personType;
+    /*
+    乘客姓名(限传中文)
+    要求:
+    1、乘机人信息需与登记证件信息上的姓名一致;
+    2、中文姓名:若持护照登机,则必须按照护照上的中文姓名填写;姓名中含有生僻字,则除中文姓名外还需填写姓的全拼音、名的全拼音,(如:王赟里 “wang” “yunli”)
+    3、英文姓名:姓和名之前用“/”分开,并按证件的姓名顺序填写(如:John/Kim)。
+     */
+    private String passengerName;
+    /*
+    乘客名(拼音)。
+乘客姓名含生僻字时必传。格式如:yuanyuan;
+
+     */
+    private String firstName;
+    /*
+    乘客姓(拼音)。
+乘客姓名含生僻字时必传。格式如:zhang;
+
+     */
+    private String lastName;
+    /*
+    出生日期
+如:1992-08-20
+
+     */
+    private String birthday;
+    /*
+    证件类型:
+1、二代身份证
+2、护照
+3、军官证
+4、港澳通行证
+7、台胞证
+8、回乡证
+9、户口簿
+10、出生证明
+11、台湾通行证
+
+     */
+    private Integer identityType;
+    /*
+    证件号码
+如果证件类型为1二代身份证,要求:
+1.符合二代身份证号格式(一代身份证号不支持);
+2.请您确认您所选择的航班起飞日期在您的证件有效期内。
+
+     */
+    private String identityNo;
+
+    public void setPersonType(Integer personType) {
+        this.personType = personType;
+    }
+
+    public void setPassengerName(String passengerName) {
+        this.passengerName = passengerName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    public void setBirthday(String birthday) {
+        this.birthday = birthday;
+    }
+
+    public void setIdentityType(Integer identityType) {
+        this.identityType = identityType;
+    }
+
+    public void setIdentityNo(String identityNo) {
+        this.identityNo = identityNo;
+    }
+
+    public Integer getPersonType() {
+
+        return personType;
+    }
+
+    public String getPassengerName() {
+        return passengerName;
+    }
+
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public String getLastName() {
+        return lastName;
+    }
+
+    public String getBirthday() {
+        return birthday;
+    }
+
+    public Integer getIdentityType() {
+        return identityType;
+    }
+
+    public String getIdentityNo() {
+        return identityNo;
+    }
+}

+ 77 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Resource.java

@@ -0,0 +1,77 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class Resource {
+    private String solutionId;//渠道ID,1航信,6携程,8开放平台,9航司直连
+    private String resId;//资源ID
+    private String departureDate;//团期
+    private String vendorPolicyId;//开放平台的政策ID
+    private Integer price;//成人价格。(传0不校验)
+    private Integer childPrice;//儿童价格。(传0不校验)
+    private String externalInfo;//航司直连特有字段,是base64加密字段,机票查询时返回
+
+    public void setSolutionId(String solutionId) {
+        this.solutionId = solutionId;
+    }
+
+    public void setResId(String resId) {
+        this.resId = resId;
+    }
+
+    public void setDepartureDate(String departureDate) {
+        this.departureDate = departureDate;
+    }
+
+    public void setVendorPolicyId(String vendorPolicyId) {
+        this.vendorPolicyId = vendorPolicyId;
+    }
+
+    public void setPrice(Integer price) {
+        this.price = price;
+    }
+
+    public void setChildPrice(Integer childPrice) {
+        this.childPrice = childPrice;
+    }
+
+    public void setExternalInfo(String externalInfo) {
+        this.externalInfo = externalInfo;
+    }
+
+    public String getSolutionId() {
+
+        return solutionId;
+    }
+
+    public String getResId() {
+        return resId;
+    }
+
+    public String getDepartureDate() {
+        return departureDate;
+    }
+
+    public String getVendorPolicyId() {
+        return vendorPolicyId;
+    }
+
+    public Integer getPrice() {
+        return price;
+    }
+
+    public Integer getChildPrice() {
+        return childPrice;
+    }
+
+    public String getExternalInfo() {
+        return externalInfo;
+    }
+}

+ 71 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/RuleInfo.java

@@ -0,0 +1,71 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+
+import java.util.List;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class RuleInfo {
+    private Integer basePrice;//规则基价(由calculateType决定)
+    private Integer calculateType;//换算规则:1=FD公布运价,2=舱等全价,3=票面价
+    private Integer ruleFlag;//规则类型:1=退票,2=改期
+    private String ruleName;//规则名
+    private String ruleRemark;//规则备注
+    private List<FeeInfo> ruleFeeList;//费用信息列表
+
+    public void setBasePrice(Integer basePrice) {
+        this.basePrice = basePrice;
+    }
+
+    public void setCalculateType(Integer calculateType) {
+        this.calculateType = calculateType;
+    }
+
+    public void setRuleFlag(Integer ruleFlag) {
+        this.ruleFlag = ruleFlag;
+    }
+
+    public void setRuleName(String ruleName) {
+        this.ruleName = ruleName;
+    }
+
+    public void setRuleRemark(String ruleRemark) {
+        this.ruleRemark = ruleRemark;
+    }
+
+    public void setRuleFeeList(List<FeeInfo> ruleFeeList) {
+        this.ruleFeeList = ruleFeeList;
+    }
+
+    public Integer getBasePrice() {
+
+        return basePrice;
+    }
+
+    public Integer getCalculateType() {
+        return calculateType;
+    }
+
+    public Integer getRuleFlag() {
+        return ruleFlag;
+    }
+
+    public String getRuleName() {
+        return ruleName;
+    }
+
+    public String getRuleRemark() {
+        return ruleRemark;
+    }
+
+    public List<FeeInfo> getRuleFeeList() {
+        return ruleFeeList;
+    }
+}

+ 102 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/SaleControl.java

@@ -0,0 +1,102 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class SaleControl {
+    private Integer minPassengerNum;//最少乘行人数,默认是1
+    private Integer maxPassengerNum;//最多乘行人数,默认是9
+    private Integer corePassengerNum;//固定乘行人数,没有值不传,为0
+    private Integer maxChildNum;//儿童的最多成行人数,没有值的时候是6
+    private Integer minChildNum;//儿童的最少成行人数,没有值的时候是0
+    private Integer maxAdultNum;//成人的最多成行人数,没有值的时候是9
+    private Integer minAdultNum;//成人的最少成行人数,没有值的时候是1
+    /*
+     适用乘客类型列表(逗号分割),示例:"1,2" 。
+     1成人,2儿童,null 不做限制
+     */
+    private String applicableTravelerCategory;
+    /*
+     儿童与成人比例,如:” 2:1”。下单不能大于此比例。 (儿童在前,成人在后)
+     */
+    private String passengerRatio;
+
+    public void setMinPassengerNum(Integer minPassengerNum) {
+        this.minPassengerNum = minPassengerNum;
+    }
+
+    public void setMaxPassengerNum(Integer maxPassengerNum) {
+        this.maxPassengerNum = maxPassengerNum;
+    }
+
+    public void setCorePassengerNum(Integer corePassengerNum) {
+        this.corePassengerNum = corePassengerNum;
+    }
+
+    public void setMaxChildNum(Integer maxChildNum) {
+        this.maxChildNum = maxChildNum;
+    }
+
+    public void setMinChildNum(Integer minChildNum) {
+        this.minChildNum = minChildNum;
+    }
+
+    public void setMaxAdultNum(Integer maxAdultNum) {
+        this.maxAdultNum = maxAdultNum;
+    }
+
+    public void setMinAdultNum(Integer minAdultNum) {
+        this.minAdultNum = minAdultNum;
+    }
+
+    public void setApplicableTravelerCategory(String applicableTravelerCategory) {
+        this.applicableTravelerCategory = applicableTravelerCategory;
+    }
+
+    public void setPassengerRatio(String passengerRatio) {
+        this.passengerRatio = passengerRatio;
+    }
+
+    public Integer getMinPassengerNum() {
+
+        return minPassengerNum;
+    }
+
+    public Integer getMaxPassengerNum() {
+        return maxPassengerNum;
+    }
+
+    public Integer getCorePassengerNum() {
+        return corePassengerNum;
+    }
+
+    public Integer getMaxChildNum() {
+        return maxChildNum;
+    }
+
+    public Integer getMinChildNum() {
+        return minChildNum;
+    }
+
+    public Integer getMaxAdultNum() {
+        return maxAdultNum;
+    }
+
+    public Integer getMinAdultNum() {
+        return minAdultNum;
+    }
+
+    public String getApplicableTravelerCategory() {
+        return applicableTravelerCategory;
+    }
+
+    public String getPassengerRatio() {
+        return passengerRatio;
+    }
+}

+ 41 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Segment.java

@@ -0,0 +1,41 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class Segment {
+    private String departCityCode;//出发城市三字码,为大写字母。
+    private String arriveCityCode;//抵达城市三字码,为大写字母
+    private String departDate;//出发日期(格式yyyy-MM-dd)
+
+    public void setDepartCityCode(String departCityCode) {
+        this.departCityCode = departCityCode;
+    }
+
+    public void setArriveCityCode(String arriveCityCode) {
+        this.arriveCityCode = arriveCityCode;
+    }
+
+    public void setDepartDate(String departDate) {
+        this.departDate = departDate;
+    }
+
+    public String getDepartCityCode() {
+
+        return departCityCode;
+    }
+
+    public String getArriveCityCode() {
+        return arriveCityCode;
+    }
+
+    public String getDepartDate() {
+        return departDate;
+    }
+}

+ 68 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/StopPoint.java

@@ -0,0 +1,68 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class StopPoint {
+    private String stopCityCode;//经停城市三字码
+    private String stopCityName;//经停城市名。如:长沙
+    private String airPortCode;//经停机场三字码。如:CSX
+    private String airPortName;//经停机场名。如:黄花国际机场
+    private String arrivalTime;//到达时间。格式如:2016-08-10 14:30
+    private String departrueTime;//出发时间。格式如:2016-08-10 15:15
+
+    public void setStopCityCode(String stopCityCode) {
+        this.stopCityCode = stopCityCode;
+    }
+
+    public void setStopCityName(String stopCityName) {
+        this.stopCityName = stopCityName;
+    }
+
+    public void setAirPortCode(String airPortCode) {
+        this.airPortCode = airPortCode;
+    }
+
+    public void setAirPortName(String airPortName) {
+        this.airPortName = airPortName;
+    }
+
+    public void setArrivalTime(String arrivalTime) {
+        this.arrivalTime = arrivalTime;
+    }
+
+    public void setDepartrueTime(String departrueTime) {
+        this.departrueTime = departrueTime;
+    }
+
+    public String getStopCityCode() {
+
+        return stopCityCode;
+    }
+
+    public String getStopCityName() {
+        return stopCityName;
+    }
+
+    public String getAirPortCode() {
+        return airPortCode;
+    }
+
+    public String getAirPortName() {
+        return airPortName;
+    }
+
+    public String getArrivalTime() {
+        return arrivalTime;
+    }
+
+    public String getDepartrueTime() {
+        return departrueTime;
+    }
+}

+ 67 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Ticket.java

@@ -0,0 +1,67 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class Ticket {
+    private Integer journeyNum;//航程,1表示去程,2表示返程;
+    private Integer segmentNum;//航段,1表示第1段,2表示第2段,以此类推;
+    private String flightNum;//航班,如:CZ5183
+    private String ticketNo;//票号
+    /*
+     票的状态
+     0无状态,1出票中,2已出票,3出票失败,4审核中,5审核超时,6已退票,7审核异常。
+     备注:
+     1.只需判断状态是不是2和6,其它都是中间状态;
+     2.改签成功后的票号状态是“已出票”;
+     3.只要调用退票费查询接口查得可退票,则肯定能退票成功。
+     */
+    private String ticketStatus;
+
+    public void setJourneyNum(Integer journeyNum) {
+        this.journeyNum = journeyNum;
+    }
+
+    public void setSegmentNum(Integer segmentNum) {
+        this.segmentNum = segmentNum;
+    }
+
+    public void setFlightNum(String flightNum) {
+        this.flightNum = flightNum;
+    }
+
+    public void setTicketNo(String ticketNo) {
+        this.ticketNo = ticketNo;
+    }
+
+    public void setTicketStatus(String ticketStatus) {
+        this.ticketStatus = ticketStatus;
+    }
+
+    public Integer getJourneyNum() {
+
+        return journeyNum;
+    }
+
+    public Integer getSegmentNum() {
+        return segmentNum;
+    }
+
+    public String getFlightNum() {
+        return flightNum;
+    }
+
+    public String getTicketNo() {
+        return ticketNo;
+    }
+
+    public String getTicketStatus() {
+        return ticketStatus;
+    }
+}

+ 33 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Tourist.java

@@ -0,0 +1,33 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class Tourist {
+    private Person person;//乘客信息
+    private Ticket ticketList;//票号信息
+
+    public void setTicketList(Ticket ticketList) {
+        this.ticketList = ticketList;
+    }
+
+    public void setPerson(Person person) {
+        this.person = person;
+    }
+
+    public Person getPerson() {
+
+        return person;
+    }
+
+    public Ticket getTicketList() {
+        return ticketList;
+    }
+}

+ 72 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/TouristList.java

@@ -0,0 +1,72 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+/**
+ * TODO: description
+ * Date: 2016-12-28
+ *
+ * @author xucaigui
+ */
+public class TouristList {
+    private String name;//乘客姓名
+    /*
+     * 证件类型 1、二代身份证 2、护照 3、军官证 4、港澳通行证 7、台胞证 8、回乡证 9、户口簿
+     * 10、出生证明 11、台湾通行证
+     */
+    private Integer psptType;
+    private String psptId;//证件号码
+    private String birthday;//生日
+    private Integer personType;//乘客类型 1、成人 2、儿童
+    private String tel;//联系电话
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setPsptType(Integer psptType) {
+        this.psptType = psptType;
+    }
+
+    public void setPsptId(String psptId) {
+        this.psptId = psptId;
+    }
+
+    public void setBirthday(String birthday) {
+        this.birthday = birthday;
+    }
+
+    public void setPersonType(Integer personType) {
+        this.personType = personType;
+    }
+
+    public void setTel(String tel) {
+        this.tel = tel;
+    }
+
+    public String getName() {
+
+        return name;
+    }
+
+    public Integer getPsptType() {
+        return psptType;
+    }
+
+    public String getPsptId() {
+        return psptId;
+    }
+
+    public String getBirthday() {
+        return birthday;
+    }
+
+    public Integer getPersonType() {
+        return personType;
+    }
+
+    public String getTel() {
+        return tel;
+    }
+}

+ 34 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/dto/DomesticFlight/Weeks.java

@@ -0,0 +1,34 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.dto.DomesticFlight;
+
+import java.util.List;
+
+/**
+ * TODO: description
+ * Date: 2016-12-29
+ *
+ * @author xucaigui
+ */
+public class Weeks {
+    private List goWeek;//去程周几
+    private List backWeek;//返程周几
+
+    public void setGoWeek(List goWeek) {
+        this.goWeek = goWeek;
+    }
+
+    public void setBackWeek(List backWeek) {
+        this.backWeek = backWeek;
+    }
+
+    public List getGoWeek() {
+
+        return goWeek;
+    }
+
+    public List getBackWeek() {
+        return backWeek;
+    }
+}

+ 163 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/util/SigntrueUtil.java

@@ -0,0 +1,163 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.lang.StringUtils;
+
+import java.nio.charset.Charset;
+import java.security.MessageDigest;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.logging.Logger;
+
+/**
+ * TODO: description
+ * Date: 2016-11-29
+ *
+ * @author xucaigui
+ */
+public class SigntrueUtil {
+
+    private static final Logger logger = Logger.getLogger("SigntrueUtil");
+
+    /**
+     * 根据入参和密钥获取签名
+     *
+     * @param data
+     * @param secretKey
+     * @return
+     * @throws Exception
+     */
+    public static String getSignature(JSONObject data, String secretKey) throws Exception {
+        //logger.info("data:" +  data);
+        // 第一步:获取并排序json数据
+        //忽略签名
+        data.remove("sign");
+        //递归获取json结构中的键值对,组合键值并保存到列表中
+        List<String> keyValueList = new ArrayList<String>();
+        propertyFilter(null, data, keyValueList);
+        //对列表进行排序,区分大小写
+        Collections.sort(keyValueList);
+        Object json = JSON.toJSON(keyValueList);
+
+        // 第二步:格式化数据,用&分割
+        String formatText = StringUtils.join(keyValueList, "&");
+        //在首尾加上秘钥,用&分割
+        String finalText = secretKey + "&" + formatText + "&" + secretKey;
+
+        // 第三步:MD5加密并转换成大写的16进制(finalText为utf-8编码)
+        String md5 = getMD5(finalText).toUpperCase();
+
+        return md5;
+    }
+
+    /**
+     * PropertyPreFilter
+     * 与jsonObjectPropertyFilter,jsonArrayPropertyFilter配合完成键值对的抽取组合
+     *
+     * @param value
+     * @return
+     */
+    private static void propertyFilter(String key, Object value, List<String> list) {
+        if (null == value) {
+            return;
+        }
+        if (value instanceof JSONObject) {
+            jsonObjectPropertyFilter(key, (JSONObject) value, list);
+        } else if (value instanceof JSONArray) {
+            jsonArrayPropertyFilter(key, (JSONArray) value, list);
+        } else {
+            if (value != null && value.toString().length() > 0) {
+                list.add(key.trim() + "=" + value);
+            }
+        }
+    }
+
+
+    /**
+     * jsonObjectPropertyFilter 过滤json对象
+     *
+     * @param value
+     * @return
+     */
+    private static void jsonObjectPropertyFilter(String key, JSONObject value, List<String> list) {
+        JSONObject jsonObject = value;
+        if (jsonObject.isEmpty()) {
+            return;
+        }
+        for (String str : jsonObject.keySet()) {
+            propertyFilter(str, jsonObject.get(str), list);
+        }
+    }
+
+    /**
+     * jsonArrayPropertyFilter 过滤json数组
+     *
+     * @param value
+     * @return
+     */
+    private static void jsonArrayPropertyFilter(String key, JSONArray value, List<String> list) {
+        JSONArray jsonArray = value;
+        if (jsonArray.isEmpty()) {
+            return;
+        }
+        for (Object json : jsonArray) {
+            propertyFilter(key, json, list);
+        }
+    }
+
+    /**
+     * 生成md5
+     *
+     * @param message
+     * @return
+     */
+    private static String getMD5(String message) {
+        String md5str = "";
+        try {
+            //1 创建一个提供信息摘要算法的对象,初始化为md5算法对象
+            MessageDigest md = MessageDigest.getInstance("MD5");
+
+            //2 将消息变成byte数组
+            byte[] input = message.getBytes(Charset.forName("UTF-8"));
+
+            //3 计算后获得字节数组,这就是那128位了
+            byte[] buff = md.digest(input);
+
+            //4 把数组每一字节(一个字节占八位)换成16进制连成md5字符串
+            md5str = bytesToHex(buff);
+
+        } catch (Exception e) {
+        }
+        return md5str;
+    }
+
+    /**
+     * 二进制转十六进制
+     *
+     * @param bytes
+     * @return
+     */
+    private static String bytesToHex(byte[] bytes) {
+        StringBuffer md5str = new StringBuffer();
+        //把数组每一字节换成16进制连成md5字符串
+        int digital;
+        for (int i = 0; i < bytes.length; i++) {
+            digital = bytes[i];
+
+            if (digital < 0) {
+                digital += 256;
+            }
+            if (digital < 16) {
+                md5str.append("0");
+            }
+            md5str.append(Integer.toHexString(digital));
+        }
+        return md5str.toString().toUpperCase();
+    }
+}

+ 22 - 0
src/main/java/com/izouma/awesomeadmin/tuniu/util/TestSignature.java

@@ -0,0 +1,22 @@
+/**
+ * Copyright (C) 2006-2016 Tuniu All rights reserved
+ */
+package com.izouma.awesomeadmin.tuniu.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+
+/**
+ * TODO: description
+ * Date: 2016-11-29
+ *
+ * @author xucaigui
+ */
+public class TestSignature {
+    public static void main(String[] args) throws Exception{
+        String json = "{\"sign\":\"0ECD834AE750DBD323DB6B54D42F2145\",\"timestamp\":\"2017-02-15 17:58:02\",\"data\":{\"page\":\"1\",\"pageSize\":\"1\",\"key\":\"武汉\"},\"apiKey\":\"tickettest\"}";
+        JSONObject jsonData = JSON.parseObject(json);
+
+        System.out.print(SigntrueUtil.getSignature(jsonData, "aaaaaaaa"));
+    }
+}

+ 178 - 0
src/main/java/com/izouma/awesomeadmin/web/ProductInfoController.java

@@ -0,0 +1,178 @@
+package com.izouma.awesomeadmin.web;
+
+import java.util.*;
+
+import com.izouma.awesomeadmin.util.ExportExcelUtil;
+import org.apache.commons.lang.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresAuthentication;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import com.izouma.awesomeadmin.constant.AppConstant;
+import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.dto.Result;
+import com.izouma.awesomeadmin.model.ProductInfo;
+import com.izouma.awesomeadmin.service.ProductInfoService;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+*  controller类
+*/
+@Controller
+@RequestMapping("/productInfo")
+public class ProductInfoController {
+
+    @Autowired
+    private ProductInfoService productInfoService;
+
+    /**
+    * <p>获取全部记录。</p>
+    */
+    @RequiresAuthentication
+    @RequestMapping(value = "/all", method = RequestMethod.GET)
+    @ResponseBody
+    public Result all(ProductInfo record) {
+        List<ProductInfo> pp = productInfoService.getProductInfoList(record);
+        return new Result(true, pp);
+    }
+
+    /**
+    * <p>根据Id。</p>
+    */
+    @RequestMapping(value = "/getProductInfo", method = RequestMethod.GET)
+    @ResponseBody
+    public Result getProductInfo(@RequestParam(required = false, value = "id") String id) {
+        ProductInfo data = productInfoService.getProductInfoById(id);
+        return new Result(true, data);
+    }
+
+    /**
+    * <p>根据条件获取。</p>
+    */
+    @RequestMapping(value = "/getOne", method = RequestMethod.GET)
+    @ResponseBody
+    public Result getOne(ProductInfo record) {
+        ProductInfo data = productInfoService.getProductInfo(record);
+        return new Result(true, data);
+    }
+
+
+    /**
+    * <p>分页查询。</p>
+    */
+    @RequestMapping(value = "/page", method = RequestMethod.GET)
+    @ResponseBody
+    public Result page(Page page, ProductInfo record) {
+        Map<String, Object> result = new HashMap<>();
+
+        List<ProductInfo> pp =productInfoService.getProductInfoByPage(page, record);
+
+        result.put(AppConstant.PAGE, page);
+        result.put("pp", pp);
+        return new Result(true, result);
+    }
+
+
+    /**
+    * <p>保存。</p>
+    */
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ResponseBody
+    public Result save(ProductInfo record) {
+        boolean num = productInfoService.createProductInfo(record);
+        if (num) {
+        return new Result(true, record.getId());
+        }
+        return new Result(false, "保存异常");
+    }
+
+    /**
+    * <p>更新信息。</p>
+    */
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    @ResponseBody
+    public Result updateProductInfo(ProductInfo record) {
+        boolean num = productInfoService.updateProductInfo(record);
+        if (num) {
+        return new Result(true, "保存成功");
+        }
+        return new Result(false, "保存异常");
+    }
+
+    /**
+    * <p>删除。</p>
+    */
+    @RequestMapping(value = "/del", method = RequestMethod.POST)
+    @ResponseBody
+    public Result deleteProductInfo(ProductInfo record) {
+
+        boolean num = productInfoService.deleteProductInfo(record);
+        if (num) {
+        return new Result(true, "删除成功");
+        }
+        return new Result(false, "删除异常");
+    }
+
+    /**
+    * 导出Excel
+    * @param request
+    * @param response
+    * @param record
+    * @throws Exception
+    */
+    @RequestMapping(value = "/exportExcel", method = RequestMethod.GET)
+    @ResponseBody
+    public void exportExcel(HttpServletRequest request, HttpServletResponse response, ProductInfo record) throws Exception {
+
+    List<ProductInfo> productInfos = productInfoService.getProductInfoList(record);
+
+
+        String sheetName = "product_info";
+        String titleName = "商铺信息数据表";
+        String fileName = "商铺信息表";
+        int columnNumber = 27;
+        int[] columnWidth = { 20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20 };
+        String[] columnName = {  "ID" ,   "删除标识" ,   "更新时间" ,   "更新人" ,   "创建时间" ,   "创建人" ,   "类型" ,   "使用范围" ,   "地标Id" ,   "名称" ,   "价格" ,   "图片" ,   "详情" ,   "数量" ,   "限购数量" ,   "有效期" ,   "票ID" ,   "景区ID" ,   "景区" ,   "票" ,   "web价" ,   "sale价" ,   "价格预警" ,   "备注" ,   "上架" ,   "导航包ids" ,   "商品Ids"  };
+        String[][] dataList = new String[productInfos.size()][27];
+
+        for (int i = 0; i < productInfos.size(); i++) {
+
+                        dataList[i][0] = String.valueOf(productInfos.get(i).getId());
+                        dataList[i][1] = String.valueOf(productInfos.get(i).getDelFlag());
+                        dataList[i][2] = String.valueOf(productInfos.get(i).getUpdateTime());
+                        dataList[i][3] = String.valueOf(productInfos.get(i).getUpdateUser());
+                        dataList[i][4] = String.valueOf(productInfos.get(i).getCreateTime());
+                        dataList[i][5] = String.valueOf(productInfos.get(i).getCreateUser());
+                        dataList[i][6] = String.valueOf(productInfos.get(i).getTypeFlag());
+                        dataList[i][7] = String.valueOf(productInfos.get(i).getUseScope());
+                        dataList[i][8] = String.valueOf(productInfos.get(i).getLandmarkId());
+                        dataList[i][9] = String.valueOf(productInfos.get(i).getProductName());
+                        dataList[i][10] = String.valueOf(productInfos.get(i).getPrice());
+                        dataList[i][11] = String.valueOf(productInfos.get(i).getImage());
+                        dataList[i][12] = String.valueOf(productInfos.get(i).getProductContent());
+                        dataList[i][13] = String.valueOf(productInfos.get(i).getStockNum());
+                        dataList[i][14] = String.valueOf(productInfos.get(i).getLimitNum());
+                        dataList[i][15] = String.valueOf(productInfos.get(i).getLimitDate());
+                        dataList[i][16] = String.valueOf(productInfos.get(i).getTicketId());
+                        dataList[i][17] = String.valueOf(productInfos.get(i).getScenicId());
+                        dataList[i][18] = String.valueOf(productInfos.get(i).getScenicName());
+                        dataList[i][19] = String.valueOf(productInfos.get(i).getTicketName());
+                        dataList[i][20] = String.valueOf(productInfos.get(i).getWebPrice());
+                        dataList[i][21] = String.valueOf(productInfos.get(i).getSalePrice());
+                        dataList[i][22] = String.valueOf(productInfos.get(i).getPriceLowFlag());
+                        dataList[i][23] = String.valueOf(productInfos.get(i).getRemark());
+                        dataList[i][24] = String.valueOf(productInfos.get(i).getShelfFlag());
+                        dataList[i][25] = String.valueOf(productInfos.get(i).getPackageIds());
+                        dataList[i][26] = String.valueOf(productInfos.get(i).getProductIds());
+                    }
+
+
+        ExportExcelUtil.ExportWithResponse(sheetName, titleName, fileName,
+        columnNumber, columnWidth, columnName, dataList, response);
+
+
+        }
+    }
+

+ 111 - 0
src/main/java/com/izouma/awesomeadmin/web/TuNiuOpenApiController.java

@@ -0,0 +1,111 @@
+package com.izouma.awesomeadmin.web;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.izouma.awesomeadmin.constant.AppConstant;
+import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.dto.Result;
+import com.izouma.awesomeadmin.model.UserUpdateLog;
+import com.izouma.awesomeadmin.model.VuforiaImageInfo;
+import com.izouma.awesomeadmin.model.VuforiaTarget;
+import com.izouma.awesomeadmin.service.UserUpdateLogService;
+import com.izouma.awesomeadmin.service.VuforiaImageInfoService;
+import com.izouma.awesomeadmin.tuniu.common.SendHttpRequest;
+import com.izouma.awesomeadmin.tuniu.common.URLConfig;
+import com.izouma.awesomeadmin.util.ExportExcelUtil;
+import com.izouma.awesomeadmin.util.PropertiesFileLoader;
+import org.apache.shiro.authz.annotation.RequiresAuthentication;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * controller类
+ */
+@Controller
+@RequestMapping("/tuniuopenapi")
+public class TuNiuOpenApiController {
+
+
+    String apiKey = PropertiesFileLoader.getProperties("tuniu_app_key");
+    String secretKey = PropertiesFileLoader.getProperties("tuniu_app_secret_key");
+
+    /**
+     * 景点列表查询
+     *
+     * @param key      查询关键字,城市或者景点名称
+     * @param page     第几页.页从1开始
+     * @param pageSize 分页大小
+     * @return
+     */
+    @RequestMapping(value = "/scenicList", method = RequestMethod.GET)
+    @ResponseBody
+    public Result scenicList(String key, Integer page, Integer pageSize) {
+        // 请求的接口地址
+        String url = "Ticket/scenicList";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<>();
+        params.put("page", page != null ? page : 1); //第几页.页从1开始
+        params.put("pageSize", pageSize != null ? pageSize : 10); //分页大小
+        params.put("key", key); //查询关键字,城市或者景点名称
+
+        String result = SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+
+        return new Result(true, JSONObject.parseObject(result));
+    }
+
+    /**
+     * 景点详情
+     *
+     * @param scenicId 景点ID
+     * @return
+     */
+    @RequestMapping(value = "/scenicDetail", method = RequestMethod.GET)
+    @ResponseBody
+    public Result scenicDetail(@RequestParam(value = "scenicId") String scenicId) {
+
+        // 请求的接口地址
+        String url = "Ticket/scenicDetail";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<>();
+        params.put("scenicId", scenicId); //
+
+        String result = SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+
+        return new Result(true, JSONObject.parseObject(result));
+    }
+
+    @RequestMapping(value = "/ticketDetail", method = RequestMethod.GET)
+    @ResponseBody
+    public Result ticketDetail(@RequestParam(value = "productId") Integer productId) {
+
+        // 请求的接口地址
+        String url = "Ticket/detail";
+
+        // 设置请求的参数
+        Map<String, Object> params = new HashMap<>();
+        params.put("productId", productId); //
+
+        String result = SendHttpRequest.sendPostConn(URLConfig.URL + url, params, apiKey, secretKey);
+
+        return new Result(true, JSONObject.parseObject(result));
+    }
+
+
+}
+

+ 3 - 0
src/main/resources/properties/outsidews.properties

@@ -38,4 +38,7 @@ agpay_merchantPfxPath=/home/app/platform/testmer.pfx
 agpay_publicKeyPath=/home/app/platform/testplat.cer
 agpay_publicKeyPath=/home/app/platform/testplat.cer
 agpay_notify_url=http://www.liuhuohuyu.com/agpay/notify
 agpay_notify_url=http://www.liuhuohuyu.com/agpay/notify
 agpay_wx_appid=wx2421b1c4370ec43b
 agpay_wx_appid=wx2421b1c4370ec43b
+#途牛笛风
+tuniu_app_key=tickettest
+tuniu_app_secret_key=aaaaaaaa
 
 

+ 214 - 0
src/main/vue/src/pages/ProductInfo.vue

@@ -0,0 +1,214 @@
+<template>
+    <div>
+        <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small" style="max-width: 500px;">
+            <el-form-item prop="typeFlag" label="类型">
+                <template>
+                    <el-select v-model="formData.typeFlag" clearable placeholder="请选择" :disabled="'typeFlag'==subColumn">
+                        <el-option v-for="item in typeFlagOptions" :key="item.value" :label="item.label" :value="item.value">
+                        </el-option>
+                    </el-select>
+                </template>
+            </el-form-item>
+            <el-form-item prop="useScope" label="使用范围">
+                <el-input v-model="formData.useScope" :disabled="'useScope'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="landmarkId" label="地标Id">
+                <template>
+                    <el-select v-model="formData.landmarkId" clearable placeholder="请选择" :disabled="'landmarkId'==subColumn">
+                        <el-option v-for="item in landmarkIdOptions" :key="item.value" :label="item.label" :value="item.value">
+                        </el-option>
+                    </el-select>
+                </template>
+            </el-form-item>
+            <el-form-item prop="productName" label="名称">
+                <el-input v-model="formData.productName" :disabled="'productName'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="price" label="价格">
+                <el-input type="number" v-model="formData.price" :disabled="'price'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="image" label="图片">
+                <multi-upload v-model="formData.image" :disabled="'image'==subColumn"></multi-upload>
+            </el-form-item>
+            <el-form-item prop="productContent" label="详情">
+                <el-input v-model="formData.productContent" :disabled="'productContent'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="stockNum" label="数量">
+                <el-input type="number" v-model="formData.stockNum" :disabled="'stockNum'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="limitNum" label="限购数量">
+                <el-input type="number" v-model="formData.limitNum" :disabled="'limitNum'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="limitDate" label="有效期">
+                <template>
+                    <div class="block">
+                        <el-date-picker v-model="formData.limitDate" type="date" value-format="timestamp" placeholder="选择日期" :disabled="'limitDate'==subColumn">
+                        </el-date-picker>
+                    </div>
+                </template>
+            </el-form-item>
+            <el-form-item prop="ticketId" label="票ID">
+                <el-input v-model="formData.ticketId" :disabled="'ticketId'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="scenicId" label="景区ID">
+                <el-input v-model="formData.scenicId" :disabled="'scenicId'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="scenicName" label="景区">
+                <el-input v-model="formData.scenicName" :disabled="'scenicName'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="ticketName" label="票">
+                <el-input v-model="formData.ticketName" :disabled="'ticketName'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="webPrice" label="web价">
+                <el-input v-model="formData.webPrice" :disabled="'webPrice'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="salePrice" label="sale价">
+                <el-input v-model="formData.salePrice" :disabled="'salePrice'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="priceLowFlag" label="价格预警">
+                <el-input v-model="formData.priceLowFlag" :disabled="'priceLowFlag'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="remark" label="备注">
+                <el-input v-model="formData.remark" :disabled="'remark'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="shelfFlag" label="上架">
+                <el-switch v-model="formData.shelfFlag" active-color="#13ce66" inactive-color="#ff4949" :disabled="'shelfFlag'==subColumn">
+                </el-switch>
+            </el-form-item>
+            <el-form-item prop="packageIds" label="导航包ids">
+                <el-input v-model="formData.packageIds" :disabled="'packageIds'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="productIds" label="商品Ids">
+                <el-input v-model="formData.productIds" :disabled="'productIds'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item>
+                <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
+                <el-button @click="onDelete" v-if="formData.id" type="danger">删除</el-button>
+                <el-button @click="$router.go(-1)">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+<script>
+import formValidator from '../formValidator'
+
+export default {
+    created() {
+        if (this.$route.query.column) {
+            this.subColumn = this.$route.query.column.split(',')[1];
+            this.subValue = this.$route.query.column.split(',')[0];
+        }
+
+        if (this.$route.query.id) {
+            this.$http.get({
+                url: '/productInfo/getOne',
+                data: {
+                    id: this.$route.query.id
+                }
+            }).then(res => {
+                if (res.success) {
+
+
+                    this.formData = res.data;
+
+                    if (this.$route.query.column) {
+                        this.formData[this.subColumn] = this.subValue;
+                    }
+                }
+            })
+        } else {
+            if (this.$route.query.column) {
+                this.formData[this.subColumn] = this.subValue;
+            }
+        }
+
+
+
+
+        this.$http.get({
+            url: '/landMark/all'
+        }).then(res => {
+            if (res.success) {
+
+                if (res.data.length > 0) {
+                    res.data.forEach(item => {
+                        this.landmarkIdOptions.push({ label: item.mapName, value: item.id });
+                    })
+                }
+            }
+        });
+    },
+    data() {
+        return {
+            saving: false,
+            formData: {
+                typeFlag: 0,
+            },
+            rules: {
+            },
+            typeFlagOptions: [{
+                value: 0,
+                label: '门票'
+            }, {
+                value: 1,
+                label: '导航包'
+            }, {
+                value: 2,
+                label: '实物券'
+            }, {
+                value: 3,
+                label: '优惠券'
+            }, {
+                value: 4,
+                label: '组合商品'
+            }],
+            landmarkIdOptions: [],
+            subColumn: '',
+            subValue: '',
+        }
+    },
+    methods: {
+        onSave() {
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            var data = JSON.parse(JSON.stringify(this.formData));
+            this.$http.post({
+                url: this.formData.id ? '/productInfo/update' : '/productInfo/save',
+                data: data
+            }).then(res => {
+                if (res.success) {
+                    this.$message.success('成功');
+                    this.$router.go(-1);
+                } else {
+                    this.$message.warning('失败')
+                }
+            });
+        },
+        onDelete() {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' }).then(() => {
+                return this.$http.post({
+                    url: '/productInfo/del',
+                    data: { id: this.formData.id }
+                })
+            }).then(() => {
+                this.$message.success('删除成功');
+                this.$router.go(-1);
+            }).catch(action => {
+                if (action === 'cancel') {
+                    this.$message.info('删除取消');
+                } else {
+                    this.$message.error('删除失败');
+                }
+            })
+        },
+    }
+}
+</script>
+<style lang="less" scoped>
+</style>

+ 744 - 0
src/main/vue/src/pages/ProductInfos.vue

@@ -0,0 +1,744 @@
+<template>
+    <div>
+        <div class="filters-container">
+        
+            <el-input placeholder="关键字" size="small" v-model="filter1" clearable class="filter-item"></el-input>
+            <el-button @click="searchData" type="primary" size="small" icon="el-icon-search" class="filter-item">搜索
+            </el-button>
+            <el-button @click="showAdvancedQueryDialog = !showAdvancedQueryDialog" type="primary" size="small"
+                       icon="el-icon-search" class="filter-item">高级查询
+            </el-button>
+            <el-button @click="showTableSortDialog = !showTableSortDialog" type="primary" size="small"
+                       icon="el-icon-sort" class="filter-item">排序
+            </el-button>
+            <el-button @click="$router.push({path:'/productInfo',query:{column:$route.query.column}})" type="primary"
+                       size="small" icon="el-icon-edit"
+                       class="filter-item">添加
+            </el-button>
+            <el-button @click="exportExcel" type="primary" size="small" icon="el-icon-share" class="filter-item">导出EXCEL
+            </el-button>
+            <el-dropdown trigger="click" size="medium" class="table-column-filter">
+                <span>
+                  筛选数据<i class="el-icon-arrow-down el-icon--right"></i>
+                </span>
+                <el-dropdown-menu slot="dropdown" class="table-column-filter-wrapper">
+                    <el-checkbox v-for="item in tableColumns" :key="item.value" v-model="item.show">{{item.label}}
+                    </el-checkbox>
+                </el-dropdown-menu>
+            </el-dropdown>
+        </div>
+        <el-table
+                :data="tableData"
+                :height="tableHeight"
+                row-key="id"
+                ref="table">
+            <el-table-column
+                    v-if="multipleMode"
+                    align="center"
+                    type="selection"
+                    width="50">
+            </el-table-column>
+            <el-table-column
+                    type="index"
+                    min-width="50"
+                    align="center">
+            </el-table-column>
+                            
+                                            <el-table-column
+                                v-if="isColumnShow('id')"
+                                prop="id"
+                                label="ID"
+                                min-width="100">
+                        </el-table-column>
+                                                                                                                                                                                                            
+                                            <el-table-column
+                                v-if="isColumnShow('typeFlag')"
+                                prop="typeFlag"
+                                label="类型"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('useScope')"
+                                prop="useScope"
+                                label="使用范围"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('landmarkId')"
+                                prop="landmarkId"
+                                label="地标Id"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('productName')"
+                                prop="productName"
+                                label="名称"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('price')"
+                                prop="price"
+                                label="价格"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('image')"
+                                prop="image"
+                                label="图片"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('productContent')"
+                                prop="productContent"
+                                label="详情"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('stockNum')"
+                                prop="stockNum"
+                                label="数量"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('limitNum')"
+                                prop="limitNum"
+                                label="限购数量"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('limitDate')"
+                                prop="limitDate"
+                                label="有效期"
+                                :formatter="DateFormatter"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('ticketId')"
+                                prop="ticketId"
+                                label="票ID"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('scenicId')"
+                                prop="scenicId"
+                                label="景区ID"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('scenicName')"
+                                prop="scenicName"
+                                label="景区"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('ticketName')"
+                                prop="ticketName"
+                                label="票"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('webPrice')"
+                                prop="webPrice"
+                                label="web价"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('salePrice')"
+                                prop="salePrice"
+                                label="sale价"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('priceLowFlag')"
+                                prop="priceLowFlag"
+                                label="价格预警"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('remark')"
+                                prop="remark"
+                                label="备注"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('shelfFlag')"
+                                prop="shelfFlag"
+                                label="上架"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('packageIds')"
+                                prop="packageIds"
+                                label="导航包ids"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('productIds')"
+                                prop="productIds"
+                                label="商品Ids"
+                                min-width="100">
+                        </el-table-column>
+                                                            <el-table-column
+                    label="操作"
+                    align="center"
+                    fixed="right"
+                    min-width="150"
+            >
+                <template slot-scope="scope">
+                            <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="deleteRow(scope.row)" type="danger" size="mini" plain>删除</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <div class="multiple-mode-wrapper" v-if="0">
+                <el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
+                <el-button-group v-else>
+                    <el-button size="small" @click="operation1">批量操作1</el-button>
+                    <el-button size="small" @click="operation2">批量操作2</el-button>
+                    <el-button size="small" @click="toggleMultipleMode(false)">取消</el-button>
+                </el-button-group>
+            </div>
+            <el-pagination
+                    background
+                    @size-change="pageSizeChange"
+                    @current-change="currentPageChange"
+                    :current-page="currentPage"
+                    :page-sizes="[10, 20, 30, 40, 50]"
+                    :page-size="pageSize"
+                    layout="total, sizes, prev, pager, next, jumper"
+                    :total="totalNumber">
+            </el-pagination>
+        </div>
+        <el-dialog title="高级查询" :visible.sync="showAdvancedQueryDialog">
+            <el-button @click="addField" type="text" icon="el-icon-plus">添加</el-button>
+            <el-table :data="advancedQueryFields">
+
+                <el-table-column prop="link" label="链接符" align="center">
+                    <template slot-scope="{row}">
+                        <el-select placeholder="链接" size="small" v-model="row.link" class="filter-item">
+                            <el-option label="AND" value="AND">
+                            </el-option>
+                            <el-option label="OR" value="OR">
+                            </el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="name" label="字段" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.name">
+
+                            <el-option v-for="item in advancedQueryColumns" :label="item.label" :value="item.value"
+                                       :key="item.value"></el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.searchMethod">
+                            <el-option v-for="item in searchMethods" :label="item" :value="item"
+                                       :key="item"></el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="value" label="参数" align="center">
+                    <template slot-scope="{row}">
+                        <el-input v-model="row.value"></el-input>
+                    </template>
+                </el-table-column>
+                <el-table-column width="60" align="center">
+                    <template slot-scope="{ row, column, $index }">
+                        <el-button @click="removeField($index)" size="small" type="text">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+
+            <span slot="footer" class="dialog-footer">
+
+                <el-button @click="advancedQuery" :loading="$store.state.fetchingData">确定</el-button>
+            </span>
+        </el-dialog>
+
+        <el-dialog title="排序" :visible.sync="showTableSortDialog">
+            <el-button @click="addSortField" type="text" icon="el-icon-plus">添加</el-button>
+            <el-table :data="tableSortFields">
+
+                <el-table-column prop="name" label="字段" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.name">
+
+                            <el-option v-for="item in advancedQueryColumns" :label="item.label" :value="item.value"
+                                       :key="item.value"></el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="order" label="排序" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.order">
+                            <el-option label="降序" value="desc">
+                            </el-option>
+                            <el-option label="升序" value="asc">
+                            </el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column width="60" align="center">
+                    <template slot-scope="{ row, column, $index }">
+                        <el-button @click="removeSortField($index)" size="small" type="text">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+
+            <span slot="footer" class="dialog-footer">
+
+                <el-button @click="tableSortQuery" :loading="$store.state.fetchingData">确定</el-button>
+            </span>
+        </el-dialog>
+
+        <el-dialog title="查看图片" :visible.sync="imageDialogVisible" size="small">
+            <img width="100%" :src="imgSrc" alt="">
+        </el-dialog>
+
+    </div>
+</template>
+<script>
+    import {mapState} from 'vuex'
+    import {format} from 'date-fns'
+    import zh from 'date-fns/locale/zh_cn'
+
+    export default {
+        created() {
+            this.getData();
+        },
+        data() {
+            return {
+                totalNumber: 0,
+                totalPage: 10,
+                currentPage: 1,
+                pageSize: 20,
+                tableData: [],
+                filter1: '',
+                filter2: '',
+                tableColumns: [
+                                                                        {
+                                label: 'ID',
+                                value: 'id',
+                                show: true
+                            },
+                                                                                                                                                                                                                                                                                                                            {
+                                label: '类型',
+                                value: 'typeFlag',
+                                show: true
+                            },
+                                                                                                {
+                                label: '使用范围',
+                                value: 'useScope',
+                                show: true
+                            },
+                                                                                                {
+                                label: '地标Id',
+                                value: 'landmarkId',
+                                show: true
+                            },
+                                                                                                {
+                                label: '名称',
+                                value: 'productName',
+                                show: true
+                            },
+                                                                                                {
+                                label: '价格',
+                                value: 'price',
+                                show: true
+                            },
+                                                                                                {
+                                label: '图片',
+                                value: 'image',
+                                show: true
+                            },
+                                                                                                {
+                                label: '详情',
+                                value: 'productContent',
+                                show: true
+                            },
+                                                                                                {
+                                label: '数量',
+                                value: 'stockNum',
+                                show: true
+                            },
+                                                                                                {
+                                label: '限购数量',
+                                value: 'limitNum',
+                                show: true
+                            },
+                                                                                                {
+                                label: '有效期',
+                                value: 'limitDate',
+                                show: true
+                            },
+                                                                                                {
+                                label: '票ID',
+                                value: 'ticketId',
+                                show: true
+                            },
+                                                                                                {
+                                label: '景区ID',
+                                value: 'scenicId',
+                                show: true
+                            },
+                                                                                                {
+                                label: '景区',
+                                value: 'scenicName',
+                                show: true
+                            },
+                                                                                                {
+                                label: '票',
+                                value: 'ticketName',
+                                show: true
+                            },
+                                                                                                {
+                                label: 'web价',
+                                value: 'webPrice',
+                                show: true
+                            },
+                                                                                                {
+                                label: 'sale价',
+                                value: 'salePrice',
+                                show: true
+                            },
+                                                                                                {
+                                label: '价格预警',
+                                value: 'priceLowFlag',
+                                show: true
+                            },
+                                                                                                {
+                                label: '备注',
+                                value: 'remark',
+                                show: true
+                            },
+                                                                                                {
+                                label: '上架',
+                                value: 'shelfFlag',
+                                show: true
+                            },
+                                                                                                {
+                                label: '导航包ids',
+                                value: 'packageIds',
+                                show: true
+                            },
+                                                                                                {
+                                label: '商品Ids',
+                                value: 'productIds',
+                                show: true
+                            },
+                                                            ],
+                multipleMode: false,
+                showAdvancedQueryDialog: false,
+                advancedQueryFields: [],
+                showTableSortDialog: false,
+                tableSortFields: [],
+                searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'like'],
+                advancedQueryColumns: [
+                                                                        {
+                                label: 'ID',
+                                value: 'id'
+                            },
+                                                                                                                                                                                                                                                                                                                            {
+                                label: '类型',
+                                value: 'type_flag'
+                            },
+                                                                                                {
+                                label: '使用范围',
+                                value: 'use_scope'
+                            },
+                                                                                                {
+                                label: '地标Id',
+                                value: 'landmark_id'
+                            },
+                                                                                                {
+                                label: '名称',
+                                value: 'product_name'
+                            },
+                                                                                                {
+                                label: '价格',
+                                value: 'price'
+                            },
+                                                                                                {
+                                label: '图片',
+                                value: 'image'
+                            },
+                                                                                                {
+                                label: '详情',
+                                value: 'product_content'
+                            },
+                                                                                                {
+                                label: '数量',
+                                value: 'stock_num'
+                            },
+                                                                                                {
+                                label: '限购数量',
+                                value: 'limit_num'
+                            },
+                                                                                                {
+                                label: '有效期',
+                                value: 'limit_date'
+                            },
+                                                                                                {
+                                label: '票ID',
+                                value: 'ticket_id'
+                            },
+                                                                                                {
+                                label: '景区ID',
+                                value: 'scenic_id'
+                            },
+                                                                                                {
+                                label: '景区',
+                                value: 'scenic_name'
+                            },
+                                                                                                {
+                                label: '票',
+                                value: 'ticket_name'
+                            },
+                                                                                                {
+                                label: 'web价',
+                                value: 'web_price'
+                            },
+                                                                                                {
+                                label: 'sale价',
+                                value: 'sale_price'
+                            },
+                                                                                                {
+                                label: '价格预警',
+                                value: 'price_low_flag'
+                            },
+                                                                                                {
+                                label: '备注',
+                                value: 'remark'
+                            },
+                                                                                                {
+                                label: '上架',
+                                value: 'shelf_flag'
+                            },
+                                                                                                {
+                                label: '导航包ids',
+                                value: 'package_ids'
+                            },
+                                                                                                {
+                                label: '商品Ids',
+                                value: 'product_ids'
+                            },
+                                                            ],
+                advancedQuerySearchKey: '',
+                orderByStr: '',
+                imgSrc: '',
+                imageDialogVisible: false,
+            }
+        },
+        computed: {
+            ...mapState(['tableHeight']),
+            selection() {
+                return this.$refs.table.selection.map(i => i.id);
+            }
+        },
+        methods: {
+            pageSizeChange(size) {
+                this.currentPage = 1;
+                this.pageSize = size;
+                this.getData();
+            },
+            currentPageChange(page) {
+                this.currentPage = page;
+                this.getData();
+            },
+            getData() {
+
+                var data = {
+                    currentPage: this.currentPage,
+                    pageNumber: this.pageSize,
+                    searchKey: this.filter1,
+                    advancedQuery: this.advancedQuerySearchKey,
+                    orderByStr: this.orderByStr,
+                }
+
+                if (this.$route.query.column) {
+                    var tempColumn = this.$route.query.column;
+                    data[tempColumn.split(',')[1]] = tempColumn.split(',')[0];
+                }
+
+                this.$http.get({
+                    url: '/productInfo/page',
+                    data: data
+                }).then(res => {
+                    if (res.success) {
+                        this.totalNumber = res.data.page.totalNumber;
+                        this.tableData = res.data.pp;
+                    }
+                })
+            },
+            isColumnShow(column) {
+                var row = this.tableColumns.find(i => i.value === column);
+                return row ? row.show : false;
+            },
+            toggleMultipleMode(multipleMode) {
+                this.multipleMode = multipleMode;
+                if (!multipleMode) {
+                    this.$refs.table.clearSelection();
+                }
+            },
+            editRow(row) {
+                this.$router.push({
+                    path: '/productInfo',
+                    query: {
+                        id: row.id,
+                        column: this.$route.query.column,
+                    }
+                })
+            },
+            operation1() {
+                this.$notify({
+                    title: '提示',
+                    message: this.selection
+                });
+            },
+            operation2() {
+                this.$message('操作2');
+            },
+            addField() {
+                this.advancedQueryFields.push({
+                    link: 'AND',
+                    name: '',
+                    searchMethod: '=',
+                    value: '',
+                });
+            },
+            removeField(i) {
+                if (this.advancedQueryFields.length > 0) {
+                    this.advancedQueryFields.splice(i, 1);
+                }
+            },
+            advancedQuery() {
+
+                this.advancedQuerySearchKey = '';
+
+                if (this.advancedQueryFields.length > 0) {
+
+                    var templist = [];
+
+                    this.advancedQueryFields.forEach(item => {
+                        if (item.link && item.name && item.searchMethod && item.value) {
+                            var tempItem = item.link + '_,' + item.name + '_,' + item.searchMethod + '_,' + item.value;
+                            templist.push(tempItem);
+                        }
+                    })
+
+                    if (templist.length > 0) {
+
+                        this.advancedQuerySearchKey = templist.join('_;');
+                    }
+                }
+
+                this.getData();
+                this.showAdvancedQueryDialog = false;
+            },
+            addSortField() {
+                this.tableSortFields.push({
+                    name: '',
+                    order: 'asc',
+                });
+            },
+            removeSortField(i) {
+                if (this.tableSortFields.length > 0) {
+                    this.tableSortFields.splice(i, 1);
+                }
+            },
+            tableSortQuery() {
+
+                this.orderByStr = '';
+
+                if (this.tableSortFields.length > 0) {
+
+                    var templist = [];
+
+                    this.tableSortFields.forEach(item => {
+                        if (item.name && item.order) {
+                            var tempItem = item.name + '_,' + item.order;
+                            templist.push(tempItem);
+                        }
+                    })
+
+                    if (templist.length > 0) {
+
+                        this.orderByStr = templist.join('_;');
+                    }
+                }
+
+                this.getData();
+                this.showTableSortDialog = false;
+            },
+            exportExcel() {
+                window.location.href = this.$baseUrl + "/productInfo/exportExcel?searchKey="
+                        + this.filter1 + "&advancedQuery=" + this.advancedQuerySearchKey+"&orderByStr=" + this.orderByStr;
+            },
+            searchData() {
+                this.currentPage = 1;
+                this.getData();
+            },
+            deleteRow(row) {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
+                    return this.$http.post({
+                        url: '/productInfo/del',
+                        data: {id: row.id}
+                    })
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.getData();
+                }).catch(action => {
+                    if (action === 'cancel') {
+                        this.$message.info('删除取消');
+                    } else {
+                        this.$message.error('删除失败');
+                    }
+                })
+            },
+            DateTimeFormatter(row, column, cellValue) {
+                if (cellValue) {
+                    return format(cellValue, 'YYYY/MM/DD HH:mm', {locale: zh})
+                }
+
+            },
+            DateFormatter(row, column, cellValue) {
+                if (cellValue) {
+                    return format(cellValue, 'YYYY/MM/DD', {locale: zh})
+                }
+
+            },
+            showImg(img) {
+                this.imgSrc = img;
+                this.imageDialogVisible = true;
+            },
+
+        }
+    }
+</script>
+<style lang="less" scoped>
+
+</style>

+ 10 - 0
src/main/vue/src/router/index.js

@@ -674,6 +674,16 @@ const router = new Router({
                     path: '/userComments',
                     path: '/userComments',
                     name: 'UserComments',
                     name: 'UserComments',
                     component: () => import('../pages/UserComments')
                     component: () => import('../pages/UserComments')
+                },
+                {
+                    path: '/productInfo',
+                    name: 'ProductInfo',
+                    component: () => import('../pages/ProductInfo')
+                },
+                {
+                    path: '/productInfos',
+                    name: 'ProductInfos',
+                    component: () => import('../pages/ProductInfos')
                 }
                 }
                 /**INSERT_LOCATION**/
                 /**INSERT_LOCATION**/
             ]
             ]

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.