feat:添加商品类目级联列表接口

This commit is contained in:
haoxr 2020-11-05 01:13:51 +08:00
parent abe0201905
commit 32e4e3d60c
32 changed files with 761 additions and 35 deletions

View File

@ -24,7 +24,7 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-core</artifactId> <artifactId>common-core</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -24,7 +24,7 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-core</artifactId> <artifactId>common-core</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -24,7 +24,7 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-core</artifactId> <artifactId>common-core</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -24,7 +24,7 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-core</artifactId> <artifactId>common-core</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -14,11 +14,11 @@
<module>youlai-admin</module> <module>youlai-admin</module>
<module>youlai-auth</module> <module>youlai-auth</module>
<module>youlai-gateway</module> <module>youlai-gateway</module>
<module>youlai-registry</module>
<module>mall-sms</module> <module>mall-sms</module>
<module>mall-ums</module> <module>mall-ums</module>
<module>mall-pms</module> <module>mall-pms</module>
<module>mall-oms</module> <module>mall-oms</module>
<module>youlai-registry</module>
</modules> </modules>
<parent> <parent>
@ -109,6 +109,4 @@
</dependency> </dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
</project> </project>

View File

@ -31,19 +31,19 @@
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-web</artifactId> <artifactId>common-web</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-db</artifactId> <artifactId>common-db</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-knife4j</artifactId> <artifactId>common-knife4j</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -24,7 +24,7 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-core</artifactId> <artifactId>common-core</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -30,37 +30,37 @@
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-db</artifactId> <artifactId>common-db</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-web</artifactId> <artifactId>common-web</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-knife4j</artifactId> <artifactId>common-knife4j</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-core</artifactId> <artifactId>common-core</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-redis</artifactId> <artifactId>common-redis</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-web</artifactId> <artifactId>common-web</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>

View File

@ -0,0 +1,36 @@
<?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">
<parent>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common-core</artifactId>
<dependencies>
<!-- swagger2-annotations -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
</dependency>
<!-- spring boot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<optional>true</optional>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,5 @@
package com.youlai.common.core.base;
public class BaseController<T> {
}

View File

@ -0,0 +1,26 @@
package com.youlai.common.core.base;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
@ApiModel
public class BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间", example = "2020-01-01 00:00:00")
private Date gmtCreate;
@TableField(fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty(value = "创建时间", example = "2020-01-01 00:00:00")
private Date gmtModified;
}

View File

@ -0,0 +1,74 @@
package com.youlai.common.core.constant;
public interface AuthConstants {
/**
* JWT存储权限前缀
*/
String AUTHORITY_PREFIX = "ROLE_";
/**
* JWT存储权限属性
*/
String AUTHORITY_CLAIM_NAME = "authorities";
/**
* 认证信息Http请求头
*/
String JWT_TOKEN_HEADER = "Authorization";
/**
* JWT令牌前缀
*/
String JWT_TOKEN_PREFIX = "Bearer ";
/**
* JWT载体key
*/
String JWT_PAYLOAD_KEY = "payload";
/**
* Redis缓存权限规则key
*/
String RESOURCE_ROLES_KEY = "auth:resourceRoles";
/**
* 黑名单token前缀
*/
String TOKEN_BLACKLIST_PREFIX = "auth:token:blacklist:";
String CLIENT_DETAILS_FIELDS = "client_id, CONCAT('{noop}',client_secret) as client_secret, resource_ids, scope, "
+ "authorized_grant_types, web_server_redirect_uri, authorities, access_token_validity, "
+ "refresh_token_validity, additional_information, autoapprove";
String BASE_CLIENT_DETAILS_SQL = "select " + CLIENT_DETAILS_FIELDS + " from oauth_client_details";
String FIND_CLIENT_DETAILS_SQL = BASE_CLIENT_DETAILS_SQL + " order by client_id";
String SELECT_CLIENT_DETAILS_SQL = BASE_CLIENT_DETAILS_SQL + " where client_id = ?";
/**
* 密码加密方式
*/
String BCRYPT = "{bcrypt}";
String JWT_USER_ID_KEY = "id";
String JWT_CLIENT_ID_KEY = "client_id";
/**
* 有来商城后台管理客户端ID
*/
String ADMIN_CLIENT_ID="youlai-mall-admin";
/**
* 有来商城微信小程序客户端ID
*/
String WEAPP_CLIENT_ID="youlai-mall-weapp";
/**
* 后台管理接口路径匹配
*/
String ADMIN_URL_PATTERN ="/youlai-admin/**" ;
}

View File

@ -0,0 +1,10 @@
package com.youlai.common.core.constant;
public interface Constants {
/**
* 正常状态值
*/
Integer STATUS_NORMAL_VALUE = 1;
}

View File

@ -0,0 +1,13 @@
package com.youlai.common.core.result;
/**
* @author haoxr
* @date 2020-06-23
**/
public interface IResultCode {
String getCode();
String getMsg();
}

View File

@ -0,0 +1,23 @@
package com.youlai.common.core.result;
import lombok.Data;
/**
* @author haoxr
* @date 2020-06-24
**/
@Data
public class PageResult<T> extends Result {
private long total;
public static <T> PageResult<T> success(T data, Long total) {
PageResult<T> pageResult = new PageResult();
pageResult.setCode(ResultCode.SUCCESS.getCode());
pageResult.setMsg(ResultCode.SUCCESS.getMsg());
pageResult.setData(data);
pageResult.setTotal(total);
return pageResult;
}
}

View File

@ -0,0 +1,67 @@
package com.youlai.common.core.result;
import lombok.Data;
import java.io.Serializable;
/**
* @author haoxr
* @date 2020-06-23
**/
@Data
public class Result<T> implements Serializable {
private String code;
private T data;
private String msg;
public static <T> Result<T> success() {
return success(null);
}
public static <T> Result<T> success(T data) {
ResultCode rce = ResultCode.SUCCESS;
if (data instanceof Boolean && Boolean.FALSE.equals(data)) {
rce = ResultCode.SYSTEM_EXECUTION_ERROR;
}
return result(rce, data);
}
public static <T> Result<T> error() {
return result(ResultCode.SYSTEM_EXECUTION_ERROR.getCode(), ResultCode.SYSTEM_EXECUTION_ERROR.getMsg(), null);
}
public static <T> Result<T> error(String msg) {
return result(ResultCode.SYSTEM_EXECUTION_ERROR.getCode(), msg, null);
}
public static <T> Result<T> status(boolean status) {
if (status) {
return success();
} else {
return error();
}
}
public static <T> Result<T> custom(IResultCode resultCode) {
return result(resultCode.getCode(), resultCode.getMsg(), null);
}
private static <T> Result<T> result(IResultCode resultCode, T data) {
return result(resultCode.getCode(), resultCode.getMsg(), data);
}
private static <T> Result<T> result(String code, String msg, T data) {
Result<T> result = new Result<T>();
result.setCode(code);
result.setData(data);
result.setMsg(msg);
return result;
}
}

View File

@ -0,0 +1,83 @@
package com.youlai.common.core.result;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author haoxr
* @date 2020-06-23
**/
@AllArgsConstructor
@NoArgsConstructor
public enum ResultCode implements IResultCode, Serializable {
SUCCESS("00000","一切ok"),
USER_ERROR("A0001","用户端错误"),
USER_LOGIN_ERROR("A0200","用户登录异常"),
USER_ACCOUNT_NOT_EXIST("A0201","用户账户不存在"),
USER_ACCOUNT_LOCKED("A0202","用户账户被冻结"),
USER_ACCOUNT_INVALID("A0203","用户账户已作废"),
USERNAME_OR_PASSWORD_ERROR("A0210","用户名或密码错误"),
INPUT_PASSWORD_EXCEED_LIMIT("A0211","用户输入密码次数超限"),
TOKEN_INVALID_OR_EXPIRED("A0230","token无效或已过期"),
USER_AUTHORIZED_ERROR ("A0300","访问权限异常"),
USER_ACCESS_UNAUTHORIZED ("A0301","访问未授权"),
USER_REQUEST_PARAM_ERROR("A0400","用户请求参数错误"),
USER_REQUEST_PARAM_IS_BLANK("A0410","请求必填参数为空"),
USER_UPLOAD_FILE_ERROR("A0700","用户上传文件异常"),
USER_UPLOAD_FILE_TYPE_NOT_MATCH("A0701","用户上传文件类型不匹配"),
USER_UPLOAD_FILE_SIZE_EXCEEDS("A0702","用户上传文件太大"),
USER_UPLOAD_IMAGE_SIZE_EXCEEDS("A0703","用户上传图片太大"),
SYSTEM_EXECUTION_ERROR("B0001","系统执行出错"),
SYSTEM_EXECUTION_TIMEOUT("B0100","系统执行超时"),
SYSTEM_ORDER_PROCESSING_TIMEOUT("B0100","系统订单处理超时"),
SYSTEM_DISASTER_RECOVERY_TRIGGER("B0200","系统容灾功能被出发"),
SYSTEM_LIMITING("B0210","系统限流"),
SYSTEM_FUNCTION_DEGRADATION("B0220","系统功能降级"),
SYSTEM_RESOURCE_ERROR("B0300","系统资源异常"),
SYSTEM_RESOURCE_EXHAUSTION("B0310","系统资源耗尽"),
SYSTEM_RESOURCE_ACCESS_ERROR("B0320","系统资源访问异常"),
SYSTEM_READ_DISK_FILE_ERROR("B0321","系统读取磁盘文件失败"),
CALL_THIRD_PARTY_SERVICE_ERROR("C0001","调用第三方服务出错"),
MIDDLEWARE_SERVICE_ERROR("C0100","中间件服务出错"),
INTERFACE_NOT_EXIST("C0113","接口不存在"),
MESSAGE_SERVICE_ERROR("C0120","消息服务出错"),
MESSAGE_DELIVERY_ERROR("C0121","消息投递出错"),
MESSAGE_CONSUMPTION_ERROR("C0122","消息消费出错"),
MESSAGE_SUBSCRIPTION_ERROR("C0123","消息订阅出错"),
MESSAGE_GROUP_NOT_FOUND("C0124","消息分组未查到"),
DATABASE_ERROR("C0300","数据库服务出错"),
DATABASE_TABLE_NOT_EXIST("C0311","表不存在"),
DATABASE_COLUMN_NOT_EXIST("C0312","列不存在"),
DATABASE_DUPLICATE_COLUMN_NAME("C0321","多表关联中存在多个相同名称的列"),
DATABASE_DEADLOCK("C0331","数据库死锁"),
DATABASE_PRIMARY_KEY_CONFLICT("C0341","主键冲突") ;
@Override
public String getCode() {
return code;
}
@Override
public String getMsg() {
return msg;
}
private String code;
private String msg;
}

View File

@ -0,0 +1,30 @@
<?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">
<parent>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common-db</artifactId>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,32 @@
package com.youlai.common.db.config;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.youlai.common.db.handler.MetaHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
public class MybatisPlusConfig {
/**
* 分页插件自动识别数据库类型 多租户请参考官网插件扩展
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
/**
* 自动填充数据库创建人创建时间更新人更新时间
*/
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(new MetaHandler());
return globalConfig;
}
}

View File

@ -0,0 +1,25 @@
package com.youlai.common.db.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @author haoxr
**/
@Component
public class MetaHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("gmtCreate", new Date(), metaObject);
this.setFieldValByName("gmtModified", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("gmtCreate", new Date(), metaObject);
}
}

View File

@ -0,0 +1,20 @@
<?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">
<parent>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common-knife4j</artifactId>
<dependencies>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,66 @@
package com.youlai.common.knife4j;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.Collections;
@Configuration
@EnableSwagger2
@Slf4j
public class Knife4jConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build()
//.securitySchemes(Collections.singletonList(securityScheme()))
.securityContexts(Collections.singletonList(securityContext()))
.useDefaultResponseMessages(false);
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("有来科技API")
.contact(new Contact("youlai", "https://www.youlai.store", "youlaistore@163.com"))
.version("1.0.0")
.build();
}
private SecurityScheme securityScheme() {
/* GrantType grantType = new ResourceOwnerPasswordCredentialsGrant(AUTH_TOKEN_ENDPOINT);
return new OAuthBuilder()
.name("OAuth2")
.grantTypes(Collections.singletonList(grantType))
.scopes(Arrays.asList(scopes()))
.build();*/
return null;
}
private AuthorizationScope[] scopes() {
AuthorizationScope[] scopes = {};
return scopes;
}
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(Collections.singletonList(new SecurityReference("OAuth2", scopes())))
.forPaths(PathSelectors.any())
.build();
}
}

View File

@ -0,0 +1,20 @@
<?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">
<parent>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common-redis</artifactId>
<dependencies>
<!-- spring boot redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,23 @@
package com.youlai.common.redis;
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.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setConnectionFactory(factory);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}

View File

@ -0,0 +1,32 @@
<?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">
<parent>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common-web</artifactId>
<properties>
<youlai.version>1.0.0-SNAPSHOT</youlai.version>
</properties>
<dependencies>
<dependency>
<groupId>com.youlai</groupId>
<artifactId>common-core</artifactId>
<version>${youlai.version}</version>
</dependency>
<!-- spring boot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,39 @@
package com.youlai.common.web.config;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.TimeZone;
@Configuration
@Slf4j
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
// 后台Long值传递给前端精度丢失问题JS最大精度整数是Math.pow(2,53)
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
// simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
// simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
converters.add(0, jackson2HttpMessageConverter);
}
}

View File

@ -0,0 +1,27 @@
package com.youlai.common.web.exception;
import com.youlai.common.core.result.IResultCode;
import lombok.Getter;
@Getter
public class BizException extends RuntimeException {
public IResultCode resultCode;
public BizException(IResultCode errorCode) {
super(errorCode.getMsg());
this.resultCode = errorCode;
}
public BizException(String message){
super(message);
}
public BizException(String message, Throwable cause){
super(message, cause);
}
public BizException(Throwable cause){
super(cause);
}
}

View File

@ -0,0 +1,38 @@
package com.youlai.common.web.exception;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.youlai.common.core.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* 全局系统异常处理
*
* @author hxrui
* @date 2020-02-25 13:54
**/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(IllegalArgumentException.class)
public Result handleIllegalArgumentException(IllegalArgumentException e) {
return Result.error(e.getMessage());
}
@ExceptionHandler(JsonProcessingException.class)
public Result handleJsonProcessingException(JsonProcessingException e) {
return Result.error(e.getMessage());
}
@ExceptionHandler(BizException.class)
public Result handleBizException(BizException e) {
if (e.getResultCode() != null) {
return Result.custom(e.getResultCode());
}
return Result.error(e.getMessage());
}
}

View File

@ -0,0 +1,24 @@
package com.youlai.common.web.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
@Data
@Accessors(chain = true)
@ApiModel
public class CascaderVO {
@ApiModelProperty(name="节点value")
private String value;
@ApiModelProperty(name="节点label")
private String label;
@ApiModelProperty(name="子节点")
private List<CascaderVO> children;
}

View File

@ -0,0 +1,21 @@
package com.youlai.common.web.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
@Data
@Accessors(chain = true)
public class TreeSelectVO {
private Long id;
private String label;
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List<TreeSelectVO> children;
}

View File

@ -14,11 +14,11 @@
<packaging>pom</packaging> <packaging>pom</packaging>
<modules> <modules>
<module>youlai-common-core</module> <module>common-core</module>
<module>youlai-common-knife4j</module> <module>common-knife4j</module>
<module>youlai-common-redis</module> <module>common-redis</module>
<module>youlai-common-web</module> <module>common-web</module>
<module>youlai-common-db</module> <module>common-db</module>
</modules> </modules>
<properties> <properties>
@ -94,37 +94,31 @@
<!-- common --> <!-- common -->
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-core</artifactId> <artifactId>common-core</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-knife4j</artifactId> <artifactId>common-knife4j</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-redis</artifactId> <artifactId>common-redis</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-web</artifactId> <artifactId>common-web</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-db</artifactId> <artifactId>common-db</artifactId>
<version>${youlai.version}</version>
</dependency>
<dependency>
<groupId>com.youlai</groupId>
<artifactId>youlai-common-auth</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>

View File

@ -21,13 +21,13 @@
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-core</artifactId> <artifactId>common-core</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.youlai</groupId> <groupId>com.youlai</groupId>
<artifactId>youlai-common-redis</artifactId> <artifactId>common-redis</artifactId>
<version>${youlai.version}</version> <version>${youlai.version}</version>
</dependency> </dependency>