From 4fb18fc40e50a5a10d8868c055cd6eb04281ccc8 Mon Sep 17 00:00:00 2001 From: Agent Date: Tue, 24 Mar 2026 03:17:27 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BE=AE=E4=BF=A1=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=EF=BC=8C?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E5=88=97=E8=A1=A8=E6=8C=89=E6=9C=80=E5=90=8E?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=8E=92=E5=BA=8F=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?Lombok=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 16 ++++++ .../building/controller/AuthController.java | 10 +++- .../com/example/building/entity/Customer.java | 15 +++++ .../example/building/service/AuthService.java | 5 +- .../service/impl/AuthServiceImpl.java | 57 ++++++++++++++----- .../service/impl/CustomerServiceImpl.java | 1 + 6 files changed, 88 insertions(+), 16 deletions(-) diff --git a/pom.xml b/pom.xml index 042f490..23a1756 100644 --- a/pom.xml +++ b/pom.xml @@ -105,6 +105,22 @@ + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 17 + 17 + + + org.projectlombok + lombok + 1.18.30 + + + + org.springframework.boot spring-boot-maven-plugin diff --git a/src/main/java/com/example/building/controller/AuthController.java b/src/main/java/com/example/building/controller/AuthController.java index 0c1a9b2..4cce970 100644 --- a/src/main/java/com/example/building/controller/AuthController.java +++ b/src/main/java/com/example/building/controller/AuthController.java @@ -38,10 +38,16 @@ public class AuthController { /** * 微信登录 + * @param code 微信授权码 + * @param nickname 微信昵称(可选) + * @param avatar 微信头像URL(可选) */ @PostMapping("/wechat") - public Result> wechatLogin(@RequestParam String code) { - Map result = authService.wechatLogin(code); + public Result> wechatLogin( + @RequestParam String code, + @RequestParam(required = false) String nickname, + @RequestParam(required = false) String avatar) { + Map result = authService.wechatLogin(code, nickname, avatar); return Result.success(result); } diff --git a/src/main/java/com/example/building/entity/Customer.java b/src/main/java/com/example/building/entity/Customer.java index 3f4de89..07a1f09 100644 --- a/src/main/java/com/example/building/entity/Customer.java +++ b/src/main/java/com/example/building/entity/Customer.java @@ -31,6 +31,16 @@ public class Customer { */ private String wechatOpenid; + /** + * 微信昵称 + */ + private String wechatNickname; + + /** + * 微信头像 + */ + private String wechatAvatar; + /** * 地址 */ @@ -51,6 +61,11 @@ public class Customer { */ private String createdBy; + /** + * 最后登录时间(用于订单客户排序) + */ + private LocalDateTime lastLoginAt; + @TableField(fill = FieldFill.INSERT) private LocalDateTime createdAt; diff --git a/src/main/java/com/example/building/service/AuthService.java b/src/main/java/com/example/building/service/AuthService.java index f74b6ef..5d8c4a8 100644 --- a/src/main/java/com/example/building/service/AuthService.java +++ b/src/main/java/com/example/building/service/AuthService.java @@ -19,8 +19,11 @@ public interface AuthService { /** * 微信扫码登录 + * @param code 微信授权码 + * @param nickname 微信昵称 + * @param avatar 微信头像 */ - Map wechatLogin(String code); + Map wechatLogin(String code, String nickname, String avatar); /** * 支付宝扫码登录 diff --git a/src/main/java/com/example/building/service/impl/AuthServiceImpl.java b/src/main/java/com/example/building/service/impl/AuthServiceImpl.java index b01aa7a..162d7f4 100644 --- a/src/main/java/com/example/building/service/impl/AuthServiceImpl.java +++ b/src/main/java/com/example/building/service/impl/AuthServiceImpl.java @@ -1,8 +1,11 @@ package com.example.building.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.example.building.common.JwtUtil; +import com.example.building.entity.Customer; import com.example.building.entity.User; +import com.example.building.mapper.CustomerMapper; import com.example.building.mapper.UserMapper; import com.example.building.service.AuthService; import org.springframework.beans.factory.annotation.Autowired; @@ -10,6 +13,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -25,6 +29,9 @@ public class AuthServiceImpl implements AuthService { @Autowired private UserMapper userMapper; + @Autowired + private CustomerMapper customerMapper; + @Autowired private JwtUtil jwtUtil; @@ -81,25 +88,49 @@ public class AuthServiceImpl implements AuthService { * 实际生产中需要调用微信API获取openid */ @Override - public Map wechatLogin(String code) { + public Map wechatLogin(String code, String nickname, String avatar) { // TODO: 调用微信API获取openid // String openid = wechatService.getOpenId(code); String openid = "wechat_" + code; - // 查询用户,不存在则创建 - User user = userMapper.selectOne(new LambdaQueryWrapper() - .eq(User::getWechatOpenid, openid)); - if (user == null) { - user = new User(); - user.setUserId(UUID.randomUUID().toString()); - user.setWechatOpenid(openid); - user.setUsername("微信用户"); - user.setRole("sales"); - user.setStatus(1); - userMapper.insert(user); + // 查询或创建顾客 + Customer customer = customerMapper.selectOne(new LambdaQueryWrapper() + .eq(Customer::getWechatOpenid, openid)); + + if (customer == null) { + // 新顾客 + customer = new Customer(); + customer.setCustomerId(UUID.randomUUID().toString()); + customer.setWechatOpenid(openid); + customer.setName(nickname != null ? nickname : "微信用户"); + customer.setWechatNickname(nickname); + customer.setWechatAvatar(avatar); + customer.setTotalAmount(new java.math.BigDecimal("0")); + customer.setLastLoginAt(LocalDateTime.now()); + customerMapper.insert(customer); + } else { + // 更新已有顾客信息 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(Customer::getCustomerId, customer.getCustomerId()); + if (nickname != null) { + updateWrapper.set(Customer::getWechatNickname, nickname); + } + if (avatar != null) { + updateWrapper.set(Customer::getWechatAvatar, avatar); + } + updateWrapper.set(Customer::getLastLoginAt, LocalDateTime.now()); + customerMapper.update(null, updateWrapper); + customer.setLastLoginAt(LocalDateTime.now()); } - return generateTokens(user); + // 返回顾客信息 + Map result = new HashMap<>(); + result.put("token", "customer_token_" + customer.getCustomerId()); + result.put("customerId", customer.getCustomerId()); + result.put("name", customer.getName()); + result.put("role", "customer"); + + return result; } /** diff --git a/src/main/java/com/example/building/service/impl/CustomerServiceImpl.java b/src/main/java/com/example/building/service/impl/CustomerServiceImpl.java index bbb38af..e750e14 100644 --- a/src/main/java/com/example/building/service/impl/CustomerServiceImpl.java +++ b/src/main/java/com/example/building/service/impl/CustomerServiceImpl.java @@ -33,6 +33,7 @@ public class CustomerServiceImpl implements CustomerService { .or() .like(Customer::getPhone, keyword); } + wrapper.orderByDesc(Customer::getLastLoginAt); wrapper.orderByDesc(Customer::getCreatedAt); return customerMapper.selectPage(pageParam, wrapper); }