Browse Source

feat: 实现服务商入驻/审核/查询API(入驻申请+审核列表+审核操作)

User 3 months ago
parent
commit
6ea571fdd4

+ 46 - 0
zxyj-backend/src/main/java/com/zxyj/controller/admin/AdminController.java

@@ -801,4 +801,50 @@ public class AdminController {
         }
         return false;
     }
+
+    // ========== 溪福俱乐部 - 服务商审核接口 ==========
+
+    @PostMapping("/vendor/list")
+    public Result vendorList(@RequestBody Map<String, Object> params) {
+        Integer page = params.get("page") != null ? Integer.valueOf(params.get("page").toString()) : 1;
+        Integer size = params.get("size") != null ? Integer.valueOf(params.get("size").toString()) : 20;
+        String status = (String) params.get("status");
+        com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<User> wrapper = new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<>();
+        wrapper.isNotNull("vendor_type");
+        if (status != null && !status.isEmpty()) {
+            wrapper.eq("vendor_status", status);
+        }
+        wrapper.orderByDesc("updated_at");
+        com.baomidou.mybatisplus.extension.plugins.pagination.Page<User> pageObj = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page, size);
+        com.baomidou.mybatisplus.core.metadata.IPage<User> result = userMapper.selectPage(pageObj, wrapper);
+        Map<String, Object> data = new HashMap<>();
+        data.put("list", result.getRecords());
+        data.put("total", result.getTotal());
+        data.put("page", page);
+        data.put("size", size);
+        return Result.success(data);
+    }
+
+    @PostMapping("/vendor/review")
+    public Result vendorReview(@RequestBody Map<String, Object> params) {
+        Long userId = Long.valueOf(params.get("userId").toString());
+        String action = (String) params.get("action");
+        String reason = (String) params.getOrDefault("reason", "");
+        User user = userMapper.selectById(userId);
+        if (user == null) {
+            return Result.error("用户不存在");
+        }
+        if ("approve".equals(action)) {
+            user.setVendorStatus("approved");
+            user.setVendorRejectReason(null);
+        } else if ("reject".equals(action)) {
+            user.setVendorStatus("rejected");
+            user.setVendorRejectReason(reason);
+        } else {
+            return Result.error("无效的审核操作");
+        }
+        user.setUpdatedAt(new Date());
+        userMapper.updateById(user);
+        return Result.success("审核完成");
+    }
 }

+ 38 - 0
zxyj-backend/src/main/java/com/zxyj/controller/vendor/VendorController.java

@@ -0,0 +1,38 @@
+package com.zxyj.controller.vendor;
+
+import com.zxyj.common.Result;
+import com.zxyj.service.VendorService;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/vendor")
+public class VendorController {
+
+    @Resource
+    private VendorService vendorService;
+
+    @PostMapping("/apply")
+    public Result apply(@RequestBody Map<String, Object> params,
+                        @RequestHeader("X-User-Id") Long userId) {
+        String vendorType = (String) params.get("vendorType");
+        String vendorInfo = (String) params.getOrDefault("vendorInfo", "");
+        return vendorService.apply(userId, vendorType, vendorInfo);
+    }
+
+    @PostMapping("/status")
+    public Result getStatus(@RequestHeader("X-User-Id") Long userId) {
+        return vendorService.getStatus(userId);
+    }
+
+    @PostMapping("/info")
+    public Result getVendorInfo(@RequestHeader("X-User-Id") Long userId) {
+        return vendorService.getVendorInfo(userId);
+    }
+}

+ 65 - 0
zxyj-backend/src/main/java/com/zxyj/service/VendorService.java

@@ -0,0 +1,65 @@
+package com.zxyj.service;
+
+import com.zxyj.common.Result;
+import com.zxyj.entity.User;
+import com.zxyj.mapper.UserMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+public class VendorService {
+
+    @Resource
+    private UserMapper userMapper;
+
+    public Result apply(Long userId, String vendorType, String vendorInfo) {
+        User user = userMapper.selectById(userId);
+        if (user == null) {
+            return Result.error("用户不存在");
+        }
+        if (user.getVendorStatus() != null && !"rejected".equals(user.getVendorStatus())) {
+            return Result.error("已有入驻申请,请勿重复提交");
+        }
+        user.setVendorType(vendorType);
+        user.setVendorStatus("pending");
+        user.setVendorRejectReason(null);
+        if (vendorInfo != null) {
+            user.setVendorInfo(vendorInfo);
+        }
+        user.setUpdatedAt(new Date());
+        userMapper.updateById(user);
+        return Result.success("入驻申请已提交,请等待审核");
+    }
+
+    public Result getStatus(Long userId) {
+        User user = userMapper.selectById(userId);
+        if (user == null) {
+            return Result.error("用户不存在");
+        }
+        Map<String, Object> data = new HashMap<>();
+        data.put("vendorType", user.getVendorType());
+        data.put("vendorStatus", user.getVendorStatus());
+        data.put("vendorRejectReason", user.getVendorRejectReason());
+        return Result.success(data);
+    }
+
+    public Result getVendorInfo(Long userId) {
+        User user = userMapper.selectById(userId);
+        if (user == null) {
+            return Result.error("用户不存在");
+        }
+        if (!"approved".equals(user.getVendorStatus())) {
+            return Result.error("服务商资格未通过审核");
+        }
+        Map<String, Object> data = new HashMap<>();
+        data.put("vendorType", user.getVendorType());
+        data.put("vendorInfo", user.getVendorInfo());
+        data.put("realName", user.getRealName());
+        data.put("phone", user.getPhone());
+        return Result.success(data);
+    }
+}