package com.yeshi.fanli.service.impl.redpack;
|
|
import java.math.BigDecimal;
|
import java.util.Date;
|
import java.util.List;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.yeshi.fanli.dao.mybatis.redpack.RedPackBalanceMapper;
|
import com.yeshi.fanli.entity.redpack.RedPackBalance;
|
import com.yeshi.fanli.entity.redpack.RedPackDetail;
|
import com.yeshi.fanli.exception.redpack.RedPackBalanceException;
|
import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService;
|
import com.yeshi.fanli.service.inter.redpack.RedPackDetailService;
|
import com.yeshi.fanli.vo.redpack.RedPackBalanceVO;
|
|
@Service
|
public class RedPackBalanceServiceImpl implements RedPackBalanceService {
|
|
@Resource
|
private RedPackBalanceMapper redPackBalanceMapper;
|
|
@Resource
|
private RedPackDetailService redPackDetailService;
|
|
@Override
|
public RedPackBalance selectByPrimaryKey(Long uid) {
|
return redPackBalanceMapper.selectByPrimaryKey(uid);
|
}
|
|
@Override
|
public BigDecimal getBalance(Long uid){
|
if (uid == null || uid == 0)
|
return new BigDecimal(0);
|
|
RedPackBalance redPackBalance = redPackBalanceMapper.selectByPrimaryKey(uid);
|
if (redPackBalance != null && redPackBalance.getMoney() != null)
|
return redPackBalance.getMoney();
|
return new BigDecimal(0);
|
}
|
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void addRedPack(Long uid, BigDecimal money, RedPackDetail detail) throws RedPackBalanceException {
|
if (uid == null || uid == 0 || money == null || detail == null)
|
throw new RedPackBalanceException(1, "参数传递不完整");
|
// 加入明细
|
redPackDetailService.insertSelective(detail);
|
// 添加红包
|
RedPackBalance redPackBalance = redPackBalanceMapper.selectForUpdate(uid);
|
if (redPackBalance == null) {
|
redPackBalance = new RedPackBalance();
|
redPackBalance.setId(uid);
|
redPackBalance.setMoney(money);
|
redPackBalance.setCreateTime(new Date());
|
redPackBalance.setUpdateTime(new Date());
|
redPackBalanceMapper.insertSelective(redPackBalance);
|
} else {
|
redPackBalanceMapper.addRedPack(uid, money);
|
}
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void subRedPack(Long uid, BigDecimal money, RedPackDetail detail) throws RedPackBalanceException {
|
if (uid == null || uid == 0 || money == null || detail == null)
|
throw new RedPackBalanceException(1, "参数传递不完整");
|
// 加入明细
|
redPackDetailService.insertSelective(detail);
|
|
RedPackBalance balance = redPackBalanceMapper.selectForUpdate(uid);
|
if (balance.getMoney() == null)
|
throw new RedPackBalanceException(2, "红包余额不足");
|
|
if (balance.getMoney().compareTo(money) < 0)
|
throw new RedPackBalanceException(2, "红包余额不足");
|
|
// 减少红包
|
redPackBalanceMapper.subRedPack(uid, money);
|
}
|
|
|
@Override
|
public RedPackBalance selectForUpdate(Long uid) {
|
return redPackBalanceMapper.selectForUpdate(uid);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void resetRedPack(Long uid, RedPackDetail detail) throws RedPackBalanceException {
|
if (uid == null || uid == 0 || detail == null)
|
throw new RedPackBalanceException(1, "参数传递不完整");
|
// 加入明细
|
redPackDetailService.insertSelective(detail);
|
// 重置
|
redPackBalanceMapper.resetRedPack(uid);
|
}
|
|
|
@Override
|
public List<RedPackBalanceVO> query(Integer start, Integer count, String key, Integer state,Integer order){
|
return redPackBalanceMapper.query(start, count, key, state,order);
|
}
|
|
@Override
|
public long count(String key, Integer state){
|
return redPackBalanceMapper.count(key, state);
|
}
|
|
}
|