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

Merge branch 'dev-0922' into 'release'

Dev 0922

reviewCoder:于蛟

See merge request !51
流水线 #30359 已失败 于阶段
in 1 second
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<groupId>com.pica.cloud.account</groupId> <groupId>com.pica.cloud.account</groupId>
<artifactId>pica-cloud-account-client</artifactId> <artifactId>pica-cloud-account-client</artifactId>
<version>1.0.3.8</version> <version>1.0.4.0</version>
<name>pica-cloud-account-client</name> <name>pica-cloud-account-client</name>
<packaging>jar</packaging> <packaging>jar</packaging>
......
...@@ -6,6 +6,7 @@ import org.springframework.cloud.netflix.feign.FeignClient; ...@@ -6,6 +6,7 @@ import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author andong * @author andong
...@@ -25,4 +26,7 @@ public interface AccountInfoClient { ...@@ -25,4 +26,7 @@ public interface AccountInfoClient {
@RequestHeader(value = "sourceType") Integer sourceType, @RequestHeader(value = "sourceType") Integer sourceType,
@RequestParam(value = "seconds", required = false) Integer seconds); @RequestParam(value = "seconds", required = false) Integer seconds);
@PostMapping("/account/info/wechat/batch")
PicaResponse<Map<Integer,String>> getWechatInfoBatch(@RequestBody List<Integer> docIds);
} }
package com.pica.cloud.account.account.server.controller; package com.pica.cloud.account.account.server.controller;
import com.pica.cloud.account.account.common.req.AccountInfoReq; import com.pica.cloud.account.account.common.req.AccountInfoReq;
import com.pica.cloud.account.account.server.entity.AccountWeChatInfoEntity;
import com.pica.cloud.account.account.server.service.AccountInfoService; import com.pica.cloud.account.account.server.service.AccountInfoService;
import com.pica.cloud.account.account.server.service.WechatService;
import com.pica.cloud.foundation.entity.PicaResponse; import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.service.starter.interceptor.EnabledLoginValidate;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author andong * @author andong
...@@ -18,11 +23,14 @@ import java.util.List; ...@@ -18,11 +23,14 @@ import java.util.List;
@Api(description = "账号信息") @Api(description = "账号信息")
@RestController @RestController
@RequestMapping("/info") @RequestMapping("/info")
public class AccountInfoController { public class AccountInfoController extends AccountBaseController {
@Autowired @Autowired
private AccountInfoService accountInfoService; private AccountInfoService accountInfoService;
@Autowired
private WechatService wechatService;
@ApiOperation("获取用户数量") @ApiOperation("获取用户数量")
@PostMapping("/count") @PostMapping("/count")
public PicaResponse<Integer> getCount(@RequestBody AccountInfoReq req) { public PicaResponse<Integer> getCount(@RequestBody AccountInfoReq req) {
...@@ -43,4 +51,19 @@ public class AccountInfoController { ...@@ -43,4 +51,19 @@ public class AccountInfoController {
return PicaResponse.toResponse(accountInfoService.getDoctorIds(req)); return PicaResponse.toResponse(accountInfoService.getDoctorIds(req));
} }
@ApiOperation("获取医生wechat信息")
@GetMapping("/wechat")
@EnabledLoginValidate
public PicaResponse<AccountWeChatInfoEntity> getWechatInfo(@RequestHeader String token) {
return PicaResponse.toResponse(wechatService.getAccountWechatInfo(fetchPicaUser()));
}
@ApiOperation("批量获取医生wechat信息")
@PostMapping("/wechat/batch")
public PicaResponse<Map<Integer,String>> getWechatInfoBatch(@RequestBody List<Integer> docIds) {
return PicaResponse.toResponse(wechatService.getAccountWechatInfoBatch(docIds));
}
} }
...@@ -11,6 +11,7 @@ import com.pica.cloud.account.account.server.log.AccountLogEntityUtils; ...@@ -11,6 +11,7 @@ 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.log.AccountLogUtils;
import com.pica.cloud.account.account.server.req.BaseRequest; 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.req.OneClickLoginReq;
import com.pica.cloud.account.account.server.service.CaptchaService;
import com.pica.cloud.account.account.server.service.DoctorService; import com.pica.cloud.account.account.server.service.DoctorService;
import com.pica.cloud.account.account.server.service.LoginService; import com.pica.cloud.account.account.server.service.LoginService;
import com.pica.cloud.account.account.server.service.TokenService; import com.pica.cloud.account.account.server.service.TokenService;
...@@ -18,11 +19,13 @@ import com.pica.cloud.account.account.server.util.AccountUtils; ...@@ -18,11 +19,13 @@ import com.pica.cloud.account.account.server.util.AccountUtils;
import com.pica.cloud.account.account.server.util.CryptoUtil; import com.pica.cloud.account.account.server.util.CryptoUtil;
import com.pica.cloud.account.account.server.util.RSAUtil; import com.pica.cloud.account.account.server.util.RSAUtil;
import com.pica.cloud.foundation.entity.PicaResponse; import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.entity.PicaResultCode;
import com.pica.cloud.foundation.entity.PicaWarnException; import com.pica.cloud.foundation.entity.PicaWarnException;
import com.pica.cloud.foundation.redis.CacheClient; import com.pica.cloud.foundation.redis.CacheClient;
import com.pica.cloud.foundation.redis.ICacheClient; import com.pica.cloud.foundation.redis.ICacheClient;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.catalina.servlet4preview.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -58,8 +61,11 @@ public class LoginController extends AccountBaseController { ...@@ -58,8 +61,11 @@ public class LoginController extends AccountBaseController {
private String cache_prifix = "cache-"; private String cache_prifix = "cache-";
@Autowired
private CaptchaService captchaService;
/** /**
* 密码登录接口(app、H5) * 密码登录接口(app、H5、web
* *
* @param authCodeReq * @param authCodeReq
* @return * @return
...@@ -199,12 +205,14 @@ public class LoginController extends AccountBaseController { ...@@ -199,12 +205,14 @@ public class LoginController extends AccountBaseController {
cacheClient.expire(cache_prifix + request.getWeChatCode(), 60); cacheClient.expire(cache_prifix + request.getWeChatCode(), 60);
long doctorId = super.getDoctorIdByToken(); long doctorId = super.getDoctorIdByToken();
logger.info("bindWeChat doctorId:{}",doctorId); logger.info("bindWeChat doctorId:{}",doctorId);
String nickname = loginService.bindWeChat(doctorId, request); // String nickname = loginService.bindWeChat(doctorId, request);
Map<String, String> map = new HashMap(); Map<String,String> rtnMap = loginService.bindWeChatMap(doctorId, request);
map.put("nickname", nickname);
// Map<String, String> map = new HashMap();
// map.put("nickname", rtnMap.get("nickname"));
//成功以后释放锁 //成功以后释放锁
cacheClient.del(cache_prifix + request.getWeChatCode()); cacheClient.del(cache_prifix + request.getWeChatCode());
return PicaResponse.toResponse(map); return PicaResponse.toResponse(rtnMap);
} catch (Exception e) { } catch (Exception e) {
cacheClient.del(cache_prifix + request.getWeChatCode()); cacheClient.del(cache_prifix + request.getWeChatCode());
logger.error("bindWeChat-" + e.getMessage(), e); logger.error("bindWeChat-" + e.getMessage(), e);
...@@ -363,4 +371,35 @@ public class LoginController extends AccountBaseController { ...@@ -363,4 +371,35 @@ public class LoginController extends AccountBaseController {
LoginResult oneClickLoginResultVo = loginService.oneClickLogin(req); LoginResult oneClickLoginResultVo = loginService.oneClickLogin(req);
return PicaResponse.toResponse(oneClickLoginResultVo); return PicaResponse.toResponse(oneClickLoginResultVo);
} }
@ApiOperation(value = "web登录-图形码")
@PostMapping("/web/captchaPwd")
public PicaResponse<LoginResult> webCaptchaPwd(@RequestBody EncryptEntity entity,
HttpServletRequest req) throws Exception {
BaseRequest request = CryptoUtil.decrypt(entity, BaseRequest.class);
logger.info("webCaptchaPwd:{}", JSONObject.toJSONString(request));
String captchaToken = request.getCaptchaToken();
String captchaAnswer = request.getCaptchaAnswer();
//校验图形验证码
if (!captchaService.acknowledge(captchaToken, captchaAnswer)) {
return PicaResponse.toResponse(null, PicaResultCode.PARAM_IS_INVALID.code(), "图形验证码错误");
}
//原登录逻辑
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());
AccountUtils.checkPassword(request.getPassword());
LoginResult login = loginService.login(request);
if (SourceTypeEnum.SAAS.getCode().equals(sourceType)) {
login.setDoctorId("");
} else {
login.setUserId(null);
}
return PicaResponse.toResponse(login);
}
} }
...@@ -3,6 +3,8 @@ package com.pica.cloud.account.account.server.mapper; ...@@ -3,6 +3,8 @@ package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.AccountWeChatInfoEntity; import com.pica.cloud.account.account.server.entity.AccountWeChatInfoEntity;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
@Component @Component
public interface AccountWeChatInfoMapper { public interface AccountWeChatInfoMapper {
...@@ -25,5 +27,7 @@ public interface AccountWeChatInfoMapper { ...@@ -25,5 +27,7 @@ public interface AccountWeChatInfoMapper {
int updateByPrimaryKey(AccountWeChatInfoEntity record); int updateByPrimaryKey(AccountWeChatInfoEntity record);
List<AccountWeChatInfoEntity> selectBatchByUnionId(List<String> list);
} }
\ No newline at end of file
...@@ -4,6 +4,7 @@ package com.pica.cloud.account.account.server.mapper; ...@@ -4,6 +4,7 @@ package com.pica.cloud.account.account.server.mapper;
import com.pica.cloud.account.account.server.entity.Doctor; import com.pica.cloud.account.account.server.entity.Doctor;
import com.pica.cloud.account.account.server.entity.DoctorEntity; import com.pica.cloud.account.account.server.entity.DoctorEntity;
import com.pica.cloud.account.account.server.entity.PICAPDoctor; import com.pica.cloud.account.account.server.entity.PICAPDoctor;
import com.pica.cloud.account.account.server.model.WechatInfoDto;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -112,5 +113,9 @@ public interface DoctorMapper { ...@@ -112,5 +113,9 @@ public interface DoctorMapper {
*/ */
Integer updateDoctorModifyRecord(); Integer updateDoctorModifyRecord();
String getUnionIdByDoctorId(@Param("doctorId") Integer doctorId);
List<WechatInfoDto> getBatchUnionIdByDoctorId(List<Integer> list);
} }
\ No newline at end of file
package com.pica.cloud.account.account.server.model;
public class WechatInfoDto {
private Integer doctorId;
private String unionId;
private String openId;
public Integer getDoctorId() {
return doctorId;
}
public void setDoctorId(Integer doctorId) {
this.doctorId = doctorId;
}
public String getOpenId() {
return openId;
}
public void setOpenId(String openId) {
this.openId = openId;
}
public String getUnionId() {
return unionId;
}
public void setUnionId(String unionId) {
this.unionId = unionId;
}
}
...@@ -59,6 +59,8 @@ public interface LoginService { ...@@ -59,6 +59,8 @@ public interface LoginService {
*/ */
String bindWeChat(long doctorId, BaseRequest request); String bindWeChat(long doctorId, BaseRequest request);
Map bindWeChatMap(long doctorId, BaseRequest request);
PICAPDoctor queryDoctor(long doctorId); PICAPDoctor queryDoctor(long doctorId);
/** /**
......
package com.pica.cloud.account.account.server.service;
import com.pica.cloud.account.account.server.entity.AccountWeChatInfoEntity;
import com.pica.cloud.foundation.utils.entity.PicaUser;
import java.util.List;
import java.util.Map;
public interface WechatService {
AccountWeChatInfoEntity getAccountWechatInfo(PicaUser user);
Map<Integer,String> getAccountWechatInfoBatch(List<Integer> docIds);
}
...@@ -523,6 +523,31 @@ public class LoginServiceImpl implements LoginService { ...@@ -523,6 +523,31 @@ public class LoginServiceImpl implements LoginService {
return weChatUserInfoEntity.getNickname(); return weChatUserInfoEntity.getNickname();
} }
@Override
@Transactional
public Map bindWeChatMap(long doctorId, BaseRequest request) {
WeChatEntity weChatEntity = WeChatUtils.getAuthorizationInfo(appId, appSecret, request.getWeChatCode());
Map map = new HashMap();
map.put("access_token", weChatEntity.getAccess_token());
map.put("openid", weChatEntity.getOpenid());
Map weChatUserInfo = WeChatUtils.getWeChatUserInfo(map, weChatURL);
WeChatUserInfoEntity weChatUserInfoEntity = WeChatUtils.mergeWechatUserInfo(weChatUserInfo, weChatEntity.getOpenid());
String unionId = weChatUserInfoEntity.getUnionid();
AccountWeChatInfoEntity entity = accountWeChatInfoMapper.selectByUnionId(unionId);
if (entity == null) {
processWeChatInfoUser(weChatUserInfoEntity, request.getWeChatLoginType());
} else {
updateWechatInfoUser(entity, weChatUserInfoEntity);
}
Integer acctId = doctorInfoMapper.getAcctIdByDoctorId(doctorId);
processAccountUnion(acctId, unionId, request.getProductType());
Map<String,String> rtnMap = new HashMap();
rtnMap.put("openId",weChatEntity.getOpenid());
rtnMap.put("nickname",weChatUserInfoEntity.getNickname());
return rtnMap;
}
/** /**
* 把unionId存储到联合登录表中 * 把unionId存储到联合登录表中
* *
......
package com.pica.cloud.account.account.server.service.impl;
import com.pica.cloud.account.account.server.entity.AccountWeChatInfoEntity;
import com.pica.cloud.account.account.server.mapper.AccountWeChatInfoMapper;
import com.pica.cloud.account.account.server.mapper.DoctorMapper;
import com.pica.cloud.account.account.server.model.WechatInfoDto;
import com.pica.cloud.account.account.server.service.WechatService;
import com.pica.cloud.foundation.utils.entity.PicaUser;
import com.pica.cloud.foundation.utils.utils.StringUtil;
import io.swagger.models.auth.In;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class WechatServiceImpl implements WechatService {
@Autowired
private DoctorMapper doctorMapper;
@Autowired
private AccountWeChatInfoMapper weChatInfoMapper;
@Override
public AccountWeChatInfoEntity getAccountWechatInfo(PicaUser user) {
String unionId = doctorMapper.getUnionIdByDoctorId(user.getId());
if(StringUtil.isEmpty(unionId)){
return new AccountWeChatInfoEntity();
}else {
return weChatInfoMapper.selectByUnionId(unionId);
}
}
@Override
public Map<Integer, String> getAccountWechatInfoBatch(List<Integer> docIds) {
if(CollectionUtils.isEmpty(docIds)){
return null;
}
Map<Integer, String> doctorOpenMap = new HashMap<>();
List<WechatInfoDto> wechatInfoDtos = doctorMapper.getBatchUnionIdByDoctorId(docIds);
Map<String, Integer> unionMap = new HashMap<>();
for(WechatInfoDto dto : wechatInfoDtos){
unionMap.put(dto.getUnionId(),dto.getDoctorId());
}
List<String> unionIds = wechatInfoDtos.stream().map(obj -> obj.getUnionId()).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(unionIds)){
List<AccountWeChatInfoEntity> wechatList = weChatInfoMapper.selectBatchByUnionId(unionIds);
for(AccountWeChatInfoEntity entity : wechatList){
if(unionMap.containsKey(entity.getUnionid())){
doctorOpenMap.put(unionMap.get(entity.getUnionid()),entity.getOpenid());
}
}
}
for(Integer docId : docIds){
if(!doctorOpenMap.containsKey(docId)){
doctorOpenMap.put(docId,null);
}
}
return doctorOpenMap;
}
}
...@@ -48,6 +48,18 @@ ...@@ -48,6 +48,18 @@
limit 1 limit 1
</select> </select>
<select id="selectBatchByUnionId" resultMap="BaseResultMap" parameterType="java.util.List">
select
<include refid="Base_Column_List"/>
from account_wechat_info
where unionid in
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
and delete_flag = 1
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" > <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
delete from account_wechat_info delete from account_wechat_info
where id = #{id,jdbcType=INTEGER} where id = #{id,jdbcType=INTEGER}
......
...@@ -1063,5 +1063,24 @@ ...@@ -1063,5 +1063,24 @@
</foreach> </foreach>
</update> </update>
<select id="getUnionIdByDoctorId" resultType="java.lang.String" parameterType="java.lang.Integer">
select u.union_id from p_doctor d
join account_info a on d.acct_id = a.id
join account_union u on a.id = u.acct_id
where d.id = #{doctorId} and u.union_type = 1
and d.delete_flag = 1 and a.delete_flag = 1 and u.delete_flag = 1
</select>
<select id="getBatchUnionIdByDoctorId" resultType="com.pica.cloud.account.account.server.model.WechatInfoDto" parameterType="java.util.List">
select u.union_id as unionId, d.id as doctorId from p_doctor d
join account_info a on d.acct_id = a.id
join account_union u on a.id = u.acct_id
where d.id in
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
and u.union_type = 1
and d.delete_flag = 1 and a.delete_flag = 1 and u.delete_flag = 1
</select>
</mapper> </mapper>
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册