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 0000000000000000000000000000000000000000..8e20d798adf766e77bcba7ec23a131dc8c0b142a
--- /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 68b824c52c059d29754a44594733ae5833df6c5e..4059a586ce5cf4bc77baecbdf27a586bacc4ad89 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 0000000000000000000000000000000000000000..ea420fc755d7252400e446cd683b5c8ed262959d
--- /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 0000000000000000000000000000000000000000..08042a1fd26442ec3a5806b921db60fe8c78d8e9
--- /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 0000000000000000000000000000000000000000..32d2b426ab1990de9b4d38c0f021226f7418d4a2
--- /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<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;
+        }
+    }
+}
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 b920a570609c8b010c0ffb6e151236a7b971e12e..4f970994889573dadd252996629b8bfade561f1b 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<SysUserBase> {
      */
     @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 ad5dbc86c9d966d470e1c7a08baf3c5ae4d4aafc..dcac8369e50f2169a2fd2bacb8765c0a8df941c1 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<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);
         }
diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/HphyPatientBaseController.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/HphyPatientBaseController.java
index 450bd2c9b3cb7d9e861be80ece47370ae6b54e5c..cbdac4b2bc17d2451c14a916574e5842255c8373 100644
--- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/HphyPatientBaseController.java
+++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hphy/controller/mp/HphyPatientBaseController.java
@@ -1,9 +1,15 @@
 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);
+    }
 }
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 acc424118641a0aad57e0e351dea169c84e79005..cf42081457b4d8bfca5921da4f3df7fc798fd90e 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 33781c5cf946b009848577b3f37cff20b52522d0..dd768638a6ae6f2d3e4ab6051a3e36169803fb79 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<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
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 ac7b886afd5d27eb5997af6cd94e90d27fef23de..0c091f7a3939b11dcc0b9028551761c4a1285bb8 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<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;
 
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 e93b82cecc5915a4ea724a2e9722e46b1c61ecc7..32a776dc06d3f8ddbf040cd0859bfb823f227166 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> {
     HphyPatientBase getByOpenId(String openId);
+
+    HphyPatientBase saveSSbInfo(CurrentUser current, WDUserInfo userInfo, List<WDUserCardInfo> 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 a7a143d10fd2ca0769dff3a1b68539a9738278aa..ddc84de9c32cf121a9733d90f54270e0c536e93b 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<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;
+    }
 }