From a3aa6d917e570db78be0b6279835a997c35566f4 Mon Sep 17 00:00:00 2001 From: chenxing Date: Fri, 2 Oct 2026 08:54:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(user):=20=E6=9C=AC=E4=BA=BA=E8=81=94?= =?UTF-8?q?=E7=B3=BB=E6=96=B9=E5=BC=8F=E4=BF=AE=E6=94=B9=E7=AB=AF=E7=82=B9?= =?UTF-8?q?=20POST=20/{platform}/user/UpdateContact=E2=80=94=E2=80=94?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=80=81=E5=8F=96=20userId=EF=BC=88=E9=98=B2?= =?UTF-8?q?=E6=9B=BF=E6=94=B9=EF=BC=89=EF=BC=8CYschOpenCall=20Tier0=20?= =?UTF-8?q?=E7=9B=B4=E8=B0=83=20UserBase=20/oapi/user/self/contact?= =?UTF-8?q?=EF=BC=88=E6=9C=8D=E5=8A=A1=E7=9B=AE=E5=BD=95=E5=8F=96=E5=9D=80?= =?UTF-8?q?+=E4=BF=A1=E5=B0=81=E5=BC=82=E5=B8=B8=E9=80=8F=E4=BC=A0?= =?UTF-8?q?=EF=BC=8C=E9=9B=B6=E6=96=B0=E5=A2=9E=E9=85=8D=E7=BD=AE=E9=A1=B9?= =?UTF-8?q?=EF=BC=89=EF=BC=9B=E4=B8=9A=E5=8A=A1=E9=94=99=E8=AF=AF=20DExcep?= =?UTF-8?q?tion=20=E5=86=92=E6=B3=A1=E5=8E=9F=E6=A0=B7=E5=8C=85=E4=BF=A1?= =?UTF-8?q?=E5=B0=81=EF=BC=8CUserBase=20=E4=B8=8D=E5=8F=AF=E8=BE=BE?= =?UTF-8?q?=E6=94=B6=E5=8F=A3=E5=8F=8B=E5=A5=BD=E6=8F=90=E7=A4=BA=EF=BC=9B?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E8=BF=94=E5=9B=9E=E6=9C=80=E6=96=B0=20BoaUse?= =?UTF-8?q?r=20=E4=BE=9B=E5=89=8D=E7=AB=AF=E5=88=B7=E6=96=B0=20store?= =?UTF-8?q?=EF=BC=88=E4=BB=BB=E5=8A=A1B=C2=B7UserHome=20=E4=BE=A7=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/api/UserController.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) 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 包信封 + } }