longz
2026-08-11 2a3c3cdbf2398695d61633e072f98ee2757e9e27
backend/src/main/java/com/sinata/appointment/controller/MiniAuthController.java
@@ -3,6 +3,9 @@
import com.sinata.appointment.common.Result;
import com.sinata.appointment.common.ResultUtil;
import com.sinata.appointment.dto.MiniLoginResponse;
import com.sinata.appointment.dto.MiniOfficialBindPhoneRequest;
import com.sinata.appointment.dto.MiniOfficialLoginRequest;
import com.sinata.appointment.dto.MiniOfficialLoginResponse;
import com.sinata.appointment.dto.MiniPhoneLoginRequest;
import com.sinata.appointment.dto.MiniProfileUpdateRequest;
import com.sinata.appointment.dto.MiniWxLoginRequest;
@@ -51,6 +54,31 @@
        return ResultUtil.data(miniAuthApplicationService.loginByPhone(request.getMobile()));
    }
    @Operation(summary = "公众号静默授权地址")
    @GetMapping("/official-oauth-url")
    public Result<Map<String, String>> officialOAuthUrl(
            @RequestParam("redirectUri") String redirectUri,
            @RequestParam(value = "state", required = false) String state) {
        return ResultUtil.data(
                Map.of("url", miniAuthApplicationService.buildOfficialOAuthUrl(redirectUri, state)));
    }
    @Operation(summary = "公众号静默授权登录")
    @PostMapping("/official-login")
    public Result<MiniOfficialLoginResponse> officialLogin(
            @Valid @RequestBody MiniOfficialLoginRequest request) {
        return ResultUtil.data(miniAuthApplicationService.loginByOfficialCode(request.getCode()));
    }
    @Operation(summary = "公众号首次登录手机号绑定")
    @PostMapping("/official-bind-phone")
    public Result<MiniLoginResponse> officialBindPhone(
            @Valid @RequestBody MiniOfficialBindPhoneRequest request) {
        return ResultUtil.data(
                miniAuthApplicationService.bindOfficialPhoneAndLogin(
                        request.getBindToken(), request.getMobile()));
    }
    @Operation(summary = "当前小程序用户")
    @GetMapping("/me")
    public Result<Map<String, Object>> me() {
@@ -77,6 +105,13 @@
        return ResultUtil.success();
    }
    @Operation(summary = "解除当前小程序微信绑定")
    @PostMapping("/unbind-openid")
    public Result<Void> unbindOpenId() {
        miniAuthApplicationService.unbindMiniOpenIdAndLogout();
        return ResultUtil.success();
    }
    private Map<String, Object> buildMeResponse(MpUser u) {
        Map<String, Object> m = new HashMap<>();
        m.put("mpUserId", u.getId());
@@ -84,7 +119,7 @@
        m.put("deptId", u.getDeptId());
        SysDept dept = u.getDeptId() == null ? null : sysDeptMapper.selectById(u.getDeptId());
        m.put("deptName", dept == null ? null : dept.getDeptName());
        m.put("deptLeaderFlag", Boolean.TRUE.equals(u.getDeptLeaderFlag()));
        m.put("deptLeaderFlag", false);
        m.put("nickName", u.getNickName());
        m.put("avatarUrl", u.getAvatarUrl());
        m.put("mobile", u.getMobile());