admin
2020-06-15 3e4ef41ffacd7f5fda2e81c3810cd11a6375b83c
fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/ExtractServiceImpl.java
@@ -25,10 +25,8 @@
import org.yeshi.utils.wx.WXPayUtil;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayFundTransToaccountTransferRequest;
import com.alipay.api.response.AlipayFundTransToaccountTransferResponse;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.google.gson.Gson;
import com.yeshi.fanli.dao.mybatis.AccountMessageMapper;
import com.yeshi.fanli.dao.mybatis.AlipayAccountValidNormalHistoryMapper;
@@ -58,6 +56,7 @@
import com.yeshi.fanli.exception.NotExistObjectException;
import com.yeshi.fanli.exception.ObjectStateException;
import com.yeshi.fanli.exception.money.UserMoneyDetailException;
import com.yeshi.fanli.exception.user.AlipayTransferException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemConfigService;
@@ -74,6 +73,7 @@
import com.yeshi.fanli.service.inter.push.PushService;
import com.yeshi.fanli.service.inter.user.UserAccountBindingHistoryService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.util.AlipayUtil;
import com.yeshi.fanli.util.CMQManager;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.GsonUtil;
@@ -82,8 +82,6 @@
import com.yeshi.fanli.util.ThreadUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
import net.sf.json.JSONObject;
@Service
public class ExtractServiceImpl implements ExtractService {
@@ -178,7 +176,6 @@
      updateExtract.setId(id);
      updateExtract.setState(Extract.STATE_PROCESSING);
      extractMapper.updateByPrimaryKeySelective(updateExtract);
      // TODO 新版部署后删除
      // 改变资金记录状态
      UserMoneyDetail detail = userMoneyDetailService.selectByTypeAndUidAndIdentifyCode(
            UserMoneyDetailTypeEnum.extract, find.getUserInfo().getId(), find.getId());
@@ -302,7 +299,7 @@
      auditRecord.setExtract(extract);
      Date minTime = new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 180L);
      extractAuditRecordMapper.insertSelective(auditRecord);
      ThreadUtil.run(new Runnable() {
@@ -311,14 +308,15 @@
         public void run() {
            // 统计数据
            int less10Count = commonOrderCountService.countOderByUidAndLess10(user.getId());
            ExtractAuditRecord update=new ExtractAuditRecord();
            ExtractAuditRecord update = new ExtractAuditRecord();
            update.setId(auditRecord.getId());
            int orderCount50More = orderUserStatisticService.countOrderCount100MoreByUidAndMinTime(user.getId(), minTime);
            int orderCount50More = orderUserStatisticService.countOrderCount100MoreByUidAndMinTime(user.getId(),
                  minTime);
            BigDecimal weiQuanOrderFanAmount = orderUserStatisticService.sumWeiQuanOrderFanAmountByUid(user.getId(),
                  minTime);
            int weiQuanOrderCount = orderUserStatisticService.countWeiQuanOrderByUid(user.getId(), minTime);
            update.setExtraInfoStr(new Gson().toJson(
                  new ExtractOrderStatisticDTO(orderCount50More, weiQuanOrderCount, weiQuanOrderFanAmount, 0, less10Count)));
            update.setExtraInfoStr(new Gson().toJson(new ExtractOrderStatisticDTO(orderCount50More,
                  weiQuanOrderCount, weiQuanOrderFanAmount, 0, less10Count)));
            extractAuditRecordMapper.updateByPrimaryKeySelective(update);
         }
      });
@@ -326,7 +324,7 @@
      // 新版资金详情
      UserMoneyDetail userMoneyDetail = null;
      try {
         userMoneyDetail = UserMoneyDetailFactory.createExtract(extract);
         userMoneyDetail = UserMoneyDetailFactory.createExtract(extract, null);
      } catch (UserMoneyDetailException e2) {
         try {
            LogHelper.errorDetailInfo(e2);
@@ -424,23 +422,9 @@
   @Transactional
   private void extractByZhiFuBao(Extract extract, AdminUser adminUser) {
      LogHelper.userErrorInfo("提现:开始通过提现-" + extract.getId());
      String privateKey = Constant.alipayConfig.getPrivateKey();
      AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
            Constant.alipayConfig.getAppId(), privateKey, "json", "gbk", null, "RSA2");
      AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();
      String appName = Constant.systemCommonConfig.getProjectChineseName();
      JSONObject json = new JSONObject();
      json.put("out_biz_no", "widthdraw_" + extract.getId());// 最长长度64位,支持英文,下划线,数字
      json.put("payee_type", "ALIPAY_LOGONID");
      json.put("payee_account", extract.getAccount());
      json.put("amount", extract.getMoney());
      json.put("payer_show_name", appName + "App" + "提现");
      json.put("payee_real_name", extract.getName());
      json.put("remark", "来自" + appName + "App" + "的提现");
      request.setBizContent(json.toString());
      AlipayFundTransToaccountTransferResponse response = null;
      AlipayFundTransUniTransferResponse response = null;
      try {
         response = alipayClient.execute(request);
         response = AlipayUtil.transferNoThrowException("widthdraw_" + extract.getId(), extract.getAccount(),  extract.getName(),  extract.getMoney(), "板栗快省提现到账", "来自板栗快省的提现");
         LogHelper.userErrorInfo("提现:支付宝通过提现成功-" + extract.getId());
      } catch (AlipayApiException e) {
         LogHelper.errorDetailInfo(e, "支付宝转账异常:" + extract.getId(), "");
@@ -523,7 +507,7 @@
    * @param session
    */
   @Transactional
   private void extractSuccess(Extract extract) {
   private void extractSuccess(Extract extract,String alipayNo) {
      // 老版本功能
      // List<MoneyRecord> list = moneyRecordDao.list("from MoneyRecord mr
      // where mr.extract.id = " + extract.getId());
@@ -546,8 +530,27 @@
      } catch (Exception e) {
         e.printStackTrace();
      }
      UserMoneyDetail detailNew = null;
      try {
         detailNew = UserMoneyDetailFactory.createExtract(extract, alipayNo);
      } catch (UserMoneyDetailException e) {
         e.printStackTrace();
      }
      // 外显账户明细
      UserMoneyDetail userMoneyDetail = userMoneyDetailMapper.selectByTypeAndUidAndIdentifyCode(
            UserMoneyDetailTypeEnum.extractNew, extract.getUserInfo().getId(), extract.getId());
      if (userMoneyDetail != null) {
         UserMoneyDetail detail = new UserMoneyDetail(userMoneyDetail.getId());
         detail.setShow(true);
         detail.setUpdateTime(new Date());
         if (detailNew != null)
            detail.setDescInfo(detailNew.getDescInfo());
         userMoneyDetailMapper.updateByPrimaryKeySelective(detail);
      }
      // 新版通知
      userMoneyMsgNotificationService.extractSuccess(extract);
      userMoneyMsgNotificationService.extractSuccess(extract, alipayNo);
   }
   /**
@@ -580,8 +583,10 @@
      // 获取提现,获取提现验证
      List<UserMoneyDetailTypeEnum> typeList = new ArrayList<>();
      typeList.add(UserMoneyDetailTypeEnum.extract);
      typeList.add(UserMoneyDetailTypeEnum.extractNew);
      typeList.add(UserMoneyDetailTypeEnum.extractReject);
      typeList.add(UserMoneyDetailTypeEnum.extractVerify);
      typeList.add(UserMoneyDetailTypeEnum.extractVerifyNew);
      BigDecimal extractMoney = userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, new Date(0),
            now);
      extractMoney = extractMoney.abs();
@@ -601,7 +606,7 @@
      BigDecimal after = hongBaoMoney.subtract(extractMoney.add(weiqaunMoney).add(balance).add(compensateMoney));
      if (after.compareTo(new BigDecimal("0")) != 0)
         throw new ExtractException(2, "结算资金异常");
         throw new ExtractException(2, "结算资金异常:" + after);
   }
   @Override
@@ -635,7 +640,7 @@
   public void processExtractResult(AlipayTransferResultInfo info) {
      if (info == null)
         return;
      AlipayFundTransToaccountTransferResponse response = info.getAlipayFundTransToaccountTransferResponse();
      AlipayFundTransUniTransferResponse response = info.getAlipayFundTransUniTransferResponse();
      Extract extract = info.getExtract();
      AdminUser admin = info.getAdminUser();
      if (response == null)
@@ -650,7 +655,7 @@
      if (response.isSuccess()) {
         String code = response.getCode();
         if ("10000".equals(code)) {
            extractSuccess(extract);
            extractSuccess(extract,response.getOrderId());
         } else {
            extractFail(extract, response.getSubMsg());
         }
@@ -667,7 +672,7 @@
         payInfo.setState(2);
      }
      payInfo.setOrderId(response.getOrderId());
      payInfo.setOrdertime(response.getPayDate());
      payInfo.setOrdertime(response.getTransDate());
      payInfo.setInfo(response.getSubMsg());
      payInfoMapper.insertSelective(payInfo);
@@ -712,23 +717,13 @@
         extractAuditRecordMapper.updateByPrimaryKeySelective(auditRecord);
      }
      // 外显账户明细
      UserMoneyDetail userMoneyDetail = userMoneyDetailMapper.selectByTypeAndUidAndIdentifyCode(
            UserMoneyDetailTypeEnum.extract, extract.getUserInfo().getId(), extract.getId());
      if (userMoneyDetail != null) {
         UserMoneyDetail detail = new UserMoneyDetail(userMoneyDetail.getId());
         detail.setShow(true);
         detail.setUpdateTime(new Date());
         userMoneyDetailMapper.updateByPrimaryKeySelective(detail);
      }
   }
   @Transactional
   @Override
   public void testExtractSuccess(Long id) {
      Extract extract = extractMapper.selectByPrimaryKey(id);
      extractSuccess(extract);
      extractSuccess(extract,null);
      Long uid = extract.getUserInfo().getId();
      // 更新审核记录
@@ -900,10 +895,6 @@
         LogHelper.errorDetailInfo(e);
      }
      // 4、发送消息通知
      String desc = "为保障你的账户余额安全,自动提现金额将不会高于5元";
      String beizu = "账户中剩余余额请在本App内完成提现";
      userMoneyMsgNotificationService.extractAuto(extractRecord, "未领取-提现中", desc, beizu);
   }
   private boolean parseSendResult(String result) {
@@ -1242,11 +1233,6 @@
         // 资金计算
         userMoneyService.subUserMoney(userInfo.getId(), money, detail);
         // 4、发送消息通知
         String desc = "为保障你的账户余额安全,自动提现金额将不会高于5元";
         String beizu = "账户中剩余余额请在本App内完成提现";
         userMoneyMsgNotificationService.extractAuto(extractRecord, "未领取-提现中", desc, beizu);
         // 满足条件返回信息
         return userInfo;
      }
@@ -1332,8 +1318,6 @@
      extractWeiXinRecordService.updateByPrimaryKeySelective(updeteRecord);
      if (ExtractWeiXinRecord.RECEIVED.equals(status)) {
         // 发送消息通知
         userMoneyMsgNotificationService.extractAuto(record, "已领取-已提现", null, null);
      } else if (ExtractWeiXinRecord.REFUND.equals(status)) {
         // 资金明细
         UserMoneyDetail detail = new UserMoneyDetail();
@@ -1345,13 +1329,20 @@
         detail.setType(UserMoneyDetailTypeEnum.extractAutoWXRefund);
         detail.setUpdateTime(new Date());
         detail.setUserInfo(new UserInfo(record.getUid()));
         // 资金计算
         userMoneyService.addUserMoney(record.getUid(), record.getMoney(), detail);
         // 发送消息通知
         userMoneyMsgNotificationService.extractAuto(record, "已退回-余额中", null, null);
      }
   }
   @Override
   public List<Extract> getExtractSucceedRecord(int page, int pageSize, Long uid) {
      return extractMapper.getExtractSucceedRecord((page-1)*pageSize, pageSize, uid);
   }
   @Override
   public long countExtractSucceedRecord(Long uid) {
       Long count = extractMapper.countExtractSucceedRecord(uid);
       return count== null? 0 : count;
   }
}