yujian
2020-03-24 88c7df1d5089d8e39f356a68eaccc18f308e190c
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderTeamRewardServiceImpl.java
New file
@@ -0,0 +1,176 @@
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());
               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);
               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);
   }
}