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) {
|
UserCreditBalance userCreditBalance = new UserCreditBalance();
|
userCreditBalance.setId(userId);
|
userCreditBalance.setCreditBalance(BigDecimal.ZERO);
|
userCreditBalance.setCreateTime(new Date());
|
userCreditBalance.setUpdateTime(new Date());
|
userCreditBalanceMapper.insert(userCreditBalance);
|
}
|
|
@Override
|
public UserCreditBalance getCreditBalanceByUserId(Long userId) {
|
return userCreditBalanceMapper.selectByPrimaryKey(userId);
|
}
|
|
@Override
|
public Map<Long, UserCreditBalance> getCreditBalancesByUserIds(List<Long> userIds) {
|
List<UserCreditBalance> userCreditBalances = userCreditBalanceMapper.selectByIds(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) {
|
userCreditBalance.setCreditBalance(userCreditBalance.getCreditBalance().add(amount));
|
userCreditBalance.setUpdateTime(new Date());
|
userCreditBalanceMapper.updateByPrimaryKeySelective(userCreditBalance);
|
}
|
}
|
|
@Override
|
public void decreaseCreditBalance(Long userId, int amount) {
|
UserCreditBalance userCreditBalance = userCreditBalanceMapper.selectByPrimaryKeyForUpdate(userId);
|
if (userCreditBalance != null) {
|
userCreditBalance.setCreditBalance(userCreditBalance.getCreditBalance().subtract(amount));
|
userCreditBalance.setUpdateTime(new Date());
|
userCreditBalanceMapper.updateByPrimaryKeySelective(userCreditBalance);
|
}
|
}
|
}
|