Browse Source

resi-mine添加获取12位用户标识接口

dev
jianjun 5 years ago
parent
commit
bb39494f93
  1. 9
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java
  2. 11
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisUtils.java
  3. 149
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/Md5Util.java
  4. 7
      epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java
  5. 11
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/CustomerFunctionController.java
  6. 8
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/CustomerFunctionService.java
  7. 7
      epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/CustomerFunctionServiceImpl.java
  8. 25
      epmet-module/resi-mine/resi-mine-client/src/main/java/com/epmet/resi/mine/dto/from/GenerateShortUserIdFormDTO.java
  9. 27
      epmet-module/resi-mine/resi-mine-client/src/main/java/com/epmet/resi/mine/dto/result/ShortUserIdInfoResultDTO.java
  10. 41
      epmet-module/resi-mine/resi-mine-server/src/main/java/com/epmet/eums/GenerateShortUserIdBizTypeEnum.java
  11. 78
      epmet-module/resi-mine/resi-mine-server/src/main/java/com/epmet/modules/mine/controller/MineController.java

9
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java

@ -254,4 +254,13 @@ public class RedisKeys {
return rootPrefix.concat("tags:grid:relationTag:").concat(gridId).concat(StrConstant.COLON).concat(tagId); return rootPrefix.concat("tags:grid:relationTag:").concat(gridId).concat(StrConstant.COLON).concat(tagId);
} }
/**
* 获取生成的用户标识 缓存Key
* @param shortUserId
* @return
*/
public static String getShortUserIdKey(String shortUserId) {
return rootPrefix.concat("oper:user:shorId:").concat(shortUserId);
}
} }

11
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisUtils.java

@ -10,8 +10,6 @@ package com.epmet.commons.tools.redis;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.*; import org.springframework.data.redis.core.*;
import org.springframework.data.redis.support.atomic.RedisAtomicLong; import org.springframework.data.redis.support.atomic.RedisAtomicLong;
@ -316,4 +314,13 @@ public class RedisUtils {
return redisTemplate.opsForZSet().incrementScore(key, value, delta); return redisTemplate.opsForZSet().incrementScore(key, value, delta);
} }
/**
* @Description 判断key是否存在
* @param key
* @return
*/
public Boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
} }

149
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/Md5Util.java

@ -0,0 +1,149 @@
package com.epmet.commons.tools.utils;
import lombok.extern.slf4j.Slf4j;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
@Slf4j
public class Md5Util {
/**
* 加密盐
*/
public static final String SALT = "EPMET_UMD_SALT";
public static String md5(String string) {
if (string == null || string.trim().length() == 0) {
return null;
}
try {
return getMD5(string.getBytes("GBK"));
} catch (UnsupportedEncodingException e) {
log.error( "md5 is error,msg={0}", e);
return null;
}
}
private static final char hexDigits[] = { // 用来将字节转换成 16 进制表示的字符
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
private static String getMD5(byte[] source) {
String s = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(source);
byte tmp[] = md.digest(); // MD5 的计算结果是一个 128 位的长整数,
// 用字节表示就是 16 个字节
char str[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符,
// 所以表示成 16 进制需要 32 个字符
int k = 0; // 表示转换结果中对应的字符位置
for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节
// 转换成 16 进制字符的转换
byte byte0 = tmp[i]; // 取第 i 个字节
str[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换,
// >>> 为逻辑右移,将符号位一起右移
str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换
}
s = new String(str); // 换后的结果转换为字符串
} catch (Exception e) {
log.error("getMD5 is error,msg={0}", e);
}
return s;
}
private static String byteArrayToHexString(byte b[]) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++)
resultSb.append(byteToHexString(b[i]));
return resultSb.toString();
}
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n += 256;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + "" + hexDigits[d2];
}
public static String MD5Encode(String origin, String charsetname) {
String resultString = null;
try {
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
if (charsetname == null || "".equals(charsetname))
resultString = byteArrayToHexString(md.digest(resultString
.getBytes()));
else
resultString = byteArrayToHexString(md.digest(resultString
.getBytes(charsetname)));
} catch (Exception e) {
log.error("MD5Encode is error,msg={0}", e);
}
return resultString;
}
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
String uuid = "03a1dcd8cb1811eabac1c03fd56f7847";
System.out.println(get12Char(uuid));
}
}
/**
* 获取短字符
*
* @param str
* @return 大写
*/
public static String get12Char(String str) {
String arr[] = ShortText(str);
String rst = (arr[0] + arr[1]).toUpperCase();
return rst.substring(0, 4) + rst.substring(4, 8) + rst.substring(8, 12);
}
private static String[] ShortText(String string) {
String[] chars = new String[]{ // 要使用生成URL的字符
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n",
"o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B",
"C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
String hex = "";
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
hex = byteArrayToHexString(md.digest(SALT.concat(string)
.getBytes("utf-8")));
} catch (Exception e) {
e.printStackTrace();
}
int hexLen = hex.length();
int subHexLen = hexLen / 8;
String[] ShortStr = new String[4];
for (int i = 0; i < subHexLen; i++) {
String outChars = "";
int j = i + 1;
String subHex = hex.substring(i * 8, j * 8);
long idx = Long.valueOf("3FFFFFFF", 16) & Long.valueOf(subHex, 16);
for (int k = 0; k < 6; k++) {
int index = (int) (Long.valueOf("0000003D", 16) & idx);
outChars += chars[index];
idx = idx >> 5;
}
ShortStr[i] = outChars;
}
return ShortStr;
}
}

7
epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/feign/fallback/OperCustomizeOpenFeignClientFallback.java

@ -11,4 +11,11 @@ import org.springframework.stereotype.Component;
*/ */
@Component @Component
public class OperCustomizeOpenFeignClientFallback implements OperCustomizeOpenFeignClient { public class OperCustomizeOpenFeignClientFallback implements OperCustomizeOpenFeignClient {
/**
* 从缓存中查询已登录用户的基本信息以及角色等相关信息
*
* @return
*/
//@PostMapping(value = "/epmetuser/user/loginuserdetails", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
//Result<LoginUserDetailsResultDTO> getLoginUserDetails(@RequestBody LoginUserDetailsFormDTO dto);
} }

11
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/CustomerFunctionController.java

@ -34,6 +34,7 @@ import com.epmet.dto.CustomerFunctionDTO;
import com.epmet.dto.form.CustomerFunctionListFormDTO; import com.epmet.dto.form.CustomerFunctionListFormDTO;
import com.epmet.dto.form.SaveCustomerFunctionFormDTO; import com.epmet.dto.form.SaveCustomerFunctionFormDTO;
import com.epmet.dto.result.CustomerFunctionListResultDTO; import com.epmet.dto.result.CustomerFunctionListResultDTO;
import com.epmet.dto.result.DefaultFunctionListResultDTO;
import com.epmet.excel.CustomerFunctionExcel; import com.epmet.excel.CustomerFunctionExcel;
import com.epmet.service.CustomerFunctionService; import com.epmet.service.CustomerFunctionService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -126,4 +127,14 @@ public class CustomerFunctionController {
customerFunctionService.saveCustomerFunction(formDTO); customerFunctionService.saveCustomerFunction(formDTO);
return new Result(); return new Result();
} }
/**
* desc:获取客户已开通功能列表
* @param formDTO
* @return
*/
@PostMapping("customeropenedfunction")
public Result<List<DefaultFunctionListResultDTO>> customerOpenedFunction(@RequestBody CustomerFunctionListFormDTO formDTO) {
return new Result<List<DefaultFunctionListResultDTO>>().ok(customerFunctionService.customerOpenedFunction(formDTO));
}
} }

8
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/CustomerFunctionService.java

@ -23,6 +23,7 @@ import com.epmet.dto.CustomerFunctionDTO;
import com.epmet.dto.form.CustomerFunctionListFormDTO; import com.epmet.dto.form.CustomerFunctionListFormDTO;
import com.epmet.dto.form.SaveCustomerFunctionFormDTO; import com.epmet.dto.form.SaveCustomerFunctionFormDTO;
import com.epmet.dto.result.CustomerFunctionListResultDTO; import com.epmet.dto.result.CustomerFunctionListResultDTO;
import com.epmet.dto.result.DefaultFunctionListResultDTO;
import com.epmet.entity.CustomerFunctionEntity; import com.epmet.entity.CustomerFunctionEntity;
import java.util.List; import java.util.List;
@ -111,4 +112,11 @@ public interface CustomerFunctionService extends BaseService<CustomerFunctionEnt
* @Description 运营端-保存客户功能关系数据 * @Description 运营端-保存客户功能关系数据
**/ **/
void saveCustomerFunction(SaveCustomerFunctionFormDTO formDTO); void saveCustomerFunction(SaveCustomerFunctionFormDTO formDTO);
/**
* desc:获取客户已开通的功能列表
* @param formDTO
* @return
*/
List<DefaultFunctionListResultDTO> customerOpenedFunction(CustomerFunctionListFormDTO formDTO);
} }

7
epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/impl/CustomerFunctionServiceImpl.java

@ -24,6 +24,7 @@ import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.CustomerFunctionConstant; import com.epmet.constant.CustomerFunctionConstant;
@ -207,7 +208,13 @@ public class CustomerFunctionServiceImpl extends BaseServiceImpl<CustomerFunctio
entity.setFunctionId(cfId); entity.setFunctionId(cfId);
entityList.add(entity); entityList.add(entity);
}); });
RedisUtils.HOUR_ONE_EXPIRE
insertBatch(entityList); insertBatch(entityList);
} }
@Override
public List<DefaultFunctionListResultDTO> customerOpenedFunction(CustomerFunctionListFormDTO formDTO) {
return null;
}
} }

25
epmet-module/resi-mine/resi-mine-client/src/main/java/com/epmet/resi/mine/dto/from/GenerateShortUserIdFormDTO.java

@ -0,0 +1,25 @@
package com.epmet.resi.mine.dto.from;
import lombok.Data;
import java.io.Serializable;
/**
* @Description
* @ClassName MyResiUserInfoFormDTO
* @Auth wangc
* @Date 2020-05-22 17:27
*/
@Data
public class GenerateShortUserIdFormDTO implements Serializable {
/**
* 过期时间 单位秒
*/
private Integer expires;
/**
* 场景类型
*/
private String bizType;
}

27
epmet-module/resi-mine/resi-mine-client/src/main/java/com/epmet/resi/mine/dto/result/ShortUserIdInfoResultDTO.java

@ -0,0 +1,27 @@
package com.epmet.resi.mine.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* desc: 生成用户短用户标识 result
*
* @date: 2020/7/22 10:50
* @author: jianjun liu
*/
@Data
public class ShortUserIdInfoResultDTO implements Serializable {
/**
* 12位用户标识
*/
private String shortUserId;
/**
* 过期时间
*/
private Date expiresTime;
}

41
epmet-module/resi-mine/resi-mine-server/src/main/java/com/epmet/eums/GenerateShortUserIdBizTypeEnum.java

@ -0,0 +1,41 @@
package com.epmet.eums;
/**
* 生成用户唯一标识 枚举类
* dev|test|prod
*
* @author jianjun liu
* @date 2020-07-03 11:14
**/
public enum GenerateShortUserIdBizTypeEnum {
POINT_EXCHANGE("pointExchange", "积分兑换")
;
private String code;
private String desc;
GenerateShortUserIdBizTypeEnum(String code, String name) {
this.code = code;
this.desc = name;
}
public static GenerateShortUserIdBizTypeEnum getEnum(String code) {
GenerateShortUserIdBizTypeEnum[] values = GenerateShortUserIdBizTypeEnum.values();
for (GenerateShortUserIdBizTypeEnum value : values) {
if (code != null && value.getCode().equals(code)) {
return value;
}
}
return null;
}
public String getCode() {
return code;
}
public String getDesc() {
return desc;
}
}

78
epmet-module/resi-mine/resi-mine-server/src/main/java/com/epmet/modules/mine/controller/MineController.java

@ -1,43 +1,91 @@
package com.epmet.modules.mine.controller; package com.epmet.modules.mine.controller;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.Md5Util;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.eums.GenerateShortUserIdBizTypeEnum;
import com.epmet.modules.feign.EpmetUserFeignClient; import com.epmet.modules.feign.EpmetUserFeignClient;
import com.epmet.resi.mine.dto.from.GenerateShortUserIdFormDTO;
import com.epmet.resi.mine.dto.from.MyResiUserInfoFormDTO; import com.epmet.resi.mine.dto.from.MyResiUserInfoFormDTO;
import com.epmet.resi.mine.dto.result.MyResiUserInfoResultDTO; import com.epmet.resi.mine.dto.result.MyResiUserInfoResultDTO;
import com.epmet.resi.mine.dto.result.ShortUserIdInfoResultDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
/** /**
* @Description * @Description
* @ClassName MineController * @ClassName MineController
* @Auth wangc * @Auth wangc
* @Date 2020-05-22 18:33 * @Date 2020-05-22 18:33
*/ */
@Slf4j
@RestController @RestController
@RequestMapping("mine") @RequestMapping("mine")
public class MineController { public class MineController {
@Autowired @Autowired
EpmetUserFeignClient epmetUserFeignClient; private EpmetUserFeignClient epmetUserFeignClient;
@Autowired
private RedisUtils redisUtils;
/**
* @param myResiUserInfoFormDTO
* @return MyResiUserInfoResultDTO
* @Description 居民端获取我的信息
* @author wangc
* @date 2020.05.22 18:37
**/
@PostMapping("profile")
Result<MyResiUserInfoResultDTO> getMyResiInfo(@LoginUser TokenDto tokenDto, @RequestBody MyResiUserInfoFormDTO myResiUserInfoFormDTO) {
myResiUserInfoFormDTO.setUserId(tokenDto.getUserId());
ValidatorUtils.validateEntity(myResiUserInfoFormDTO);
return epmetUserFeignClient.resiMyselfMsg(myResiUserInfoFormDTO);
}
/** /**
* @Description 居民端获取我的信息 * desc生成用户12位唯一标识 默认10分钟过期
* @param myResiUserInfoFormDTO *
* @return MyResiUserInfoResultDTO * @param tokenDto
* @author wangc * @param formDTO
* @date 2020.05.22 18:37 * @return
**/ */
@PostMapping("profile") @PostMapping("generateshortuserid")
Result<MyResiUserInfoResultDTO> getMyResiInfo(@LoginUser TokenDto tokenDto, @RequestBody MyResiUserInfoFormDTO myResiUserInfoFormDTO){ Result<ShortUserIdInfoResultDTO> generateShortUserId(TokenDto tokenDto, @RequestBody GenerateShortUserIdFormDTO formDTO) {
myResiUserInfoFormDTO.setUserId(tokenDto.getUserId()); String userId = tokenDto.getUserId();
ValidatorUtils.validateEntity(myResiUserInfoFormDTO); GenerateShortUserIdBizTypeEnum bizTypeEnum = GenerateShortUserIdBizTypeEnum.getEnum(formDTO.getBizType());
return epmetUserFeignClient.resiMyselfMsg(myResiUserInfoFormDTO); if (bizTypeEnum == null) {
} throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getMsg());
}
String shortUserId = Md5Util.get12Char(bizTypeEnum.getCode().concat(userId));
String redisKey = RedisKeys.getShortUserIdKey(shortUserId);
//过期时间 单位:秒
int expires = formDTO.getExpires() == null ? NumConstant.TEN * NumConstant.SIXTY : formDTO.getExpires();
if (redisUtils.hasKey(shortUserId)) {
redisUtils.expire(redisKey, expires);
} else {
redisUtils.setString(redisKey, userId, expires);
}
Date expiresDate = DateUtils.addDateSeconds(new Date(), expires);
ShortUserIdInfoResultDTO result = new ShortUserIdInfoResultDTO();
result.setShortUserId(shortUserId);
result.setExpiresTime(expiresDate);
log.info("generateShortUserId success,result:{}", JSON.toJSONString(result));
return new Result<ShortUserIdInfoResultDTO>().ok(result);
}
} }

Loading…
Cancel
Save