Commit ebead53e by peterchu

feat: first commit

parents
.idea
target
[INFO]2021-03-08 16:27:40[getSaleDetailReportData][开始获取数据,参数:{"customerId":"2cb3aa90-7530-11e9-b14b-c81f66ba6a47","endTime_Tic":"2021-03-08 00:00:00","orderStatus":"4","requestId":"","startTime_Tic":"2021-03-07 00:00:00","tableName":"orderinfo,orderpassenger,orderflightinfo,orderpurchase,orderinsurance,ordervalueadded,transactiondetail,transactiondetail_old"}]
[INFO]2021-03-08 16:30:43[getSaleDetailReportData][获取数据成功,共用时:178836]
[INFO]2021-03-08 16:31:28[getSaleDetailReportData][开始获取数据,参数:{"customerId":"2cb3aa90-7530-11e9-b14b-c81f66ba6a47","endTime_Tic":"2021-03-08 00:00:00","orderStatus":"4","requestId":"","startTime_Tic":"2021-03-07 00:00:00","tableName":"orderinfo,orderpassenger,orderflightinfo,orderpurchase,orderinsurance,ordervalueadded,transactiondetail,transactiondetail_old"}]
[INFO]2021-03-08 16:31:29[getSaleDetailReportData][获取数据成功,共用时:962]
\ No newline at end of file
[INFO]2021-03-16 10:29:07[run][启动程序即开始消费响应消息队列]
[INFO]2021-03-16 10:29:07[run][响应消息队列当前长度:0]
\ No newline at end of file
[INFO]2020-12-09 11:33:34[run][启动程序即开始消费响应消息队列]
[INFO]2020-12-09 11:33:34[run][响应消息队列当前长度:0]
[INFO]2020-12-09 11:34:55[run][启动程序即开始消费响应消息队列]
[INFO]2020-12-09 11:34:55[run][响应消息队列当前长度:0]
\ No newline at end of file
[INFO]2021-03-08 16:26:29[run][启动程序即开始消费响应消息队列]
[INFO]2021-03-08 16:26:29[run][响应消息队列当前长度:0]
\ No newline at end of file
[INFO]2020-12-09 11:59:21[run][执行新增 SaleLog 数量:1条! 成功:1条! 耗时长:618ms,剩余0条日志数据]
[INFO]2020-12-09 11:59:27[run][执行新增 SaleLog 数量:1条! 成功:1条! 耗时长:4205ms,剩余0条日志数据]
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
<facet type="web" name="Web">
<configuration>
<webroots />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:1.5.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:1.5.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:4.3.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:1.5.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:4.3.9.RELEASE" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.17" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:1.5.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:1.5.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:8.5.15" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:8.5.15" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:8.5.15" level="project" />
<orderEntry type="library" name="Maven: org.hibernate:hibernate-validator:5.3.5.Final" level="project" />
<orderEntry type="library" name="Maven: javax.validation:validation-api:1.1.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.1.Final" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.8.8" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.8.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.8.8" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:4.3.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:4.3.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:4.3.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:4.3.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:4.3.9.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:1.5.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-test:4.3.12.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.1.43" level="project" />
<orderEntry type="library" name="Maven: dom4j:dom4j:1.6" level="project" />
<orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.0.0.CR1" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.3" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.3" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.2.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.2.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.2.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.2.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.2.2" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:18.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.3.3" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjrt:1.8.10" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.8.10" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.hateoas:spring-hateoas:0.23.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.2.2" level="project" />
<orderEntry type="library" name="Maven: log4j:log4j:1.2.17" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-nop:1.7.24" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.6" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.10" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.4" level="project" />
<orderEntry type="library" name="Maven: commons-httpclient:commons-httpclient:3.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-actuator:1.5.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator:1.5.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: net.sourceforge.jexcelapi:jxl:2.6.12" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>polestar-files-services</groupId>
<artifactId>polestar-files-services</artifactId>
<version>1.0.15</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--用于指定排除spring-boot-starter中的spring-boot-starter-logging日志依赖
然后引入自己的所选的日志依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--spring-boot-web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring-boot-configuration-processor:
在代码中轻松的使用@ConfigurationProperties注解注入属性文件配置的属性值
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.43</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6</version>
</dependency>
<!-- spring-swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
</dependency>
<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.24</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<!--spring-boot健康检查-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--jxl操作Ecxel相关-->
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
<!--poi操作Ecxel相关-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!--poi在3.7版本以后WorkbookFactory等类加载必须引入-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
Manifest-Version: 1.0
Main-Class: com.yutu.base.TestSpringApplication
package com.yutu.base;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* 入口类
*/
@EnableSwagger2
@RestController
@SpringBootApplication(scanBasePackages="com.yutu.base")
public class TestSpringApplication {
public static void main(String[] args) {
SpringApplication.run(TestSpringApplication.class, args);
}
}
package com.yutu.base.controller;
import com.yutu.base.entity.Response;
import com.yutu.base.entity.SaleDetail;
import com.yutu.base.service.DownLoadService;
import com.yutu.base.service.OrderService;
import com.yutu.base.service.PrivateFreightService;
import com.yutu.base.service.SaleDetailService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("files/")
public class DownLoadController {
private Logger logger = Logger.getLogger("download");
@Autowired
private DownLoadService downLoadService;
@Autowired
private SaleDetailService saleDetailService;
@Autowired
private OrderService orderService;
@Autowired
private PrivateFreightService privateFreightService;
/**
* 获取销售数据
* @param requestBody
* @return
*/
@RequestMapping(value = "download/getSaleDetailData.do",method = RequestMethod.POST)
public Response getSaleDetail(@RequestBody String requestBody){
return downLoadService.getSaleDetailReportData(requestBody);
}
/**
* 下载销售报表
* @param requestBody
* @return
*/
@RequestMapping(value = "download/saleDetailReport.do",method = RequestMethod.POST)
public Response saleDetailReport(@RequestBody String requestBody){
return downLoadService.downLoadSaleDetailReport(requestBody);
}
/**
* 下载销售报表(符合查询条件时,直接从数据库SaleDetail表中直接下载获取报表数据)
* @param requestBody
* @return
*/
@RequestMapping(value = "download/saleDetailReportFromAutoSource.do",method = RequestMethod.POST)
public Response saleDetailReportFromAutoSource(@RequestBody String requestBody){
return downLoadService.downLoadSaleDetailFromAutoSource(requestBody);
}
/**
* 传入报表数据,解析为saleDetail表数据对象List
* @param requestBody
* @return
*/
@RequestMapping(value = "parse/toSaleDetail",method = RequestMethod.POST)
public Response parseToSaleDetail(@RequestBody String requestBody){
return downLoadService.parseToSaleDetail(requestBody);
}
/**
* 下载加价规则
* @param requestBody
* @return
*/
@RequestMapping(value = "download/saleRules.do",method = RequestMethod.POST)
public Response downLoadSaleRules(@RequestBody String requestBody){
logger.info("下载加价规则,参数:"+requestBody);
return downLoadService.downLoadSaleRules(requestBody);
}
/**
* 队列更新报表数据
* @param requestBody
* @return
*/
@RequestMapping(value = "saleDetail/updateSaleDetail",method = RequestMethod.POST)
public Response updateSaleDetail(@RequestBody String requestBody){
return saleDetailService.updateSaleDetail(requestBody);
}
/**
* 按照生单日期导出订单信息
*/
@RequestMapping(value = "order/exportOrderInfo",method = RequestMethod.POST)
public Response exportOrderInfo(@RequestBody String requestBody){
return orderService.exportOrderInfo(requestBody);
}
/**
* 按照指定条件导出私有运价底价配置
*/
@RequestMapping(value = "privateFreight/download.do",method = RequestMethod.POST)
public Response exportPrivateFreight(@RequestBody String requestBody){
return privateFreightService.exportPrivateFreight(requestBody);
}
}
package com.yutu.base.controller;
import io.swagger.annotations.ApiOperation;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;
@RestController
public class TestController {
Logger logger = Logger.getLogger("test");
@RequestMapping(value="/test",method = RequestMethod.GET)
@ApiOperation("测试")
public String test(){
try {
System.out.println("Test测试接口响应,时间 = "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
return "hello";
}catch (Exception e){
}
return "";
}
}
package com.yutu.base.controller;
import com.yutu.base.entity.Response;
import com.yutu.base.service.UploadService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("files/")
public class UploadController {
Logger logger = Logger.getLogger("upload");
@Autowired
private UploadService uploadService;
@RequestMapping(value = "upload/saleRules.do",method = RequestMethod.POST)
public Response uploadSaleRules(@RequestBody String requestBody){
logger.info("上传销售规则,参数:"+requestBody);
Response response = uploadService.uploadSaleRules(requestBody);
logger.info("上传结果:"+response);
return response;
}
@RequestMapping(value = "privateFreight/upload.do",method = RequestMethod.POST)
public Response uploadPrivateFreight(@RequestBody String requestBody){
logger.info("上传销售规则,参数:"+requestBody);
Response response = uploadService.uploadPrivateFreight(requestBody);
logger.info("上传结果:"+response);
return response;
}
}
package com.yutu.base.entity;
import java.io.Serializable;
public class ExtraData<T> implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private T paramData;
private String msg;
public T getParamData() {
return paramData;
}
public void setParamData(T paramData) {
this.paramData = paramData;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public ExtraData(T paramData, String msg) {
super();
this.paramData = paramData;
this.msg = msg;
}
public ExtraData() {
super();
}
@Override
public String toString() {
return "ExtraData [paramData=" + paramData + ", msg=" + msg + "]";
}
}
package com.yutu.base.entity;
import java.io.Serializable;
public class NoteResult implements Serializable{
private static final long serialVersionUID = 1L;
/**
* 状态码 0-成功 2-失败
*/
private int status;
/**
* 消息提示,如(成功)
*/
private String msg;
/**
* 额外信息
*/
private String info;
/**
* 设置要返回的具体数据
*/
private Object data;//返回的数据
public NoteResult(){
}
public NoteResult(int status, String msg, Object data) {
this.status = status;
this.msg = msg;
this.data = data;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Override
public String toString() {
return "NoteResult [status=" + status + ", msg=" + msg + ", info="
+ info + ", data=" + data + "]";
}
}
package com.yutu.base.entity;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.yutu.base.utils.JsonDateSerializer;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* 私有运价实体类
* @author wangycuhen
*
*/
public class PrivateFreight implements Serializable {
private String id;//id
private String customerId;//客户Id
private String carrier;//航司
private String org;//出发
private String dst;//抵达
private String cabin;//舱位
private String flightNo;//航班
private Double floorPrice;//底价票
private Double floorTax;//底价税
private String ruleCodeIds;//适用规则Ids
private String operator;//操作者
private Date updateTime;//更新时间
private Date createTime;//创建时间
private List<RuleCode> ruleCodes;//规则实体List
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public String getCarrier() {
return carrier;
}
public void setCarrier(String carrier) {
this.carrier = carrier;
}
public String getOrg() {
return org;
}
public void setOrg(String org) {
this.org = org;
}
public String getDst() {
return dst;
}
public void setDst(String dst) {
this.dst = dst;
}
public String getCabin() {
return cabin;
}
public void setCabin(String cabin) {
this.cabin = cabin;
}
public String getFlightNo() {
return flightNo;
}
public void setFlightNo(String flightNo) {
this.flightNo = flightNo;
}
public Double getFloorPrice() {
return floorPrice;
}
public void setFloorPrice(Double floorPrice) {
this.floorPrice = floorPrice;
}
public Double getFloorTax() {
return floorTax;
}
public void setFloorTax(Double floorTax) {
this.floorTax = floorTax;
}
public String getRuleCodeIds() {
return ruleCodeIds;
}
public void setRuleCodeIds(String ruleCodeIds) {
this.ruleCodeIds = ruleCodeIds;
}
public List<RuleCode> getRuleCodes() {
return ruleCodes;
}
public void setRuleCodes(List<RuleCode> ruleCodes) {
this.ruleCodes = ruleCodes;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
@JsonSerialize(using= JsonDateSerializer.class)
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
@JsonSerialize(using=JsonDateSerializer.class)
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public PrivateFreight() {
}
public PrivateFreight(String id, String customerId, String carrier, String org, String dst, String cabin, String flightNo, Double floorPrice, Double floorTax, String ruleCodeIds, String operator, Date updateTime, Date createTime, List<RuleCode> ruleCodes) {
this.id = id;
this.customerId = customerId;
this.carrier = carrier;
this.org = org;
this.dst = dst;
this.cabin = cabin;
this.flightNo = flightNo;
this.floorPrice = floorPrice;
this.floorTax = floorTax;
this.ruleCodeIds = ruleCodeIds;
this.operator = operator;
this.updateTime = updateTime;
this.createTime = createTime;
this.ruleCodes = ruleCodes;
}
@Override
public String toString() {
return "PrivateFreight{" +
"id='" + id + '\'' +
", customerId='" + customerId + '\'' +
", carrier='" + carrier + '\'' +
", org='" + org + '\'' +
", dst='" + dst + '\'' +
", cabin='" + cabin + '\'' +
", flightNo='" + flightNo + '\'' +
", floorPrice=" + floorPrice +
", floorTax=" + floorTax +
", ruleCodeIds='" + ruleCodeIds + '\'' +
", operator='" + operator + '\'' +
", updateTime=" + updateTime +
", createTime=" + createTime +
", ruleCodes=" + ruleCodes +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PrivateFreight that = (PrivateFreight) o;
return Objects.equals(id, that.id) &&
Objects.equals(customerId, that.customerId) &&
Objects.equals(carrier, that.carrier) &&
Objects.equals(org, that.org) &&
Objects.equals(dst, that.dst) &&
Objects.equals(cabin, that.cabin) &&
Objects.equals(flightNo, that.flightNo) &&
Objects.equals(floorPrice, that.floorPrice) &&
Objects.equals(floorTax, that.floorTax) &&
Objects.equals(ruleCodeIds, that.ruleCodeIds) &&
Objects.equals(operator, that.operator) &&
Objects.equals(updateTime, that.updateTime) &&
Objects.equals(createTime, that.createTime) &&
Objects.equals(ruleCodes, that.ruleCodes);
}
@Override
public int hashCode() {
return Objects.hash(id, customerId, carrier, org, dst, cabin, flightNo, floorPrice, floorTax, ruleCodeIds, operator, updateTime, createTime, ruleCodes);
}
}
package com.yutu.base.entity;
import java.io.Serializable;
/**
* 统一的响应实体类
*/
public class Response implements Serializable{
private Response.Status status;
private String errorMessage;
private Object data;
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public static Response success(){
Response response=new Response();
response.setStatus(Status.SUCCEED);
return response;
}
public static Response success(Object data){
Response response=new Response();
response.setData(data);
response.setStatus(Status.SUCCEED);
return response;
}
public static Response error(String errorMessage){
Response response=new Response();
response.setStatus(Status.FAILED);
response.setErrorMessage(errorMessage);
return response;
}
public static enum Status {
SUCCEED,
FAILED,
NONE,
TICKET_DATE_ERROR,//航班日期错误
FLIGHT_INFO_ERROR,//航程信息错误
PASSENGER_INFO_ERROR,//乘客信息错误
SERVER_INTRRNAL_ERROR;//服务内部错误
private Status() {
}
}
@Override
public String toString() {
return "Response{" +
"status=" + status +
", errorMessage='" + errorMessage + '\'' +
", data=" + data +
'}';
}
}
package com.yutu.base.entity;
import java.util.Objects;
/**
* 私有运价适用规则实体
*/
public class RuleCode {
private String id;
private String type;//DR 日期范围、WR 星期范围、FN 适用国籍、DN 不适用国籍、AR 年龄范围、PA 购票须知
private String typeDesc;//类型描述 DR 日期范围、WR 星期范围、FN 适用国籍、DN 不适用国籍、AR 年龄范围、PA 购票须知
//DR 20190410-20190510、WR 23456 17、FN CN,JP、DN CN,JP、AR 18-45、PA 购票须知123
private String value;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getTypeDesc() {
return typeDesc;
}
public void setTypeDesc(String typeDesc) {
this.typeDesc = typeDesc;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public RuleCode() {
}
public RuleCode(String id, String type, String typeDesc, String value) {
this.id = id;
this.type = type;
this.typeDesc = typeDesc;
this.value = value;
}
@Override
public String toString() {
return "RuleCode{" +
"id='" + id + '\'' +
", type='" + type + '\'' +
", typeDesc='" + typeDesc + '\'' +
", value='" + value + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
RuleCode ruleCode = (RuleCode) o;
return Objects.equals(id, ruleCode.id) &&
Objects.equals(type, ruleCode.type) &&
Objects.equals(typeDesc, ruleCode.typeDesc) &&
Objects.equals(value, ruleCode.value);
}
@Override
public int hashCode() {
return Objects.hash(id, type, typeDesc, value);
}
}
package com.yutu.base.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.util.Date;
/**
*
* @author 99689
*
*/
public class SaleLog implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String id;
private String customerId;
private String referenceId;
private String logType;
private String operatorAction;
private String extraData;
private String operatorId;
private String operator;
private Date createTime;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public String getReferenceId() {
return referenceId;
}
public void setReferenceId(String referenceId) {
this.referenceId = referenceId;
}
public String getLogType() {
return logType;
}
public void setLogType(String logType) {
this.logType = logType;
}
public String getOperatorAction() {
return operatorAction;
}
public void setOperatorAction(String operatorAction) {
this.operatorAction = operatorAction;
}
public String getExtraData() {
return extraData;
}
public void setExtraData(String extraData) {
this.extraData = extraData;
}
public String getOperatorId() {
return operatorId;
}
public void setOperatorId(String operatorId) {
this.operatorId = operatorId;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public SaleLog(String id, String customerId, String referenceId, String logType, String operatorAction,
String extraData, String operatorId, String operator, Date createTime) {
super();
this.id = id;
this.customerId = customerId;
this.referenceId = referenceId;
this.logType = logType;
this.operatorAction = operatorAction;
this.extraData = extraData;
this.operatorId = operatorId;
this.operator = operator;
this.createTime = createTime;
}
public SaleLog() {
super();
}
@Override
public String toString() {
return "SaleLog [id=" + id + ", customerId=" + customerId + ", referenceId=" + referenceId + ", logType="
+ logType + ", operatorAction=" + operatorAction + ", extraData=" + extraData + ", operatorId="
+ operatorId + ", operator=" + operator + ", createTime=" + createTime + "]";
}
}
package com.yutu.base.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.sql.Timestamp;
public class SaleStore {
private String id;
private String customerId;
private String channleId;
private String storeCode;
private Integer status;
private String swichType;
private String saleBeginTime;
private String saleEndTime;
private String contact;
private String minCabinCount;
private String testRule;
private String tele;
private String email;
private String operator;
private Timestamp createtime;
private Timestamp updatetime;
public SaleStore() {
}
public SaleStore(String id, String customerId, String channleId, String storeCode, Integer status, String swichType,
String saleBeginTime, String saleEndTime, String contact, String minCabinCount, String testRule,
String tele, String email, String operator, Timestamp createtime, Timestamp updatetime) {
super();
this.id = id;
this.customerId = customerId;
this.channleId = channleId;
this.storeCode = storeCode;
this.status = status;
this.swichType = swichType;
this.saleBeginTime = saleBeginTime;
this.saleEndTime = saleEndTime;
this.contact = contact;
this.minCabinCount = minCabinCount;
this.testRule = testRule;
this.tele = tele;
this.email = email;
this.operator = operator;
this.createtime = createtime;
this.updatetime = updatetime;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public String getChannleId() {
return channleId;
}
public void setChannleId(String channleId) {
this.channleId = channleId;
}
public String getStoreCode() {
return storeCode;
}
public void setStoreCode(String storeCode) {
this.storeCode = storeCode;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getSwichType() {
return swichType;
}
public void setSwichType(String swichType) {
this.swichType = swichType;
}
public String getSaleBeginTime() {
return saleBeginTime;
}
public void setSaleBeginTime(String saleBeginTime) {
this.saleBeginTime = saleBeginTime;
}
public String getSaleEndTime() {
return saleEndTime;
}
public void setSaleEndTime(String saleEndTime) {
this.saleEndTime = saleEndTime;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
public String getMinCabinCount() {
return minCabinCount;
}
public void setMinCabinCount(String minCabinCount) {
this.minCabinCount = minCabinCount;
}
public String getTestRule() {
return testRule;
}
public void setTestRule(String testRule) {
this.testRule = testRule;
}
public String getTele() {
return tele;
}
public void setTele(String tele) {
this.tele = tele;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
public Timestamp getCreatetime() {
return createtime;
}
public void setCreatetime(Timestamp createtime) {
this.createtime = createtime;
}
public Timestamp getUpdatetime() {
return updatetime;
}
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
public void setUpdatetime(Timestamp updatetime) {
this.updatetime = updatetime;
}
@Override
public String toString() {
return "SaleStore [id=" + id + ", customerId=" + customerId + ", channleId=" + channleId + ", storeCode="
+ storeCode + ", status=" + status + ", swichType=" + swichType + ", saleBeginTime=" + saleBeginTime
+ ", saleEndTime=" + saleEndTime + ", contact=" + contact + ", minCabinCount=" + minCabinCount
+ ", testRule=" + testRule + ", tele=" + tele + ", email=" + email + ", operator=" + operator
+ ", createtime=" + createtime + ", updatetime=" + updatetime + "]";
}
}
package com.yutu.base.entity;
public class Store {
private String id;
private String customerId;
private String channelCode;
private String storeName;
private String storeShortName;
private String storeCode;
private String domain;
private String status;
public String getStoreCode() {
return storeCode;
}
public void setStoreCode(String storeCode) {
this.storeCode = storeCode;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public String getChannelCode() {
return channelCode;
}
public void setChannelCode(String channelCode) {
this.channelCode = channelCode;
}
public String getStoreName() {
return storeName;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
public String getStoreShortName() {
return storeShortName;
}
public void setStoreShortName(String storeShortName) {
this.storeShortName = storeShortName;
}
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "Store{" +
"id='" + id + '\'' +
", customerId='" + customerId + '\'' +
", channelCode='" + channelCode + '\'' +
", storeName='" + storeName + '\'' +
", storeShortName='" + storeShortName + '\'' +
", storeCode='" + storeCode + '\'' +
", domain='" + domain + '\'' +
", status='" + status + '\'' +
'}';
}
}
package com.yutu.base.entity;
import java.io.Serializable;
public class User implements Serializable{
private String userID; //用户ID
private String CustomerID;//用户所在公司的ID号
private String name; //姓名-真实的名字
private String username;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String userID, String name) {
super();
this.userID = userID;
this.name = name;
}
public User(String userID, String customerID, String name, String username) {
super();
this.userID = userID;
CustomerID = customerID;
this.name = name;
this.username=username;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getCustomerID() {
return CustomerID;
}
public void setCustomerID(String customerID) {
CustomerID = customerID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"userID='" + userID + '\'' +
", CustomerID='" + CustomerID + '\'' +
", name='" + name + '\'' +
", username='" + username + '\'' +
'}';
}
}
\ No newline at end of file
package com.yutu.base.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yutu.base.entity.Store;
import com.yutu.base.entity.User;
import com.yutu.base.utils.httpClient.HttpUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* 基础业务层
* 当前包含,User、Store等
*/
@Service
public class BaseService {
@Value("${spring.urlConfig.dataApiUrl}")
private String dataApiUrl;
public List<User> getUsers(){
List<User> userList = new ArrayList<>();
String result= HttpUtil.httpGet(dataApiUrl+"rest/user/selectAllUsers","");
if(StringUtils.isNotBlank(result)){
JSONObject resultObj = JSONObject.parseObject(result);
if(resultObj.getInteger("status") == 0){
JSONArray dataArr = resultObj.getJSONArray("data");
for(int i =0;i<dataArr.size();i++){
JSONObject data = dataArr.getJSONObject(i);
User user = new User();
user.setUserID(data.getString("id"));
user.setCustomerID(data.getString("customerId"));
user.setName(data.getString("loginName"));
user.setUsername(data.getString("userName"));
userList.add(user);
}
}
}
return userList;
}
public List<Store> getStores(){
List<Store> storeList = new ArrayList<>();
String result= HttpUtil.httpGet(dataApiUrl+"rest/store/selectAllStores","");
if(StringUtils.isNotBlank(result)){
JSONObject resultObj = JSONObject.parseObject(result);
if(resultObj.getInteger("status") == 0){
JSONArray dataArr = resultObj.getJSONArray("data");
for(int i =0;i<dataArr.size();i++){
JSONObject data = dataArr.getJSONObject(i);
Store store = new Store();
store.setId(data.getString("id"));
store.setCustomerId(data.getString("customerId"));
store.setChannelCode(data.getString("channelCode"));
store.setStoreName(data.getString("storeName"));
store.setStoreShortName(data.getString("storeShortName"));
store.setStoreCode(data.getString("storeCode"));
store.setStatus(data.getString("status"));
store.setDomain(data.getString("domain"));
storeList.add(store);
}
}
}
return storeList;
}
}
package com.yutu.base.service;
import com.alibaba.fastjson.JSONObject;
import com.yutu.base.entity.Response;
import com.yutu.base.utils.HttpsSendData;
import org.apache.log4j.Logger;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.*;
/**
* 静态消息队列包含了异步响应的发送地址和发送内容
*/
@Component
public class MessageQueueController implements CommandLineRunner {
private static Logger logger = Logger.getLogger("messagequeue");
//响应消息队列,元素 Map<响应url,响应对象>
public static BlockingQueue<Map<String, Response>> responseMessageQueue = new LinkedBlockingDeque<>();
//提供入队列方法
public static void setResponseMessageQueue(String responseUrl,Response response) {
Map<String,Response> responseMap = new HashMap<>();
responseMap.put(responseUrl,response);
try{
responseMessageQueue.put(responseMap);
}catch (Exception e){
logger.error("响应消息队列,入队列异常,参数:"+responseUrl+","+response);
}
}
@Override
public void run(String... args) throws Exception {
//启动即加载本任务
logger.info("启动程序即开始消费响应消息队列");
consumeResponseMessageQueue();
}
//消费响应消息队列
private void consumeResponseMessageQueue(){
ExecutorService threadPool = Executors.newFixedThreadPool(1);
Runnable consumeTask = new Runnable() {
@Override
public void run() {
while (true){
logger.info("响应消息队列当前长度:"+responseMessageQueue.size());
Map<String,Response> map = null;
try {
map = responseMessageQueue.take();
for(Map.Entry entry:map.entrySet()){
String url = String.valueOf(entry.getKey());
Response response = (Response)entry.getValue();
logger.info("响应消息队列,获取和执行发送任务,参数:responseUrl="+url+",Response="+response);
sendResponse(url,response);
}
}catch (Exception e) {
logger.error("响应消息队列执行任务时异常,参数"+map);
}
}
}
};
threadPool.execute(consumeTask);
}
//发送响应消息
private void sendResponse(String url,Response response){
try{
HttpsSendData.getPost(url, JSONObject.toJSONString(response));
}catch (Exception e){
logger.error("发送异步响应消息异常",e);
}
}
}
package com.yutu.base.service;
import com.alibaba.fastjson.JSONObject;
import com.yutu.base.entity.Response;
import com.yutu.base.utils.HttpsSendData;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
/**
* 销售明细报表相关操作
*/
@Service
public class SaleDetailService implements CommandLineRunner {
@Value("${spring.urlConfig.overseasAirTicketUrl}")
private String overseasAirTicketUrl;
private static Logger logger = Logger.getLogger("saleDetail");
//任务消息队列,元素 调用AirTicket工程刷新SaleDetail表数据 的参数Map<String,String>
public static BlockingQueue<Map<String,String>> updateSaleDetailQueue = new LinkedBlockingDeque<>();
//提供入队列方法
public static void setUpdateSaleDetailQueue(Map<String,String> paramsMap) {
try{
updateSaleDetailQueue.put(paramsMap);
}catch (Exception e){
logger.error("updateSaleDetailQueue 队列,入队列异常,参数:" + paramsMap);
}
}
/**
* 采购信息更新时,更新报表数据,以队列方式执行
* @param requestBody
* @return
*/
public Response updateSaleDetail(String requestBody){
System.out.println(requestBody);
if(StringUtils.isBlank(requestBody)){
return Response.error("[updateSaleDetail] 参数不合法,requestBody=null");
}
JSONObject reqObj = JSONObject.parseObject(requestBody);
String customerId = reqObj.getString("customerId");
String startTime = reqObj.getString("startTime");
String endTime = reqObj.getString("endTime");
if(StringUtils.isBlank(customerId) || StringUtils.isBlank(startTime) || StringUtils.isBlank(endTime)){
return Response.error("[updateSaleDetail] 参数不合法");
}
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date endDate = sdf.parse(endTime);
if(endDate.getTime() > new Date().getTime()){
return Response.error("[updateSaleDetail] 当天订单采购信息修改不触发刷新报表数据,endTime="+endTime);
}
Map<String,String> paramsMap = new HashMap<>();
paramsMap.put("customerId",customerId);
paramsMap.put("startTime",startTime);
paramsMap.put("endTime",endTime);
setUpdateSaleDetailQueue(paramsMap);//入队列
logger.info("[updateSaleDetail] 采购信息变动,刷新报表数据任务已加入队列,参数:"+paramsMap);
logger.info("[updateSaleDetail] 当前队列长度 updateSaleDetailQueue.size()="+updateSaleDetailQueue.size());
return Response.success("[updateSaleDetail] 已加入队列");
}catch (Exception e){
logger.error("updateSaleDetail 发生异常",e);
}
return Response.error("未知原因失败");
}
@Override
public void run(String... args) throws Exception {
consumeUpdateSaleDetailQueue();
}
//消费响应消息队列
private void consumeUpdateSaleDetailQueue(){
ExecutorService threadPool = Executors.newFixedThreadPool(1);
Runnable consumeTask = new Runnable() {
@Override
public void run() {
while (true){
logger.info("[updateSaleDetailQueue] 刷新报表队列 当前长度:"+updateSaleDetailQueue.size());
Map<String,String> map = null;
try {
//调用AirTicket工程刷新SaleDetail表数据
map = updateSaleDetailQueue.take();
HttpsSendData.send(overseasAirTicketUrl+"autoSaleDetai/updateSaleDetail.do",map);
logger.info("刷新报表已执行,参数:"+map);
}catch (Exception e) {
logger.error("刷新报表队列执行任务时异常,参数"+map);
}
}
}
};
threadPool.execute(consumeTask);
}
}
package com.yutu.base.service;
import com.yutu.base.entity.SaleRules;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
public class SaleRulesService {
public String getExtraData(SaleRules oldRule, SaleRules newRule) {
StringBuilder builder = new StringBuilder();
//状态变化
if( oldRule!=null ){
if(oldRule.getStatus() !=null ){
if (oldRule.getStatus() != newRule.getStatus()) {
builder.append("状态变化:[" + getStatusText(oldRule.getStatus()) + "-->"
+ getStatusText(newRule.getStatus()) + "];");
}
}
if(oldRule.getSaleSdate() !=null ){
if (!oldRule.getSaleSdate().equals(newRule.getSaleSdate()) ||
!oldRule.getSaleEdate().equals(newRule.getSaleEdate())) {
builder.append("销售有效期变化:[" + oldRule.getSaleSdate() + "-" + oldRule.getSaleEdate() + "-->" +
newRule.getSaleSdate() + "-" + newRule.getSaleEdate() + "];");
}
}
if(oldRule.getTripSdate() !=null){
if (!oldRule.getTripSdate().equals(newRule.getTripSdate()) ||
!oldRule.getTripEdate().equals(newRule.getTripEdate())) {
builder.append("旅行有效期变化:[" + oldRule.getTripSdate() + "-" + oldRule.getTripEdate() + "-->" +
newRule.getTripSdate() + "-" + newRule.getTripEdate() + "];");
}
}
if(oldRule.getTicketDays() !=null){
if (!oldRule.getTicketDays().equals(newRule.getTicketDays())) {
builder.append("提前购票天数变化:[" + oldRule.getTicketDays() + "-->" +
newRule.getTicketDays() + "];");
}
}
if(oldRule.getMinPrice() != null){
if (!oldRule.getMinPrice().equals(newRule.getMinPrice()) ||
!oldRule.getMaxPrice().equals(newRule.getMaxPrice())) {
builder.append("价格区间变化:[" + oldRule.getMinPrice() + "-" + oldRule.getMaxPrice() + "-->" +
newRule.getMinPrice() + "-" + newRule.getMaxPrice() + "];");
}
}
if(oldRule.getAdultPricePoint() !=null ){
if ((oldRule.getAdultPricePoint().subtract(newRule.getAdultPricePoint()).compareTo(BigDecimal.ZERO) != 0) ||
oldRule.getAdultAddPrice() != newRule.getAdultAddPrice() ||
(oldRule.getAdultTaxPoint().subtract(newRule.getAdultTaxPoint()).compareTo(BigDecimal.ZERO) != 0) ||
oldRule.getAdultAddTax() != newRule.getAdultAddTax()) {
builder.append("成人返点/留钱变化:[" + oldRule.getAdultPricePoint() + "/" + oldRule.getAdultAddPrice() +
"/" + oldRule.getAdultTaxPoint() + "/" + oldRule.getAdultAddTax() +
"-->" + newRule.getAdultPricePoint() + "/" + newRule.getAdultAddPrice() +
"/" + newRule.getAdultTaxPoint() + "/" + newRule.getAdultAddTax() + "];");
}
}
if(oldRule.getChildPricePoint() !=null ){
if ((oldRule.getChildPricePoint().subtract(newRule.getChildPricePoint()).compareTo(BigDecimal.ZERO) != 0) ||
!oldRule.getChildAddPrice().equals(newRule.getChildAddPrice()) ||
(oldRule.getChildTaxPoint().subtract(newRule.getChildTaxPoint()).compareTo(BigDecimal.ZERO) != 0) ||
!oldRule.getChildAddTax().equals(newRule.getChildAddTax())) {
builder.append("儿童返点/留钱变化:[" + oldRule.getChildPricePoint() + "/" + oldRule.getChildAddPrice() +
"/" + oldRule.getChildTaxPoint() + "/" + oldRule.getChildAddTax() +
"-->" + newRule.getChildPricePoint() + "/" + newRule.getChildAddPrice() +
"/" + newRule.getChildTaxPoint() + "/" + newRule.getChildAddTax() + "];");
}
}
Integer oldMinProfit = oldRule.getMinProfit();
if (oldMinProfit == null) oldMinProfit = 0;
if (!oldMinProfit.equals(newRule.getMinProfit())) {
builder.append("最低利润变化:[" + oldRule.getMinProfit() + "-->" + newRule.getMinProfit() + "]");
}
Integer oldPoint = oldRule.getPoint();
if (oldPoint == null) oldPoint = 0;
if (!oldPoint.equals(newRule.getPoint())) {
builder.append("积分值变化:[" + oldPoint + "-->" + newRule.getPoint() + "]");
}
}
if (StringUtils.isBlank(builder.toString())) builder.append("变化内容为空");
return builder.toString();
}
public String getStatusText(Integer status) {
String oldStatusText = "";
if (status == 0) {
oldStatusText = "禁用";
} else if (status == 1) {
oldStatusText = "启用";
} else {
oldStatusText = "其他";
}
return oldStatusText;
}
}
package com.yutu.base.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yutu.base.entity.SaleLog;
import com.yutu.base.utils.HttpsSendData;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
/**
* 定时任务业务层
*/
@Component
public class ScheduleService implements CommandLineRunner {
private static Logger logger = Logger.getLogger("schedule");
@Value("${spring.urlConfig.polestarLogsServicesUrl}")
private String polestarLogsServicesUrl;
@Value("${spring.urlConfig.productServiceUrl}")
private String productServiceUrl;
private SimpleDateFormat sdf = null;
//政策操作日志缓存队列
public static BlockingQueue<SaleLog> saleLogQueue = new LinkedBlockingQueue<>();
public static void setSaleLogQueue(SaleLog saleLog){
try {
saleLogQueue.put(saleLog);
}catch (Exception exception) {
logger.error("政策操作日志设置失败" + JSONObject.toJSONString(saleLog),exception);
}
}
@Override
public void run(String... args) throws Exception {
startScheduleTask();
}
/**
* 政策操作日志通过队列写入MongoDB
*/
private void startScheduleTask(){
ExecutorService threadPool = Executors.newFixedThreadPool(1);
Runnable saveSaleLog = new Runnable() {
@Override
public void run() {
if(saleLogQueue == null) {
logger.error("saleLogQueue is null");
return;
}
List<SaleLog> list = new ArrayList<>();
SaleLog saleLog = null;
while (true){
try {
list.clear();
int num = 0;
Long difference = 0L;
int size = saleLogQueue.size() > 100 ? 100 : saleLogQueue.size();
if(size > 0) {
for (int i = 0; i < size; i++) {
saleLog = saleLogQueue.take();
list.add(saleLog);
}
if(list.size()>0){
Long startTime = System.currentTimeMillis();
//saveSaleLogsToMongoDBBatch(list);//批量插入
saveSaleLogsToMongoDBBatchNew(list);
Long endTime = System.currentTimeMillis();
difference = endTime - startTime;
logger.info("执行新增 SaleLog 数量:"+list.size()+"条! 成功:"+list.size()+"条!"
+" 耗时长:"+String.valueOf(difference)+"ms,剩余"+saleLogQueue.size()+"条日志数据");
}
}else {
Thread.sleep(1000);
}
}catch (Exception e) {
logger.error("销售政策操作日志写入异常-----", e);
}
}
}
};
threadPool.execute(saveSaleLog);
}
//MongoDB.logcenter数据库入库(批量插入)
public void saveSaleLogsToMongoDBBatch(List<SaleLog> saleLogList){
JSONArray array = new JSONArray();
if(saleLogList==null || saleLogList.size()==0){
return;
}
for(int i=0;i<saleLogList.size();i++){
SaleLog saleLog = saleLogList.get(i);
JSONObject object = new JSONObject();
object.put("Id",saleLog.getId());
object.put("customerId",saleLog.getCustomerId());
object.put("referenceId",saleLog.getReferenceId());
object.put("logType",saleLog.getLogType());
object.put("operatorAction",saleLog.getOperatorAction());
object.put("extraData",saleLog.getExtraData());
object.put("operatorId",saleLog.getOperatorId());
object.put("operator",saleLog.getOperator());
object.put("createTime",saleLog.getCreateTime());
array.add(object);
}
try{
HttpsSendData.getPost(polestarLogsServicesUrl+"saleLog/saveSaleLogBatch",JSONObject.toJSONString(array));
}catch (Exception e){
logger.error("政策日志写入MongoDB异常",e);
}
return;
}
//政策日志结构变动,mongodb新数据库需要新字段
public void saveSaleLogsToMongoDBBatchNew(List<SaleLog> saleLogList){
try {
if (saleLogList == null || saleLogList.size() == 0) {
return;
}
List<String> referenceIdList = new ArrayList<>();
for (int i = 0; i < saleLogList.size(); i++) {
referenceIdList.add(saleLogList.get(i).getReferenceId());
}
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//通过政策IdList 查询获取政策创建时间 得到 Map<referenceId,ruleCreateTime>
Map<String, Date> ruleCreateTimeMap = new HashMap<>();
List<String> ruleCreateTimeList = getRuleCreateTimeListBy(referenceIdList);
if(ruleCreateTimeList.size() == 0){
return;
}
for (int i = 0; i < ruleCreateTimeList.size(); i++) {
String ruleCreateTimeStr = ruleCreateTimeList.get(i);
String ruleCreateTime = ruleCreateTimeStr.substring(ruleCreateTimeStr.indexOf("^")+1);
ruleCreateTimeMap.put(ruleCreateTimeStr.substring(0,ruleCreateTimeStr.indexOf("^")), sdf.parse(ruleCreateTime));
}
JSONArray array = JSONArray.parseArray(JSONArray.toJSONString(saleLogList));
//遍历更新SaleLog
JSONArray arrayNew = new JSONArray();
for (int i = 0; i < array.size(); i++) {
JSONObject saleLog = array.getJSONObject(i);
String referenceId = saleLog.getString("referenceId");
saleLog.put("ruleCreateTime",ruleCreateTimeMap.get(referenceId));
arrayNew.add(saleLog);
}
HttpsSendData.getPost(polestarLogsServicesUrl+"saleLog/saveSaleLogBatch",JSONObject.toJSONString(arrayNew));
} catch (Exception e) {
logger.error("政策日志写入MongoDB异常", e);
}
return;
}
//获取政策创建时间
public List<String> getRuleCreateTimeListBy(List<String> referenceIdList){
List<String> resultArr = new ArrayList<>();
String url = productServiceUrl + "SaleRules/getRuleCreateTimeListBy.do";
String result = HttpsSendData.getPost(url,JSONArray.toJSONString(referenceIdList));
if(StringUtils.isBlank(result)){
return resultArr;
}
resultArr = JSONArray.parseArray(result,String.class);
return resultArr;
}
}
package com.yutu.base.utils;
import java.util.concurrent.CyclicBarrier;
/**
* 线程的循环屏障(解决并发任务执行需要等待全部线程执行完毕的情况)
*/
public class CyclicBarrierUtil {
public static class MyRunable implements Runnable {
CyclicBarrier _cb;
int _i = 0;
public MyRunable(CyclicBarrier cb, int i) {
this._cb = cb;
this._i = i;
}
@Override
public void run() {
try {
Thread.sleep((long) (Math.random() * 100));
System.out.println("thread " + _i + " done,正在等候其它线程完成...");
_cb.await();
} catch (Exception e) {
e.printStackTrace();
}
}
}
// public static void main(String[] args) throws Exception {
//
// final int threadNum = 10;
// CyclicBarrier cb = new CyclicBarrier(threadNum + 1);//注意:10个子线程 + 1个主线程
//
// for (int i = 0; i < threadNum; i++) {
// new Thread(new MyRunable(cb, i)).start();
// }
//
// cb.await();
// System.out.println("-----------\n所有thread执行完成!");
// }
}
package com.yutu.base.utils;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 项目名称:polestarOtaOrder
* 类名称:DateUtil
* 类描述: 时间操作类
* @author wang yu
* 创建时间:2017-11-01 10:27AM
* @version
*/
public class DateUtil {
/**
* 生成ISO-8601 规范的时间格式
* @param date
* @return
*/
public static String formatISO8601DateString(Date date){
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
return DateFormatUtils.format(date, pattern);
}
/**
* 获取原时间戳
* @param reverseTime
* @return
*/
public static Long recoverReverseTime(Long reverseTime){
long longTime = Long.MAX_VALUE - reverseTime;
return longTime/1000000;
}
/*
* 获取系统当前日期及时间
* */
public static Date getCurrentTime(){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date currentTime=null;
try {
currentTime= sdf.parse(sdf.format(new Date()));
} catch (ParseException e) {
e.printStackTrace();
}
return currentTime;
}
/**
* 生成页面普通展示时间
* @param date
* @return
*/
public static String formatNormalDateString(Date date){
String pattern = "yyyy-MM-dd HH:mm:ss";
return DateFormatUtils.format(date, pattern);
}
/**
* 日期转换成字符串
* @param date
* @return str
*/
public static String DateToStr(Date date,String formatPattern) {
SimpleDateFormat format = new SimpleDateFormat(formatPattern);
String str = format.format(date);
return str;
}
/**
* 字符串转换成日期
* @param str
* @return date
*/
public static Date StrToDate(String str,String formatPattern) {
SimpleDateFormat format = new SimpleDateFormat(formatPattern);
Date date = null;
try {
date = format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/*
* 将当前日期增加天数
* @param date 要计算的日期
* @param days 要增加的天数
* @return 计算后的新日期
* */
public static Date dayAdd(Date date,int days){
Calendar ca = Calendar.getInstance();//得到一个Calendar的实例
ca.setTime(date); //设置时间
ca.add(Calendar.DAY_OF_MONTH, days); //年份减1
date = ca.getTime(); //结果
return date;
}
/*
* 将时间转换为时间戳
*/
public static String dateToStamp(String s) throws ParseException{
String res;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = simpleDateFormat.parse(s);
long ts = date.getTime();
res = String.valueOf(ts);
return res;
}
/*
* 将时间戳转换为时间
*/
public static String stampToDate(String s){
String res;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long lt = new Long(s);
Date date = new Date(lt);
res = simpleDateFormat.format(date);
return res;
}
}
package com.yutu.base.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
public class FileReceiveServlet extends HttpServlet{
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(FileReceiveServlet.class);
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
fileReceive(req,resp);
}
public void fileReceive(HttpServletRequest req, HttpServletResponse resp) {
logger.info("接收文件+++++++++++++++++++");
try {
String fileName = "d:/airpxml/"+UUID.randomUUID().toString()+".zip";
ServletInputStream in = req.getInputStream();
File f = new File(fileName);
FileOutputStream fos = new FileOutputStream(f);
byte[] b = new byte[1024];
int n=0;
while((n=in.read(b))!=-1){
System.out.println(n);
fos.write(b,0,n);
}
fos.close();
in.close();
} catch (Exception e) {
logger.info("接收失败+++++++++++++++++"+e.getMessage());
e.printStackTrace();
}
}
}
package com.yutu.base.utils;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;
public class FileWriter {
public static void write(String str){
try {
String witePath = "E:/write"+new Date()+".txt";
File file = new File(witePath);
if(!file.exists()){
file.mkdir();
}
FileOutputStream os = new FileOutputStream(file);
if(StringUtils.isBlank(str)){
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.yutu.base.utils;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.log4j.Logger;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class HttpsSendData {
/**
* @param url 请求地址
* @param paramsMap 将参数的名作为键
* @return
*/
public static Logger logger= Logger.getLogger(HttpsSendData.class.getName());
public static String send(String url, Map<String, String> paramsMap) {
String result = null;
PostMethod postMethod = null;
HttpClient httpClient = new HttpClient();
httpClient.getParams().setParameter(
HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");
postMethod = new PostMethod(url);
if (paramsMap != null && paramsMap.size() > 0) {
NameValuePair[] datas = new NameValuePair[paramsMap.size()];
int index = 0;
for (String key : paramsMap.keySet()) {
datas[index++] = new NameValuePair(key,paramsMap.get(key));
}
postMethod.setRequestBody(datas);
}
HttpClientParams httparams = new HttpClientParams();
httparams.setSoTimeout(300000);
postMethod.setParams(httparams);
try {
int statusCode = httpClient.executeMethod(postMethod);
if (statusCode == HttpStatus.SC_OK) {
//result = postMethod.getResponseBodyAsString();//原来的方式
InputStream is = postMethod.getResponseBodyAsStream();
Scanner scanner = new Scanner(is, "UTF-8");
result=scanner.useDelimiter("\\A").next();
} else {
System.out.println("请求状态:"+statusCode);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (postMethod != null) {
//释放链接
postMethod.releaseConnection();
}
if(url.contains("insert.do") || url.contains("update.do") || url.contains("delete")){
logger.info("url:"+url);
logger.info("paramsMap:"+paramsMap);
logger.info("result:"+ JSONObject.toJSONString(result));
}
if(url.contains("notify") || url.contains("assistant")){
logger.info("url:"+url);
logger.info("paramsMap:"+paramsMap);
logger.info("result:"+ JSONObject.toJSONString(result));
}
if(url.contains("ia")){
logger.info("url:"+url);
logger.info("paramsMap:"+paramsMap);
logger.info("result:"+ JSONObject.toJSONString(result));
}
}
return result;
}
public static String getPost(String url, String body) {
//System.out.println("准备开始发送请求:"+System.currentTimeMillis());
String result = null;
PostMethod postMethod = new PostMethod(url);
if(body!=null && !"".equals(body)){
StringRequestEntity requestEntity;
try {
requestEntity = new StringRequestEntity(body,"application/json","UTF-8");
postMethod.setRequestEntity(requestEntity);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
HttpClientParams httparams = new HttpClientParams();
httparams.setSoTimeout(180000);
postMethod.setParams(httparams);
postMethod.setRequestHeader("Content-Type","application/json;charset=UTF-8");
HttpClient httpClient = new HttpClient();
httpClient.getParams().setParameter(
HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");
try {
int statusCode = httpClient.executeMethod(postMethod);
if (statusCode == HttpStatus.SC_OK) {
//result = postMethod.getResponseBodyAsString();//原来的方式
InputStream is = postMethod.getResponseBodyAsStream();
Scanner scanner = new Scanner(is, "UTF-8");
result=scanner.useDelimiter("\\A").next();
} else {
System.out.println("请求状态:"+statusCode);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (postMethod != null) {
//释放链接
postMethod.releaseConnection();
}
}
//System.out.println("收到响应:"+System.currentTimeMillis());
return result;
}
public static String httpPost(String url, String body) {
//System.out.println("准备开始发送请求:"+System.currentTimeMillis());
String result = null;
PostMethod postMethod = new PostMethod(url);
if(body!=null && !"".equals(body)){
StringRequestEntity requestEntity;
try {
requestEntity = new StringRequestEntity(body,"application/json","UTF-8");
postMethod.setRequestEntity(requestEntity);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
HttpClientParams httparams = new HttpClientParams();
httparams.setSoTimeout(180000);
postMethod.setParams(httparams);
postMethod.setRequestHeader("Content-Type","application/json;charset=UTF-8");
HttpClient httpClient = new HttpClient();
httpClient.getParams().setParameter(
HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");
try {
int statusCode = httpClient.executeMethod(postMethod);
if (statusCode == HttpStatus.SC_OK) {
//result = postMethod.getResponseBodyAsString();//原来的方式
InputStream is = postMethod.getResponseBodyAsStream();
Scanner scanner = new Scanner(is, "UTF-8");
result=scanner.useDelimiter("\\A").next();
} else {
System.out.println("请求状态:"+statusCode);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (postMethod != null) {
//释放链接
postMethod.releaseConnection();
}
}
//System.out.println("收到响应:"+System.currentTimeMillis());
return result;
}
}
package com.yutu.base.utils;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @description 用于定义将实体对象中的值转换为json时要转换的时间字符串格式,需要在实体类的getTime
* 方法上打标记:@JsonSerialize(using=JsonDateSerializer.class)
* 如果实体类用的类型为java.sql.Timestamp则 这里要用java.util.Date类型类转换
* 不能用java.sql.Date
* @author aokunsang
* @date 2013-5-28
*/
public class JsonDateSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date value,
JsonGenerator jsonGenerator,
SerializerProvider provider)
throws IOException, JsonProcessingException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
jsonGenerator.writeString(sdf.format(value));
}
}
package com.yutu.base.utils;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5 {
/**
* Md5加密(32位)
* @param str
* @return
*/
public static String getMD5Str(String str){
MessageDigest messageDigest = null;
try
{
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(str.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e)
{
System.out.println("NoSuchAlgorithmException caught!");
System.exit(-1);
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
byte[] byteArray = messageDigest.digest();
StringBuffer md5StrBuff = new StringBuffer();
for (int i = 0; i < byteArray.length; i++)
{
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
else
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
return md5StrBuff.toString();
}
}
package com.yutu.base.utils;
import com.alibaba.fastjson.JSONObject;
import java.util.Comparator;
public class MyComparator implements Comparator<JSONObject> {
@Override
public int compare(JSONObject o1, JSONObject o2) {
String key1 = o1.getString("purchaseTime");
String key2 = o2.getString("purchaseTime");
Double double1 = Double.parseDouble(key1);
Double double2 = Double.parseDouble(key2);
if(double1>double2){
return 1;
}
return 0;
}
}
package com.yutu.base.utils.httpClient;
/**
* HttpClient4.5
* @author Administrator
*
*/
//public class HttpClientUtil {
// private static SSLConnectionSocketFactory sslsf = null;
// private static PoolingHttpClientConnectionManager cm = null;
// private static SSLContextBuilder builder = null;
// private static RequestConfig reqConfig;
// static {
// try {
// builder = new SSLContextBuilder();
// // 全部信任 不做身份鉴定
// builder.loadTrustMaterial(null, new TrustStrategy() {
// public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
// return true;
// }
// });
// reqConfig=RequestConfig.custom()
// .setCookieSpec(CookieSpecs.STANDARD)
// .setExpectContinueEnabled(true)//2017-10-14
// .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))//2017-10-14
// .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC))//2017-10-14
// .setSocketTimeout(1000*20)
// .setConnectTimeout(1000*25)
// .setConnectionRequestTimeout(1000*30)
// .build();
// sslsf = new SSLConnectionSocketFactory(builder.build(), new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE);
// Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
// .register("http", new PlainConnectionSocketFactory())
// .register("https", sslsf)
// .build();
// // Create socket configuration
// SocketConfig socketConfig = SocketConfig.custom()//2017-10-14
// .setSoTimeout(1000*20)//2017-10-14
// .setTcpNoDelay(true)//2017-10-14
// .build();//2017-10-14
// cm = new PoolingHttpClientConnectionManager(registry);
// cm.setDefaultSocketConfig(socketConfig);//2017-10-14
// // Validate connections after 10 sec of inactivity
// cm.setValidateAfterInactivity(1000*20);//2017-10-14
// cm.setMaxTotal(400);//设置最大连接数(全局最大连接数)
// cm.setDefaultMaxPerRoute(40);//一个路由的最大连接数(连接同一主机的最大连接数)
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// /**
// * 获取HttpClient
// * @return HttpClient客户端
// */
// public static CloseableHttpClient getHttpClient(){
// /*未设置代理IP之前的获得https的httpClient对象方式*/
// CloseableHttpClient httpClient = HttpClients.custom()
// .setDefaultRequestConfig(reqConfig)
// .setSSLSocketFactory(sslsf)
// .setConnectionManager(cm)
// .setConnectionManagerShared(true)
// .build();
// return httpClient;
// }
// /**
// * 创建HttpClient,传入的参数用于获取服务端相应的cookie
// * @param cookieStore 用于最后获取服务端cookie的CookieStore
// * @return
// */
// public static CloseableHttpClient getHttpClient(CookieStore cookieStore){
// CloseableHttpClient httpClient = HttpClients.custom()
// .setDefaultRequestConfig(reqConfig)
// .setDefaultCookieStore(cookieStore)
// .setSSLSocketFactory(sslsf)
// .setConnectionManager(cm)
// .setConnectionManagerShared(true)
// .build();
// return httpClient;
// }
//
//
// /**
// * 获取使用默认代理的HttpClient(无需认证信息)
// * @param proxyIp 代理IP
// * @param port 代理端口
// * @return HttpClient客户端
// */
// public static CloseableHttpClient getHttpClient(String proxyIp,Integer port){
// HttpClientBuilder httpBuider = HttpClients.custom();
// if(proxyIp!=null && port!=null){
// HttpHost proxy = new HttpHost(proxyIp, port);
// DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy);
// httpBuider.setRoutePlanner(routePlanner);
// }
// CloseableHttpClient httpClient=httpBuider
// .setDefaultRequestConfig(reqConfig)
// .setSSLSocketFactory(sslsf)
// .setConnectionManager(cm)
// .setConnectionManagerShared(true)
// .build();
// return httpClient;
// }
// /**
// * 关闭CloseableHttpClient
// * @param httpClient
// */
// public static void closeHttpClient(CloseableHttpClient httpClient){
// if(httpClient!=null){
// try {
// httpClient.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
//}
package com.yutu.base.utils.httpClient;//package com.yutu.base.util.httpClient;
//
//
//
//
//
//public class HttpConfigUtil {
// /**
// * 获取http请求中基础的请求头的集合 (Header)
// * headerMap map中key为header的名,value为header的值
// * @return Header 集合
// */
// public static List<Header> getHttpHeaders(Map<String,String> headerMap){
// List<Header> headers=new ArrayList<Header>();
// headers.add(new BasicHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0"));
// headers.add(new BasicHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"));
// headers.add(new BasicHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"));
// headers.add(new BasicHeader("Accept-Encoding", "gzip, deflate"));
// //headers.add(new BasicHeader("Cookie", ""));
// headers.add(new BasicHeader("Connection", "keep-alive"));
// headers.add(new BasicHeader("Upgrade-Insecure-Requests", "1"));
// String user="yutu.test";
// String key="bbb75df1fe48720c";
// String timeStamp= "";
// try {
// timeStamp = DateUtil.dateToStamp(DateUtil.DateToStr(new Date(),"yyyy-MM-dd HH:mm:ss"));
// }
// catch (Exception e){
// e.printStackTrace();
// }
// String sign= MD5Util.MD5(key+user+timeStamp);
// headers.add(new BasicHeader("user", user));
// headers.add(new BasicHeader("timeStamp", timeStamp));
// headers.add(new BasicHeader("sign", sign));
// if(headerMap!=null){
// Set<Entry<String, String>> entrySet=headerMap.entrySet();
// for(Entry<String,String> entry:entrySet){
// headers.add(new BasicHeader(entry.getKey(), entry.getValue()));
// }
// }
// return headers;
// }
//}
package com.yutu.base.utils.httpClient;
import com.yutu.base.utils.DateUtil;
import com.yutu.base.utils.MD5;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.CookieStore;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class HttpUtil {
/**
* 发送get请求
*
* @param url
* 路径
* @return
*/
public static String httpGet(String url, String cookie) {
// get请求返回结果
String result = null;
String proxyIp=null;
try {
DefaultHttpClient client = new DefaultHttpClient();
// 发送get请求
HttpGet request = new HttpGet(url);
if(cookie!=null&&!"".equals(cookie)){
request.setHeader("cookie", cookie);
}
String user="yutu.test";
String key="bbb75df1fe48720c";
String timeStamp= "";
try {
timeStamp = DateUtil.dateToStamp(DateUtil.DateToStr(new Date(),"yyyy-MM-dd HH:mm:ss"));
}
catch (Exception e){
e.printStackTrace();
}
String sign= MD5.getMD5Str(key+user+timeStamp);
request.addHeader(new BasicHeader("user", user));
request.addHeader(new BasicHeader("timeStamp", timeStamp));
request.addHeader(new BasicHeader("sign", sign));
HttpResponse response = client.execute(request);
/** 请求发送成功,并得到响应 **/
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
/** 读取服务器返回过来的字符串 **/
result = EntityUtils.toString(response.getEntity());
} else {
// logger.error("get请求提交失败:" + url);
System.out.println("{请求FAIL}"+response.getStatusLine().getStatusCode());
result=Integer.toString(response.getStatusLine().getStatusCode());
}
} catch (IOException e) {
// logger.error("get请求提交失败:" + url, e);
e.printStackTrace();
result=e.getMessage();
}
return result;
}
/**
* 发送get请求
*
* @param url
* 路径
* @return
*/
public static String httpPost(String url, HttpEntity entity, String cookie, String contentType) {
// get请求返回结果
String result = null;
String proxyIp=null;
String setCookie=null;
CookieStore cookiestore=null;
Map<String,Object> resultMap=new HashMap<String,Object>();
try {
DefaultHttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 15000);
client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 30000);
// 发送Post请求
HttpPost request = new HttpPost(url);
if(cookie!=null&&!"".equals(cookie)){
request.setHeader("Cookie", cookie);
}
if(contentType!=null&&!"".equals(contentType)){
request.setHeader("Content-Type", contentType);
}
request.setEntity(entity);
HttpResponse response = client.execute(request);
/** 请求发送成功,并得到响应 **/
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
/** 读取服务器返回过来的字符串 **/
result = EntityUtils.toString(response.getEntity());
} else {
// logger.error("get请求提交失败:" + url);
System.out.println("{请求结果FAIL}"+response.getStatusLine().getStatusCode());
result=Integer.toString(response.getStatusLine().getStatusCode());
}
} catch (IOException e) {
// logger.error("get请求提交失败:" + url, e);
e.printStackTrace();
result=e.getMessage();
}
return result;
}
}
spring:
urlConfig:
overseasCheetahUrl: 'http://127.0.0.1:18092/polestar/'
overseasAirTicketUrl: 'http://127.0.0.1:18071/OverseasAirTicket/'
productServiceUrl: 'http://127.0.0.1:28071/20160907_InterfaceConnected/'
polestarLogsServicesUrl: 'http://127.0.0.1:8089/'
dataApiUrl: 'http://127.0.0.1:38071/iffs-data-api/'
pathConfig:
saleReportExcelPath: 'F:/overseasCheetah_ExcelFile/'
saleDetailReportExcelPath: 'F:\\overseasCheetah_ExcelFile/'
server:
port: 8066
compression:
enabled: true
mime-types: application/json,application/xml,application/octet-stream,textml,text/xml,text/plain
min-response-size: 1024
tomcat:
max-connections: 2000
max-threads: 2000
spring:
urlConfig:
overseasCheetahUrl: 'http://192.168.0.88:9050/polestar/'
overseasAirTicketUrl: 'http://192.168.0.88:9011/OverseasAirTicket/'
productServiceUrl: 'http://192.168.0.88:9010/20160907_InterfaceConnected/'
polestarLogsServicesUrl: 'http://192.168.0.88:8055/'
dataApiUrl: 'http://14.18.207.103:38071/iffs-data-api/'
pathConfig:
saleReportExcelPath: 'E:/overseasCheetah_ExcelFile/'
saleDetailReportExcelPath: 'E:\\overseasCheetah_ExcelFile/'
server:
port: 8333
compression:
enabled: true
mime-types: application/json,application/xml,application/octet-stream,textml,text/xml,text/plain
min-response-size: 1024
tomcat:
max-connections: 2000
max-threads: 2000
spring:
urlConfig:
overseasCheetahUrl: 'http://127.0.0.1:18092/polestar/'
overseasAirTicketUrl: 'http://127.0.0.1:18071/OverseasAirTicket/'
productServiceUrl: 'http://127.0.0.1:28071/20160907_InterfaceConnected/'
polestarLogsServicesUrl: 'http://127.0.0.1:8089/'
dataApiUrl: 'http://14.18.207.91:38071/iffs-data-api/'
pathConfig:
saleReportExcelPath: 'F:/overseasCheetah_ExcelFile/'
saleDetailReportExcelPath: 'F:\\overseasCheetah_ExcelFile/'
server:
port: 8066
compression:
enabled: true
mime-types: application/json,application/xml,application/octet-stream,textml,text/xml,text/plain
min-response-size: 1024
tomcat:
max-connections: 2000
max-threads: 2000
spring:
profiles:
active: test
management:
security:
enabled: false
\ No newline at end of file
log4j.rootLogger=info,dailyRollingFile,stdout
log4j.appender.dailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyRollingFile.DatePattern='.'yyyy-MM-dd
log4j.appender.dailyRollingFile.File=./logs/polestar-files-services/polestar-files-services.log
log4j.appender.dailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c]: %m%n
log4j.appender.dailyRollingFile.Append=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d yyyy-MM-dd HH:mm:ss %p [%c] %m%n
log4j.logger.test=INFO,test,stdout
log4j.additivity.test = false
log4j.appender.test=org.apache.log4j.DailyRollingFileAppender
log4j.appender.test.File=./logs/test/test.log
log4j.appender.test.layout=org.apache.log4j.PatternLayout
log4j.appender.test.layout.ConversionPattern=%n[%p]%d{yyyy-MM-dd HH\:mm\:ss}[%M][%m]
log4j.logger.upload=INFO,upload,stdout
log4j.additivity.upload = false
log4j.appender.upload=org.apache.log4j.DailyRollingFileAppender
log4j.appender.upload.File=./logs/upload/upload.log
log4j.appender.upload.layout=org.apache.log4j.PatternLayout
log4j.appender.upload.layout.ConversionPattern=%n[%p]%d{yyyy-MM-dd HH\:mm\:ss}[%M][%m]
log4j.logger.download=INFO,download,stdout
log4j.additivity.download = false
log4j.appender.download=org.apache.log4j.DailyRollingFileAppender
log4j.appender.download.File=./logs/download/download.log
log4j.appender.download.layout=org.apache.log4j.PatternLayout
log4j.appender.download.layout.ConversionPattern=%n[%p]%d{yyyy-MM-dd HH\:mm\:ss}[%M][%m]
log4j.logger.messagequeue=INFO,messagequeue,stdout
log4j.additivity.messagequeue = false
log4j.appender.messagequeue=org.apache.log4j.DailyRollingFileAppender
log4j.appender.messagequeue.File=./logs/messagequeue/messagequeue.log
log4j.appender.messagequeue.layout=org.apache.log4j.PatternLayout
log4j.appender.messagequeue.layout.ConversionPattern=%n[%p]%d{yyyy-MM-dd HH\:mm\:ss}[%M][%m]
log4j.logger.schedule=INFO,schedule,stdout
log4j.additivity.schedule = false
log4j.appender.schedule=org.apache.log4j.DailyRollingFileAppender
log4j.appender.schedule.File=./logs/schedule/schedule.log
log4j.appender.schedule.layout=org.apache.log4j.PatternLayout
log4j.appender.schedule.layout.ConversionPattern=%n[%p]%d{yyyy-MM-dd HH\:mm\:ss}[%M][%m]
log4j.logger.orderService=INFO,orderService,stdout
log4j.additivity.orderService = false
log4j.appender.orderService=org.apache.log4j.DailyRollingFileAppender
log4j.appender.orderService.File=./logs/orderService/orderService.log
log4j.appender.orderService.layout=org.apache.log4j.PatternLayout
log4j.appender.orderService.layout.ConversionPattern=%n[%p]%d{yyyy-MM-dd HH\:mm\:ss}[%M][%m]
报表服务备忘记录 polestar-files-services
报表服务备忘记录 polestar-files-services
0. gitlab: http://118.190.49.40/peterchu/polestar-files-services.git
1. 上传销售规则,参数
D:\pc\Project\polestar\polestar-files-services\logs\upload
[INFO]2020-12-09 11:36:50[uploadSaleRules][上传销售规则,参数:{"customerId":"2cb3aa90-7530-11e9-b14b-c81f66ba6a47","filePath":"D:\\\\webService\\\\overseasCheetah_ExcelFile/2cb3aa90-7530-11e9-b14b-c81f66ba6a47/SalesRulesUpLoad/20201209\\1607483667248workpolicy.xlsx","operator":"%E7%8E%8B%E7%A6%B9"}]
2. 接口参数模板
D:\pc\Project\polestar\polestar-files-services\.idea\httpRequests\http-requests-log.http
3.
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment