yujian
2019-04-22 b6c37e4bc38db88a360d0f2c6099183f9bb75bdc
fanli/src/main/java/com/yeshi/fanli/service/impl/user/ExtractServiceImpl.java
@@ -1,6 +1,7 @@
package com.yeshi.fanli.service.impl.user;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -26,16 +27,18 @@
import com.yeshi.fanli.dao.mybatis.PayInfoMapper;
import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper;
import com.yeshi.fanli.dao.user.ExtractRecordDao;
import com.yeshi.fanli.dto.HongBao;
import com.yeshi.fanli.entity.bus.user.AlipayTransferResultInfo;
import com.yeshi.fanli.entity.bus.user.Extract;
import com.yeshi.fanli.entity.bus.user.ExtractAuditRecord;
import com.yeshi.fanli.entity.bus.user.ExtractRecord;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.bus.user.PayInfo;
import com.yeshi.fanli.entity.bus.user.UserAccountBindingHistory;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.common.AdminUser;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum;
import com.yeshi.fanli.exception.ExtractException;
import com.yeshi.fanli.exception.NotExistObjectException;
import com.yeshi.fanli.exception.ObjectStateException;
@@ -43,11 +46,14 @@
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemConfigService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService;
import com.yeshi.fanli.service.inter.push.PushService;
import com.yeshi.fanli.service.inter.user.ExtractRecordService;
import com.yeshi.fanli.service.inter.user.ExtractService;
import com.yeshi.fanli.service.inter.user.UserAccountBindingHistoryService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserMoneyDetailService;
import com.yeshi.fanli.service.inter.user.UserNotificationService;
import com.yeshi.fanli.util.CMQManager;
import com.yeshi.fanli.util.Constant;
@@ -83,9 +89,6 @@
   private UserInfoMapper userInfoMapper;
   @Resource
   private ExtractRecordDao extractRecordDao;
   @Resource
   private PayInfoMapper payInfoMapper;
   @Resource
@@ -96,6 +99,9 @@
   @Resource
   private HongBaoV2Mapper hongBaoV2Mapper;
   @Resource
   private HongBaoV2Service hongBaoV2Service;
   @Resource
   private PushService pushService;
@@ -111,6 +117,12 @@
   @Resource
   private AlipayAccountValidNormalHistoryMapper alipayAccountValidNormalHistoryMapper;
   @Resource
   private UserMoneyDetailService userMoneyDetailService;
   @Resource
   private UserAccountBindingHistoryService userAccountBindingHistoryService;
   @Transactional
   public Integer addExtract(Extract extract) {
@@ -221,6 +233,13 @@
    */
   @Transactional
   private Integer extract(Extract extract) {
      UserAccountBindingHistory history = userAccountBindingHistoryService
            .getLatestHistory(extract.getUserInfo().getId(), UserAccountBindingHistory.TYPE_PHONE);
      // 手机号更换绑定的7天内不能提现
      if (history != null && !history.getFirst()
            && (System.currentTimeMillis() - history.getCreateTime().getTime()) < 1000 * 60 * 60 * 24 * 7L)
         return 111;
      final String autoExtract = configService.get("extract_way"); // 是否自动转账
      final String maxCount = configService.get("extract_count_day");
      final String maxMoney = configService.get("extract_money_day");
@@ -481,13 +500,44 @@
      return extractMapper.selectByPrimaryKey(id);
   }
   @Transactional
   @Override
   public void checkExtract(String uid) throws ExtractException {
      Long count = hongBaoV2Mapper.countByUidAndState(Long.parseLong(uid), HongBao.STATE_YILINGQU);
   public void checkExtract(Long uid) throws ExtractException {
      Long count = hongBaoV2Mapper.countByUidAndState(uid, HongBao.STATE_YILINGQU);
      if (count == null || count == 0)
         throw new ExtractException(1, "没有已到账的红包");
      List<Integer> list = extractMapper.checkExtract(uid);
      if (list != null && list.size() > 0 && list.get(0) == 0)
      // 获取所有收入所得
      BigDecimal hongBaoMoney = hongBaoV2Service.computeMoneyByUidAndState(uid, HongBaoV2.STATE_YILINGQU);
      Date now = new Date();
      // 获取提现,获取提现验证
      List<UserMoneyDetailTypeEnum> typeList = new ArrayList<>();
      typeList.add(UserMoneyDetailTypeEnum.extract);
      typeList.add(UserMoneyDetailTypeEnum.extractReject);
      typeList.add(UserMoneyDetailTypeEnum.extractVerify);
      BigDecimal extractMoney = userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, new Date(0),
            now);
      extractMoney = extractMoney.abs();
      // 获取维权
      typeList = new ArrayList<>();
      typeList.add(UserMoneyDetailTypeEnum.weiQuan);
      typeList.add(UserMoneyDetailTypeEnum.fanliWeiQuan);
      typeList.add(UserMoneyDetailTypeEnum.inviteWeiQuan);
      typeList.add(UserMoneyDetailTypeEnum.shareWeiQuan);
      typeList.add(UserMoneyDetailTypeEnum.hongbaoDeduct);
      BigDecimal weiqaunMoney = userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, new Date(0),
            now);
      weiqaunMoney = weiqaunMoney.abs();
      BigDecimal balance = userInfoService.selectByPKey(uid).getMyHongBao();
      BigDecimal compensateMoney = extractMapper.computeCompensateByUid(uid);
      if (compensateMoney == null)
         compensateMoney = new BigDecimal(0);
      BigDecimal after = hongBaoMoney.subtract(extractMoney.add(weiqaunMoney).add(balance).add(compensateMoney));
      if (after.compareTo(new BigDecimal("0")) != 0)
         throw new ExtractException(2, "结算资金异常");
   }