package com.taoke.autopay.service.impl.credit;
|
|
|
import com.taoke.autopay.dao.credit.UserCreditBalanceMapper;
|
import com.taoke.autopay.entity.credit.UserCreditBalance;
|
import com.taoke.autopay.service.credit.UserCreditBalanceService;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
@Service
|
public class UserCreditBalanceServiceImpl implements UserCreditBalanceService {
|
|
@Resource
|
private UserCreditBalanceMapper userCreditBalanceMapper;
|
|
@Override
|
public void initializeCreditBalance(Long userId) {
|
if (getCreditBalanceByUserId(userId) != null) {
|
return;
|
}
|
UserCreditBalance userCreditBalance = new UserCreditBalance();
|
userCreditBalance.setId(userId);
|
userCreditBalance.setCreditBalance(0);
|
userCreditBalance.setCreateTime(new Date());
|
userCreditBalance.setUpdateTime(new Date());
|
userCreditBalanceMapper.insertSelective(userCreditBalance);
|
}
|
|
@Override
|
public UserCreditBalance getCreditBalanceByUserId(Long userId) {
|
return userCreditBalanceMapper.selectByPrimaryKey(userId);
|
}
|
|
@Override
|
public Map<Long, UserCreditBalance> getCreditBalancesByUserIds(List<Long> userIds) {
|
List<UserCreditBalance> userCreditBalances = userCreditBalanceMapper.listByIds(userIds);
|
Map<Long, UserCreditBalance> balanceMap = new HashMap<>();
|
for (UserCreditBalance balance : userCreditBalances) {
|
balanceMap.put(balance.getId(), balance);
|
}
|
return balanceMap;
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void increaseCreditBalance(Long userId, int amount) {
|
UserCreditBalance userCreditBalance = userCreditBalanceMapper.selectByPrimaryKeyForUpdate(userId);
|
if (userCreditBalance == null) {
|
initializeCreditBalance(userId);
|
userCreditBalance = userCreditBalanceMapper.selectByPrimaryKeyForUpdate(userId);
|
}
|
if (userCreditBalance != null) {
|
userCreditBalanceMapper.updateByPrimaryKeySelective(UserCreditBalance.builder()
|
.id(userCreditBalance.getId())
|
.creditBalance(userCreditBalance.getCreditBalance() + amount)
|
.updateTime(new Date())
|
.build());
|
}
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void decreaseCreditBalance(Long userId, int amount) {
|
UserCreditBalance userCreditBalance = userCreditBalanceMapper.selectByPrimaryKeyForUpdate(userId);
|
if (userCreditBalance == null) {
|
initializeCreditBalance(userId);
|
userCreditBalance = userCreditBalanceMapper.selectByPrimaryKeyForUpdate(userId);
|
}
|
|
if (userCreditBalance != null) {
|
userCreditBalanceMapper.updateByPrimaryKeySelective(UserCreditBalance.builder()
|
.id(userCreditBalance.getId())
|
.creditBalance(userCreditBalance.getCreditBalance() - amount)
|
.updateTime(new Date())
|
.build());
|
}
|
}
|
}
|