diff --git a/src/main/java/com/yunhai/userhome/controller/api/UserController.java b/src/main/java/com/yunhai/userhome/controller/api/UserController.java index 90bf57f..72d2898 100644 --- a/src/main/java/com/yunhai/userhome/controller/api/UserController.java +++ b/src/main/java/com/yunhai/userhome/controller/api/UserController.java @@ -3,6 +3,8 @@ package com.yunhai.userhome.controller.api; import com.yunhai.platform.apistd.BizException; import com.yunhai.platform.openapi.base.OpenApiUserClient; import com.yunhai.platform.openapi.base.YschBaseOpenApi; +import com.yunhai.platform.openapi.core.OpenApiException; +import com.yunhai.platform.openapi.core.YschOpenCall; import com.yunhai.platform.utils.exception.ErrorCode; import com.yunhai.platform.utils.model.BoaApp; import com.yunhai.platform.utils.model.BoaAppType; @@ -10,6 +12,8 @@ import com.yunhai.platform.utils.model.BoaRoleInfo; import com.yunhai.platform.utils.model.BoaUser; import com.yunhai.userhome.config.Config; import com.yunhai.userhome.service.AppRemoteService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -18,7 +22,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; /** * 用户首页接口(CAS 登录态,路径 {@code /{platform}/user/})。 @@ -28,12 +34,20 @@ import java.util.List; @RequestMapping(value = Config.API_PATH + "/user/") public class UserController { + private static final Logger log = LoggerFactory.getLogger(UserController.class); + + /** 服务目录目标名:userbase(yh.open.services / 枚举兜底 = base-host + /userbase,与 MsgCenterProxyService 同口径) */ + private static final String TARGET_USERBASE = "userbase"; + @Autowired private AppRemoteService appRemoteService; @Autowired private OpenApiUserClient openApiUserClient; + @Autowired + private YschOpenCall openCall; + /** 当前登录用户信息(CAS 注入)。 */ @GetMapping("GetUserInfo") @@ -92,4 +106,43 @@ public class UserController { } openApiUserClient.switchIdentity(authUserWithDept.getId(), roleInfo.getRoleId(), roleInfo.getSchId()); } + + /** + * 本人联系方式修改(手机号/邮箱):body {phone, email},userId 只取 CAS 会话(无视请求体,防替改他人), + * 经 {@link YschOpenCall} 泛化签名直调(Tier 0)转发 UserBase {@code POST /oapi/user/self/contact} + * (与 MsgCenterProxyService 直调 userbase 同范式:服务目录按名取址 + 信封异常透传,零新增配置项)。 + * + */ + @PostMapping("UpdateContact") + public BoaUser updateContact(BoaUser authUserWithDept, @RequestBody Map body) { + String phone = body == null ? null : body.get("phone"); + String email = body == null ? null : body.get("email"); + boolean phoneBlank = phone == null || phone.trim().isEmpty(); + boolean emailBlank = email == null || email.trim().isEmpty(); + if (phoneBlank && emailBlank) { + throw new BizException(ErrorCode.PARAM_ERROR, "手机号与邮箱至少填写一项"); + } + Map payload = new LinkedHashMap<>(); + payload.put("userId", String.valueOf(authUserWithDept.getId())); + if (!phoneBlank) { + payload.put("phone", phone.trim()); + } + if (!emailBlank) { + payload.put("email", email.trim()); + } + try { + return openCall.post(TARGET_USERBASE, "/oapi/user/self/contact", null, payload, BoaUser.class); + } catch (OpenApiException e) { + log.warn("[user] UpdateContact 直调 UserBase 失败 userId={}:{}", authUserWithDept.getId(), e.toString()); + throw new BizException(ErrorCode.CUSTOM, "用户中心暂不可达,请稍后重试"); + } + // DException(UserBase 业务错误,code!=0)刻意冒泡:GlobalExceptionHandler 按原 code/msg 包信封 + } }