提交 c855f718 编写于 作者:  Peijun.zhao's avatar Peijun.zhao

Merge branch 'release' into dev-follow-0630

# Conflicts:
#	client/pom.xml
#	client/src/main/java/com/pica/cloud/account/account/client/RegisterClient.java
#	common/pom.xml
流水线 #47987 已失败 于阶段
......@@ -71,9 +71,14 @@
<repository>
<id>nexus</id>
<name>Pica 3rdParty Repository</name>
<!-- <url>http://192.168.141.133:8082/repository/pica-3rdParty/</url>-->
<url>http://nexus.picahealth.com:8082/repository/pica-3rdParty/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Nexus Snapshots Repository</name>
<uniqueVersion>false</uniqueVersion>
<url>http://nexus.picahealth.com:8082/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
<build>
......
package com.pica.cloud.account.account.client;
import com.pica.cloud.account.account.common.req.*;
import com.pica.cloud.account.account.common.req.EncryptEntity;
import com.pica.cloud.account.account.common.req.HospitalSaasUserReq;
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;
......@@ -37,4 +41,10 @@ public interface RegisterClient {
@PostMapping("/account/account/login-register/v1")
PicaResponse<LoginResult> loginRegister(@RequestBody EncryptEntity entity);
@PostMapping("/account/saas/hospital/registerV2")
PicaResponse<Integer> registerV2(@RequestBody HospitalSaasUserReq req, @RequestHeader(value = "token") String token);
@PostMapping("/account/saas/hospital/upsertV2")
PicaResponse<Integer> upsertV2(@RequestBody HospitalSaasUserReq req,@RequestHeader(value = "token") String token);
}
\ No newline at end of file
......@@ -37,6 +37,12 @@
<!-- <url>http://192.168.141.133:8082/repository/pica-3rdParty/</url>-->
<url>http://nexus.picahealth.com:8082/repository/pica-3rdParty/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Nexus Snapshots Repository</name>
<uniqueVersion>false</uniqueVersion>
<url>http://nexus.picahealth.com:8082/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
<build>
......
// Copyright 2016-2101 Pica.
package com.pica.cloud.account.account.common.req;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
/**
* @Author qinwh
* @Date 2022/3/1 10:45
*/
@ApiModel
public class HospitalSaasUserReq {
@ApiModelProperty("人员id")
private Long id;
@ApiModelProperty("姓名")
private String name;
@ApiModelProperty("机构id")
private Integer hospitalId;
@ApiModelProperty("机构id")
private String hospitalName;
@ApiModelProperty("手机号")
private String mobile;
@ApiModelProperty("密码")
private String password;
@ApiModelProperty("备注")
private String comment;
@ApiModelProperty("角色id 0 无角色 1 主管理员 2 管理员 3 saas系统管理员 4 saas用户")
private List<Long> roleId;
@ApiModelProperty("产品类型 1.云鹊医 2.云鹊健康 3.直播 4.crm(saas注册固定写死为crm)")
private Integer productType;
@ApiModelProperty("资源类型 1表示安卓,2表示ios,3表示web,4表示H5登录,5表示admin后台 6.SAAS")
private Integer sourceType;
@ApiModelProperty("登录来源 0:运营平台 1:saas")
private Integer loginFlag = 0;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getHospitalId() {
return hospitalId;
}
public void setHospitalId(Integer hospitalId) {
this.hospitalId = hospitalId;
}
public String getHospitalName() {
return hospitalName;
}
public void setHospitalName(String hospitalName) {
this.hospitalName = hospitalName;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public List<Long> getRoleId() {
return roleId;
}
public void setRoleId(List<Long> roleId) {
this.roleId = roleId;
}
public Integer getProductType() {
return productType;
}
public void setProductType(Integer productType) {
this.productType = productType;
}
public Integer getSourceType() {
return sourceType;
}
public void setSourceType(Integer sourceType) {
this.sourceType = sourceType;
}
public Integer getLoginFlag() {
return loginFlag;
}
public void setLoginFlag(Integer loginFlag) {
this.loginFlag = loginFlag;
}
}
......@@ -469,7 +469,7 @@ public class AccountController extends AccountBaseController {
//手机格式校验
private void checkMobilePhone(String mobilePhone) {
public void checkMobilePhone(String mobilePhone) {
if (StringUtils.isBlank(mobilePhone) || !ValidateUtils.isMobile(mobilePhone)) {
throw new PicaException(PicaResultCode.PARAM_IS_INVALID.code(), "请输入正确的手机号");
}
......@@ -482,7 +482,7 @@ public class AccountController extends AccountBaseController {
}
//校验验证码
private void checkAuthCode(AccountReq req) {
public void checkAuthCode(AccountReq req) {
String flag = StringUtils.isBlank(req.getFlag()) ? "0" : req.getFlag();
if (StringUtils.isBlank(req.getAuthCode())) {
......
......@@ -12,6 +12,7 @@ import com.pica.cloud.account.account.server.service.HospitalSaasRoleService;
import com.pica.cloud.account.account.server.service.HospitalSaasUserService;
import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.service.starter.interceptor.EnabledLoginValidate;
import com.pica.cloud.foundation.utils.entity.PicaUser;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
......@@ -39,9 +40,30 @@ public class HospitalSaasUserController extends AccountBaseController {
@EnabledLoginValidate
public PicaResponse<Integer> register(@RequestBody HospitalSaasUserReq req, @RequestHeader("token") String token) {
logger.info("register: url:/saas/hospital/register. start: {}", JSON.toJSONString(req));
req.checkInsertParams();
return PicaResponse.toResponse(hospitalSaasUserService.register(req, super.fetchPicaUser()));
}
@ApiOperation("机构saas平台人员注册 0失败 1成功 (密码可为空)")
@PostMapping(value = "/hospital/registerV2")
@EnabledLoginValidate
public PicaResponse<Integer> registerV2(@RequestBody HospitalSaasUserReq req, @RequestHeader("token") String token) {
logger.info("register: url:/saas/hospital/registerV2. start: {}", JSON.toJSONString(req));
req.checkInsertParamsNoPassWord();
PicaUser user = new PicaUser();
try {
PicaUser tokenUser=fetchPicaUser();
if (null != tokenUser && null != tokenUser.getId()) {
user = tokenUser;
}
} catch (Exception e) {
logger.info("registerV2 token异常",e);
user.setId(0);
}
return PicaResponse.toResponse(hospitalSaasUserService.register(req, user));
}
@ApiOperation("机构saas平台人员更新 0失败 1成功")
@PostMapping(value = "/hospital/upsert")
@EnabledLoginValidate
......@@ -50,6 +72,24 @@ public class HospitalSaasUserController extends AccountBaseController {
return PicaResponse.toResponse(hospitalSaasUserService.upsert(req, super.fetchPicaUser()));
}
@ApiOperation("机构saas平台人员更新 0失败 1成功")
@PostMapping(value = "/hospital/upsertV2")
@EnabledLoginValidate
public PicaResponse<Integer> upsertV2(@RequestBody HospitalSaasUserReq req, @RequestHeader("token") String token) {
logger.info("upsert: url:/saas/hospital/upsertV2. start: {}", JSON.toJSONString(req));
PicaUser user = new PicaUser();
try {
PicaUser tokenUser=fetchPicaUser();
if (null != tokenUser && null != tokenUser.getId()) {
user = tokenUser;
}
} catch (Exception e) {
logger.info("registerV2 token异常",e);
user.setId(0);
}
return PicaResponse.toResponse(hospitalSaasUserService.upsert(req, user));
}
@ApiOperation("机构saas平台人员列表查询")
@PostMapping(value = "/hospital/list")
@EnabledLoginValidate
......
package com.pica.cloud.account.account.server.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.pica.cloud.account.account.server.entity.AesBean.AesAuthCodeReq;
import com.pica.cloud.account.account.server.entity.*;
......@@ -9,6 +10,7 @@ import com.pica.cloud.account.account.server.enums.SourceTypeEnum;
import com.pica.cloud.account.account.server.exception.AccountException;
import com.pica.cloud.account.account.server.log.AccountLogEntityUtils;
import com.pica.cloud.account.account.server.log.AccountLogUtils;
import com.pica.cloud.account.account.server.req.AccountReq;
import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.server.req.OneClickLoginReq;
import com.pica.cloud.account.account.server.service.CaptchaService;
......@@ -36,6 +38,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
@Api(description = "登录资源")
......@@ -66,6 +69,9 @@ public class LoginController extends AccountBaseController {
@Autowired
private CaptchaService captchaService;
@Resource
private AccountController accountController;
/**
* 密码登录接口(app、H5、web)
*
......@@ -474,4 +480,41 @@ public class LoginController extends AccountBaseController {
SaasLoginResult login = loginService.saasLogin(request);
return PicaResponse.toResponse(login);
}
@ApiOperation("saas机构管理平台验证码登录接口")
@PostMapping("/saasLoginByAuthCode")
public PicaResponse<SaasLoginResult> saasLoginByAuthCode(@RequestBody SaasLoginReq authCodeReq) throws Exception {
EncryptEntity entity = new EncryptEntity();
entity.setKey(authCodeReq.getKey());
entity.setContent(authCodeReq.getContent());
logger.info("saasLoginByAuthCode 验证码登陆接口参数:{}", JSON.toJSONString(entity));
BaseRequest request = CryptoUtil.decrypt(entity, BaseRequest.class);
logger.info("saasLoginByAuthCode 解密之后的数据request:{}", JSON.toJSONString(request));
request.setProductType(super.getProductType());
Integer sourceType = super.getSourceType();
request.setSourceType(sourceType == null ? 0 : sourceType);
request.setLoginIp(super.getIpAddr());
request.setUserTokenTourist(super.getUserTokenTourist());
AccountUtils.checkMobilePhone(request.getMobile());
try {
//校验验证码
accountController.checkMobilePhone(request.getMobile());
AccountReq accountReq = new AccountReq();
accountReq.setMobilePhone(request.getMobile());
accountReq.setFlag("0");
accountReq.setAuthCode(request.getAuthCode());
accountController.checkAuthCode(accountReq);
} catch (PicaException e) {
logger.info("saasLoginByAuthCode 短信验证失败");
return PicaResponse.toResponse(null, e.getCode(), e.getMsg());
}catch (Exception e) {
logger.info("saasLoginByAuthCode 短信验证失败");
return PicaResponse.toResponse(null,PicaResultCode.DATA_EXCEPTION.code(), "短信校验异常");
}
SaasLoginResult login = loginService.saasLoginByAuthCode(request);
return PicaResponse.toResponse(login);
}
}
......@@ -89,4 +89,32 @@ public class HospitalSaasUserReq {
}
}
public void checkInsertParamsNoPassWord() {
if (StringUtils.isBlank(this.mobile)) {
throw new PicaWarnException(AccountExceptionEnum.PICA_NOT_EMPTY.getCode(), "手机号不能为空");
}
if (Objects.isNull(this.hospitalId)) {
throw new PicaWarnException(AccountExceptionEnum.PICA_NOT_EMPTY.getCode(), "机构id不能为空");
}
if (StringUtils.isBlank(this.name)) {
throw new PicaWarnException(AccountExceptionEnum.PICA_NOT_EMPTY.getCode(), "姓名不能为空");
}
if (this.name.length() > 16) {
throw new PicaWarnException(AccountExceptionEnum.PICA_NOT_EMPTY.getCode(), "姓名长度必须≤16字符!");
}
if (!ValidateUtils.isMobile(this.mobile)) {
throw new PicaWarnException(AccountExceptionEnum.PICA_NOT_EMPTY.getCode(), "手机号格式不正确!");
}
if (null == this.productType) {
throw new PicaWarnException(AccountExceptionEnum.PICA_NOT_EMPTY.getCode(), "产品类型不能为空!");
}
if (null == this.sourceType) {
throw new PicaWarnException(AccountExceptionEnum.PICA_NOT_EMPTY.getCode(), "资源类型不能为空!");
}
if (Objects.nonNull(this.comment) && this.comment.length() > 100) {
throw new PicaWarnException(AccountExceptionEnum.PICA_NOT_EMPTY.getCode(), "备注长度须≤100字符");
}
}
}
......@@ -112,4 +112,11 @@ public interface LoginService {
*/
SaasLoginResult saasLogin(BaseRequest request);
/***
* saas 验证码登录
* @param request
* @return
*/
SaasLoginResult saasLoginByAuthCode(BaseRequest request);
}
......@@ -84,7 +84,6 @@ public class HospitalSaasUserServiceImpl implements HospitalSaasUserService {
@Override
@Transactional
public int register(HospitalSaasUserReq req, PicaUser picaUser) {
req.checkInsertParams();
if (req.getRoleId().contains(SaasRoleEnum.SAAS_MAIN_ADMIN.getCode())) {
PermissionDoctorRole existRole = doctorRoleMapper.selectByHospitalIdRoleId(req.getHospitalId(), SaasRoleEnum.SAAS_MAIN_ADMIN.getCode().intValue());
if (existRole != null) {
......
......@@ -1229,6 +1229,45 @@ public class LoginServiceImpl implements LoginService {
}
}
@Override
public SaasLoginResult saasLoginByAuthCode(BaseRequest request) {
//接入新旭事务一致性
String batchNo = IntactUtils.getUUID();
intactUtil.sendIntact(batchNo, "login", com.pica.cloud.foundation.completeness.contract.constants.CommonConstants.INTACT_CONTENT_LOG_STATUS_1, "request:" + JSON.toJSONString(request));
String mobile = request.getMobile();
Integer sourceType = request.getSourceType();
String encrypt = AESUtil.encryptV0(mobile);
AccountInfoEntity accountInfoEntity = accountInfoDetailMapper.selectByMobile(encrypt);
logger.info("bizType:{}, account not null:{}", request.getBizType(), accountInfoEntity != null);
if (accountInfoEntity != null) {
intactUtil.sendIntact(batchNo, "login", com.pica.cloud.foundation.completeness.contract.constants.CommonConstants.INTACT_CONTENT_LOG_STATUS_3, "接下来调用pwdLoginCorrect");
return pwdSaaSLoginCorrect(request, mobile, encrypt, accountInfoEntity);
} else {
if (null != request.getBizType() &&
request.getBizType().equals(1)) {
if (sourceType != null && SourceTypeEnum.H5.getCode().equals(sourceType)) {
intactUtil.sendIntact(batchNo, "login", com.pica.cloud.foundation.completeness.contract.constants.CommonConstants.INTACT_CONTENT_LOG_STATUS_3, "该手机号尚未设置密码,设置密码请前往云鹊医APP,或使用其他方式登录。");
throw new PicaWarnException(AccountExceptionEnum.PICA_MOBILE_NOT_REGIST_H5.getCode(),
AccountExceptionEnum.PICA_MOBILE_NOT_REGIST_H5.getMessage());
} else {
// 新版-未注册
intactUtil.sendIntact(batchNo, "login", com.pica.cloud.foundation.completeness.contract.constants.CommonConstants.INTACT_CONTENT_LOG_STATUS_3, "该手机号{mobile}尚未设置密码,请先设置密码。");
throw new PicaException(AccountExceptionEnum.PICA_PASSWORD_RULE_ERROR.getCode(),
AccountExceptionEnum.PICA_PASSWORD_RULE_ERROR.getMessage()
.replace("{mobile}", mobile));
}
} else {
intactUtil.sendIntact(batchNo, "login", com.pica.cloud.foundation.completeness.contract.constants.CommonConstants.INTACT_CONTENT_LOG_STATUS_3, "未注册,请先注册");
throw new PicaException(AccountExceptionEnum.PICA_NOT_REGISTER.getCode(), AccountExceptionEnum.PICA_NOT_REGISTER.getMessage());
}
}
}
private SaasLoginResult pwdSaaSLoginCorrect(BaseRequest request, String mobile, String encrypt, AccountInfoEntity accountInfoEntity) {
//接入新旭事务一致性
String batchNo = IntactUtils.getUUID();
......
package com.pica.cloud.account.account.server.service;
import com.alibaba.fastjson.JSON;
import com.pica.cloud.account.account.server.App;
import com.pica.cloud.account.account.server.req.HospitalSaasUserReq;
import com.pica.cloud.foundation.utils.entity.PicaUser;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import static org.junit.Assert.*;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
public class HospitalSaasUserServiceTest {
@Resource
private HospitalSaasUserService hospitalSaasUserService;
@Test
public void register() {
PicaUser picaUser = new PicaUser();
picaUser.setId(618);
picaUser.setName("江陈");
HospitalSaasUserReq baseRequest = new HospitalSaasUserReq();
baseRequest = JSON.parseObject("{\n" +
" \"hospitalId\": 36471,\n" +
" \"hospitalName\": \"中国人民解放军第422医院\",\n" +
" \"loginFlag\": 0,\n" +
" \"mobile\": \"17521270004\",\n" +
" \"name\": \"王汉强\",\n" +
" \"productType\": 4,\n" +
" \"roleId\": [\n" +
" 4\n" +
" ],\n" +
" \"sourceType\": 7\n" +
"}", HospitalSaasUserReq.class);
int ret = hospitalSaasUserService.register(baseRequest, picaUser);
System.out.println(ret);
}
}
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册