Commit 53f8d6df authored by 向怀芳's avatar 向怀芳 🎱

1. 对接随申办接口

1.1 获取用户信息
1.2 获取绑卡信息
2. 调整流程,获取患者信息
3. 新增接口:公众号患者获取患者信息
parent e80617c8
package cn.sh.stc.sict.cloud.common.core.constant;
public class UserConstant {
public final static String USER_SOURCE_MOBILE = "mobile";
public final static String USER_SOURCE_SSB = "wd_ssb";
}
......@@ -22,6 +22,11 @@ public enum LoginTypeEnum {
*/
SMS("sms", "验证码登录"),
/**
* 验证码登录
*/
SSB("ssb", "随申办token"),
/**
* H5登录
*/
......
package cn.sh.stc.sict.cloud.common.core.dto;
import lombok.Data;
/**
* 万达随申办接口用户绑卡信息
*/
@Data
public class WDUserCardInfo {
private String id;
private String cardNo;
private String cardType;
private String hospitalId;
}
package cn.sh.stc.sict.cloud.common.core.dto;
import lombok.Data;
import java.util.Date;
/**
* 万达随申办接口用户信息
*/
@Data
public class WDUserInfo {
private String token;
private String id;
private String username;
private String personcard;
private String mobile;
private Date birth;
private String avatar;
private Byte gender;
private String verifyStatus;
private Date regtime;
private String openid;
}
package cn.sh.stc.sict.cloud.common.core.util;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserCardInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserInfo;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
/**
* 随申办工具类
*/
@Slf4j
@UtilityClass
public class SsbUtil {
// 外网测试地址 https://ffyjs.hpwjsns.org.cn:9071/
private final static String USER_URL = "https://ffyjs.hpwjsns.org.cn:9071/fdapp/api/account/v1/token/info";
private final static String CARD_URL = "https://ffyjs.hpwjsns.org.cn:9071/fdapp/api/account/v1/user/cards";
/**
* 获取用户信息
*
* @param token
* @return
*/
public WDUserInfo getUserInfo(String token) {
try {
HttpResponse response = HttpRequest.get(USER_URL)
.header("backdoor", "1")
.header("access-token", token)
.execute();
if (response.getStatus() != 200) {
log.error("随申办token获取用户信息异常-1");
return null;
}
return JSONUtil.toBean(response.body(), WDUserInfo.class);
} catch (Exception ex) {
log.error("随申办token获取用户信息异-2!");
log.error(ex.getMessage(), ex);
return null;
}
}
/**
* 获取用户绑卡信息
*
* @param token
* @return
*/
public List<WDUserCardInfo> getUserCardInfoList(String token) {
try {
HttpResponse response = HttpRequest.get(CARD_URL)
.header("backdoor", "1")
.header("access-token", token)
.execute();
if (response.getStatus() != 200) {
log.error("随申办token获取绑卡信息异常-1");
return null;
}
return JSONUtil.toList(JSONUtil.parseArray(response.body()), WDUserCardInfo.class);
} catch (Exception ex) {
log.error("随申办token获取绑卡信息异-2!");
log.error(ex.getMessage(), ex);
return null;
}
}
}
......@@ -90,6 +90,11 @@ public class SysUserBase extends Model<SysUserBase> {
*/
@ApiModelProperty(hidden = true, value = "账号状态:0-正常,1-禁用")
private Byte status;
/**
* 来源
*/
private String source;
/**
*
*/
......
package cn.sh.stc.sict.cloud.upms.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.sh.stc.sict.cloud.common.core.constant.Constant;
import cn.sh.stc.sict.cloud.common.core.constant.UserConstant;
import cn.sh.stc.sict.cloud.common.core.constant.enums.LoginTypeEnum;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserCardInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserInfo;
import cn.sh.stc.sict.cloud.common.core.util.NumberUtil;
import cn.sh.stc.sict.cloud.common.core.util.SsbUtil;
import cn.sh.stc.sict.cloud.upms.dao.SysUserBaseMapper;
import cn.sh.stc.sict.cloud.upms.dto.UserDTO;
import cn.sh.stc.sict.cloud.upms.dto.UserInfo;
......@@ -18,8 +24,12 @@ import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service("sysUserBaseService")
@AllArgsConstructor
......@@ -28,6 +38,7 @@ public class SysUserBaseServiceImpl extends ServiceImpl<SysUserBaseMapper, SysUs
private final SysUserBaseMapper sysUserBaseMapper;
private WxMpService wxMpService;
private HpUserRoleService hpUserRoleService;
private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder();
@Override
public UserInfo getUserInfo(String appId, String username) {
......@@ -49,19 +60,52 @@ public class SysUserBaseServiceImpl extends ServiceImpl<SysUserBaseMapper, SysUs
log.error("=================> appId = {}, inStr = {}", appId, inStr);
// code = 011Eg6Ga1UOXeA0R5wHa16dkab2Eg6G7
String[] split = inStr.split(StringPool.AT);
if(LoginTypeEnum.SMS.getType().equals(split[0])){
if (LoginTypeEnum.SMS.getType().equals(split[0])) {
// 手机号登录
return this.getByPhone(split[2]);
}else{
} else if (LoginTypeEnum.SSB.getType().equals(split[0])) {
return this.getBySSBToken(split[0], split[2]);
} else {
// 微信登录
WxOAuth2AccessToken token = wxMpService.getOAuth2Service().getAccessToken(split[2]);
return this.getByOpenId(token.getOpenId());
}
}
private UserInfo getBySSBToken(String source, String token) {
WDUserInfo wdUser = SsbUtil.getUserInfo(token);
if (ObjectUtil.isNull(wdUser) || StrUtil.isBlank(wdUser.getMobile())) {
return null;
}
LambdaQueryWrapper<SysUserBase> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUserBase::getPhone, wdUser.getMobile());
SysUserBase user = this.getOne(wrapper);
// 未注册用户默认注册
if (user == null) {
user = new SysUserBase();
user.setUserName(wdUser.getMobile());
user.setOpenId(wdUser.getMobile());
user.setName(wdUser.getUsername());
user.setIdCard(wdUser.getPersoncard());
user.setSex(wdUser.getGender());
user.setHeadimg(wdUser.getAvatar());
user.setSource(source);
user.setStatus(Constant.BYTE_NO);
user.setPasswd(ENCODER.encode(Constant.DEFAULT_PASSWORD));
user.setPhone(wdUser.getMobile());
this.save(user);
List<WDUserCardInfo> cardList = SsbUtil.getUserCardInfoList(token);
}
UserInfo info = new UserInfo();
info.setSysUserBase(user);
info.setOpenId(wdUser.getMobile());
return info;
}
@Override
public boolean saveDto(UserDTO dto) {
if(NumberUtil.isNotNullOrZero(dto.getUser().getId())){
if (NumberUtil.isNotNullOrZero(dto.getUser().getId())) {
hpUserRoleService.saveBatch(dto.getUser().getId(), dto.getRoleList());
}
......@@ -77,7 +121,8 @@ public class SysUserBaseServiceImpl extends ServiceImpl<SysUserBaseMapper, SysUs
user = new SysUserBase();
user.setOpenId(phone);
user.setStatus(Constant.BYTE_NO);
user.setPasswd(Constant.DEFAULT_PASSWORD);
user.setSource(UserConstant.USER_SOURCE_MOBILE);
user.setPasswd(ENCODER.encode(Constant.DEFAULT_PASSWORD));
user.setPhone(phone);
this.save(user);
}
......
package cn.sh.stc.sict.theme.hphy.controller.mp;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.sh.stc.sict.cloud.common.core.constant.Constant;
import cn.sh.stc.sict.cloud.common.core.constant.enums.LoginTypeEnum;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserCardInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserInfo;
import cn.sh.stc.sict.cloud.common.core.util.NumberUtil;
import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.cloud.common.core.util.SsbUtil;
import cn.sh.stc.sict.cloud.common.core.util.ValidateCodeUtil;
import cn.sh.stc.sict.cloud.common.security.util.SecurityUtils;
import cn.sh.stc.sict.cloud.upms.dto.CurrentUser;
......@@ -19,6 +25,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 患者基本信息
......@@ -49,7 +57,7 @@ public class HphyPatientBaseController {
HphyPatientBase base = hphyPatientBaseService.getByOpenId(current.getOpenId());
patient.setOpenId(current.getOpenId());
if (base != null) {
if (base != null && NumberUtil.isNotNullOrZero(base.getId())) {
patient.setId(base.getId());
} else {
patient.setPhone(current.getPhone());
......@@ -69,12 +77,13 @@ public class HphyPatientBaseController {
// 获取家庭医生签约信息
try {
String familyDocHos = WanDaHttpUtil.getContractInfo(patient.getCertId());
if(StrUtil.isNotBlank(familyDocHos)){
if (StrUtil.isNotBlank(familyDocHos)) {
patient.setFamilyDocHos(familyDocHos);
}
}catch (Exception e){
} catch (Exception e) {
log.error(e.getMessage(), e);
}
patient.setVerifyStatus(Constant.STRING_YES);
hphyPatientBaseService.saveOrUpdate(patient);
return new R(patient.getId());
......@@ -107,4 +116,34 @@ public class HphyPatientBaseController {
return new R(base);
}
@ApiOperation("第三方公众号进入系统时,获取患者信息")
@GetMapping("/third-party")
public R getInfoByToken(@RequestParam("source") String source,
@RequestParam("token") String token) {
CurrentUser current = SecurityUtils.getCurrentUser();
if (StrUtil.isBlank(current.getOpenId())) {
log.error("openId 为空");
}
// 获取患者信息
HphyPatientBase base = hphyPatientBaseService.getByOpenId(current.getOpenId());
if( ObjectUtil.isNull(base) || NumberUtil.isNullOrZero(base.getId())){
if(LoginTypeEnum.SSB.getType().equals(source)){
WDUserInfo userInfo = SsbUtil.getUserInfo(token);
List<WDUserCardInfo> cardList = SsbUtil.getUserCardInfoList(token);
base = hphyPatientBaseService.saveSSbInfo(current, userInfo, cardList);
}
}
if( ObjectUtil.isNull(base) || NumberUtil.isNullOrZero(base.getId())){
return new R().error("患者未实名!");
}
if (StrUtil.isNotBlank(base.getGender())) {
current.setGender(PatientConstant.getGender(base.getGender()));
SecurityUtils.updateCurrent(current);
}
return new R(base);
}
}
......@@ -4,10 +4,7 @@ import cn.sh.stc.sict.cloud.common.core.util.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
/**
* @author F_xh
......
package cn.sh.stc.sict.theme.hphy.controller.web;
import cn.hutool.core.util.StrUtil;
import cn.sh.stc.sict.cloud.common.core.constant.Constant;
import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.theme.hphy.model.HpAppointment;
import cn.sh.stc.sict.theme.hphy.service.HpAppointmentService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.api.ApiController;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
......@@ -23,4 +32,31 @@ public class HpAppointmentController extends ApiController {
* 服务对象
*/
private final HpAppointmentService hpAppointmentService;
@ApiOperation("分页查询 - 预约记录")
@GetMapping("/app/page")
public R appPage(Page page,
@RequestParam(value = "name", required = false) String name) {
LambdaQueryWrapper<HpAppointment> wrapper = new LambdaQueryWrapper<>();
wrapper.like(StrUtil.isNotBlank(name), HpAppointment::getPatientName, name)
.orderByDesc(HpAppointment::getCreateTime);
page = hpAppointmentService.page(page, wrapper);
return new R(page);
}
@ApiOperation("分页查询 - 取消预约记录")
@GetMapping("/cancel/page")
public R cancelPage(Page page,
@RequestParam(value = "name", required = false) String name) {
LambdaQueryWrapper<HpAppointment> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(HpAppointment::getStatus, Constant.BYTE_YES)
.like(StrUtil.isNotBlank(name), HpAppointment::getPatientName, name)
.orderByDesc(HpAppointment::getCreateTime);
page = hpAppointmentService.page(page, wrapper);
return new R(page);
}
}
\ No newline at end of file
......@@ -31,6 +31,8 @@ public class HphyPatientBase extends Model<HphyPatientBase> {
@ApiModelProperty(value = "id")
private Long id;
private Long userId;
@ApiModelProperty(value = "微信openid")
private String openId;
/**
......@@ -130,6 +132,9 @@ public class HphyPatientBase extends Model<HphyPatientBase> {
private String familyDocHos;
@ApiModelProperty("实名状态:0.未实名 1.已实名")
private String verifyStatus;
@TableField(exist = false)
private String randomCode;
......
package cn.sh.stc.sict.theme.hphy.service;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserCardInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserInfo;
import cn.sh.stc.sict.cloud.upms.dto.CurrentUser;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.sh.stc.sict.theme.hphy.model.HphyPatientBase;
import java.util.List;
/**
* 患者基本信息
*
......@@ -11,5 +16,7 @@ import cn.sh.stc.sict.theme.hphy.model.HphyPatientBase;
*/
public interface HphyPatientBaseService extends IService<HphyPatientBase> {
HphyPatientBase getByOpenId(String openId);
HphyPatientBase saveSSbInfo(CurrentUser current, WDUserInfo userInfo, List<WDUserCardInfo> cardList);
}
package cn.sh.stc.sict.theme.hphy.service.impl;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.sh.stc.sict.cloud.common.core.constant.Constant;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserCardInfo;
import cn.sh.stc.sict.cloud.common.core.dto.WDUserInfo;
import cn.sh.stc.sict.cloud.upms.dto.CurrentUser;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
......@@ -10,6 +16,8 @@ import cn.sh.stc.sict.theme.hphy.dao.HphyPatientBaseMapper;
import cn.sh.stc.sict.theme.hphy.model.HphyPatientBase;
import cn.sh.stc.sict.theme.hphy.service.HphyPatientBaseService;
import java.util.List;
@Service("hphyPatientBaseService")
@AllArgsConstructor
......@@ -24,4 +32,26 @@ public class HphyPatientBaseServiceImpl extends ServiceImpl<HphyPatientBaseMappe
return this.getOne(wrapper);
}
@Override
public HphyPatientBase saveSSbInfo(CurrentUser current, WDUserInfo userInfo, List<WDUserCardInfo> cardList) {
if (ObjectUtil.isNotNull(userInfo)) {
HphyPatientBase base = new HphyPatientBase();
base.setOpenId(current.getOpenId());
base.setPhone(userInfo.getMobile());
base.setName(userInfo.getUsername());
base.setCertId(userInfo.getPersoncard());
base.setAge(String.valueOf(IdcardUtil.getAgeByIdCard(userInfo.getPersoncard())));
base.setGender(Constant.STRING_YES.equals(userInfo.getGender()) ? "男" : "女");
base.setVerifyStatus(userInfo.getVerifyStatus());
if(CollUtil.isNotEmpty(cardList)){
WDUserCardInfo card = cardList.get(0);
base.setMediCardId(card.getCardNo());
base.setMediCardType(card.getCardType());
}
this.save(base);
}
return null;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment