master
chenjf 2 years ago
commit 1b56968717

@ -0,0 +1,49 @@
===============
ils 订单服务
- ils订单管理包括excel下单表单下单以及轨迹查询等功能
- 更新时间2023-8-8
## 使用步骤
- java -jar ils-order-service-1.0.jar
- ## 接口文档地址
- http://127.0.0.1:9097/doc.html
## 开发说明和约定
- ## mybatis-plus 插件使用方法
- 实现下面方法即可
- @Mapper
public interface XXXMapper extends BaseMapper<XXXEntity> {
}
- 如果需要自定义需要同时新增接口和xml方法
- ## JwtUtil
- token工具类
- ## TokenAnnotation 接口注解拦截
- 在需要拦截的controller 加上注解@TokenAnnotation(description = "备注")即可
- ## IdGeneratorUtil 插件说明
- String batchId(String prefix) -- 生成递增批次号 prefix + 12位数字
- long snowflakeId() -- 雪花算法唯一id
- ## RedisUtil
- redis工具类
- ## hutool 工具类
- 一个Java基础工具类对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装组成各种Util工具类同时提供以下组件
- 模块 介绍
- hutool-aop JDK动态代理封装提供非IOC下的切面支持
- hutool-bloomFilter 布隆过滤提供一些Hash算法的布隆过滤
- hutool-cache 简单缓存实现
- hutool-core 核心包括Bean操作、日期、各种Util等
- hutool-cron 定时任务模块提供类Crontab表达式的定时任务
- hutool-crypto 加密解密模块,提供对称、非对称和摘要算法封装
- hutool-db JDBC封装后的数据操作基于ActiveRecord思想
- hutool-dfa 基于DFA模型的多关键字查找
- hutool-extra 扩展模块对第三方封装模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等
- hutool-http 基于HttpUrlConnection的Http客户端封装
- hutool-log 自动识别日志实现的日志门面
- hutool-script 脚本执行封装例如Javascript
- hutool-setting 功能更强大的Setting配置文件和Properties封装
- hutool-system 系统参数调用封装JVM信息等
- hutool-json JSON实现
- hutool-captcha 图片验证码实现
- hutool-poi 针对POI中Excel和Word的封装
- hutool-socket 基于Java的NIO和AIO的Socket封装
- hutool-jwt JSON Web Token (JWT)封装实现
可以根据需求对每个模块单独引入也可以通过引入hutool-all方式引入所有模块。
- ## 开发使用规范
-

@ -0,0 +1,15 @@
package org.ils.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
*
* @author chenjf
*/
@SpringBootApplication
public class IlsOrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(IlsOrderServiceApplication.class, args);
}
}

@ -0,0 +1,15 @@
package org.ils.order.annotation;
import java.lang.annotation.*;
/**
* token
* @author chenjf
*/
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TokenAnnotation {
String description() default "";
}

@ -0,0 +1,57 @@
package org.ils.order.aspect;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.ils.order.result.GlobalException;
import org.ils.order.result.JwtVerifyResult;
import org.ils.order.utils.CommonConstant;
import org.ils.order.utils.JwtUtil;
import org.ils.order.utils.SpringContextUtils;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
/**
* token
*/
@Slf4j
@Aspect
@Component
public class TokenAspect {
//controller层切点
@Pointcut("@annotation(org.ils.order.annotation.TokenAnnotation)")
public void TokenAspect() {
}
/**
* Controller
*
* @param joinPoint
*/
@Before("TokenAspect()")
public void doBeforeControl(JoinPoint joinPoint) throws GlobalException {
try {
log.info("Execute Controller: {}.{}()", joinPoint.getTarget().getClass().getName(), joinPoint.getSignature().getClass());
//获取request
HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
String token = request.getHeader(CommonConstant.ACCESS_TOKEN).toString();
log.info("token: {}", token);
JwtVerifyResult jwtVerifyResult = JwtUtil.validateToken(token);
if(!jwtVerifyResult.getSuccess()){
log.error("验证失败:"+jwtVerifyResult.toString());
throw new GlobalException(CommonConstant.ACCESS_TOKEN + "错误" );
}
} catch (Exception e) {
StringBuilder sb = new StringBuilder();
sb.append(CommonConstant.ACCESS_TOKEN );
sb.append(" error: " );
sb.append(e.getMessage() );
log.error("{} ", sb.toString());
throw new GlobalException(sb.toString());
}
}
}

@ -0,0 +1,20 @@
package org.ils.order.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* yml
* @author chenjf
* @datetime 2023/08/09
*/
@Component
@Data
public class BaseConfig {
@Value("${spring.rabbitmq.queue.orderQueue}")
private String ilsOrderQueue;
@Value("${ils.other.host.baiduUrl}")
private String baiduUrl;
}

@ -0,0 +1,34 @@
package org.ils.order.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import java.util.Collections;
@EnableTransactionManagement
@Configuration
@MapperScan("org.ils.order.mapper")
public class MyBatisPlusConfig {
@Bean
public PaginationInnerInterceptor paginationInnerInterceptor() {
PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor();
// 设置最大单页限制数量,默认 500 条,-1 不受限制
paginationInterceptor.setMaxLimit(-1L);
paginationInterceptor.setDbType(DbType.MYSQL);
// 开启 count 的 join 优化,只针对部分 left join
paginationInterceptor.setOptimizeJoin(true);
return paginationInterceptor;
}
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.setInterceptors(Collections.singletonList(paginationInnerInterceptor()));
return mybatisPlusInterceptor;
}
}

@ -0,0 +1,46 @@
package org.ils.order.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.net.UnknownHostException;
/**
* @author chenjf
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
//Json序列化配置
//注意:SpringBoot默认的redis序列化方式是jdk序列化有兴趣可以看默认RedisTemplate源码
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key采用string的序列化方式
template.setKeySerializer(stringRedisSerializer);
//hash的key也采用string的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
//value序列化方式采用jackson
template.setValueSerializer(stringRedisSerializer);
//hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}

@ -0,0 +1,61 @@
package org.ils.order.config;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
/**
* restTemplate
* @author chenjf
*/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate(httpRequestFactory());
}
@Bean
public ClientHttpRequestFactory httpRequestFactory() {
return new HttpComponentsClientHttpRequestFactory(httpClient());
}
@Bean
public HttpClient httpClient() {
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", SSLConnectionSocketFactory.getSocketFactory())
.build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
//设置整个连接池最大连接数
connectionManager.setMaxTotal(400);
//路由是对maxTotal的细分
connectionManager.setDefaultMaxPerRoute(100);
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(3000) //返回数据的超时时间
.setConnectTimeout(2000) //连接上服务器的超时时间
.setConnectionRequestTimeout(1000) //从连接池中获取连接的超时时间
.build();
return HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(connectionManager)
.build();
}
}

@ -0,0 +1,70 @@
package org.ils.order.config;
import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author chenjf
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
//配置了 Swagger 的Docket的bean实例
@Bean
public Docket docket(){
ParameterBuilder ticketPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<>();
ticketPar.name("Authorization").description("token")
.modelRef(new ModelRef("string")).parameterType("header")
.required(false).build();
pars.add(ticketPar.build());
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors, 配置要扫描接口的方式
//basePackage:指定要扫描的包
//any():扫描全部
//withClassAnnotation: 扫描类上的注解
//withMethodAnnotation: 扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("org.ils.order"))
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build()
.globalOperationParameters(pars);
}
//配置Swagger 信息=apiInfo
private ApiInfo apiInfo(){
return new ApiInfo(
"ils engine Api",
"ils 订单服务接口文档",
"v1.0",
"127.0.0.1:9097/",
null,//contact
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList()
);
}
}

@ -0,0 +1,24 @@
package org.ils.order.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author chenjf
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("doc.html")
.addResourceLocations("classpath:/META-INF/resources/");
}
}

@ -0,0 +1,27 @@
package org.ils.order.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class BaseEntity implements Serializable {
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间")
private Long createTime;
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建人")
private String createBy;
@TableField(fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty(value = "更新时间")
private Long updateTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty(value = "更新人")
private String updateBy;
}

@ -0,0 +1,33 @@
package org.ils.order.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
@Data
@Builder
public class IlsMainLine extends BaseEntity implements Serializable {
@JsonFormat(shape = JsonFormat.Shape.STRING)
@ApiModelProperty(value = "主键id", name = "id" )
private Long id;
@ApiModelProperty(value = "主线模型编码", name = "mainLineCode" )
private String mainLineCode;
@ApiModelProperty(value = "主线模型名称", name = "mainLineName" )
private String mainLineName;
@ApiModelProperty(value = "主线模型类型(0=海运1=空运2=首重续重)", name = "mainLineType" )
private Integer mainLineType;
@ApiModelProperty(value = "备注", name = "note" )
private String note;
}

@ -0,0 +1,27 @@
package org.ils.order.handler;
import lombok.extern.slf4j.Slf4j;
import org.ils.order.result.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
*
* @author chenjf
*/
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 0
* @param exception
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Result exceptionHandler(Exception exception){
log.error("exceptionHandler: {}", exception.getMessage());
return Result.error(exception.getMessage());
}
}

@ -0,0 +1,36 @@
package org.ils.order.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class MysqlMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", Long.class, System.currentTimeMillis());
// 或者
this.strictInsertFill(metaObject, "createTime", () -> System.currentTimeMillis(), Long.class);
// 或者
this.fillStrategy(metaObject, "createTime",System.currentTimeMillis());
metaObject.setValue("createBy", "admin");
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "updateTime", Long.class,System.currentTimeMillis());
// 或者
this.strictUpdateFill(metaObject, "updateTime", () -> System.currentTimeMillis(), Long.class);
// 或者
this.fillStrategy(metaObject, "updateTime", System.currentTimeMillis());
metaObject.setValue("updateBy", "admin1");
}
}

@ -0,0 +1,11 @@
package org.ils.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.ils.order.entity.IlsMainLine;
@Mapper
public interface IlsMainLineMapper extends BaseMapper<IlsMainLine> {
}

@ -0,0 +1,16 @@
package org.ils.order.model.DTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class BasePageDto implements Serializable {
@ApiModelProperty(value = "当前页", name = "pageNo" , required = true)
private Integer pageNo;
@ApiModelProperty(value = "分页大小", name = "pageSize" , required = true)
private Integer pageSize;
}

@ -0,0 +1,21 @@
package org.ils.order.model.DTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
@Data
@Builder
public class MainLineDto implements Serializable {
@ApiModelProperty(value = "主线模型名称", name = "mainLineName" , required = true)
private String mainLineName;
@ApiModelProperty(value = "主线模型类型(0=海运1=空运2=首重续重)", name = "mainLineType" , required = true)
private Integer mainLineType;
@ApiModelProperty(value = "备注", name = "note" , required = true)
private String note;
}

@ -0,0 +1,15 @@
package org.ils.order.model.DTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class MainLinePageDto extends BasePageDto implements Serializable {
@ApiModelProperty(value = "主线线模型名称", name = "mainLineName", required = true)
private String mainLineName;
}

@ -0,0 +1,15 @@
package org.ils.order.model.DTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class OrderPageDto extends BasePageDto implements Serializable {
@ApiModelProperty(value = "订单编号", name = "orderId" , required = true)
private String orderId;
}

@ -0,0 +1,28 @@
package org.ils.order.rabbitmq;
import org.ils.order.config.BaseConfig;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* rabbitmq
* @author chenjf
* @datetime 2023/08/09
*/
@Configuration
public class RabbitQueue {
@Autowired
private BaseConfig baseConfig;
/**
*
*/
@Bean
public Queue IlsOrderQueue() {
return new Queue(baseConfig.getIlsOrderQueue());
}
}

@ -0,0 +1,22 @@
package org.ils.order.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
*
* @author chenjf
* @datetime 2023/08/09
*/
@Slf4j
@Component
@RabbitListener(queues = "${spring.rabbitmq.queue.orderQueue}")
public class RabbitReceiver {
@RabbitHandler
public void process(String json) {
log.info("Receiver: {}", json);
}
}

@ -0,0 +1,29 @@
package org.ils.order.rabbitmq;
import org.ils.order.config.BaseConfig;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* rabbitmq
* @author chenjf
* @datetime 2023/08/09
*/
@Component
public class RabbitSender {
@Autowired
private AmqpTemplate rabbitTemplate;
@Autowired
private BaseConfig baseConfig ;
/**
*
* @param queueName
* @param json json
*/
public void sendOrderQueue(String queueName,String json) {
this.rabbitTemplate.convertAndSend(queueName, json);
}
}

@ -0,0 +1,50 @@
package org.ils.order.result;
/**
*
* @describe
* @author chenjf
* @since 2023/8/8
*/
public class GlobalException extends Exception{
private String code;
private String message;
public GlobalException() {
super();
}
public GlobalException(String message) {
super(message);
this.message = message;
}
public GlobalException(String code, String message) {
super(code + ": " + message);
this.code = code;
this.message = message;
}
public GlobalException(String message, Throwable throwable) {
super(message, throwable);
this.message = message;
}
public GlobalException(Throwable throwable) {
super(throwable);
}
public String getCode() {
return code;
}
@Override
public String getMessage() {
return message;
}
@Override
public String toString() {
return code + ": " + message;
}
}

@ -0,0 +1,54 @@
package org.ils.order.result;
import java.util.Map;
public class JwtVerifyResult {
/** 1 是否成功 **/
private Boolean success;
/** 2 返回消息 **/
private String msg;
/** 3 jwt负载 **/
private Map<String,String> payload;
public JwtVerifyResult() {
}
public JwtVerifyResult(Boolean success, String msg) {
this.success = success;
this.msg = msg;
}
public Boolean getSuccess() {
return success;
}
public void setSuccess(Boolean success) {
this.success = success;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Map<String, String> getPayload() {
return payload;
}
public void setPayload(Map<String, String> payload) {
this.payload = payload;
}
@Override
public String toString() {
return "JwtResult{" +
"success=" + success +
", msg='" + msg + '\'' +
", payload=" + payload +
'}';
}
}

@ -0,0 +1,152 @@
package org.ils.order.result;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.ils.order.utils.CommonConstant;
import java.io.Serializable;
/**
*
* @author chenjf
* @date 2023/07/14
* @param <T>
*/
@Data
public class Result<T> implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "成功标志")
private boolean success = true;
@ApiModelProperty(value = "返回处理消息")
private String message = "";
@ApiModelProperty(value = "返回代码")
private Integer code = CommonConstant.HTTP_CODE_200;
@ApiModelProperty(value = "返回数据对象")
private T result;
@ApiModelProperty(value = "时间戳")
private long timestamp = System.currentTimeMillis();
public Result() {
}
/**
*
* @param code code
* @param message
*/
public Result(Integer code, String message) {
this.code = code;
this.message = message;
}
/**
*
* @param message
*/
public Result<T> success(String message) {
this.message = message;
this.code = CommonConstant.HTTP_CODE_200;
this.success = true;
return this;
}
public static<T> Result<T> ok() {
Result<T> r = new Result<T>();
r.setSuccess(true);
r.setCode(CommonConstant.HTTP_CODE_200);
return r;
}
public static<T> Result<T> ok(String msg) {
Result<T> r = new Result<T>();
r.setSuccess(true);
r.setCode(CommonConstant.HTTP_CODE_200);
//Result OK(String msg)方法会造成兼容性问题 issues/I4IP3D
r.setResult((T) msg);
r.setMessage(msg);
return r;
}
public static<T> Result<T> ok(T data) {
Result<T> r = new Result<T>();
r.setSuccess(true);
r.setCode(CommonConstant.HTTP_CODE_200);
r.setResult(data);
return r;
}
public static<T> Result<T> OK() {
Result<T> r = new Result<T>();
r.setSuccess(true);
r.setCode(CommonConstant.HTTP_CODE_200);
return r;
}
public static<T> Result<T> OK(String msg) {
Result<T> r = new Result<T>();
r.setSuccess(true);
r.setCode(CommonConstant.HTTP_CODE_200);
r.setMessage(msg);
r.setResult((T) msg);
return r;
}
public static<T> Result<T> OK(T data) {
Result<T> r = new Result<T>();
r.setSuccess(true);
r.setCode(CommonConstant.HTTP_CODE_200);
r.setResult(data);
return r;
}
public static<T> Result<T> OK(String msg, T data) {
Result<T> r = new Result<T>();
r.setSuccess(true);
r.setCode(CommonConstant.HTTP_CODE_200);
r.setMessage(msg);
r.setResult(data);
return r;
}
public static<T> Result<T> error(String msg, T data) {
Result<T> r = new Result<T>();
r.setSuccess(false);
r.setCode(CommonConstant.HTTP_CODE_201);
r.setMessage(msg);
r.setResult(data);
return r;
}
public static<T> Result<T> error(String msg) {
return error(CommonConstant.HTTP_CODE_201, msg);
}
public static<T> Result<T> error(int code, String msg) {
Result<T> r = new Result<T>();
r.setCode(code);
r.setMessage(msg);
r.setSuccess(false);
return r;
}
public Result<T> error500(String message) {
this.message = message;
this.code = CommonConstant.HTTP_CODE_500;
this.success = false;
return this;
}
}

@ -0,0 +1,42 @@
package org.ils.order.service.impl;
import org.ils.order.model.DTO.MainLineDto;
import org.ils.order.model.DTO.MainLinePageDto;
/**
* 线线
* @author chenjf
*/
public interface MainLineService<T> {
/**
*
* @param model
* @return
*/
public T add(T model);
/**
*
* @param model
* @return
*/
public T del(T model);
/**
*
* @param id
* @param model
* @return
*/
public T edit(String id, MainLineDto model);
/**
*
* @param model
* @return
*/
public T list(MainLinePageDto model);
}

@ -0,0 +1,17 @@
package org.ils.order.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* service
* @author chenjf
*/
@Slf4j
@Service
public class BaseService {
}

@ -0,0 +1,58 @@
package org.ils.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.ils.order.entity.IlsMainLine;
import org.ils.order.mapper.IlsMainLineMapper;
import org.ils.order.model.DTO.MainLineDto;
import org.ils.order.model.DTO.MainLinePageDto;
import org.ils.order.result.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 线
* @author chenjf
*/
@Slf4j
@Service
public class MainLineServiceImpl implements org.ils.order.service.impl.MainLineService {
@Autowired
private IlsMainLineMapper ilsMainLineMapper;
@Override
public Result add(Object model) {
return Result.OK("success", null);
}
@Override
public Result del(Object model) {
return Result.OK("success", null);
}
@Override
public Result edit(String id, MainLineDto model) {
return Result.OK("success", null);
}
@Override
public Result list(MainLinePageDto model) {
QueryWrapper<IlsMainLine> queryWrapper = new QueryWrapper<>();
queryWrapper.like("main_line_name", model.getMainLineName());
queryWrapper.orderByDesc("id");
Page<IlsMainLine> page = new Page<>(model.getPageNo(), model.getPageSize());
IPage<IlsMainLine> pageList = ilsMainLineMapper.selectPage(page, queryWrapper);
return Result.OK("success", pageList);
}
}

@ -0,0 +1,46 @@
package org.ils.order.utils;
/**
*
* @author chenjf
*/
public interface CommonConstant {
/**
*
*/
Integer HTTP_CODE_500 = 500;
/**
*
*/
Integer HTTP_CODE_200 = 200;
/**
*
*/
Integer HTTP_CODE_510 = 510;
/**
* 400
*/
Integer HTTP_CODE_400 = 400;
/**
*
*/
Integer HTTP_CODE_201 = 201;
/**
* 线
*/
String UNDER_LINE = "_";
/**
* header
*/
String ACCESS_TOKEN = "Access-Token";
}

@ -0,0 +1,37 @@
package org.ils.order.utils;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.concurrent.atomic.AtomicInteger;
@Slf4j
@Component
public class IdGeneratorUtil {
private static volatile AtomicInteger atomicInteger = new AtomicInteger(1001);
private static Snowflake snowflake = IdUtil.createSnowflake(2, 1);
public static void main(String[] args) {
log.info("{}", IdGeneratorUtil.batchId("TAI"));
}
/**
* prefix + 12
* @param prefix
*/
public static synchronized String batchId(String prefix) {
String no = DateTime.now().toString(DatePattern.PURE_DATE_PATTERN);
return prefix + no + atomicInteger.getAndIncrement();
}
/**
* id 19
*/
public static synchronized long snowflakeId() {
return snowflake.nextId();
}
}

@ -0,0 +1,108 @@
package org.ils.order.utils;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.exceptions.ValidateException;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTPayload;
import cn.hutool.jwt.RegisteredPayload;
import cn.hutool.jwt.signers.JWTSigner;
import cn.hutool.jwt.signers.JWTSignerUtil;
import lombok.extern.slf4j.Slf4j;
import org.ils.order.result.JwtVerifyResult;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Component
public class JwtUtil {
private static final JWTSigner jwtSigner = JWTSignerUtil.hs256("!34ADAS3ddfdssdfhii@#$$@#efh3".getBytes());
private static final String AUTH_TOKEN_KEY = "ils";
private static final String APP_KEY = "ilsTestKey2023";
private static final String APP_SECRET = "ilsTestKey2023";
public static void main(String[] args) {
Map<String,String> payload = new HashMap<>();
payload.put("userName","ilsadmin");
payload.put("passWord", "123456");
String token = createToken(payload);
log.info("token: {}",token );
JwtVerifyResult jwtVerifyResult = validateToken(token);
if(jwtVerifyResult.getSuccess()){
payload = jwtVerifyResult.getPayload();
log.info("userName: {}, passWord: {}", payload.get("userName"), payload.get("passWord"));
}else{
log.error("验证失败:"+jwtVerifyResult.toString());
}
}
/**
* jwt token
* @param payload jwt
* @return
*/
public static String createToken(Map<String, String> payload) {
Date dateNow = new Date();
String authToken = SecureUtil.md5(SecureUtil.sha256(APP_KEY + "_" + DateUtil.formatDateTime(dateNow) + "_" + APP_SECRET));
payload.put(AUTH_TOKEN_KEY, authToken);
return JWT.create()
.addPayloads(payload)
.setIssuedAt(dateNow)
.setExpiresAt(DateUtil.endOfDay(dateNow))
.sign(jwtSigner);
}
/**
* jwt 1hash25623
* @param token jwt token
* @return map :error = "ok" payload
*/
public static JwtVerifyResult validateToken(String token) {
try {
JWT jwt = JWT.of(token);
jwt.setSigner(jwtSigner);
//1.验证hash256签名
Boolean hs256Bool = jwt.verify();
if (!hs256Bool) {
return new JwtVerifyResult(false, "hash256签名校验失败");
}
//2.验证签名的时间单位s
Boolean validateBool = jwt.validate(60*60*24);
if (!validateBool) {
return new JwtVerifyResult(false, "时间负载校验失败");
}
//3.获取二重 authToken 认证校验
JWTPayload jwtPayload = jwt.getPayload();
Date subAtDate = jwtPayload.getClaimsJson().getDate(RegisteredPayload.ISSUED_AT);
String atScource = String.valueOf(jwtPayload.getClaim(AUTH_TOKEN_KEY));
String authToken = SecureUtil.md5(SecureUtil.sha256(APP_KEY + "_" +DateUtil.formatDateTime(subAtDate) + "_" + APP_SECRET));
if (StrUtil.isEmpty(atScource) || !atScource.equals(authToken)) {
return new JwtVerifyResult(false, "二重身份认证校验失败");
}
//4.将负载参数转换成map返回
JSONObject payloadJson = jwtPayload.getClaimsJson();
payloadJson.remove(AUTH_TOKEN_KEY);
JwtVerifyResult jwtVerifyResult = new JwtVerifyResult(true, "签名有效");
jwtVerifyResult.setPayload(JSONUtil.toBean(payloadJson, new TypeReference<Map<String, String>>() {
}, true));
return jwtVerifyResult;
} catch (ValidateException e) {
return new JwtVerifyResult(true, "无效的签名");
}
}
}

@ -0,0 +1,431 @@
package org.ils.order.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* @author chenjf
* @datetime 2023/07/27
*/
@Component
public class RedisUtil {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
/**
* @param key @param time () @return
*/
public boolean expire(String key, long time) {
try {
if (time > 0) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* key @param key null @return () 0
*/
public long getExpire(String key) {
return redisTemplate.getExpire(key, TimeUnit.SECONDS);
}
/**
* key @param key @return true false
*/
public boolean hasKey(String key) {
try {
return redisTemplate.hasKey(key);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* @param key
*/
@SuppressWarnings("unchecked")
public void del(String... key) {
if (key != null && key.length > 0) {
if (key.length ==0) {
redisTemplate.delete(key[0]);
} else {
redisTemplate.delete((Collection<String>) CollectionUtils.arrayToList(key));
}
}
}
/**
* @param key @return
*/
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}
/**
* @param key @param value @return true false
*/
public boolean set(String key, Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* @param key @param value @param time () time0 time0 @return true false
*/
public boolean set(String key, Object value, long time) {
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
} else {
set(key, value);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* @param key @param delta (0) @return
*/
public long incr(String key, long delta) {
if (delta < 0) {
throw new RuntimeException("递增因子必须大于0");
}
return redisTemplate.opsForValue().increment(key, delta);
}
/**
* @param key @param delta (0) @return
*/
public long decr(String key, long delta) {
if (delta < 0) {
throw new RuntimeException("递减因子必须大于0");
}
return redisTemplate.opsForValue().increment(key, -delta);
}
/* ================================Map=================================*/
/**
* HashGet @param key null @param item null @return
*/
public Object hget(String key, String item) {
return redisTemplate.opsForHash().get(key, item);
}
/**
* hashKey @param key @return
*/
public Map<Object, Object> hmget(String key) {
return redisTemplate.opsForHash().entries(key);
}
/**
* HashSet @param key @param map @return true false
*/
public boolean hmset(String key, Map<String, Object> map) {
try {
redisTemplate.opsForHash().putAll(key, map);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* HashSet @param key @param map @param time () @return true false
*/
public boolean hmset(String key, Map<String, Object> map, long time) {
try {
redisTemplate.opsForHash().putAll(key, map);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* hash, @param key @param item @param value @return true false
*/
public boolean hset(String key, String item, Object value) {
try {
redisTemplate.opsForHash().put(key, item, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* hash, @param key @param item @param value @param time () :hash, @return true false
*/
public boolean hset(String key, String item, Object value, long time) {
try {
redisTemplate.opsForHash().put(key, item, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* hash @param key null @param item 使 null
*/
public void hdel(String key, Object... item) {
redisTemplate.opsForHash().delete(key, item);
}
/**
* hash @param key null @param item null @return true false
*/
public boolean hHasKey(String key, String item) {
return redisTemplate.opsForHash().hasKey(key, item);
}
/**
* hash , @param key @param item @param by (0) @return
*/
public double hincr(String key, String item, double by) {
return redisTemplate.opsForHash().increment(key, item, by);
}
/**
* hash @param key @param item @param by (0) @return
*/
public double hdecr(String key, String item, double by) {
return redisTemplate.opsForHash().increment(key, item, -by);
}
/**
* keySet @param key @return
*/
public Set<Object> sGet(String key) {
try {
return redisTemplate.opsForSet().members(key);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* valueset, @param key @param value @return true false
*/
public boolean sHasKey(String key, Object value) {
try {
return redisTemplate.opsForSet().isMember(key, value);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* set @param key @param values @return
*/
public long sSet(String key, Object... values) {
try {
return redisTemplate.opsForSet().add(key, values);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* set @param key @param time () @param values @return
*/
public long sSetAndTime(String key, long time, Object... values) {
try {
Long count = redisTemplate.opsForSet().add(key, values);
if (time > 0) {
expire(key, time);
}
return count;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* set @param key @return
*/
public long sGetSetSize(String key) {
try {
return redisTemplate.opsForSet().size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* value @param key @param values @return
*/
public long setRemove(String key, Object... values) {
try {
return redisTemplate.opsForSet().remove(key, values);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/* ===============================list=================================*/
/**
* list @param key @param start @param end 0 - @return
*/
public List<Object> lGet(String key, long start, long end) {
try {
return redisTemplate.opsForList().range(key, start, end);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* list @param key @return
*/
public long lGetListSize(String key) {
try {
return redisTemplate.opsForList().size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* list @param key @param index index>=0 0 index<0-- @return
*/
public Object lGetIndex(String key, long index) {
try {
return redisTemplate.opsForList().index(key, index);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* list @param key @param value @param time () @return
*/
public boolean lSet(String key, Object value) {
try {
redisTemplate.opsForList().rightPush(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* list @param key @param value @param time () @return
*/
public boolean lSet(String key, Object value, long time) {
try {
redisTemplate.opsForList().rightPush(key, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* list @param key @param value @param time () @return
*/
public boolean lSet(String key, List<Object> value) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* list @param key @param value @param time () @return
*/
public boolean lSet(String key, List<Object> value, long time) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* list @param key @param index @param value @return
*/
public boolean lUpdateIndex(String key, long index, Object value) {
try {
redisTemplate.opsForList().set(key, index, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* Nvalue @param key @param count @param value @return
*/
public long lRemove(String key, long count, Object value) {
try {
Long remove = redisTemplate.opsForList().remove(key, count, value);
return remove;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
}

@ -0,0 +1,77 @@
package org.ils.order.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Description: spring
* @author: jeecg-boot
*/
@Component
public class SpringContextUtils implements ApplicationContextAware {
/**
*
*/
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtils.applicationContext = applicationContext;
}
/**
* applicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* HttpServletRequest
*/
public static HttpServletRequest getHttpServletRequest() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
}
/**
* HttpServletResponse
*/
public static HttpServletResponse getHttpServletResponse() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
}
public static String getOrigin(){
HttpServletRequest request = getHttpServletRequest();
return request.getHeader("Origin");
}
/**
* name Bean.
*/
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
/**
* classBean.
*/
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
/**
* name,ClazzBean
*/
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}

@ -0,0 +1,101 @@
server:
port: 9097
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
datasource:
url: jdbc:mysql://127.0.0.1:3306/ils_order?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&AllowPublicKeyRetrieval=True&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
druid: # 全局druid参数绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)
# 连接池的配置信息
# 初始化大小,最小,最大
initial-size: 50
min-idle: 5
maxActive: 200
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters去掉后监控界面sql无法统计'wall'用于防火墙
#filters: stat,wall,slf4j
filters: stat,slf4j
# 通过connectProperties属性来打开mergeSql功能慢SQL记录
# connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
#redis 配置
redis:
database: 9
host: 127.0.0.1
timeout: 60s
lettuce:
pool:
max-active: 8 #最大连接数据库连接数,设 -1 为没有限制
max-idle: 30 #最大等待连接中的数量,设 0 为没有限制
max-wait: 10000 #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
min-idle: 0 #最小等待连接中的数量,设 0 为没有限制
shutdown-timeout: 100ms
password: ''
port: 6379
# rabbitmq 配置
rabbitmq:
virtual-host: /
host: localhost
port: 5672
username: guest
password: guest
mode: single # cluster 集群模式
#超时时间
connection-timeout: 10000s
#开启消息确认模式
publisher-confirms: false
#开启消息送达提示
publisher-returns: true
#开启不可达消息不会被broker给删除
template:
mandatory: true
# 表示消息确认方式其有三种配置方式分别是none、manual和auto默认auto
listener:
simple:
acknowledge-mode: auto
# 配置rabbitmq队列
queue:
orderQueue: ilsOrderQueue #订单队列
# mybatis-plus 配置
mybatis-plus:
mapper-locations: mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
type-aliases-package: org.ils.billing.entity
## swagger文档的部分配置 ####
knife4j:
# 生产环境可改为 false改为false后 swagger将不能使用
enable: true
logging:
level:
com.baomidou.samples.metainfo: debug
# 调用外部连接url
ils:
other:
host:
baiduUrl: https://www.baidu.com

@ -0,0 +1,5 @@
spring:
application:
name: ils-order-service
profiles:
active: 'dev'

@ -0,0 +1,31 @@
package org.ils.order;
import cn.hutool.json.JSONObject;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.ils.order.config.BaseConfig;
import org.ils.order.rabbitmq.RabbitSender;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitMqHelloTest{
@Autowired
private BaseConfig baseConfig;
@Autowired
private RabbitSender rabbitSender;
@Test
public void test(){
JSONObject json = new JSONObject();
json.put("userName","test123");
json.put("passWord","123456");
rabbitSender.sendOrderQueue(baseConfig.getIlsOrderQueue(), JSON.toJSONString(json));
log.info( "send: {}", true);
}
}

@ -0,0 +1,45 @@
package org.ils.order;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.ils.order.config.BaseConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.client.RestTemplate;
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class RestTemplateTest {
@Autowired
private RestTemplate restTemplate;
@Autowired
private BaseConfig baseConfig;
@Test
public void test(){
log.info("url :{}", baseConfig.getBaiduUrl());
String content = restTemplate.getForObject( baseConfig.getBaiduUrl(), String.class);
log.info("get content :{}", content);
JSONObject param = new JSONObject();
param.put("alarmType", 2);
param.put("optType", 2);
param.put("optDesc", "自动处理");
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type","application/json;charset=UTF-8");
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
HttpEntity<String> formEntity = new HttpEntity<String>(param.toString(),headers);
ResponseEntity<JSONObject> response2 = restTemplate.postForEntity( baseConfig.getBaiduUrl(), formEntity, JSONObject.class);
log.info("response2--->{}",response2.getBody());
}
}
Loading…
Cancel
Save