Просмотр исходного кода

添加远程调用一账通接口

wangzhijun 1 неделя назад
Родитель
Сommit
a1af7decae

+ 48 - 0
nightFragrance-admin/src/main/java/com/ylx/web/controller/usercenter/UnifiedUserCenterController.java

@@ -0,0 +1,48 @@
+package com.ylx.web.controller.usercenter;
+
+import com.ylx.common.core.controller.BaseController;
+import com.ylx.common.core.domain.R;
+import com.ylx.usercenter.domain.dto.UnifiedUserCenterDTO;
+import com.ylx.usercenter.domain.vo.UnifiedUserClientVO;
+import com.ylx.usercenter.service.UnifiedUserCenterService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/userCenter")
+@Api(tags = {"一账通客户端"})
+@Slf4j
+public class UnifiedUserCenterController extends BaseController {
+
+    @Resource
+    private UnifiedUserCenterService unifiedUserCenterService;
+
+    @ApiOperation("查询用户绑定")
+    @PostMapping("/userApp/queryBind")
+    public R<UnifiedUserClientVO> queryBind(@RequestBody UnifiedUserCenterDTO dto) {
+        UnifiedUserClientVO vo = this.unifiedUserCenterService.queryBind(dto);
+        return R.ok(vo);
+    }
+
+    @ApiOperation("添加用户绑定")
+    @PostMapping("/userApp/bind")
+    public R<UnifiedUserClientVO> bind(@RequestBody UnifiedUserCenterDTO dto) {
+        UnifiedUserClientVO vo = this.unifiedUserCenterService.bind(dto);
+        return R.ok(vo);
+    }
+
+    @ApiOperation("解除用户绑定")
+    @PostMapping("/userApp/unbind")
+    public R<UnifiedUserClientVO> unbind(@RequestBody UnifiedUserCenterDTO dto) {
+        UnifiedUserClientVO vo = this.unifiedUserCenterService.unbind(dto);
+        return R.ok(vo);
+    }
+
+}

+ 68 - 0
nightFragrance-massage/src/main/java/com/ylx/usercenter/domain/dto/UnifiedUserCenterDTO.java

@@ -0,0 +1,68 @@
+package com.ylx.usercenter.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 抽奖次数增加请求DTO
+ */
+@Data
+public class UnifiedUserCenterDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(value = "用户id")
+    private String userId;
+
+    /**
+     * 客户端ID
+     * 需要绑定的客户端ID
+     */
+    @ApiModelProperty(value = "客户端ID")
+    private String clientId;
+
+    /**
+     * 租户ID
+     */
+    @ApiModelProperty(value = "租户ID")
+    private String tenantId;
+
+    /**
+     * 手机号
+     */
+    @ApiModelProperty(value = "手机号")
+    private String userPhone;
+
+    /**
+     * userID
+     * 源用户ID
+     */
+    @TableField(exist = false)
+    private String sourceUserId;
+
+    /**
+     * userID
+     * 目标用户ID
+     */
+    @TableField(exist = false)
+    private String targetUserId;
+
+    /**
+     * 客户端ID
+     * 源客户端ID
+     */
+    @TableField(exist = false)
+    private String sourceClientId;
+
+    /**
+     * 客户端ID
+     * 目标客户端ID
+     */
+    @TableField(exist = false)
+    private String targetClientId;
+}

+ 52 - 0
nightFragrance-massage/src/main/java/com/ylx/usercenter/domain/vo/UnifiedUserClientVO.java

@@ -0,0 +1,52 @@
+package com.ylx.usercenter.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 统一账户查询绑定、用户平台绑定结果VO
+ */
+@Data
+public class UnifiedUserClientVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(value = "用户id")
+    private String userId;
+
+    /**
+     * 客户端ID
+     * 需要绑定的客户端ID
+     */
+    @ApiModelProperty(value = "客户端ID")
+    private String clientId;
+
+    /**
+     * 唯一ID
+     */
+    @ApiModelProperty(value = "唯一ID")
+    private String uuid;
+
+    /**
+     * 租户ID
+     */
+    @ApiModelProperty(value = "租户ID")
+    private String tenantId;
+
+    /**
+     * 手机号
+     */
+    @ApiModelProperty(value = "手机号")
+    private String userPhone;
+
+    /**
+     * 用户平台绑定列表
+     */
+    @ApiModelProperty(value = "用户平台绑定列表")
+    private List<UnifiedUserClientVO> userClients;
+}

+ 12 - 0
nightFragrance-massage/src/main/java/com/ylx/usercenter/service/UnifiedUserCenterService.java

@@ -0,0 +1,12 @@
+package com.ylx.usercenter.service;
+
+import com.ylx.usercenter.domain.dto.UnifiedUserCenterDTO;
+import com.ylx.usercenter.domain.vo.UnifiedUserClientVO;
+
+public interface UnifiedUserCenterService {
+    UnifiedUserClientVO queryBind(UnifiedUserCenterDTO dto);
+
+    UnifiedUserClientVO bind(UnifiedUserCenterDTO dto);
+
+    UnifiedUserClientVO unbind(UnifiedUserCenterDTO dto);
+}

+ 91 - 0
nightFragrance-massage/src/main/java/com/ylx/usercenter/service/impl/UnifiedUserCenterServiceImpl.java

@@ -0,0 +1,91 @@
+package com.ylx.usercenter.service.impl;
+
+import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.ylx.common.exception.ServiceException;
+import com.ylx.usercenter.domain.dto.UnifiedUserCenterDTO;
+import com.ylx.usercenter.domain.vo.UnifiedUserClientVO;
+import com.ylx.usercenter.service.UnifiedUserCenterService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class UnifiedUserCenterServiceImpl implements UnifiedUserCenterService {
+
+    @Value("${remote.user-center.base-url}")
+    private String baseUrl;
+    @Value("${remote.user-center.client-id}")
+    private String clientId;
+
+    // 定义接口路径常量
+    private static final String QUERY_BIND_PATH = "/userApp/queryBind";
+    private static final String BIND_PATH = "/userApp/bind";
+    private static final String UNBIND_PATH = "/userApp/unbind";
+
+    @Override
+    public UnifiedUserClientVO queryBind(UnifiedUserCenterDTO dto) {
+        validateDto(dto);
+        // 只需要关注业务路径和日志描述即可
+        return executePost(QUERY_BIND_PATH, dto, "查询用户绑定信息");
+    }
+
+    @Override
+    public UnifiedUserClientVO bind(UnifiedUserCenterDTO dto) {
+        validateDto(dto);
+        return executePost(BIND_PATH, dto, "添加用户绑定信息");
+    }
+
+    @Override
+    public UnifiedUserClientVO unbind(UnifiedUserCenterDTO dto) {
+        validateDto(dto);
+        return executePost(UNBIND_PATH, dto, "解除用户绑定信息");
+    }
+
+    /**
+     * 通用 HTTP POST 请求执行模板
+     */
+    private UnifiedUserClientVO executePost(String path, UnifiedUserCenterDTO dto, String logDesc) {
+        try {
+            // 1. 构建 URL
+            String url = baseUrl + path;
+
+            // 2. 转换参数
+            dto.setClientId(clientId);
+            String jsonParam = JSON.toJSONString(dto);
+            log.info("调用远程接口: {}, 参数: {}", url, jsonParam);
+
+            // 3. 发送请求
+            String result = HttpUtil.post(url, jsonParam);
+
+            // 4. 校验结果
+            if (StrUtil.isEmpty(result)) {
+                throw new RuntimeException(logDesc + "失败:接口返回空结果");
+            }
+
+            // 5. 解析结果
+            UnifiedUserClientVO response = JSON.parseObject(result, UnifiedUserClientVO.class);
+            if (response == null) {
+                throw new RuntimeException(logDesc + "失败:响应对象解析为空");
+            }
+
+            return response;
+
+        } catch (Exception e) {
+            log.error("{}发生异常", logDesc, e);
+            throw new ServiceException(logDesc + "异常" + e);
+        }
+    }
+
+    /**
+     * 参数校验提取
+     */
+    private void validateDto(UnifiedUserCenterDTO dto) {
+        if (ObjUtil.isNull(dto)) {
+            throw new IllegalArgumentException("请求参数不能为空");
+        }
+    }
+}