From 53f8d6df49f54e1a83e8d026f8cf21a3cb689e01 Mon Sep 17 00:00:00 2001 From: fshenye <512914587@qq.com> Date: Thu, 9 Jun 2022 16:37:41 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=AF=B9=E6=8E=A5=E9=9A=8F=E7=94=B3?= =?UTF-8?q?=E5=8A=9E=E6=8E=A5=E5=8F=A3=201.1=20=E8=8E=B7=E5=8F=96=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BF=A1=E6=81=AF=201.2=20=E8=8E=B7=E5=8F=96=E7=BB=91?= =?UTF-8?q?=E5=8D=A1=E4=BF=A1=E6=81=AF=202.=20=E8=B0=83=E6=95=B4=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=EF=BC=8C=E8=8E=B7=E5=8F=96=E6=82=A3=E8=80=85=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=203.=20=E6=96=B0=E5=A2=9E=E6=8E=A5=E5=8F=A3=EF=BC=9A?= =?UTF-8?q?=E5=85=AC=E4=BC=97=E5=8F=B7=E6=82=A3=E8=80=85=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=82=A3=E8=80=85=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/constant/UserConstant.java | 6 ++ .../core/constant/enums/LoginTypeEnum.java | 5 ++ .../cloud/common/core/dto/WDUserCardInfo.java | 14 ++++ .../cloud/common/core/dto/WDUserInfo.java | 23 ++++++ .../sict/cloud/common/core/util/SsbUtil.java | 70 +++++++++++++++++++ .../sict/cloud/upms/model/SysUserBase.java | 5 ++ .../service/impl/SysUserBaseServiceImpl.java | 53 ++++++++++++-- .../mp/HphyPatientBaseController.java | 45 +++++++++++- .../hphy/controller/mp/IndexController.java | 5 +- .../web/HpAppointmentController.java | 36 ++++++++++ .../theme/hphy/model/HphyPatientBase.java | 5 ++ .../hphy/service/HphyPatientBaseService.java | 7 ++ .../impl/HphyPatientBaseServiceImpl.java | 32 ++++++++- 13 files changed, 294 insertions(+), 12 deletions(-) create mode 100644 cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/constant/UserConstant.java create mode 100644 cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/dto/WDUserCardInfo.java create mode 100644 cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/dto/WDUserInfo.java create mode 100644 cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/util/SsbUtil.java diff --git a/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/constant/UserConstant.java b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/constant/UserConstant.java new file mode 100644 index 0000000..8e20d79 --- /dev/null +++ b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/constant/UserConstant.java @@ -0,0 +1,6 @@ +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"; +} diff --git a/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/constant/enums/LoginTypeEnum.java b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/constant/enums/LoginTypeEnum.java index 68b824c..4059a58 100644 --- a/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/constant/enums/LoginTypeEnum.java +++ b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/constant/enums/LoginTypeEnum.java @@ -22,6 +22,11 @@ public enum LoginTypeEnum { */ SMS("sms", "验证码登录"), + /** + * 验证码登录 + */ + SSB("ssb", "随申办token"), + /** * H5登录 */ diff --git a/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/dto/WDUserCardInfo.java b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/dto/WDUserCardInfo.java new file mode 100644 index 0000000..ea420fc --- /dev/null +++ b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/dto/WDUserCardInfo.java @@ -0,0 +1,14 @@ +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; +} diff --git a/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/dto/WDUserInfo.java b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/dto/WDUserInfo.java new file mode 100644 index 0000000..08042a1 --- /dev/null +++ b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/dto/WDUserInfo.java @@ -0,0 +1,23 @@ +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; +} diff --git a/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/util/SsbUtil.java b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/util/SsbUtil.java new file mode 100644 index 0000000..32d2b42 --- /dev/null +++ b/cloud-common/cloud-common-core/src/main/java/cn/sh/stc/sict/cloud/common/core/util/SsbUtil.java @@ -0,0 +1,70 @@ +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 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; + } + } +} diff --git a/smart-health-modules/cloud-upms/cloud-upms-api/src/main/java/cn/sh/stc/sict/cloud/upms/model/SysUserBase.java b/smart-health-modules/cloud-upms/cloud-upms-api/src/main/java/cn/sh/stc/sict/cloud/upms/model/SysUserBase.java index b920a57..4f97099 100644 --- a/smart-health-modules/cloud-upms/cloud-upms-api/src/main/java/cn/sh/stc/sict/cloud/upms/model/SysUserBase.java +++ b/smart-health-modules/cloud-upms/cloud-upms-api/src/main/java/cn/sh/stc/sict/cloud/upms/model/SysUserBase.java @@ -90,6 +90,11 @@ public class SysUserBase extends Model { */ @ApiModelProperty(hidden = true, value = "账号状态:0-正常,1-禁用") private Byte status; + + /** + * 来源 + */ + private String source; /** * */ diff --git a/smart-health-modules/cloud-upms/cloud-upms-biz/src/main/java/cn/sh/stc/sict/cloud/upms/service/impl/SysUserBaseServiceImpl.java b/smart-health-modules/cloud-upms/cloud-upms-biz/src/main/java/cn/sh/stc/sict/cloud/upms/service/impl/SysUserBaseServiceImpl.java index ad5dbc8..dcac836 100644 --- a/smart-health-modules/cloud-upms/cloud-upms-biz/src/main/java/cn/sh/stc/sict/cloud/upms/service/impl/SysUserBaseServiceImpl.java +++ b/smart-health-modules/cloud-upms/cloud-upms-biz/src/main/java/cn/sh/stc/sict/cloud/upms/service/impl/SysUserBaseServiceImpl.java @@ -1,8 +1,14 @@ 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 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 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 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 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); + } } diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/IndexController.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/IndexController.java index acc4241..cf42081 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/IndexController.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/IndexController.java @@ -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 diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/web/HpAppointmentController.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/web/HpAppointmentController.java index 33781c5..dd76863 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/web/HpAppointmentController.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/web/HpAppointmentController.java @@ -1,11 +1,20 @@ 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 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 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 diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/model/HphyPatientBase.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/model/HphyPatientBase.java index ac7b886..0c091f7 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/model/HphyPatientBase.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/model/HphyPatientBase.java @@ -31,6 +31,8 @@ public class HphyPatientBase extends Model { @ApiModelProperty(value = "id") private Long id; + private Long userId; + @ApiModelProperty(value = "微信openid") private String openId; /** @@ -130,6 +132,9 @@ public class HphyPatientBase extends Model { private String familyDocHos; + @ApiModelProperty("实名状态:0.未实名 1.已实名") + private String verifyStatus; + @TableField(exist = false) private String randomCode; diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/HphyPatientBaseService.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/HphyPatientBaseService.java index e93b82c..32a776d 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/HphyPatientBaseService.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/HphyPatientBaseService.java @@ -1,8 +1,13 @@ 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 getByOpenId(String openId); + + HphyPatientBase saveSSbInfo(CurrentUser current, WDUserInfo userInfo, List cardList); } diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/impl/HphyPatientBaseServiceImpl.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/impl/HphyPatientBaseServiceImpl.java index a7a143d..ddc84de 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/impl/HphyPatientBaseServiceImpl.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/service/impl/HphyPatientBaseServiceImpl.java @@ -1,6 +1,12 @@ 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 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; + } } -- 2.22.0