56 changed files with 768 additions and 1094 deletions
@ -1,25 +0,0 @@ |
|||
-- 用户表 |
|||
CREATE TABLE tb_user ( |
|||
id bigint NOT NULL COMMENT 'id', |
|||
username varchar(50) NOT NULL COMMENT '用户名', |
|||
mobile varchar(20) NOT NULL COMMENT '手机号', |
|||
password varchar(64) COMMENT '密码', |
|||
create_date datetime COMMENT '创建时间', |
|||
PRIMARY KEY (id), |
|||
UNIQUE INDEX (username) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户'; |
|||
|
|||
-- 用户Token表 |
|||
CREATE TABLE tb_token ( |
|||
id bigint NOT NULL COMMENT 'id', |
|||
user_id bigint NOT NULL COMMENT '用户ID', |
|||
token varchar(100) NOT NULL COMMENT 'token', |
|||
expire_date datetime COMMENT '过期时间', |
|||
update_date datetime COMMENT '更新时间', |
|||
PRIMARY KEY (id), |
|||
UNIQUE INDEX (user_id), |
|||
UNIQUE INDEX (token) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户Token'; |
|||
|
|||
-- 账号:13612345678 密码:admin |
|||
INSERT INTO tb_user (id, username, mobile, password, create_date) VALUES (1067246875800000168, 'mark', '13612345678', '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918', now()); |
@ -1,24 +0,0 @@ |
|||
CREATE TABLE tb_user ( |
|||
id NUMBER(20, 0) NOT NULL, |
|||
username varchar(50) NOT NULL, |
|||
mobile varchar(20) NOT NULL, |
|||
password varchar(64), |
|||
create_date date, |
|||
PRIMARY KEY (id) |
|||
); |
|||
CREATE UNIQUE INDEX idx_user_username on tb_user(username); |
|||
|
|||
CREATE TABLE tb_token ( |
|||
id NUMBER(20, 0) NOT NULL, |
|||
user_id NUMBER(20, 0) NOT NULL, |
|||
token varchar(100) NOT NULL, |
|||
expire_date date, |
|||
update_date date, |
|||
PRIMARY KEY (id) |
|||
); |
|||
CREATE UNIQUE INDEX idx_token_user_id on tb_token(user_id); |
|||
CREATE UNIQUE INDEX idx_token on tb_token(token); |
|||
|
|||
|
|||
-- 账号:13612345678 密码:admin |
|||
INSERT INTO tb_user (id, username, mobile, password, create_date) VALUES (1067246875800000168, 'mark', '13612345678', '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918', CURRENT_DATE); |
@ -1,24 +0,0 @@ |
|||
CREATE TABLE tb_user ( |
|||
id int8 NOT NULL, |
|||
username varchar(50) NOT NULL, |
|||
mobile varchar(20) NOT NULL, |
|||
password varchar(64), |
|||
create_date timestamp, |
|||
PRIMARY KEY (id), |
|||
UNIQUE (username) |
|||
); |
|||
|
|||
CREATE TABLE tb_token ( |
|||
id int8 NOT NULL, |
|||
user_id int8 NOT NULL, |
|||
token varchar(100) NOT NULL, |
|||
expire_date timestamp, |
|||
update_date timestamp, |
|||
PRIMARY KEY (id), |
|||
UNIQUE (user_id), |
|||
UNIQUE (token) |
|||
); |
|||
|
|||
|
|||
-- 账号:13612345678 密码:admin |
|||
INSERT INTO tb_user (id, username, mobile, password, create_date) VALUES (1067246875800000168, 'mark', '13612345678', '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918', now()); |
@ -1,24 +0,0 @@ |
|||
CREATE TABLE tb_user ( |
|||
id bigint NOT NULL, |
|||
username varchar(50) NOT NULL, |
|||
mobile varchar(20) NOT NULL, |
|||
password varchar(64), |
|||
create_date datetime, |
|||
PRIMARY KEY (id), |
|||
UNIQUE (username) |
|||
); |
|||
|
|||
CREATE TABLE tb_token ( |
|||
id bigint NOT NULL, |
|||
user_id bigint NOT NULL, |
|||
token varchar(100) NOT NULL, |
|||
expire_date datetime, |
|||
update_date datetime, |
|||
PRIMARY KEY (id), |
|||
UNIQUE (user_id), |
|||
UNIQUE (token) |
|||
); |
|||
|
|||
|
|||
-- 账号:13612345678 密码:admin |
|||
INSERT INTO tb_user (id, username, mobile, password, create_date) VALUES (1067246875800000168, 'mark', '13612345678', '8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918', getdate()); |
@ -1,34 +0,0 @@ |
|||
/** |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.dto; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
import javax.validation.constraints.NotBlank; |
|||
|
|||
/** |
|||
* 登录表单 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@Data |
|||
@ApiModel(value = "登录表单") |
|||
public class LoginDTO { |
|||
@ApiModelProperty(value = "手机号") |
|||
@NotBlank(message="{api.mobile.require}") |
|||
private String mobile; |
|||
|
|||
@ApiModelProperty(value = "密码") |
|||
@NotBlank(message="{api.password.require}") |
|||
private String password; |
|||
|
|||
} |
@ -1,33 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.dto; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
import javax.validation.constraints.NotBlank; |
|||
|
|||
/** |
|||
* 注册表单 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@Data |
|||
@ApiModel(value = "注册表单") |
|||
public class RegisterDTO { |
|||
@ApiModelProperty(value = "手机号") |
|||
@NotBlank(message="{api.mobile.require}") |
|||
private String mobile; |
|||
|
|||
@ApiModelProperty(value = "密码") |
|||
@NotBlank(message="{api.password.require}") |
|||
private String password; |
|||
|
|||
} |
@ -1,21 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.annotation; |
|||
|
|||
import java.lang.annotation.*; |
|||
|
|||
/** |
|||
* 登录效验 |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@Target(ElementType.METHOD) |
|||
@Retention(RetentionPolicy.RUNTIME) |
|||
@Documented |
|||
public @interface Login { |
|||
} |
@ -1,25 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.annotation; |
|||
|
|||
import java.lang.annotation.ElementType; |
|||
import java.lang.annotation.Retention; |
|||
import java.lang.annotation.RetentionPolicy; |
|||
import java.lang.annotation.Target; |
|||
|
|||
/** |
|||
* 登录用户信息 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@Target(ElementType.PARAMETER) |
|||
@Retention(RetentionPolicy.RUNTIME) |
|||
public @interface LoginUser { |
|||
|
|||
} |
@ -1,35 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.config; |
|||
|
|||
import com.epmet.commons.tools.xss.XssFilter; |
|||
import org.springframework.boot.web.servlet.FilterRegistrationBean; |
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
|||
|
|||
import javax.servlet.DispatcherType; |
|||
|
|||
/** |
|||
* Filter配置 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@Configuration |
|||
public class FilterConfig { |
|||
|
|||
@Bean |
|||
public FilterRegistrationBean xssFilterRegistration() { |
|||
FilterRegistrationBean registration = new FilterRegistrationBean(); |
|||
registration.setDispatcherTypes(DispatcherType.REQUEST); |
|||
registration.setFilter(new XssFilter()); |
|||
registration.addUrlPatterns("/*"); |
|||
registration.setName("xssFilter"); |
|||
return registration; |
|||
} |
|||
} |
@ -1,42 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.config; |
|||
|
|||
import com.epmet.interceptor.AuthorizationInterceptor; |
|||
import com.epmet.resolver.LoginUserHandlerMethodArgumentResolver; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.context.annotation.Configuration; |
|||
import org.springframework.web.method.support.HandlerMethodArgumentResolver; |
|||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; |
|||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* MVC配置 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@Configuration |
|||
public class WebConfig implements WebMvcConfigurer { |
|||
@Autowired |
|||
private AuthorizationInterceptor authorizationInterceptor; |
|||
@Autowired |
|||
private LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver; |
|||
|
|||
@Override |
|||
public void addInterceptors(InterceptorRegistry registry) { |
|||
registry.addInterceptor(authorizationInterceptor).addPathPatterns("/**"); |
|||
} |
|||
|
|||
@Override |
|||
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { |
|||
argumentResolvers.add(loginUserHandlerMethodArgumentResolver); |
|||
} |
|||
} |
@ -1,61 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.controller; |
|||
|
|||
|
|||
import com.epmet.annotation.Login; |
|||
import com.epmet.commons.tools.utils.Result; |
|||
import com.epmet.commons.tools.validator.ValidatorUtils; |
|||
import com.epmet.dto.LoginDTO; |
|||
import com.epmet.service.TokenService; |
|||
import com.epmet.service.UserService; |
|||
import io.swagger.annotations.Api; |
|||
import io.swagger.annotations.ApiOperation; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.web.bind.annotation.*; |
|||
import springfox.documentation.annotations.ApiIgnore; |
|||
|
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 登录接口 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@RestController |
|||
@RequestMapping("auth") |
|||
@Api(tags="登录接口") |
|||
public class ApiLoginController { |
|||
@Autowired |
|||
private UserService userService; |
|||
@Autowired |
|||
private TokenService tokenService; |
|||
|
|||
|
|||
@PostMapping("login") |
|||
@ApiOperation("登录") |
|||
public Result<Map<String, Object>> login(@RequestBody LoginDTO dto){ |
|||
//表单校验
|
|||
ValidatorUtils.validateEntity(dto); |
|||
|
|||
//用户登录
|
|||
Map<String, Object> map = userService.login(dto); |
|||
|
|||
return new Result().ok(map); |
|||
} |
|||
|
|||
@Login |
|||
@PostMapping("logout") |
|||
@ApiOperation("退出") |
|||
public Result logout(@ApiIgnore @RequestAttribute("userId") Long userId){ |
|||
tokenService.expireToken(userId); |
|||
return new Result(); |
|||
} |
|||
|
|||
} |
@ -1,54 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.controller; |
|||
|
|||
import com.epmet.commons.tools.utils.Result; |
|||
import com.epmet.commons.tools.validator.ValidatorUtils; |
|||
import com.epmet.entity.UserEntity; |
|||
import com.epmet.dto.RegisterDTO; |
|||
import com.epmet.service.UserService; |
|||
import io.swagger.annotations.Api; |
|||
import io.swagger.annotations.ApiOperation; |
|||
import org.apache.commons.codec.digest.DigestUtils; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.web.bind.annotation.PostMapping; |
|||
import org.springframework.web.bind.annotation.RequestBody; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* 注册接口 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@RestController |
|||
@RequestMapping("register") |
|||
@Api(tags="注册接口") |
|||
public class ApiRegisterController { |
|||
@Autowired |
|||
private UserService userService; |
|||
|
|||
@PostMapping |
|||
@ApiOperation("注册") |
|||
public Result register(@RequestBody RegisterDTO dto){ |
|||
//表单校验
|
|||
ValidatorUtils.validateEntity(dto); |
|||
|
|||
UserEntity user = new UserEntity(); |
|||
user.setMobile(dto.getMobile()); |
|||
user.setUsername(dto.getMobile()); |
|||
user.setPassword(DigestUtils.sha256Hex(dto.getPassword())); |
|||
user.setCreateDate(new Date()); |
|||
userService.insert(user); |
|||
|
|||
return new Result(); |
|||
} |
|||
} |
@ -1,63 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.controller; |
|||
|
|||
import com.epmet.annotation.Login; |
|||
import com.epmet.annotation.LoginUser; |
|||
import com.epmet.commons.tools.utils.Result; |
|||
import com.epmet.dto.UploadDTO; |
|||
import com.epmet.entity.UserEntity; |
|||
import com.epmet.feign.OssFeignClient; |
|||
import io.swagger.annotations.Api; |
|||
import io.swagger.annotations.ApiOperation; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.web.bind.annotation.*; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
import springfox.documentation.annotations.ApiIgnore; |
|||
|
|||
/** |
|||
* 测试接口 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@RestController |
|||
@RequestMapping("test") |
|||
@Api(tags="测试接口") |
|||
public class ApiTestController { |
|||
@Autowired |
|||
private OssFeignClient ossFeignClient; |
|||
|
|||
@Login |
|||
@GetMapping("userInfo") |
|||
@ApiOperation(value="获取用户信息", response=UserEntity.class) |
|||
public Result<UserEntity> userInfo(@ApiIgnore @LoginUser UserEntity user){ |
|||
return new Result<UserEntity>().ok(user); |
|||
} |
|||
|
|||
@Login |
|||
@GetMapping("userId") |
|||
@ApiOperation("获取用户ID") |
|||
public Result<Long> userInfo(@ApiIgnore @RequestAttribute("userId") Long userId){ |
|||
return new Result<Long>().ok(userId); |
|||
} |
|||
|
|||
@GetMapping("notToken") |
|||
@ApiOperation("忽略Token验证测试") |
|||
public Result<String> notToken(){ |
|||
return new Result<String>().ok("无需token也能访问。。。"); |
|||
} |
|||
|
|||
@PostMapping("upload") |
|||
@ApiOperation(value = "上传文件") |
|||
public Result<UploadDTO> upload(@RequestParam("file") MultipartFile file) { |
|||
Result<UploadDTO> dto = ossFeignClient.upload(file); |
|||
|
|||
return dto; |
|||
} |
|||
} |
@ -1,25 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.dao; |
|||
|
|||
import com.epmet.commons.mybatis.dao.BaseDao; |
|||
import com.epmet.entity.TokenEntity; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
/** |
|||
* 用户Token |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@Mapper |
|||
public interface TokenDao extends BaseDao<TokenEntity> { |
|||
TokenEntity getByToken(String token); |
|||
|
|||
TokenEntity getByUserId(Long userId); |
|||
} |
@ -1,25 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.dao; |
|||
|
|||
import com.epmet.commons.mybatis.dao.BaseDao; |
|||
import com.epmet.entity.UserEntity; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
/** |
|||
* 用户 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@Mapper |
|||
public interface UserDao extends BaseDao<UserEntity> { |
|||
UserEntity getUserByMobile(String mobile); |
|||
|
|||
UserEntity getUserByUserId(Long userId); |
|||
} |
@ -1,47 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.entity; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.TableId; |
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* 用户Token |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@Data |
|||
@TableName("tb_token") |
|||
public class TokenEntity implements Serializable { |
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
@TableId |
|||
private Long id; |
|||
/** |
|||
* 用户ID |
|||
*/ |
|||
private Long userId; |
|||
/** |
|||
* 用户token |
|||
*/ |
|||
private String token; |
|||
/** |
|||
* 过期时间 |
|||
*/ |
|||
private Date expireDate; |
|||
/** |
|||
* 更新时间 |
|||
*/ |
|||
private Date updateDate; |
|||
|
|||
} |
@ -1,52 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.entity; |
|||
|
|||
import com.alibaba.fastjson.annotation.JSONField; |
|||
import com.baomidou.mybatisplus.annotation.TableId; |
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* 用户 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@Data |
|||
@TableName("tb_user") |
|||
public class UserEntity implements Serializable { |
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 用户ID |
|||
*/ |
|||
@TableId |
|||
private Long id; |
|||
/** |
|||
* 用户名 |
|||
*/ |
|||
private String username; |
|||
/** |
|||
* 手机号 |
|||
*/ |
|||
private String mobile; |
|||
/** |
|||
* 密码 |
|||
*/ |
|||
@JSONField(serialize=false) |
|||
private String password; |
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createDate; |
|||
|
|||
} |
@ -1,25 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.exception; |
|||
|
|||
import com.epmet.commons.tools.exception.ErrorCode; |
|||
|
|||
/** |
|||
* 模块错误编码,由9位数字组成,前6位为模块编码,后3位为业务编码 |
|||
* <p> |
|||
* 如:100001001(100001代表模块,001代表业务代码) |
|||
* </p> |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
* @since 1.0.0 |
|||
*/ |
|||
public interface ModuleErrorCode extends ErrorCode { |
|||
int TOKEN_NOT_EMPTY = 100005001; |
|||
int TOKEN_INVALID = 100005002; |
|||
} |
@ -1,73 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.interceptor; |
|||
|
|||
import com.epmet.annotation.Login; |
|||
import com.epmet.commons.tools.exception.RenException; |
|||
import com.epmet.entity.TokenEntity; |
|||
import com.epmet.exception.ModuleErrorCode; |
|||
import com.epmet.service.TokenService; |
|||
import org.apache.commons.lang3.StringUtils; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Component; |
|||
import org.springframework.web.method.HandlerMethod; |
|||
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; |
|||
|
|||
import javax.servlet.http.HttpServletRequest; |
|||
import javax.servlet.http.HttpServletResponse; |
|||
|
|||
/** |
|||
* 权限(Token)验证 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@Component |
|||
public class AuthorizationInterceptor extends HandlerInterceptorAdapter { |
|||
@Autowired |
|||
private TokenService tokenService; |
|||
|
|||
public static final String USER_KEY = "userId"; |
|||
|
|||
@Override |
|||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { |
|||
Login annotation; |
|||
if(handler instanceof HandlerMethod) { |
|||
annotation = ((HandlerMethod) handler).getMethodAnnotation(Login.class); |
|||
}else{ |
|||
return true; |
|||
} |
|||
|
|||
if(annotation == null){ |
|||
return true; |
|||
} |
|||
|
|||
//从header中获取token
|
|||
String token = request.getHeader("token"); |
|||
//如果header中不存在token,则从参数中获取token
|
|||
if(StringUtils.isBlank(token)){ |
|||
token = request.getParameter("token"); |
|||
} |
|||
|
|||
//token为空
|
|||
if(StringUtils.isBlank(token)){ |
|||
throw new RenException(ModuleErrorCode.TOKEN_NOT_EMPTY); |
|||
} |
|||
|
|||
//查询token信息
|
|||
TokenEntity tokenEntity = tokenService.getByToken(token); |
|||
if(tokenEntity == null || tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()){ |
|||
throw new RenException(ModuleErrorCode.TOKEN_INVALID); |
|||
} |
|||
|
|||
//设置userId到request里,后续根据userId,获取用户信息
|
|||
request.setAttribute(USER_KEY, tokenEntity.getUserId()); |
|||
|
|||
return true; |
|||
} |
|||
} |
@ -1,53 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.resolver; |
|||
|
|||
import com.epmet.annotation.LoginUser; |
|||
import com.epmet.entity.UserEntity; |
|||
import com.epmet.interceptor.AuthorizationInterceptor; |
|||
import com.epmet.service.UserService; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.core.MethodParameter; |
|||
import org.springframework.stereotype.Component; |
|||
import org.springframework.web.bind.support.WebDataBinderFactory; |
|||
import org.springframework.web.context.request.NativeWebRequest; |
|||
import org.springframework.web.context.request.RequestAttributes; |
|||
import org.springframework.web.method.support.HandlerMethodArgumentResolver; |
|||
import org.springframework.web.method.support.ModelAndViewContainer; |
|||
|
|||
/** |
|||
* 有@LoginUser注解的方法参数,注入当前登录用户 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
@Component |
|||
public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { |
|||
@Autowired |
|||
private UserService userService; |
|||
|
|||
@Override |
|||
public boolean supportsParameter(MethodParameter parameter) { |
|||
return parameter.getParameterType().isAssignableFrom(UserEntity.class) && parameter.hasParameterAnnotation(LoginUser.class); |
|||
} |
|||
|
|||
@Override |
|||
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container, |
|||
NativeWebRequest request, WebDataBinderFactory factory) throws Exception { |
|||
//获取用户ID
|
|||
Object object = request.getAttribute(AuthorizationInterceptor.USER_KEY, RequestAttributes.SCOPE_REQUEST); |
|||
if(object == null){ |
|||
return null; |
|||
} |
|||
|
|||
//获取用户信息
|
|||
UserEntity user = userService.getUserByUserId((Long)object); |
|||
|
|||
return user; |
|||
} |
|||
} |
@ -1,36 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.service; |
|||
|
|||
import com.epmet.commons.mybatis.service.BaseService; |
|||
import com.epmet.entity.TokenEntity; |
|||
|
|||
/** |
|||
* 用户Token |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
public interface TokenService extends BaseService<TokenEntity> { |
|||
|
|||
TokenEntity getByToken(String token); |
|||
|
|||
/** |
|||
* 生成token |
|||
* @param userId 用户ID |
|||
* @return 返回token信息 |
|||
*/ |
|||
TokenEntity createToken(Long userId); |
|||
|
|||
/** |
|||
* 设置token过期 |
|||
* @param userId 用户ID |
|||
*/ |
|||
void expireToken(Long userId); |
|||
|
|||
} |
@ -1,34 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.service; |
|||
|
|||
import com.epmet.commons.mybatis.service.BaseService; |
|||
import com.epmet.entity.UserEntity; |
|||
import com.epmet.dto.LoginDTO; |
|||
|
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 用户 |
|||
* |
|||
* @author Mark sunlightcs@gmail.com |
|||
*/ |
|||
public interface UserService extends BaseService<UserEntity> { |
|||
|
|||
UserEntity getByMobile(String mobile); |
|||
|
|||
UserEntity getUserByUserId(Long userId); |
|||
|
|||
/** |
|||
* 用户登录 |
|||
* @param dto 登录表单 |
|||
* @return 返回登录信息 |
|||
*/ |
|||
Map<String, Object> login(LoginDTO dto); |
|||
} |
@ -1,92 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.service.impl; |
|||
|
|||
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; |
|||
import com.epmet.dao.TokenDao; |
|||
import com.epmet.entity.TokenEntity; |
|||
import com.epmet.service.TokenService; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.Date; |
|||
import java.util.UUID; |
|||
|
|||
|
|||
@Service |
|||
public class TokenServiceImpl extends BaseServiceImpl<TokenDao, TokenEntity> implements TokenService { |
|||
/** |
|||
* 12小时后过期 |
|||
*/ |
|||
private final static int EXPIRE = 3600 * 12; |
|||
|
|||
@Override |
|||
public TokenEntity getByToken(String token) { |
|||
return baseDao.getByToken(token); |
|||
} |
|||
|
|||
@Override |
|||
public TokenEntity createToken(Long userId) { |
|||
//当前时间
|
|||
Date now = new Date(); |
|||
//过期时间
|
|||
Date expireTime = new Date(now.getTime() + EXPIRE * 1000); |
|||
|
|||
//用户token
|
|||
String token; |
|||
|
|||
//判断是否生成过token
|
|||
TokenEntity tokenEntity = baseDao.getByUserId(userId); |
|||
if(tokenEntity == null){ |
|||
//生成一个token
|
|||
token = generateToken(); |
|||
|
|||
tokenEntity = new TokenEntity(); |
|||
tokenEntity.setUserId(userId); |
|||
tokenEntity.setToken(token); |
|||
tokenEntity.setUpdateDate(now); |
|||
tokenEntity.setExpireDate(expireTime); |
|||
|
|||
//保存token
|
|||
this.insert(tokenEntity); |
|||
}else{ |
|||
//判断token是否过期
|
|||
if(tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()){ |
|||
//token过期,重新生成token
|
|||
token = generateToken(); |
|||
}else { |
|||
token = tokenEntity.getToken(); |
|||
} |
|||
|
|||
tokenEntity.setToken(token); |
|||
tokenEntity.setUpdateDate(now); |
|||
tokenEntity.setExpireDate(expireTime); |
|||
|
|||
//更新token
|
|||
this.updateById(tokenEntity); |
|||
} |
|||
|
|||
return tokenEntity; |
|||
} |
|||
|
|||
@Override |
|||
public void expireToken(Long userId){ |
|||
Date now = new Date(); |
|||
|
|||
TokenEntity tokenEntity = new TokenEntity(); |
|||
tokenEntity.setUserId(userId); |
|||
tokenEntity.setUpdateDate(now); |
|||
tokenEntity.setExpireDate(now); |
|||
|
|||
this.updateById(tokenEntity); |
|||
} |
|||
|
|||
private String generateToken(){ |
|||
return UUID.randomUUID().toString().replace("-", ""); |
|||
} |
|||
} |
@ -1,63 +0,0 @@ |
|||
/** |
|||
* Copyright (c) 2018 人人开源 All rights reserved. |
|||
* |
|||
* https://www.renren.io
|
|||
* |
|||
* 版权所有,侵权必究! |
|||
*/ |
|||
|
|||
package com.epmet.service.impl; |
|||
|
|||
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; |
|||
import com.epmet.commons.tools.exception.ErrorCode; |
|||
import com.epmet.commons.tools.exception.RenException; |
|||
import com.epmet.commons.tools.validator.AssertUtils; |
|||
import com.epmet.dao.UserDao; |
|||
import com.epmet.entity.TokenEntity; |
|||
import com.epmet.entity.UserEntity; |
|||
import com.epmet.dto.LoginDTO; |
|||
import com.epmet.service.TokenService; |
|||
import com.epmet.service.UserService; |
|||
import org.apache.commons.codec.digest.DigestUtils; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
|
|||
@Service |
|||
public class UserServiceImpl extends BaseServiceImpl<UserDao, UserEntity> implements UserService { |
|||
@Autowired |
|||
private TokenService tokenService; |
|||
|
|||
@Override |
|||
public UserEntity getByMobile(String mobile) { |
|||
return baseDao.getUserByMobile(mobile); |
|||
} |
|||
|
|||
@Override |
|||
public UserEntity getUserByUserId(Long userId) { |
|||
return baseDao.getUserByUserId(userId); |
|||
} |
|||
|
|||
@Override |
|||
public Map<String, Object> login(LoginDTO dto) { |
|||
UserEntity user = getByMobile(dto.getMobile()); |
|||
AssertUtils.isNull(user, ErrorCode.ACCOUNT_PASSWORD_ERROR); |
|||
|
|||
//密码错误
|
|||
if(!user.getPassword().equals(DigestUtils.sha256Hex(dto.getPassword()))){ |
|||
throw new RenException(ErrorCode.ACCOUNT_PASSWORD_ERROR); |
|||
} |
|||
|
|||
//获取登录token
|
|||
TokenEntity tokenEntity = tokenService.createToken(user.getId()); |
|||
|
|||
Map<String, Object> map = new HashMap<>(2); |
|||
map.put("token", tokenEntity.getToken()); |
|||
map.put("expire", tokenEntity.getExpireDate().getTime() - System.currentTimeMillis()); |
|||
|
|||
return map; |
|||
} |
|||
|
|||
} |
@ -1,3 +0,0 @@ |
|||
#Default |
|||
100005001=token\u4E0D\u80FD\u4E3A\u7A7A |
|||
100005002=token\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
@ -1,3 +0,0 @@ |
|||
#English |
|||
100005001=Token cannot be empty |
|||
100005002=Token is invalid, please log in again |
@ -1,3 +0,0 @@ |
|||
#\u7B80\u4F53\u4E2D\u6587 |
|||
100005001=token\u4E0D\u80FD\u4E3A\u7A7A |
|||
100005002=token\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 |
@ -1,3 +0,0 @@ |
|||
#\u7E41\u4F53\u4E2D\u6587 |
|||
100005001=token\u4E0D\u80FD\u70BA\u7A7A |
|||
100005002=token\u5931\u6548\uFF0C\u8ACB\u91CD\u65B0\u767B\u9304 |
@ -1,3 +0,0 @@ |
|||
#Default |
|||
api.mobile.require=\u624B\u673A\u53F7\u4E0D\u80FD\u4E3A\u7A7A |
|||
api.password.require=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A |
@ -1,3 +0,0 @@ |
|||
#English |
|||
api.mobile.require=The phone number cannot be empty |
|||
api.password.require=Password cannot be empty |
@ -1,3 +0,0 @@ |
|||
#\u7B80\u4F53\u4E2D\u6587 |
|||
api.mobile.require=\u624B\u673A\u53F7\u4E0D\u80FD\u4E3A\u7A7A |
|||
api.password.require=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A |
@ -1,3 +0,0 @@ |
|||
#\u7E41\u4F53\u4E2D\u6587 |
|||
api.mobile.require=\u624B\u6A5F\u865F\u4E0D\u80FD\u70BA\u7A7A |
|||
api.password.require=\u5BC6\u78BC\u4E0D\u80FD\u70BA\u7A7A |
@ -1,14 +0,0 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
|
|||
<mapper namespace="com.epmet.dao.TokenDao"> |
|||
|
|||
<select id="getByToken" resultType="com.epmet.entity.TokenEntity"> |
|||
select * from tb_token where token = #{value} |
|||
</select> |
|||
|
|||
<select id="getByUserId" resultType="com.epmet.entity.TokenEntity"> |
|||
select * from tb_token where user_id = #{value} |
|||
</select> |
|||
|
|||
</mapper> |
@ -1,13 +0,0 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
|
|||
<mapper namespace="com.epmet.dao.UserDao"> |
|||
|
|||
<select id="getUserByMobile" resultType="com.epmet.entity.UserEntity"> |
|||
select * from tb_user where mobile = #{value} |
|||
</select> |
|||
|
|||
<select id="getUserByUserId" resultType="com.epmet.entity.UserEntity"> |
|||
select * from tb_user where id = #{value} |
|||
</select> |
|||
</mapper> |
@ -0,0 +1,121 @@ |
|||
/** |
|||
* Copyright 2018 人人开源 https://www.renren.io
|
|||
* <p> |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* <p> |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* <p> |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
package com.epmet.dto; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
import lombok.Data; |
|||
|
|||
|
|||
/** |
|||
* 居民用户信息表 |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2020-03-16 |
|||
*/ |
|||
@Data |
|||
public class CustomerUserDTO implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 唯一标识 |
|||
*/ |
|||
private String id; |
|||
|
|||
/** |
|||
* 客户Id CUSTOMER.id |
|||
*/ |
|||
private String customerId; |
|||
|
|||
/** |
|||
* 微信openId |
|||
*/ |
|||
private String wxOpenId; |
|||
|
|||
/** |
|||
* 手机号 |
|||
*/ |
|||
private String mobile; |
|||
|
|||
/** |
|||
* 昵称 |
|||
*/ |
|||
private String nickname; |
|||
|
|||
/** |
|||
* 性别:0.未知 1.男性2女性 |
|||
*/ |
|||
private Integer sex; |
|||
|
|||
/** |
|||
* 头像 |
|||
*/ |
|||
private String headImgUrl; |
|||
|
|||
/** |
|||
* 国家 |
|||
*/ |
|||
private String country; |
|||
|
|||
/** |
|||
* 省份 |
|||
*/ |
|||
private String province; |
|||
|
|||
/** |
|||
* 城市 |
|||
*/ |
|||
private String city; |
|||
|
|||
/** |
|||
* 语言 |
|||
*/ |
|||
private String language; |
|||
|
|||
/** |
|||
* 删除标识:0.未删除 1.已删除 |
|||
*/ |
|||
private String delFlag; |
|||
|
|||
/** |
|||
* 乐观锁 |
|||
*/ |
|||
private Integer revision; |
|||
|
|||
/** |
|||
* 创建人 |
|||
*/ |
|||
private String createdBy; |
|||
|
|||
/** |
|||
* 创建时间 |
|||
*/ |
|||
private Date createdTime; |
|||
|
|||
/** |
|||
* 更新人 |
|||
*/ |
|||
private String updatedBy; |
|||
|
|||
/** |
|||
* 更新时间 |
|||
*/ |
|||
private Date updatedTime; |
|||
|
|||
} |
@ -0,0 +1,94 @@ |
|||
/** |
|||
* Copyright 2018 人人开源 https://www.renren.io
|
|||
* <p> |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* <p> |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* <p> |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
package com.epmet.controller; |
|||
|
|||
import com.epmet.commons.tools.page.PageData; |
|||
import com.epmet.commons.tools.utils.ExcelUtils; |
|||
import com.epmet.commons.tools.utils.Result; |
|||
import com.epmet.commons.tools.validator.AssertUtils; |
|||
import com.epmet.commons.tools.validator.ValidatorUtils; |
|||
import com.epmet.commons.tools.validator.group.AddGroup; |
|||
import com.epmet.commons.tools.validator.group.UpdateGroup; |
|||
import com.epmet.commons.tools.validator.group.DefaultGroup; |
|||
import com.epmet.dto.CustomerUserDTO; |
|||
import com.epmet.excel.CustomerUserExcel; |
|||
import com.epmet.service.CustomerUserService; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
import javax.servlet.http.HttpServletResponse; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
|
|||
/** |
|||
* 居民用户信息表 |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2020-03-16 |
|||
*/ |
|||
@RestController |
|||
@RequestMapping("customeruser") |
|||
public class CustomerUserController { |
|||
|
|||
@Autowired |
|||
private CustomerUserService customerUserService; |
|||
|
|||
@GetMapping("page") |
|||
public Result<PageData<CustomerUserDTO>> page(@RequestParam Map<String, Object> params){ |
|||
PageData<CustomerUserDTO> page = customerUserService.page(params); |
|||
return new Result<PageData<CustomerUserDTO>>().ok(page); |
|||
} |
|||
|
|||
@GetMapping("{id}") |
|||
public Result<CustomerUserDTO> get(@PathVariable("id") String id){ |
|||
CustomerUserDTO data = customerUserService.get(id); |
|||
return new Result<CustomerUserDTO>().ok(data); |
|||
} |
|||
|
|||
@PostMapping |
|||
public Result save(@RequestBody CustomerUserDTO dto){ |
|||
//效验数据
|
|||
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); |
|||
customerUserService.save(dto); |
|||
return new Result(); |
|||
} |
|||
|
|||
@PutMapping |
|||
public Result update(@RequestBody CustomerUserDTO dto){ |
|||
//效验数据
|
|||
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); |
|||
customerUserService.update(dto); |
|||
return new Result(); |
|||
} |
|||
|
|||
@DeleteMapping |
|||
public Result delete(@RequestBody String[] ids){ |
|||
//效验数据
|
|||
AssertUtils.isArrayEmpty(ids, "id"); |
|||
customerUserService.delete(ids); |
|||
return new Result(); |
|||
} |
|||
|
|||
@GetMapping("export") |
|||
public void export(@RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { |
|||
List<CustomerUserDTO> list = customerUserService.list(params); |
|||
ExcelUtils.exportExcelToTarget(response, null, list, CustomerUserExcel.class); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,33 @@ |
|||
/** |
|||
* Copyright 2018 人人开源 https://www.renren.io
|
|||
* <p> |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* <p> |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* <p> |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
package com.epmet.dao; |
|||
|
|||
import com.epmet.commons.mybatis.dao.BaseDao; |
|||
import com.epmet.entity.CustomerUserEntity; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
/** |
|||
* 居民用户信息表 |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2020-03-16 |
|||
*/ |
|||
@Mapper |
|||
public interface CustomerUserDao extends BaseDao<CustomerUserEntity> { |
|||
|
|||
} |
@ -0,0 +1,91 @@ |
|||
/** |
|||
* Copyright 2018 人人开源 https://www.renren.io
|
|||
* <p> |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* <p> |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* <p> |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
package com.epmet.entity; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
|
|||
import com.epmet.commons.mybatis.entity.BaseEpmetEntity; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* 居民用户信息表 |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2020-03-16 |
|||
*/ |
|||
@Data |
|||
@EqualsAndHashCode(callSuper=false) |
|||
@TableName("customer_user") |
|||
public class CustomerUserEntity extends BaseEpmetEntity { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 客户Id CUSTOMER.id |
|||
*/ |
|||
private String customerId; |
|||
|
|||
/** |
|||
* 微信openId |
|||
*/ |
|||
private String wxOpenId; |
|||
|
|||
/** |
|||
* 手机号 |
|||
*/ |
|||
private String mobile; |
|||
|
|||
/** |
|||
* 昵称 |
|||
*/ |
|||
private String nickname; |
|||
|
|||
/** |
|||
* 性别:0.未知 1.男性2女性 |
|||
*/ |
|||
private Integer sex; |
|||
|
|||
/** |
|||
* 头像 |
|||
*/ |
|||
private String headImgUrl; |
|||
|
|||
/** |
|||
* 国家 |
|||
*/ |
|||
private String country; |
|||
|
|||
/** |
|||
* 省份 |
|||
*/ |
|||
private String province; |
|||
|
|||
/** |
|||
* 城市 |
|||
*/ |
|||
private String city; |
|||
|
|||
/** |
|||
* 语言 |
|||
*/ |
|||
private String language; |
|||
|
|||
} |
@ -0,0 +1,86 @@ |
|||
/** |
|||
* Copyright 2018 人人开源 https://www.renren.io
|
|||
* <p> |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* <p> |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* <p> |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
package com.epmet.excel; |
|||
|
|||
import cn.afterturn.easypoi.excel.annotation.Excel; |
|||
import lombok.Data; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* 居民用户信息表 |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2020-03-16 |
|||
*/ |
|||
@Data |
|||
public class CustomerUserExcel { |
|||
|
|||
@Excel(name = "唯一标识") |
|||
private String id; |
|||
|
|||
@Excel(name = "客户Id CUSTOMER.id") |
|||
private String customerId; |
|||
|
|||
@Excel(name = "微信openId") |
|||
private String wxOpenId; |
|||
|
|||
@Excel(name = "手机号") |
|||
private String mobile; |
|||
|
|||
@Excel(name = "昵称") |
|||
private String nickname; |
|||
|
|||
@Excel(name = "性别:0.未知 1.男性2女性") |
|||
private Integer sex; |
|||
|
|||
@Excel(name = "头像") |
|||
private String headImgUrl; |
|||
|
|||
@Excel(name = "国家") |
|||
private String country; |
|||
|
|||
@Excel(name = "省份") |
|||
private String province; |
|||
|
|||
@Excel(name = "城市") |
|||
private String city; |
|||
|
|||
@Excel(name = "语言") |
|||
private String language; |
|||
|
|||
@Excel(name = "删除标识:0.未删除 1.已删除") |
|||
private String delFlag; |
|||
|
|||
@Excel(name = "乐观锁") |
|||
private Integer revision; |
|||
|
|||
@Excel(name = "创建人") |
|||
private String createdBy; |
|||
|
|||
@Excel(name = "创建时间") |
|||
private Date createdTime; |
|||
|
|||
@Excel(name = "更新人") |
|||
private String updatedBy; |
|||
|
|||
@Excel(name = "更新时间") |
|||
private Date updatedTime; |
|||
|
|||
|
|||
} |
@ -0,0 +1,47 @@ |
|||
/** |
|||
* Copyright 2018 人人开源 https://www.renren.io
|
|||
* <p> |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* <p> |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* <p> |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
package com.epmet.redis; |
|||
|
|||
import com.epmet.commons.tools.redis.RedisUtils; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
/** |
|||
* 居民用户信息表 |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2020-03-16 |
|||
*/ |
|||
@Component |
|||
public class CustomerUserRedis { |
|||
@Autowired |
|||
private RedisUtils redisUtils; |
|||
|
|||
public void delete(Object[] ids) { |
|||
|
|||
} |
|||
|
|||
public void set(){ |
|||
|
|||
} |
|||
|
|||
public String get(String id){ |
|||
return null; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,95 @@ |
|||
/** |
|||
* Copyright 2018 人人开源 https://www.renren.io
|
|||
* <p> |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* <p> |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* <p> |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
package com.epmet.service; |
|||
|
|||
import com.epmet.commons.mybatis.service.BaseService; |
|||
import com.epmet.commons.tools.page.PageData; |
|||
import com.epmet.dto.CustomerUserDTO; |
|||
import com.epmet.entity.CustomerUserEntity; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 居民用户信息表 |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2020-03-16 |
|||
*/ |
|||
public interface CustomerUserService extends BaseService<CustomerUserEntity> { |
|||
|
|||
/** |
|||
* 默认分页 |
|||
* |
|||
* @param params |
|||
* @return PageData<CustomerUserDTO> |
|||
* @author generator |
|||
* @date 2020-03-16 |
|||
*/ |
|||
PageData<CustomerUserDTO> page(Map<String, Object> params); |
|||
|
|||
/** |
|||
* 默认查询 |
|||
* |
|||
* @param params |
|||
* @return java.util.List<CustomerUserDTO> |
|||
* @author generator |
|||
* @date 2020-03-16 |
|||
*/ |
|||
List<CustomerUserDTO> list(Map<String, Object> params); |
|||
|
|||
/** |
|||
* 单条查询 |
|||
* |
|||
* @param id |
|||
* @return CustomerUserDTO |
|||
* @author generator |
|||
* @date 2020-03-16 |
|||
*/ |
|||
CustomerUserDTO get(String id); |
|||
|
|||
/** |
|||
* 默认保存 |
|||
* |
|||
* @param dto |
|||
* @return void |
|||
* @author generator |
|||
* @date 2020-03-16 |
|||
*/ |
|||
void save(CustomerUserDTO dto); |
|||
|
|||
/** |
|||
* 默认更新 |
|||
* |
|||
* @param dto |
|||
* @return void |
|||
* @author generator |
|||
* @date 2020-03-16 |
|||
*/ |
|||
void update(CustomerUserDTO dto); |
|||
|
|||
/** |
|||
* 批量删除 |
|||
* |
|||
* @param ids |
|||
* @return void |
|||
* @author generator |
|||
* @date 2020-03-16 |
|||
*/ |
|||
void delete(String[] ids); |
|||
} |
@ -0,0 +1,104 @@ |
|||
/** |
|||
* Copyright 2018 人人开源 https://www.renren.io
|
|||
* <p> |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU General Public License as published by |
|||
* the Free Software Foundation, either version 3 of the License, or |
|||
* (at your option) any later version. |
|||
* <p> |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* <p> |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
package com.epmet.service.impl; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; |
|||
import com.epmet.commons.tools.page.PageData; |
|||
import com.epmet.commons.tools.utils.ConvertUtils; |
|||
import com.epmet.commons.tools.constant.FieldConstant; |
|||
import com.epmet.dao.CustomerUserDao; |
|||
import com.epmet.dto.CustomerUserDTO; |
|||
import com.epmet.entity.CustomerUserEntity; |
|||
import com.epmet.redis.CustomerUserRedis; |
|||
import com.epmet.service.CustomerUserService; |
|||
import org.apache.commons.lang3.StringUtils; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
|
|||
import java.util.Arrays; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 居民用户信息表 |
|||
* |
|||
* @author generator generator@elink-cn.com |
|||
* @since v1.0.0 2020-03-16 |
|||
*/ |
|||
@Service |
|||
public class CustomerUserServiceImpl extends BaseServiceImpl<CustomerUserDao, CustomerUserEntity> implements CustomerUserService { |
|||
|
|||
@Autowired |
|||
private CustomerUserRedis customerUserRedis; |
|||
|
|||
@Override |
|||
public PageData<CustomerUserDTO> page(Map<String, Object> params) { |
|||
IPage<CustomerUserEntity> page = baseDao.selectPage( |
|||
getPage(params, FieldConstant.CREATED_TIME, false), |
|||
getWrapper(params) |
|||
); |
|||
return getPageData(page, CustomerUserDTO.class); |
|||
} |
|||
|
|||
@Override |
|||
public List<CustomerUserDTO> list(Map<String, Object> params) { |
|||
List<CustomerUserEntity> entityList = baseDao.selectList(getWrapper(params)); |
|||
|
|||
return ConvertUtils.sourceToTarget(entityList, CustomerUserDTO.class); |
|||
} |
|||
|
|||
private QueryWrapper<CustomerUserEntity> getWrapper(Map<String, Object> params){ |
|||
String id = (String)params.get(FieldConstant.ID_HUMP); |
|||
|
|||
QueryWrapper<CustomerUserEntity> wrapper = new QueryWrapper<>(); |
|||
wrapper.eq(StringUtils.isNotBlank(id), FieldConstant.ID, id); |
|||
|
|||
return wrapper; |
|||
} |
|||
|
|||
@Override |
|||
public CustomerUserDTO get(String id) { |
|||
CustomerUserEntity entity = baseDao.selectById(id); |
|||
return ConvertUtils.sourceToTarget(entity, CustomerUserDTO.class); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void save(CustomerUserDTO dto) { |
|||
CustomerUserEntity entity = ConvertUtils.sourceToTarget(dto, CustomerUserEntity.class); |
|||
insert(entity); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void update(CustomerUserDTO dto) { |
|||
CustomerUserEntity entity = ConvertUtils.sourceToTarget(dto, CustomerUserEntity.class); |
|||
updateById(entity); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void delete(String[] ids) { |
|||
// 逻辑删除(@TableLogic 注解)
|
|||
baseDao.deleteBatchIds(Arrays.asList(ids)); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,27 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
|
|||
<mapper namespace="com.epmet.dao.CustomerUserDao"> |
|||
|
|||
<resultMap type="com.epmet.entity.CustomerUserEntity" id="customerUserMap"> |
|||
<result property="id" column="ID"/> |
|||
<result property="customerId" column="CUSTOMER_ID"/> |
|||
<result property="wxOpenId" column="WX_OPEN_ID"/> |
|||
<result property="mobile" column="MOBILE"/> |
|||
<result property="nickname" column="NICKNAME"/> |
|||
<result property="sex" column="SEX"/> |
|||
<result property="headImgUrl" column="HEAD_IMG_URL"/> |
|||
<result property="country" column="COUNTRY"/> |
|||
<result property="province" column="PROVINCE"/> |
|||
<result property="city" column="CITY"/> |
|||
<result property="language" column="LANGUAGE"/> |
|||
<result property="delFlag" column="DEL_FLAG"/> |
|||
<result property="revision" column="REVISION"/> |
|||
<result property="createdBy" column="CREATED_BY"/> |
|||
<result property="createdTime" column="CREATED_TIME"/> |
|||
<result property="updatedBy" column="UPDATED_BY"/> |
|||
<result property="updatedTime" column="UPDATED_TIME"/> |
|||
</resultMap> |
|||
|
|||
|
|||
</mapper> |
Loading…
Reference in new issue