From 92d2483425dd0986e637db0fd41350a7c528804b Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 16 Jun 2025 09:20:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86hcp=E7=99=BB?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../caseData/controller/PublicController.java | 13 +- .../Hospital/GetHospitalByUuidResponse.java | 1 - ...Response.java => GetUserInfoResponse.java} | 9 +- .../extend/app/UserInfo/UserInfo.java | 50 +++++++- .../publicRequest/LoginHcpRequest.java | 10 ++ .../example/caseData/service/UserService.java | 114 +++++++++++++++++- 6 files changed, 180 insertions(+), 17 deletions(-) rename src/main/java/com/example/caseData/extend/app/UserInfo/{GetUserInfoByMobileResponse.java => GetUserInfoResponse.java} (83%) create mode 100644 src/main/java/com/example/caseData/request/publicRequest/LoginHcpRequest.java diff --git a/src/main/java/com/example/caseData/controller/PublicController.java b/src/main/java/com/example/caseData/controller/PublicController.java index d4f68bb..f7945a7 100644 --- a/src/main/java/com/example/caseData/controller/PublicController.java +++ b/src/main/java/com/example/caseData/controller/PublicController.java @@ -7,6 +7,7 @@ import com.example.caseData.dto.publicDto.LoginDto; import com.example.caseData.dto.user.UserDto; import com.example.caseData.extend.aliyun.Oss; import com.example.caseData.request.publicRequest.GetOssSignRequest; +import com.example.caseData.request.publicRequest.LoginHcpRequest; import com.example.caseData.request.publicRequest.LoginRequest; import com.example.caseData.request.UserRequest.UserRequest; import com.example.caseData.service.UserService; @@ -31,7 +32,7 @@ public class PublicController { // 登陆 @PostMapping("/login/wechat/mobile") - public Response login(@Validated({LoginRequest.Login.class}) @ModelAttribute LoginRequest request) { + public Response loginWechatMobile(@Validated({LoginRequest.Login.class}) @ModelAttribute LoginRequest request) { // 微信手机号授权登录 // 获取手机号 // 获取用户openid @@ -40,11 +41,19 @@ public class PublicController { String phone = "18221234167"; // 用户登陆 - LoginDto g = userService.UserLogin(phone); + LoginDto g = userService.UserLoginWithMobile(phone); return Response.success(g); } + // 登陆 + @PostMapping("/login/hcp") + public Response loginHcp(@Validated() @ModelAttribute LoginHcpRequest request) { + // 用户登陆 + LoginDto g = userService.UserLoginWithAppToken(request.getToken()); + return Response.success(g); + } + // 获取签名 @GetMapping("/sign/oss") public Response GetOssSign( diff --git a/src/main/java/com/example/caseData/extend/app/Hospital/GetHospitalByUuidResponse.java b/src/main/java/com/example/caseData/extend/app/Hospital/GetHospitalByUuidResponse.java index 97d554d..f6d83bb 100644 --- a/src/main/java/com/example/caseData/extend/app/Hospital/GetHospitalByUuidResponse.java +++ b/src/main/java/com/example/caseData/extend/app/Hospital/GetHospitalByUuidResponse.java @@ -1,6 +1,5 @@ package com.example.caseData.extend.app.Hospital; -import com.example.caseData.extend.app.UserInfo.GetUserInfoByMobileResponse; import lombok.Data; @Data diff --git a/src/main/java/com/example/caseData/extend/app/UserInfo/GetUserInfoByMobileResponse.java b/src/main/java/com/example/caseData/extend/app/UserInfo/GetUserInfoResponse.java similarity index 83% rename from src/main/java/com/example/caseData/extend/app/UserInfo/GetUserInfoByMobileResponse.java rename to src/main/java/com/example/caseData/extend/app/UserInfo/GetUserInfoResponse.java index da1262e..a23221c 100644 --- a/src/main/java/com/example/caseData/extend/app/UserInfo/GetUserInfoByMobileResponse.java +++ b/src/main/java/com/example/caseData/extend/app/UserInfo/GetUserInfoResponse.java @@ -3,7 +3,7 @@ package com.example.caseData.extend.app.UserInfo; import lombok.Data; @Data -public class GetUserInfoByMobileResponse { +public class GetUserInfoResponse { /** 接口调用状态。200:正常;其它值:调用出错 */ private int code; @@ -11,7 +11,7 @@ public class GetUserInfoByMobileResponse { private String msg; /** 接口返回的用户信息数据 */ - private GetUserInfoByMobileData data; + private ResponsData data; /** 接口是否调用成功 */ private boolean success; @@ -20,11 +20,8 @@ public class GetUserInfoByMobileResponse { private String message; - /** - * 根据手机号获取医生信息 - 详细数据 - */ @Data - public static class GetUserInfoByMobileData { + public static class ResponsData { /** app唯一标识 */ private String uuid; diff --git a/src/main/java/com/example/caseData/extend/app/UserInfo/UserInfo.java b/src/main/java/com/example/caseData/extend/app/UserInfo/UserInfo.java index e830a48..434f531 100644 --- a/src/main/java/com/example/caseData/extend/app/UserInfo/UserInfo.java +++ b/src/main/java/com/example/caseData/extend/app/UserInfo/UserInfo.java @@ -21,7 +21,7 @@ public class UserInfo extends Base { private AppConfig appConfig; // 根据手机号获取信息V3 - public GetUserInfoByMobileResponse getUserInfoByMobile(String mobile) throws BusinessException { + public GetUserInfoResponse getUserInfoByMobile(String mobile) throws BusinessException { String timestamp = String.valueOf(System.currentTimeMillis() / 1000); // 处理参数 @@ -48,7 +48,53 @@ public class UserInfo extends Base { } // 反序列化 JSON - GetUserInfoByMobileResponse result = JSONUtil.toBean(response.body(), GetUserInfoByMobileResponse.class); + GetUserInfoResponse result = JSONUtil.toBean(response.body(), GetUserInfoResponse.class); + log.info("获取app数据返回:{}",result); + if (result.getCode() != 200){ + if (!Objects.equals(result.getMsg(), "")){ + throw new BusinessException(result.getMsg()); + }else{ + throw new BusinessException("失败"); + } + } + + if (result.getData() == null){ + throw new BusinessException("失败"); + } + + return result; + } + } + + // 根据token获取信息V3 + public GetUserInfoResponse getUserInfoByToken(String appToken) throws BusinessException { + String timestamp = String.valueOf(System.currentTimeMillis() / 1000); + + // 处理参数 + Map requestData = new HashMap<>(); + requestData.put("token", appToken); + requestData.put("platform", appConfig.getPlatform()); + requestData.put("timestamp", timestamp); + + // 生成签名 + String sign = genSignature(requestData,appConfig.getSecretKey()); + + String url = appConfig.getApiUrl() + "/expert-api/getInfoByToken"; + String jsonBody = JSONUtil.toJsonStr(requestData); + log.info("获取app数据参数:{}",jsonBody); + + try(HttpResponse response = HttpRequest.post(url) + .header("Content-Type", "application/json") + .header("sign", sign) + .body(jsonBody) + .execute()){ + + if (response.getStatus() != 200) { + throw new BusinessException("失败"); + } + + // 反序列化 JSON + GetUserInfoResponse result = JSONUtil.toBean(response.body(), GetUserInfoResponse.class); log.info("获取app数据返回:{}",result); if (result.getCode() != 200){ if (!Objects.equals(result.getMsg(), "")){ diff --git a/src/main/java/com/example/caseData/request/publicRequest/LoginHcpRequest.java b/src/main/java/com/example/caseData/request/publicRequest/LoginHcpRequest.java new file mode 100644 index 0000000..f81caf3 --- /dev/null +++ b/src/main/java/com/example/caseData/request/publicRequest/LoginHcpRequest.java @@ -0,0 +1,10 @@ +package com.example.caseData.request.publicRequest; + +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +@Data +public class LoginHcpRequest { + @NotEmpty(message = "错误请求") + private String token; +} \ No newline at end of file diff --git a/src/main/java/com/example/caseData/service/UserService.java b/src/main/java/com/example/caseData/service/UserService.java index 1318bd7..5585371 100644 --- a/src/main/java/com/example/caseData/service/UserService.java +++ b/src/main/java/com/example/caseData/service/UserService.java @@ -9,7 +9,7 @@ import com.example.caseData.dto.publicDto.LoginDto; import com.example.caseData.exception.BusinessException; import com.example.caseData.extend.app.Hospital.GetHospitalByUuidResponse; import com.example.caseData.extend.app.Hospital.Hospital; -import com.example.caseData.extend.app.UserInfo.GetUserInfoByMobileResponse; +import com.example.caseData.extend.app.UserInfo.GetUserInfoResponse; import com.example.caseData.extend.app.UserInfo.UserInfo; import com.example.caseData.model.BasicHospitalModel; import com.example.caseData.model.CaseClinicalDoctorModel; @@ -46,11 +46,11 @@ public class UserService { private JwtUtil jwtUtil; /** - * 用户登陆 + * 用户登陆-手机号 * @return UserModel */ @Transactional - public LoginDto UserLogin(String phone) throws BusinessException { + public LoginDto UserLoginWithMobile(String phone) throws BusinessException { // 获取app用户数据 UserModel user = GetAppUserInfoByPhone(phone); @@ -76,14 +76,116 @@ public class UserService { } /** - * 获取app用户数据 + * 用户登陆-appToken + * @param appToken 1 + * @return + * @throws BusinessException + */ + @Transactional + public LoginDto UserLoginWithAppToken(String appToken) throws BusinessException { + // 获取app用户数据 + UserModel user = GetAppUserInfoByToken(appToken); + + // 生成jwt + String token = jwtUtil.createToken(String.valueOf(user.getUserId())); + + // 获取对应医生数据 + LambdaQueryWrapper caseClinicalDoctorWrapper = new LambdaQueryWrapper<>(); + caseClinicalDoctorWrapper.eq(CaseClinicalDoctorModel::getDoctorIden, user.getUserIden()); + CaseClinicalDoctorModel caseClinicalDoctor = caseClinicalDoctorDao.selectOne(caseClinicalDoctorWrapper); + + // 处理返回值 + LoginDto g = new LoginDto(); + g.setUserId(String.valueOf(user.getUserId())); + g.setUserName(user.getUserName()); + g.setAvatar(Replace.addOssDomain(user.getAvatar())); + g.setToken(token); + + if (caseClinicalDoctor != null) { + g.setDoctorId(String.valueOf(caseClinicalDoctor.getDoctorId())); + } + return g; + } + + /** + * 获取app用户数据-手机号 * @param phone 手机号 * @return UserModel */ public UserModel GetAppUserInfoByPhone(String phone) throws BusinessException { // 请求接口获取数据 - GetUserInfoByMobileResponse result = userInfo.getUserInfoByMobile(phone); - GetUserInfoByMobileResponse.GetUserInfoByMobileData data = result.getData(); + GetUserInfoResponse result = userInfo.getUserInfoByMobile(phone); + GetUserInfoResponse.ResponsData data = result.getData(); + + // 查询数据库用户信息 + LambdaQueryWrapper userModelWrapper = new LambdaQueryWrapper<>(); + userModelWrapper.eq(UserModel::getUserIden, result.getData().getUuid()); + UserModel user = userDao.selectOne(userModelWrapper); + if (user == null){ + // 构造 UserModel 对象 + user = new UserModel(); + user.setUserIden(data.getUuid()); + user.setUserName(data.getRealname()); + user.setUserMobile(data.getMobile()); + user.setMobileEncryption(SecureUtil.md5(data.getMobile())); + user.setStatus(1); + user.setRegisterSource(2); + user.setOpenId(""); + user.setUnionId(""); + user.setSex(0); + user.setAvatar(data.getPhoto()); + user.setDepartmentName(data.getOfficeName()); + user.setTitle(StringToInt.DoctorTitleToInt(data.getPositionName())); + user.setAddress(data.getProvName()); + save(user); + }else{ + if (!Objects.equals(user.getUserName(), data.getRealname())){ + user.setUserName(data.getRealname()); + } + + if (!Objects.equals(user.getUserMobile(), data.getMobile())){ + user.setUserMobile(data.getMobile()); + user.setMobileEncryption(SecureUtil.md5(data.getMobile())); + } + + if (!Objects.equals(user.getTitle(), StringToInt.DoctorTitleToInt(data.getOfficeName()))){ + user.setTitle(StringToInt.DoctorTitleToInt(data.getOfficeName())); + } + + if (!Objects.equals(user.getDepartmentName(), data.getOfficeName())){ + user.setDepartmentName(data.getOfficeName()); + } + + if (!Objects.equals(user.getAddress(), data.getProvName())){ + user.setAddress(data.getProvName()); + } + + userDao.updateById(user); + } + + // 获取app医院数据 + BasicHospitalModel basicHospital = GetAppHospital(data.getHospitalUuid()); + + // 修改用户所属医院 + if (!Objects.equals(user.getHospitalId(), basicHospital.getHospitalId())){ + UserModel updateUser = new UserModel(); + updateUser.setUserId(user.getUserId()); + updateUser.setHospitalId(basicHospital.getHospitalId()); + userDao.updateById(updateUser); + } + + return user; + } + + /** + * 获取app用户数据-token + * @param token token + * @return UserModel + */ + public UserModel GetAppUserInfoByToken(String token) throws BusinessException { + // 请求接口获取数据 + GetUserInfoResponse result = userInfo.getUserInfoByToken(token); + GetUserInfoResponse.ResponsData data = result.getData(); // 查询数据库用户信息 LambdaQueryWrapper userModelWrapper = new LambdaQueryWrapper<>();