Przeglądaj źródła

用户服务-修改更新用户PV值接口

sunxbiao 8 miesięcy temu
rodzic
commit
49b5a7fdbb

+ 1 - 1
userCenter_service/src/main/java/com/bjtdba/userCenter/controller/UserController.java

@@ -632,7 +632,7 @@ public class UserController {
632 632
         return ApiResponse.success(userService.modifyUserContribute(request));
633 633
     }
634 634
 
635
-    @PostMapping("/modifyPV")
635
+    @PostMapping("/modifyUserPV")
636 636
     public ApiResponse<ModifyPVResponse> modifyUserPV(
637 637
             @Validated @RequestBody ModifyPVRequest request) {
638 638
         return ApiResponse.success(userService.modifyUserPV(request));

+ 3 - 0
userCenter_service/src/main/java/com/bjtdba/userCenter/dao/UserDao.java

@@ -65,6 +65,9 @@ public interface UserDao {
65 65
     int updateUserContribute(@Param("uid") Integer uid,
66 66
                         @Param("newContribute") BigDecimal newContribute);
67 67
 
68
+    int updateUserPv(@Param("uid") Integer uid,
69
+                             @Param("newPv") BigDecimal newPv);
70
+
68 71
     int updateUserByUid(UserEntity userEntity);
69 72
 
70 73
     int insertUserByUserEntity(@Param("userEntity") UserEntity userEntity);

+ 4 - 0
userCenter_service/src/main/java/com/bjtdba/userCenter/exception/BusinessException.java

@@ -54,6 +54,10 @@ public class BusinessException extends RuntimeException {
54 54
         return new BusinessException(500, "贡献值更新失败,请重试");
55 55
     }
56 56
 
57
+    public static BusinessException createPvFailed() {
58
+        return new BusinessException(500, "Pv值记录创建失败,请重试");
59
+    }
60
+
57 61
     public static BusinessException createUserFailed() {
58 62
         return new BusinessException(500, "创建用户信息失败");
59 63
     }

+ 38 - 13
userCenter_service/src/main/java/com/bjtdba/userCenter/service/impl/UserServiceImpl.java

@@ -372,10 +372,34 @@ public class UserServiceImpl  implements UserService {
372 372
 
373 373
     @Override
374 374
     public ModifyPVResponse modifyUserPV(ModifyPVRequest request) {
375
+        // 1. 获取用户并加锁
376
+        UserEntity userEntity = userDao.getUserInfoByUidForUpdate(request.getUid());
377
+        if (userEntity == null) {
378
+            throw BusinessException.userNotFound();
379
+        }
380
+
381
+        // 2. PV值操作处理
382
+        BigDecimal newPv;
383
+        newPv = userEntity.getPv().add(request.getPv());
384
+
385
+        // 3. 更新用户贡献值(带乐观锁)
386
+        int updateCount = userDao.updateUserPv(
387
+                request.getUid(),
388
+                newPv
389
+        );
390
+        if (updateCount == 0) {
391
+            throw BusinessException.updateContributeFailed();
392
+        }
393
+
394
+        // 4. 创建贡献值记录
375 395
         UserPvLogEntity record = buildModifyPVRecord(request);
376 396
         record.setAddtime(LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
377
-        userPvLogDao.insertByEntity(record);
397
+        int createResult = userPvLogDao.insertByEntity(record);
398
+        if (createResult == 0) {
399
+            throw BusinessException.createPvFailed();
400
+        }
378 401
 
402
+        // 5. 构建响应
379 403
         return ModifyPVResponse.builder()
380 404
                 .id(record.getId())
381 405
                 .uid(record.getUid())
@@ -387,17 +411,18 @@ public class UserServiceImpl  implements UserService {
387 411
                 .settlementTime(record.getSettlementTime())
388 412
                 .build();
389 413
     }
390
-        private UserPvLogEntity buildModifyPVRecord(ModifyPVRequest request) {
391
-            UserPvLogEntity record = new UserPvLogEntity();
392
-            record.setUid(request.getUid());
393
-            record.setPv(request.getPv());
394
-            record.setStatus(request.getStatus());
395
-            record.setMark(request.getMark());
396
-            record.setOrderId(request.getOrderId());
397
-            record.setOrderType(request.getOrderType());
398
-            if (request.getStatus() == 1) {
399
-                record.setSettlementTime(Timestamp.valueOf(LocalDateTime.now()));
400
-            }
401
-            return record;
414
+
415
+    private UserPvLogEntity buildModifyPVRecord(ModifyPVRequest request) {
416
+        UserPvLogEntity record = new UserPvLogEntity();
417
+        record.setUid(request.getUid());
418
+        record.setPv(request.getPv());
419
+        record.setStatus(request.getStatus());
420
+        record.setMark(request.getMark());
421
+        record.setOrderId(request.getOrderId());
422
+        record.setOrderType(request.getOrderType());
423
+        if (request.getStatus() == 1) {
424
+            record.setSettlementTime(Timestamp.valueOf(LocalDateTime.now()));
425
+        }
426
+        return record;
402 427
     }
403 428
 }

+ 6 - 0
userCenter_service/src/main/resources/mapper/UserExternalMapper.xml

@@ -79,6 +79,12 @@
79 79
         WHERE uid = #{uid}
80 80
     </update>
81 81
 
82
+    <update id="updateUserPv">
83
+        UPDATE rrx_user SET
84
+            pv = #{newPv}
85
+        WHERE uid = #{uid}
86
+    </update>
87
+
82 88
     <insert id="insertUserByUserEntity" useGeneratedKeys="true" keyProperty="userEntity.uid" keyColumn="uid">
83 89
         INSERT INTO rrx_user
84 90
         <trim prefix="(" suffix=")" suffixOverrides=",">