Pārlūkot izejas kodu

用户归属站点优化:自主注册用户首次消费时确认归属站点

skyline 1 nedēļu atpakaļ
vecāks
revīzija
ac074b5435

+ 7 - 6
car-wash-service/src/main/java/com/kym/service/impl/UserServiceImpl.java

@@ -81,7 +81,9 @@ public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implem
         // 初始化缓存
         QueryWrapper<User> wrapper = new QueryWrapper<User>().select("id", "station_id");
         List<User> users = baseMapper.selectList(wrapper);
-        var map = users.stream().collect(Collectors.toMap(User::getId, User::getStationId));
+        var map = users.stream()
+                .filter(u -> CommUtil.isNotEmptyAndNull(u.getStationId()))
+                .collect(Collectors.toMap(User::getId, User::getStationId));
         KymCache.INSTANCE.putUserId2StationId(map);
     }
 
@@ -129,16 +131,15 @@ public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implem
                 newUser.setUsername(mobilePhone);
                 newUser.setAvatar(params.getAvatar());
                 newUser.setNickname(params.getNickname());
-                // 用户归属站点
+                // 用户归属站点:扫码设备注册的直接确定,自主注册的在首次消费时自动归属
                 if (CommUtil.isNotEmptyAndNull(params.getShortId())) {
                     newUser.setStationId(KymCache.INSTANCE.gesStationIdByShortId(params.getShortId()));
-                } else {
-                    // todo 用户归属 扫设备二维码以外注册的用户,统一归属平台自己的商户,初始化系统时创建对应的商户
-                    newUser.setStationId("000");
                 }
                 baseMapper.insert(newUser);
                 long userId = newUser.getId();
-                KymCache.INSTANCE.putUserId2StationId(Map.of(userId, newUser.getStationId()));
+                if (CommUtil.isNotEmptyAndNull(newUser.getStationId())) {
+                    KymCache.INSTANCE.putUserId2StationId(Map.of(userId, newUser.getStationId()));
+                }
                 // 创建用户账户
                 var account = new Account();
                 account.setUserId(userId);

+ 14 - 1
car-wash-service/src/main/java/com/kym/service/impl/WashOrderServiceImpl.java

@@ -100,6 +100,19 @@ public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, Was
                 Account.NO_DISCOUNT,
                 // 本次开机最大消费金额,减去0.5元,防止延时导致超消费
                 account.getBalance() - 50);
+        // 首次消费:无归属站点的用户自动归属到当前设备所在站点
+        var userStationId = StpUtil.getSession().getString("stationId");
+        if (CommUtil.isEmptyOrNull(userStationId)) {
+            long userId = StpUtil.getLoginIdAsLong();
+            userService.lambdaUpdate()
+                    .set(User::getStationId, params.getStationId())
+                    .eq(User::getId, userId)
+                    .update();
+            StpUtil.getSession().set("stationId", params.getStationId());
+            KymCache.INSTANCE.putUserId2StationId(Map.of(userId, params.getStationId()));
+            userStationId = params.getStationId();
+        }
+
         var washOrder = new WashOrder()
                 .setUserId(StpUtil.getLoginIdAsLong())
                 .setStationId(params.getStationId())
@@ -114,7 +127,7 @@ public class WashOrderServiceImpl extends MyBaseServiceImpl<WashOrderMapper, Was
                 .setStartTime(LocalDateTime.now())
                 .setOrderStatus(WashOrder.ORDER_STATUS_开机)
                 .setPayStatus(WashOrder.PAY_STATUS_未支付)
-                .setIsCross(!StpUtil.getSession().getString("stationId").equals(params.getStationId()));
+                .setIsCross(!params.getStationId().equals(userStationId));
         save(washOrder);
         return orderId;
     }