diff --git b/.idea/.gitignore a/.idea/.gitignore
new file mode 100644
index 0000000..28ca69d
--- /dev/null
+++ a/.idea/.gitignore
@@ -0,0 +1,22 @@
+*.class
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.war
+*.ear
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+.idea/
+*.iml
+
+/logs
+/target
+
+rebel.xml
+resources.dev/
+/resources.dev/
+*/target
diff --git b/.idea/compiler.xml a/.idea/compiler.xml
new file mode 100644
index 0000000..1b42cff
--- /dev/null
+++ a/.idea/compiler.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git b/.idea/encodings.xml a/.idea/encodings.xml
new file mode 100644
index 0000000..cbdd4ca
--- /dev/null
+++ a/.idea/encodings.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git b/.idea/jarRepositories.xml a/.idea/jarRepositories.xml
new file mode 100644
index 0000000..1dbb72d
--- /dev/null
+++ a/.idea/jarRepositories.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git b/.idea/misc.xml a/.idea/misc.xml
new file mode 100644
index 0000000..6819391
--- /dev/null
+++ a/.idea/misc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git b/.idea/modules.xml a/.idea/modules.xml
new file mode 100644
index 0000000..a21bcb4
--- /dev/null
+++ a/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git b/.idea/uiDesigner.xml a/.idea/uiDesigner.xml
new file mode 100644
index 0000000..e96534f
--- /dev/null
+++ a/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git b/.idea/vcs.xml a/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ a/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git b/.idea/workspace.xml a/.idea/workspace.xml
new file mode 100644
index 0000000..39e521a
--- /dev/null
+++ a/.idea/workspace.xml
@@ -0,0 +1,473 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ "associatedIndex": 2
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1610696222426
+
+
+ 1610696222426
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1610696337509
+
+
+
+ 1610696337509
+
+
+ 1610696587982
+
+
+
+ 1610696587982
+
+
+ 1610696652896
+
+
+
+ 1610696652896
+
+
+ 1610696684032
+
+
+
+ 1610696684032
+
+
+ 1610697080892
+
+
+
+ 1610697080892
+
+
+ 1638499893941
+
+
+
+ 1638499893941
+
+
+ 1660008678245
+
+
+
+ 1660008678245
+
+
+ 1660034836851
+
+
+
+ 1660034836851
+
+
+ 1681719768299
+
+
+
+ 1681719768299
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git b/pom.xml a/pom.xml
new file mode 100644
index 0000000..fdd6df9
--- /dev/null
+++ a/pom.xml
@@ -0,0 +1,12 @@
+
+
+ 4.0.0
+
+ com.ectrip
+ bin-api
+ 1.0-SNAPSHOT
+
+
+
\ No newline at end of file
diff --git b/zhyx-api/pom.xml a/zhyx-api/pom.xml
new file mode 100644
index 0000000..06a9cd7
--- /dev/null
+++ a/zhyx-api/pom.xml
@@ -0,0 +1,301 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.2.4.RELEASE
+
+
+ com.ectrip
+ zhyx-api
+ 1.0.0
+ zhyx-api
+ 整合营销-接口测试平台
+ jar
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 1.3.2
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.2.3
+
+
+
+ ch.qos.logback
+ logback-core
+ 1.2.3
+
+
+
+ log4j
+ log4j
+ 1.2.17
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.31
+
+
+
+
+ com.alibaba
+ druid
+ 1.0.15
+
+
+
+ mysql
+ mysql-connector-java
+ 5.1.47
+
+
+
+
+ com.github.pagehelper
+ pagehelper
+ 5.1.2
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-autoconfigure
+ 1.2.3
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ 1.2.3
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.4
+
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5
+
+
+
+ commons-httpclient
+ commons-httpclient
+ 3.1
+
+
+
+ org.apache.httpcomponents
+ httpmime
+ 4.5
+
+
+
+
+ org.aspectj
+ aspectjrt
+ 1.8.13
+
+
+
+ org.aspectj
+ aspectjweaver
+ 1.8.6
+
+
+
+
+
+
+ io.springfox
+ springfox-swagger2
+ 2.6.0
+
+
+ io.springfox
+ springfox-swagger-ui
+ 2.6.0
+
+
+
+ com.github.xiaoymin
+ swagger-bootstrap-ui
+ 1.9.5
+
+
+
+ org.apache.poi
+ poi-ooxml
+ 3.9
+
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+ com.thoughtworks.xstream
+ xstream
+ 1.4.10
+
+
+
+
+ com.github.binarywang
+ weixin-java-pay
+ 3.6.0
+
+
+
+
+
+ dev
+
+ true
+
+
+ dev
+
+
+
+ qingdao
+
+ false
+
+
+ qingdao
+
+
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ ${maven-resources-plugin.version}
+
+
+ @
+
+ false
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+
+ ${java.version}
+ true
+
+
+
+
+
+
+
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/CytApplication.java a/zhyx-api/src/main/java/com/ectrip/cyt/CytApplication.java
new file mode 100644
index 0000000..66ce4ea
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/CytApplication.java
@@ -0,0 +1,23 @@
+package com.ectrip.cyt;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.web.bind.annotation.CrossOrigin;
+
+@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
+@EnableAspectJAutoProxy//开启AOP
+@EnableTransactionManagement//开启事务
+@CrossOrigin//跨域
+@EnableScheduling
+//不链接数据库
+public class CytApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(CytApplication.class, args);
+ }
+
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/common/Parameter.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/common/Parameter.java
new file mode 100644
index 0000000..11ebd8f
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/common/Parameter.java
@@ -0,0 +1,68 @@
+package com.ectrip.cyt.client.cyt.common;
+
+import java.io.Serializable;
+
+public class Parameter implements Serializable, Comparable {
+
+ private static final long serialVersionUID = 2721340807561333705L;
+
+ private String name;
+ private String value;
+
+ public Parameter() {
+ super();
+ }
+
+ public Parameter(String name, String value) {
+ super();
+ this.name = name;
+ this.value = value;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ //对象不为空
+ if (obj == null) {
+ return false;
+ }
+ //hashCode相等
+ if (this == obj) {
+ return true;
+ }
+
+ if (obj instanceof Parameter) {
+ Parameter param = (Parameter) obj;
+ return this.getName().equals(param.getName())
+ && this.getValue().equals(param.getValue());
+ }
+
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return super.toString();
+ }
+
+ @Override
+ public int compareTo(Parameter arg0) {
+ return 0;
+ }
+
+}
\ No newline at end of file
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/common/Transient.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/common/Transient.java
new file mode 100644
index 0000000..9f8d976
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/common/Transient.java
@@ -0,0 +1,19 @@
+package com.ectrip.cyt.client.cyt.common;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 实现描述:标识不需要Json序列化的属性
+ *
+ * @version v1.0.0
+ * @see
+ */
+@Target({ElementType.FIELD, ElementType.PARAMETER})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Transient {
+
+ boolean value() default true;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/Base64Util.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/Base64Util.java
new file mode 100644
index 0000000..6c0a1f3
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/Base64Util.java
@@ -0,0 +1,68 @@
+package com.ectrip.cyt.client.cyt.model;
+
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
+
+import java.io.IOException;
+
+/**
+ * Base64转换工具类
+ *
+ * @author
+ */
+public class Base64Util {
+
+ /**
+ * 将 s进行 BASE64 编码
+ *
+ * @param s
+ * @return
+ * @throws java.io.UnsupportedEncodingException
+ */
+ public static String getBASE64(String s) {
+ if (s == null) {
+ return null;
+ }
+ return new BASE64Encoder().encode(s.getBytes());
+ }
+
+ /**
+ * 将 BASE64 编码的字符串 s进行解码
+ *
+ * @param s
+ * @return
+ */
+ public static String getFromBASE64(String s) {
+ if (s == null) {
+ return null;
+ }
+ BASE64Decoder decoder = new BASE64Decoder();
+ try {
+ byte[] b = decoder.decodeBuffer(s);
+ return new String(b);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ public static void main(String[] args) {
+ System.out.println(System.getProperty("file.encoding"));
+ System.out.println(Base64Util.getBASE64("颐和园"));
+ System.out
+ .println(Base64Util
+ .getFromBASE64("PG9yZGVyPjxvcmRlcklkPjEzMjkwMTQ8L29yZGVySWQ+PHN0YXR1cz5OT1JNQUw8L3N0YXR1cz48 cGF5bWVudFN0YXR1cz5VTlBBWTwvcGF5bWVudFN0YXR1cz48L29yZGVyPg=="));
+ }
+
+ public static String encodeToString(byte[] byteArray) {
+ return new BASE64Encoder().encode(byteArray);
+ }
+
+ public static byte[] decode(String planString) {
+ try {
+ return new BASE64Decoder().decodeBuffer(planString);
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/OtaBase.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/OtaBase.java
new file mode 100644
index 0000000..e97a00f
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/OtaBase.java
@@ -0,0 +1,56 @@
+package com.ectrip.cyt.client.cyt.model;
+
+import java.util.Map;
+
+/**
+ * OTA基本交互数据类型实体
+ * Created by lingkitho on 2017/4/27.
+ */
+public class OtaBase {
+ private String data;//base64的xml加密串
+ private String xmlData;//解密后的xml字符串
+ private Map mapData;//处理后的map对象
+
+ private String signed;//签名, MD5(signkey + data)
+ private String securityType = "MD5";
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getSigned() {
+ return signed;
+ }
+
+ public void setSigned(String signed) {
+ this.signed = signed;
+ }
+
+ public String getSecurityType() {
+ return securityType;
+ }
+
+ public void setSecurityType(String securityType) {
+ this.securityType = securityType;
+ }
+
+ public String getXmlData() {
+ return xmlData;
+ }
+
+ public void setXmlData(String xmlData) {
+ this.xmlData = xmlData;
+ }
+
+ public Map getMapData() {
+ return mapData;
+ }
+
+ public void setMapData(Map mapData) {
+ this.mapData = mapData;
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody.java
new file mode 100644
index 0000000..68f9dcc
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody.java
@@ -0,0 +1,117 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ApplyOrderRefundByUserRequestBody", propOrder = {"orderInfo"})
+@Data
+public class ApplyOrderRefundByUserRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public ApplyOrderRefundByUserRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerorderId","partnerOrderId","orderId", "refundSeq", "orderPrice", "orderQuantity", "refundQuantity", "orderRefundPrice", "orderRefundCharge", "refundExplain", "visitPerson"})
+ @Data
+ public static class OrderInfo {
+ public String getPartnerorderId() {
+ return partnerorderId;
+ }
+
+ public void setPartnerorderId(String partnerorderId) {
+ this.partnerorderId = partnerorderId;
+ }
+
+ public String getPartnerOrderId() {
+ return partnerOrderId;
+ }
+
+ public void setPartnerOrderId(String partnerOrderId) {
+ this.partnerOrderId = partnerOrderId;
+ }
+
+ @XmlElement(required = true)
+ protected String partnerorderId;
+ @XmlElement(required = true)
+ protected String partnerOrderId;
+ @XmlElement(required = true)
+ protected String orderId;
+ @XmlElement(required = true)
+ protected String refundSeq;
+ @XmlElement(required = true)
+ protected String orderPrice;
+ @XmlElement(required = true)
+ protected String orderQuantity;
+ @XmlElement(required = true)
+ protected String refundQuantity;
+ @XmlElement(required = true)
+ protected String orderRefundPrice;
+ @XmlElement(required = true)
+ protected String orderRefundCharge;
+ @XmlElement(required = true)
+ protected String refundExplain;
+ @XmlElement(required = true)
+ protected VisitPerson visitPerson;
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.partnerOrderId = "";
+ this.orderId ="";
+ this.refundSeq = "";
+ this.orderPrice = "";
+ this.orderQuantity = "";
+ this.refundQuantity = "";
+ this.orderRefundPrice = "";
+ this.orderRefundCharge = "";
+ this.refundExplain = "";
+ this.visitPerson = new VisitPerson();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"person"})
+ @Data
+ public static class VisitPerson {
+ protected List person;
+
+ public VisitPerson() {
+ super();
+ this.person = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"name", "credentials", "credentialsType", "voucherCode"})
+ @Data
+ public static class Person {
+
+ @XmlElement(required = true)
+ protected String name;
+ @XmlElement(required = true)
+ protected String credentials;
+ @XmlElement(required = true)
+ protected String credentialsType;
+ @XmlElement
+ protected String voucherCode;
+
+ public Person() {
+ super();
+ this.name = "";
+ this.credentials = "";
+ this.credentialsType = "";
+ this.voucherCode="";
+ }
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/CancelOrderRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/CancelOrderRequestBody.java
new file mode 100644
index 0000000..2464bb7
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/CancelOrderRequestBody.java
@@ -0,0 +1,37 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CancelOrderRequestBody", propOrder = {"orderInfo"})
+@Data
+public class CancelOrderRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public CancelOrderRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerOrderId", "orderId"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String partnerOrderId;
+ @XmlElement(required = true)
+ protected String orderId;
+
+ public OrderInfo() {
+ super();
+ this.orderId="";
+ this.partnerOrderId = "";
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody.java
new file mode 100644
index 0000000..0d6ff66
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody.java
@@ -0,0 +1,138 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CheckOrderRequestBody", propOrder = {"orderInfo"})
+@Data
+public class CheckOrderRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public CheckOrderRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"orderId", "product", "contactPerson", "visitPerson", "orderQuantity", "orderPrice", "orderStatus", "token"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String orderId;
+ @XmlElement(required = true)
+ protected Product product;
+ @XmlElement(required = true)
+ protected ContactPerson contactPerson;
+ @XmlElement(required = true)
+ protected VisitPerson visitPerson;
+ @XmlElement(required = true)
+ protected String orderQuantity;
+ @XmlElement(required = true)
+ protected String orderPrice;
+ @XmlElement(required = true)
+ protected String orderStatus;
+ @XmlElement(required = true)
+ protected String token;
+
+ public OrderInfo() {
+ super();
+ this.orderId = "";
+ this.product = new Product();
+ this.contactPerson = new ContactPerson();
+ this.visitPerson = new VisitPerson();
+ this.orderQuantity = "";
+ this.orderPrice = "";
+ this.orderStatus = "";
+ this.token = "";
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"name", "mobile", "credentials", "credentialsType"})
+ @Data
+ public static class ContactPerson {
+ @XmlElement(required = true)
+ protected String name;
+ @XmlElement(required = true)
+ protected String mobile;
+ @XmlElement(required = true)
+ protected String credentials;
+ @XmlElement(required = true)
+ protected String credentialsType;
+
+ public ContactPerson() {
+ super();
+ this.name = "";
+ this.mobile = "";
+ this.credentials = "";
+ this.credentialsType = "";
+ }
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"resourceId", "timeOfBookId", "productName", "visitDate", "sellPrice"})
+ @Data
+ public static class Product {
+ @XmlElement(required = true)
+ protected String resourceId;
+ @XmlElement(required = true)
+ protected String timeOfBookId;
+ @XmlElement(required = true)
+ protected String productName;
+ @XmlElement(required = true)
+ protected String visitDate;
+ @XmlElement(required = true)
+ protected String sellPrice;
+
+ public Product() {
+ super();
+ this.resourceId = "";
+ this.timeOfBookId = "";
+ this.productName = "";
+ this.visitDate = "";
+ this.sellPrice = "";
+ }
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"person"})
+ @Data
+ public static class VisitPerson {
+ protected List person;
+
+ public VisitPerson() {
+ super();
+ this.person = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"name", "credentials", "credentialsType"})
+ @Data
+ public static class Person {
+ @XmlElement(required = true)
+ protected String name;
+ @XmlElement(required = true)
+ protected String credentials;
+ @XmlElement(required = true)
+ protected String credentialsType;
+ @XmlElement(required = false)
+ protected String mobile;
+
+ public Person() {
+ super();
+ this.name = "";
+ this.credentials = "";
+ this.credentialsType = "";
+ this.mobile = "";
+ }
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody.java
new file mode 100644
index 0000000..8bc0a17
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody.java
@@ -0,0 +1,141 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CreateOrderRequestBody", propOrder = {"orderInfo"})
+@Data
+public class CreateOrderRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public CreateOrderRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"orderId", "product", "contactPerson", "visitPerson", "orderQuantity", "orderPrice", "orderStatus", "token"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String orderId;
+ @XmlElement(required = true)
+ protected Product product;
+ @XmlElement(required = true)
+ protected ContactPerson contactPerson;
+ @XmlElement(required = true)
+ protected VisitPerson visitPerson;
+ @XmlElement(required = true)
+ protected String orderQuantity;
+ @XmlElement(required = true)
+ protected String orderPrice;
+ @XmlElement(required = true)
+ protected String orderStatus;
+ @XmlElement(required = true)
+ protected String token;
+
+ public OrderInfo() {
+ super();
+ this.orderId = "";
+ this.product = new Product();
+ this.contactPerson = new ContactPerson();
+ this.visitPerson = new VisitPerson();
+ this.orderQuantity = "";
+ this.orderPrice = "";
+ this.orderStatus = "";
+ this.token = "";
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"name", "mobile", "credentials", "credentialsType"})
+ @Data
+ public static class ContactPerson {
+ @XmlElement(required = true)
+ protected String name;
+ @XmlElement(required = true)
+ protected String mobile;
+ @XmlElement(required = true)
+ protected String credentials;
+ @XmlElement(required = true)
+ protected String credentialsType;
+
+ public ContactPerson() {
+ super();
+ this.name = "";
+ this.mobile = "";
+ this.credentials = "";
+ this.credentialsType = "";
+ }
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"resourceId", "timeOfBookId", "productName", "visitDate", "sellPrice"})
+ @Data
+ public static class Product {
+ @XmlElement(required = true)
+ protected String resourceId;
+ @XmlElement(required = true)
+ protected String timeOfBookId;
+ @XmlElement(required = true)
+ protected String productName;
+ @XmlElement(required = true)
+ protected String visitDate;
+ @XmlElement(required = true)
+ protected String sellPrice;
+
+ public Product() {
+ super();
+ this.resourceId = "";
+ this.timeOfBookId = "";
+ this.productName = "";
+ this.visitDate = "";
+ this.sellPrice = "";
+ }
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"person"})
+ @Data
+ public static class VisitPerson {
+
+ protected List person;
+
+ public VisitPerson() {
+ super();
+ this.person = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"name", "credentials", "credentialsType", "mobile", "groupId"})
+ @Data
+ public static class Person {
+ @XmlElement(required = true)
+ protected String name;
+ @XmlElement(required = true)
+ protected String credentials;
+ @XmlElement(required = true)
+ protected String credentialsType;
+ @XmlElement(required = false)
+ protected String mobile;
+ @XmlElement(required = false)
+ protected String groupId;
+
+ public Person() {
+ super();
+ this.name = "";
+ this.credentials = "";
+ this.credentialsType = "";
+ this.mobile = "";
+ }
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody.java
new file mode 100644
index 0000000..ca7a243
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody.java
@@ -0,0 +1,145 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CreatePaymentOrderRequestBody", propOrder = {"orderInfo"})
+@Data
+public class CreatePaymentOrderRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public CreatePaymentOrderRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"orderId", "product", "contactPerson", "visitPerson", "orderQuantity", "orderPrice", "orderStatus"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String orderId;
+ @XmlElement(required = true)
+ protected Product product;
+ @XmlElement(required = true)
+ protected ContactPerson contactPerson;
+ @XmlElement(required = true)
+ protected VisitPerson visitPerson;
+ @XmlElement(required = true)
+ protected String orderQuantity;
+ @XmlElement(required = true)
+ protected String orderPrice;
+ @XmlElement(required = true)
+ protected String orderStatus;
+ @XmlElement(required = true)
+ protected String token;
+
+
+ public OrderInfo() {
+ super();
+ this.orderId = "";
+ this.product = new Product();
+ this.contactPerson = new ContactPerson();
+ this.visitPerson = new VisitPerson();
+ this.orderQuantity = "";
+ this.orderPrice = "";
+ this.orderStatus = "";
+ this.token = "";
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"name", "mobile", "credentials", "credentialsType"})
+ @Data
+ public static class ContactPerson {
+ @XmlElement(required = true)
+ protected String name;
+ @XmlElement(required = true)
+ protected String mobile;
+ @XmlElement(required = true)
+ protected String credentials;
+ @XmlElement(required = true)
+ protected String credentialsType;
+
+ public ContactPerson() {
+ super();
+ this.name = "";
+ this.mobile = "";
+ this.credentials = "";
+ this.credentialsType = "";
+ }
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"resourceId", "timeOfBookId", "productName", "visitDate", "sellPrice"})
+ @Data
+ public static class Product {
+ @XmlElement(required = true)
+ protected String resourceId;
+ @XmlElement(required = true)
+ protected String timeOfBookId;
+ @XmlElement(required = true)
+ protected String productName;
+ @XmlElement(required = true)
+ protected String visitDate;
+ @XmlElement(required = false)
+ protected String leaveDate;
+ @XmlElement(required = true)
+ protected String sellPrice;
+
+ public Product() {
+ super();
+ this.resourceId = "";
+ this.timeOfBookId = "";
+ this.productName = "";
+ this.visitDate = "";
+ this.leaveDate = "";
+ this.sellPrice = "";
+ }
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"person"})
+ @Data
+ public static class VisitPerson {
+ protected List person;
+
+ public VisitPerson() {
+ super();
+ this.person = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"name", "credentials", "credentialsType", "mobile", "groupId"})
+ @Data
+ public static class Person {
+ @XmlElement(required = true)
+ protected String name;
+ @XmlElement(required = true)
+ protected String credentials;
+ @XmlElement(required = true)
+ protected String credentialsType;
+ @XmlElement(required = false)
+ protected String mobile;
+ @XmlElement(required = false)
+ protected String groupId;
+
+ public Person() {
+ super();
+ this.name = "";
+ this.credentials = "";
+ this.credentialsType = "";
+ this.mobile = "";
+ this.groupId = "";
+ }
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetOrderByOTARequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetOrderByOTARequestBody.java
new file mode 100644
index 0000000..acdc124
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetOrderByOTARequestBody.java
@@ -0,0 +1,25 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GetOrderByOTARequestBody", propOrder = {"partnerOrderId","orderId"})
+@Data
+public class GetOrderByOTARequestBody extends RequestBody {
+ @XmlElement(required = false)
+ protected String partnerOrderId;
+
+ @XmlElement(required = false)
+ protected String orderId;
+
+ public GetOrderByOTARequestBody() {
+ super();
+ this.partnerOrderId = "";
+ this.orderId ="";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetProductByOTARequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetProductByOTARequestBody.java
new file mode 100644
index 0000000..0df4b8e
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetProductByOTARequestBody.java
@@ -0,0 +1,36 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GetProductByOTARequestBody", propOrder = {"method", "currentPage", "pageSize", "resourceId"})
+@Data
+public class GetProductByOTARequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected String method;
+ @XmlElement(required = true)
+ protected String currentPage;
+ @XmlElement(required = true)
+ protected String pageSize;
+ @XmlElement(required = true)
+ protected String resourceId;
+ @XmlElement(required = true)
+ protected String queryStartDay;
+ @XmlElement(required = true)
+ protected String queryEndDay;
+
+ public GetProductByOTARequestBody() {
+ super();
+ this.method = "";
+ this.currentPage = "";
+ this.pageSize = "";
+ this.resourceId = "";
+ this.queryStartDay = "";
+ this.queryEndDay = "";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetStockProductInfoRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetStockProductInfoRequestBody.java
new file mode 100644
index 0000000..1d67972
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetStockProductInfoRequestBody.java
@@ -0,0 +1,26 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GetStockProductInfoRequestBody", propOrder = {"startDate", "endDate", "resourceId"})
+@Data
+public class GetStockProductInfoRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected String startDate;
+ @XmlElement(required = true)
+ protected String endDate;
+ @XmlElement(required = true)
+ protected String resourceId;
+
+ public GetStockProductInfoRequestBody() {
+ super();
+ this.startDate = "";
+ this.endDate = "";
+ this.resourceId = "";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody.java
new file mode 100644
index 0000000..354879a
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody.java
@@ -0,0 +1,102 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderConsumedRequestBody", propOrder = {"orderInfo"})
+@Data
+public class NoticeOrderConsumedRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public NoticeOrderConsumedRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerorderId", "otaorderId", "orderQuantity", "useQuantity", "useTotalQuantity", "consumeInfo", "consumedSeq", "orderId", "vouchers"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String partnerorderId;
+ @XmlElement(required = true)
+ protected String otaorderId;
+ @XmlElement(required = true)
+ protected String orderQuantity;
+ @XmlElement(required = true)
+ protected String useQuantity;
+ @XmlElement(required = true)
+ protected String useTotalQuantity;
+ @XmlElement(required = true)
+ protected String consumeInfo;
+ @XmlElement(required = true)
+ protected String consumedSeq;
+ @XmlElement(required = true)
+ protected String consumedTime;
+ @XmlElement(required = true)
+ protected String orderId;
+ @XmlElement(required = false)
+ protected Vouchers vouchers;
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.otaorderId="";
+ this.orderQuantity = "";
+ this.useQuantity = "";
+ this.consumeInfo = "";
+ this.consumedSeq="";
+ this.consumedTime="";
+ this.orderId="";
+ this.useTotalQuantity="";
+ this.vouchers=new Vouchers();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "voucher", propOrder = {
+ "voucher"
+ })
+ @Data
+ public static class Vouchers{
+ @XmlElement(required = false)
+ protected List voucher;
+
+ public Vouchers(){
+ super();
+ this.voucher = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "voucher", propOrder = {
+ "voucherCard",
+ "voucherCode",
+ "voucherCodeUrl",
+ })
+ @Data
+ public static class Voucher{
+ @XmlElement(required = false)
+ protected String voucherCard;
+ @XmlElement(required = false)
+ protected String voucherCode;
+ @XmlElement(required = false)
+ protected String voucherCodeUrl;
+
+ public Voucher(){
+ super();
+ this.voucherCard = "";
+ this.voucherCode = "";
+ this.voucherCodeUrl="";
+ }
+ }
+ }
+ }
+
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderEticketSendedRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderEticketSendedRequestBody.java
new file mode 100644
index 0000000..3d56c97
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderEticketSendedRequestBody.java
@@ -0,0 +1,40 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderEticketSendedRequestBody", propOrder = {"orderInfo"})
+@Data
+public class NoticeOrderEticketSendedRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public NoticeOrderEticketSendedRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerorderId", "eticketNo", "eticketSended"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String partnerorderId;
+ @XmlElement(required = true)
+ protected String eticketNo;
+ @XmlElement(required = true)
+ protected String eticketSended;
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.eticketNo = "";
+ this.eticketSended = "";
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderModifyRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderModifyRequestBody.java
new file mode 100644
index 0000000..f719970
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderModifyRequestBody.java
@@ -0,0 +1,46 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderPrintSuccessRequestBody", propOrder = {"orderInfo"})
+@Data
+public class NoticeOrderModifyRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public NoticeOrderModifyRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerorderId", "otaorderId", "orderStatus","operateData","originalData"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String partnerorderId;
+ @XmlElement(required = true)
+ protected String otaorderId;
+ @XmlElement(required = true)
+ protected String orderStatus;
+ @XmlElement(required = true)
+ protected String operateData;
+ @XmlElement(required = true)
+ protected String originalData;
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.otaorderId = "";
+ this.orderStatus = "";
+ this.operateData = "";
+ this.originalData = "";
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody.java
new file mode 100644
index 0000000..6ee3670
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody.java
@@ -0,0 +1,110 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderPrintSuccessRequestBody", propOrder = {"orderInfo"})
+@Data
+public class NoticeOrderPrintSuccessRequestBody extends RequestBody {
+ public NoticeOrderPrintSuccessRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {
+ "partnerorderId",
+ "orderStatus",
+ "qrCodeStr",
+ "qrCodeUrl",
+ "verifyCode",
+ "vouchers"
+ })
+ @Data
+ public static class OrderInfo {
+
+ @XmlElement(required = true)
+ protected String partnerorderId;
+ @XmlElement(required = true)
+ protected String otaorderId;
+ @XmlElement(required = true)
+ protected String distributorOrderId;
+ @XmlElement(required = true)
+ protected String description;
+ @XmlElement(required = true)
+ protected String orderStatus;
+ @XmlElement(required = false)
+ protected String qrCodeStr;
+ @XmlElement(required = false)
+ protected String qrCodeUrl;
+ @XmlElement(required = false)
+ protected String onlyQrCodeUrl;
+ @XmlElement(required = false)
+ protected String verifyCode;
+ @XmlElement(required = false)
+ protected Vouchers vouchers;
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.otaorderId = "";
+ this.distributorOrderId = "";
+ this.description = "";
+ this.orderStatus = "";
+ this.qrCodeStr = "";
+ this.qrCodeUrl = "";
+ this.onlyQrCodeUrl="";
+ this.verifyCode = "";
+ this.vouchers = new Vouchers();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {
+ "voucher"
+ })
+ @Data
+ public static class Vouchers{
+ @XmlElement(required = false)
+ protected List voucher;
+
+ public Vouchers(){
+ super();
+ this.voucher = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {
+ "voucherCard",
+ "voucherCode",
+ "voucherCodeUrl"
+ })
+ @Data
+ public static class Voucher{
+ @XmlElement(required = false)
+ protected String voucherCard;
+ @XmlElement(required = false)
+ protected String voucherCode;
+ @XmlElement(required = false)
+ protected String voucherCodeUrl;
+
+ public Voucher(){
+ super();
+ this.voucherCard = "";
+ this.voucherCode = "";
+ this.voucherCodeUrl = "";
+ }
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody.java
new file mode 100644
index 0000000..02f7874
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody.java
@@ -0,0 +1,117 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderRefundApproveResultRequestBody", propOrder = {"orderInfo"})
+@Data
+public class NoticeOrderRefundApproveResultRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public NoticeOrderRefundApproveResultRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {
+ "partnerorderId",
+ "otaorderId",
+ "refundSeq",
+ "orderQuantity",
+ "refundResult",
+ "refundQuantity",
+ "refundResult",
+ "description",
+ "orderRefundPrice",
+ "orderRefundCharge"
+ })
+ @Data
+ public static class OrderInfo {
+
+ @XmlElement(required = true)
+ protected String partnerorderId;
+ @XmlElement(required = true)
+ protected String otaorderId;
+ @XmlElement(required = true)
+ protected String refundSeq;
+ @XmlElement(required = true)
+ protected String orderQuantity;
+ @XmlElement(required = true)
+ protected String refundResult;
+ @XmlElement(required = true)
+ protected String description;
+ @XmlElement(required = true)
+ protected String refundQuantity;
+ @XmlElement(required = true)
+ protected String orderRefundPrice;
+ @XmlElement(required = true)
+ protected String orderRefundCharge;
+ @XmlElement(required = true)
+ protected Vouchers vouchers;
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.otaorderId="";
+ this.refundSeq = "";
+ this.orderQuantity = "";
+ this.refundResult = "";
+ this.description = "";
+ this.refundQuantity = "";
+ this.orderRefundPrice = "";
+ this.orderRefundCharge = "";
+ this.vouchers = new Vouchers();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "vouchers", propOrder = {
+ "voucher"
+ })
+ @Data
+ public static class Vouchers{
+ @XmlElement(required = false)
+ protected List voucher;
+
+ public Vouchers(){
+ super();
+ this.voucher = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "voucher", propOrder = {
+ "voucherCard",
+ "voucherCode",
+ "voucherStatus",
+ "voucherCodeUrl",
+ })
+ @Data
+ public static class Voucher{
+ @XmlElement(required = false)
+ protected String voucherCard;
+ @XmlElement(required = false)
+ protected String voucherCode;
+ @XmlElement(required = false)
+ protected String voucherStatus;
+ @XmlElement(required = false)
+ protected String voucherCodeUrl;
+
+ public Voucher(){
+ super();
+ this.voucherCard = "";
+ this.voucherCode = "";
+ this.voucherStatus = "";
+ this.voucherCodeUrl="";
+ }
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody.java
new file mode 100644
index 0000000..2192755
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody.java
@@ -0,0 +1,92 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderRefundRequestBody", propOrder = {"orderInfo"})
+@Data
+public class NoticeOrderRefundRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public NoticeOrderRefundRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerorderId", "otaorderId", "refundSeq", "orderQuantity", "refundQuantity", "orderRefundPrice", "orderRefundCharge", "vouchers"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String partnerorderId;
+ @XmlElement(required = true)
+ protected String otaorderId;
+ @XmlElement(required = true)
+ protected String refundSeq;
+ @XmlElement(required = true)
+ protected String orderQuantity;
+ @XmlElement(required = true)
+ protected String refundQuantity;
+ @XmlElement(required = true)
+ protected String orderRefundPrice;
+ @XmlElement(required = true)
+ protected String orderRefundCharge;
+ @XmlElement(required = false)
+ protected Vouchers vouchers;
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.otaorderId="";
+ this.refundSeq = "";
+ this.orderQuantity = "";
+ this.refundQuantity = "";
+ this.orderRefundPrice = "";
+ this.orderRefundCharge = "";
+ this.vouchers=new Vouchers();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "vouchers", propOrder = {"voucher"})
+ @Data
+ public static class Vouchers{
+ @XmlElement(required = false)
+ protected List voucher;
+
+ public Vouchers(){
+ super();
+ this.voucher = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "voucher", propOrder = {"voucherCard", "voucherCode", "voucherStatus", "voucherCodeUrl",})
+ @Data
+ public static class Voucher{
+ @XmlElement(required = false)
+ protected String voucherCard;
+ @XmlElement(required = false)
+ protected String voucherCode;
+ @XmlElement(required = false)
+ protected String voucherStatus;
+ @XmlElement(required = false)
+ protected String voucherCodeUrl;
+
+ public Voucher(){
+ super();
+ this.voucherCard = "";
+ this.voucherCode = "";
+ this.voucherStatus = "";
+ this.voucherCodeUrl="";
+ }
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundedByOTARequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundedByOTARequestBody.java
new file mode 100644
index 0000000..819f8d9
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundedByOTARequestBody.java
@@ -0,0 +1,55 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderRefundedByOTARequestBody", propOrder = {"orderInfo"})
+@Data
+public class NoticeOrderRefundedByOTARequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public NoticeOrderRefundedByOTARequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerorderId", "refundSeq", "orderQuantity", "orderPrice", "refundQuantity", "orderRefundPrice", "orderRefundCharge", "refundExplain"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String partnerorderId; //订单id
+ @XmlElement(required = true)
+ protected String refundSeq; //退订流水号
+ @XmlElement(required = true)
+ protected String orderQuantity; //订单数量
+ @XmlElement(required = true)
+ protected String orderPrice; //订单金额
+ @XmlElement(required = true)
+ protected String refundQuantity; //退订数量
+ @XmlElement(required = true)
+ protected String orderRefundPrice; //退订金额
+ @XmlElement(required = true)
+ protected String orderRefundCharge; // 退款手续费
+ @XmlElement(required = true)
+ protected String refundExplain; //退款说明
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.refundSeq = "";
+ this.orderQuantity = "";
+ this.orderPrice = "";
+ this.refundQuantity = "";
+ this.orderRefundPrice = "";
+ this.orderRefundCharge = "";
+ this.refundExplain = "";
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderReserveRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderReserveRequestBody.java
new file mode 100644
index 0000000..8a96bb8
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderReserveRequestBody.java
@@ -0,0 +1,52 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderPrintSuccessRequestBody", propOrder = {"orderInfo"})
+@Data
+public class NoticeOrderReserveRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public NoticeOrderReserveRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerorderId","otaorderId","orderStatus","price","totalQuantity","totalMoney","quantity"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ private String partnerorderId;
+ @XmlElement(required = true)
+ private String otaorderId;
+ @XmlElement(required = true)
+ private String orderStatus;
+ @XmlElement(required = true)
+ private String price;
+ @XmlElement(required = true)
+ private String totalQuantity;
+ @XmlElement(required = true)
+ private String totalMoney;
+ @XmlElement(required = true)
+ private String quantity;
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.otaorderId = "";
+ this.orderStatus = "";
+ this.price = "";
+ this.totalQuantity = "";
+ this.totalMoney = "";
+ this.quantity = "";
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeProductChangeRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeProductChangeRequestBody.java
new file mode 100644
index 0000000..bdf8b61
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeProductChangeRequestBody.java
@@ -0,0 +1,24 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeProductChangeRequestBody", propOrder = {"resourceId","changeType"})
+@Data
+public class NoticeProductChangeRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected String resourceId;
+
+ @XmlElement(required = true)
+ protected String changeType;
+
+ public NoticeProductChangeRequestBody(){
+ this.resourceId = "";
+ this.changeType = "";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/PayOrderRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/PayOrderRequestBody.java
new file mode 100644
index 0000000..ffd4052
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/PayOrderRequestBody.java
@@ -0,0 +1,47 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "PayOrderRequestBody", propOrder = {"orderInfo"})
+@Data
+public class PayOrderRequestBody extends RequestBody {
+
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public PayOrderRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerOrderId","otaOrderId","orderId","orderStatus","orderPrice"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String partnerOrderId;
+ @XmlElement(required = true)
+ protected String otaOrderId;
+ @XmlElement(required = true)
+ protected String orderId;
+ @XmlElement(required = true)
+ protected String orderStatus;
+ @XmlElement(required = true)
+ protected String orderPrice;
+
+ public OrderInfo() {
+ super();
+ this.otaOrderId="";
+ this.orderId="";
+ this.partnerOrderId = "";
+ this.orderStatus = "";
+ this.orderPrice = "";
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/PostFaceInfoRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/PostFaceInfoRequestBody.java
new file mode 100644
index 0000000..7fbd34c
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/PostFaceInfoRequestBody.java
@@ -0,0 +1,65 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "PostFaceInfoRequestBody", propOrder = {"orderId","serialNumber","faceInfos"})
+@Data
+public class PostFaceInfoRequestBody extends RequestBody {
+ /** 订单id */
+ @XmlElement(required = true)
+ protected String orderId;
+
+ /** 流水号 */
+ @XmlElement(required = true)
+ protected String serialNumber;
+
+ /** 人脸信息 */
+ @XmlElement(required = true)
+ protected FaceInfos faceInfos;
+
+ public PostFaceInfoRequestBody(){
+ super();
+ this.orderId = "";
+ this.serialNumber = "";
+ this.faceInfos = new FaceInfos();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"faceInfo"})
+ @Data
+ public static class FaceInfos{
+ protected List faceInfo;
+
+ public FaceInfos(){
+ super();
+ this.faceInfo = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"credentials", "url"})
+ @Data
+ public static class FaceInfo {
+ /** 游客身份证credentials */
+ @XmlElement(required = true)
+ protected String credentials;
+
+ /** 人脸图片地址url */
+ @XmlElement(required = true)
+ protected String url;
+
+ public FaceInfo() {
+ super();
+ this.credentials = "";
+ this.url = "";
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody.java
new file mode 100644
index 0000000..d2202e4
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody.java
@@ -0,0 +1,98 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "PushOrderRequestBody", propOrder = {"orderInfo"})
+@Data
+public class PushOrderRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public PushOrderRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerOrderId", "contactPerson", "visitPerson","visitDate"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String partnerOrderId;
+ @XmlElement(required = true)
+ protected ContactPerson contactPerson;
+ @XmlElement(required = true)
+ protected VisitPerson visitPerson;
+ @XmlElement(required = true)
+ protected String visitDate;
+
+ public OrderInfo() {
+ super();
+ this.partnerOrderId = "";
+ this.contactPerson = new ContactPerson();
+ this.visitPerson = new VisitPerson();
+ this.visitDate = "";
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"name", "mobile", "credentials", "credentialsType"})
+ @Data
+ public static class ContactPerson {
+ @XmlElement(required = true)
+ protected String name;
+ @XmlElement(required = true)
+ protected String mobile;
+ @XmlElement(required = true)
+ protected String credentials;
+ @XmlElement(required = true)
+ protected String credentialsType;
+
+ public ContactPerson() {
+ super();
+ this.name = "";
+ this.mobile = "";
+ this.credentials = "";
+ this.credentialsType = "";
+ }
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"person"})
+ @Data
+ public static class VisitPerson {
+ protected List person;
+
+ public VisitPerson() {
+ super();
+ this.person = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"name", "credentials", "credentialsType"})
+ @Data
+ public static class Person {
+ @XmlElement(required = true)
+ protected String name;
+ @XmlElement(required = true)
+ protected String credentials;
+ @XmlElement(required = true)
+ protected String credentialsType;
+
+ public Person() {
+ super();
+ this.name = "";
+ this.credentials = "";
+ this.credentialsType = "";
+ }
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/QueryOtaOrderRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/QueryOtaOrderRequestBody.java
new file mode 100644
index 0000000..eb27ecf
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/QueryOtaOrderRequestBody.java
@@ -0,0 +1,34 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "queryOtaOrderRequestBody", propOrder = {"orderInfo"})
+@Data
+public class QueryOtaOrderRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public QueryOtaOrderRequestBody() {
+ super();
+ this.orderInfo=new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"orderId"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String orderId;
+
+ public OrderInfo() {
+ super();
+ this.orderId = "";
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/Request.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/Request.java
new file mode 100644
index 0000000..6a166aa
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/Request.java
@@ -0,0 +1,16 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.*;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {"header", "body"})
+@XmlRootElement(name = "request")
+@Data
+public class Request {
+ @XmlElement(required = true)
+ protected RequestHeader header;
+ @XmlElement(required = true)
+ protected RequestBody body;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/RequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/RequestBody.java
new file mode 100644
index 0000000..54e911d
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/RequestBody.java
@@ -0,0 +1,15 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "RequestBody")
+@Data
+public class RequestBody {
+
+
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/RequestHeader.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/RequestHeader.java
new file mode 100644
index 0000000..0c81acf
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/RequestHeader.java
@@ -0,0 +1,50 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "RequestHeader", propOrder = {"application", "processor", "version", "bodyType", "createUser", "createTime", "supplierIdentity"})
+@Data
+public class RequestHeader {
+ @XmlElement(required = true, defaultValue = "tour.ectrip.com")
+ protected String application;
+ @XmlElement(required = true, defaultValue = "DataExchangeProcessor")
+ protected String processor;
+ @XmlElement(required = true)
+ protected String version;
+ @XmlElement(required = true)
+ protected String bodyType;
+ @XmlElement(required = true)
+ protected String createUser;
+ @XmlElement(required = true)
+ protected String createTime;
+ @XmlElement(required = true)
+ protected String supplierIdentity;
+
+ public RequestHeader() {
+ super();
+ this.application = "";
+ this.processor = "";
+ this.version = "";
+ this.bodyType = "";
+ this.createUser = "";
+ this.createTime = "";
+ this.supplierIdentity = "";
+ }
+
+ public RequestHeader(String application, String processor, String version, String bodyType, String createUser, String createTime, String supplierIdentity) {
+ super();
+ this.application = application;
+ this.processor = processor;
+ this.version = version;
+ this.bodyType = bodyType;
+ this.createUser = createUser;
+ this.createTime = createTime;
+ this.supplierIdentity = supplierIdentity;
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/SendOrderEticketRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/SendOrderEticketRequestBody.java
new file mode 100644
index 0000000..c7b2770
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/SendOrderEticketRequestBody.java
@@ -0,0 +1,37 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "SendOrderEticketRequestBody", propOrder = {"orderInfo"})
+@Data
+public class SendOrderEticketRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public SendOrderEticketRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerOrderId", "phoneNumber"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String partnerOrderId;
+ @XmlElement(required = true)
+ protected String phoneNumber;
+
+ public OrderInfo() {
+ super();
+ this.partnerOrderId = "";
+ this.phoneNumber = "";
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/VerifyConsumeRequestBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/VerifyConsumeRequestBody.java
new file mode 100644
index 0000000..b98f8d2
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/request/VerifyConsumeRequestBody.java
@@ -0,0 +1,49 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.request;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "VerifyConsumeRequestBody", propOrder = {"orderInfo"})
+@Data
+public class VerifyConsumeRequestBody extends RequestBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public VerifyConsumeRequestBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"otaOrderId", "cytOrderId", "orderQuantity", "token", "posid", "verifyConsumeInfo"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String otaOrderId;
+ @XmlElement(required = true)
+ protected String cytOrderId;
+ @XmlElement(required = true)
+ protected String orderQuantity;
+ @XmlElement(required = true)
+ protected String token;
+ @XmlElement(required = true)
+ protected String posid;
+ @XmlElement(required = true)
+ protected String verifyConsumeInfo;
+
+ public OrderInfo() {
+ super();
+ this.otaOrderId = "";
+ this.cytOrderId = "";
+ this.orderQuantity = "";
+ this.token = "";
+ this.posid = "";
+ this.verifyConsumeInfo = "";
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/ApplyOrderRefundByUserResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/ApplyOrderRefundByUserResponseBody.java
new file mode 100644
index 0000000..ddfae4a
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/ApplyOrderRefundByUserResponseBody.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ApplyOrderRefundByUserResponseBody", propOrder = {"message"})
+@Data
+public class ApplyOrderRefundByUserResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected String message;
+
+ public ApplyOrderRefundByUserResponseBody() {
+ super();
+ this.message = "";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/CancelOrderResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/CancelOrderResponseBody.java
new file mode 100644
index 0000000..eb59dbb
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/CancelOrderResponseBody.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CancelOrderResponseBody", propOrder = {"message"})
+@Data
+public class CancelOrderResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected String message;
+
+ public CancelOrderResponseBody(){
+ super();
+ this.message = "";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/CheckOrderResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/CheckOrderResponseBody.java
new file mode 100644
index 0000000..11279e9
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/CheckOrderResponseBody.java
@@ -0,0 +1,22 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CheckOrderResponseBody", propOrder = {"message"})
+@Data
+public class CheckOrderResponseBody extends ResponseBody {
+
+ @XmlElement(required = true)
+ protected String message;
+
+ public CheckOrderResponseBody() {
+ super();
+ this.message = "";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreateOrderResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreateOrderResponseBody.java
new file mode 100644
index 0000000..843871b
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreateOrderResponseBody.java
@@ -0,0 +1,56 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CreateOrderResponseBody", propOrder = {"orderInfo"})
+@Data
+public class CreateOrderResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public CreateOrderResponseBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerorderId","partnerOrderId","otaOrderId","orderStatus","qrCodeStr","qrCodeUrl","onlyQrCodeUrl","verifyCode"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String partnerorderId;
+ @XmlElement(required = true)
+ protected String partnerOrderId;
+ @XmlElement(required = true)
+ protected String otaOrderId;
+ @XmlElement(required = true)
+ protected String orderStatus;
+ @XmlElement(required = false)
+ protected String qrCodeStr;
+ @XmlElement(required = false)
+ protected String qrCodeUrl;
+ @XmlElement(required = false)
+ protected String onlyQrCodeUrl;
+ @XmlElement(required = false)
+ protected String verifyCode;
+
+ public OrderInfo() {
+ super();
+ this.partnerOrderId = "";
+ this.otaOrderId="";
+ this.partnerorderId = "";
+ this.orderStatus = "";
+ this.qrCodeUrl="";
+ this.onlyQrCodeUrl="";
+ this.qrCodeStr="";
+ this.verifyCode = "";
+ }
+ }
+
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody.java
new file mode 100644
index 0000000..26e4514
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody.java
@@ -0,0 +1,90 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CreatePaymentOrderResponseBody", propOrder = {"orderInfo"})
+@Data
+public class CreatePaymentOrderResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public CreatePaymentOrderResponseBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerorderId","otaorderId", "orderStatus", "qrCodeStr", "qrCodeUrl","onlyQrCodeUrl", "verifyCode", "vouchers"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = false)
+ protected String partnerorderId;
+ @XmlElement(required = false)
+ protected String otaorderId;
+ @XmlElement(required = true)
+ protected String orderStatus;
+ @XmlElement(required = false)
+ protected String qrCodeStr;
+ @XmlElement(required = false)
+ protected String qrCodeUrl;
+ @XmlElement(required = false)
+ protected String onlyQrCodeUrl;
+ @XmlElement(required = false)
+ protected String verifyCode;
+ @XmlElement(required = false)
+ protected Vouchers vouchers;
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.otaorderId = "";
+ this.orderStatus = "";
+ this.qrCodeStr = "";
+ this.qrCodeUrl = "";
+ this.onlyQrCodeUrl="";
+ this.verifyCode = "";
+ this.vouchers = new Vouchers();
+ }
+
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"voucher"})
+ @Data
+ public static class Vouchers{
+ @XmlElement(required = false)
+ protected List voucher;
+
+ public Vouchers(){
+ super();
+ this.voucher = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"voucherCard", "voucherCode", "voucherCodeUrl"})
+ @Data
+ public static class Voucher{
+ @XmlElement(required = false)
+ protected String voucherCard;
+ @XmlElement(required = false)
+ protected String voucherCode;
+ @XmlElement(required = false)
+ protected String voucherCodeUrl;
+
+ public Voucher(){
+ super();
+ this.voucherCard = "";
+ this.voucherCode = "";
+ this.voucherCodeUrl = "";
+ }
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody.java
new file mode 100644
index 0000000..6470ee2
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody.java
@@ -0,0 +1,95 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GetProductByOTAResponseBody", propOrder = {"pois"})
+@Data
+public class GetAvailableProductResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected Pois pois;
+
+ public GetAvailableProductResponseBody() {
+ super();
+ this.pois = new Pois();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"poi"})
+ @Data
+ public static class Pois {
+ protected List poi;
+
+ public Pois(){
+ this.poi=new ArrayList<>();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"poiId","poiName","poiDescription","poiLevel","poiMobile","addressProvince","addressCity","addressDistrict","poiAddress","poiLongitudeAndlatitude","poiOpenTime","poiImages","products"})
+ @Data
+ public static class Poi {
+ protected String poiId;
+ protected String poiName;
+ protected String poiDescription;
+ protected String poiLevel;
+ protected String poiMobile;
+ protected String addressProvince;
+ protected String addressCity;
+ protected String addressDistrict;
+ protected String poiAddress;
+ protected String poiLongitudeAndlatitude;
+ protected String poiOpenTime;
+ protected List poiImages;
+ protected Products products;
+
+ public Poi(){
+ this.poiId = "";
+ this.poiName = "";
+ this.poiDescription = "";
+ this.poiLevel = "";
+ this.poiMobile = "";
+ this.addressProvince = "";
+ this.addressCity = "";
+ this.addressDistrict = "";
+ this.poiAddress = "";
+ this.poiLongitudeAndlatitude = "";
+ this.poiOpenTime = "";
+ this.poiImages=new ArrayList<>();
+ this.products=new Products();
+ }
+
+ @Data
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"product"})
+ public static class Products {
+ protected List product;
+
+ public Products(){
+ this.product=new ArrayList<>();
+ }
+
+ @Data
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"resourceId", "productName"})
+ public static class Product {
+ protected String resourceId;
+ protected String productName;
+
+ public Product(){
+ this.resourceId = "";
+ this.productName = "";
+ }
+ }
+ }
+
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetBalanceResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetBalanceResponseBody.java
new file mode 100644
index 0000000..eba89dd
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetBalanceResponseBody.java
@@ -0,0 +1,50 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GetBalanceResponseBody", propOrder = {"supplierBalances"})
+@Data
+public class GetBalanceResponseBody extends ResponseBody {
+ protected SupplierBalances supplierBalances;
+
+ public GetBalanceResponseBody() {
+ super();
+ this.supplierBalances = new SupplierBalances();
+ }
+
+ @Data
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "",propOrder = {"supplierBalance"})
+ public static class SupplierBalances {
+ protected List supplierBalance;
+
+ public SupplierBalances(){
+ this.supplierBalance=new ArrayList<>();
+ }
+
+ @Data
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "",propOrder = {"name","supplierIdentity","fundType","balance"})
+ public static class SupplierBalance {
+ protected String name;
+ protected String supplierIdentity;
+ protected String fundType;
+ protected String balance;
+
+ public SupplierBalance() {
+ this.name = "";
+ this.supplierIdentity = "";
+ this.fundType = "";
+ this.balance = "";
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody.java
new file mode 100644
index 0000000..b7e2e97
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody.java
@@ -0,0 +1,132 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GetOrderByOTAResponseBody", propOrder = {"orderInfo"})
+@Data
+public class GetOrderByOTAResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public GetOrderByOTAResponseBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerorderId","partnerOrderId","otaOrderId", "orderStatus","orderMsg","totalQuantity", "orderQuantity", "eticketNo", "eticketSended", "useQuantity","refundQuantity", "consumeInfo", "vouchers","qrCodeStr","qrCodeUrl","onlyQrCodeUrl","otherQRCode"})
+ @Data
+ public static class OrderInfo {
+ public String getPartnerorderId() {
+ return partnerorderId;
+ }
+
+ public void setPartnerorderId(String partnerorderId) {
+ this.partnerorderId = partnerorderId;
+ }
+
+ public String getPartnerOrderId() {
+ return partnerOrderId;
+ }
+
+ public void setPartnerOrderId(String partnerOrderId) {
+ this.partnerOrderId = partnerOrderId;
+ }
+
+ @XmlElement(required = true)
+ protected String partnerorderId;
+ @XmlElement(required = true)
+ protected String partnerOrderId;
+ @XmlElement(required = true)
+ protected String otaOrderId;
+ @XmlElement(required = true)
+ protected String orderStatus;
+ @XmlElement(required = true)
+ protected String orderMsg;
+ @XmlElement(required = true)
+ protected String totalQuantity;
+ @XmlElement(required = true)
+ protected String orderQuantity;
+ @XmlElement(required = true)
+ protected String eticketNo;
+ @XmlElement(required = true)
+ protected String eticketSended;
+ @XmlElement(required = true)
+ protected String useQuantity;
+ @XmlElement(required = true)
+ protected String refundQuantity;
+ @XmlElement(required = true)
+ protected String consumeInfo;
+ @XmlElement(required = false)
+ protected Vouchers vouchers;
+ @XmlElement(required = false)
+ protected String qrCodeStr;
+ @XmlElement(required = false)
+ protected String qrCodeUrl;
+ @XmlElement(required = false)
+ protected String onlyQrCodeUrl;
+ @XmlElement(required = false)
+ protected String otherQRCode;//第三方取票码
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.partnerOrderId = "";
+ this.otaOrderId = "";
+ this.orderStatus = "";
+ this.orderMsg = "";
+ this.totalQuantity="";
+ this.orderQuantity = "";
+ this.eticketNo = "";
+ this.eticketSended = "";
+ this.useQuantity = "";
+ this.refundQuantity="";
+ this.consumeInfo = "";
+ this.qrCodeStr = "";
+ this.qrCodeUrl = "";
+ this.onlyQrCodeUrl="";
+ this.otherQRCode = "";
+ this.vouchers= new Vouchers();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"voucher"})
+ @Data
+ public static class Vouchers{
+ @XmlElement(required = false)
+ protected List voucher;
+
+ public Vouchers(){
+ super();
+ this.voucher = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"voucherCard", "voucherCode", "voucherCodeUrl"})
+ @Data
+ public static class Voucher{
+ @XmlElement(required = false)
+ protected String voucherCard;
+ @XmlElement(required = false)
+ protected String voucherCode;
+ @XmlElement(required = false)
+ protected String voucherCodeUrl;
+
+ public Voucher(){
+ super();
+ this.voucherCard = "";
+ this.voucherCode = "";
+ this.voucherCodeUrl = "";
+ }
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody.java
new file mode 100644
index 0000000..6f293bb
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody.java
@@ -0,0 +1,315 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GetProductByOTAResponseBody", propOrder = {"count", "productInfos"})
+@Data
+public class GetProductByOTAResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected String count;
+ @XmlElement(required = true)
+ protected ProductInfos productInfos;
+
+ public GetProductByOTAResponseBody() {
+ super();
+ this.count = "";
+ this.productInfos = new ProductInfos();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"productInfo"})
+ @Data
+ public static class ProductInfos {
+ protected List productInfo;
+
+ public ProductInfos() {
+ super();
+ this.productInfo = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"timeOfBooks", "baseInfo", "bookConfig", "priceConfig", "productDescription", "otherConfig"})
+ @Data
+ public static class ProductInfo {
+ @XmlElement(required = true)
+ protected TimeOfBooks timeOfBooks;
+ @XmlElement(required = true)
+ protected BaseInfo baseInfo;
+ @XmlElement(required = true)
+ protected BookConfig bookConfig;
+ @XmlElement(required = true)
+ protected PriceConfig priceConfig;
+ @XmlElement(required = true)
+ protected ProductDescription productDescription;
+ @XmlElement(required = true)
+ protected OtherConfig otherConfig;
+
+ public ProductInfo() {
+ super();
+ this.baseInfo = new BaseInfo();
+ this.timeOfBooks = new TimeOfBooks();
+ this.bookConfig = new BookConfig();
+ this.priceConfig = new PriceConfig();
+ this.productDescription = new ProductDescription();
+ this.otherConfig = new OtherConfig();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"timeOfBook"})
+ @Data
+ public static class TimeOfBooks {
+ @XmlElement(required = true)
+ protected List timeOfBook;
+
+ public TimeOfBooks() {
+ super();
+ this.timeOfBook = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"id", "startTime", "endTime", "price", "stock"})
+ @Data
+ public static class TimeOfBook {
+ @XmlElement(required = true)
+ protected String id;
+ @XmlElement(required = true)
+ protected String startTime;
+ @XmlElement(required = true)
+ protected String endTime;
+ @XmlElement(required = true)
+ protected String price;
+ @XmlElement(required = true)
+ protected String stock;
+
+ public TimeOfBook() {
+ super();
+ this.id = "";
+ this.startTime = "";
+ this.endTime = "";
+ this.price = "";
+ this.stock = "";
+ }
+ }
+ }
+
+
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"resourceId", "productType", "sights", "productName"})
+ @Data
+ public static class BaseInfo {
+ @XmlElement(required = true)
+ protected String resourceId;
+ @XmlElement(required = true)
+ protected String productType;
+ @XmlElement(required = true)
+ protected Sights sights;
+ @XmlElement(required = true)
+ protected String productName;
+
+ public BaseInfo() {
+ super();
+ this.resourceId = "";
+ this.productType = "";
+ this.sights = new Sights();
+ this.productName = "";
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"sight"})
+ @Data
+ public static class Sights {
+ @XmlElement(required = true)
+ protected List sight;
+
+ public Sights() {
+ super();
+ this.sight = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"sightName", "city"})
+ @Data
+ public static class Sight {
+ @XmlElement(required = true)
+ protected String sightName;
+ @XmlElement(required = true)
+ protected String city;
+
+ public Sight() {
+ super();
+ this.sightName = "";
+ this.city = "";
+ }
+ }
+ }
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"paymentType", "advanceOption", "autoCancelTime", "bookPersonType", "visitPersonRequiredForQuantity"})
+ @Data
+ public static class BookConfig {
+ @XmlElement(required = true)
+ protected String paymentType;
+ @XmlElement(required = true)
+ protected AdvanceOption advanceOption;
+ @XmlElement(required = true)
+ protected String autoCancelTime;
+ @XmlElement(required = true)
+ protected String bookPersonType;
+ @XmlElement(required = true)
+ protected String visitPersonRequiredForQuantity;
+
+ public BookConfig() {
+ super();
+ this.paymentType = "";
+ this.advanceOption = new AdvanceOption();
+ this.autoCancelTime = "";
+ this.bookPersonType = "";
+ this.visitPersonRequiredForQuantity = "";
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"bookAdvanceDay", "bookAdvanceTime", "useAdvanceHour"})
+ @Data
+ public static class AdvanceOption {
+ @XmlElement(required = true, defaultValue = "0")
+ protected String bookAdvanceDay;
+ @XmlElement(required = true)
+ protected String bookAdvanceTime;
+ @XmlElement(required = true)
+ protected String useAdvanceHour;
+
+ public AdvanceOption() {
+ super();
+ this.bookAdvanceDay = "";
+ this.bookAdvanceTime = "";
+ this.useAdvanceHour = "";
+ }
+ }
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"smsTemplet", "eticketType"})
+ @Data
+ public static class OtherConfig {
+ @XmlElement(required = true)
+ protected String smsTemplet;
+ @XmlElement(required = true)
+ protected String eticketType;
+
+ public OtherConfig() {
+ super();
+ this.smsTemplet = "";
+ this.eticketType = "";
+ }
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"validType", "daysAfterUseDateValid", "calendarPrices"})
+ @Data
+ public static class PriceConfig {
+ @XmlElement(required = true)
+ protected String validType;
+ @XmlElement(required = true)
+ protected String daysAfterUseDateValid;
+ @XmlElement(required = true)
+ protected CalendarPrices calendarPrices;
+
+ public PriceConfig() {
+ super();
+ this.validType = "";
+ this.daysAfterUseDateValid = "";
+ this.calendarPrices = new CalendarPrices();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"calendarPrice"})
+ @Data
+ public static class CalendarPrices {
+ @XmlElement(required = true)
+ protected List calendarPrice;
+
+ public CalendarPrices() {
+ super();
+ this.calendarPrice = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"useDate", "marketPrice", "sellPrice", "sellstock"})
+ @Data
+ public static class CalendarPrice {
+ @XmlElement(required = true)
+ protected String useDate;
+ @XmlElement(required = true)
+ protected String marketPrice;
+ @XmlElement(required = true)
+ protected String sellPrice;
+ @XmlElement(required = true)
+ protected String sellstock;
+
+ public CalendarPrice() {
+ super();
+ this.useDate = "";
+ this.marketPrice = "";
+ this.sellPrice = "";
+ this.sellstock = "";
+ }
+ }
+ }
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"remind", "refundOption"})
+ @Data
+ public static class ProductDescription {
+ @XmlElement(required = true)
+ protected String remind;
+ @XmlElement(required = true)
+ protected RefundOption refundOption;
+
+ public ProductDescription() {
+ super();
+ this.remind = "";
+ this.refundOption = new RefundOption();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"canRefund","canOverdueRefund", "refundApplyTimeBeforeValidEndDay", "refundCharge", "refundChargeType", "refundInfo"})
+ @Data
+ public static class RefundOption {
+ @XmlElement(required = true)
+ protected String canRefund;
+ @XmlElement(required = true)
+ protected String canOverdueRefund;
+ @XmlElement(required = true)
+ protected String refundApplyTimeBeforeValidEndDay;
+ @XmlElement(required = true)
+ protected String refundCharge;
+ @XmlElement(required = true)
+ protected String refundChargeType;
+ @XmlElement(required = true)
+ protected String refundInfo;
+
+ public RefundOption() {
+ super();
+ this.canRefund = "";
+ this.canOverdueRefund = "";
+ this.refundApplyTimeBeforeValidEndDay = "";
+ this.refundCharge = "";
+ this.refundChargeType = "";
+ this.refundInfo = "";
+ }
+ }
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody.java
new file mode 100644
index 0000000..4349495
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody.java
@@ -0,0 +1,106 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "GetStockProductInfoResponseBody", propOrder = {"resourceId", "timeOfBooks", "stockInfos"})
+@Data
+public class GetStockProductInfoResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected String resourceId;
+ @XmlElement(required = true)
+ protected TimeOfBooks timeOfBooks;
+ @XmlElement(required = true)
+ protected StockInfos stockInfos;
+
+ public GetStockProductInfoResponseBody() {
+ super();
+ this.resourceId = "";
+ this.stockInfos = new StockInfos();
+ this.timeOfBooks = new TimeOfBooks();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"timeOfBook"})
+ @Data
+ public static class TimeOfBooks {
+ @XmlElement(required = true)
+ protected List timeOfBook;
+
+ public TimeOfBooks() {
+ super();
+ this.timeOfBook = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"id", "title", "date", "startTime", "endTime", "remainingNumb"})
+ @Data
+ public static class TimeOfBook {
+ @XmlElement(required = true)
+ protected String id;
+ @XmlElement(required = true)
+ protected String title;
+ @XmlElement(required = true)
+ protected String date;
+ @XmlElement(required = true)
+ protected String startTime;
+ @XmlElement(required = true)
+ protected String endTime;
+ @XmlElement(required = true)
+ protected String remainingNumb;
+
+ public TimeOfBook() {
+ super();
+ this.id = "";
+ this.title = "";
+ this.date = "";
+ this.startTime = "";
+ this.endTime = "";
+ this.remainingNumb = "";
+ }
+ }
+ }
+
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"stockInfo"})
+ @Data
+ public static class StockInfos {
+ @XmlElement(required = true)
+ protected List stockInfo;
+
+ public StockInfos() {
+ this.stockInfo = new ArrayList<>();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"date", "channelStock", "commonStock", "productSaleStock"})
+ @Data
+ public static class StockInfo {
+ @XmlElement(required = true)
+ protected String date;
+ @XmlElement(required = true)
+ protected String channelStock;
+ @XmlElement(required = true)
+ protected String commonStock;
+ @XmlElement(required = true)
+ protected String productSaleStock;
+
+ public StockInfo() {
+ super();
+ this.date = "";
+ this.channelStock = "";
+ this.commonStock = "";
+ this.productSaleStock = "";
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderConsumedResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderConsumedResponseBody.java
new file mode 100644
index 0000000..dff293e
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderConsumedResponseBody.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderConsumedResponseBody", propOrder = {"message"})
+@Data
+public class NoticeOrderConsumedResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected String message;
+
+ public NoticeOrderConsumedResponseBody() {
+ super();
+ this.message = "";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderEticketSendedResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderEticketSendedResponseBody.java
new file mode 100644
index 0000000..21db7d8
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderEticketSendedResponseBody.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderEticketSendedResponseBody", propOrder = {"message"})
+@Data
+public class NoticeOrderEticketSendedResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected String message;
+
+ public NoticeOrderEticketSendedResponseBody() {
+ super();
+ this.message = "";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderPrintSuccessResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderPrintSuccessResponseBody.java
new file mode 100644
index 0000000..041dc8d
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderPrintSuccessResponseBody.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderPrintSuccessResponseBody", propOrder = {"message"})
+@Data
+public class NoticeOrderPrintSuccessResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected String message;
+
+ public NoticeOrderPrintSuccessResponseBody() {
+ super();
+ this.message="";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundApproveResultResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundApproveResultResponseBody.java
new file mode 100644
index 0000000..4b5a23c
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundApproveResultResponseBody.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderRefundApproveResultResponseBody", propOrder = {"message"})
+@Data
+public class NoticeOrderRefundApproveResultResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected String message;
+
+ public NoticeOrderRefundApproveResultResponseBody() {
+ super();
+ this.message = "";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundResponseBody.java
new file mode 100644
index 0000000..59df8ef
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundResponseBody.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderRefundResponseBody", propOrder = {"message"})
+@Data
+public class NoticeOrderRefundResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected String message;
+
+ public NoticeOrderRefundResponseBody() {
+ super();
+ this.message = "";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundedByOTAResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundedByOTAResponseBody.java
new file mode 100644
index 0000000..abb5cd4
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundedByOTAResponseBody.java
@@ -0,0 +1,49 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderRefundedByOTAResponseBody", propOrder = {"orderInfo"})
+@Data
+public class NoticeOrderRefundedByOTAResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public NoticeOrderRefundedByOTAResponseBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerorderId", "refundSeq", "refundResult", "refundQuantity", "orderRefundPrice", "orderRefundCharge"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String partnerorderId;
+ @XmlElement(required = true)
+ protected String refundSeq;
+ @XmlElement(required = true)
+ protected String refundResult;
+ @XmlElement(required = true)
+ protected String refundQuantity;
+ @XmlElement(required = true)
+ protected String orderRefundPrice;
+ @XmlElement(required = true)
+ protected String orderRefundCharge;
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.refundSeq = "";
+ this.refundResult = "";
+ this.refundQuantity = "";
+ this.orderRefundPrice = "";
+ this.orderRefundCharge = "";
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeProductChangedResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeProductChangedResponseBody.java
new file mode 100644
index 0000000..ef5d72b
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeProductChangedResponseBody.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeProductChangedResponseBody", propOrder = {"message"})
+@Data
+public class NoticeProductChangedResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected String message;
+
+ public NoticeProductChangedResponseBody() {
+ super();
+ this.message = "";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody.java
new file mode 100644
index 0000000..00268c1
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody.java
@@ -0,0 +1,108 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "PayOrderResponseBody", propOrder = {"orderInfo"})
+@Data
+public class PayOrderResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public PayOrderResponseBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerorderId", "partnerOrderId", "otaOrderId", "orderStatus", "qrCodeStr", "qrCodeUrl","onlyQrCodeUrl", "verifyCode", "vouchers"})
+ @Data
+ public static class OrderInfo {
+ public String getPartnerorderId() {
+ return partnerorderId;
+ }
+
+ public void setPartnerorderId(String partnerorderId) {
+ this.partnerorderId = partnerorderId;
+ }
+
+ public String getPartnerOrderId() {
+ return partnerOrderId;
+ }
+
+ public void setPartnerOrderId(String partnerOrderId) {
+ this.partnerOrderId = partnerOrderId;
+ }
+
+ @XmlElement(required = true)
+ protected String partnerorderId;
+ @XmlElement(required = true)
+ protected String partnerOrderId;
+ @XmlElement(required = true)
+ protected String otaOrderId;
+ @XmlElement(required = true)
+ protected String orderStatus;
+ @XmlElement(required = false)
+ protected String qrCodeStr;
+ @XmlElement(required = false)
+ protected String qrCodeUrl;
+ @XmlElement(required = false)
+ protected String onlyQrCodeUrl;
+ @XmlElement(required = false)
+ protected String verifyCode;
+ @XmlElement(required = false)
+ protected Vouchers vouchers;
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.partnerOrderId = "";
+ this.otaOrderId="";
+ this.orderStatus = "";
+ this.qrCodeStr = "";
+ this.qrCodeUrl = "";
+ this.onlyQrCodeUrl="";
+ this.verifyCode = "";
+ this.vouchers = new Vouchers();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"voucher"})
+ @Data
+ public static class Vouchers{
+ @XmlElement(required = false)
+ protected List voucher;
+
+ public Vouchers(){
+ super();
+ this.voucher = new ArrayList();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"voucherCard", "voucherCode", "voucherCodeUrl"})
+ @Data
+ public static class Voucher{
+ @XmlElement(required = false)
+ protected String voucherCard;
+ @XmlElement(required = false)
+ protected String voucherCode;
+ @XmlElement(required = false)
+ protected String voucherCodeUrl;
+
+ public Voucher(){
+ super();
+ this.voucherCard = "";
+ this.voucherCode = "";
+ this.voucherCodeUrl = "";
+ }
+ }
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/PostFaceInfoResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/PostFaceInfoResponseBody.java
new file mode 100644
index 0000000..f7495f3
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/PostFaceInfoResponseBody.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "NoticeOrderPrintSuccessResponseBody", propOrder = {"message"})
+@Data
+public class PostFaceInfoResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected String message;
+
+ public PostFaceInfoResponseBody() {
+ super();
+ this.message="";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/PushOrderResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/PushOrderResponseBody.java
new file mode 100644
index 0000000..63ff106
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/PushOrderResponseBody.java
@@ -0,0 +1,53 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "PushOrderResponseBody", propOrder = {"orderInfo"})
+@Data
+public class PushOrderResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public PushOrderResponseBody() {
+ super();
+ this.orderInfo = new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"partnerorderId","partnerOrderId"})
+ @Data
+ public static class OrderInfo {
+ public String getPartnerorderId() {
+ return partnerorderId;
+ }
+
+ public void setPartnerorderId(String partnerorderId) {
+ this.partnerorderId = partnerorderId;
+ }
+
+ public String getPartnerOrderId() {
+ return partnerOrderId;
+ }
+
+ public void setPartnerOrderId(String partnerOrderId) {
+ this.partnerOrderId = partnerOrderId;
+ }
+
+ @XmlElement(required = true)
+ protected String partnerorderId;
+ @XmlElement(required = true)
+ protected String partnerOrderId;
+
+ public OrderInfo() {
+ super();
+ this.partnerorderId = "";
+ this.partnerOrderId = "";
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/QueryOtaOrderResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/QueryOtaOrderResponseBody.java
new file mode 100644
index 0000000..0dad221
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/QueryOtaOrderResponseBody.java
@@ -0,0 +1,37 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "queryOtaOrderRequestBody", propOrder = {"orderInfo"})
+@Data
+public class QueryOtaOrderResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected OrderInfo orderInfo;
+
+ public QueryOtaOrderResponseBody() {
+ super();
+ this.orderInfo=new OrderInfo();
+ }
+
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlType(name = "", propOrder = {"orderId", "orderStatus"})
+ @Data
+ public static class OrderInfo {
+ @XmlElement(required = true)
+ protected String orderId;
+ @XmlElement(required = true)
+ protected String orderStatus;
+
+ public OrderInfo() {
+ super();
+ this.orderId = "";
+ this.orderStatus = "";
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/Response.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/Response.java
new file mode 100644
index 0000000..258f691
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/Response.java
@@ -0,0 +1,16 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.*;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {"header", "body"})
+@XmlRootElement(name = "response")
+@Data
+public class Response {
+ @XmlElement(required = true)
+ protected ResponseHeader header;
+ @XmlElement(required = true)
+ protected ResponseBody body;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/ResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/ResponseBody.java
new file mode 100644
index 0000000..e3f4079
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/ResponseBody.java
@@ -0,0 +1,14 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ResponseBody")
+@Data
+public class ResponseBody {
+
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/ResponseHeader.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/ResponseHeader.java
new file mode 100644
index 0000000..dc5e7ee
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/ResponseHeader.java
@@ -0,0 +1,54 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ResponseHeader", propOrder = {"application", "processor", "version", "bodyType", "createUser", "createTime", "code", "describe"})
+@Data
+public class ResponseHeader {
+ @XmlElement(required = true, defaultValue = "tour.ectrip.com")
+ protected String application;
+ @XmlElement(required = true, defaultValue = "DataExchangeProcessor")
+ protected String processor;
+ @XmlElement(required = true)
+ protected String version;
+ @XmlElement(required = true)
+ protected String bodyType;
+ @XmlElement(required = true)
+ protected String createUser;
+ @XmlElement(required = true)
+ protected String createTime;
+ @XmlElement(required = true)
+ protected String code;
+ @XmlElement(required = true)
+ protected String describe;
+
+ public ResponseHeader() {
+ super();
+ this.application = "";
+ this.processor = "";
+ this.version = "";
+ this.bodyType = "";
+ this.createUser = "";
+ this.createTime = "";
+ this.code = "";
+ this.describe = "";
+ }
+
+ public ResponseHeader(String application, String processor, String version, String bodyType, String createUser, String createTime, String code, String describe) {
+ super();
+ this.application = application;
+ this.processor = processor;
+ this.version = version;
+ this.bodyType = bodyType;
+ this.createUser = createUser;
+ this.createTime = createTime;
+ this.code = code;
+ this.describe = describe;
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/SendOrderEticketResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/SendOrderEticketResponseBody.java
new file mode 100644
index 0000000..6de521e
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/SendOrderEticketResponseBody.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "SendOrderEticketResponseBody", propOrder = {"message"})
+@Data
+public class SendOrderEticketResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected String message;
+
+ public SendOrderEticketResponseBody() {
+ super();
+ this.message = "";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/VerifyConsumeResponseBody.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/VerifyConsumeResponseBody.java
new file mode 100644
index 0000000..43a9e41
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/model/cytOrder/response/VerifyConsumeResponseBody.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.client.cyt.model.cytOrder.response;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "VerifyConsumeResponseBody", propOrder = {"message"})
+@Data
+public class VerifyConsumeResponseBody extends ResponseBody {
+ @XmlElement(required = true)
+ protected String message;
+
+ public VerifyConsumeResponseBody() {
+ super();
+ this.message = "";
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/service/TdosApiClient.java a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/service/TdosApiClient.java
new file mode 100644
index 0000000..3776d31
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/client/cyt/service/TdosApiClient.java
@@ -0,0 +1,602 @@
+package com.ectrip.cyt.client.cyt.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+import com.ectrip.cyt.client.cyt.common.Parameter;
+import com.ectrip.cyt.client.cyt.model.cytOrder.request.*;
+import com.ectrip.cyt.client.cyt.model.cytOrder.response.CreateOrderResponseBody;
+import com.ectrip.cyt.client.cyt.model.cytOrder.response.CreatePaymentOrderResponseBody;
+import com.ectrip.cyt.client.cyt.model.cytOrder.response.ResponseHeader;
+import com.ectrip.cyt.exception.BusinessException;
+import com.ectrip.cyt.model.enums.ApiMethodType;
+import com.ectrip.cyt.model.param.*;
+import com.ectrip.cyt.model.pojo.EditPerson;
+import com.ectrip.cyt.model.pojo.Person;
+import com.ectrip.cyt.model.result.Result;
+import com.ectrip.cyt.model.enums.CredentialsType;
+import com.ectrip.cyt.model.enums.OrderStatusType;
+import com.ectrip.cyt.model.rt.CommonReturn;
+import com.ectrip.cyt.utils.*;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.params.HttpMethodParams;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.apache.http.HttpStatus;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.SocketTimeoutException;
+import java.nio.charset.Charset;
+import java.util.*;
+
+public class TdosApiClient{
+ public static Result heartBeat(AccountParam accountParam){
+ return commonApi(accountParam,new RequestBody(),OtaUtils.HEART_BEAT);
+ }
+
+ public static Result getBalance(AccountParam accountParam) {
+ return commonApi(accountParam,new RequestBody(),OtaUtils.GET_BALANCE);
+ }
+
+ public static Result checkOrder(CreateOrderParam orderParam, AccountParam accountParam) {
+ CreateOrderRequestBody requestBody = new CreateOrderRequestBody();
+ CreateOrderRequestBody.OrderInfo requestOrderInfo = new CreateOrderRequestBody.OrderInfo();
+ requestOrderInfo.setOrderId(orderParam.getOrderCode());
+ //测试接口不支持淘宝
+ //requestOrderInfo.setToken();//淘宝订单(令牌信息)
+ //产品信息
+ CreateOrderRequestBody.OrderInfo.Product product = new CreateOrderRequestBody.OrderInfo.Product();
+ product.setResourceId(orderParam.getProduct().getProductNo()); //产品id
+ product.setVisitDate(formatDate(DateUtils.convertDate(orderParam.getVisitDate(),DateUtils.DATE_PATTERN)));//游玩日期
+ /*if(StringUtils.isNotBlank(orderParam.getLeaveDate())) {
+ product.setLeaveDate(formatDate(DateUtils.convertDate(orderParam.getLeaveDate(), DateUtils.DATE_PATTERN)));//住店日期
+ }*/
+ product.setSellPrice(Long.toString(convertCents(orderParam.getProduct().getSellPrice())));//产品售卖价格,转换为分
+ product.setTimeOfBookId(Long.toString(orderParam.getProduct().getTimeOfBookId()));
+ requestOrderInfo.setProduct(product);
+ //取票人信息
+ CreateOrderRequestBody.OrderInfo.ContactPerson contactPerson = new CreateOrderRequestBody.OrderInfo.ContactPerson();
+ contactPerson.setName(orderParam.getContactPerson().getName());
+ contactPerson.setMobile(orderParam.getContactPerson().getPhone());
+ contactPerson.setCredentials(orderParam.getContactPerson().getCredentials());
+ CredentialsType credentialsType=CredentialsType.typeOf(orderParam.getContactPerson().getCredentialsType());
+ contactPerson.setCredentialsType(OtaUtils.credentialsTypeStringMap.get(credentialsType));
+ requestOrderInfo.setContactPerson(contactPerson);
+ //游玩人信息
+ CreateOrderRequestBody.OrderInfo.VisitPerson visitPerson = new CreateOrderRequestBody.OrderInfo.VisitPerson();
+ List persons = Lists.newArrayList();
+ if (CollectionUtils.isNotEmpty(orderParam.getVisitPersons())) {
+ for (Person p : orderParam.getVisitPersons()) {
+ CreateOrderRequestBody.OrderInfo.VisitPerson.Person person = new CreateOrderRequestBody.OrderInfo.VisitPerson.Person();
+ person.setName(p.getName());
+ person.setCredentials(p.getCredentials());
+ CredentialsType ct=CredentialsType.typeOf(p.getCredentialsType());
+ person.setCredentialsType(OtaUtils.credentialsTypeStringMap.get(ct)
+ );
+ person.setMobile(p.getPhone());
+ persons.add(person);
+ }
+ }
+ visitPerson.setPerson(persons);
+ requestOrderInfo.setVisitPerson(visitPerson);
+ OrderStatusType orderStatusType=OrderStatusType.ORDER_RESERVE_SUCCESSFUL;
+ //订单票数
+ requestOrderInfo.setOrderQuantity(orderParam.getOrderQuantity().toString());
+ //订单金额
+ requestOrderInfo.setOrderPrice(Long.toString(convertCents(orderParam.getOrderPrice())));
+ //只支持预付
+ requestOrderInfo.setOrderStatus(OtaUtils.prepayOrderStatusTypeStringMap.get(orderStatusType));
+ requestBody.setOrderInfo(requestOrderInfo);
+ return commonApi(accountParam,requestBody,OtaUtils.CHECK_ORDER);
+ }
+
+ public static Result createOrder(CreateOrderParam orderParam, AccountParam accountParam) {
+ CreateOrderRequestBody requestBody = new CreateOrderRequestBody();
+ CreateOrderRequestBody.OrderInfo requestOrderInfo = new CreateOrderRequestBody.OrderInfo();
+ requestOrderInfo.setOrderId(orderParam.getOrderCode());
+ //测试接口不支持淘宝
+ //requestOrderInfo.setToken();//淘宝订单(令牌信息)
+ //产品信息
+ CreateOrderRequestBody.OrderInfo.Product product = new CreateOrderRequestBody.OrderInfo.Product();
+ product.setResourceId(orderParam.getProduct().getProductNo()); //产品id
+ product.setVisitDate(formatDate(DateUtils.convertDate(orderParam.getVisitDate(),DateUtils.DATE_PATTERN)));//游玩日期
+ /*if(StringUtils.isNotBlank(orderParam.getLeaveDate())) {
+ product.setLeaveDate(formatDate(DateUtils.convertDate(orderParam.getLeaveDate(), DateUtils.DATE_PATTERN)));//住店日期
+ }*/
+ product.setSellPrice(Long.toString(convertCents(orderParam.getProduct().getSellPrice())));//产品售卖价格,转换为分
+ product.setTimeOfBookId(Long.toString(orderParam.getProduct().getTimeOfBookId()));
+ //product.setSeatIds(orderParam.getProduct().getSeatIds());
+ requestOrderInfo.setProduct(product);
+ //取票人信息
+ CreateOrderRequestBody.OrderInfo.ContactPerson contactPerson = new CreateOrderRequestBody.OrderInfo.ContactPerson();
+ contactPerson.setName(orderParam.getContactPerson().getName());
+ contactPerson.setMobile(orderParam.getContactPerson().getPhone());
+ //contactPerson.setCredentials(orderParam.getContactPerson().getCredentials());
+ CredentialsType credentialsType=CredentialsType.typeOf(orderParam.getContactPerson().getCredentialsType());
+ //contactPerson.setCredentialsType(OtaUtils.credentialsTypeStringMap.get(credentialsType));
+ requestOrderInfo.setContactPerson(contactPerson);
+ //游玩人信息
+ CreateOrderRequestBody.OrderInfo.VisitPerson visitPerson = new CreateOrderRequestBody.OrderInfo.VisitPerson();
+ List persons = Lists.newArrayList();
+ if (CollectionUtils.isNotEmpty(orderParam.getVisitPersons())) {
+ for (Person p : orderParam.getVisitPersons()) {
+ CreateOrderRequestBody.OrderInfo.VisitPerson.Person person = new CreateOrderRequestBody.OrderInfo.VisitPerson.Person();
+ person.setName(p.getName());
+ person.setCredentials(p.getCredentials());
+ CredentialsType ct=CredentialsType.typeOf(p.getCredentialsType());
+ person.setCredentialsType(OtaUtils.credentialsTypeStringMap.get(ct)
+ );
+ person.setMobile(p.getPhone());
+ persons.add(person);
+ }
+ }
+ visitPerson.setPerson(persons);
+ requestOrderInfo.setVisitPerson(visitPerson);
+ OrderStatusType orderStatusType=OrderStatusType.ORDER_NOT_PAYED_YET;
+ //订单票数
+ requestOrderInfo.setOrderQuantity(orderParam.getOrderQuantity().toString());
+ //订单金额
+ requestOrderInfo.setOrderPrice(Long.toString(convertCents(orderParam.getOrderPrice())));
+ //只支持预付
+ requestOrderInfo.setOrderStatus(OtaUtils.prepayOrderStatusTypeStringMap.get(orderStatusType));
+ requestBody.setOrderInfo(requestOrderInfo);
+ return commonApi(accountParam,requestBody,OtaUtils.CREATE_ORDER);
+ }
+
+ public static Result cancelOrder(CancelOrderParam cancelOrder,AccountParam accountParam) {
+ CancelOrderRequestBody requestBody=new CancelOrderRequestBody();
+ CancelOrderRequestBody.OrderInfo oiRequest = new CancelOrderRequestBody.OrderInfo();
+ oiRequest.setPartnerOrderId(cancelOrder.getCytOrderCode());
+ oiRequest.setOrderId(cancelOrder.getOtaOrderCode());
+ requestBody.setOrderInfo(oiRequest);
+ return commonApi(accountParam,requestBody,OtaUtils.CANCEL_ORDER);
+ }
+
+ public static Result payOrder(PayOrderParam payOrder,AccountParam accountParam) {
+ PayOrderRequestBody requestBody=new PayOrderRequestBody();
+ PayOrderRequestBody.OrderInfo oiRequest = new PayOrderRequestBody.OrderInfo();
+ oiRequest.setPartnerOrderId(payOrder.getCytOrderCode());
+ oiRequest.setOtaOrderId(payOrder.getOtaOrderCode());
+ oiRequest.setOrderPrice(Long.toString(convertCents(payOrder.getOrderPrice())));
+ oiRequest.setOrderStatus(OrderStatusUtils.PREPAY_ORDER_PRINT_SUCCESS);
+ requestBody.setOrderInfo(oiRequest);
+ return commonApi(accountParam,requestBody,OtaUtils.PAY_ORDER);
+ }
+
+ public static Result queryOrder(QueryOrderParam queryOrder,AccountParam accountParam) {
+ GetOrderByOTARequestBody requestBody=new GetOrderByOTARequestBody();
+ //ota订单查询
+ requestBody.setOrderId(queryOrder.getOrderCode());
+ requestBody.setPartnerOrderId(queryOrder.getCytOrderCode());
+ return commonApi(accountParam,requestBody,OtaUtils.GET_ORDER_BY_OTA);
+ }
+
+ public static Result pushOrder(PushOrderParam pushOrder,AccountParam accountParam) {
+ PushOrderRequestBody requestBody=new PushOrderRequestBody();
+ PushOrderRequestBody.OrderInfo oiRequest = new PushOrderRequestBody.OrderInfo();
+ //联系人信息
+ Person contact = pushOrder.getContactPerson();
+ if (contact != null) {
+ PushOrderRequestBody.OrderInfo.ContactPerson contactPerson = new PushOrderRequestBody.OrderInfo.ContactPerson();
+ contactPerson.setName(contact.getName());
+ contactPerson.setMobile(contact.getPhone());
+ contactPerson.setCredentials(contact.getCredentials());
+ CredentialsType ct=CredentialsType.typeOf(contact.getCredentialsType());
+ contactPerson.setCredentialsType(OtaUtils.credentialsTypeStringMap.get(ct));
+ oiRequest.setContactPerson(contactPerson);
+ }
+ //游玩人信息
+ if (CollectionUtils.isNotEmpty(pushOrder.getVisitPersons())) {
+ PushOrderRequestBody.OrderInfo.VisitPerson visitPerson = new PushOrderRequestBody.OrderInfo.VisitPerson();
+ List persons = Lists.newArrayList();
+ for (EditPerson visitor : pushOrder.getVisitPersons()) {
+ PushOrderRequestBody.OrderInfo.VisitPerson.Person person = new PushOrderRequestBody.OrderInfo.VisitPerson.Person();
+ person.setCredentials(visitor.getEditCredentials());
+ person.setName(visitor.getEditName());
+ persons.add(person);
+ }
+ visitPerson.setPerson(persons);
+ oiRequest.setVisitPerson(visitPerson);
+ }
+ oiRequest.setVisitDate(pushOrder.getVisitDate());
+ oiRequest.setPartnerOrderId(pushOrder.getCytOrderCode());
+ requestBody.setOrderInfo(oiRequest);
+ return commonApi(accountParam,requestBody,OtaUtils.PUSH_ORDER);
+ }
+
+ public static Result applyOrderRefundByUser(RefundOrderParam refundOrder,AccountParam accountParam) {
+ ApplyOrderRefundByUserRequestBody requestBody=new ApplyOrderRefundByUserRequestBody();
+ ApplyOrderRefundByUserRequestBody.OrderInfo oiRequest = new ApplyOrderRefundByUserRequestBody.OrderInfo();
+ //畅游通订单号
+ oiRequest.setPartnerOrderId(refundOrder.getCytOrderCode());
+ //退款流水号
+ oiRequest.setRefundSeq(refundOrder.getRefundSeq());
+ //订单金额
+ //oiRequest.setOrderPrice(Long.toString(convertCents(refundOrder.getOrderMoney())));
+ //订单票数
+ //oiRequest.setOrderQuantity(Integer.toString(refundOrder.getOrderQuantity()));
+ //退款票数
+ oiRequest.setRefundQuantity(Integer.toString(refundOrder.getRefundQuantity()));
+ //订单退订金额,转换成分
+ oiRequest.setOrderRefundPrice(Long.toString(convertCents(refundOrder.getRefundMoney())));
+ //退订手续费,转换成分
+ //oiRequest.setOrderRefundCharge(Long.toString(convertCents(refundOrder.getRefundCharge())));
+
+ if (CollectionUtils.isNotEmpty(refundOrder.getVisitPersons())) {
+ ApplyOrderRefundByUserRequestBody.OrderInfo.VisitPerson visitPerson = new ApplyOrderRefundByUserRequestBody.OrderInfo.VisitPerson();
+ List persons = Lists.newArrayList();
+ for (Person visitor : refundOrder.getVisitPersons()) {
+ ApplyOrderRefundByUserRequestBody.OrderInfo.VisitPerson.Person person = new ApplyOrderRefundByUserRequestBody.OrderInfo.VisitPerson.Person();
+ person.setName(visitor.getName());
+ CredentialsType ct=CredentialsType.typeOf(visitor.getCredentialsType());
+ person.setCredentialsType(OtaUtils.credentialsTypeStringMap.get(ct));
+ person.setCredentials(visitor.getCredentials());
+ person.setVoucherCode(visitor.getVoucher());
+ persons.add(person);
+ }
+ visitPerson.setPerson(persons);
+ oiRequest.setVisitPerson(visitPerson);
+ }
+
+ String refundReason = refundOrder.getRefundReason();
+ if (org.apache.commons.lang3.StringUtils.isBlank(refundReason)) {
+ refundReason = "客人想退款";
+ }
+ oiRequest.setRefundExplain(refundReason);
+ requestBody.setOrderInfo(oiRequest);
+ return commonApi(accountParam,requestBody,OtaUtils.APPLY_ORDER_REFUND_BY_USER);
+ }
+
+ public static Result queryPois(AccountParam accountParam){
+ return commonApi(accountParam,new RequestBody(),OtaUtils.GET_AVAILABLE_PRODUCT);
+ }
+
+ public static Result queryStockAndTsds(GetStockParam param,AccountParam accountParam){
+ GetStockProductInfoRequestBody requestBody=new GetStockProductInfoRequestBody();
+ requestBody.setResourceId(param.getResourceId());
+ requestBody.setStartDate(param.getStartDate());
+ requestBody.setEndDate(param.getEndDate());
+ return commonApi(accountParam,requestBody,OtaUtils.GET_STOCK_PRODUCT_INFO);
+ }
+
+ /*public static Result querySeatList(GetSeatParam param,AccountParam accountParam){
+ GetSeatInfoRequestBody requestBody=new GetSeatInfoRequestBody();
+ requestBody.setTimeOfBookId(param.getTimeOfBookId());
+ return commonApi(accountParam,requestBody,OtaUtils.GET_SEAT_INFO);
+ }*/
+
+ public static Result sendOrderEticket(SendOrderEticketParam param,AccountParam accountParam){
+ SendOrderEticketRequestBody requestBody=new SendOrderEticketRequestBody();
+ requestBody.getOrderInfo().setPartnerOrderId(param.getCytOrderCode());
+ requestBody.getOrderInfo().setPhoneNumber(param.getPhone());
+ return commonApi(accountParam,requestBody,OtaUtils.SEND_ORDER_ETICKET);
+ }
+
+ public static Result queryProducts(GetProductParam productParam, AccountParam accountParam) {
+ GetProductByOTARequestBody requestBody=new GetProductByOTARequestBody();
+ if(StringUtils.isNotBlank(productParam.getResourceId())){
+ requestBody.setResourceId(productParam.getResourceId());
+ requestBody.setCurrentPage("");
+ requestBody.setPageSize("");
+ }else{
+ requestBody.setCurrentPage(productParam.getCurrentPage().toString());
+ requestBody.setPageSize(productParam.getPageSize().toString());
+ }
+ return commonApi(accountParam,requestBody,OtaUtils.GET_PRODUCT_BY_OTA);
+ }
+
+ public static Result createPaymentOrder(CreateOrderParam orderParam, AccountParam accountParam) {
+ CreatePaymentOrderRequestBody requestBody = new CreatePaymentOrderRequestBody();
+ CreatePaymentOrderRequestBody.OrderInfo requestOrderInfo = new CreatePaymentOrderRequestBody.OrderInfo();
+ requestOrderInfo.setOrderId(orderParam.getOrderCode());
+ //产品信息
+ CreatePaymentOrderRequestBody.OrderInfo.Product product = new CreatePaymentOrderRequestBody.OrderInfo.Product();
+ product.setResourceId(orderParam.getProduct().getProductNo()); //产品id
+ product.setVisitDate(formatDate(DateUtils.convertDate(orderParam.getVisitDate(),DateUtils.DATE_PATTERN))); //游玩日期
+ if(StringUtils.isNotBlank(orderParam.getLeaveDate())) {
+ product.setLeaveDate(formatDate(DateUtils.convertDate(orderParam.getLeaveDate(), DateUtils.DATE_PATTERN)));//住店日期
+ }
+ product.setSellPrice(Long.toString(convertCents(orderParam.getProduct().getSellPrice())));//产品售卖价格,转换为分
+ product.setTimeOfBookId(Long.toString(orderParam.getProduct().getTimeOfBookId()));
+ //product.setSeatIds(orderParam.getProduct().getSeatIds());
+ requestOrderInfo.setProduct(product);
+ //取票人信息
+ CreatePaymentOrderRequestBody.OrderInfo.ContactPerson contactPerson = new CreatePaymentOrderRequestBody.OrderInfo.ContactPerson();
+ contactPerson.setName(orderParam.getContactPerson().getName());
+ contactPerson.setMobile(orderParam.getContactPerson().getPhone());
+ contactPerson.setCredentials(orderParam.getContactPerson().getCredentials());
+ CredentialsType credentialsType=CredentialsType.typeOf(orderParam.getContactPerson().getCredentialsType());
+ contactPerson.setCredentialsType(OtaUtils.credentialsTypeStringMap.get(credentialsType)
+ );
+ requestOrderInfo.setContactPerson(contactPerson);
+ //游玩人信息
+ CreatePaymentOrderRequestBody.OrderInfo.VisitPerson visitPerson = new CreatePaymentOrderRequestBody.OrderInfo.VisitPerson();
+ List persons = Lists.newArrayList();
+ if (CollectionUtils.isNotEmpty(orderParam.getVisitPersons())) {
+ for (Person p : orderParam.getVisitPersons()) {
+ CreatePaymentOrderRequestBody.OrderInfo.VisitPerson.Person person = new CreatePaymentOrderRequestBody.OrderInfo.VisitPerson.Person();
+ person.setName(p.getName());
+ person.setMobile(p.getPhone());
+ person.setCredentials(p.getCredentials());
+ CredentialsType ct=CredentialsType.typeOf(p.getCredentialsType());
+ person.setCredentialsType(OtaUtils.credentialsTypeStringMap.get(ct)
+ );
+ persons.add(person);
+ }
+ }
+ visitPerson.setPerson(persons);
+ requestOrderInfo.setVisitPerson(visitPerson);
+ OrderStatusType orderStatusType=OrderStatusType.ORDER_RESERVE_SUCCESSFUL;
+ //订单票数
+ requestOrderInfo.setOrderQuantity(orderParam.getOrderQuantity().toString());
+ //订单金额
+ requestOrderInfo.setOrderPrice(Long.toString(convertCents(orderParam.getOrderPrice())));
+ //只支持预付
+ requestOrderInfo.setOrderStatus(OtaUtils.prepayOrderStatusTypeStringMap.get(orderStatusType));
+ requestBody.setOrderInfo(requestOrderInfo);
+ return commonApi(accountParam,requestBody,OtaUtils.CREATE_PAY_ORDER);
+ }
+
+ //
+ public static Result commonApi(AccountParam account,RequestBody requestBody,String method){
+ ApiMethodType methodType=ApiMethodType.typeOf(method);
+
+ CommonReturn data=new CommonReturn();
+
+ Date dateTimeStart = new Date(); //开始时间
+ data.setRequestTime(DateUtils.formatDate(dateTimeStart,DateUtils.DATETIME_PATTERN));
+
+ Map mapRequest = parseRequest(requestBody,account.getDistributorName(), account.getIdentity(), account.getKey(),account.getSecurityType());
+
+ //定义请求的报文
+ String requestXml = (String) mapRequest.get(OtaUtils.REQUEST_XML);
+ JSONObject requestJson = (JSONObject) mapRequest.get(OtaUtils.REQUEST_JSON_OBJECT);
+
+ Result resultSend = sendData(account.getUrl(), method,
+ requestJson.toJSONString());
+ if (!resultSend.isSuccess()) {
+ return Result.error(resultSend.getThrowable(), resultSend.getDescription());
+ }
+
+ String response = resultSend.getData();
+
+ //返回报文
+ String responseXml = getResponseXml(response,account.getKey(),account.getSecurityType());
+
+ Date dateTimeEnd = new Date(); //结束时间
+ data.setResponseTime(DateUtils.formatDate(dateTimeEnd,DateUtils.DATETIME_PATTERN));
+ //记录日志
+ data.setRequestJson(requestJson);
+ data.setRequestXml(requestXml);
+
+ JSONObject res=JSONObject.parseObject(response);
+ if(res.get("xml")!=null){
+ res.remove("xml");
+ }
+ data.setResponseJson(res);
+ data.setResponseXml(responseXml);
+ data.setInterfaceType("整合营销接口");
+ data.setInterfaceMethod(method);
+ data.setDescription(methodType.getName());
+ //解析报文
+ Map map = xmlToBean(responseXml, new ResponseHeader(), new CreateOrderResponseBody());
+ ResponseHeader header = (ResponseHeader) map.get(OtaUtils.DOM_HEADER);
+ // 判定header返回值,是否为1000
+ String codeResponse = header.getCode();
+ if (!OtaUtils.SUCCESS_CODE.equals(codeResponse)) {
+ data.setApiStatus(false);
+ }else{
+ data.setApiStatus(true);
+ if(method.equals(ApiMethodType.CREATE_ORDER.getType())) {
+ CreateOrderResponseBody responseBody = (CreateOrderResponseBody) map.get(OtaUtils.DOM_BODY);
+ data.setCytOrderCode(responseBody.getOrderInfo().getPartnerorderId());
+ }else if(method.equals(ApiMethodType.CREATE_PAY_ORDER)){
+ CreatePaymentOrderResponseBody responseBody = (CreatePaymentOrderResponseBody) map.get(OtaUtils.DOM_BODY);
+ data.setCytOrderCode(responseBody.getOrderInfo().getPartnerorderId());
+ }
+ }
+ return Result.success(data);
+ }
+
+ //
+ public static String formatDate(Date date) {
+ return DateFormatUtils.format(date, DateUtils.DATE_PATTERN);
+ }
+
+ public static long convertCents(double money) {
+ return BigDecimalUtils.amplify2long(money, 2);
+ }
+
+ /*
+ 发送数据
+ */
+ private static Result sendData(String url, String method, String requestJson) {
+ String response = "";
+ HttpClient client = new HttpClient();
+
+ //Platfrom_sign platfrom_sign=Platfrom_sign.typeOf(platfrom_sign_type);
+ //PostMethod postMethod = new UTF8PostMethod(platfrom_sign.getName() + ota_api_method_url);
+ PostMethod postMethod = new UTF8PostMethod(url);
+
+ postMethod.addParameter("Connection", "Keep-Alive");
+ postMethod.addParameter("Charset", OtaUtils.ENCODE_UTF8);
+ postMethod.addParameter("Content-Type", "application/x-www-form-urlencoded");
+ postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 30000);//30S超时
+
+ List params = new ArrayList();
+ params.add(new Parameter("method", method));
+ params.add(new Parameter("requestParam", requestJson));
+ postMethod.setRequestBody(buildNameValuePair(params));
+
+ try {
+ /*java.net.URL endpointURL = new java.net.URL(url);
+ CytDataServiceSoapBindingStub ssl = new CytDataServiceSoapBindingStub(endpointURL, null);
+ ssl.setMaintainSession(true);
+ String responseString = ssl.doCYTRequest(method, requestJson);
+ return Result.success(responseString);*/
+ int statusCode = client.executeMethod(postMethod);
+ if (statusCode == HttpStatus.SC_OK) {
+ response = postMethod.getResponseBodyAsString();
+ } else {
+ throw new IOException("Http Post Exception Of Code: " + statusCode);
+ }
+ postMethod.releaseConnection();
+ client = null;
+
+ return Result.success(response);
+ }
+ //PMS数据发送异常,将异常信息返回
+ catch (Exception e) {
+ if(e instanceof SocketTimeoutException){
+ return Result.error(e, "畅游通网络超时,请稍后再试.");
+ }
+ return Result.error(e, "自测平台请求["+method+"]接口发生异常."+e.getMessage());
+ }
+ }
+
+ private static org.apache.commons.httpclient.NameValuePair[] buildNameValuePair(List list) {
+ int length = list.size();
+ org.apache.commons.httpclient.NameValuePair[] pais = new org.apache.commons.httpclient.NameValuePair[length];
+ for (int i = 0; i < length; i++) {
+ Parameter param = list.get(i);
+ pais[i] = new org.apache.commons.httpclient.NameValuePair(param.getName(), param.getValue());
+ }
+ return pais;
+ }
+
+ /*
+ * 对象转XML
+ */
+ private static String beanToXml(RequestBody requestBody, String distributorName, String supplierIdentity) {
+ try {
+ RequestHeader header = new RequestHeader();
+ header.setApplication("tour.ectrip.com");
+ header.setProcessor("DataExchangeProcessor");
+ header.setVersion("1.0.0");
+ header.setCreateUser(distributorName);
+ header.setCreateTime(DateUtils.formatDate(new Date(),DateUtils.DATETIME_PATTERN));
+ header.setSupplierIdentity(supplierIdentity);
+
+ return XmlParseUtil.beanToXML(requestBody, header, OtaUtils.ECTRIP);
+ } catch (Throwable throwable) {
+ throw new BusinessException(throwable);
+ }
+ }
+
+ /*
+ * XML转成map对象
+ */
+ private static Map xmlToBean(String xml, Object head, Object body) {
+ try {
+ return XmlParseUtil.xmlToBean(xml, head, body);
+ }
+ //XML解析异常
+ catch (Exception e) {
+ e.printStackTrace();
+ throw new BusinessException(e);
+ }
+ }
+
+ public static Map parseRequest(RequestBody requestBody,
+ String distributorName,
+ String supplierIdentity,
+ String key,
+ String securityType) {
+ String requestXml = beanToXml(requestBody, distributorName, supplierIdentity);
+
+ JSONObject requestJSON = new JSONObject();
+
+ if(StringUtils.isBlank(securityType)){
+ //默认MD5加密
+ securityType = OtaUtils.SECURITY_MD5;
+ }
+ securityType = securityType.toUpperCase();
+
+ String requestData;
+ if(securityType.equals(OtaUtils.SECURITY_MD5)){
+ String responseSigned = EncryptUtil.MD5Hex(key + requestXml).toUpperCase();
+ requestJSON.put(OtaUtils.JSON_SIGNED, responseSigned);
+
+ byte[] requestByte = requestXml.getBytes(Charset.forName(OtaUtils.ENCODE_UTF8));
+ requestData = Base64Utils.encode(requestByte);
+ }else{
+ String iv = SecurityTools.generatorIv();
+ if(securityType.equals(OtaUtils.SECURITY_AES_CBC)){
+ requestData = AesTools.encryptCBC(requestXml,key,iv);
+ }else if(securityType.equals(OtaUtils.SECURITY_SM4_CBC)){
+ requestData = SM4Tools.encryptCBC(requestXml,key,iv);
+ }else{
+ throw new BusinessException("不支持的加密算法!");
+ }
+ requestJSON.put(OtaUtils.JSON_IV, iv);
+ requestJSON.put(OtaUtils.JSON_CREATEUSER,distributorName);
+ }
+
+ requestJSON.put(OtaUtils.JSON_DATA, requestData);
+ requestJSON.put(OtaUtils.JSON_SECURITY_TYPE,securityType);
+
+ //返回结果
+ Map mapResult = Maps.newHashMap();
+ mapResult.put(OtaUtils.REQUEST_XML, requestXml);
+ mapResult.put(OtaUtils.REQUEST_JSON_OBJECT, requestJSON);
+ return mapResult;
+ }
+
+ /*
+ 获得返回的xml字符串
+ */
+ private static String getResponseXml(String responseJson, String key,String securityType) {
+ JSONObject jsonObject = JSONObject.parseObject(responseJson);
+ Object dataObject = jsonObject.get(OtaUtils.JSON_DATA);
+ Object signedObject = jsonObject.get(OtaUtils.JSON_SIGNED);
+ Object ivObject = jsonObject.get(OtaUtils.JSON_IV);
+ //String securityType = jsonObject.get(OtaUtils.JSON_SECURITY_TYPE).toString();
+
+ if(dataObject == null && dataObject.toString().equals("")){
+ throw new BusinessException("data返回为空");
+ }
+
+ String data = dataObject.toString();
+ String xml;
+ if (OtaUtils.SECURITY_MD5.equals(securityType)) {
+ if(signedObject == null || signedObject.toString().equals("")){
+ throw new BusinessException("signed返回为空");
+ }
+ String signed = signedObject.toString();
+
+ String signedEncryption = EncryptUtil.MD5Hex(key + data).toUpperCase();
+ if (!signedEncryption.equalsIgnoreCase(signed)) {
+ throw new BusinessException("签证验证不通过");
+ }
+
+ try {
+ byte[] xmlByte = Base64Utils.decode(data);
+ xml = new String(xmlByte,OtaUtils.ENCODE_UTF8);
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ throw new BusinessException("Base64解密失败");
+ }
+
+ } else {
+ if(ivObject == null || ivObject.toString().equals("")){
+ throw new BusinessException("iv返回为空");
+ }
+ String iv = ivObject.toString();
+
+ if (securityType.equals(OtaUtils.SECURITY_AES_CBC)) {
+ xml = AesTools.decryptCBC(data,key,iv);
+ }else if (securityType.equals(OtaUtils.SECURITY_SM4_CBC)) {
+ xml = SM4Tools.decryptCBC(data,key,iv);
+ }else {
+ throw new BusinessException("不支持的加密算法");
+ }
+ }
+ return xml;
+ }
+
+
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/config/DruidConfig.java a/zhyx-api/src/main/java/com/ectrip/cyt/config/DruidConfig.java
new file mode 100644
index 0000000..e6ee2cc
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/config/DruidConfig.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.sql.DataSource;
+
+/**
+ * Created by chenxinhao on 2018/11/2.
+ */
+@Configuration
+public class DruidConfig {
+
+ @Bean
+ @ConfigurationProperties(prefix = "spring.datasource")
+ public DataSource druidDataSource() {
+ return new DruidDataSource();
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/config/Swagger2.java a/zhyx-api/src/main/java/com/ectrip/cyt/config/Swagger2.java
new file mode 100644
index 0000000..9a82326
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/config/Swagger2.java
@@ -0,0 +1,51 @@
+package com.ectrip.cyt.config;
+
+import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+/**
+ * Created by chenxinhao on 2019-10-16.
+ */
+@Configuration
+@EnableSwagger2
+@EnableSwaggerBootstrapUI
+public class Swagger2 {
+
+ /**
+ * 通过 createRestApi函数来构建一个DocketBean
+ * 函数名,可以随意命名,喜欢什么命名就什么命名
+ */
+ @Bean
+ public Docket createRestApi() {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .apiInfo(apiInfo())//调用apiInfo方法,创建一个ApiInfo实例,里面是展示在文档页面信息内容
+ .select()
+ //控制暴露出去的路径下的实例
+ //如果某个接口不想暴露,可以使用以下注解
+ //@ApiIgnore 这样,该接口就不会暴露在 swagger2 的页面下
+ .apis(RequestHandlerSelectors.basePackage("com.ectrip.cyt.controller"))
+ .paths(PathSelectors.any())
+ .build();
+ }
+
+ //构建 api文档的详细信息函数
+ private ApiInfo apiInfo() {
+ return new ApiInfoBuilder()
+ //页面标题
+ .title("整合营销-自测接口平台")
+ //条款地址
+ .termsOfServiceUrl("http://despairyoke.github.io/")
+ .version("1.0")
+ //描述
+ .description("接口文档")
+ .build();
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/controller/TdosApiController.java a/zhyx-api/src/main/java/com/ectrip/cyt/controller/TdosApiController.java
new file mode 100644
index 0000000..9bb4698
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/controller/TdosApiController.java
@@ -0,0 +1,565 @@
+package com.ectrip.cyt.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ectrip.cyt.client.cyt.service.TdosApiClient;
+import com.ectrip.cyt.model.*;
+import com.ectrip.cyt.model.Request;
+import com.ectrip.cyt.model.param.AccountParam;
+import com.ectrip.cyt.model.param.CreateOrderParam;
+import com.ectrip.cyt.model.param.ProductParam;
+import com.ectrip.cyt.model.pojo.Person;
+import com.ectrip.cyt.model.result.AjaxResult;
+import com.ectrip.cyt.model.result.Result;
+import com.ectrip.cyt.model.rt.CommonReturn;
+import com.ectrip.cyt.model.rt.PushOrderRequest;
+import com.ectrip.cyt.utils.DateUtils;
+import com.ectrip.cyt.utils.UUIDTools;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.validation.Valid;
+import java.util.*;
+
+@RestController
+@RequestMapping(value = "/tdos")
+@Api(value = "整合营销OTA自测接口",tags = {"整合营销OTA自测接口"})
+public class TdosApiController {
+ @ApiOperation(value = "心跳检测接口",notes = "心跳检测接口")
+ @ResponseBody
+ @PostMapping("/heartBeat")
+ public AjaxResult heartBeat(@RequestBody @Valid Request request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ Result result=TdosApiClient.heartBeat(request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+
+ @ApiOperation(value = "查询用户余额",notes = "获取产品接口")
+ @ResponseBody
+ @PostMapping("/getBalance")
+ public AjaxResult getBalance(@RequestBody @Valid Request request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ //判断方法类型
+ StringBuffer errorMsg=new StringBuffer();
+ if(StringUtils.isNotBlank(errorMsg)){
+ ajaxResult.setDescription(errorMsg.toString());
+ return ajaxResult;
+ }
+ Result result=TdosApiClient.getBalance(request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+ @ApiOperation(value = "获取景区接口",notes = "获取景区接口")
+ @ResponseBody
+ @PostMapping("/queryPois")
+ public AjaxResult queryPois(@RequestBody @Valid Request request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ Result result=TdosApiClient.queryPois(request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+
+ @ApiOperation(value = "获取产品接口",notes = "获取产品接口")
+ @ResponseBody
+ @PostMapping("/queryProducts")
+ public AjaxResult queryProducts(@RequestBody @Valid GetProductRequest request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ //判断方法类型
+ StringBuffer errorMsg=new StringBuffer();
+ if(StringUtils.isBlank(request.getQueryProducts().getResourceId())){
+ if(request.getQueryProducts().getCurrentPage()==null){
+ errorMsg.append("查询所有可分销商品时,未设置页数");
+ }else{
+ if(request.getQueryProducts().getCurrentPage()<=0){
+ errorMsg.append("查询所有可分销商品时,设置页数必须大于0");
+ }
+ }
+ if(request.getQueryProducts().getPageSize()==null){
+ errorMsg.append("查询所有可分销商品时,未设置每页条数");
+ }else{
+ if(request.getQueryProducts().getPageSize()>5||request.getQueryProducts().getPageSize()<=0){
+ errorMsg.append("查询所有可分销商品时,每页条数范围在[1,5]内");
+ }
+ }
+ }
+
+ if(StringUtils.isNotBlank(errorMsg)){
+ ajaxResult.setDescription(errorMsg.toString());
+ return ajaxResult;
+ }
+
+ /*if(request.getQueryProducts().getMethod().equals("SINGLE")){
+ if(!StringUtils.isBlank(request.getQueryProducts().getResourceId())){
+ ajaxResult.setDescription("获取产品方法为单个时, 产品ID必填");
+ return ajaxResult;
+ }
+ }*/
+ Result result=TdosApiClient.queryProducts(request.getQueryProducts(),request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+ @ApiOperation(value = "获取库存接口",notes = "获取库存接口")
+ @ResponseBody
+ @PostMapping("/queryStock")
+ public AjaxResult queryStock(@RequestBody @Valid GetStockRequest request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ Result result=TdosApiClient.queryStockAndTsds(request.getGetStockParam(),request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+ /*@ApiOperation(value = "获取座位接口",notes = "获取座位接口")
+ @ResponseBody
+ @PostMapping("/querySeatList")
+ public AjaxResult querySeatList(@RequestBody @Valid GetSeatRequset request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ Result result=TdosApiClient.querySeatList(request.getGetSeatParam(),request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }*/
+
+ @ApiOperation(value = "重发短信接口",notes = "重发短信接口")
+ @ResponseBody
+ @PostMapping("/sendOrderEticket")
+ public AjaxResult sendOrderEticket(@RequestBody @Valid SendOrderEticketRequest request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ Result result=TdosApiClient.sendOrderEticket(request.getParam(),request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+ @ApiOperation(value = "下单接口",notes = "下单接口")
+ @ResponseBody
+ @PostMapping("/createOrder")
+ public AjaxResult createOrder(@RequestBody @Valid CreateOrderRequest request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ Result result=TdosApiClient.createOrder(request.getCreateOrder(),request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+
+ @ApiOperation(value = "查询订单接口",notes = "查询订单接口")
+ @ResponseBody
+ @PostMapping("/queryOrder")
+ public AjaxResult queryOrder(@RequestBody @Valid QueryOrderRequest request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ //判断订单状态
+ Result result=TdosApiClient.queryOrder(request.getQueryOrder(),request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+
+ @ApiOperation(value = "改签接口",notes = "改签接口")
+ @ResponseBody
+ @PostMapping("/pushOrder")
+ public AjaxResult pushOrder(@RequestBody @Valid PushOrderRequest request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ Result result=TdosApiClient.pushOrder(request.getPushOrder(),request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+ @ApiOperation(value = "申请退订接口",notes = "申请退订接口")
+ @ResponseBody
+ @PostMapping("/refundOrder")
+ public AjaxResult refundOrder(@RequestBody @Valid RefundOrderRequest request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ Result result=TdosApiClient.applyOrderRefundByUser(request.getRefundOrder(),request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+ @ApiOperation(value = "取消订单接口",notes = "取消订单接口")
+ @ResponseBody
+ @PostMapping("/cancelOrder")
+ public AjaxResult cancelOrder(@RequestBody @Valid CancelOrderRequest request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ Result result=TdosApiClient.cancelOrder(request.getCancelOrder(),request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+ @ApiOperation(value = "支付接口",notes = "支付接口")
+ @ResponseBody
+ @PostMapping("/payOrder")
+ public AjaxResult payOrder(@RequestBody @Valid PayOrderRequest request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ Result result=TdosApiClient.payOrder(request.getPayOrder(),request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+ @ApiOperation(value = "下单前校验接口",notes = "下单前校验接口")
+ @ResponseBody
+ @PostMapping("/checkOrder")
+ public AjaxResult checkOrder(@RequestBody @Valid CreateOrderRequest request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ Result result=TdosApiClient.checkOrder(request.getCreateOrder(),request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+ @ApiOperation(value = "下单并支付接口",notes = "下单并支付接口")
+ @ResponseBody
+ @PostMapping("/createPaymentOrder")
+ public AjaxResult createPaymentOrder(@RequestBody @Valid CreateOrderRequest request, BindingResult results) {
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+ try {
+ if (results.hasErrors()) {
+ ajaxResult.setDescription("请求参数错误:"+results.getFieldError().getDefaultMessage());
+ return ajaxResult;
+ }
+ Result result=TdosApiClient.createPaymentOrder(request.getCreateOrder(),request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ ajaxResult.setSuccess(true);
+ ajaxResult.setDescription("接口联通成功");
+ ajaxResult.setData(commonReturn);
+ }else{
+ ajaxResult.setDescription("接口联通失败,错误原因:"+result.getDescription());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ ajaxResult.setDescription("接口联通异常!"+e.getMessage());
+ }
+ return ajaxResult;
+ }
+
+ @ApiOperation(value = "批量下单测试接口",notes = "批量下单测试接口")
+ @ResponseBody
+ @PostMapping("/testCreateOrders")
+ public Object testCreateOrders() {
+ JSONObject returnJson=new JSONObject();
+ String otaCode = UUIDTools.get16UUID();
+ returnJson.put("ota订单号",otaCode);
+ CreateOrderRequest request=new CreateOrderRequest();
+ CreateOrderParam createOrder=new CreateOrderParam();
+ createOrder.setOrderCode(otaCode);
+ createOrder.setVisitDate(DateUtils.formatDate(DateUtils.today()));
+
+ ProductParam productParam=new ProductParam();
+ productParam.setProductNo("21");
+ productParam.setSellPrice(0.01);
+ createOrder.setProduct(productParam);
+
+ createOrder.setOrderQuantity(2);
+ createOrder.setOrderPrice(createOrder.getOrderQuantity()*productParam.getSellPrice());
+
+ Person person=new Person();
+ person.setName("测试A");
+ person.setCredentialsType(0);
+ person.setCredentials("445222199608083833");
+ person.setPhone("15622980172");
+
+ Person personB=new Person();
+ personB.setName("测试B");
+ personB.setCredentialsType(0);
+ personB.setCredentials("110101199003070476");
+ personB.setPhone("15622980172");
+
+ List persons=new ArrayList();
+ persons.add(person);
+ persons.add(personB);
+
+ createOrder.setContactPerson(person);
+ createOrder.setVisitPersons(persons);
+
+ AccountParam account=new AccountParam();
+ account.setDistributorName("binFxs");
+ account.setIdentity("");
+ account.setKey("12345678");
+ account.setUrl("http://127.0.0.1:8080/service_/distributor_.do");
+
+ request.setCreateOrder(createOrder);
+ request.setAccount(account);
+
+
+ AjaxResult ajaxResult = new AjaxResult();
+ ajaxResult.setSuccess(false);
+
+ String cytCode="";
+
+ try {
+ Result result=TdosApiClient.createPaymentOrder(request.getCreateOrder(),request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ cytCode= commonReturn.getCytOrderCode();
+ returnJson.put("畅游通订单号",cytCode);
+ returnJson.put("下单",commonReturn);
+ }else{
+ return "下单接口联通失败,错误原因:"+result.getDescription();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return"下单接口联通异常!"+e.getMessage();
+ }
+
+ /*PayOrderParam payOrderParam=new PayOrderParam();
+ payOrderParam.setCytOrderCode(cytCode);
+ payOrderParam.setOrderPrice(createOrder.getOrderQuantity()*productParam.getSellPrice());
+
+ try {
+ Result result=TdosApiClient.payOrder(payOrderParam,request.getAccount());
+ if(result.isSuccess()) {
+ CommonReturn commonReturn=(CommonReturn)result.getData();
+ returnJson.put("支付",commonReturn);
+ }else{
+ return "支付接口联通失败,错误原因:"+result.getDescription();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return"支付接口联通异常!"+e.getMessage();
+ }*/
+ return returnJson;
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/exception/BusinessException.java a/zhyx-api/src/main/java/com/ectrip/cyt/exception/BusinessException.java
new file mode 100644
index 0000000..57cdf57
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/exception/BusinessException.java
@@ -0,0 +1,67 @@
+package com.ectrip.cyt.exception;
+
+/**
+ * 业务异常信息
+ *
+ * @author changjiang.tang Date:8/18/15 Time:5:33 PM
+ */
+public class BusinessException extends RuntimeException{
+
+ private static final long serialVersionUID = 6401507641198338287L;
+
+ /** 异常代码 */
+ protected String code;
+
+ /** 异常消息 */
+ protected String message;
+
+ @Override
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public BusinessException() {
+ super();
+ }
+
+ public BusinessException(String message) {
+ this("99999", message);
+ }
+
+ public BusinessException(String code, String message) {
+ super(message);
+ this.code = code;
+ this.message = message;
+ }
+
+ public BusinessException(String message, Throwable cause) {
+ this("99999", message, cause);
+ }
+
+ public BusinessException(String code, String message, Throwable cause) {
+ super(message, cause);
+ this.code = code;
+ this.message = message;
+ }
+
+ public BusinessException(Throwable cause) {
+ super(cause);
+ }
+
+ @Override
+ public String toString() {
+ return "错误代码: " + code + ", 描述: " + message;
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/CancelOrderRequest.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/CancelOrderRequest.java
new file mode 100644
index 0000000..2ab3503
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/CancelOrderRequest.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.model;
+
+import com.ectrip.cyt.model.param.CancelOrderParam;
+import com.ectrip.cyt.model.param.PayOrderParam;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "取消订单参数")
+public class CancelOrderRequest extends Request {
+ @Valid
+ @NotNull(message = "必须传入取消订单参数")
+ private CancelOrderParam cancelOrder;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/CreateOrderRequest.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/CreateOrderRequest.java
new file mode 100644
index 0000000..1680c0e
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/CreateOrderRequest.java
@@ -0,0 +1,20 @@
+package com.ectrip.cyt.model;
+
+import com.ectrip.cyt.model.param.CreateOrderParam;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "下单请求参数")
+public class CreateOrderRequest extends Request {
+ @Valid
+ @NotNull(message = "必须传入下单参数")
+ private CreateOrderParam createOrder;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/GetProductRequest.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/GetProductRequest.java
new file mode 100644
index 0000000..8c3f2e9
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/GetProductRequest.java
@@ -0,0 +1,20 @@
+package com.ectrip.cyt.model;
+
+import com.ectrip.cyt.model.param.GetProductParam;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "获取产品参数")
+public class GetProductRequest extends Request {
+ @Valid
+ @NotNull(message = "必须传入获取产品参数")
+ private GetProductParam queryProducts;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/GetSeatRequset.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/GetSeatRequset.java
new file mode 100644
index 0000000..784e5e6
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/GetSeatRequset.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.model;
+
+import com.ectrip.cyt.model.param.GetSeatParam;
+import com.ectrip.cyt.model.param.GetStockParam;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "获取座位参数")
+public class GetSeatRequset extends Request {
+ @Valid
+ @NotNull(message = "必须传入座位参数")
+ private GetSeatParam getSeatParam;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/GetStockRequest.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/GetStockRequest.java
new file mode 100644
index 0000000..f0726a2
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/GetStockRequest.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.model;
+
+import com.ectrip.cyt.model.param.GetProductParam;
+import com.ectrip.cyt.model.param.GetStockParam;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "获取产品参数")
+public class GetStockRequest extends Request {
+ @Valid
+ @NotNull(message = "必须传入获取产品参数")
+ private GetStockParam getStockParam;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/PayOrderRequest.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/PayOrderRequest.java
new file mode 100644
index 0000000..b790f94
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/PayOrderRequest.java
@@ -0,0 +1,20 @@
+package com.ectrip.cyt.model;
+
+import com.ectrip.cyt.model.param.PayOrderParam;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "支付订单参数")
+public class PayOrderRequest extends Request {
+ @Valid
+ @NotNull(message = "必须传入支付订单参数")
+ private PayOrderParam payOrder;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/QueryOrderRequest.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/QueryOrderRequest.java
new file mode 100644
index 0000000..8e0ee22
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/QueryOrderRequest.java
@@ -0,0 +1,20 @@
+package com.ectrip.cyt.model;
+
+import com.ectrip.cyt.model.param.QueryOrderParam;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "查询订单参数")
+public class QueryOrderRequest extends Request {
+ @Valid
+ @NotNull(message = "必须传入查询订单参数")
+ private QueryOrderParam queryOrder;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/RefundOrderRequest.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/RefundOrderRequest.java
new file mode 100644
index 0000000..bee7155
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/RefundOrderRequest.java
@@ -0,0 +1,20 @@
+package com.ectrip.cyt.model;
+
+import com.ectrip.cyt.model.param.RefundOrderParam;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "退订请求参数")
+public class RefundOrderRequest extends Request {
+ @Valid
+ @NotNull(message = "必须传入退订参数")
+ private RefundOrderParam refundOrder;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/Request.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/Request.java
new file mode 100644
index 0000000..c722a29
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/Request.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.model;
+
+import com.ectrip.cyt.model.param.AccountParam;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+//通用请求参数
+public class Request {
+ @Valid
+ @NotNull(message = "必须传入分销用户信息")
+ private AccountParam account;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/SendOrderEticketRequest.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/SendOrderEticketRequest.java
new file mode 100644
index 0000000..16c4dad
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/SendOrderEticketRequest.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.model;
+
+import com.ectrip.cyt.model.param.CreateOrderParam;
+import com.ectrip.cyt.model.param.SendOrderEticketParam;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "重发短信")
+public class SendOrderEticketRequest extends Request {
+ @Valid
+ @NotNull(message = "必须传入下单参数")
+ private SendOrderEticketParam param;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/enums/ApiMethodType.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/enums/ApiMethodType.java
new file mode 100644
index 0000000..cbe94bb
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/enums/ApiMethodType.java
@@ -0,0 +1,60 @@
+package com.ectrip.cyt.model.enums;
+
+public enum ApiMethodType {
+ HEART_BEAT("heartBeat","同步订单"),
+ get_Balance("getBalance","获取余额"),
+ PUSH_ORDER("pushOrder","同步订单"),
+ CHECK_ORDER("checkOrder","下单前校验"),
+ GET_ORDER_BY_OTA("getOrderByOTA","查询订单信息"),
+ APPLY_ORDER_REFUND_BY_USER( "applyOrderRefundByUser","申请退订"),
+ CREATE_ORDER ("createOrder","创建订单"),
+ CREATE_PAY_ORDER ("createPaymentOrder","创建订单"),
+ PAY_ORDER ("payOrder","支付订单"),
+ CANCEL_ORDER ("cancelOrder","取消订单"),
+ GET_PRODUCT_BY_OTA("getProductByOTA","获取产品"),
+ GET_AVAILABLE_PRODUCT("getAvailableProduct","获取POI"),
+ GET_STOCK_PRODUCT_INFO("getStockProductInfo","获取库存"),
+ GET_SEAT_INFO("getSeatInfo","获取库存"),
+ SEND_ORDER_ETICKET("sendOrderEticket","重发短信");
+
+ /**
+ * 类型
+ */
+ private String type;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 构造函数,枚举类型构造函数只能私有
+ */
+ ApiMethodType(String type, String name) {
+ this.type = type;
+ this.name = name;
+ }
+
+ public String getType() {
+ return this.type;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ /**
+ * 根据类型获取枚举对象
+ *
+ * @param type 枚举类型值
+ * @return 枚举对象
+ */
+ public static ApiMethodType typeOf(String type) {
+ for(ApiMethodType apiMethodType : values()) {
+ if(apiMethodType.getType().equals(type)) {
+ return apiMethodType;
+ }
+ }
+ throw new IllegalArgumentException("Invalid ApiMethodType type: " + type);
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/enums/CredentialsType.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/enums/CredentialsType.java
new file mode 100644
index 0000000..33a2754
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/enums/CredentialsType.java
@@ -0,0 +1,121 @@
+package com.ectrip.cyt.model.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 游客证件类型枚举:(身份证 : ID_CARD,护照 : HUZHAO,台胞证 : TAIBAO ,港澳通行证: GANGAO 其它:OTHER)
+ * Created by weiyu.huang on 2015/9/2.
+ */
+public enum CredentialsType {
+
+ /**
+ * 身份证
+ */
+ ID_CARD(0, "身份证"),
+
+ /**
+ * 护照
+ */
+ HUZHAO(1, "护照 PASSPORT"),
+
+ /**
+ * 军官证
+ */
+ OFFICER(2, "军官证"),
+
+ /**
+ * 台胞证
+ */
+ TAIBAO(3, "台胞证"),
+
+ /**
+ * 港澳通行证
+ */
+ GANGAO(4, "港澳通行证"),
+
+ /**
+ * 其它
+ */
+ OTHER(5, "其它"),
+
+ /**
+ * 皈依证
+ */
+ GUIYI(6, "皈依证"),
+
+ /**
+ * 学生证
+ */
+ STUDENT(7,"学生证");
+
+ /**
+ * 类型
+ */
+ private int type;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 构造函数,枚举类型构造函数只能私有
+ */
+ CredentialsType(int type, String name) {
+ this.type = type;
+ this.name = name;
+ }
+
+ public int getType() {
+ return this.type;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ /**
+ * 根据类型获取枚举对象
+ *
+ * @param type 枚举类型值
+ * @return 枚举对象
+ */
+ public static CredentialsType typeOf(int type) {
+ for(CredentialsType credentialsType : values()) {
+ if(credentialsType.getType() == type) {
+ return credentialsType;
+ }
+ }
+ throw new IllegalArgumentException("Invalid CredentialsType type: " + type);
+ }
+
+ /**
+ * 枚举转成 Map
+ * @return Map
+ */
+ public static Map convertToMap() {
+ Map map = new HashMap();
+ for(CredentialsType credentialsType : values()) {
+ map.put(credentialsType.getType(), credentialsType.getName());
+ }
+ return map;
+ }
+
+ /**
+ * 判断是否存在该证件类型值
+ * @param type 证件类型值
+ * @return true/false
+ */
+ public static boolean contains(int type) {
+ return CredentialsType.convertToMap().containsKey(type);
+ }
+
+ @Override
+ public String toString() {
+ return "CredentialsType{" +
+ "type=" + type +
+ ", name='" + name + '\'' +
+ '}';
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/enums/OrderStatusType.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/enums/OrderStatusType.java
new file mode 100644
index 0000000..4545a7e
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/enums/OrderStatusType.java
@@ -0,0 +1,129 @@
+package com.ectrip.cyt.model.enums;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 订单状态
+ * @author Jiehao Ling, date:9/26/2015, time:11:24 AM
+ */
+public enum OrderStatusType {
+
+ /** 订单状态 */
+ ORDER_NOT_PAYED_YET ( 0 , "未付款"),
+
+ ORDER_CANCELED ( 1 , "已取消"),
+
+ ORDER_WAITING_CONFIRM ( 2 , "待确认"),
+
+ ORDER_RESERVE_FAILED ( 3 , "预订失败"),
+
+ ORDER_RESERVE_SUCCESSFUL ( 4 , "预订成功"),
+
+ ORDER_CONSUMED(5, "已消费"),
+
+ ORDER_REFUNDED(6, "已退款"),
+
+ ORDER_CONSUME_CONFIRM(7,"消费待确认"),
+
+ ORDER_REFUNDED_CONFIRM(8,"退订待确认"),
+
+ ORDER_RESERVE_CONFIRM(9,"订单待确认"),
+
+ ORDER_OVERDUE(10,"订单过期"),
+
+ ORDER_EXCEPTION(11,"订单异常"),
+
+ ORDER_REFUNDED_WAIT_AUDIT(12,"退订待审核"),
+
+ LMM_ORDER_PUSH(13,"预定成功待推送"),//驴妈妈酒店订单异步用
+
+ ORDER_NOT_PUSH_SUCCESS(14,"订单未推送成功或已全退");//驴妈妈酒店订单异步用
+
+ OrderStatusType(int statusIndex, String statusName) {
+ this.statusIndex = statusIndex;
+ this.statusName = statusName;
+ }
+
+ /** 状态下标 */
+ private int statusIndex;
+
+ /** 状态名称 */
+ private String statusName;
+
+ public int getStatusIndex() {
+ return statusIndex;
+ }
+
+ public void setStatusIndex(int statusIndex) {
+ this.statusIndex = statusIndex;
+ }
+
+ public String getStatusName() {
+ return statusName;
+ }
+
+ public void setStatusName(String statusName) {
+ this.statusName = statusName;
+ }
+
+ /**
+ * 根据订单状态ID类型获取枚举对象
+ * @param orderStatusIndex 支付类型值
+ * @return 支付类型枚举
+ */
+ public static OrderStatusType typeOf(int orderStatusIndex){
+ OrderStatusType[] OrderStatusTypes = OrderStatusType.values();
+ for(OrderStatusType OrderStatusType: OrderStatusTypes){
+ if(OrderStatusType.getStatusIndex() == orderStatusIndex){
+ return OrderStatusType;
+ }
+ }
+ throw new IllegalArgumentException("非法订单类型: " + orderStatusIndex);
+ }
+
+ /**
+ * 枚举转Map
+ * @return Map
+ */
+ public static Map convertToMap(){
+ Map OrderStatusTypeMap = new HashMap();
+ OrderStatusType[] OrderStatusTypes = OrderStatusType.values();
+ for(OrderStatusType OrderStatusType : OrderStatusTypes){
+ OrderStatusTypeMap.put(OrderStatusType.getStatusIndex(),OrderStatusType.getStatusName());
+ }
+ return OrderStatusTypeMap;
+ }
+
+ /**
+ * 枚举转换成JSON字符串
+ * @author yongkang.liao
+ * @date 2015-12-03
+ * @return String
+ */
+ public static String convertJson(){
+ OrderStatusType[] orderStatusTypes = OrderStatusType.values();
+ StringBuffer sb = new StringBuffer();
+ sb.append("{\"orderStatus\":[");
+ for(int i = 0; i < orderStatusTypes.length; i++){
+ OrderStatusType orderStatusType = orderStatusTypes[i];
+ sb.append("{\"type\":" + orderStatusType.getStatusIndex() + ",\"name\":\""
+ + orderStatusType.getStatusName() + "\"}");
+ if((i + 1) != orderStatusTypes.length){
+ sb.append(",");
+ }
+ }
+ sb.append("]}");
+ return sb.toString();
+ }
+
+ @Override
+ public String toString() {
+ return "OrderStatusType{" +
+ "statusIndex=" + statusIndex +
+ ", statusName='" + statusName + '\'' +
+ '}';
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/enums/PaymentWay.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/enums/PaymentWay.java
new file mode 100644
index 0000000..42fb498
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/enums/PaymentWay.java
@@ -0,0 +1,77 @@
+package com.ectrip.cyt.model.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 支付类型枚举
+ * @author wenqiang.luo date:15-9-3
+ */
+public enum PaymentWay {
+
+ /**
+ * 在线支付
+ */
+ PRE_PAY(0, "预付"),
+
+ /**
+ * 现场支付
+ */
+ CASH_PAY(1, "到付");
+
+ /** 支付类型 */
+ private int way;
+
+ /** 支付名称 */
+ private String name;
+
+ PaymentWay(int way, String name) {
+ this.way = way;
+ this.name = name;
+ }
+
+ public int getWay() {
+ return way;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * 根据支付类型获取枚举对象
+ * @param type 支付类型值
+ * @return 支付类型枚举
+ */
+ public static PaymentWay wayOf(int type) {
+ //枚举结果
+ PaymentWay[] paymentWays = PaymentWay.values();
+ for (PaymentWay paymentWay : paymentWays) {
+ if (paymentWay.getWay() == type) {
+ return paymentWay;
+ }
+ }
+ throw new IllegalArgumentException("Invalid PaymentType way: " + type);
+ }
+
+ /**
+ * 枚举转Map
+ * @return Map
+ */
+ public static Map convertToMap() {
+ Map integerStringMap = new HashMap();
+ PaymentWay[] paymentWays = PaymentWay.values();
+ for (PaymentWay paymentWay : paymentWays) {
+ integerStringMap.put(paymentWay.getWay(), paymentWay.getName());
+ }
+ return integerStringMap;
+ }
+
+ @Override
+ public String toString() {
+ return "PaymentWay{" +
+ "way=" + way +
+ ", name='" + name + '\'' +
+ '}';
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/param/AccountParam.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/AccountParam.java
new file mode 100644
index 0000000..9c1c6b4
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/AccountParam.java
@@ -0,0 +1,52 @@
+package com.ectrip.cyt.model.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "用户信息")
+public class AccountParam {
+ @NotBlank(message = "加密算法必填")
+ @ApiModelProperty(value = "OTA接口加密算法:0:MD5 1:AES/CBC 2:SM4/CBC", required = false)
+ private String securityType;
+
+ //分销商名称
+ @NotBlank(message = "分销商名不能为空")
+ @ApiModelProperty(value = "分销商名", required = true)
+ private String distributorName;
+
+ //分销商密钥
+ @NotBlank(message = "分销商密钥不能为空")
+ @ApiModelProperty(value = "分销商密钥", required = true)
+ private String key;
+
+ //供应商标识
+ @ApiModelProperty(value = "供应商标识", required = false)
+ private String identity;
+
+ @NotBlank(message = "平台接口地址不能为空")
+ @ApiModelProperty(value = "平台接口地址", required = true)
+ private String url;
+
+ //接口地址
+ //@Range(min=0,max=2,message ="对接平台范围不在[0,2]內")
+ /*@ApiModelProperty(value = "对接平台 {" +
+ "0:tour.12301cn.cn(整合营销测试版)," +
+ "1:jy.12301cn.cn(整合营销公共版)," +
+ "2:www.12301cn.cn(整合营销独立版)" +
+ "3:59.59.7.54:8081(瘦西湖)" +
+ "4:cyt.51yzly.com(土楼)" +
+ "10:cyt.jingqu.cn/tdos(整合营销3.0)" +
+ "11:w.qdocti.com/tdos(青岛3.0)" +
+ "99:本地环境(8038端口)" +
+ "}", required = true)
+ private Integer platfrom_sign;*/
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/param/CancelOrderParam.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/CancelOrderParam.java
new file mode 100644
index 0000000..a34a29e
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/CancelOrderParam.java
@@ -0,0 +1,22 @@
+package com.ectrip.cyt.model.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "取消订单参数")
+public class CancelOrderParam {
+ @ApiModelProperty(value = "畅游通订单号", required = true)
+ private String cytOrderCode;
+
+ @ApiModelProperty(value = "OTA订单号", required = true)
+ private String otaOrderCode;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/param/CreateOrderParam.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/CreateOrderParam.java
new file mode 100644
index 0000000..7982e75
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/CreateOrderParam.java
@@ -0,0 +1,124 @@
+package com.ectrip.cyt.model.param;
+
+import com.ectrip.cyt.model.pojo.Person;
+import com.ectrip.cyt.utils.DateUtils;
+import com.ectrip.cyt.utils.TestOrderUtils;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.Valid;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "创建订单参数")
+public class CreateOrderParam {
+ //ota订单号
+ //@NotBlank(message = "OTA订单号不能为空")
+ @ApiModelProperty(value = "OTA订单号", required = true)
+ private String orderCode;
+
+ public String getOrderCode() {
+ if(StringUtils.isBlank(orderCode)){
+ orderCode = TestOrderUtils.get16UUID();
+ }
+ return orderCode;
+ }
+
+ //游览日期
+ //@NotBlank(message = "游览日期不能为空")
+ //@Pattern(regexp = "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)",message = "游览日期格式不对")
+ @ApiModelProperty(value = "住店日期", required = true)
+ private String visitDate;
+
+ @ApiModelProperty(value = "离店日期", required = true)
+ private String leaveDate;
+
+ public String getVisitDate() {
+ if(StringUtils.isBlank(visitDate)){
+ visitDate = DateUtils.formatDate(new Date(),DateUtils.DATE_PATTERN);
+ }
+ return visitDate;
+ }
+
+ //票数
+ @Min(value = 1,message = "订单数量必须大于或等于1")
+ @ApiModelProperty(value = "订单数量", required = true)
+ private Integer orderQuantity;
+
+ //金额
+ @Min(value = 0,message = "订单金额必须大于或等于0")
+ @ApiModelProperty(value = "订单金额", required = true)
+ private Double orderPrice;
+
+ @ApiModelProperty(value = "一票几人 默认一票一人", required = false)
+ private Integer ticketPersonNum;
+
+ @Valid
+ @NotNull(message = "必须传入产品信息")
+ @ApiModelProperty(value = "产品信息", required = true)
+ //产品信息
+ private ProductParam product;
+
+ //@NotNull(message = "必须传入联系人信息 至少保留手机号")
+ @ApiModelProperty(value = "联系人信息", required = true)
+ //联系人
+ private Person contactPerson;
+
+ @ApiModelProperty(value = "游客信息", required = false)
+ //游客信息
+ private List visitPersons;
+
+ public Person getContactPerson() {
+ if(contactPerson == null){
+ contactPerson = new Person();
+ }
+ if(StringUtils.isBlank(contactPerson.getName())){
+ contactPerson.setName("测试联系人");
+ }
+ if(contactPerson.getCredentialsType() == null){
+ contactPerson.setCredentialsType(0);
+ }
+ if(StringUtils.isBlank(contactPerson.getPhone())){
+ contactPerson.setPhone(TestOrderUtils.createMobile(2));
+ }
+ if(StringUtils.isBlank(contactPerson.getCredentials())){
+ contactPerson.setCredentials(TestOrderUtils.getIdNo(false));
+ }
+ return contactPerson;
+ }
+
+ public List getVisitPersons() {
+ if(CollectionUtils.isEmpty(visitPersons)){
+ visitPersons = new ArrayList<>();
+ visitPersons.add(contactPerson);
+
+ if(ticketPersonNum == null){
+ ticketPersonNum = 1;
+ }
+
+ if((ticketPersonNum * orderQuantity) >1) {
+ for (int i = 0; i < ((ticketPersonNum * orderQuantity) - 1); i++) {
+ Person p = new Person();
+ p.setName("测试游客" + (i+1));
+ p.setCredentialsType(0);
+ p.setPhone(TestOrderUtils.createMobile(2));
+ p.setCredentials(TestOrderUtils.getIdNo(false));
+ visitPersons.add(p);
+ }
+ }
+ }
+ return visitPersons;
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/param/GetProductParam.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/GetProductParam.java
new file mode 100644
index 0000000..702966a
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/GetProductParam.java
@@ -0,0 +1,36 @@
+package com.ectrip.cyt.model.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.validator.constraints.Range;
+import org.omg.PortableInterceptor.INACTIVE;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "获取产品参数")
+public class GetProductParam {
+ //获取产品方法 全部ALL 单个SINGLE
+ //@NotBlank(message = "获取产品方法不能为空")
+ /*@ApiModelProperty(value = "获取产品方法 全部ALL 单个SINGLE", required = true)
+ private String method;*/
+
+ //分页数
+ //@Min(value = 1,message = "分页数必须大于或等于1")
+ @ApiModelProperty(value = "分页数", required = true)
+ private Integer currentPage;
+ //分页大小
+
+ //@Range(min=1,max=5,message ="分页大小不在[1,5]內")
+ @ApiModelProperty(value = "分页大小(最大5条)", required = true)
+ private Integer pageSize;
+ //产品ID
+ @ApiModelProperty(value = "产品ID 获取产品方法为SINGLE必填", required = false)
+ private String resourceId;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/param/GetSeatParam.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/GetSeatParam.java
new file mode 100644
index 0000000..4e2082c
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/GetSeatParam.java
@@ -0,0 +1,19 @@
+package com.ectrip.cyt.model.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "获取座位参数")
+public class GetSeatParam {
+ @NotBlank(message = "分时ID不能为空")
+ @ApiModelProperty(value = "分时ID", required = false)
+ private String timeOfBookId;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/param/GetStockParam.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/GetStockParam.java
new file mode 100644
index 0000000..f814f3b
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/GetStockParam.java
@@ -0,0 +1,23 @@
+package com.ectrip.cyt.model.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "获取库存参数")
+public class GetStockParam {
+ @ApiModelProperty(value = "开始日期", required = false)
+ private String startDate;
+ @ApiModelProperty(value = "截至日期", required = false)
+ private String endDate;
+ @NotBlank(message = "资源ID不能为空")
+ @ApiModelProperty(value = "资源ID", required = false)
+ private String resourceId;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/param/PayOrderParam.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/PayOrderParam.java
new file mode 100644
index 0000000..d8899df
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/PayOrderParam.java
@@ -0,0 +1,28 @@
+package com.ectrip.cyt.model.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.Min;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "支付订单参数")
+public class PayOrderParam {
+ @ApiModelProperty(value = "畅游通订单号", required = true)
+ private String cytOrderCode;
+
+ @ApiModelProperty(value = "OTA订单号", required = true)
+ private String otaOrderCode;
+
+ //金额
+ @Min(value = 0,message = "支付金额必须大于或等于0")
+ @ApiModelProperty(value = "支付金额", required = true)
+ private Double orderPrice;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/param/ProductParam.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/ProductParam.java
new file mode 100644
index 0000000..7ee57c3
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/ProductParam.java
@@ -0,0 +1,31 @@
+package com.ectrip.cyt.model.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "产品信息")
+public class ProductParam {
+ @NotBlank(message = "产品编号不能为空")
+ @ApiModelProperty(value = "产品编号", required = true)
+ private String productNo;
+
+ @Min(value = 0,message = "产品结算价必须大于或等于0")
+ @ApiModelProperty(value = "产品结算价", required = true)
+ private Double sellPrice;
+
+ @ApiModelProperty(value = "分时ID", required = true)
+ private Integer timeOfBookId;
+
+ @ApiModelProperty(value = "座位集合", required = true)
+ private String seatIds;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/param/PushOrderParam.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/PushOrderParam.java
new file mode 100644
index 0000000..85dff43
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/PushOrderParam.java
@@ -0,0 +1,35 @@
+package com.ectrip.cyt.model.param;
+
+import com.ectrip.cyt.model.pojo.EditPerson;
+import com.ectrip.cyt.model.pojo.Person;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "改签订单参数")
+public class PushOrderParam {
+ @NotBlank(message = "畅游通订单号不能为空")
+ @ApiModelProperty(value = "畅游通订单号", required = true)
+ private String cytOrderCode;
+
+ @NotBlank(message = "改签日期不能为空")
+ @Pattern(regexp = "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)",message = "改签日期格式不对")
+ @ApiModelProperty(value = "改签日期", required = true)
+ private String visitDate;
+
+ @ApiModelProperty(value = "改签联系人信息", required = false)
+ //联系人
+ private Person contactPerson;
+
+ @ApiModelProperty(value = "改签游客信息", required = false)
+ //游客信息
+ private List visitPersons;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/param/QueryOrderParam.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/QueryOrderParam.java
new file mode 100644
index 0000000..9bffb89
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/QueryOrderParam.java
@@ -0,0 +1,23 @@
+package com.ectrip.cyt.model.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "查询订单参数")
+public class QueryOrderParam {
+ @ApiModelProperty(value = "畅游通订单号(二选一 优先级)", required = false)
+ private String cytOrderCode;
+
+ @ApiModelProperty(value = "OTA订单号(二选一)", required = false)
+ private String orderCode;
+
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/param/RefundOrderParam.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/RefundOrderParam.java
new file mode 100644
index 0000000..3d3ee1d
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/RefundOrderParam.java
@@ -0,0 +1,40 @@
+package com.ectrip.cyt.model.param;
+
+import com.ectrip.cyt.model.pojo.Person;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "退订订单参数")
+public class RefundOrderParam {
+ @NotBlank(message = "畅游通订单号不能为空")
+ @ApiModelProperty(value = "畅游通订单号", required = true)
+ private String cytOrderCode;
+
+ @NotBlank(message = "退订流水号不能为空")
+ @ApiModelProperty(value = "退订流水号", required = true)
+ private String refundSeq;
+
+ @Min(value = 0,message = "退订金额必须大于或等于0")
+ @ApiModelProperty(value = "退订金额", required = true)
+ private Double refundMoney;
+
+ @Min(value = 1,message = "退订数量必须大于或等于1")
+ @ApiModelProperty(value = "退订数量", required = true)
+ private Integer refundQuantity;
+
+ @ApiModelProperty(value = "退订游客信息", required = false)
+ private List visitPersons;
+
+ @ApiModelProperty(value = "退订原因", required = false)
+ private String refundReason;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/param/SendOrderEticketParam.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/SendOrderEticketParam.java
new file mode 100644
index 0000000..cd3abaa
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/param/SendOrderEticketParam.java
@@ -0,0 +1,29 @@
+package com.ectrip.cyt.model.param;
+
+import com.ectrip.cyt.model.pojo.Person;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.Valid;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "重发短信参数")
+public class SendOrderEticketParam {
+ @NotBlank(message = "畅游通订单号不能为空")
+ @ApiModelProperty(value = "畅游通订单号", required = true)
+ private String cytOrderCode;
+ /** 游客电话 */
+ @ApiModelProperty(value = "电话号", required = false)
+ private String phone;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/pojo/EditPerson.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/pojo/EditPerson.java
new file mode 100644
index 0000000..5bbcd6c
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/pojo/EditPerson.java
@@ -0,0 +1,31 @@
+package com.ectrip.cyt.model.pojo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "联系人/游客信息")
+public class EditPerson implements Serializable {
+ /** 游客证件号码 */
+ @ApiModelProperty(value = "原游客证件号码", required = true)
+ private String credentials;
+
+ /** 游客姓名 */
+ @ApiModelProperty(value = "修改后的游客姓名", required = false)
+ private String editName;
+
+ /** 游客电话 */
+ @ApiModelProperty(value = "修改后的游客电话 ", required = false)
+ private String editPhone;
+
+ /** 游客证件号码 */
+ @ApiModelProperty(value = "修改后的游客证件号码", required = false)
+ private String editCredentials;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/pojo/Person.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/pojo/Person.java
new file mode 100644
index 0000000..c118110
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/pojo/Person.java
@@ -0,0 +1,34 @@
+package com.ectrip.cyt.model.pojo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "联系人/游客信息")
+public class Person implements Serializable {
+ /** 游客姓名 */
+ @ApiModelProperty(value = "游客姓名", required = false)
+ private String name;
+
+ /** 游客电话 */
+ @ApiModelProperty(value = "游客电话 ", required = false)
+ private String phone;
+
+ /** 游客证件类型 */
+ @ApiModelProperty(value = "游客证件类型(0身份证,1护照,2军官证,3台胞证,4港澳通行证,5其它,6皈依证,7学生证)", required = false)
+ private Integer credentialsType;
+
+ /** 游客证件号码 */
+ @ApiModelProperty(value = "游客证件号码", required = false)
+ private String credentials;
+
+ @ApiModelProperty(value = "票码", required = false)
+ private String voucher;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/result/AjaxResult.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/result/AjaxResult.java
new file mode 100644
index 0000000..a89bcf3
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/result/AjaxResult.java
@@ -0,0 +1,96 @@
+package com.ectrip.cyt.model.result;
+
+import com.ectrip.cyt.model.rt.CommonReturn;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * 处理ajax返回的结果信息
+ * @author wenqiang.luo date:15-9-7
+ */
+public class AjaxResult implements Serializable {
+
+ private static final long serialVersionUID = 5837409853066710012L;
+
+ private static final String SUCCESS_DESCRIPTION = "success";
+
+ /** ajax 交互结果 */
+ @ApiModelProperty(value = "请求状态", required = true)
+ private boolean success;
+
+ /** 交互描述信息 */
+ @ApiModelProperty(value = "请求描述", required = true)
+ private String description;
+
+ /** 交互数据 */
+ @ApiModelProperty(value = "接口返回信息", required = true)
+ private CommonReturn data;
+
+
+ //construct////////////////////////////////////////////////////////////////
+
+ public AjaxResult() {
+ this(false);
+ }
+
+ public AjaxResult(boolean success) {
+ this(success, SUCCESS_DESCRIPTION);
+ }
+
+ public AjaxResult(boolean success, String description) {
+ this(success, description, null);
+ }
+
+ public AjaxResult(boolean success, String description, CommonReturn data) {
+ this.success = success;
+ this.description = description;
+ this.data = data;
+ }
+
+ //get and set//////////////////////////////////////////////////////////////
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public CommonReturn getData() {
+ return data;
+ }
+
+ public void setData(CommonReturn data) {
+ this.data = data;
+ }
+
+
+ //public static method/////////////////////////////////////////////////////
+
+ public static AjaxResult error(String description) {
+ return new AjaxResult(false, description);
+ }
+
+ public static AjaxResult success(String description) {
+ return new AjaxResult(true, description);
+ }
+
+ public static AjaxResult success(CommonReturn data) {
+ return new AjaxResult(true, null, data);
+ }
+
+ public static AjaxResult success(String description, CommonReturn data) {
+ return new AjaxResult(true, description, data);
+ }
+
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/result/Result.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/result/Result.java
new file mode 100644
index 0000000..b1b2b92
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/result/Result.java
@@ -0,0 +1,101 @@
+package com.ectrip.cyt.model.result;
+
+import java.io.Serializable;
+
+/**
+ * @author wenqiang.luo date:16/7/28
+ */
+public class Result implements Serializable {
+
+ private static final long serialVersionUID = -2336951543661721293L;
+
+ /** 交互成功标识 */
+ private boolean success;
+
+ /** 交互异常信息 */
+ private Throwable throwable;
+
+ /** 结果描述 */
+ private String description;
+
+ /** 附加信息 */
+ private T data;
+
+ //constructor//////////////////////////////////////////////////////////////
+
+ private Result(boolean success, Throwable throwable, String description, T data) {
+ this.success = success;
+ this.description = description;
+ this.throwable = throwable;
+ this.data = data;
+ }
+
+ //public static method/////////////////////////////////////////////////////
+
+ public static Result success() {
+ return Result.success(null);
+ }
+
+ public static Result success(T data) {
+ return Result.success("SUCCESS", data);
+ }
+
+ public static Result success(String description, T data) {
+ return new Result(true, null, description, data);
+ }
+
+ public static Result error(String description) {
+ return new Result(false, null, description, null);
+ }
+
+ public static Result error(String description,T data) {
+ return new Result(false, null, description, data);
+ }
+
+ public static Result error(Throwable throwable, String description) {
+ return new Result(false, throwable, description, null);
+ }
+
+ //get and set//////////////////////////////////////////////////////////////
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public Throwable getThrowable() {
+ return throwable;
+ }
+
+ public void setThrowable(Throwable throwable) {
+ this.throwable = throwable;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public T getData() {
+ return data;
+ }
+
+ public void setData(T data) {
+ this.data = data;
+ }
+
+ @Override
+ public String toString() {
+ return "Result{" +
+ "success=" + success +
+ ", description='" + description + '\'' +
+ ", data=" + data +
+ '}';
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/result/ResultStatus.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/result/ResultStatus.java
new file mode 100644
index 0000000..57517b3
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/result/ResultStatus.java
@@ -0,0 +1,39 @@
+package com.ectrip.cyt.model.result;
+
+/**
+ * @Author:zhangkangdi
+ * @Description:
+ * @Date: Create in 2020/3/31 14:15
+ * @Modified By:
+ */
+public enum ResultStatus {
+
+ SUCCESS("200","请求成功"),
+ FAIL("201","请求失败"),
+ ERROR("400","请求异常");
+
+ private String code;
+
+ private String message;
+
+ ResultStatus(String code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
\ No newline at end of file
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/rt/CommonReturn.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/rt/CommonReturn.java
new file mode 100644
index 0000000..e20977f
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/rt/CommonReturn.java
@@ -0,0 +1,45 @@
+package com.ectrip.cyt.model.rt;
+
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CommonReturn {
+ //请求参数XML
+ @ApiModelProperty(value = "请求参数XML", required = true)
+ private String requestXml;
+ //返回参数XML
+ @ApiModelProperty(value = "返回参数XML", required = true)
+ private String responseXml;
+ //最外层返回参数
+ @ApiModelProperty(value = "返回参数json", required = true)
+ private JSONObject requestJson;
+ //最外层请求参数
+ @ApiModelProperty(value = "请求参数json", required = true)
+ private JSONObject responseJson;
+ //请求时间
+ @ApiModelProperty(value = "请求时间", required = true)
+ private String requestTime;
+ //返回时间
+ @ApiModelProperty(value = "返回时间", required = true)
+ private String responseTime;
+ //接口类型
+ @ApiModelProperty(value = "接口类型", required = true)
+ private String interfaceType;
+ //接口方法
+ @ApiModelProperty(value = "接口方法", required = true)
+ private String interfaceMethod;
+ //描述
+ @ApiModelProperty(value = "接口描述", required = true)
+ private String description;
+ //是否下单成功
+ @ApiModelProperty(value = "接口交互结果", required = true)
+ private Boolean apiStatus;
+ //畅游通单号
+ private String cytOrderCode;
+}
\ No newline at end of file
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/model/rt/PushOrderRequest.java a/zhyx-api/src/main/java/com/ectrip/cyt/model/rt/PushOrderRequest.java
new file mode 100644
index 0000000..7115355
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/model/rt/PushOrderRequest.java
@@ -0,0 +1,21 @@
+package com.ectrip.cyt.model.rt;
+
+import com.ectrip.cyt.model.Request;
+import com.ectrip.cyt.model.param.PushOrderParam;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(description = "同步订单参数")
+public class PushOrderRequest extends Request {
+ @Valid
+ @NotNull(message = "必须传入同步订单参数")
+ private PushOrderParam pushOrder;
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/AesTools.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/AesTools.java
new file mode 100644
index 0000000..3bd897e
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/AesTools.java
@@ -0,0 +1,84 @@
+package com.ectrip.cyt.utils;
+
+import com.ectrip.cyt.exception.BusinessException;
+import org.apache.commons.codec.binary.Base64;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.NoSuchAlgorithmException;
+import java.security.Security;
+
+/**
+ * @author chenys
+ * @date 2022-12-06
+ */
+public class AesTools {
+ private static final String ALGORITHM = "AES";
+
+ /**
+ * AES算法
+ */
+ private static final String AES_CBC_PCK_ALG = "AES/CBC/PKCS5Padding";
+
+ // 128-32位16进制;256-64位16进制
+ public static final int DEFAULT_KEY_SIZE = 256;
+
+
+ public static String generateKey() throws Exception {
+ KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM);
+ //下面调用方法的参数决定了生成密钥的长度,可以修改为128, 192或256
+ kg.init(DEFAULT_KEY_SIZE);
+ SecretKey sk = kg.generateKey();
+ byte[] b = sk.getEncoded();
+ String secret = Base64.encodeBase64String(b);
+ return secret;
+ }
+
+
+
+ /**
+ * AES加密
+ *
+ * @param content
+ * @param aesKey
+ * @return
+ * @throws Exception
+ */
+ public static String encryptCBC(String content, String aesKey,String ivBase64){
+ try {
+ Cipher cipher = Cipher.getInstance(AES_CBC_PCK_ALG);
+ IvParameterSpec ivParameterSpec = new IvParameterSpec(SecurityTools.decodeIv(ivBase64));
+ cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(Base64.decodeBase64(aesKey.getBytes()), ALGORITHM), ivParameterSpec);
+ byte[] encryptBytes = cipher.doFinal(content.getBytes(OtaUtils.ENCODE_UTF8));
+ return new String(Base64.encodeBase64(encryptBytes));
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new BusinessException("AES加密失败");
+ }
+ }
+
+ /**
+ * AES解密
+ *
+ * @param content
+ * @param key
+ * @return
+ * @throws Exception
+ */
+ public static String decryptCBC(String content, String key,String ivBase64) {
+ try {
+ Cipher cipher = Cipher.getInstance(AES_CBC_PCK_ALG);
+ IvParameterSpec ivParameterSpec = new IvParameterSpec(SecurityTools.decodeIv(ivBase64));
+ cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(Base64.decodeBase64(key.getBytes()), ALGORITHM), ivParameterSpec);
+ byte[] cleanBytes = cipher.doFinal(Base64.decodeBase64(content.getBytes()));
+ return new String(cleanBytes, OtaUtils.ENCODE_UTF8);
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new BusinessException("AES解密失败");
+ }
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/Base64Utils.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/Base64Utils.java
new file mode 100644
index 0000000..93f058c
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/Base64Utils.java
@@ -0,0 +1,323 @@
+package com.ectrip.cyt.utils;
+
+/**
+ * 将二制数据流转换成BASE64位码。
+ * @author huhaopeng
+ */
+public class Base64Utils {
+ static private final int BASELENGTH = 255;
+ static private final int LOOKUPLENGTH = 64;
+ static private final int TWENTYFOURBITGROUP = 24;
+ static private final int EIGHTBIT = 8;
+ static private final int SIXTEENBIT = 16;
+ static private final int SIXBIT = 6;
+ static private final int FOURBYTE = 4;
+ static private final int SIGN = -128;
+ static private final char PAD = '=';
+ static private final boolean fDebug = false;
+ static final private byte[] base64Alphabet = new byte[BASELENGTH];
+ static final private char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH];
+
+ static {
+
+ for (int i = 0; i < BASELENGTH; i++) {
+ base64Alphabet[i] = -1;
+ }
+ for (int i = 'Z'; i >= 'A'; i--) {
+ base64Alphabet[i] = (byte) (i - 'A');
+ }
+ for (int i = 'z'; i >= 'a'; i--) {
+ base64Alphabet[i] = (byte) (i - 'a' + 26);
+ }
+
+ for (int i = '9'; i >= '0'; i--) {
+ base64Alphabet[i] = (byte) (i - '0' + 52);
+ }
+
+ base64Alphabet['+'] = 62;
+ base64Alphabet['/'] = 63;
+
+ for (int i = 0; i <= 25; i++)
+ lookUpBase64Alphabet[i] = (char) ('A' + i);
+
+ for (int i = 26, j = 0; i <= 51; i++, j++)
+ lookUpBase64Alphabet[i] = (char) ('a' + j);
+
+ for (int i = 52, j = 0; i <= 61; i++, j++)
+ lookUpBase64Alphabet[i] = (char) ('0' + j);
+ lookUpBase64Alphabet[62] = (char) '+';
+ lookUpBase64Alphabet[63] = (char) '/';
+
+ }
+
+ protected static boolean isWhiteSpace(char octect) {
+ return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9);
+ }
+
+ protected static boolean isPad(char octect) {
+ return (octect == PAD);
+ }
+
+ protected static boolean isData(char octect) {
+ return (base64Alphabet[octect] != -1);
+ }
+
+ protected static boolean isBase64(char octect) {
+ return (isWhiteSpace(octect) || isPad(octect) || isData(octect));
+ }
+
+ /**
+ * Encodes hex octects into Base64
+ *
+ * @param binaryData Array containing binaryData
+ * @return Encoded Base64 array
+ */
+ public static String encode(byte[] binaryData) {
+
+ if (binaryData == null)
+ return null;
+
+ int lengthDataBits = binaryData.length * EIGHTBIT;
+ if (lengthDataBits == 0) {
+ return "";
+ }
+
+ int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP;
+ int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP;
+ int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1
+ : numberTriplets;
+ int numberLines = (numberQuartet - 1) / 19 + 1;
+ char encodedData[] = null;
+
+ encodedData = new char[numberQuartet * 4 + numberLines];
+
+ byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
+
+ int encodedIndex = 0;
+ int dataIndex = 0;
+ int i = 0;
+ if (fDebug) {
+ //InfoLog.print("number of triplets = " + numberTriplets);
+ }
+
+ for (int line = 0; line < numberLines - 1; line++) {
+ for (int quartet = 0; quartet < 19; quartet++) {
+ b1 = binaryData[dataIndex++];
+ b2 = binaryData[dataIndex++];
+ b3 = binaryData[dataIndex++];
+
+ if (fDebug) {
+ //InfoLog.print("b1= " + b1 + ", b2= " + b2 + ", b3= "+ b3);
+ }
+
+ l = (byte) (b2 & 0x0f);
+ k = (byte) (b1 & 0x03);
+
+ byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
+ : (byte) ((b1) >> 2 ^ 0xc0);
+
+ byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)
+ : (byte) ((b2) >> 4 ^ 0xf0);
+ byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6)
+ : (byte) ((b3) >> 6 ^ 0xfc);
+
+ if (fDebug) {
+ //InfoLog.print("val2 = " + val2);
+ //InfoLog.print("k4 = " + (k << 4));
+ //InfoLog.print("vak = " + (val2 | (k << 4)));
+ }
+
+ encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
+ encodedData[encodedIndex++] = lookUpBase64Alphabet[val2
+ | (k << 4)];
+ encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2)
+ | val3];
+ encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f];
+
+ i++;
+ }
+ encodedData[encodedIndex++] = 0xa;
+ }
+
+ for (; i < numberTriplets; i++) {
+ b1 = binaryData[dataIndex++];
+ b2 = binaryData[dataIndex++];
+ b3 = binaryData[dataIndex++];
+
+ if (fDebug) {
+ //InfoLog.print("b1= " + b1 + ", b2= " + b2 + ", b3= " + b3);
+ }
+
+ l = (byte) (b2 & 0x0f);
+ k = (byte) (b1 & 0x03);
+
+ byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
+ : (byte) ((b1) >> 2 ^ 0xc0);
+
+ byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)
+ : (byte) ((b2) >> 4 ^ 0xf0);
+ byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6)
+ : (byte) ((b3) >> 6 ^ 0xfc);
+
+ if (fDebug) {
+ //InfoLog.print("val2 = " + val2);
+ //InfoLog.print("k4 = " + (k << 4));
+ //InfoLog.print("vak = " + (val2 | (k << 4)));
+ }
+
+ encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
+ encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
+ encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3];
+ encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f];
+ }
+
+ // form integral number of 6-bit groups
+ if (fewerThan24bits == EIGHTBIT) {
+ b1 = binaryData[dataIndex];
+ k = (byte) (b1 & 0x03);
+ if (fDebug) {
+ //InfoLog.print("b1=" + b1);
+ //InfoLog.print("b1<<2 = " + (b1 >> 2));
+ }
+ byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
+ : (byte) ((b1) >> 2 ^ 0xc0);
+ encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
+ encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4];
+ encodedData[encodedIndex++] = PAD;
+ encodedData[encodedIndex++] = PAD;
+ } else if (fewerThan24bits == SIXTEENBIT) {
+ b1 = binaryData[dataIndex];
+ b2 = binaryData[dataIndex + 1];
+ l = (byte) (b2 & 0x0f);
+ k = (byte) (b1 & 0x03);
+
+ byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
+ : (byte) ((b1) >> 2 ^ 0xc0);
+ byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)
+ : (byte) ((b2) >> 4 ^ 0xf0);
+
+ encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
+ encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
+ encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2];
+ encodedData[encodedIndex++] = PAD;
+ }
+
+ encodedData[encodedIndex] = 0xa;
+
+ return new String(encodedData);
+ }
+
+ /**
+ * Decodes Base64 data into octects
+ *
+ * @param encoded Byte array containing Base64 data
+ * @return Array containind decoded data.
+ */
+ public static byte[] decode(String encoded) {
+
+ if (encoded == null)
+ return null;
+
+ char[] base64Data = encoded.toCharArray();
+ // remove white spaces
+ int len = removeWhiteSpace(base64Data);
+
+ if (len % FOURBYTE != 0) {
+ return null;//should be divisible by four
+ }
+
+ int numberQuadruple = (len / FOURBYTE);
+
+ if (numberQuadruple == 0)
+ return new byte[0];
+
+ byte decodedData[] = null;
+ byte b1 = 0, b2 = 0, b3 = 0, b4 = 0, marker0 = 0, marker1 = 0;
+ char d1 = 0, d2 = 0, d3 = 0, d4 = 0;
+
+ int i = 0;
+ int encodedIndex = 0;
+ int dataIndex = 0;
+ decodedData = new byte[(numberQuadruple) * 3];
+
+ for (; i < numberQuadruple - 1; i++) {
+
+ if (!isData((d1 = base64Data[dataIndex++]))
+ || !isData((d2 = base64Data[dataIndex++]))
+ || !isData((d3 = base64Data[dataIndex++]))
+ || !isData((d4 = base64Data[dataIndex++])))
+ return null;//if found "no data" just return null
+
+ b1 = base64Alphabet[d1];
+ b2 = base64Alphabet[d2];
+ b3 = base64Alphabet[d3];
+ b4 = base64Alphabet[d4];
+
+ decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
+ decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
+ decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
+ }
+
+ if (!isData((d1 = base64Data[dataIndex++]))
+ || !isData((d2 = base64Data[dataIndex++]))) {
+ return null;//if found "no data" just return null
+ }
+
+ b1 = base64Alphabet[d1];
+ b2 = base64Alphabet[d2];
+
+ d3 = base64Data[dataIndex++];
+ d4 = base64Data[dataIndex++];
+ if (!isData((d3)) || !isData((d4))) {//Check if they are PAD characters
+ if (isPad(d3) && isPad(d4)) { //Two PAD e.g. 3c[Pad][Pad]
+ if ((b2 & 0xf) != 0)//last 4 bits should be zero
+ return null;
+ byte[] tmp = new byte[i * 3 + 1];
+ System.arraycopy(decodedData, 0, tmp, 0, i * 3);
+ tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
+ return tmp;
+ } else if (!isPad(d3) && isPad(d4)) { //One PAD e.g. 3cQ[Pad]
+ b3 = base64Alphabet[d3];
+ if ((b3 & 0x3) != 0)//last 2 bits should be zero
+ return null;
+ byte[] tmp = new byte[i * 3 + 2];
+ System.arraycopy(decodedData, 0, tmp, 0, i * 3);
+ tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
+ tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
+ return tmp;
+ } else {
+ return null;//an error like "3c[Pad]r", "3cdX", "3cXd", "3cXX" where X is non data
+ }
+ } else { //No PAD e.g 3cQl
+ b3 = base64Alphabet[d3];
+ b4 = base64Alphabet[d4];
+ decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
+ decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
+ decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
+
+ }
+
+ return decodedData;
+ }
+
+ /**
+ * remove WhiteSpace from MIME containing encoded Base64 data.
+ *
+ * @param data the byte array of base64 data (with WS)
+ * @return the new length
+ */
+ protected static int removeWhiteSpace(char[] data) {
+ if (data == null)
+ return 0;
+
+ // count characters that's not whitespace
+ int newSize = 0;
+ int len = data.length;
+ for (int i = 0; i < len; i++) {
+ if (!isWhiteSpace(data[i]))
+ data[newSize++] = data[i];
+ }
+ return newSize;
+ }
+}
+
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/BigDecimalUtils.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/BigDecimalUtils.java
new file mode 100644
index 0000000..a942d58
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/BigDecimalUtils.java
@@ -0,0 +1,202 @@
+package com.ectrip.cyt.utils;
+
+import java.math.BigDecimal;
+
+/**
+ * 数字精度工具类
+ *
+ * @author changjiang.tang Date:8/19/15 Time:2:24 PM
+ * @author wenqiang.luo date: 15-9-17 增加数字精准运算方法
+ */
+public class BigDecimalUtils {
+
+ //默认除法运算精度
+ private static final int DEF_DIV_SCALE = 5;
+
+ /**
+ * 私有构造方法,禁用new创建对象
+ */
+ private BigDecimalUtils() {
+
+ }
+
+ /**
+ * 保留两位小数
+ * @param number 数值
+ * @return 数值,精确到小数点后两位
+ */
+ public static BigDecimal saleUp2(BigDecimal number) {
+ return number == null ? null : number.setScale(2, BigDecimal.ROUND_UP);
+ }
+
+ /**
+ * 提供精确的加法运算。
+ *
+ * @param v1 被加数
+ * @param v2 加数
+ * @return 两个参数的和
+ */
+
+ public static double add(double v1, double v2) {
+ BigDecimal b1 = new BigDecimal(Double.toString(v1));
+ BigDecimal b2 = new BigDecimal(Double.toString(v2));
+ return b1.add(b2).doubleValue();
+ }
+
+ /**
+ * 提供精确的减法运算。
+ *
+ * @param v1 被减数
+ * @param v2 减数
+ * @return 两个参数的差
+ */
+ public static double sub(double v1, double v2) {
+ BigDecimal b1 = new BigDecimal(Double.toString(v1));
+ BigDecimal b2 = new BigDecimal(Double.toString(v2));
+ return b1.subtract(b2).doubleValue();
+ }
+
+ /**
+ * 提供精确的乘法运算。
+ *
+ * @param v1 被乘数
+ * @param v2 乘数
+ * @return 两个参数的积
+ */
+ public static double mul(double v1, double v2) {
+ BigDecimal b1 = new BigDecimal(Double.toString(v1));
+ BigDecimal b2 = new BigDecimal(Double.toString(v2));
+ return b1.multiply(b2).doubleValue();
+ }
+
+ public static double mul(double v1, double... data) {
+ BigDecimal result = new BigDecimal(Double.toString(v1));
+ if (data != null && data.length > 0) {
+ for (double v : data) {
+ result = result.multiply(new BigDecimal(Double.toString(v)));
+ }
+ }
+ return result.doubleValue();
+ }
+
+ /**
+ * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
+ * 小数点以后10位,以后的数字四舍五入。
+ *
+ * @param v1 被除数
+ * @param v2 除数
+ * @return 两个参数的商
+ */
+ public static double div(double v1, double v2) {
+ return div(v1, v2, DEF_DIV_SCALE);
+ }
+
+ /**
+ * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
+ * 定精度,以后的数字四舍五入。
+ *
+ * @param v1 被除数
+ * @param v2 除数
+ * @param scale 表示表示需要精确到小数点以后几位。
+ * @return 两个参数的商
+ */
+ public static double div(double v1, double v2, int scale) {
+ if (scale < 0) {
+ throw new IllegalArgumentException(
+ "The scale must be a positive integer or zero");
+ }
+ BigDecimal b1 = new BigDecimal(Double.toString(v1));
+ BigDecimal b2 = new BigDecimal(Double.toString(v2));
+ return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
+ }
+
+ /**
+ * 提供精确的小数位四舍五入处理。
+ *
+ * @param v 需要四舍五入的数字
+ * @param scale 小数点后保留几位
+ * @return 四舍五入后的结果
+ */
+ public static double round(double v, int scale) {
+ if (scale < 0) {
+ throw new IllegalArgumentException(
+ "The scale must be a positive integer or zero");
+ }
+ BigDecimal b = new BigDecimal(Double.toString(v));
+ BigDecimal one = new BigDecimal("1");
+ return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
+ }
+
+ /**
+ * 将浮点数放大
+ *
+ * @param v 需放大的数字
+ * @param n 10的幂数
+ * @return 放大后的结果
+ */
+ public static double amplify(double v, int n) {
+ BigDecimal b = new BigDecimal(Double.toString(v));
+ return b.movePointRight(n).doubleValue();
+ }
+
+ /**
+ * 将浮点数放大后取整
+ *
+ * @param v 需放大的数字
+ * @param n 10的幂数
+ * @return 放大后取整的结果
+ */
+ public static long amplify2long(double v, int n) {
+ BigDecimal b = new BigDecimal(Double.toString(v));
+ return b.movePointRight(n).longValue();
+ }
+
+ /**
+ * 将浮点数放大后取整
+ *
+ * @param v 需放大的数字
+ * @param n 10的幂数
+ * @return 放大后取整的结果
+ */
+ public static int amplify2int(double v, int n) {
+ BigDecimal b = new BigDecimal(Double.toString(v));
+ return b.movePointRight(n).intValue();
+ }
+
+ /**
+ * 将浮点数缩小
+ *
+ * @param v 需缩小的数字
+ * @param n 10的幂数
+ * @return 缩小后的结果
+ */
+ public static double shrink(double v, int n) {
+ BigDecimal b = new BigDecimal(Double.toString(v));
+ return b.movePointLeft(n).doubleValue();
+ }
+
+ /**
+ * 将整数数缩小成浮点数
+ *
+ * @param v 需缩小的数字
+ * @param n 10的幂数
+ * @return 缩小成浮点数的结果
+ */
+ public static double shrink2double(long v, int n) {
+ BigDecimal b = new BigDecimal(Long.toString(v));
+ return b.movePointLeft(n).doubleValue();
+ }
+
+ /**
+ * 将整数数缩小成浮点数
+ *
+ * @param v 需缩小的数字
+ * @param n 10的幂数
+ * @return 缩小成浮点数的结果
+ */
+ public static double shrink2double(int v, int n) {
+ BigDecimal b = new BigDecimal(Integer.toString(v));
+ return b.movePointLeft(n).doubleValue();
+ }
+
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/DateUtils.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/DateUtils.java
new file mode 100644
index 0000000..9806d80
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/DateUtils.java
@@ -0,0 +1,548 @@
+package com.ectrip.cyt.utils;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 实现描述:时间操作工具类
+ *
+ * @version v1.0.0
+ * @see
+ */
+public class DateUtils {
+ public final static String DATE_CHINESE_PATTERN = "yyyy年MM月dd日";
+ /**
+ * 标准日期格式
+ */
+ public final static String DATE_PATTERN = "yyyy-MM-dd";
+
+ public final static String DATE_SHORT_PATTERN = "yyyyMMdd";
+
+ public final static String DATE_SLASH_PATTERN = "yyyy/MM/dd";
+
+ /**
+ * 标准日期时分秒毫秒格式
+ */
+ public final static String DATETIME_MILL_SECOND = "yyyy-MM-dd HH:mm:ss.SSS";
+
+ /**
+ * 标准时间格式
+ */
+ public final static String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
+
+ /**
+ * 特殊的格式 针对创建订单,拼凑的最晚支付时间
+ */
+ public final static String DATETIME_PATTERN_CREAT_ORDER = "yyyy-MM-ddHH:mm";
+
+ public final static String DATETIME_SHORT_PATTERN = "yyyyMMddHHmmss";
+
+ /**
+ * 标准年小时分钟格式
+ */
+ public final static String HOUR_MINUTE = "HH:mm";
+
+ /**
+ * 标准年小时分钟秒格式
+ */
+ public final static String HOUR_MINUTE_SECOND = "HH:mm:ss";
+
+ private final static Logger logger = LoggerFactory.getLogger(DateUtils.class);
+
+ /**
+ * Number of milliseconds in a standard day.
+ */
+ public static final long MILLIS_PER_DAY = 24 * DateUtils.MILLIS_PER_HOUR;
+
+ /**
+ * Number of milliseconds in a standard hour.
+ */
+ public static final long MILLIS_PER_HOUR = 60 * DateUtils.MILLIS_PER_MINUTE;
+
+ /**
+ * Number of milliseconds in a standard minute.
+ */
+ public static final long MILLIS_PER_MINUTE = 60 * DateUtils.MILLIS_PER_SECOND;
+
+ /**
+ * Number of milliseconds in a standard second.
+ */
+ public static final long MILLIS_PER_SECOND = 1000;
+
+ /**
+ * 标准年月格式
+ */
+ public final static String MONTH_PATTERN = "yyyy-MM";
+
+ private final static String[] WEEK_NAMES = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"};
+
+ /**
+ * 在指定日期增加指定天数
+ *
+ * @param date 指定日期
+ * @param days 指定天数
+ * @return
+ */
+ public static Date addDay(Date date, int days) {
+ if (days == 0) {
+ return date;
+ }
+ Calendar c = Calendar.getInstance();
+ c.setTime(date);
+ c.add(Calendar.DAY_OF_YEAR, days);
+ return c.getTime();
+ }
+
+ /**
+ * 在指定日期增加指定天数
+ *
+ * @param date 指定日期
+ * @param days 指定天数
+ * @return
+ */
+ public static Date addDay(String date, int days) {
+ return DateUtils.addDay(DateUtils.convertDate(date), days);
+ }
+
+ public static Date addMinute(Date date, int minute) {
+ Calendar c = Calendar.getInstance();
+ c.setTime(date);
+ c.add(Calendar.MINUTE, minute);
+ return c.getTime();
+ }
+
+ /**
+ * 当前日期之后
+ *
+ * @param date
+ * @return
+ */
+ public static boolean afterToday(Object date) {
+ Date currentDate = new Date();
+ return DateUtils.compareDate(date, currentDate) == 1;
+ }
+
+ /**
+ * 当前时间之后
+ *
+ * @param date
+ * @return
+ */
+ public static boolean afterTodayDate(Date date) {
+ Date currentDate = new Date();
+ return currentDate.compareTo(date) == -1;
+ }
+
+ /**
+ * 当前日期之前
+ *
+ * @param date
+ * @return
+ */
+ public static boolean beforeToday(Object date) {
+ Date currentDate = new Date();
+ return DateUtils.compareDate(date, currentDate) == -1;
+ }
+
+ /**
+ * 当前时间之前
+ *
+ * @param date
+ * @return
+ */
+ public static boolean beforeTodayDate(Date date) {
+ Date currentDate = new Date();
+ return currentDate.compareTo(date) == 1;
+ }
+
+ /**
+ * 比较两个日期date1大于date1 返回1 等于返回0 小于返回-1
+ *
+ * @param date1
+ * @param date2
+ * @return
+ */
+ public static int compareDate(Object date1, Object date2) {
+ if (date1 == null || date2 == null) {
+ String msg = "illegal arguments,date1 and date2 must be not null.";
+ throw new IllegalArgumentException(msg);
+ }
+ Date d1 = (Date) (date1 instanceof String ? DateUtils.convertDate((String) date1) : date1);
+ Date d2 = (Date) (date2 instanceof String ? DateUtils.convertDate((String) date2) : date2);
+ return DateUtils.round(d1, Calendar.DATE).compareTo(DateUtils.round(d2, Calendar.DATE));
+ }
+
+ public static Date convertDate(Date date, String pattern) {
+ if (StringUtils.isEmpty(pattern)) {
+ String msg = "the date or pattern is empty.";
+ throw new IllegalArgumentException(msg);
+ }
+ String dateForPattern = DateUtils.formatDate(date, pattern);
+ return DateUtils.convertDate(dateForPattern, pattern);
+ }
+
+ /**
+ * 将long型整数转化为时间。
+ *
+ * @param date 时间对应的long值
+ * @return 时间对象
+ */
+ public static Date convertDate(Long date) {
+ return new Date(date);
+ }
+
+ /**
+ * 将日期或者时间戳转化为日期对象
+ *
+ * @param date yyyy-MM-dd or yyyy-MM-dd HH:mm:ss or yyyy-MM-dd HH:mm:ss.SSS
+ * @return
+ */
+ public static Date convertDate(String date) {
+ if (StringUtils.isBlank(date)) {
+ return null;
+ }
+ if (date.indexOf(":") > 0) {
+ return DateUtils.convertDate(date, DateUtils.DATETIME_PATTERN);
+ } else if (date.indexOf(".") > 0) {
+ return DateUtils.convertDate(date, DateUtils.DATETIME_MILL_SECOND);
+ } else {
+ return DateUtils.convertDate(date, DateUtils.DATE_PATTERN);
+ }
+ }
+
+ /**
+ * 将日期或者时间字符串转化为日期对象
+ *
+ * @param date 日期字符串
+ * @param pattern 格式字符串 yyyy-MM-DD, yyyy/MM/DD, yyyyMMdd yyyy-MM-dd-HH:mm:ss, yyyy-MM-dd HH:mm:ss
+ * 格式字符串可选字符:"GyMdkHmsSEDFwWahKzZ"
+ * @return Date
+ * @see java.text.DateFormatSymbols.patternChars
+ */
+ public static Date convertDate(String date, String pattern) {
+ try {
+ if (StringUtils.isEmpty(pattern) || StringUtils.isEmpty(date)) {
+ String msg = "the date or pattern is empty.";
+ throw new IllegalArgumentException(msg);
+ }
+ SimpleDateFormat df = new SimpleDateFormat(pattern.trim());
+ return df.parse(date.trim());
+ } catch (Exception e) {
+ DateUtils.logger.error("Method===DateUtils.convertDate error!", e);
+ return null;
+ }
+ }
+
+ /**
+ * 将时间字符串转化为时间对象Time
+ *
+ * @param time 时间字符串
+ * @param pattern 格式字符串 yyyy-MM-dd HH:mm:ss or yyyy-MM-dd HH:mm:ss.SSS
+ * @return
+ */
+ public static Time convertTime(String time, String pattern) {
+ Date d = DateUtils.convertDate(time, pattern);
+ return new Time(d.getTime());
+ }
+
+ /**
+ * 获得日期相差天数
+ *
+ * @param date1 日期
+ * @param date2 日期
+ * @return
+ */
+ public static int diffDate(Date date1, Date date2) {
+ return (int) ((date1.getTime() - date2.getTime()) / DateUtils.MILLIS_PER_DAY);
+ }
+
+ /**
+ * 获取两个日期相差的分钟数
+ *
+ * @param date1
+ * @param date2
+ * @return
+ */
+ public static int diffMinute(Date date1, Date date2) {
+ return (int) ((date1.getTime() - date2.getTime()) / DateUtils.MILLIS_PER_MINUTE);
+ }
+
+ /**
+ * 格式为时间字符串
+ *
+ * @param date 日期
+ * @return yyyy-MM-dd Date
+ */
+ public static String formatDate(Date date) {
+ try {
+ return DateUtils.formatDate(date, DateUtils.DATE_PATTERN);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ /**
+ * 按指定格式字符串格式时间
+ *
+ * @param date 日期或者时间
+ * @param pattern 格式化字符串 yyyy-MM-dd, yyyy-MM-dd HH:mm:ss, yyyy年MM月dd日 etc.
+ * @return
+ */
+ public static String formatDate(Date date, String pattern) {
+ SimpleDateFormat format = new SimpleDateFormat(pattern.trim());
+ return format.format(date);
+ }
+
+ /**
+ * 格式为时间戳字符串
+ *
+ * @param date 时间
+ * @return yyyy-MM-dd HH:mm:ss Date
+ */
+ public static String formatDateTime(Date date) {
+ try {
+ return DateUtils.formatDate(date, DateUtils.DATETIME_PATTERN);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ /**
+ * 将制定时间格式为字符串'yyyyMMddHHmmss'.
+ *
+ * @return
+ */
+ public static String formatDateToYMDHMS(Date date) {
+ return DateUtils.formatDate(date, DateUtils.DATETIME_SHORT_PATTERN);
+ }
+
+ public static String formatMonth(Date date) {
+ return DateUtils.formatDate(date, DateUtils.MONTH_PATTERN);
+ }
+
+ /**
+ * 将当前时间格式为字符串'yyyyMMddHHmmss'.
+ *
+ * @return
+ */
+ public static String formatNowToYMDHMS() {
+ return DateUtils.formatDateToYMDHMS(new Date());
+ }
+
+ public static Timestamp getCurrentTimestamp() {
+ return new Timestamp(new Date().getTime());
+ }
+
+ public static Date getDateFromShortString(String str) {
+ SimpleDateFormat simpleDF = new SimpleDateFormat("yyyy-MM-dd");
+ try {
+ return simpleDF.parse(str);
+ } catch (ParseException e) {
+ DateUtils.logger.warn("parse date error", e);
+ }
+ return null;
+ }
+
+ /**
+ * 获得本周第一天
+ *
+ * @param date
+ * @return
+ */
+ public static Date getFirstDayOfThisWeek(Date date) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ cal.setFirstDayOfWeek(Calendar.MONDAY);
+ cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+ return cal.getTime();
+ }
+
+ /**
+ * 获得小时
+ *
+ * @param date
+ * @return
+ */
+ public static int getHourOfDay(Date date) {
+ Calendar c = Calendar.getInstance();
+ c.setTime(date);
+ return c.get(Calendar.HOUR_OF_DAY);
+ }
+
+ public static Date getLastMonth() {
+ Calendar c = Calendar.getInstance();
+ int month = c.get(Calendar.MONTH);
+ c.set(Calendar.MONTH, month - 1);
+ return c.getTime();
+ }
+
+ /**
+ * 获得分钟数
+ *
+ * @param date
+ * @return
+ */
+ public static int getMinute(Date date) {
+ Calendar c = Calendar.getInstance();
+ c.setTime(date);
+ return c.get(Calendar.MINUTE);
+ }
+
+ /**
+ * 获取后续第n天日期
+ *
+ * @param date
+ * @param n 第n天
+ * @return
+ */
+ public static Date getNextNDay(Date date, int n) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ cal.add(Calendar.DATE, n);
+ return cal.getTime();
+ }
+
+ /**
+ * 获得星期数
+ *
+ * @param date 日期
+ * @return
+ */
+ public static int getWeekNumber(Date date) {
+ Calendar c = Calendar.getInstance();
+ c.setTime(date);
+ int number = c.get(Calendar.DAY_OF_WEEK) - 1;
+ if (number == 0) {
+ number = 7;
+ }
+ return number;
+ }
+
+ /**
+ * 获得星期名称
+ *
+ * @param date
+ * @return
+ */
+ public static String getWeekNumberString(Date date) {
+ int dayNum = DateUtils.getWeekNumber(date);
+ return DateUtils.WEEK_NAMES[dayNum - 1];
+ }
+
+ /**
+ * 是否同一天
+ *
+ * @param date1
+ * @param date2
+ * @return
+ */
+ public static boolean isSameDay(Object date1, Object date2) {
+ return DateUtils.compareDate(date1, date2) == 0;
+ }
+
+ /**
+ * 检查时间或者字符串是否合法
+ *
+ * @param date 时间
+ * @param pattern 格式串
+ * @return
+ */
+ public static boolean isValidDate(String date, String pattern) {
+ try {
+ DateUtils.convertDate(pattern, date);
+ return true;
+ } catch (Exception e) {
+ DateUtils.logger.error("Method===DateUtils.isValidDate error!", e);
+ return false;
+ }
+ }
+
+ /**
+ * 获得当前时间戳
+ *
+ * @return Timestamp
+ */
+ public static Timestamp now() {
+ return new Timestamp(new Date().getTime());
+ }
+
+ /**
+ * 获得当前时间字符串,格式为:yyyy-MM-dd HH:mm:ss
+ *
+ * @return
+ */
+ public static String nowDateTime() {
+ return DateUtils.formatDate(new Date(), DateUtils.DATETIME_PATTERN);
+ }
+
+ /**
+ * 按指定roundType格式化日期。
+ *
+ * @param date 日期
+ * @param roundType
+ * @return Date
+ * @see Calendar.MONTH, java.util.Calendar.DATE, java.util.Calendar.HOUR, java.util.Calendar.MINUTE, java.util.Calendar.SECOND
+ */
+ public static Date round(Date date, int roundType) {
+ Calendar c = Calendar.getInstance();
+ c.setTimeInMillis(date.getTime());
+ switch (roundType) {
+ case Calendar.MONTH:
+ c.set(Calendar.DAY_OF_MONTH, 1);
+ case Calendar.DATE:
+ c.set(Calendar.HOUR_OF_DAY, 0);
+ case Calendar.HOUR:
+ c.set(Calendar.MINUTE, 0);
+ case Calendar.MINUTE:
+ c.set(Calendar.SECOND, 0);
+ case Calendar.SECOND:
+ c.set(Calendar.MILLISECOND, 0);
+ return c.getTime();
+ default:
+ throw new IllegalArgumentException("invalid round roundType.");
+ }
+ }
+
+ /**
+ * 获得当前日期对象
+ *
+ * @return
+ */
+ public static Date today() {
+ return DateUtils.convertDate(DateUtils.formatDate(new Date()), DateUtils.DATE_PATTERN);
+ }
+
+ /**
+ * 获得当前日期字符串,格式为:yyyy-MM-dd
+ *
+ * @return
+ */
+ public static String todayDate() {
+ return DateUtils.formatDate(new Date());
+ }
+
+ /**
+ * 将日期或者时间字符串转化为Timestamp对象
+ *
+ * @param date 日期字符串
+ * @param pattern 格式字符串 yyyy-MM-DD, yyyy/MM/DD, yyyyMMdd yyyy-MM-dd-HH:mm:ss, yyyy-MM-dd HH:mm:ss
+ * @return Timestamp
+ * @author reeboo
+ */
+ public static Timestamp toTimestamp(String date, String pattern) {
+ SimpleDateFormat format = new SimpleDateFormat(pattern.trim());
+ try {
+ return new Timestamp(format.parse(date).getTime());
+ } catch (ParseException e) {
+ }
+ return null;
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/EncryptUtil.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/EncryptUtil.java
new file mode 100644
index 0000000..661ae32
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/EncryptUtil.java
@@ -0,0 +1,230 @@
+package com.ectrip.cyt.utils;
+
+import org.apache.commons.codec.binary.Base64;
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
+
+import javax.crypto.*;
+import javax.crypto.spec.DESedeKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidKeyException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.spec.InvalidKeySpecException;
+
+
+/**
+ * 基础加密算法类?当前支持des,md5码?
+ *
+ * @author huhaopeng
+ */
+public class EncryptUtil {
+
+ /**
+ * MD5值计码?p>
+ * MD5的算法在RFC1321 中定码?
+ * 在RFC 1321中,给出了Test suite用来码?码码你的实现是否正确码?
+ * MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
+ * MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
+ * MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
+ * MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
+ * MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
+ *
+ * @param str 源字符串
+ * @return md5码?
+ */
+ public final static byte[] md5(String str) {
+ try {
+ byte[] res = str.getBytes("UTF-8");
+ MessageDigest mdTemp = MessageDigest.getInstance("MD5".toUpperCase());
+ mdTemp.update(res);
+ byte[] hash = mdTemp.digest();
+ return hash;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ //hex repr. of md5
+ public final static String MD5Hex(String input) {
+ String s = null;
+ char hexDigits[] = { // 用来将字节转换成 16 进制表示的字码?
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
+ 'e', 'f'};
+ try {
+ MessageDigest md = MessageDigest
+ .getInstance("MD5");
+ md.update(input.getBytes("utf-8"));
+ byte tmp[] = md.digest();
+
+ char str[] = new char[16 * 2];
+
+ int k = 0;
+ for (int i = 0; i < 16; i++) {
+
+ byte byte0 = tmp[i];
+ str[k++] = hexDigits[byte0 >>> 4 & 0xf];
+ str[k++] = hexDigits[byte0 & 0xf];
+ }
+ s = new String(str);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return s;
+ }
+
+ // 加密后解码?
+ public static String JM(byte[] inStr) {
+ String newStr = new String(inStr);
+ char[] a = newStr.toCharArray();
+ for (int i = 0; i < a.length; i++) {
+ a[i] = (char) (a[i] ^ 't');
+ }
+ String k = new String(a);
+ return k;
+ }
+
+
+ /**
+ * BASE64加密
+ *
+ * @param key
+ * @return
+ * @throws Exception
+ */
+ public static String BASE64Encrypt(byte[] key) {
+ String edata = null;
+ try {
+ edata = (new BASE64Encoder()).encodeBuffer(key).trim();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return edata;
+ }
+
+
+ /**
+ * BASE64解密
+ *
+ * @param data
+ * @return
+ * @throws Exception
+ */
+ public static byte[] BASE64Decrypt(String data) {
+ if (data == null) return null;
+ byte[] edata = null;
+ try {
+ edata = (new BASE64Decoder()).decodeBuffer(data);
+ return edata;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * @param key 24位密码?
+ * @param str 源字符串
+ * @return
+ * @throws NoSuchAlgorithmException
+ * @throws NoSuchPaddingException
+ * @throws InvalidKeyException
+ * @throws UnsupportedEncodingException
+ * @throws InvalidKeySpecException
+ * @throws IllegalBlockSizeException
+ * @throws BadPaddingException
+ */
+ public static byte[] des3Encrypt(String key, String str) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, UnsupportedEncodingException, InvalidKeySpecException, IllegalBlockSizeException, BadPaddingException {
+
+ byte[] newkey = key.getBytes();
+
+ SecureRandom sr = new SecureRandom();
+
+ DESedeKeySpec dks = new DESedeKeySpec(newkey);
+
+ SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
+
+ SecretKey securekey = keyFactory.generateSecret(dks);
+
+ Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
+
+ cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
+
+ byte[] bt = cipher.doFinal(str.getBytes("utf-8"));
+
+ return bt;
+ }
+
+ public static String des3EncryptWithString(String key, String str) {
+ try {
+ return Base64.encodeBase64String(des3Encrypt(key, str));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public static String des3DecryptWithString(byte[] edata, String key) {
+ try {
+ byte[] bytes = Base64.decodeBase64(edata);
+ return des3Decrypt(bytes, key);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+
+ /**
+ * 解密
+ *
+ * @param edata
+ * @param key
+ * @return
+ * @throws Exception
+ */
+ public static String des3Decrypt(byte[] edata, String key) {
+ String data = "";
+ try {
+ if (edata != null) {
+ byte[] newkey = key.getBytes();
+ DESedeKeySpec dks = new DESedeKeySpec(newkey);
+ SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
+ SecretKey securekey = keyFactory.generateSecret(dks);
+ Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
+ cipher.init(Cipher.DECRYPT_MODE, securekey, new SecureRandom());
+ byte[] bb = cipher.doFinal(edata);
+ data = new String(bb, "UTF-8");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return data;
+ }
+
+ public final static String taoBaoMD5(String s) {
+ char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ 'a', 'b', 'c', 'd', 'e', 'f'};
+ try {
+ byte[] strTemp = s.getBytes("GBK");
+ MessageDigest mdTemp = MessageDigest.getInstance("MD5");
+ mdTemp.update(strTemp);
+ byte[] md = mdTemp.digest();
+ int j = md.length;
+ char str[] = new char[j * 2];
+ int k = 0;
+ for (int i = 0; i < j; i++) {
+ byte byte0 = md[i];
+ str[k++] = hexDigits[byte0 >>> 4 & 0xf];
+ str[k++] = hexDigits[byte0 & 0xf];
+ }
+ return new String(str);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+}
+
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/OrderStatusUtils.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/OrderStatusUtils.java
new file mode 100644
index 0000000..680eca9
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/OrderStatusUtils.java
@@ -0,0 +1,78 @@
+package com.ectrip.cyt.utils;
+
+/**
+ * PMS订单状态工具
+ * @author wenqiang.luo date:15-9-30
+ */
+public class OrderStatusUtils {
+
+ /**
+ * 私有构造方法
+ */
+ private OrderStatusUtils() {
+
+ }
+
+ /**
+ * 预付:初始订单
+ */
+ public static final String PREPAY_ORDER_INIT = "PREPAY_ORDER_INIT";
+ /**
+ * 预付:预付失败
+ */
+ public static final String PREPAY_ORDER_BOOK_FAILED = "PREPAY_ORDER_BOOK_FAILED";
+ /**
+ * 预付成功:待支付
+ */
+ public static final String PREPAY_ORDER_NOT_PAYED = "PREPAY_ORDER_NOT_PAYED";
+ /**
+ * 预付:订单已取消
+ */
+ public static final String PREPAY_ORDER_CANCEL = "PREPAY_ORDER_CANCEL";
+ /**
+ * 预付:已付款,出票中
+ */
+ public static final String PREPAY_ORDER_PRINTING = "PREPAY_ORDER_PRINTING";
+ /**
+ * 预付:出票失败
+ */
+ public static final String PREPAY_ORDER_PRINT_FAILED = "PREPAY_ORDER_PRINT_FAILED";
+ /**
+ * 预付:出票成功
+ */
+ public static final String PREPAY_ORDER_PRINT_SUCCESS = "PREPAY_ORDER_PRINT_SUCCESS";
+
+ /**
+ * 预付:退订失败
+ */
+ public static final String PREPAY_ORDER_REFUNDFAIL = "PREPAY_ORDER_REFUNDFAIL";
+ /**
+ * 预付:已退订
+ */
+ public static final String PREPAY_ORDER_REFUNDED = "PREPAY_ORDER_REFUNDED";
+ /**
+ * 预付:已消费
+ */
+ public static final String PREPAY_ORDER_CONSUMED = "PREPAY_ORDER_CONSUMED";
+ /**
+ * 现付:初始订单
+ */
+ public static final String CASHPAY_ORDER_INIT = "CASHPAY_ORDER_INIT";
+ /**
+ * 现付:出票失败
+ */
+ public static final String CASHPAY_ORDER_PRINT_FAILED = "CASHPAY_ORDER_PRINT_FAILED";
+ /**
+ * 现付:出票成功
+ */
+ public static final String CASHPAY_ORDER_PRINT_SUCCESS = "CASHPAY_ORDER_PRINT_SUCCESS";
+ /**
+ * 现付:已退订
+ */
+ public static final String CASHPAY_ORDER_REFUNDED = "CASHPAY_ORDER_REFUNDED";
+ /**
+ * 现付:已消费
+ */
+ public static final String CASHPAY_ORDER_CONSUMED = "CASHPAY_ORDER_CONSUMED";
+
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/OtaUtils.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/OtaUtils.java
new file mode 100644
index 0000000..0d0967c
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/OtaUtils.java
@@ -0,0 +1,115 @@
+package com.ectrip.cyt.utils;
+
+import com.ectrip.cyt.model.enums.CredentialsType;
+import com.ectrip.cyt.model.enums.OrderStatusType;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author wenqiang.luo date:15-10-6
+ */
+public class OtaUtils {
+
+ /**
+ * 私有构造方法
+ */
+ private OtaUtils() {
+
+ }
+
+ public static final String ENCODE_UTF8 = "UTF-8";
+
+ //
+ public static final String VERSION2 = "2.0.0";
+ public static final String VERSION3 = "3.0.0";
+
+ //交互代码
+ public static final String SUCCESS_CODE = "1000";/** 交互成功标识 */
+
+ public static final String SUCCESS_DESCRIPTION = "SUCCESS";/** 交互成功描述 */
+
+ //加密算法
+ public static final String SECURITY_MD5 = "MD5";
+ public static final String SECURITY_AES_CBC = "AES/CBC";
+ public static final String SECURITY_SM4_CBC = "SM4/CBC";
+
+ public static final String JSON_DATA = "data";
+ public static final String JSON_SIGNED = "signed";
+ public static final String JSON_IV = "iv";
+ public static final String JSON_CREATEUSER = "createUser";
+ public static final String JSON_SECURITY_TYPE = "securityType";
+ public static final String REQUEST_XML = "requestXml";
+ public static final String RESPONSE_XML = "responseXml";
+ public static final String REQUEST_JSON_OBJECT = "requestJsonObject";
+ public static final String RESPONSE_JSON_OBJECT = "responseJsonObject";
+ public static final String KEY = "key";
+ public static final String SECURITY_TYPE = "securityType";
+ public static final String DISTRIBUTOR_NAME = "distributorName";
+ public static final String SUPPLIER_IDENTITY = "supplierIdentity";
+ public static final String ECTRIP = "ectrip";
+ public static final String DOM_HEADER = "header";
+ public static final String DOM_BODY = "body";
+
+ //接口方法
+ public final static String HEART_BEAT = "heartBeat";
+ public static final String GET_BALANCE = "getBalance";
+ public final static String PUSH_ORDER = "pushOrder";
+ public final static String CHECK_ORDER = "checkOrder";
+ public final static String GET_ORDER_BY_OTA = "getOrderByOTA";
+ public final static String APPLY_ORDER_REFUND_BY_USER = "applyOrderRefundByUser";
+ public final static String CREATE_ORDER ="createOrder";
+ public final static String CREATE_PAY_ORDER ="createPaymentOrder";
+ public final static String PAY_ORDER ="payOrder";
+ public final static String CANCEL_ORDER ="cancelOrder";
+ public final static String GET_PRODUCT_BY_OTA="getProductByOTA";
+ public final static String GET_AVAILABLE_PRODUCT="getAvailableProduct";
+ public static final String GET_STOCK_PRODUCT_INFO = "getStockProductInfo";
+ public static final String GET_SEAT_INFO = "getSeatInfo";
+ public static final String SEND_ORDER_ETICKET = "sendOrderEticket";
+
+ /**
+ * 订单状态映射
+ */
+ public static Map prepayOrderStatusTypeStringMap = new HashMap() {
+ {
+ /** 未付款 */
+ put(OrderStatusType.ORDER_NOT_PAYED_YET, "PREPAY_ORDER_INIT");
+
+ /** 已取消 */
+ put(OrderStatusType.ORDER_CANCELED, "PREPAY_ORDER_CANCEL");
+
+ /** 预订成功 */
+ put(OrderStatusType.ORDER_RESERVE_SUCCESSFUL, "PREPAY_ORDER_PRINTING");
+
+ /** 预订失败 */
+ put(OrderStatusType.ORDER_RESERVE_FAILED, "PREPAY_ORDER_PRINT_FAILED");
+
+ /** 已消费 */
+ put(OrderStatusType.ORDER_CONSUMED, "PREPAY_ORDER_CONSUMED");
+
+ /** 已退款 */
+ put(OrderStatusType.ORDER_REFUNDED, "PREPAY_ORDER_REFUNDED");
+ }
+
+ private static final long serialVersionUID = -6074224384596465754L;
+ };
+
+ /**
+ * 证件类型 - String 映射
+ */
+ public static Map credentialsTypeStringMap = new HashMap() {
+ {
+ put(CredentialsType.ID_CARD, "ID_CARD");
+ put(CredentialsType.HUZHAO, "HUZHAO");
+ put(CredentialsType.TAIBAO, "TAIBAO");
+ put(CredentialsType.GANGAO, "GANGAO");
+ put(CredentialsType.OFFICER, "OTHER");
+ put(CredentialsType.OTHER, "OTHER");
+ put(CredentialsType.GUIYI, "GUIYI");
+ put(CredentialsType.STUDENT, "OTHER");
+ }
+
+ private static final long serialVersionUID = -4521723122855266147L;
+ };
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/SM4Tools.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/SM4Tools.java
new file mode 100644
index 0000000..719954d
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/SM4Tools.java
@@ -0,0 +1,135 @@
+package com.ectrip.cyt.utils;
+
+import com.ectrip.cyt.exception.BusinessException;
+import org.apache.commons.codec.binary.Base64;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
+import org.bouncycastle.util.encoders.Hex;
+
+import javax.crypto.*;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.*;
+
+/**
+ * @Author zhoumengjun
+ * @Description sm4加密算法工具类
+ * @Date 2023/7/12 10:47
+ */
+public class SM4Tools {
+
+ static {
+ Security.addProvider(new BouncyCastleProvider());
+ }
+
+ public static final String ALGORITHM = "SM4";
+
+ // 加密算法/分组加密模式/分组填充方式
+ // PKCS5Padding-以8个字节为一组进行分组加密
+ // 定义分组加密模式使用:PKCS5Padding
+ public static final String SM4_CBC_PCK_ALG = "SM4/CBC/PKCS5Padding";
+
+ // 128-32位16进制;256-64位16进制
+ public static final int DEFAULT_KEY_SIZE = 128;
+
+
+ public static String encryptCBC(String content, String key,String ivBase64){
+ try {
+ String cipherText = "";
+ // 16进制字符串-->byte[]
+ byte[] keyData = ByteUtils.fromHexString(key);
+ // String-->byte[]
+ byte[] srcData = content.getBytes(OtaUtils.ENCODE_UTF8);
+ // 加密后的数组
+ Cipher cipher = generateCBCCipher(SM4_CBC_PCK_ALG, Cipher.ENCRYPT_MODE, keyData,SecurityTools.decodeIv(ivBase64));
+ byte[] cipherArray = cipher.doFinal(srcData);
+ // byte[]-->hexString
+ cipherText = ByteUtils.toHexString(cipherArray);
+ return cipherText;
+ }catch (Exception e){
+ throw new BusinessException("SM4加密失败");
+ }
+ }
+
+ public static String decryptCBC(String content, String key,String ivBase64){
+ try {
+ // 用于接收解密后的字符串
+ String decryptStr = "";
+ // hexString-->byte[]
+ byte[] keyData = ByteUtils.fromHexString(key);
+ // hexString-->byte[]
+ byte[] cipherData = ByteUtils.fromHexString(content);
+ // 解密
+ Cipher cipher = generateCBCCipher(SM4_CBC_PCK_ALG, Cipher.DECRYPT_MODE, keyData,SecurityTools.decodeIv(ivBase64));
+ byte[] srcData = cipher.doFinal(cipherData);
+ // byte[]-->String
+ decryptStr = new String(srcData, OtaUtils.ENCODE_UTF8);
+ return decryptStr;
+ }catch (Exception e){
+ throw new BusinessException("SM4解密失败");
+ }
+ }
+
+ /**
+ * 生成ECB暗号
+ *
+ * @param algorithmName 算法名称
+ * @param mode 模式
+ * @param key
+ * @return
+ * @throws Exception
+ * @explain ECB模式(电子密码本模式:Electronic codebook)
+ */
+ private static Cipher generateCBCCipher(String algorithmName, int mode, byte[] key,byte[] iv) throws NoSuchPaddingException, NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException, InvalidKeyException {
+ Cipher cipher = Cipher.getInstance(algorithmName, BouncyCastleProvider.PROVIDER_NAME);
+ Key sm4Key = new SecretKeySpec(key, ALGORITHM);
+ IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
+ cipher.init(mode, sm4Key,ivParameterSpec);
+ return cipher;
+ }
+
+ public static void main(String[] args) {
+ try {
+ String key = SecurityTools.generateKey(OtaUtils.SECURITY_AES_CBC);
+ System.out.println(key);
+ String iv = SecurityTools.generatorIv();
+ System.out.println(iv);
+ String data ="\n" +
+ "\n" +
+ " \n" +
+ " tour.ectrip.com\n" +
+ " DataExchangeProcessor\n" +
+ " v1.0.0\n" +
+ " GetOrderByOTARequestBody\n" +
+ " wllvmama\n" +
+ " 2020-11-18 11:36:09\n" +
+ " \n" +
+ " \n" +
+ " 91201118999003835\n" +
+ " \n" +
+ "\n" +
+ "\n";
+ //加密
+ String cipher = AesTools.encryptCBC(data, key,iv);
+ System.out.println("加密后:"+cipher);
+ //解密
+ String res = AesTools.decryptCBC(cipher, key,iv);
+ System.out.println("解密后:"+res);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 根据位数 自动生成密钥
+ *
+ * @return
+ * @explain
+ */
+ public static String generateKey() throws Exception {
+ KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM, BouncyCastleProvider.PROVIDER_NAME);
+ kg.init(DEFAULT_KEY_SIZE, new SecureRandom());
+ byte[] bytes = kg.generateKey().getEncoded();
+ return new String(Hex.encode(bytes));
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/SecurityTools.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/SecurityTools.java
new file mode 100644
index 0000000..fed14ca
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/SecurityTools.java
@@ -0,0 +1,46 @@
+package com.ectrip.cyt.utils;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.util.encoders.Hex;
+
+import javax.crypto.KeyGenerator;
+import java.security.SecureRandom;
+
+public class SecurityTools {
+ /**
+ * 根据位数 自动生成密钥
+ *
+ * @return
+ * @explain
+ */
+ public static String generateKey(String securityType) throws Exception {
+ if(StringUtils.isBlank(securityType)){
+ return "";
+ }else if(securityType.equals(OtaUtils.SECURITY_AES_CBC)){
+ return AesTools.generateKey();
+ }else if(securityType.equals(OtaUtils.SECURITY_SM4_CBC)){
+ return SM4Tools.generateKey();
+ }
+ return "";
+ }
+
+ public static String generatorIv(){
+ // Generate a random IV
+ SecureRandom random = new SecureRandom();
+ byte[] iv = new byte[16]; // AES/CBC/PKCS5Padding requires 16-byte IV
+ random.nextBytes(iv);
+ // Convert the IV to Base64 for easier handling
+ String ivBase64 = Base64.encodeBase64String(iv);
+ return ivBase64;
+ }
+
+ public static byte[] decodeIv(String ivBase64){
+ return Base64.decodeBase64(ivBase64);
+ }
+
+ public static void main(String[] args) throws Exception {
+ System.out.println(generateKey(OtaUtils.SECURITY_SM4_CBC));
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/TestOrderUtils.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/TestOrderUtils.java
new file mode 100644
index 0000000..ba483e7
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/TestOrderUtils.java
@@ -0,0 +1,116 @@
+package com.ectrip.cyt.utils;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+import java.util.UUID;
+
+public class TestOrderUtils {
+ public static String get16UUID() {
+ int machineId = 1;
+ int hashCodeV = UUID.randomUUID().toString().hashCode();
+ if (hashCodeV < 0) {
+ hashCodeV = -hashCodeV;
+ }
+ return machineId + String.format("%015d", hashCodeV);
+ }
+ static final int cities [] = {
+ 350602, 370782, 513431, 532624, 530426, 370203, 350128, 421002, 350624, 430225, 360300, 350203, 220211, 420822, 530625, 653126, 420203, 220182, 230603, 533323, 430121, 621225, 652827, 511500, 450205, 652824, 411402, 440781, 469022, 370214, 542521, 433101, 460100, 530381, 411722, 533400, 110229, 640300, 210700, 450127, 440105, 530828, 120000, 420000, 211402, 341823, 220402, 330500, 371324, 150500, 150927, 321284, 230231, 150926, 630123, 341700, 441400, 542330, 370684, 370828, 654326, 610831, 140300, 350581, 421182, 421200, 341124, 371423, 445302, 513225, 532522, 469026, 450102, 433130, 222406, 511325, 410328, 210422, 430405, 341100, 140212, 445222, 350403, 430521, 520111, 652924, 522201, 542327, 110103, 530826, 630122, 610527, 330481, 522424, 820000, 231081, 410103, 431223, 230524, 441284, 500226, 152524, 211382, 530300, 411102, 410727, 152223, 451200, 610203, 230805, 500116, 341222, 420324, 610500, 141128, 371202, 140426, 510181, 341021, 340421, 130623, 152529, 130626, 530902, 220102, 532801, 220183, 632122, 371622, 140721, 340121, 420503, 632524, 610327, 130500, 152923, 150422, 420528, 140221, 430502, 610921, 422822, 130627, 430105, 410926, 340603, 510321, 211202, 522729, 653100, 421123, 310104, 341282, 410602, 510304, 230712, 320481, 532627, 610800, 610522, 360829, 410105, 410106, 431126, 330127, 131126, 350428, 130930, 430621, 130724, 450681, 411381, 130208, 411200, 522327, 640105, 321282, 632323, 371481, 420800, 621124, 341825, 340300, 450923, 530500, 411423, 150302, 530821, 140802, 310115, 410203, 420116, 371724, 430922, 130800, 150502, 210711, 230207, 511529, 530325, 320402, 542300, 140723, 542221, 511800, 150430, 440700, 220421, 350181, 520329, 350784, 440115, 330304, 411221, 510107, 360803, 520221, 350603, 421003, 411522, 150205, 220503, 620421, 370303, 451031, 150525, 360700, 340711, 620403, 610924, 500117, 542626, 511922, 620800, 450123, 533123, 320900, 410423, 330902, 451002, 623027, 620923, 220204, 420923, 210922, 150429, 150929, 420684, 610427, 150624, 340702, 360313, 320300, 320600, 431228, 621000, 370323, 530421, 640104, 370503, 533421, 420102, 371428, 220105, 350981, 370113, 230503, 130925, 231025, 620300, 341524, 130127, 231200, 130224, 420606, 652922, 371426, 130402, 140826, 511304, 610724, 511823, 542100, 510303, 440113, 500114, 542337, 451381, 513336, 441427, 450311, 630105, 361122, 610829, 360425, 130128, 350105, 511525, 220202, 632724, 350205, 310112, 640303, 623023, 140726, 513229, 330103, 420204, 140725, 350500, 511826, 211322, 630102, 230822, 653022, 130426, 371121, 632200, 640521, 621100, 511524, 130803, 130982, 451202, 350600, 450324, 130424, 510800, 640324, 131028, 450305, 340828, 140423, 654028, 110114, 340503, 653128, 610823, 510184, 310105, 542622, 610821, 511602, 522730, 331000, 360100, 410421, 450107, 150826, 610525, 140922, 140107, 632522, 130283, 130121, 130431, 632523, 430223, 530112, 361023, 361181, 411421, 340302, 654325, 360733, 370322, 450126, 632721, 320924, 430321, 532625, 652927, 440523, 230302, 511702, 361025, 150725, 360731, 321183, 451024, 440404, 320205, 321302, 370306, 371322, 510311, 360102, 431124, 410883, 500238, 230110, 522422, 331123, 411403, 522229, 520424, 510682, 320000, 231102, 652101, 371000, 130107, 420527, 542121, 500112, 150425, 140225, 341623, 331100, 430522, 540123, 500000, 652923, 130726, 150223, 420529, 440783, 530921, 211003, 320281, 513223, 530700, 450400, 331004, 410303, 511681, 640205, 640424, 620821, 441424, 530522, 630000, 370634, 360726, 230604, 150523, 371302, 340323, 141023, 220581, 610431, 610524, 220724, 150922, 410600, 211103, 440800, 632222, 230505, 330211, 360721, 130406, 522627, 422826, 220122, 210882, 230826, 530102, 130921, 469002, 360424, 340123, 220502, 120112, 450422, 370830, 152201, 320107, 361028, 510104, 440923, 654000, 330621, 141034, 450803, 510727, 621222, 530000, 610825, 610302, 510400, 450109, 441202, 429021, 654201, 211300, 140624, 360302, 511528, 130108, 532527, 652826, 520303, 530825, 330322, 511600, 430281, 340406, 230624, 522223, 500235, 220281, 411503, 610322, 411330, 533100, 210122, 411726, 341102, 220181, 530626, 130826, 411622, 232722, 340825, 230102, 441500, 360826, 420111, 141082, 141182, 231281, 620200, 441581, 431129, 440183, 130604, 220800, 532329, 620321, 610526, 510000, 411224, 621022, 130428, 340521, 130205, 421087, 532621, 130628, 310118, 440902, 510502, 321000, 420583, 130804, 542522, 360103, 410800, 420113, 530829, 532524, 421125, 542301, 513424, 460107, 320830, 421000, 513230, 331024, 360222, 220303, 530602, 511522, 130823, 441802, 420881, 330200, 330727, 361124, 530113, 330803, 440114, 210211, 430726, 152526, 533321, 460000, 510600, 411282, 420281, 500118, 522625, 350426, 150522, 330382, 530424, 611023, 130532, 231084, 469031, 150300, 210600, 341302, 130185, 320400, 450330, 445102, 150404, 420506, 410311, 411623, 522401, 440803, 421022, 320114, 451226, 211421, 611024, 360200, 410700, 150222, 371203, 360123, 320703, 210282, 320322, 211221, 433100, 623025, 350505, 330108, 230803, 360732, 510124, 510302, 420106, 430211, 330183, 420205, 640323, 140224, 653226, 321102, 420984, 330424, 441882, 210800, 340500, 140932, 510703, 522631, 230127, 420582, 211302, 330503, 500242, 652302, 371626, 433123, 520321, 210900, 652900, 410184, 654221, 330881, 371081, 410104, 370829, 150104, 450521, 441223, 420600, 460106, 433125, 130630, 370211, 520114, 451423, 230381, 231085, 360321, 340223, 430412, 410811, 130303, 542127, 632621, 220103, 610830, 211121, 650106, 451324, 654322, 430224, 610626, 341821, 150981, 421023, 430203, 441827, 653201, 411000, 211081, 632127, 610624, 370321, 130638, 532530, 210204, 451321, 510525, 140924, 330326, 230203, 520328, 321081, 330782, 350583, 510623, 621025, 622926, 450222, 610404, 431322, 350123, 611021, 371400, 360900, 131023, 360111, 370902, 440281, 131081, 150421, 330329, 340104, 140200, 520200, 610822, 370700, 411600, 341721, 210811, 230705, 341502, 522623, 220622, 130184, 152200, 542424, 130200, 130730, 130400, 430721, 431026, 230902, 140729, 152502, 130522, 652925, 450303, 632626, 350504, 230100, 211011, 530428, 451030, 610422, 450405, 532327, 310108, 371327, 210100, 500113, 371102, 410221, 511821, 542122, 360122, 610828, 350721, 450502, 445321, 511825, 140108, 320504, 513432, 371325, 610623, 431202, 330825, 511725, 150621, 511129, 350623, 430682, 511133, 150103, 110116, 152202, 350481, 451425, 420504, 440300, 522425, 360823, 510403, 620103, 320382, 632722, 421024, 410326, 450421, 220882, 350724, 542329, 370900, 610304, 230500, 341800, 341000, 230882, 610622, 522626, 653124, 230700, 431123, 450122, 620402, 370523, 532628, 451227, 620422, 320721, 210681, 451302, 230707, 130525, 210727, 341421, 420922, 110109, 410402, 350925, 640400, 371122, 450100, 513430, 231224, 433122, 230208, 610727, 610303, 140226, 140429, 330102, 653225, 632726, 522230, 542125, 230703, 341723, 130207, 532502, 620724, 530321, 469028, 131128, 320115, 610402, 320723, 610328, 231002, 140702, 330683, 371312, 230421, 411121, 211303, 410922, 441624, 220700, 370405, 420300, 220282, 370784, 632625, 430529, 510524, 141123, 650200, 140430, 361123, 110000, 370283, 430124, 141181, 420105, 330122, 150100, 511521, 431122, 440308, 222424, 330903, 130625, 210102, 610423, 632624, 513200, 513231, 610521, 440229, 130727, 230230, 210202, 511621, 130404, 520422, 430681, 510521, 532532, 410204, 532323, 130126, 411625, 511100, 320623, 530822, 420381, 350423, 654202, 512022, 220702, 361030, 230711, 210111, 530128, 431302, 341321, 532328, 542334, 140121, 542523, 320507, 620902, 450221, 370612, 410724, 520122, 131182, 431002, 321300, 610502, 522222, 621121, 210403, 370284, 522300, 210423, 420302, 450602, 530326, 350902, 530722, 350781, 330109, 310230, 522723, 610326, 320111, 620822, 350525, 510823, 450981, 630100, 500240, 320305, 361128, 361024, 232700, 341023, 350782, 650202, 532926, 610103, 610923, 350200, 141028, 450512, 513332, 411721, 441481, 431381, 511000, 440205, 430703, 522325, 361129, 130132, 350924, 610632, 131121, 350211, 140421, 421100, 410803, 510626, 321181, 150428, 530624, 361027, 450902, 331082, 360921, 222403, 340881, 231182, 431025, 610926, 511400, 420625, 140322, 370786, 710000, 522328, 370304, 620121, 371523, 420683, 450702, 540124, 360428, 420505, 140105, 411323, 430921, 450921, 320206, 140223, 320506, 620623, 370212, 441200, 360983, 310120, 410400, 430423, 371723, 530422, 320724, 513325, 441324, 530600, 370400, 230722, 610728, 513335, 620982, 110107, 350429, 623021, 230708, 371328, 131082, 441825, 370783, 610400, 140781, 421122, 430300, 513429, 522634, 350825, 500115, 210504, 130722, 430923, 370686, 422827, 141030, 420802, 140603, 422828, 140923, 131026, 542200, 220623, 141027, 360203, 222402, 350824, 513331, 632801, 430603, 140823, 440513, 110102, 120225, 610429, 610826, 350430, 542231, 532531, 420100, 441881, 450200, 532525, 621002, 440606, 511822, 370681, 500101, 371326, 430100, 410900, 532822, 130824, 441226, 410482, 370831, 210321, 513427, 340404, 420104, 610621, 371700, 530622, 511421, 140500, 140829, 371103, 650100, 460108, 360600, 370881, 361021, 371082, 522732, 542226, 150800, 210323, 532301, 430722, 441625, 622901, 371425, 513333, 411321, 440811, 130721, 533325, 530111, 410782, 430624, 210702, 130130, 421222, 411327, 130624, 230108, 231222, 610582, 430981, 410224, 610700, 360830, 130705, 530802, 361125, 220106, 542427, 320411, 652926, 210903, 120223, 330682, 140600, 430700, 411602, 430702, 371726, 440282, 440982, 540122, 360827, 653121, 230715, 530323, 620721, 141031, 610112, 140902, 130183, 622923, 371625, 210603, 532325, 532500, 321100, 320113, 411023, 652122, 513434, 320321, 510105, 430304, 330104, 361127, 440608, 230123, 520112, 542129, 350122, 632128, 654300, 130635, 410381, 650105, 370205, 410181, 511181, 211321, 130733, 542128, 445323, 450821, 621221, 361000, 450329, 360622, 340207, 522428, 530827, 141130, 610631, 620111, 410000, 210522, 220104, 130631, 610102, 140825, 230710, 341702, 650103, 150727, 320802, 542126, 445122, 532528, 522722, 130433, 140921, 522725, 320684, 522200, 440605, 370685, 510903, 652825, 441521, 310103, 320103, 220221, 410711, 623026, 370124, 532600, 130421, 230111, 445100, 320505, 350104, 542422, 230621, 520421, 220323, 130302, 520302, 320405, 331021, 411624, 130203, 469027, 152523, 130133, 542338, 441323, 620500, 420981, 150221, 360782, 150802, 411082, 141100, 610323, 130923, 430611, 360423, 620722, 330206, 640381, 620700, 150921, 370406, 654002, 540127, 410222, 330411, 130629, 510802, 511025, 130322, 450000, 451402, 420321, 150124, 610723, 120110, 371100, 370000, 522601, 150823, 230206, 361026, 610000, 310114, 130223, 530924, 141021, 360802, 420902, 542623, 430725, 451300, 130125, 450332, 632700, 469033, 411329, 530721, 430406, 130637, 331023, 420114, 622921, 150822, 530630, 632725, 421221, 610104, 320705, 370481, 440400, 621126, 530328, 513437, 220723, 450105, 140728, 510812, 230605, 350722, 441623, 520121, 410325, 500236, 140727, 131181, 610116, 370403, 210000, 410411, 469023, 130100, 410122, 410523, 411681, 140122, 360730, 330324, 510421, 320700, 350527, 371500, 440402, 640302, 411024, 500107, 320124, 370921, 370682, 230225, 530900, 530124, 532523, 810000, 371422, 511527, 620823, 411081, 411724, 430822, 340403, 330802, 421083, 421281, 130928, 430811, 210802, 522624, 445281, 520102, 140927, 150625, 511523, 420325, 513330, 140623, 410324, 440825, 431221, 654003, 445300, 341004, 130521, 340208, 410802, 440000, 410183, 422823, 542222, 522426, 621200, 150928, 210803, 650203, 654301, 320903, 341422, 430202, 632121, 650204, 430524, 130481, 542430, 130981, 320324, 210400, 330381, 230183, 431128, 653130, 130929, 321088, 431127, 320921, 330824, 420322, 640181, 530126, 120111, 320804, 371321, 140621, 530628, 150304, 230300, 510114, 542331, 370826, 230704, 610426, 430511, 341622, 430602, 350821, 445202, 371323, 451229, 652829, 533423, 210283, 450600, 230321, 130523, 620100, 530400, 321322, 610824, 451027, 321011, 654223, 410725, 441300, 620522, 411729, 370882, 370785, 520113, 360430, 440233, 542524, 610329, 520325, 110112, 520203, 640122, 659001, 331126, 632822, 361126, 610222, 371524, 231004, 140181, 370305, 350926, 330282, 469006, 610114, 150303, 420624, 340321, 350400, 430421, 430781, 610204, 130534, 451400, 450500, 440785, 340405, 450300, 231000, 410200, 511111, 131003, 620922, 659004, 611000, 610100, 321111, 410825, 542333, 340811, 410225, 532324, 420804, 650205, 640100, 411324, 230804, 140425, 150627, 341802, 130530, 469007, 321023, 652300, 360426, 370213, 411525, 370704, 371424, 542124, 542133, 150200, 542527, 130634, 110104, 230184, 150423, 370102, 421121, 511028, 652328, 130123, 440604, 130535, 210726, 130432, 130706, 232723, 130229, 621228, 320323, 632622, 640121, 230304, 430424, 621224, 610702, 450223, 513224, 330783, 320800, 231202, 510723, 530621, 211422, 530129, 451026, 341221, 152531, 330600, 441900, 340803, 451102, 210213, 622922, 150700, 152221, 320482, 141033, 230900, 230124, 530103, 440222, 451025, 320582, 511902, 210604, 230422, 341822, 410108, 431027, 451225, 130723, 370200, 442000, 652123, 410526, 152530, 520402, 140424, 430381, 500225, 610902, 410302, 440983, 500232, 130225, 440512, 440232, 621026, 410182, 330900, 230221, 361022, 513401, 130300, 411727, 360429, 440802, 610929, 650121, 532927, 230523, 421102, 530925, 360727, 513300, 610722, 654023, 210505, 411122, 321324, 441423, 140123, 469000, 141122, 152900, 371525, 140830, 500233, 211102, 220881, 140722, 150821, 130527, 150207, 620981, 441203, 360728, 653224, 532331, 450503, 330212, 532823, 611002, 620702, 542332, 130429, 130430, 350723, 632600, 542624, 542526, 450226, 130632, 510725, 650107, 230903, 350402, 411100, 360403, 512081, 542132, 152921, 340400, 420500, 450721, 450722, 370112, 530823, 340602, 650104, 340700, 370125, 542232, 530423, 430103, 420700, 540121, 610481, 350305, 330602, 469029, 440882, 220822, 341225, 371721, 130822, 610802, 522726, 511722, 210300, 533124, 653123, 150924, 341003, 532322, 420525, 340800, 370285, 640200, 513433, 350923, 410702, 620621, 130529, 371600, 510724, 610625, 310116, 510122, 410306, 130984, 230904, 130321, 420117, 430426, 542225, 310109, 152522, 411104, 500231, 632802, 340122, 150902, 513328, 410425, 632221, 520330, 532526, 542425, 652100, 532932, 431300, 230702, 420682, 152222, 441426, 320502, 350503, 370687, 510106, 440600, 120115, 652800, 130304, 152525, 451222, 330182, 610126, 340304, 659003, 320200, 430382, 340504, 350425, 640422, 130000, 130423, 522633, 150923, 410928, 320811, 330681, 350900, 130204, 330784, 441602, 360322, 360502, 430581, 440305, 632300, 510704, 610428, 652928, 230128, 220721, 430723, 652929, 210411, 411723, 330110, 140106, 350783, 220722, 410422, 340823, 220300, 632800, 320105, 330522, 230223, 510683, 542123, 360781, 110106, 513322, 360923, 640106, 441823, 542400, 411502, 370602, 610122, 451023, 451481, 320923, 654200, 371502, 532922, 130202, 150526, 542336, 411425, 131002, 371623, 530502, 220582, 370703, 210112, 530922, 653122, 654021, 654022, 500109, 330303, 320585, 450403, 150723, 411728, 341125, 441700, 420581, 420626, 532623, 411500, 620924, 210224, 623022, 421224, 513221, 321323, 632123, 430821, 340621, 371522, 511102, 440306, 500111, 450881, 140900, 611025, 632525, 440511, 622924, 140400, 411103, 141081, 421181, 510811, 441303, 230306, 371402, 230303, 440224, 320826, 410923, 431081, 360724, 411002, 410102, 630104, 522622, 211282, 152528, 654024, 510108, 532326, 429006, 150125, 530181, 211481, 510182, 610528, 650109, 210781, 330300, 370404, 230716, 340822, 220100, 211005, 421126, 350100, 411481, 350524, 542627, 469021, 152224, 320621, 330502, 410527, 420112, 430481, 513323, 652200, 130636, 230407, 130582, 140321, 620600, 360800, 420921, 140100, 411422, 340802, 220284, 350921, 341024, 469003, 410726, 110117, 230307, 510921, 341522, 510132, 440903, 420526, 150900, 130633, 230281, 654025, 231024, 522224, 620400, 510411, 542335, 320211, 410500, 610730, 510300, 510681, 410223, 620104, 150400, 530402, 340000, 141125, 341402, 542421, 350700, 150782, 654321, 420222, 420821, 500241, 410505, 513329, 222400, 522632, 360725, 371200, 310117, 140800, 320503, 371728, 320381, 331122, 230600, 321182, 450302, 360926, 621021, 231005, 141002, 513428, 422801, 220521, 341503, 130903, 621024, 210113, 320202, 640202, 110113, 654027, 650000, 421124, 320304, 340102, 350303, 360602, 140929, 340311, 520327, 421202, 533122, 621102, 620000, 623001, 420107, 610726, 440106, 440100, 451000, 431028, 430400, 610430, 653125, 530723, 653200, 141121, 230200, 532925, 542233, 131100, 410581, 530322, 130926, 320682, 141102, 130181, 130621, 320611, 130983, 131025, 230781, 371482, 533324, 512000, 210503, 430221, 650201, 520181, 441781, 230400, 410404, 371526, 321202, 152527, 371521, 341181, 330921, 340604, 370923, 410704, 510522, 620824, 120105, 510900, 140622, 621023, 130227, 513334, 340200, 370302, 230125, 130182, 540125, 422825, 431230, 441302, 410822, 220681, 130324, 620826, 210181, 511781, 522728, 650102, 522600, 321112, 411281, 150602, 210203, 320829, 330726, 411725, 411523, 130703, 530425, 430122, 411527, 652722, 410728, 440804, 500106, 440900, 513233, 211404, 540000, 370725, 130425, 231121, 500103, 510781, 350111, 130683, 341400, 431022, 441702, 420103, 510504, 211122, 321084, 522727, 610324, 431003, 150206, 450922, 431102, 450224, 360922, 469005, 341521, 429004, 510700, 150783, 410211, 231100, 130524, 130528, 522225, 350213, 230713, 640221, 512002, 511402, 150724, 451224, 141022, 522226, 361100, 370521, 450423, 530324, 360824, 360500, 420702, 130732, 140928, 131022, 451228, 330402, 341203, 350625, 341002, 654225, 410403, 510821, 130827, 522629, 630103, 411325, 370832, 360734, 340111, 542600, 320584, 542328, 500102, 430407, 371727, 410506, 520323, 430302, 450481, 653127, 230714, 140222, 610725, 433126, 150600, 330100, 222404, 141026, 110101, 469030, 350103, 360681, 522322, 510129, 341200, 220322, 441225, 522630, 610827, 640423, 542223, 211004, 131127, 210281, 140428, 341722, 341103, 632821, 500243, 469001, 231123, 360481, 430500, 640522, 440184, 110111, 361002, 653131, 340703, 360729, 370983, 431121, 511123, 320100, 211223, 141025, 522423, 130434, 441422, 532928, 210402, 410781, 513400, 150825, 610331, 441821, 441502, 360825, 440500, 331003, 371624, 370126, 130922, 140211, 350702, 542228, 652901, 410304, 652723, 440104, 150121, 360521, 430104, 450321, 610424, 522702, 320412, 411303, 450124, 510322, 654226, 440103, 451323, 520123, 340303, 520322, 140881, 429005, 411700, 140581, 451021, 620523, 530926, 140981, 451028, 360202, 370300, 411025, 140602, 140524, 150781, 230706, 500237, 610900, 130581, 653101, 320925, 331102, 360881, 542429, 610928, 330203, 450700, 652700, 450802, 210602, 211381, 220602, 451424, 330483, 430528, 441402, 511622, 430111, 420602, 220400, 231221, 360281, 441800, 510402, 130700, 430800, 530627, 652327, 621227, 210421, 330723, 610425, 431224, 120103, 522636, 450804, 230202, 511126, 220422, 150626, 220802, 230305, 441224, 430408, 231083, 371427, 350822, 610628, 500200, 350212, 350000, 210304, 130825, 430626, 231003, 371311, 140110, 230227, 410927, 450621, 230229, 430802, 411626, 440307, 361029, 210804, 621122, 320203, 410603, 130900, 130681, 320583, 411426, 140822, 220605, 320982, 370100, 321003, 441322, 211281, 652223, 371621, 341600, 511300, 610630, 371083, 350124, 230204, 320102, 350521, 542525, 654224, 360735, 450103, 511425, 210911, 513426, 510100, 211403, 150424, 120114, 510121, 532800, 450326, 140522, 210624, 150721, 431100, 330800, 510115, 150123, 450703, 445224, 330105, 330328, 141029, 230406, 350725, 320922, 150403, 360925, 230623, 513326, 513338, 340824, 513232, 430600, 341423, 341424, 150521, 370282, 441283, 320282, 370827, 341324, 420900, 361102, 511424, 330000, 350626, 370281, 511721, 530121, 340203, 321200, 210124, 360121, 532622, 411322, 653024, 140521, 341202, 441600, 522326, 530125, 330226, 511422, 520425, 140427, 210404, 420303, 632521, 150581, 500108, 533300, 230205, 140824, 640402, 511302, 211224, 450924, 451123, 610922, 620524, 530824, 430482, 542426, 422800, 141126, 350622, 320404, 433124, 210104, 430527, 230521, 371300, 231124, 350182, 120221, 431321, 321203, 330283, 440112, 430204, 410202, 430724, 331181, 130927, 542621, 232721, 130924, 130129, 152500, 520100, 341323, 131000, 330523, 331125, 542625, 511024, 513327, 610925, 410300, 220600, 450203, 441721, 431200, 530523, 350982, 411702, 441622, 653000, 370781, 421300, 610581, 522700, 440304, 341122, 410503, 110228, 230800, 640502, 220524, 150785, 511323, 511423, 371581, 320116, 320681, 222405, 341525, 542428, 440116, 430503, 510922, 632100, 130725, 360981, 320104, 450108, 310106, 130728, 330624, 420323, 511923, 522635, 520326, 330400, 340502, 532300, 433127, 421381, 511303, 130702, 500222, 610927, 231223, 130403, 141024, 640000, 431225, 430422, 141129, 630121, 350628, 513436, 620122, 341824, 511124, 460105, 431281, 511322, 530927, 530427, 431024, 653223, 131124, 231283, 640425, 451223, 110108, 140000, 513222, 632321, 340827, 140926, 130435, 320125, 611026, 621123, 220621, 231225, 130427, 230828, 150524, 610111, 610403, 500234, 140525, 520103, 410882, 110115, 540100, 530800, 511526, 230104, 210682, 360821, 410185, 370982, 330482, 361121, 451221, 350424, 340402, 610202, 131122, 211100, 321281, 510503, 370522, 623024, 421081, 210782, 431103, 653023, 130821, 532930, 652823, 510722, 620725, 632224, 410323, 141127, 222426, 469032, 440981, 120113, 513226, 511011, 230709, 320902, 370500, 360124, 532900, 350322, 340202, 532501, 231282, 640500, 341204, 350526, 140930, 411400, 420607, 440784, 520381, 530629, 220500, 542325, 659000, 211400, 440203, 542322, 321002, 411627, 230502, 350800, 620302, 130828, 451121, 411628, 652325, 431226, 520400, 510112, 610721, 150925, 210521, 450603, 140109, 331002, 450800, 522400, 621223, 220000, 340322, 370105, 130729, 210114, 350206, 533422, 371722, 511381, 511724, 542423, 341621, 542229, 230403, 330204, 620825, 350302, 211002, 152501, 320303, 230109, 370800, 340721, 431000, 150702, 211324, 522323, 130682, 419001, 360000, 450331, 140724, 530524, 130684, 360828, 532626, 130533, 140481, 220200, 230833, 522731, 530127, 360402, 441826, 411521, 222401, 140827, 540126, 330521, 532929, 500119, 610602, 340221, 330185, 360421, 610729, 211021, 130531, 411202, 150000, 445121, 410327, 230382, 610330, 510904, 341523, 611022, 620105, 130731, 411528, 150426, 513337, 445221, 350427, 230000, 310101, 410305, 511132, 420703, 360723, 513324, 210502, 360105, 451122, 341226, 500223, 430525, 130230, 330822, 620503, 451281, 220203, 320803, 370502, 610627, 510603, 511502, 610124, 654026, 621226, 321283, 632623, 652222, 131125, 411621, 410322, 440507, 430623, 652301, 513435, 652201, 450900, 420502, 370181, 370705, 371329, 360104, 140931, 410100, 341602, 330702, 410502, 150105, 150623, 451322, 230129, 445200, 510500, 441523, 410821, 211000, 532931, 140821, 450328, 331022, 542323, 140227, 532901, 610113, 512021, 420704, 220821, 140431, 440883, 130526, 610115, 340103, 532923, 410329, 410522, 350823, 430102, 120104, 652801, 620423, 522228, 130600, 654323, 210881, 310000, 620521, 331124, 210200, 130131, 330703, 511112, 622925, 431382, 513321, 632324, 220382, 360400, 320706, 632322, 341022, 610600, 150722, 620622, 360924, 532529, 510726, 431227, 500110, 510113, 320831, 511900, 510923, 371421, 530923, 140828, 430902, 652828, 451421, 450225, 210381, 210905, 620123, 420200, 360427, 431222, 500229, 511321, 520324, 131123, 360902, 440204, 542224, 230405, 141124, 410611, 430903, 210921, 653001, 622900, 440607, 511827, 341322, 350681, 410721, 510824, 530521, 150622, 620900, 370683, 652323, 230606, 450325, 421127, 659002, 530623, 370811, 411424, 410823, 220302, 430523, 511802, 511921, 430200, 231226, 620802, 350582, 445381, 511700, 511623, 230103, 513422, 141000, 411526, 610523, 370613, 210904, 450322, 210703, 632723, 331127, 150726, 350629, 620525, 371725, 530100, 230602, 520382, 510822, 511824, 130281, 430900, 341500, 150784, 310110, 210123, 371602, 542227, 411300, 440515, 220381, 361130, 410902, 520201, 451422, 130603, 500105, 500230, 440703, 230182, 440303, 330421, 450304, 522324, 441723, 653221, 350802, 431229, 220112, 370600, 230921, 210500, 450327, 469025, 341300, 411302, 632823, 513227, 440823, 511723, 653129, 410621, 430000, 620602, 350922, 513423, 131102, 632126, 140925, 410703, 440705, 411328, 130622, 621125, 341182, 410804, 120106, 500104, 520423, 653222, 430181, 445322, 450204, 350502, 230224, 620921, 370202, 370883, 330700, 410205, 320981, 350300, 370724, 320311, 450404, 130124, 150203, 140700, 331121, 530724, 622927, 542324, 230126, 511113, 620502, 653227, 140303, 230622, 360323, 610125, 230881, 610629, 350627, 510183, 150122, 210103, 341881, 371702, 340222, 360702, 230522, 520222, 330225, 520000, 320581, 530122, 140882, 511324, 371002, 370611, 440514, 513425, 620723, 533103, 441621, 411326, 522227, 500224, 141032, 331081, 320722, 360982, 220283, 130323, 231181, 421223, 522628, 450125, 350421, 370911, 350125, 440403, 652324, 469024, 411222, 533102, 422802, 210212, 510422, 150402, 152922, 431023, 522427, 610300, 340826, 360722, 370104, 530302, 654324, 330281, 421303, 623000, 632500, 210311, 460200, 441421, 500227, 150824, 510131, 410481, 310113, 321311, 150202, 131024, 340600, 652701, 420982, 431125, 652822, 370702, 330302, 330327, 431021, 330922, 522301, 532924, 211200, 350881, 542326, 360822, 620102, 542500, 621202, 621027, 450323, 440200, 420202, 500228, 520300, 340100, 220523, 440704, 320500, 320204, 210105, 330781, 451022, 451029, 632223, 513228, 411524, 341126, 451100, 530702, 440881, 410622, 350121, 420115, 610200, 350304, 320602, 522701
+ };
+
+ public static String getIdNo(boolean male){
+ //随机生成生日 1~99岁
+ long begin = System.currentTimeMillis() - 3153600000000L;//100年内
+ long end = System.currentTimeMillis() - 31536000000L; //1年内
+ long rtn = begin + (long) (Math.random() * (end - begin));
+ Date date = new Date(rtn);
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
+ String birth = simpleDateFormat.format(date);
+ return getIdNo(birth,male);
+ }
+
+ public static String getIdNo(String birth,boolean male){
+ StringBuilder sb = new StringBuilder();
+ Random random = new Random();
+ int value = random.nextInt(cities.length);
+ sb.append(cities[value]);
+ sb.append(birth);
+ value = random.nextInt(999) + 1;
+ if(male && value % 2 == 0){
+ value++;
+ }
+ if(!male && value % 2 == 1){
+ value++;
+ }
+ if(value >= 100){
+ sb.append(value);
+ }else if(value >= 10){
+ sb.append('0').append(value);
+ }else{
+ sb.append("00").append(value);
+ }
+ sb.append(calcTrailingNumber(sb));
+ return sb.toString();
+ }
+ private static final int[] calcC = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
+ private static final char[] calcR = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
+ private static char calcTrailingNumber(StringBuilder sb) {
+ int[] n = new int[17];
+ int result = 0;
+ for (int i = 0; i < n.length; i++) {
+ n[i] = Integer.parseInt(String.valueOf(sb.charAt(i)));
+ }
+ for (int i = 0; i < n.length; i++) {
+ result += calcC[i] * n[i];
+ }
+ return calcR[result % 11];
+ }
+ //中国移动
+ public static final String[] CHINA_MOBILE = {
+ "134", "135", "136", "137", "138", "139",
+ "150", "151", "152", "157", "158", "159",
+ "182", "183", "184", "187", "188", "178", "147", "172", "198"
+ };
+ //中国联通
+ public static final String[] CHINA_UNICOM = {
+ "130", "131", "132", "145", "155", "156", "166", "171", "175", "176", "185", "186", "166"
+ };
+ //中国电信
+ public static final String[] CHINA_TELECOME = {
+ "133", "149", "153", "173", "177", "180", "181", "189", "199"
+ };
+ public static String createMobile(int op) {
+ StringBuilder sb = new StringBuilder();
+ Random random = new Random();
+ String mobile01;//手机号前三位
+ int temp;
+ switch (op) {
+ case 0:
+ mobile01 = CHINA_MOBILE[random.nextInt(CHINA_MOBILE.length)];
+ break;
+ case 1:
+ mobile01 = CHINA_UNICOM[random.nextInt(CHINA_UNICOM.length)];
+ break;
+ case 2:
+ mobile01 = CHINA_TELECOME[random.nextInt(CHINA_TELECOME.length)];
+ break;
+ default:
+ mobile01 = "op标志位有误!";
+ break;
+ }
+ if (mobile01.length() > 3) {
+ return mobile01;
+
+ }
+ sb.append(mobile01);
+ //生成手机号后8位
+ for (int i = 0; i < 8; i++) {
+ temp = random.nextInt(10);
+
+ sb.append(temp);
+
+ }
+ return sb.toString();
+ }
+
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/UTF8PostMethod.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/UTF8PostMethod.java
new file mode 100644
index 0000000..eba916c
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/UTF8PostMethod.java
@@ -0,0 +1,19 @@
+package com.ectrip.cyt.utils;
+
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.methods.PostMethod;
+
+public class UTF8PostMethod extends PostMethod {
+
+ /**
+ * Creates a new instance of UTF8PostMethod
+ */
+ public UTF8PostMethod(String string) {
+ super(string);
+ }
+
+ protected String getContentCharSet(Header contentheader) {
+ return "UTF-8";
+ }
+}
+
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/UUIDTools.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/UUIDTools.java
new file mode 100644
index 0000000..0d4ce50
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/UUIDTools.java
@@ -0,0 +1,14 @@
+package com.ectrip.cyt.utils;
+
+import java.util.UUID;
+
+public class UUIDTools {
+ public static String get16UUID() {
+ int machineId = 1;//最大支持1-9个集群机器部署
+ int hashCodeV = UUID.randomUUID().toString().hashCode();
+ if(hashCodeV < 0) {//有可能是负数
+ hashCodeV = - hashCodeV;
+ }
+ return machineId + String.format("%015d", hashCodeV);
+ }
+}
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/XmlHeaderParam.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/XmlHeaderParam.java
new file mode 100644
index 0000000..d841b7e
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/XmlHeaderParam.java
@@ -0,0 +1,61 @@
+package com.ectrip.cyt.utils;
+
+/**
+ * 用作XML转换的头信息参数传递(区分于OTA)
+ *
+ * @author huhaopeng
+ */
+public class XmlHeaderParam {
+ private String namespaceRequest;
+ private String namespaceResponse;
+ private String attributeXsi;
+ private String attributeXmlns;
+
+ public XmlHeaderParam() {
+
+ }
+
+ public XmlHeaderParam(String namespaceRequest, String namespaceResponse,
+ String attributeXsi, String attributeXmlns) {
+ super();
+ this.namespaceRequest = namespaceRequest;
+ this.namespaceResponse = namespaceResponse;
+ this.attributeXsi = attributeXsi;
+ this.attributeXmlns = attributeXmlns;
+ }
+
+
+ public String getNamespaceRequest() {
+ return namespaceRequest;
+ }
+
+ public void setNamespaceRequest(String namespaceRequest) {
+ this.namespaceRequest = namespaceRequest;
+ }
+
+ public String getNamespaceResponse() {
+ return namespaceResponse;
+ }
+
+ public void setNamespaceResponse(String namespaceResponse) {
+ this.namespaceResponse = namespaceResponse;
+ }
+
+ public String getAttributeXsi() {
+ return attributeXsi;
+ }
+
+ public void setAttributeXsi(String attributeXsi) {
+ this.attributeXsi = attributeXsi;
+ }
+
+ public String getAttributeXmlns() {
+ return attributeXmlns;
+ }
+
+ public void setAttributeXmlns(String attributeXmlns) {
+ this.attributeXmlns = attributeXmlns;
+ }
+
+}
+
diff --git b/zhyx-api/src/main/java/com/ectrip/cyt/utils/XmlParseUtil.java a/zhyx-api/src/main/java/com/ectrip/cyt/utils/XmlParseUtil.java
new file mode 100644
index 0000000..8b88b1c
--- /dev/null
+++ a/zhyx-api/src/main/java/com/ectrip/cyt/utils/XmlParseUtil.java
@@ -0,0 +1,340 @@
+package com.ectrip.cyt.utils;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.io.OutputFormat;
+import org.dom4j.io.XMLWriter;
+
+import java.beans.PropertyDescriptor;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.*;
+
+/**
+ * 解析XML公用类:支持多重内部类解析 dom4j 支持
+ *
+ * @author huhaopeng
+ */
+public class XmlParseUtil {
+
+ /**
+ * JAVA Bean 转换 XML 字符串 Describe:
+ *
+ * @param obj Object 传入 Body
+ * @param header Object 传入 Header
+ * @param paramName String OTA区分标识 ( qunar, ectrip )
+ * @author:huhaopeng
+ * @注: header 需要传入 application, processor, createUser return:void
+ * Date:2014-2-21
+ */
+ @SuppressWarnings({"finally", "deprecation"})
+ public static String beanToXML(final Object obj, final Object header,
+ String paramName) throws Exception {
+ // 获取头信息
+ XmlHeaderParam param = getXmlHeaderParam(paramName);
+
+ // className:类全名
+ String clsName = obj.getClass().getName();
+ // 去掉类全名前面不需要的:例如 cn.xml.Context -> Context
+ clsName = clsName.substring(clsName.lastIndexOf(".") + 1, clsName
+ .length());
+
+ // 根据类名生成root
+ Document doc = DocumentHelper.createDocument();
+ // doc.addComment("Sample XML file generated by XMLSpy v2013 (http://www.altova.com)");
+ // 添加根节点:
+ Element root = null;
+ if (clsName.indexOf("Request") != -1) {
+ root = doc.addElement("qm:request");
+ root.addNamespace("qm", param.getNamespaceRequest());
+ root.addAttribute("xsi:schemaLocation", param.getAttributeXsi());
+ root.addAttribute("xmlns:xsi", param.getAttributeXmlns());
+ } else if (clsName.indexOf("Response") != -1) {
+ root = doc.addElement("qm:response");
+ root.addNamespace("qm", param.getNamespaceResponse());
+ root.addAttribute("xsi:schemaLocation", param.getAttributeXsi());
+ root.addAttribute("xmlns:xsi", param.getAttributeXmlns());
+ }
+
+ // 添加Header
+ Element head = root.addElement("qm:header");
+
+ complexTypeRecursive(header, head);
+
+ Element body = root.addElement("qm:body");
+
+ body.setAttributeValue("xsi:type", "qm:" + clsName);
+ // bean属性
+ complexTypeRecursive(obj, body);
+
+ // 生成xml:String
+ XMLWriter xw;
+ StringWriter sw = new StringWriter();
+ OutputFormat opf;
+ String result = null;
+ try {
+ opf = OutputFormat.createCompactFormat();
+ opf.setEncoding("UTF-8");
+ xw = new XMLWriter(sw);
+ xw.write(doc);
+ result = sw.toString();
+ xw.close();
+ sw.close();
+
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ return result;
+ }
+
+ }
+
+ /**
+ * 递归: 获取 复杂类型 树结构方法。 Describe: objectToXML() use
+ *
+ * @param obj : Object(此节点对应对象)
+ * @param element : Element(此节点) return:void Date:2014-2-21
+ * @author:huhaopeng
+ */
+ @SuppressWarnings("unchecked")
+ public static void complexTypeRecursive(Object obj, Element element) {
+ Class cls = obj.getClass();
+ String objName = cls.getSimpleName();
+
+ // getDeclaredFields:获取bean中所有属性
+ Field[] fields = cls.getDeclaredFields();
+ String fieldName = "";
+ if ("String".equals(objName)) {
+ element.setText(obj.toString());
+ } else {
+ for (Field f : fields) {
+ f.setAccessible(true);
+ fieldName = f.getName();
+
+ try {
+
+ PropertyDescriptor pd = new PropertyDescriptor(fieldName, cls);
+ Method getMethod = pd.getReadMethod();// 获得get方法
+ // 当前对象:o
+ Object o = getMethod.invoke(obj);// 执行get方法返回一个Object
+
+ // 判断是否为list属性
+ if ((".List").equals(f.getType().toString().substring(
+ f.getType().toString().lastIndexOf(".")))) {
+ List list = (ArrayList) o;
+ for (Object ob : list) {
+ Element emt = element.addElement("qm:" + fieldName);
+ complexTypeRecursive(ob, emt);
+ }
+ } else {
+ Element emt = element.addElement("qm:" + fieldName);
+ // 判断下个节点是否需要:为null说明不用加入xml中
+ if (null != o) {
+ // 判断节点o是否为基础类型:if(基础类型)else(非基础类型)
+ if ("java".equals(o.getClass().getName()
+ .substring(0, 4))) {
+ emt.setText(o.toString());
+ } else {
+ // 递归调用
+ complexTypeRecursive(o, emt);
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * XML 转换 为 JACA BEAN Describe: bodyInfo 对应类中所有属性必须已经实例化,不能为NULL
+ *
+ * @param xml String
+ * @param bodyInfo Object
+ * @return return:Map Date:2014-2-22
+ * @author:huhaopeng
+ */
+ public static Map xmlToBean(String xml, Object header, Object bodyInfo)
+ throws Exception {
+ Map map = new HashMap();
+ Document doc;
+ try {
+ doc = DocumentHelper.parseText(xml); // 将字符串转为XML
+ Element root = doc.getRootElement(); // 获取根节点
+ Iterator rootIter = root.elementIterator();// 获取根节点下的子节点head
+
+ Iterator headerIter = ((Element) rootIter.next()).elementIterator();
+ Iterator bodyIter = ((Element) rootIter.next()).elementIterator();
+
+ // Header: 递归塞值
+ complexTypeRecursiveXmlToBean(header, headerIter);
+ map.put("header", header);// map.put("header", rqstHeader);
+
+ // Body: 递归塞值
+ complexTypeRecursiveXmlToBean(bodyInfo, bodyIter);
+ map.put("body", bodyInfo);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw e;
+ }
+ return map;
+ }
+
+ /**
+ * 请求的 Header xml 转 bean
+ * Describe:
+ *
+ * @param xml Header xml字符串
+ * @param header header格式
+ * @return return:String
+ * Date:2014-5-9
+ * @author:huhaopeng
+ */
+ public static Object requestHeaderXmlTobean(String xml, Object header) {
+ Document doc = null;
+
+ try {
+ doc = DocumentHelper.parseText(xml); // 将字符串转为XML
+
+ Element root = doc.getRootElement(); // 获取根节点
+ Iterator rootIter = root.elementIterator();
+ // 获取根节点下的子节点head
+ Iterator headerIter = ((Element) rootIter.next()).elementIterator();
+ //Iterator bodyIter = ((Element) rootIter.next()).elementIterator();
+
+ // Header: 递归塞值
+ complexTypeRecursiveXmlToBean(header, headerIter);
+
+ return header;
+
+ // getDeclaredFields:获取为引用类型数
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+
+ return null;
+ }
+
+ /**
+ * 递归:将xml中对应结构的值塞入对象中 Describe:
+ *
+ * @param obj Object 对象结构模型
+ * @param iterss 获取的XML文件:body中的所有子节点 return:void Date:2014-2-22
+ * @author:huhaopeng
+ */
+ @SuppressWarnings("unchecked")
+ public static void complexTypeRecursiveXmlToBean(Object obj, Iterator iterss) {
+ Class cls = obj.getClass();
+ Field[] fields = cls.getDeclaredFields();
+ String upName;
+
+ // 获取(Iterator iterss)所有对象的值。
+ List eList = new ArrayList();
+ while (iterss.hasNext()) {
+ Element e = (Element) iterss.next();
+ eList.add(e);
+ }
+
+ for (Field field : fields) {
+ field.setAccessible(true);
+ // 当前 Node
+ Element emt = null;
+ // 判断obj此属性 在xml中是否存在(如果不是必须的,有可能不会传值.)
+ boolean isContinue = true;
+ for (Element e : eList) {
+ if (e.getName().equals(field.getName())) {
+ isContinue = false;
+ emt = e;
+ } else {
+
+ }
+ }
+ if (isContinue == true) {
+ continue;
+ }// class
+
+ String text = emt.getText();
+ try {
+ // PropertyDescriptor:用来连接 <类当前属性> 和方法
+ PropertyDescriptor pd = new PropertyDescriptor(field.getName(),
+ cls);
+ Method getMethod = pd.getReadMethod();// 获得get方法
+ // 当前对象:o
+ Object o = getMethod.invoke(obj);// 执行get方法返回一个Object
+ // 判断是否为list属性
+ if ((".List").equals(field.getType().toString().substring(
+ field.getType().toString().lastIndexOf(".")))) {
+ List list = (ArrayList) o;
+
+ // 判断是否有对象:有就添加到list对象中
+ for (Element element : eList) {// while (iterss.hasNext())
+ // {//iterss 这时候 里面存的已经是
+ // List中的所有对象了
+
+ String classForName = field.getGenericType().toString()
+ .substring(
+ field.getGenericType().toString()
+ .indexOf("<") + 1,
+ field.getGenericType().toString()
+ .lastIndexOf(">"));
+ Object ob = Class.forName(classForName).newInstance();
+ // 将对象塞入list
+ list.add(ob);
+ // 获取节点下所有属性
+ Iterator ite = element.elementIterator();
+ // 给塞入list的对象赋值
+ complexTypeRecursiveXmlToBean(ob, ite);
+ }
+ } else {
+ upName = field.getName().substring(0, 1).toUpperCase()
+ + field.getName().substring(1);
+
+ if ("java".equals(o.getClass().getName().substring(0, 4))) {
+ // 基础类型:给对象塞值
+ obj.getClass().getMethod("set" + upName, String.class)
+ .invoke(obj, text);
+ } else {
+ // 复杂类型:递归
+ Iterator eIter = emt.elementIterator();
+ complexTypeRecursiveXmlToBean(o, eIter);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * 获取xmlHeader参数
+ * @param paramName
+ * @return
+ */
+ public static XmlHeaderParam getXmlHeaderParam(String paramName){
+ XmlHeaderParam headerParam = null;
+
+ if("qunar".equals(paramName)){
+ headerParam = new XmlHeaderParam(
+ "http://piao.qunar.com/2013/QMenpiaoRequestSchema",
+ "http://piao.qunar.com/2013/QMenpiaoResponseSchema",
+ "http://piao.qunar.com/2013/QMenpiaoRequestSchema QMRequestDataSchema-2.0.0.xsd",
+ "http://www.w3.org/2001/XMLSchema-instance");
+ }else if("ectrip".equals(paramName)){
+ headerParam = new XmlHeaderParam(
+ "http://tour.ectrip.com/2014/QMRequestDataSchema",
+ "http://tour.ectrip.com/2014/QMResponseSchema",
+ "http://tour.ectrip.com/2014/QMResponseSchema QMRequestDataSchema-1.1.0.xsd",
+ "http://www.w3.org/2001/XMLSchema-instance");
+ }
+
+ return headerParam;
+ }
+}
diff --git b/zhyx-api/src/main/resources/application.yml a/zhyx-api/src/main/resources/application.yml
new file mode 100644
index 0000000..60898d4
--- /dev/null
+++ a/zhyx-api/src/main/resources/application.yml
@@ -0,0 +1,9 @@
+server:
+ tomcat:
+ uri-encoding: UTF-8
+ max-threads: 200 #Tomcat可创百建的最大的线程数度,每一个线程处理一个请求
+ min-spare-threads: 30 #最小备用线程数,知tomcat启动时的初始道化的线程数;
+ port: 8083
+ connection-timeout: 60000ms
+
+
diff --git b/zhyx-api/src/main/resources/logback.xml a/zhyx-api/src/main/resources/logback.xml
new file mode 100644
index 0000000..f429dae
--- /dev/null
+++ a/zhyx-api/src/main/resources/logback.xml
@@ -0,0 +1,26 @@
+
+
+
+
+ [%d{yyyy-MM-dd HH:mm:ss} %5p %c:%L] %m%n
+
+
+
+
+
+
+ /home/q/springboot-demo/log/logFile.%d{yyyy-MM-dd}.log
+ 90
+
+
+
+ [%d{yyyy-MM-dd HH:mm:ss} %5p %c:%L] %m%n
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git b/zhyx-api/target/classes/application.yml a/zhyx-api/target/classes/application.yml
new file mode 100644
index 0000000..60898d4
--- /dev/null
+++ a/zhyx-api/target/classes/application.yml
@@ -0,0 +1,9 @@
+server:
+ tomcat:
+ uri-encoding: UTF-8
+ max-threads: 200 #Tomcat可创百建的最大的线程数度,每一个线程处理一个请求
+ min-spare-threads: 30 #最小备用线程数,知tomcat启动时的初始道化的线程数;
+ port: 8083
+ connection-timeout: 60000ms
+
+
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/CytApplication.class a/zhyx-api/target/classes/com/ectrip/cyt/CytApplication.class
new file mode 100644
index 0000000..6313de2
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/CytApplication.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/common/Parameter.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/common/Parameter.class
new file mode 100644
index 0000000..8ef0510
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/common/Parameter.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/common/Transient.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/common/Transient.class
new file mode 100644
index 0000000..3f355d7
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/common/Transient.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/Base64Util.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/Base64Util.class
new file mode 100644
index 0000000..3ae4aca
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/Base64Util.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/OtaBase.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/OtaBase.class
new file mode 100644
index 0000000..8697ac9
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/OtaBase.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody$OrderInfo$VisitPerson$Person.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody$OrderInfo$VisitPerson$Person.class
new file mode 100644
index 0000000..6c4dfdb
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody$OrderInfo$VisitPerson$Person.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody$OrderInfo$VisitPerson.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody$OrderInfo$VisitPerson.class
new file mode 100644
index 0000000..af87708
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody$OrderInfo$VisitPerson.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody$OrderInfo.class
new file mode 100644
index 0000000..05650e7
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody.class
new file mode 100644
index 0000000..ac866bc
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/ApplyOrderRefundByUserRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CancelOrderRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CancelOrderRequestBody$OrderInfo.class
new file mode 100644
index 0000000..ab24c0e
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CancelOrderRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CancelOrderRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CancelOrderRequestBody.class
new file mode 100644
index 0000000..26aae3f
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CancelOrderRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo$ContactPerson.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo$ContactPerson.class
new file mode 100644
index 0000000..6a12288
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo$ContactPerson.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo$Product.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo$Product.class
new file mode 100644
index 0000000..cd1b621
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo$Product.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo$VisitPerson$Person.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo$VisitPerson$Person.class
new file mode 100644
index 0000000..59729aa
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo$VisitPerson$Person.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo$VisitPerson.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo$VisitPerson.class
new file mode 100644
index 0000000..bb3aedb
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo$VisitPerson.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo.class
new file mode 100644
index 0000000..72ee176
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody.class
new file mode 100644
index 0000000..2b51636
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CheckOrderRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo$ContactPerson.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo$ContactPerson.class
new file mode 100644
index 0000000..24b2701
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo$ContactPerson.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo$Product.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo$Product.class
new file mode 100644
index 0000000..d0043ad
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo$Product.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo$VisitPerson$Person.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo$VisitPerson$Person.class
new file mode 100644
index 0000000..0b0c94c
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo$VisitPerson$Person.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo$VisitPerson.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo$VisitPerson.class
new file mode 100644
index 0000000..7461e3c
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo$VisitPerson.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo.class
new file mode 100644
index 0000000..18ba0d9
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody.class
new file mode 100644
index 0000000..f652af3
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreateOrderRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo$ContactPerson.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo$ContactPerson.class
new file mode 100644
index 0000000..ff63862
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo$ContactPerson.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo$Product.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo$Product.class
new file mode 100644
index 0000000..1900715
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo$Product.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo$VisitPerson$Person.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo$VisitPerson$Person.class
new file mode 100644
index 0000000..26820ef
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo$VisitPerson$Person.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo$VisitPerson.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo$VisitPerson.class
new file mode 100644
index 0000000..093e9d8
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo$VisitPerson.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo.class
new file mode 100644
index 0000000..e087018
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody.class
new file mode 100644
index 0000000..08f178b
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/CreatePaymentOrderRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetOrderByOTARequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetOrderByOTARequestBody.class
new file mode 100644
index 0000000..6b1f2da
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetOrderByOTARequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetProductByOTARequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetProductByOTARequestBody.class
new file mode 100644
index 0000000..a2986f0
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetProductByOTARequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetStockProductInfoRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetStockProductInfoRequestBody.class
new file mode 100644
index 0000000..b2e74d8
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/GetStockProductInfoRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody$OrderInfo$Vouchers$Voucher.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody$OrderInfo$Vouchers$Voucher.class
new file mode 100644
index 0000000..7679b76
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody$OrderInfo$Vouchers$Voucher.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody$OrderInfo$Vouchers.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody$OrderInfo$Vouchers.class
new file mode 100644
index 0000000..2002cf1
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody$OrderInfo$Vouchers.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody$OrderInfo.class
new file mode 100644
index 0000000..677d8af
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody.class
new file mode 100644
index 0000000..9f876cd
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderConsumedRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderEticketSendedRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderEticketSendedRequestBody$OrderInfo.class
new file mode 100644
index 0000000..e1071b8
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderEticketSendedRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderEticketSendedRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderEticketSendedRequestBody.class
new file mode 100644
index 0000000..50566d9
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderEticketSendedRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderModifyRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderModifyRequestBody$OrderInfo.class
new file mode 100644
index 0000000..a1c202b
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderModifyRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderModifyRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderModifyRequestBody.class
new file mode 100644
index 0000000..96d5b6b
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderModifyRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody$OrderInfo$Vouchers$Voucher.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody$OrderInfo$Vouchers$Voucher.class
new file mode 100644
index 0000000..529a0fc
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody$OrderInfo$Vouchers$Voucher.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody$OrderInfo$Vouchers.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody$OrderInfo$Vouchers.class
new file mode 100644
index 0000000..0c9fe60
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody$OrderInfo$Vouchers.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody$OrderInfo.class
new file mode 100644
index 0000000..4d78933
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody.class
new file mode 100644
index 0000000..093ff03
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderPrintSuccessRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody$OrderInfo$Vouchers$Voucher.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody$OrderInfo$Vouchers$Voucher.class
new file mode 100644
index 0000000..437e58f
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody$OrderInfo$Vouchers$Voucher.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody$OrderInfo$Vouchers.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody$OrderInfo$Vouchers.class
new file mode 100644
index 0000000..52caff7
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody$OrderInfo$Vouchers.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody$OrderInfo.class
new file mode 100644
index 0000000..1daa5a4
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody.class
new file mode 100644
index 0000000..2f6cb7c
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundApproveResultRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody$OrderInfo$Vouchers$Voucher.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody$OrderInfo$Vouchers$Voucher.class
new file mode 100644
index 0000000..d4179ef
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody$OrderInfo$Vouchers$Voucher.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody$OrderInfo$Vouchers.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody$OrderInfo$Vouchers.class
new file mode 100644
index 0000000..29e66c5
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody$OrderInfo$Vouchers.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody$OrderInfo.class
new file mode 100644
index 0000000..a2947d3
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody.class
new file mode 100644
index 0000000..051ce07
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundedByOTARequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundedByOTARequestBody$OrderInfo.class
new file mode 100644
index 0000000..624c08d
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundedByOTARequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundedByOTARequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundedByOTARequestBody.class
new file mode 100644
index 0000000..09afe67
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderRefundedByOTARequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderReserveRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderReserveRequestBody$OrderInfo.class
new file mode 100644
index 0000000..069bc66
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderReserveRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderReserveRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderReserveRequestBody.class
new file mode 100644
index 0000000..749ee75
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeOrderReserveRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeProductChangeRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeProductChangeRequestBody.class
new file mode 100644
index 0000000..acd8740
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/NoticeProductChangeRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PayOrderRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PayOrderRequestBody$OrderInfo.class
new file mode 100644
index 0000000..af35fde
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PayOrderRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PayOrderRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PayOrderRequestBody.class
new file mode 100644
index 0000000..d440057
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PayOrderRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PostFaceInfoRequestBody$FaceInfos$FaceInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PostFaceInfoRequestBody$FaceInfos$FaceInfo.class
new file mode 100644
index 0000000..5487b1e
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PostFaceInfoRequestBody$FaceInfos$FaceInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PostFaceInfoRequestBody$FaceInfos.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PostFaceInfoRequestBody$FaceInfos.class
new file mode 100644
index 0000000..a449294
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PostFaceInfoRequestBody$FaceInfos.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PostFaceInfoRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PostFaceInfoRequestBody.class
new file mode 100644
index 0000000..72c797e
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PostFaceInfoRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody$OrderInfo$ContactPerson.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody$OrderInfo$ContactPerson.class
new file mode 100644
index 0000000..5b2b4ec
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody$OrderInfo$ContactPerson.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody$OrderInfo$VisitPerson$Person.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody$OrderInfo$VisitPerson$Person.class
new file mode 100644
index 0000000..e6f4668
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody$OrderInfo$VisitPerson$Person.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody$OrderInfo$VisitPerson.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody$OrderInfo$VisitPerson.class
new file mode 100644
index 0000000..3ee7197
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody$OrderInfo$VisitPerson.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody$OrderInfo.class
new file mode 100644
index 0000000..ec36469
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody.class
new file mode 100644
index 0000000..fa0a7ac
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/PushOrderRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/QueryOtaOrderRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/QueryOtaOrderRequestBody$OrderInfo.class
new file mode 100644
index 0000000..c652555
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/QueryOtaOrderRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/QueryOtaOrderRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/QueryOtaOrderRequestBody.class
new file mode 100644
index 0000000..b9fce10
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/QueryOtaOrderRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/Request.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/Request.class
new file mode 100644
index 0000000..b0f4909
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/Request.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/RequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/RequestBody.class
new file mode 100644
index 0000000..7a6148f
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/RequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/RequestHeader.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/RequestHeader.class
new file mode 100644
index 0000000..97c866e
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/RequestHeader.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/SendOrderEticketRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/SendOrderEticketRequestBody$OrderInfo.class
new file mode 100644
index 0000000..bad6b9e
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/SendOrderEticketRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/SendOrderEticketRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/SendOrderEticketRequestBody.class
new file mode 100644
index 0000000..50de3fd
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/SendOrderEticketRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/VerifyConsumeRequestBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/VerifyConsumeRequestBody$OrderInfo.class
new file mode 100644
index 0000000..8005fdf
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/VerifyConsumeRequestBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/VerifyConsumeRequestBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/VerifyConsumeRequestBody.class
new file mode 100644
index 0000000..1890a07
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/request/VerifyConsumeRequestBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/ApplyOrderRefundByUserResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/ApplyOrderRefundByUserResponseBody.class
new file mode 100644
index 0000000..b8b31e7
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/ApplyOrderRefundByUserResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CancelOrderResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CancelOrderResponseBody.class
new file mode 100644
index 0000000..3e81789
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CancelOrderResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CheckOrderResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CheckOrderResponseBody.class
new file mode 100644
index 0000000..f7ec95b
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CheckOrderResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreateOrderResponseBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreateOrderResponseBody$OrderInfo.class
new file mode 100644
index 0000000..fc6cf46
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreateOrderResponseBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreateOrderResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreateOrderResponseBody.class
new file mode 100644
index 0000000..3be2375
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreateOrderResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody$OrderInfo$Vouchers$Voucher.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody$OrderInfo$Vouchers$Voucher.class
new file mode 100644
index 0000000..e3f500d
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody$OrderInfo$Vouchers$Voucher.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody$OrderInfo$Vouchers.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody$OrderInfo$Vouchers.class
new file mode 100644
index 0000000..65a2254
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody$OrderInfo$Vouchers.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody$OrderInfo.class
new file mode 100644
index 0000000..8d34721
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody.class
new file mode 100644
index 0000000..f8dce39
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/CreatePaymentOrderResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody$Pois$Poi$Products$Product.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody$Pois$Poi$Products$Product.class
new file mode 100644
index 0000000..df5b859
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody$Pois$Poi$Products$Product.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody$Pois$Poi$Products.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody$Pois$Poi$Products.class
new file mode 100644
index 0000000..e179096
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody$Pois$Poi$Products.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody$Pois$Poi.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody$Pois$Poi.class
new file mode 100644
index 0000000..a1f3991
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody$Pois$Poi.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody$Pois.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody$Pois.class
new file mode 100644
index 0000000..34fa64f
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody$Pois.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody.class
new file mode 100644
index 0000000..0e11f6c
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetAvailableProductResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetBalanceResponseBody$SupplierBalances$SupplierBalance.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetBalanceResponseBody$SupplierBalances$SupplierBalance.class
new file mode 100644
index 0000000..819b19a
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetBalanceResponseBody$SupplierBalances$SupplierBalance.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetBalanceResponseBody$SupplierBalances.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetBalanceResponseBody$SupplierBalances.class
new file mode 100644
index 0000000..eb70076
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetBalanceResponseBody$SupplierBalances.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetBalanceResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetBalanceResponseBody.class
new file mode 100644
index 0000000..724ef5e
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetBalanceResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody$OrderInfo$Vouchers$Voucher.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody$OrderInfo$Vouchers$Voucher.class
new file mode 100644
index 0000000..e5ca1e3
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody$OrderInfo$Vouchers$Voucher.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody$OrderInfo$Vouchers.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody$OrderInfo$Vouchers.class
new file mode 100644
index 0000000..5f9e3be
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody$OrderInfo$Vouchers.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody$OrderInfo.class
new file mode 100644
index 0000000..f5f2f1a
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody.class
new file mode 100644
index 0000000..8bfb3da
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetOrderByOTAResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BaseInfo$Sights$Sight.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BaseInfo$Sights$Sight.class
new file mode 100644
index 0000000..89fb748
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BaseInfo$Sights$Sight.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BaseInfo$Sights.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BaseInfo$Sights.class
new file mode 100644
index 0000000..8c0a6de
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BaseInfo$Sights.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BaseInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BaseInfo.class
new file mode 100644
index 0000000..0163d8b
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BaseInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BookConfig$AdvanceOption.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BookConfig$AdvanceOption.class
new file mode 100644
index 0000000..d4db78c
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BookConfig$AdvanceOption.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BookConfig.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BookConfig.class
new file mode 100644
index 0000000..029313f
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$BookConfig.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$OtherConfig.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$OtherConfig.class
new file mode 100644
index 0000000..6e8559f
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$OtherConfig.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$PriceConfig$CalendarPrices$CalendarPrice.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$PriceConfig$CalendarPrices$CalendarPrice.class
new file mode 100644
index 0000000..b42cf10
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$PriceConfig$CalendarPrices$CalendarPrice.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$PriceConfig$CalendarPrices.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$PriceConfig$CalendarPrices.class
new file mode 100644
index 0000000..69189f4
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$PriceConfig$CalendarPrices.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$PriceConfig.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$PriceConfig.class
new file mode 100644
index 0000000..e375c91
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$PriceConfig.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$ProductDescription$RefundOption.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$ProductDescription$RefundOption.class
new file mode 100644
index 0000000..454a13d
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$ProductDescription$RefundOption.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$ProductDescription.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$ProductDescription.class
new file mode 100644
index 0000000..613a658
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$ProductDescription.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$TimeOfBooks$TimeOfBook.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$TimeOfBooks$TimeOfBook.class
new file mode 100644
index 0000000..d41b049
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$TimeOfBooks$TimeOfBook.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$TimeOfBooks.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$TimeOfBooks.class
new file mode 100644
index 0000000..7048b7f
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo$TimeOfBooks.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo.class
new file mode 100644
index 0000000..1a52739
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos$ProductInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos.class
new file mode 100644
index 0000000..854cbe8
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody$ProductInfos.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody.class
new file mode 100644
index 0000000..197923f
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetProductByOTAResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody$StockInfos$StockInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody$StockInfos$StockInfo.class
new file mode 100644
index 0000000..da43e1c
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody$StockInfos$StockInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody$StockInfos.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody$StockInfos.class
new file mode 100644
index 0000000..578248f
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody$StockInfos.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody$TimeOfBooks$TimeOfBook.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody$TimeOfBooks$TimeOfBook.class
new file mode 100644
index 0000000..fb9c86e
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody$TimeOfBooks$TimeOfBook.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody$TimeOfBooks.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody$TimeOfBooks.class
new file mode 100644
index 0000000..2066fd2
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody$TimeOfBooks.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody.class
new file mode 100644
index 0000000..320d426
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/GetStockProductInfoResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderConsumedResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderConsumedResponseBody.class
new file mode 100644
index 0000000..9b06f49
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderConsumedResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderEticketSendedResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderEticketSendedResponseBody.class
new file mode 100644
index 0000000..15df02c
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderEticketSendedResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderPrintSuccessResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderPrintSuccessResponseBody.class
new file mode 100644
index 0000000..33bf764
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderPrintSuccessResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundApproveResultResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundApproveResultResponseBody.class
new file mode 100644
index 0000000..e6ebde8
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundApproveResultResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundResponseBody.class
new file mode 100644
index 0000000..a658fdb
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundedByOTAResponseBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundedByOTAResponseBody$OrderInfo.class
new file mode 100644
index 0000000..97d6f30
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundedByOTAResponseBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundedByOTAResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundedByOTAResponseBody.class
new file mode 100644
index 0000000..339b011
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeOrderRefundedByOTAResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeProductChangedResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeProductChangedResponseBody.class
new file mode 100644
index 0000000..5ac8804
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/NoticeProductChangedResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody$OrderInfo$Vouchers$Voucher.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody$OrderInfo$Vouchers$Voucher.class
new file mode 100644
index 0000000..95aeeaa
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody$OrderInfo$Vouchers$Voucher.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody$OrderInfo$Vouchers.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody$OrderInfo$Vouchers.class
new file mode 100644
index 0000000..02f0071
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody$OrderInfo$Vouchers.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody$OrderInfo.class
new file mode 100644
index 0000000..a8271f5
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody.class
new file mode 100644
index 0000000..fa5061b
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PayOrderResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PostFaceInfoResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PostFaceInfoResponseBody.class
new file mode 100644
index 0000000..b6ca6d7
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PostFaceInfoResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PushOrderResponseBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PushOrderResponseBody$OrderInfo.class
new file mode 100644
index 0000000..049c3e2
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PushOrderResponseBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PushOrderResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PushOrderResponseBody.class
new file mode 100644
index 0000000..363c95b
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/PushOrderResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/QueryOtaOrderResponseBody$OrderInfo.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/QueryOtaOrderResponseBody$OrderInfo.class
new file mode 100644
index 0000000..cf83ab6
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/QueryOtaOrderResponseBody$OrderInfo.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/QueryOtaOrderResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/QueryOtaOrderResponseBody.class
new file mode 100644
index 0000000..9878117
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/QueryOtaOrderResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/Response.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/Response.class
new file mode 100644
index 0000000..49247ba
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/Response.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/ResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/ResponseBody.class
new file mode 100644
index 0000000..ce540e4
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/ResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/ResponseHeader.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/ResponseHeader.class
new file mode 100644
index 0000000..e5dbe58
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/ResponseHeader.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/SendOrderEticketResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/SendOrderEticketResponseBody.class
new file mode 100644
index 0000000..b0f6e6d
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/SendOrderEticketResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/VerifyConsumeResponseBody.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/VerifyConsumeResponseBody.class
new file mode 100644
index 0000000..4727c64
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/model/cytOrder/response/VerifyConsumeResponseBody.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/service/TdosApiClient.class a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/service/TdosApiClient.class
new file mode 100644
index 0000000..6403454
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/client/cyt/service/TdosApiClient.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/config/DruidConfig.class a/zhyx-api/target/classes/com/ectrip/cyt/config/DruidConfig.class
new file mode 100644
index 0000000..aede7bb
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/config/DruidConfig.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/config/Swagger2.class a/zhyx-api/target/classes/com/ectrip/cyt/config/Swagger2.class
new file mode 100644
index 0000000..dac5fbc
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/config/Swagger2.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/controller/TdosApiController.class a/zhyx-api/target/classes/com/ectrip/cyt/controller/TdosApiController.class
new file mode 100644
index 0000000..c7f7522
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/controller/TdosApiController.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/exception/BusinessException.class a/zhyx-api/target/classes/com/ectrip/cyt/exception/BusinessException.class
new file mode 100644
index 0000000..59cc64e
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/exception/BusinessException.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/CancelOrderRequest.class a/zhyx-api/target/classes/com/ectrip/cyt/model/CancelOrderRequest.class
new file mode 100644
index 0000000..22e0095
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/CancelOrderRequest.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/CreateOrderRequest.class a/zhyx-api/target/classes/com/ectrip/cyt/model/CreateOrderRequest.class
new file mode 100644
index 0000000..28af514
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/CreateOrderRequest.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/GetProductRequest.class a/zhyx-api/target/classes/com/ectrip/cyt/model/GetProductRequest.class
new file mode 100644
index 0000000..e146c04
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/GetProductRequest.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/GetSeatRequset.class a/zhyx-api/target/classes/com/ectrip/cyt/model/GetSeatRequset.class
new file mode 100644
index 0000000..dce406e
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/GetSeatRequset.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/GetStockRequest.class a/zhyx-api/target/classes/com/ectrip/cyt/model/GetStockRequest.class
new file mode 100644
index 0000000..63448a3
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/GetStockRequest.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/PayOrderRequest.class a/zhyx-api/target/classes/com/ectrip/cyt/model/PayOrderRequest.class
new file mode 100644
index 0000000..fc0d233
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/PayOrderRequest.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/QueryOrderRequest.class a/zhyx-api/target/classes/com/ectrip/cyt/model/QueryOrderRequest.class
new file mode 100644
index 0000000..b31aa6e
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/QueryOrderRequest.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/RefundOrderRequest.class a/zhyx-api/target/classes/com/ectrip/cyt/model/RefundOrderRequest.class
new file mode 100644
index 0000000..8b651d5
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/RefundOrderRequest.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/Request.class a/zhyx-api/target/classes/com/ectrip/cyt/model/Request.class
new file mode 100644
index 0000000..604806b
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/Request.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/SendOrderEticketRequest.class a/zhyx-api/target/classes/com/ectrip/cyt/model/SendOrderEticketRequest.class
new file mode 100644
index 0000000..7b1bb5c
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/SendOrderEticketRequest.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/enums/ApiMethodType.class a/zhyx-api/target/classes/com/ectrip/cyt/model/enums/ApiMethodType.class
new file mode 100644
index 0000000..3c87d56
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/enums/ApiMethodType.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/enums/CredentialsType.class a/zhyx-api/target/classes/com/ectrip/cyt/model/enums/CredentialsType.class
new file mode 100644
index 0000000..7044e76
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/enums/CredentialsType.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/enums/OrderStatusType.class a/zhyx-api/target/classes/com/ectrip/cyt/model/enums/OrderStatusType.class
new file mode 100644
index 0000000..5535720
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/enums/OrderStatusType.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/enums/PaymentWay.class a/zhyx-api/target/classes/com/ectrip/cyt/model/enums/PaymentWay.class
new file mode 100644
index 0000000..99e8c1c
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/enums/PaymentWay.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/param/AccountParam.class a/zhyx-api/target/classes/com/ectrip/cyt/model/param/AccountParam.class
new file mode 100644
index 0000000..0215bf7
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/param/AccountParam.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/param/CancelOrderParam.class a/zhyx-api/target/classes/com/ectrip/cyt/model/param/CancelOrderParam.class
new file mode 100644
index 0000000..286e0bf
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/param/CancelOrderParam.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/param/CreateOrderParam.class a/zhyx-api/target/classes/com/ectrip/cyt/model/param/CreateOrderParam.class
new file mode 100644
index 0000000..5db70ae
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/param/CreateOrderParam.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/param/GetProductParam.class a/zhyx-api/target/classes/com/ectrip/cyt/model/param/GetProductParam.class
new file mode 100644
index 0000000..8037f1e
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/param/GetProductParam.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/param/GetSeatParam.class a/zhyx-api/target/classes/com/ectrip/cyt/model/param/GetSeatParam.class
new file mode 100644
index 0000000..267a5db
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/param/GetSeatParam.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/param/GetStockParam.class a/zhyx-api/target/classes/com/ectrip/cyt/model/param/GetStockParam.class
new file mode 100644
index 0000000..3130b01
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/param/GetStockParam.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/param/PayOrderParam.class a/zhyx-api/target/classes/com/ectrip/cyt/model/param/PayOrderParam.class
new file mode 100644
index 0000000..d1c8e5c
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/param/PayOrderParam.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/param/ProductParam.class a/zhyx-api/target/classes/com/ectrip/cyt/model/param/ProductParam.class
new file mode 100644
index 0000000..170e6ba
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/param/ProductParam.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/param/PushOrderParam.class a/zhyx-api/target/classes/com/ectrip/cyt/model/param/PushOrderParam.class
new file mode 100644
index 0000000..49c343b
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/param/PushOrderParam.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/param/QueryOrderParam.class a/zhyx-api/target/classes/com/ectrip/cyt/model/param/QueryOrderParam.class
new file mode 100644
index 0000000..73269af
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/param/QueryOrderParam.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/param/RefundOrderParam.class a/zhyx-api/target/classes/com/ectrip/cyt/model/param/RefundOrderParam.class
new file mode 100644
index 0000000..7b7eb92
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/param/RefundOrderParam.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/param/SendOrderEticketParam.class a/zhyx-api/target/classes/com/ectrip/cyt/model/param/SendOrderEticketParam.class
new file mode 100644
index 0000000..da5c77e
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/param/SendOrderEticketParam.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/pojo/EditPerson.class a/zhyx-api/target/classes/com/ectrip/cyt/model/pojo/EditPerson.class
new file mode 100644
index 0000000..c9affee
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/pojo/EditPerson.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/pojo/Person.class a/zhyx-api/target/classes/com/ectrip/cyt/model/pojo/Person.class
new file mode 100644
index 0000000..43dc683
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/pojo/Person.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/result/AjaxResult.class a/zhyx-api/target/classes/com/ectrip/cyt/model/result/AjaxResult.class
new file mode 100644
index 0000000..534a641
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/result/AjaxResult.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/result/Result.class a/zhyx-api/target/classes/com/ectrip/cyt/model/result/Result.class
new file mode 100644
index 0000000..8e9d966
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/result/Result.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/result/ResultStatus.class a/zhyx-api/target/classes/com/ectrip/cyt/model/result/ResultStatus.class
new file mode 100644
index 0000000..455da87
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/result/ResultStatus.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/rt/CommonReturn.class a/zhyx-api/target/classes/com/ectrip/cyt/model/rt/CommonReturn.class
new file mode 100644
index 0000000..bf835b6
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/rt/CommonReturn.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/model/rt/PushOrderRequest.class a/zhyx-api/target/classes/com/ectrip/cyt/model/rt/PushOrderRequest.class
new file mode 100644
index 0000000..8b86ce7
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/model/rt/PushOrderRequest.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/AesTools.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/AesTools.class
new file mode 100644
index 0000000..cb62737
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/AesTools.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/Base64Utils.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/Base64Utils.class
new file mode 100644
index 0000000..fba3b8e
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/Base64Utils.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/BigDecimalUtils.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/BigDecimalUtils.class
new file mode 100644
index 0000000..d1a46af
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/BigDecimalUtils.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/DateUtils.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/DateUtils.class
new file mode 100644
index 0000000..d2583d6
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/DateUtils.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/EncryptUtil.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/EncryptUtil.class
new file mode 100644
index 0000000..690b3e5
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/EncryptUtil.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/OrderStatusUtils.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/OrderStatusUtils.class
new file mode 100644
index 0000000..ddde058
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/OrderStatusUtils.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/OtaUtils$1.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/OtaUtils$1.class
new file mode 100644
index 0000000..1c1deeb
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/OtaUtils$1.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/OtaUtils$2.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/OtaUtils$2.class
new file mode 100644
index 0000000..16a0fdd
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/OtaUtils$2.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/OtaUtils.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/OtaUtils.class
new file mode 100644
index 0000000..632f8f6
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/OtaUtils.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/SM4Tools.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/SM4Tools.class
new file mode 100644
index 0000000..91ee6ef
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/SM4Tools.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/SecurityTools.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/SecurityTools.class
new file mode 100644
index 0000000..7ca95c8
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/SecurityTools.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/TestOrderUtils.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/TestOrderUtils.class
new file mode 100644
index 0000000..2a506c7
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/TestOrderUtils.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/UTF8PostMethod.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/UTF8PostMethod.class
new file mode 100644
index 0000000..5eccf83
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/UTF8PostMethod.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/UUIDTools.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/UUIDTools.class
new file mode 100644
index 0000000..b169a15
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/UUIDTools.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/XmlHeaderParam.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/XmlHeaderParam.class
new file mode 100644
index 0000000..a9f51d5
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/XmlHeaderParam.class
diff --git b/zhyx-api/target/classes/com/ectrip/cyt/utils/XmlParseUtil.class a/zhyx-api/target/classes/com/ectrip/cyt/utils/XmlParseUtil.class
new file mode 100644
index 0000000..7ea19d4
--- /dev/null
+++ a/zhyx-api/target/classes/com/ectrip/cyt/utils/XmlParseUtil.class
diff --git b/zhyx-api/target/classes/logback.xml a/zhyx-api/target/classes/logback.xml
new file mode 100644
index 0000000..f429dae
--- /dev/null
+++ a/zhyx-api/target/classes/logback.xml
@@ -0,0 +1,26 @@
+
+
+
+
+ [%d{yyyy-MM-dd HH:mm:ss} %5p %c:%L] %m%n
+
+
+
+
+
+
+ /home/q/springboot-demo/log/logFile.%d{yyyy-MM-dd}.log
+ 90
+
+
+
+ [%d{yyyy-MM-dd HH:mm:ss} %5p %c:%L] %m%n
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git b/zhyx-api/zhyx-api.iml a/zhyx-api/zhyx-api.iml
new file mode 100644
index 0000000..1daccae
--- /dev/null
+++ a/zhyx-api/zhyx-api.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file