package com.yeshi.fanli.service.impl.order;
|
|
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.order.OrderTeamRewardMapper;
|
import com.yeshi.fanli.entity.order.InviteOrderSubsidy;
|
import com.yeshi.fanli.entity.order.OrderTeamReward;
|
import com.yeshi.fanli.exception.order.OrderTeamRewardException;
|
import com.yeshi.fanli.service.inter.order.OrderTeamRewardService;
|
import com.yeshi.fanli.util.StringUtil;
|
|
@Service
|
public class OrderTeamRewardServiceImpl implements OrderTeamRewardService {
|
|
@Resource
|
private OrderTeamRewardMapper orderTeamRewardMapper;
|
|
@Override
|
public OrderTeamReward getByOrderNoAndType(Long uid, String orderNo, Integer type) {
|
return orderTeamRewardMapper.getByOrderNoAndType(uid, orderNo, type);
|
}
|
|
@Override
|
public OrderTeamReward getByOrderNoAndTypeForUpdate(Long uid, String orderNo, Integer type) {
|
return orderTeamRewardMapper.getByOrderNoAndTypeForUpdate(uid, orderNo, type);
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
private void addOrderSubsidy(OrderTeamReward orderSubsidy) throws OrderTeamRewardException {
|
if (orderSubsidy.getMoney() == null || StringUtil.isNullOrEmpty(orderSubsidy.getOrderNo())
|
|| orderSubsidy.getSourceType() == null || orderSubsidy.getUid() == null)
|
throw new OrderTeamRewardException(1, "数据不完整");
|
OrderTeamReward old = getByOrderNoAndType(orderSubsidy.getUid(), orderSubsidy.getOrderNo(),
|
orderSubsidy.getSourceType());
|
if (old != null) {// 修改
|
if (old.getState() == OrderTeamReward.STATE_INVALID || old.getState() == OrderTeamReward.STATE_RECIEVED)
|
return;
|
|
// 修改状态
|
OrderTeamReward update = new OrderTeamReward(old.getId());
|
update.setMoney(orderSubsidy.getMoney());
|
if (old.getState() == OrderTeamReward.STATE_UNKNOWN) {// 状态未确定之前才可以更改原始补贴资金
|
update.setOriginalMoney(orderSubsidy.getOriginalMoney());
|
}
|
update.setState(orderSubsidy.getState());
|
update.setUpdateTime(new Date());
|
orderTeamRewardMapper.updateByPrimaryKeySelective(update);
|
} else {// 添加
|
if (orderSubsidy.getCreateTime() == null)
|
orderSubsidy.setCreateTime(new Date());
|
orderTeamRewardMapper.insertSelective(orderSubsidy);
|
}
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void addOrUpdate(InviteOrderSubsidy subsidy, BigDecimal money, Long uid, int level)
|
throws OrderTeamRewardException {
|
if (subsidy == null || subsidy.getId() == null)
|
throw new OrderTeamRewardException(1, "补贴为空");
|
if (money == null)
|
throw new OrderTeamRewardException(2, "团队奖励资金为空");
|
OrderTeamReward reward = orderTeamRewardMapper.selectBySubsidyIdAndUidForUpdate(subsidy.getId(), uid);
|
if (reward != null) {// 原来已存在
|
if (reward.getState() == OrderTeamReward.STATE_RECIEVED)
|
return;
|
|
if (reward.getState() == OrderTeamReward.STATE_INVALID)
|
return;
|
|
if (subsidy.getState().intValue() != reward.getState() || money.compareTo(reward.getMoney()) != 0) {
|
// 状态或者资金改变,需要改变数据
|
OrderTeamReward updateReward = new OrderTeamReward(reward.getId());
|
updateReward.setState(subsidy.getState());
|
updateReward.setMoney(money);
|
updateReward.setUpdateTime(new Date());
|
orderTeamRewardMapper.updateByPrimaryKeySelective(updateReward);
|
}
|
} else {// 原来不存在
|
reward = new OrderTeamReward();
|
reward.setCreateTime(new Date());
|
reward.setMoney(money);
|
reward.setOrderNo(subsidy.getOrderNo());
|
reward.setOriginalMoney(money);
|
reward.setSourceType(subsidy.getSourceType());
|
reward.setState(subsidy.getState());
|
reward.setSubsidy(subsidy);
|
reward.setUid(uid);
|
reward.setLevel(level);
|
orderTeamRewardMapper.insertSelective(reward);
|
}
|
|
}
|
|
@Override
|
public long countByOrderIdAndSourceType(String orderId, int sourceType) {
|
return orderTeamRewardMapper.countByOrderNoAndType(orderId, sourceType);
|
}
|
|
@Transactional
|
@Override
|
public void invalidByOrderIdAndSourceType(Long subsidyId) {
|
List<OrderTeamReward> list = orderTeamRewardMapper.listBySubsidyId(subsidyId);
|
if (list != null && list.size() > 0)
|
for (OrderTeamReward subsidy : list) {
|
if (subsidy.getState() == OrderTeamReward.STATE_UNKNOWN
|
|| subsidy.getState() == OrderTeamReward.STATE_VALID) {
|
OrderTeamReward update = new OrderTeamReward(subsidy.getId());
|
update.setState(OrderTeamReward.STATE_INVALID);
|
update.setUpdateTime(new Date());
|
update.setInValidTime(new Date());
|
orderTeamRewardMapper.updateByPrimaryKeySelective(update);
|
}
|
}
|
}
|
|
@Transactional
|
@Override
|
public void validByOrderIdAndSourceType(Long subsidyId, Date preGetTime) {
|
List<OrderTeamReward> list = orderTeamRewardMapper.listBySubsidyId(subsidyId);
|
if (list != null && list.size() > 0)
|
for (OrderTeamReward subsidy : list) {
|
if (subsidy.getState() == OrderTeamReward.STATE_UNKNOWN) {
|
OrderTeamReward update = new OrderTeamReward(subsidy.getId());
|
update.setState(OrderTeamReward.STATE_VALID);
|
update.setUpdateTime(new Date());
|
update.setPreGetTime(preGetTime);
|
update.setValidTime(new Date());
|
orderTeamRewardMapper.updateByPrimaryKeySelective(update);
|
}
|
}
|
}
|
|
@Override
|
public void settleById(Long id, BigDecimal money) {
|
OrderTeamReward orderSubsidy = new OrderTeamReward(id);
|
orderSubsidy.setMoney(money);
|
orderSubsidy.setState(OrderTeamReward.STATE_RECIEVED);
|
orderSubsidy.setGetTime(new Date());
|
orderSubsidy.setUpdateTime(new Date());
|
orderTeamRewardMapper.updateByPrimaryKeySelective(orderSubsidy);
|
}
|
|
@Override
|
public List<OrderTeamReward> listBySubsidyId(Long subsidyId) {
|
|
return orderTeamRewardMapper.listBySubsidyId(subsidyId);
|
}
|
|
@Override
|
public List<OrderTeamReward> listCanSettle(Long uid, int page, int pageSize) {
|
|
return orderTeamRewardMapper.listCanSettleByUid(uid, (page - 1) * pageSize, pageSize);
|
}
|
|
@Override
|
public long countCanSettle(Long uid) {
|
return orderTeamRewardMapper.countCanSettle(uid);
|
}
|
|
@Override
|
public List<Long> listCanSettleUid(Date time, int page, int count) {
|
return orderTeamRewardMapper.listCanSettleUid(time, (page - 1) * count, count);
|
}
|
|
@Override
|
public long countCanSettleUid(Date time) {
|
return orderTeamRewardMapper.countCanSettleUid(time);
|
}
|
}
|