提交 9f893ee9 编写于 作者: yongbo.wang's avatar yongbo.wang

Merge branch 'release' into 'master'

Release



See merge request !50
流水线 #30331 已失败 于阶段
in 2 second
......@@ -11,7 +11,7 @@
<groupId>com.pica.cloud.account</groupId>
<artifactId>pica-cloud-account-client</artifactId>
<version>1.0.3.6</version>
<version>1.0.3.8</version>
<name>pica-cloud-account-client</name>
<packaging>jar</packaging>
......@@ -28,7 +28,7 @@
<dependency>
<groupId>com.pica.cloud.account</groupId>
<artifactId>pica-cloud-account-common</artifactId>
<version>1.0.1.6</version>
<version>1.0.1.7</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
......@@ -71,7 +71,8 @@
<repository>
<id>nexus</id>
<name>Pica 3rdParty Repository</name>
<url>http://192.168.141.133:8082/repository/pica-3rdParty/</url>
<!-- <url>http://192.168.141.133:8082/repository/pica-3rdParty/</url>-->
<url>http://nexus.picahealth.com:8082/repository/pica-3rdParty/</url>
</repository>
</distributionManagement>
......
......@@ -4,6 +4,7 @@ import com.pica.cloud.account.account.common.req.EncryptEntity;
import com.pica.cloud.account.account.common.req.LoginResult;
import com.pica.cloud.account.account.common.req.OCINRequest;
import com.pica.cloud.account.account.common.req.circle.CircleAcctInitReq;
import com.pica.cloud.account.account.common.req.shop.ShopAcctInitReq;
import com.pica.cloud.foundation.entity.PicaResponse;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -11,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import java.util.List;
import java.util.Map;
/**
* Created on 2019/10/16 17:28
......@@ -29,5 +31,8 @@ public interface RegisterClient {
@PostMapping(value = "/account/circle/acct")
PicaResponse<List<Integer>> register(@RequestBody CircleAcctInitReq circleAcctInitReq, @RequestHeader(value = "token") String token);
@PostMapping(value = "/account/shop/acct")
PicaResponse<Map<String,Integer>> shopRegister(@RequestBody ShopAcctInitReq shopAcctInitReq, @RequestHeader(value = "token") String token);
}
\ No newline at end of file
......@@ -11,7 +11,7 @@
<groupId>com.pica.cloud.account</groupId>
<artifactId>pica-cloud-account-common</artifactId>
<version>1.0.1.6</version>
<version>1.0.1.7</version>
<name>pica-cloud-account-common</name>
<packaging>jar</packaging>
......@@ -34,7 +34,8 @@
<repository>
<id>nexus</id>
<name>Pica 3rdParty Repository</name>
<url>http://192.168.141.133:8082/repository/pica-3rdParty/</url>
<!-- <url>http://192.168.141.133:8082/repository/pica-3rdParty/</url>-->
<url>http://nexus.picahealth.com:8082/repository/pica-3rdParty/</url>
</repository>
</distributionManagement>
......
package com.pica.cloud.account.account.common.req.shop;
/**
* @DESCRIPTOIN:
* @AUTHOR: joy
* @DATE:2020/6/21 11:01 上午
*/
public class ShopAcctInit {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
private String mobile;
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
}
package com.pica.cloud.account.account.common.req.shop;
import java.util.List;
/**
* @DESCRIPTOIN:
* @AUTHOR: joy
* @DATE:2020/6/21 11:02 上午
*/
public class ShopAcctInitReq {
private List<ShopAcctInit> shopAcctInitList;
private Integer registerSource; // 1 安卓 2 ios 3 web 4 h5 5 admin
public Integer getRegisterSource() {
return registerSource;
}
public void setRegisterSource(Integer registerSource) {
this.registerSource = registerSource;
}
public List<ShopAcctInit> getShopAcctInitList() {
return shopAcctInitList;
}
public void setShopAcctInitList(List<ShopAcctInit> shopAcctInitList) {
this.shopAcctInitList = shopAcctInitList;
}
}
......@@ -138,7 +138,7 @@
<dependency>
<groupId>com.pica.cloud.account</groupId>
<artifactId>pica-cloud-account-common</artifactId>
<version>1.0.1.6</version>
<version>1.0.1.7</version>
</dependency>
<dependency>
......@@ -251,7 +251,8 @@
<repositories>
<repository>
<id>nexus</id>
<url>http://192.168.141.133:8082/repository/maven-public/</url>
<!-- <url>http://192.168.141.133:8082/repository/maven-public/</url>-->
<url>http://nexus.picahealth.com:8082/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
......@@ -266,7 +267,8 @@
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<url>http://192.168.141.133:8082/repository/maven-public/</url>
<!-- <url>http://192.168.141.133:8082/repository/maven-public/</url>-->
<url>http://nexus.picahealth.com:8082/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
......
package com.pica.cloud.account.account.server.controller;
import com.pica.cloud.account.account.common.req.circle.CircleAcctInitReq;
import com.pica.cloud.account.account.common.req.shop.ShopAcctInitReq;
import com.pica.cloud.account.account.server.service.CircleAccountService;
import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.service.starter.interceptor.EnabledLoginValidate;
import io.swagger.annotations.Api;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.List;
@Api(description = "")
@RestController
@RequestMapping("/shop")
public class ShopUserController {
private Logger logger = LoggerFactory.getLogger(ShopUserController.class);
@Autowired
private CircleAccountService circleAccountService;
@PostMapping("/acct")
@EnabledLoginValidate
public PicaResponse<List<Integer>> shopUserInit(@RequestBody ShopAcctInitReq shopAcctInitReq) {
return PicaResponse.toResponse(circleAccountService.createShopAccount(shopAcctInitReq));
}
}
......@@ -3,6 +3,8 @@ package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.LogLoginEntity;
import java.util.List;
public interface LogLoginMapper {
int deleteByPrimaryKey(Integer id);
......@@ -16,4 +18,6 @@ public interface LogLoginMapper {
int updateByPrimaryKeySelective(LogLoginEntity record);
int updateByPrimaryKey(LogLoginEntity record);
List<String> selectTokenByAcctId(Integer id);
}
\ No newline at end of file
......@@ -2,6 +2,7 @@ package com.pica.cloud.account.account.server.service;
import com.pica.cloud.account.account.common.req.circle.CircleAcctInitReq;
import com.pica.cloud.account.account.common.req.shop.ShopAcctInitReq;
import com.pica.cloud.account.account.common.req.circle.DiyAcctInitReq;
import com.pica.cloud.account.account.server.entity.Account;
import com.pica.cloud.account.account.server.entity.AccountInfoEntity;
......@@ -21,4 +22,6 @@ public interface CircleAccountService {
//批量创建用户- 手机号,姓名
List<Integer> createDiyAccount(DiyAcctInitReq diyAcctInitReq);
Map<String,Integer> createShopAccount(ShopAcctInitReq shopAcctInitReq);
}
package com.pica.cloud.account.account.server.service;
import com.pica.cloud.account.account.common.req.OCINRequest;
import com.pica.cloud.account.account.server.entity.LoginResult;
import com.pica.cloud.account.account.server.entity.QueryMobileEntity;
import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.common.req.OCINRequest;
import com.pica.cloud.foundation.entity.PicaResponse;
public interface RegisterService {
......
......@@ -3,6 +3,8 @@ package com.pica.cloud.account.account.server.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.pica.cloud.account.account.common.req.circle.CircleAcctInit;
import com.pica.cloud.account.account.common.req.circle.CircleAcctInitReq;
import com.pica.cloud.account.account.common.req.shop.ShopAcctInit;
import com.pica.cloud.account.account.common.req.shop.ShopAcctInitReq;
import com.pica.cloud.account.account.common.req.circle.DiyAcctInit;
import com.pica.cloud.account.account.common.req.circle.DiyAcctInitReq;
import com.pica.cloud.account.account.server.entity.Account;
......@@ -19,7 +21,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
......@@ -98,4 +102,39 @@ public class CircleAccountServiceImpl implements CircleAccountService {
return savedIds;
}
@Override
public Map<String,Integer> createShopAccount(ShopAcctInitReq shopAcctInitReq) {
Map<String,Integer> rtnMap = new HashMap();
logger.info("createShopAccount:{}", JSONObject.toJSONString(shopAcctInitReq));
List<ShopAcctInit> shopAcctInits = shopAcctInitReq.getShopAcctInitList();
// List<Integer> savedIds = new ArrayList<>();
try {
for(ShopAcctInit acct : shopAcctInits){
String encryMobile = EncryptUtils.encryptContent(acct.getMobile(), EncryptConstants.ENCRYPT_TYPE_MOBILE);
Account dbAcct = accountMapper.getByMobilePhone(encryMobile); //获取医生表账号信息
if(null == dbAcct){
Account account = new Account();
account.setName(acct.getUserName());
account.setNickname(acct.getUserName());
account.setMobilePhone(encryMobile);
account.setRegisterSource(shopAcctInitReq.getRegisterSource());
accountService.createAccount(account,AccountTypeEnum.PRODUCT_TYPE_DOCTOR.getCode());
// savedIds.add(account.getId().intValue());
logger.info("createShopAccount insert {}",account.getId().intValue());
rtnMap.put(acct.getMobile(),account.getId().intValue());
}else {
// savedIds.add(dbAcct.getId().intValue());
logger.info("createShopAccount exist {}",dbAcct.getId().intValue());
rtnMap.put(acct.getMobile(),dbAcct.getId().intValue());
}
}
}catch (Exception e){
logger.error("createShopAccount error:{}",e.getMessage());
throw e;
}
return rtnMap;
}
}
......@@ -83,8 +83,9 @@ public class RegisterServiceImpl implements RegisterService {
//对注册接口做幂等性处理:注册成功,删除缓存,注册失败提示用户
String nxKey = Constants.REPEAT_REGISTER_PREFIX + mobile;
Long resultNx = redisClient.setnx(nxKey, mobile);
redisClient.expire(nxKey, 2);
if(resultNx == 1) {
try {
//try {
String mobileEncrypt = AESUtil.encryptV0(mobile);
AccountInfoEntity accountInfoEntity = accountInfoDetailMapper.selectByMobile(mobileEncrypt);
if (accountInfoEntity == null) {
......@@ -161,17 +162,17 @@ public class RegisterServiceImpl implements RegisterService {
throw new AccountException(AccountExceptionEnum.PICA_ALREADY_REGISTER);
}
} catch (Exception e) {
//} catch (Exception e) {
//向上抛出异常,让异常处理框架捕获到
logger.error("registerException-" + e.getMessage(), e);
intactUtil.sendIntact(batchNo,"register",com.pica.cloud.foundation.completeness.contract.constants.CommonConstants.INTACT_CONTENT_LOG_STATUS_3,"注册失败");
//logger.error("registerException-" + e.getMessage(), e);
//intactUtil.sendIntact(batchNo,"register",com.pica.cloud.foundation.completeness.contract.constants.CommonConstants.INTACT_CONTENT_LOG_STATUS_3,"注册失败");
throw new AccountException(AccountExceptionEnum.PICA_REGISTER_FAIL);
} finally {
//throw new AccountException(AccountExceptionEnum.PICA_REGISTER_FAIL);
//} finally {
//如果在注册过程中抛出异常,就删除redis中的注册标记
logger.info("register-finally-del-nxKey");
redisClient.del(nxKey);
}
//logger.info("register-finally-del-nxKey");
//redisClient.del(nxKey);
//}
} else {
logger.info("register-nxKey is exists");
intactUtil.sendIntact(batchNo,"register",com.pica.cloud.foundation.completeness.contract.constants.CommonConstants.INTACT_CONTENT_LOG_STATUS_3,"该手机号已注册,请直接登录");
......
......@@ -5,19 +5,19 @@ import com.pica.cloud.account.account.server.entity.Account;
import com.pica.cloud.account.account.server.entity.Doctor;
import com.pica.cloud.account.account.server.enums.SourceTypeEnum;
import com.pica.cloud.account.account.server.mapper.DoctorMapper;
import com.pica.cloud.account.account.server.mapper.LogLoginMapper;
import com.pica.cloud.foundation.redis.ICacheClient;
import com.pica.cloud.foundation.utils.utils.StringUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
import java.util.*;
/**
* Token工具类
......@@ -32,6 +32,8 @@ public class TokenUtils {
@Autowired
private DoctorMapper doctorMapper;
@Autowired
private LogLoginMapper logLoginMapper;
/**
* 校验token的状态
*
......@@ -80,8 +82,9 @@ public class TokenUtils {
return false;
}
try {
cacheClient.set(key, value, expiredSeconds);
cacheClient.set(value + "-" + sourceTypeRedis, key, expiredSeconds);
cacheClient.expire(key, expiredSeconds);
logger.info("tokenContinueTime-{} key: {} value: {}", id, key, value);
cacheClient.expire(value + "-" + sourceTypeRedis, expiredSeconds);
return true;
} catch (Exception e) {
logger.error("tokenContinueTime-Exception-{}" + e.getMessage(), e);
......@@ -109,7 +112,15 @@ public class TokenUtils {
String oldToken = cacheClient.get(value + "-"+sourceType);
if (StringUtils.isNotBlank(oldToken)) {
Long del = cacheClient.del(oldToken);
logger.info("num:---->"+del);
logger.info("oldToken: {} num: {}", oldToken, del);
}
// log_login 中查询出所有的token,并删除
if ("app".equals(sourceType)) {
List<String> tokenList = logLoginMapper.selectTokenByAcctId(account.getAcctId());
if (StringUtil.isNotEmptyList(tokenList)) {
delToken(tokenList);
}
}
// 根据不同的产品线设置token有效期
int expiredSeconds = 24 * 60 * 60;
......@@ -120,6 +131,7 @@ public class TokenUtils {
String Key = "token-" + newToken;
//存储token对应的用户id,数据结构如:(token-FF9FCB0D93A642328A01C279701B7607:token-doctor-1)
cacheClient.set(Key, value, expiredSeconds);
logger.info("generateToken-{} key: {} value: {}", account.getId(), Key, value);
//存储不同终端对应的token,数据结构如:(token-doctor-12345678-app:token-FF9FCB0D93A642328A01C279701B7607)
//String sourceType = AccountUtils.getSourceType(registerSource);
cacheClient.set(value + "-" + sourceType, Key, expiredSeconds);
......@@ -173,4 +185,17 @@ public class TokenUtils {
}
return newToken;
}
@Async
public void delToken(List<String> tokenList) {
for (int i = 0 ; i < tokenList.size(); i++) {
String tokenTmp = "token-" + tokenList.get(i);
if (StringUtils.isNotBlank(cacheClient.get(tokenTmp))) {
Long del = cacheClient.del(tokenTmp);
logger.info("oldToken: {} num: {} i:{}", tokenTmp, del, i);
} else {
logger.info("oldToken: {} 不存在 i:{}", tokenTmp, i);
}
}
}
}
......@@ -202,4 +202,15 @@
delete_flag = #{deleteFlag,jdbcType=TINYINT}
where id = #{id,jdbcType=INTEGER}
</update>
<select id="selectTokenByAcctId" resultType="java.lang.String" parameterType="java.lang.Integer" >
select
token
from log_login
where acct_id = #{id,jdbcType=INTEGER}
and delete_flag = 1
and source_type in (1,2)
and login_type in (1,2,3,5,6,7)
and create_time > date_add(create_time, interval -3 month)
</select>
</mapper>
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册