|
@@ -16,6 +16,8 @@ import work.baiyun.chronicdiseaseapp.model.vo.CheckUserBindingResponse;
|
|
|
import work.baiyun.chronicdiseaseapp.model.vo.CheckUserBindingRequest;
|
|
import work.baiyun.chronicdiseaseapp.model.vo.CheckUserBindingRequest;
|
|
|
import work.baiyun.chronicdiseaseapp.service.UserBindingService;
|
|
import work.baiyun.chronicdiseaseapp.service.UserBindingService;
|
|
|
import work.baiyun.chronicdiseaseapp.enums.UserBindingType;
|
|
import work.baiyun.chronicdiseaseapp.enums.UserBindingType;
|
|
|
|
|
+import work.baiyun.chronicdiseaseapp.enums.PermissionGroup;
|
|
|
|
|
+import work.baiyun.chronicdiseaseapp.exception.CustomException;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
@@ -33,6 +35,45 @@ public class UserBindingServiceImpl implements UserBindingService {
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void createUserBinding(CreateUserBindingRequest request) {
|
|
public void createUserBinding(CreateUserBindingRequest request) {
|
|
|
|
|
+ // 基础校验:参数非空由 controller/vo 注解完成,但需要检查用户存在性与角色一致性
|
|
|
|
|
+ if (request.getPatientUserId() == null || request.getBoundUserId() == null) {
|
|
|
|
|
+ throw new CustomException(work.baiyun.chronicdiseaseapp.enums.ErrorCode.PARAMETER_ERROR.getCode(), "patientUserId or boundUserId is null");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (request.getPatientUserId().equals(request.getBoundUserId())) {
|
|
|
|
|
+ throw new CustomException(work.baiyun.chronicdiseaseapp.enums.ErrorCode.PARAMETER_ERROR.getCode(), "不能绑定自己");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 验证 patientUserId 存在且角色为 PATIENT
|
|
|
|
|
+ work.baiyun.chronicdiseaseapp.model.po.UserInfo patient = userInfoMapper.selectById(request.getPatientUserId());
|
|
|
|
|
+ if (patient == null) {
|
|
|
|
|
+ throw new CustomException(work.baiyun.chronicdiseaseapp.enums.ErrorCode.USER_NOT_EXIST.getCode(), "患者用户不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (patient.getRole() != PermissionGroup.PATIENT) {
|
|
|
|
|
+ throw new CustomException(work.baiyun.chronicdiseaseapp.enums.ErrorCode.PARAMETER_ERROR.getCode(), "patientUserId 对应的用户不是患者");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 验证 boundUserId 存在且角色与 bindingType 一致
|
|
|
|
|
+ work.baiyun.chronicdiseaseapp.model.po.UserInfo bound = userInfoMapper.selectById(request.getBoundUserId());
|
|
|
|
|
+ if (bound == null) {
|
|
|
|
|
+ throw new CustomException(work.baiyun.chronicdiseaseapp.enums.ErrorCode.USER_NOT_EXIST.getCode(), "被绑定用户不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ UserBindingType type = UserBindingType.fromCode(request.getBindingType());
|
|
|
|
|
+ if (type == null) {
|
|
|
|
|
+ throw new CustomException(work.baiyun.chronicdiseaseapp.enums.ErrorCode.PARAMETER_ERROR.getCode(), "bindingType 无效");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (type == UserBindingType.DOCTOR) {
|
|
|
|
|
+ if (bound.getRole() != PermissionGroup.DOCTOR) {
|
|
|
|
|
+ throw new CustomException(work.baiyun.chronicdiseaseapp.enums.ErrorCode.INVALID_DOCTOR.getCode(), "被绑定用户不是医生");
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (type == UserBindingType.FAMILY) {
|
|
|
|
|
+ if (bound.getRole() != PermissionGroup.PATIENT_FAMILY) {
|
|
|
|
|
+ throw new CustomException(work.baiyun.chronicdiseaseapp.enums.ErrorCode.PARAMETER_ERROR.getCode(), "被绑定用户不是患者家属");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 检查是否已存在绑定关系
|
|
// 检查是否已存在绑定关系
|
|
|
QueryWrapper<UserBinding> queryWrapper = new QueryWrapper<>();
|
|
QueryWrapper<UserBinding> queryWrapper = new QueryWrapper<>();
|
|
|
queryWrapper.eq("patient_user_id", request.getPatientUserId())
|
|
queryWrapper.eq("patient_user_id", request.getPatientUserId())
|