|
@@ -14,6 +14,7 @@ import cn.rankin.data.api.app.vo.DeviceUserVo;
|
|
|
import cn.rankin.data.api.app.vo.ItemVo;
|
|
|
import cn.rankin.data.api.app.vo.UserInfoVo;
|
|
|
import cn.rankin.data.api.user.dto.TerminalDeviceDTO;
|
|
|
+import cn.rankin.data.api.user.dto.UserDeviceDTO;
|
|
|
import cn.rankin.data.api.user.entity.UserRecommend;
|
|
|
import cn.rankin.data.api.user.entity.UserTag;
|
|
|
import cn.rankin.data.api.user.entity.UserTagProductRelation;
|
|
@@ -37,7 +38,8 @@ import java.util.Map;
|
|
|
|
|
|
@Service
|
|
|
@Slf4j
|
|
|
-public class UserService {
|
|
|
+public class UserService
|
|
|
+{
|
|
|
|
|
|
public final static String USER_FORMAT_KEY = RedisKey.USER_FORMAT_KEY;
|
|
|
|
|
@@ -56,8 +58,14 @@ public class UserService {
|
|
|
@Autowired
|
|
|
private RedisService redisService;
|
|
|
|
|
|
- public APIResult<UserInfoVo> login(LoginInfoDTO loginInfoDTO) {
|
|
|
+ public APIResult<UserInfoVo> login(LoginInfoDTO loginInfoDTO)
|
|
|
+ {
|
|
|
String deviceCode = loginInfoDTO.getDeviceCode();
|
|
|
+ String deviceModel = loginInfoDTO.getDeviceModel();
|
|
|
+ String deviceMfrs = loginInfoDTO.getDeviceMfrs();
|
|
|
+ String deviceName = loginInfoDTO.getDeviceName();
|
|
|
+ String deviceType = loginInfoDTO.getDeviceType();
|
|
|
+
|
|
|
String merchant = loginInfoDTO.getMerchant();
|
|
|
String eid = loginInfoDTO.getEid();
|
|
|
String loginPassword = loginInfoDTO.getPassword();
|
|
@@ -65,15 +73,37 @@ public class UserService {
|
|
|
|
|
|
APIResult<TerminalUserVo> userVoAPIResult = userClient.loadUserByEid(eid);
|
|
|
TerminalUserVo userVo = userVoAPIResult.getData();
|
|
|
- if (!userVoAPIResult.getSuccess()) {
|
|
|
+ if (!userVoAPIResult.getSuccess())
|
|
|
+ {
|
|
|
log.error("load user api error");
|
|
|
return APIResult.error(ApiWebCode.LOGIN_ERROR);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ //操作用户登录设备信息
|
|
|
+ if (deviceName != null && !"".equals(deviceName.trim()))
|
|
|
+ {
|
|
|
+ String uid = userVo.getId();
|
|
|
+ UserDeviceDTO dto = new UserDeviceDTO();
|
|
|
+ dto.setDeviceCode(deviceCode);
|
|
|
+ dto.setDeviceModel(deviceModel);
|
|
|
+ dto.setDeviceType(deviceType);
|
|
|
+ dto.setDeviceMfrs(deviceMfrs);
|
|
|
+ dto.setDeviceName(deviceName);
|
|
|
+
|
|
|
+ int opRet = userClient.opUserDevice(uid,dto);
|
|
|
+ if (opRet == 0)
|
|
|
+ {
|
|
|
+ log.error("Failed to operated user device with[uid={},deviceCode={},deviceModel={},deviceName={}]", uid, deviceCode, deviceModel, deviceName);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ log.info("Succeed to operating user device with[uid={},deviceCode={},deviceModel={},deviceName={}]", uid, deviceCode, deviceModel, deviceName);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
String storePassword = userVo.getPassword();
|
|
|
- if (!SecurityManager.validate(loginPassword, storePassword)) {
|
|
|
+ if (!SecurityManager.validate(loginPassword, storePassword))
|
|
|
+ {
|
|
|
log.error("密码校验错误, loginPassword={}, storePassword={}", loginPassword, storePassword);
|
|
|
return APIResult.error(ApiWebCode.PASSWORD_ERROR);
|
|
|
}
|
|
@@ -89,16 +119,20 @@ public class UserService {
|
|
|
String terminal = loginInfoDTO.getTerminal();
|
|
|
|
|
|
// 网页端登陆在40分钟后可以踢掉对方网页登陆
|
|
|
- if (PlatForm.WEB.equals(terminal)) {
|
|
|
+ if (PlatForm.WEB.equals(terminal))
|
|
|
+ {
|
|
|
String key = getUserFormatKey(userId);
|
|
|
DeviceUserVo deviceUserVo = (DeviceUserVo) redisService.get(key);
|
|
|
- if (deviceUserVo != null ) {
|
|
|
+ if (deviceUserVo != null)
|
|
|
+ {
|
|
|
Date refreshAt = deviceUserVo.getRefreshAt();
|
|
|
String lastTerminal = deviceUserVo.getTerminal();
|
|
|
- if (DateUtils.addSeconds(refreshAt, forceLoginInterval).before(new Date()) && PlatForm.WEB.equals(lastTerminal)) {
|
|
|
+ if (DateUtils.addSeconds(refreshAt, forceLoginInterval).before(new Date()) && PlatForm.WEB.equals(lastTerminal))
|
|
|
+ {
|
|
|
log.info("网页端强制登陆, deviceCode={}, eid={}", deviceCode, eid);
|
|
|
APIResult<Boolean> forceLogoutResult = this.logout(userId);
|
|
|
- if (!forceLogoutResult.getSuccess()) {
|
|
|
+ if (!forceLogoutResult.getSuccess())
|
|
|
+ {
|
|
|
return APIResult.error(new BaseCode(forceLogoutResult.getCode(), forceLogoutResult.getMessage()));
|
|
|
}
|
|
|
}
|
|
@@ -106,7 +140,8 @@ public class UserService {
|
|
|
}
|
|
|
|
|
|
TerminalDeviceVo deviceVo = this.bind(userId, deviceCode, merchant, ip, terminal);
|
|
|
- if (deviceVo == null) {
|
|
|
+ if (deviceVo == null)
|
|
|
+ {
|
|
|
return APIResult.error(ApiWebCode.DEVICE_BOUND_ERROR);
|
|
|
}
|
|
|
|
|
@@ -121,9 +156,11 @@ public class UserService {
|
|
|
return APIResult.ok(userInfoVo);
|
|
|
}
|
|
|
|
|
|
- public APIResult<Boolean> logout(String userId) {
|
|
|
+ public APIResult<Boolean> logout(String userId)
|
|
|
+ {
|
|
|
APIResult<Boolean> unbindResult = userClient.deviceUnbind(userId);
|
|
|
- if (!unbindResult.getSuccess()) {
|
|
|
+ if (!unbindResult.getSuccess())
|
|
|
+ {
|
|
|
return APIResult.error(ApiWebCode.LOGOUT_ERROR);
|
|
|
}
|
|
|
|
|
@@ -133,7 +170,8 @@ public class UserService {
|
|
|
return APIResult.ok();
|
|
|
}
|
|
|
|
|
|
- public TerminalDeviceVo bind(String userId, String deviceCode, String merchant, String ip, String terminal) {
|
|
|
+ public TerminalDeviceVo bind(String userId, String deviceCode, String merchant, String ip, String terminal)
|
|
|
+ {
|
|
|
TerminalDeviceDTO deviceDTO = new TerminalDeviceDTO();
|
|
|
deviceDTO.setUserId(userId);
|
|
|
deviceDTO.setDeviceCode(deviceCode);
|
|
@@ -141,41 +179,49 @@ public class UserService {
|
|
|
deviceDTO.setIp(ip);
|
|
|
deviceDTO.setTerminal(terminal);
|
|
|
APIResult<TerminalDeviceVo> apiResult = userClient.deviceBind(deviceDTO);
|
|
|
- if (!apiResult.getSuccess()) {
|
|
|
+ if (!apiResult.getSuccess())
|
|
|
+ {
|
|
|
log.error("bind user api error");
|
|
|
- throw new RuntimeException(apiResult.getMessage());
|
|
|
+ return null;
|
|
|
}
|
|
|
return apiResult.getData();
|
|
|
}
|
|
|
|
|
|
// load user and device info
|
|
|
- public DeviceUserVo load(String uid) {
|
|
|
+ public DeviceUserVo load(String uid)
|
|
|
+ {
|
|
|
String key = getUserFormatKey(uid);
|
|
|
DeviceUserVo deviceUserVo = (DeviceUserVo) redisService.get(key);
|
|
|
- if (deviceUserVo == null) {
|
|
|
+ if (deviceUserVo == null)
|
|
|
+ {
|
|
|
deviceUserVo = getDeviceUserVo(uid);
|
|
|
}
|
|
|
- if (deviceUserVo != null) {
|
|
|
+ if (deviceUserVo != null)
|
|
|
+ {
|
|
|
this.save(deviceUserVo);
|
|
|
}
|
|
|
return deviceUserVo;
|
|
|
}
|
|
|
|
|
|
- public UserInfoVo getUserInfo(String uid) {
|
|
|
+ public UserInfoVo getUserInfo(String uid)
|
|
|
+ {
|
|
|
DeviceUserVo deviceUserVo = this.load(uid);
|
|
|
return toUserInfoVo(deviceUserVo, false);
|
|
|
}
|
|
|
|
|
|
- public DeviceUserVo getDeviceUserVo(String uid) {
|
|
|
+ public DeviceUserVo getDeviceUserVo(String uid)
|
|
|
+ {
|
|
|
APIResult<TerminalDeviceVo> deviceAPIResult = userClient.findDeviceByUid(uid);
|
|
|
- if (!deviceAPIResult.getSuccess()) {
|
|
|
+ if (!deviceAPIResult.getSuccess())
|
|
|
+ {
|
|
|
log.error("load device api error, {}", deviceAPIResult.getMessage());
|
|
|
return null;
|
|
|
}
|
|
|
TerminalDeviceVo deviceVo = deviceAPIResult.getData();
|
|
|
// load user info
|
|
|
APIResult<TerminalUserVo> userAPIResult = userClient.findUserById(uid);
|
|
|
- if (!userAPIResult.getSuccess()) {
|
|
|
+ if (!userAPIResult.getSuccess())
|
|
|
+ {
|
|
|
log.error("load user api error, {}", userAPIResult.getMessage());
|
|
|
return null;
|
|
|
}
|
|
@@ -184,30 +230,44 @@ public class UserService {
|
|
|
return toDeviceUserVo(userVo, deviceVo);
|
|
|
}
|
|
|
|
|
|
- public APIResult<UserInfoVo> refresh(String deviceCode, String merchant, Boolean force) {
|
|
|
+ public APIResult<UserInfoVo> refresh(String deviceCode, String merchant, Boolean force)
|
|
|
+ {
|
|
|
|
|
|
List<TerminalDeviceVo> deviceVoList = userClient.findByDeviceCode(deviceCode);
|
|
|
- if (CollectionUtils.isEmpty(deviceVoList)) {
|
|
|
+ if (CollectionUtils.isEmpty(deviceVoList))
|
|
|
+ {
|
|
|
log.error("device code not bind any eid! deviceCode={}", deviceCode);
|
|
|
- return APIResult.error(ApiWebCode.NOT_EXISTS);
|
|
|
+ return APIResult.error(ApiWebCode.INVALID_TOKEN);
|
|
|
}
|
|
|
|
|
|
TerminalDeviceVo deviceVo = null;
|
|
|
|
|
|
- for (TerminalDeviceVo dv : deviceVoList) {
|
|
|
+ for (TerminalDeviceVo dv : deviceVoList)
|
|
|
+ {
|
|
|
//判断当前鉴权账号
|
|
|
- if(StringUtils.isBlank(dv.getMerchant())){
|
|
|
+ if (StringUtils.isBlank(dv.getMerchant()))
|
|
|
+ {
|
|
|
//如果设备渠道code为空,则设置为当前渠道code
|
|
|
dv.setMerchant(merchant);
|
|
|
- //更新数据库
|
|
|
- updateDeviceBind(dv);
|
|
|
+ try
|
|
|
+ {
|
|
|
+ //更新数据库
|
|
|
+ updateDeviceBind(dv);
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ return APIResult.error(ApiWebCode.DEVICE_BOUND_ERROR);
|
|
|
+ }
|
|
|
deviceVo = dv;
|
|
|
- }else if(StringUtils.isNotBlank(merchant) && merchant.equals(dv.getMerchant())) {
|
|
|
+ }
|
|
|
+ else if (StringUtils.isNotBlank(merchant) && merchant.equals(dv.getMerchant()))
|
|
|
+ {
|
|
|
deviceVo = dv;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if(null == deviceVo){
|
|
|
+ if (null == deviceVo)
|
|
|
+ {
|
|
|
log.error("by device code not find this merchant! deviceCode={},merchant={}", deviceCode, merchant);
|
|
|
return APIResult.error(ApiWebCode.INVALID_TOKEN);
|
|
|
}
|
|
@@ -215,21 +275,26 @@ public class UserService {
|
|
|
String uid = deviceVo.getUserId();
|
|
|
|
|
|
DeviceUserVo deviceUserVo;
|
|
|
- if (force) {
|
|
|
+ if (force)
|
|
|
+ {
|
|
|
APIResult<TerminalUserVo> userAPIResult = userClient.findUserById(uid);
|
|
|
- if (!userAPIResult.getSuccess()) {
|
|
|
+ if (!userAPIResult.getSuccess())
|
|
|
+ {
|
|
|
log.error("load user api error, {}", userAPIResult.getMessage());
|
|
|
- return APIResult.error(ApiWebCode.NOT_EXISTS);
|
|
|
+ return APIResult.error(ApiWebCode.INVALID_TOKEN);
|
|
|
}
|
|
|
TerminalUserVo userVo = userAPIResult.getData();
|
|
|
deviceUserVo = toDeviceUserVo(userVo, deviceVo);
|
|
|
- }else {
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
String key = getUserFormatKey(uid);
|
|
|
deviceUserVo = (DeviceUserVo) redisService.get(key);
|
|
|
}
|
|
|
|
|
|
// 无论怎样都能成功刷新
|
|
|
- if (deviceUserVo == null) {
|
|
|
+ if (deviceUserVo == null)
|
|
|
+ {
|
|
|
deviceUserVo = getDeviceUserVo(uid);
|
|
|
}
|
|
|
|
|
@@ -240,30 +305,35 @@ public class UserService {
|
|
|
return APIResult.ok(userInfoVo);
|
|
|
}
|
|
|
|
|
|
- private void updateDeviceBind(TerminalDeviceVo terminalDeviceVo) {
|
|
|
+ private void updateDeviceBind(TerminalDeviceVo terminalDeviceVo)
|
|
|
+ {
|
|
|
TerminalDeviceDTO deviceDTO = new TerminalDeviceDTO();
|
|
|
deviceDTO.setId(terminalDeviceVo.getId());
|
|
|
deviceDTO.setMerchant(terminalDeviceVo.getMerchant());
|
|
|
deviceDTO.setDeviceCode(terminalDeviceVo.getDeviceCode());
|
|
|
deviceDTO.setUserId(terminalDeviceVo.getUserId());
|
|
|
APIResult apiResult = userClient.updateDeviceBind(deviceDTO);
|
|
|
- if (!apiResult.getSuccess()) {
|
|
|
+ if (!apiResult.getSuccess())
|
|
|
+ {
|
|
|
log.error("update bind user api error");
|
|
|
throw new RuntimeException("update bind user api error");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// cache user and device info
|
|
|
- public void save(DeviceUserVo deviceUserVo) {
|
|
|
+ public void save(DeviceUserVo deviceUserVo)
|
|
|
+ {
|
|
|
String key = getUserFormatKey(deviceUserVo.getUid());
|
|
|
redisService.set(key, deviceUserVo);
|
|
|
}
|
|
|
|
|
|
- public static String getUserFormatKey(String uid) {
|
|
|
+ public static String getUserFormatKey(String uid)
|
|
|
+ {
|
|
|
return String.format(USER_FORMAT_KEY, uid);
|
|
|
}
|
|
|
|
|
|
- public static UserInfoVo toUserInfoVo(DeviceUserVo deviceUserVo, Boolean withToken) {
|
|
|
+ public static UserInfoVo toUserInfoVo(DeviceUserVo deviceUserVo, Boolean withToken)
|
|
|
+ {
|
|
|
UserInfoVo userInfoVo = new UserInfoVo();
|
|
|
userInfoVo.setUid(deviceUserVo.getUid());
|
|
|
userInfoVo.setEid(deviceUserVo.getEid());
|
|
@@ -271,13 +341,15 @@ public class UserService {
|
|
|
userInfoVo.setMerchantName(deviceUserVo.getMerchantName());
|
|
|
userInfoVo.setMerchantContactName(deviceUserVo.getMerchantContactName());
|
|
|
userInfoVo.setMerchantContactMobile(deviceUserVo.getMerchantContactMobile());
|
|
|
- if (withToken) {
|
|
|
+ if (withToken)
|
|
|
+ {
|
|
|
userInfoVo.setToken(deviceUserVo.getToken());
|
|
|
}
|
|
|
return userInfoVo;
|
|
|
}
|
|
|
|
|
|
- public DeviceUserVo toDeviceUserVo(TerminalUserVo userVo, TerminalDeviceVo deviceVo) {
|
|
|
+ public DeviceUserVo toDeviceUserVo(TerminalUserVo userVo, TerminalDeviceVo deviceVo)
|
|
|
+ {
|
|
|
DeviceUserVo deviceUserVo = new DeviceUserVo();
|
|
|
deviceUserVo.setUid(userVo.getId());
|
|
|
deviceUserVo.setEid(userVo.getCode());
|
|
@@ -293,8 +365,10 @@ public class UserService {
|
|
|
return deviceUserVo;
|
|
|
}
|
|
|
|
|
|
- public void refreshToken(DeviceUserVo deviceUserVo) {
|
|
|
+ public void refreshToken(DeviceUserVo deviceUserVo)
|
|
|
+ {
|
|
|
String token = SecurityManager.generateToken(deviceUserVo.getPassword());
|
|
|
+ log.info("token ======================= ,{}", token);
|
|
|
Date nowTime = new Date();
|
|
|
Date expireAt = DateUtils.addSeconds(nowTime, this.expiration);
|
|
|
deviceUserVo.setToken(token);
|
|
@@ -302,34 +376,43 @@ public class UserService {
|
|
|
deviceUserVo.setRefreshAt(nowTime);
|
|
|
}
|
|
|
|
|
|
- public List<Map<String, Object>> getProductValid(String uid){
|
|
|
+ public List<Map<String, Object>> getProductValid(String uid)
|
|
|
+ {
|
|
|
//TODO: move this method to userCient
|
|
|
return productClient.getProductValid(uid, 0L, 50, "endTime", Sort.Direction.ASC);
|
|
|
}
|
|
|
|
|
|
- public List<UserTag> findUserTagByCodeUid(String code, String uid) {
|
|
|
+ public List<UserTag> findUserTagByCodeUid(String code, String uid)
|
|
|
+ {
|
|
|
return userClient.findUserTagByCodeUid(code, uid);
|
|
|
}
|
|
|
|
|
|
- public List<UserRecommend> getUserRecommendCourses(String uid) {
|
|
|
+ public List<UserRecommend> getUserRecommendCourses(String uid)
|
|
|
+ {
|
|
|
return userClient.getUserRecommendCourses(uid);
|
|
|
}
|
|
|
|
|
|
- public APIResult<Page<ItemVo>> findPageByUserTagId(String userTagId, String merchantId, Integer pageNo, Integer pageSize) {
|
|
|
+ public APIResult<Page<ItemVo>> findPageByUserTagId(String userTagId, String merchantId, Integer pageNo, Integer pageSize)
|
|
|
+ {
|
|
|
Page<UserTagProductRelation> resultPage = userClient.findPageByUserTagId(userTagId, pageNo, pageSize);
|
|
|
|
|
|
- if(resultPage == null){
|
|
|
+ if (resultPage == null)
|
|
|
+ {
|
|
|
throw new RuntimeException("请求失败!");
|
|
|
}
|
|
|
|
|
|
List<ItemVo> itemVos = new ArrayList<>();
|
|
|
List<UserTagProductRelation> userTagProductRelations = resultPage.getList();
|
|
|
- userTagProductRelations.forEach(userTagProductRelation -> {
|
|
|
+ userTagProductRelations.forEach(userTagProductRelation ->
|
|
|
+ {
|
|
|
String pid = userTagProductRelation.getPid();
|
|
|
ItemVo itemVo = productClient.findItemByPid(merchantId, pid);
|
|
|
- if(itemVo == null){
|
|
|
- log.info("not found item by pid , pid={}",pid);
|
|
|
- }else{
|
|
|
+ if (itemVo == null)
|
|
|
+ {
|
|
|
+ log.info("not found item by pid , pid={}", pid);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
itemVos.add(itemVo);
|
|
|
}
|
|
|
});
|
|
@@ -337,12 +420,20 @@ public class UserService {
|
|
|
Page<ItemVo> page = new Page<>();
|
|
|
page.setPageSize(pageSize);
|
|
|
page.setPageNo(pageNo);
|
|
|
- page.setTotalSize((int)resultPage.getTotalSize());
|
|
|
+ page.setTotalSize((int) resultPage.getTotalSize());
|
|
|
page.setList(itemVos);
|
|
|
|
|
|
return APIResult.ok(page);
|
|
|
}
|
|
|
|
|
|
|
|
|
+ public UserTag findUserTagById(String tagId)
|
|
|
+ {
|
|
|
+ return userClient.findUserTagById(tagId);
|
|
|
+ }
|
|
|
|
|
|
+ public Page<UserTagProductRelation> findRelations(String userTagId, List<String> productIdList, Integer pageNo, Integer pageSize)
|
|
|
+ {
|
|
|
+ return userClient.findRelations(userTagId, productIdList, pageNo, pageSize);
|
|
|
+ }
|
|
|
}
|