|
|
@@ -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
|
}
|