admin
2020-06-15 3e4ef41ffacd7f5fda2e81c3810cd11a6375b83c
fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/BindingAccountServiceImpl.java
@@ -4,7 +4,6 @@
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.annotation.Resource;
@@ -14,8 +13,9 @@
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.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.response.AlipayFundTransToaccountTransferResponse;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.yeshi.fanli.dao.mybatis.AlipayAccountValidNormalHistoryMapper;
import com.yeshi.fanli.dao.mybatis.BindingAccountMapper;
import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
@@ -38,8 +38,10 @@
import com.yeshi.fanli.service.inter.money.extract.BindingAccountService;
import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
import com.yeshi.fanli.service.inter.user.UserAccountBindingHistoryService;
import com.yeshi.fanli.util.AlipayUtil;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
import net.sf.json.JSONObject;
@@ -116,7 +118,7 @@
      return bindingAccountMapper.deleteByPrimaryKey(id);
   }
   @Transactional
   @Transactional(rollbackFor=Exception.class)
   @Override
   public void validAlipayAccount(Long uid, String account, String name)
         throws AlipayTransferException, AlipayApiException, AlipayAccountException {
@@ -134,7 +136,6 @@
                  "该支付宝账号已被其他账号绑定,请更换其他的支付宝账号来绑定");
      }
      // TODO 做频率验证-每月验证一次
      AlipayAccountValidNormalHistory latest = alipayAccountValidNormalHistoryMapper.selectLatestByUid(uid);
      if (latest != null) {
         Calendar caLatest = Calendar.getInstance();
@@ -176,7 +177,7 @@
      if (userInfo.getMyHongBao().compareTo(money) >= 0) {
         // 扣款
         userMoneyService.subUserMoney(uid, money, userMoneyDetail);
         userMoneyMsgNotificationService.alipayAccountValid(history);
         userMoneyMsgNotificationService.alipayAccountValid(history,"1个月",latest!=null);
      } else {// 余额不足,暂时不扣款,加入借贷关系
         UserMoneyDebt debt = new UserMoneyDebt();
         debt.setCreateTime(new Date());
@@ -197,34 +198,12 @@
   private void transferAlipayWithVerify(String account, String name)
         throws AlipayTransferException, AlipayApiException {
      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 uuid = UUID.randomUUID().toString().replace("-", "");
      String outBizNo=StringUtil.Md5(account)+TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMdd");
      String appName = Constant.systemCommonConfig.getProjectChineseName();
      JSONObject json = new JSONObject();
      json.put("out_biz_no", uuid);
      json.put("payee_type", "ALIPAY_LOGONID");
      json.put("payee_account", account);
      json.put("amount", "0.1");
      json.put("payer_show_name", appName + "支付宝验证");
      json.put("payee_real_name", name);
      json.put("remark", "来自" + appName + "的支付宝验证打款");
      request.setBizContent(json.toString());
      AlipayFundTransToaccountTransferResponse response = null;
      response = alipayClient.execute(request);
      // 成功转账
      if (response != null && response.isSuccess() && "10000".equals(response.getCode())) {
         return;
      } else// 转账失败
      {
         throw new AlipayTransferException(Integer.parseInt(response.getCode()), response.getSubCode(),
               response.getSubMsg());
      }
      AlipayUtil.transfer(outBizNo, account, name, new BigDecimal("0.1"), appName + "支付宝验证", "来自" + appName + "的支付宝验证打款");
   }
   @Transactional
   @Transactional(rollbackFor=Exception.class)
   @Override
   public BindingAccount changeAlipayBindingWithVerify(Long uid, String name, String account)
         throws AlipayTransferException, AlipayApiException, AlipayAccountException {
@@ -236,7 +215,7 @@
         // 手机号更换绑定的7天内不能提现
         if (history != null && !history.getFirst()
               && (System.currentTimeMillis() - history.getCreateTime().getTime()) < 1000 * 60 * 60 * 24 * 7L) {
            throw new AlipayAccountException(111, "修改手机号7天内不允许修改支付宝账号");
            throw new AlipayAccountException(111, "修改手机号后,7天内无法更换提现账号");
         }
      }
@@ -283,10 +262,8 @@
      }
      AlipayAccountValidNormalHistory latest = alipayAccountValidNormalHistoryMapper.selectLatestByUid(uid);
      if (latest != null) {
         Calendar caLatest = Calendar.getInstance();
         caLatest.setTimeInMillis(latest.getCreateTime().getTime());
         Calendar nowLatest = Calendar.getInstance();
         if (caLatest.get(Calendar.MONTH) == nowLatest.get(Calendar.MONTH))// 上次更改和现在是同一个月
         if (TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM")
               .equalsIgnoreCase(TimeUtil.getGernalTime(latest.getCreateTime().getTime(), "yyyy-MM")))// 上次更改和现在是同一年同一个月
            throw new BindingAccountException(2, "每月仅可修改1次提现账号,请下月再试吧。");
      }
      return true;