Administrator
2020-02-23 388be9f734f5b80c348bcc956726c206002e832a
fanli/src/main/java/com/yeshi/fanli/service/impl/money/UserMoneyDebtServiceImpl.java
@@ -2,14 +2,17 @@
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.AlipayAccountValidNormalHistoryMapper;
import com.yeshi.fanli.dao.mybatis.money.UserMoneyDebtMapper;
import com.yeshi.fanli.dao.mybatis.money.UserMoneyDebtReturnHistoryMapper;
import com.yeshi.fanli.entity.bus.user.AlipayAccountValidNormalHistory;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.money.UserMoneyDebt;
import com.yeshi.fanli.entity.money.UserMoneyDebt.UserMoneyDebtTypeEnum;
@@ -18,13 +21,15 @@
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanDrawBack;
import com.yeshi.fanli.exception.money.UserMoneyDebtException;
import com.yeshi.fanli.exception.money.UserMoneyDetailException;
import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.money.UserMoneyDebtService;
import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanDrawBackService;
import com.yeshi.fanli.service.inter.money.UserMoneyService;
import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
import com.yeshi.fanli.service.inter.money.tb.TaoBaoWeiQuanDrawBackService;
import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserMoneyService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
@Service
@@ -54,6 +59,9 @@
   @Resource
   private UserInfoService userInfoService;
   @Resource
   private AlipayAccountValidNormalHistoryMapper alipayAccountValidNormalHistoryMapper;
   @Override
   public void addUserMoneyDebt(UserMoneyDebt debt) throws UserMoneyDebtException {
      if (debt == null)
@@ -74,7 +82,7 @@
         UserMoneyDebt old = userMoneyDebtMapper.selectByUidAndTypeAndSourceId(debt.getUid(), debt.getType(),
               debt.getSourceId());
         if (old != null) {
            throw new UserMoneyDebtException(3, "对应维权已经存在");
            throw new UserMoneyDebtException(3, "对应售后已经存在");
         }
         userMoneyDebtMapper.insertSelective(debt);
      }
@@ -86,7 +94,7 @@
      return userMoneyDebtMapper.selectByTypeAndSourceId(type, sourceId);
   }
   @Transactional
   @Transactional(rollbackFor=Exception.class)
   @Override
   public void repayDebt(UserMoneyDebt debt, BigDecimal money) throws UserMoneyDebtException {
      if (debt == null || debt.getId() == null)
@@ -143,8 +151,8 @@
            }
            // 新版通知
            userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, weiQuanDrawBack.getOrderId(), money,
                  userInfoService.getMyHB(uid));
            userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, weiQuanDrawBack.getOrderId(),
                  Constant.SOURCE_TYPE_TAOBAO, money, userInfoService.getBalance(uid));
            break;
         case HongBaoV2.TYPE_SHARE_GOODS:
@@ -156,7 +164,7 @@
               userMoneyService.subUserMoney(uid, money, userMoneyDetail);
               userMoneyMsgNotificationService.shareOrderWeiQuan(debt.getUid(), weiQuanDrawBack.getOrderId(),
                     money, userInfoService.getMyHB(uid));
                     Constant.SOURCE_TYPE_TAOBAO, money, userInfoService.getBalance(uid));
            } catch (UserMoneyDetailException e) {
               throw new UserMoneyDebtException(12, "插入资金详情出错");
@@ -177,13 +185,57 @@
            }
            // 新版通知
            userMoneyMsgNotificationService.inviteOrderWeiQuan(uid, weiQuanDrawBack.getOrderId(), money,
                  userInfoService.getMyHB(uid));
            userMoneyMsgNotificationService.inviteOrderWeiQuan(uid, weiQuanDrawBack.getOrderId(),
                  Constant.SOURCE_TYPE_TAOBAO, money, userInfoService.getBalance(uid));
            break;
         }
      } else if (debt.getType() == UserMoneyDebtTypeEnum.extractVerify) {// 提现验证
         // 新版资金记录
         AlipayAccountValidNormalHistory aliPayAccountHistory = alipayAccountValidNormalHistoryMapper
               .selectByPrimaryKey(debt.getSourceId());
         if (aliPayAccountHistory == null)
            return;
         try {
            UserMoneyDetail userMoneyDetail = UserMoneyDetailFactory.createExtractAccountValid(aliPayAccountHistory,
                  money);
            userMoneyService.subUserMoney(aliPayAccountHistory.getUid(), money, userMoneyDetail);
         } catch (UserMoneyDetailException e) {
            throw new UserMoneyDebtException(12, "插入资金详情出错");
         }
         userMoneyMsgNotificationService.alipayAccountValid(aliPayAccountHistory);
      }
   }
   @Transactional(rollbackFor=Exception.class)
   @Override
   public void repayDebt(Long uid) {
      // 查询是否有欠债
      List<UserMoneyDebt> list = userMoneyDebtMapper.listByUidWithHasLeftMoney(uid, 0, 50);
      if (list != null && list.size() > 0) {// 有欠债
         for (UserMoneyDebt debt : list) {
            BigDecimal leftMoney = userInfoService.getBalance(uid);
            if (leftMoney.compareTo(debt.getLeftMoney()) >= 0) {// 有足够的资金偿还债务
               try {
                  repayDebt(debt, debt.getLeftMoney());
               } catch (UserMoneyDebtException e) {
                  try {
                     LogHelper.errorDetailInfo(e, "uid:" + uid + " debtId:" + debt.getId(), null);
                  } catch (Exception e1) {
                     e1.printStackTrace();
                  }
               }
            }
         }
      }
   }
   @Override
   public boolean isHaveDebtToRepay(Long uid) {
      List<UserMoneyDebt> debtList = userMoneyDebtMapper.listByUidWithHasLeftMoney(uid, 0, 1);
      if (debtList != null && debtList.size() > 0)
         return true;
      return false;
   }
}