admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/service/impl/money/extract/BindingAccountServiceImpl.java
@@ -1,275 +1,275 @@
package com.yeshi.fanli.service.impl.money.extract;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import com.yeshi.fanli.entity.SystemEnum;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alipay.api.AlipayApiException;
import com.yeshi.fanli.dao.mybatis.AlipayAccountValidNormalHistoryMapper;
import com.yeshi.fanli.dao.mybatis.BindingAccountMapper;
import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper;
import com.yeshi.fanli.entity.bus.user.AlipayAccountValidNormalHistory;
import com.yeshi.fanli.entity.bus.user.BindingAccount;
import com.yeshi.fanli.entity.bus.user.UserAccountBindingHistory;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.money.UserMoneyDebt;
import com.yeshi.fanli.entity.money.UserMoneyDebt.UserMoneyDebtTypeEnum;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.exception.money.UserMoneyDebtException;
import com.yeshi.fanli.exception.money.UserMoneyDetailException;
import com.yeshi.fanli.exception.user.AlipayAccountException;
import com.yeshi.fanli.exception.user.AlipayTransferException;
import com.yeshi.fanli.exception.user.BindingAccountException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.money.UserMoneyDebtService;
import com.yeshi.fanli.service.inter.money.UserMoneyService;
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 org.yeshi.utils.TimeUtil;
import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
@Service
public class BindingAccountServiceImpl implements BindingAccountService {
    @Resource
    private BindingAccountMapper bindingAccountMapper;
    @Resource
    private AlipayAccountValidNormalHistoryMapper alipayAccountValidNormalHistoryMapper;
    @Resource
    private UserInfoMapper userInfoMapper;
    @Resource
    private UserAccountBindingHistoryService userAccountBindingHistoryService;
    @Resource
    private UserMoneyDetailMapper userMoneyDetailMapper;
    @Resource
    private UserMoneyService userMoneyService;
    @Resource
    private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
    @Resource
    private UserMoneyDebtService userMoneyDebtService;
    public List<BindingAccount> getBindingAccountByUid(long uid) {
        return bindingAccountMapper.selectByUid(uid);
    }
    public void addBindingAccount(BindingAccount addAccount) throws BindingAccountException {
        BindingAccount account = bindingAccountMapper.selectByUidAndType(addAccount.getUserInfo().getId(),
                addAccount.getType());
        if (account == null) {
            bindingAccountMapper.insertSelective(addAccount);
        } else {
            throw new BindingAccountException(Constant.BA_EXIST);
        }
    }
    @Transactional
    public Integer deleteBindingAccount(BindingAccount account) {
        BindingAccount oldAccount = bindingAccountMapper.selectByUidAndType(account.getUserInfo().getId(),
                account.getType());
        if (oldAccount != null)
            bindingAccountMapper.deleteByPrimaryKey(oldAccount.getId());
        return 1;
    }
    public BindingAccount getBindingAccountByUidAndType(long uid, int type) {
        BindingAccount account = bindingAccountMapper.selectByUidAndType(uid, type);
        return account;
    }
    @Override
    public BindingAccount changeAlipayBinding(Long uid, String name, String account) {
        BindingAccount bindingAccount = getBindingAccountByUidAndType(uid, BindingAccount.TYPE_ALIPAY);
        if (bindingAccount == null)// 创建账号
        {
            bindingAccount = new BindingAccount();
            bindingAccount.setAccount(account);
            bindingAccount.setName(name);
            bindingAccount.setType(BindingAccount.TYPE_ALIPAY);
            bindingAccount.setUserInfo(new UserInfo(uid));
            bindingAccountMapper.insertSelective(bindingAccount);
        } else {
            bindingAccount.setName(name);
            bindingAccount.setAccount(account);
            bindingAccountMapper.updateByPrimaryKeySelective(bindingAccount);
        }
        return bindingAccount;
    }
    @Override
    public int deleteByPrimaryKey(Long id) {
        return bindingAccountMapper.deleteByPrimaryKey(id);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void validAlipayAccount(Long uid, String account, String name)
            throws AlipayTransferException, AlipayApiException, AlipayAccountException {
        if (uid == null)
            throw new AlipayAccountException(AlipayAccountException.CODE_NO_PARAMS, "用户ID不能为空");
        if (StringUtil.isNullOrEmpty(account))
            throw new AlipayAccountException(AlipayAccountException.CODE_NO_PARAMS, "账号不能为空");
        if (StringUtil.isNullOrEmpty(name))
            throw new AlipayAccountException(AlipayAccountException.CODE_NO_PARAMS, "真实姓名不能为空");
        List<BindingAccount> bindingAccountList = bindingAccountMapper.selectByAccount(account);
        if (bindingAccountList != null && bindingAccountList.size() > 0) {
            UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
            SystemEnum systemEnum = user.getSystem();
            for (int i = 0; i < bindingAccountList.size(); i++) {
                UserInfo u = userInfoMapper.selectByPrimaryKey(bindingAccountList.get(i).getUserInfo().getId());
                //同一系统下绑定账号不能重复
                if (u.getSystem() == systemEnum && bindingAccountList.get(i).getUserInfo().getId().longValue() != uid) {
                    throw new AlipayAccountException(AlipayAccountException.CODE_ALREADY_BIND,
                            "该支付宝账号已被其他账号绑定,请更换其他的支付宝账号来绑定");
                }
            }
        }
        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))// 上次更改和现在是同一个月
                throw new AlipayAccountException(AlipayAccountException.CODE_TIMES_LIMIT, "每月只能更换绑定一次支付宝账号,请次月再试。");
        }
        UserInfo userInfo = userInfoMapper.selectByPrimaryKeyForUpdate(uid);
        if (userInfo.getMyHongBao().compareTo(new BigDecimal("0")) <= 0)
            throw new AlipayAccountException(AlipayAccountException.CODE_NO_MONEY, "你的账户无余额,无需绑定提现帐号。");
        // 需要转账验证
        BigDecimal money = new BigDecimal("0.1");
        transferAlipayWithVerify(account, name);
        // 转账成功
        // 插入转账成功表
        AlipayAccountValidNormalHistory history = new AlipayAccountValidNormalHistory();
        history.setAccount(account);
        history.setCreateTime(new Date());
        history.setName(name);
        history.setUid(uid);
        alipayAccountValidNormalHistoryMapper.insertSelective(history);
        UserMoneyDetail userMoneyDetail = null;
        // 新版资金
        try {
            userMoneyDetail = UserMoneyDetailFactory.createExtractAccountValid(history, money);
        } catch (UserMoneyDetailException e) {
            try {
                LogHelper.errorDetailInfo(e);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        // 余额充足
        if (userInfo.getMyHongBao().compareTo(money) >= 0) {
            // 扣款
            userMoneyService.subUserMoney(uid, money, userMoneyDetail);
            userMoneyMsgNotificationService.alipayAccountValid(history, "1个月", latest != null);
        } else {// 余额不足,暂时不扣款,加入借贷关系
            UserMoneyDebt debt = new UserMoneyDebt();
            debt.setCreateTime(new Date());
            debt.setLeftMoney(money);
            debt.setOriginMoney(money);
            debt.setSourceId(history.getId());
            debt.setType(UserMoneyDebtTypeEnum.extractVerify);
            debt.setUid(uid);
            try {
                userMoneyDebtService.addUserMoneyDebt(debt);
            } catch (UserMoneyDebtException e) {
                LogHelper.errorDetailInfo(e, "验证ID:" + history.getId(), "");
            }
        }
    }
    private void transferAlipayWithVerify(String account, String name)
            throws AlipayTransferException, AlipayApiException {
        String outBizNo = StringUtil.Md5(account) + TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMdd");
        String appName = Constant.systemCommonConfig.getProjectChineseName();
        AlipayUtil.transfer(outBizNo, account, name, new BigDecimal("0.1"), appName + "支付宝验证", "来自" + appName + "的支付宝验证打款");
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public BindingAccount changeAlipayBindingWithVerify(Long uid, String name, String account)
            throws AlipayTransferException, AlipayApiException, AlipayAccountException {
        BindingAccount bindingAccount = bindingAccountMapper.selectByUidAndType(uid, BindingAccount.TYPE_ALIPAY);
        if (bindingAccount != null) {
            // 验证是否7天内更换了手机号
            UserAccountBindingHistory history = userAccountBindingHistoryService.getLatestHistory(uid,
                    UserAccountBindingHistory.TYPE_PHONE);
            // 手机号更换绑定的7天内不能提现
            if (history != null && !history.getFirst()
                    && (System.currentTimeMillis() - history.getCreateTime().getTime()) < 1000 * 60 * 60 * 24 * 7L) {
                throw new AlipayAccountException(111, "修改手机号后,7天内无法更换提现账号");
            }
        }
        try {
            validAlipayAccount(uid, account, name);
        } catch (AlipayTransferException e1) {
            throw new AlipayTransferException(e1.getCode(), e1.getSubCode(), e1.getMsg());
        } catch (AlipayApiException e1) {
            throw new AlipayApiException(e1.getErrCode(), e1.getErrMsg());
        } catch (AlipayAccountException e1) {
            throw new AlipayAccountException(e1.getCode(), e1.getMsg());
        }
        if (bindingAccount == null)// 创建账号
        {
            bindingAccount = new BindingAccount();
            bindingAccount.setAccount(account);
            bindingAccount.setName(name);
            bindingAccount.setType(BindingAccount.TYPE_ALIPAY);
            bindingAccount.setUserInfo(new UserInfo(uid));
            bindingAccountMapper.insertSelective(bindingAccount);
        } else {
            BindingAccount updateBindingAccount = new BindingAccount();
            updateBindingAccount.setId(bindingAccount.getId());
            updateBindingAccount.setName(name);
            updateBindingAccount.setAccount(account);
            bindingAccountMapper.updateByPrimaryKeySelective(updateBindingAccount);
            bindingAccount.setName(updateBindingAccount.getName());
            bindingAccount.setAccount(updateBindingAccount.getAccount());
        }
        return bindingAccount;
    }
    @Override
    public boolean canVerifyAlipayAccount(Long uid) throws BindingAccountException {
        UserInfo userInfo = userInfoMapper.selectByPrimaryKeyForUpdate(uid);
        if (userInfo.getMyHongBao().compareTo(new BigDecimal("0")) <= 0) {
            BindingAccount bindingAccount = bindingAccountMapper.selectByUidAndType(uid, BindingAccount.TYPE_ALIPAY);
            if (bindingAccount != null)
                throw new BindingAccountException(1, "当前账户没有余额,无需修改,请有余额后修改。");
            else
                throw new BindingAccountException(1, "当前账户没有余额,请有余额后绑定。");
        }
        AlipayAccountValidNormalHistory latest = alipayAccountValidNormalHistoryMapper.selectLatestByUid(uid);
        if (latest != null) {
            if (TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM")
                    .equalsIgnoreCase(TimeUtil.getGernalTime(latest.getCreateTime().getTime(), "yyyy-MM")))// 上次更改和现在是同一年同一个月
                throw new BindingAccountException(2, "每月仅可修改1次提现账号,请下月再试吧。");
        }
        return true;
    }
}
package com.yeshi.fanli.service.impl.money.extract;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import com.yeshi.fanli.entity.SystemEnum;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alipay.api.AlipayApiException;
import com.yeshi.fanli.dao.mybatis.AlipayAccountValidNormalHistoryMapper;
import com.yeshi.fanli.dao.mybatis.BindingAccountMapper;
import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper;
import com.yeshi.fanli.entity.bus.user.AlipayAccountValidNormalHistory;
import com.yeshi.fanli.entity.bus.user.BindingAccount;
import com.yeshi.fanli.entity.bus.user.UserAccountBindingHistory;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.money.UserMoneyDebt;
import com.yeshi.fanli.entity.money.UserMoneyDebt.UserMoneyDebtTypeEnum;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.exception.money.UserMoneyDebtException;
import com.yeshi.fanli.exception.money.UserMoneyDetailException;
import com.yeshi.fanli.exception.user.AlipayAccountException;
import com.yeshi.fanli.exception.user.AlipayTransferException;
import com.yeshi.fanli.exception.user.BindingAccountException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.money.UserMoneyDebtService;
import com.yeshi.fanli.service.inter.money.UserMoneyService;
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 org.yeshi.utils.TimeUtil;
import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
@Service
public class BindingAccountServiceImpl implements BindingAccountService {
    @Resource
    private BindingAccountMapper bindingAccountMapper;
    @Resource
    private AlipayAccountValidNormalHistoryMapper alipayAccountValidNormalHistoryMapper;
    @Resource
    private UserInfoMapper userInfoMapper;
    @Resource
    private UserAccountBindingHistoryService userAccountBindingHistoryService;
    @Resource
    private UserMoneyDetailMapper userMoneyDetailMapper;
    @Resource
    private UserMoneyService userMoneyService;
    @Resource
    private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
    @Resource
    private UserMoneyDebtService userMoneyDebtService;
    public List<BindingAccount> getBindingAccountByUid(long uid) {
        return bindingAccountMapper.selectByUid(uid);
    }
    public void addBindingAccount(BindingAccount addAccount) throws BindingAccountException {
        BindingAccount account = bindingAccountMapper.selectByUidAndType(addAccount.getUserInfo().getId(),
                addAccount.getType());
        if (account == null) {
            bindingAccountMapper.insertSelective(addAccount);
        } else {
            throw new BindingAccountException(Constant.BA_EXIST);
        }
    }
    @Transactional
    public Integer deleteBindingAccount(BindingAccount account) {
        BindingAccount oldAccount = bindingAccountMapper.selectByUidAndType(account.getUserInfo().getId(),
                account.getType());
        if (oldAccount != null)
            bindingAccountMapper.deleteByPrimaryKey(oldAccount.getId());
        return 1;
    }
    public BindingAccount getBindingAccountByUidAndType(long uid, int type) {
        BindingAccount account = bindingAccountMapper.selectByUidAndType(uid, type);
        return account;
    }
    @Override
    public BindingAccount changeAlipayBinding(Long uid, String name, String account) {
        BindingAccount bindingAccount = getBindingAccountByUidAndType(uid, BindingAccount.TYPE_ALIPAY);
        if (bindingAccount == null)// 创建账号
        {
            bindingAccount = new BindingAccount();
            bindingAccount.setAccount(account);
            bindingAccount.setName(name);
            bindingAccount.setType(BindingAccount.TYPE_ALIPAY);
            bindingAccount.setUserInfo(new UserInfo(uid));
            bindingAccountMapper.insertSelective(bindingAccount);
        } else {
            bindingAccount.setName(name);
            bindingAccount.setAccount(account);
            bindingAccountMapper.updateByPrimaryKeySelective(bindingAccount);
        }
        return bindingAccount;
    }
    @Override
    public int deleteByPrimaryKey(Long id) {
        return bindingAccountMapper.deleteByPrimaryKey(id);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void validAlipayAccount(Long uid, String account, String name)
            throws AlipayTransferException, AlipayApiException, AlipayAccountException {
        if (uid == null)
            throw new AlipayAccountException(AlipayAccountException.CODE_NO_PARAMS, "用户ID不能为空");
        if (StringUtil.isNullOrEmpty(account))
            throw new AlipayAccountException(AlipayAccountException.CODE_NO_PARAMS, "账号不能为空");
        if (StringUtil.isNullOrEmpty(name))
            throw new AlipayAccountException(AlipayAccountException.CODE_NO_PARAMS, "真实姓名不能为空");
        List<BindingAccount> bindingAccountList = bindingAccountMapper.selectByAccount(account);
        if (bindingAccountList != null && bindingAccountList.size() > 0) {
            UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
            SystemEnum systemEnum = user.getSystem();
            for (int i = 0; i < bindingAccountList.size(); i++) {
                UserInfo u = userInfoMapper.selectByPrimaryKey(bindingAccountList.get(i).getUserInfo().getId());
                //同一系统下绑定账号不能重复
                if (u.getSystem() == systemEnum && bindingAccountList.get(i).getUserInfo().getId().longValue() != uid) {
                    throw new AlipayAccountException(AlipayAccountException.CODE_ALREADY_BIND,
                            "该支付宝账号已被其他账号绑定,请更换其他的支付宝账号来绑定");
                }
            }
        }
        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))// 上次更改和现在是同一个月
                throw new AlipayAccountException(AlipayAccountException.CODE_TIMES_LIMIT, "每月只能更换绑定一次支付宝账号,请次月再试。");
        }
        UserInfo userInfo = userInfoMapper.selectByPrimaryKeyForUpdate(uid);
        if (userInfo.getMyHongBao().compareTo(new BigDecimal("0")) <= 0)
            throw new AlipayAccountException(AlipayAccountException.CODE_NO_MONEY, "你的账户无余额,无需绑定提现帐号。");
        // 需要转账验证
        BigDecimal money = new BigDecimal("0.1");
        transferAlipayWithVerify(account, name);
        // 转账成功
        // 插入转账成功表
        AlipayAccountValidNormalHistory history = new AlipayAccountValidNormalHistory();
        history.setAccount(account);
        history.setCreateTime(new Date());
        history.setName(name);
        history.setUid(uid);
        alipayAccountValidNormalHistoryMapper.insertSelective(history);
        UserMoneyDetail userMoneyDetail = null;
        // 新版资金
        try {
            userMoneyDetail = UserMoneyDetailFactory.createExtractAccountValid(history, money);
        } catch (UserMoneyDetailException e) {
            try {
                LogHelper.errorDetailInfo(e);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        // 余额充足
        if (userInfo.getMyHongBao().compareTo(money) >= 0) {
            // 扣款
            userMoneyService.subUserMoney(uid, money, userMoneyDetail);
            userMoneyMsgNotificationService.alipayAccountValid(history, "1个月", latest != null);
        } else {// 余额不足,暂时不扣款,加入借贷关系
            UserMoneyDebt debt = new UserMoneyDebt();
            debt.setCreateTime(new Date());
            debt.setLeftMoney(money);
            debt.setOriginMoney(money);
            debt.setSourceId(history.getId());
            debt.setType(UserMoneyDebtTypeEnum.extractVerify);
            debt.setUid(uid);
            try {
                userMoneyDebtService.addUserMoneyDebt(debt);
            } catch (UserMoneyDebtException e) {
                LogHelper.errorDetailInfo(e, "验证ID:" + history.getId(), "");
            }
        }
    }
    private void transferAlipayWithVerify(String account, String name)
            throws AlipayTransferException, AlipayApiException {
        String outBizNo = StringUtil.Md5(account) + TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMdd");
        String appName = Constant.systemCommonConfig.getProjectChineseName();
        AlipayUtil.transfer(outBizNo, account, name, new BigDecimal("0.1"), appName + "支付宝验证", "来自" + appName + "的支付宝验证打款");
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public BindingAccount changeAlipayBindingWithVerify(Long uid, String name, String account)
            throws AlipayTransferException, AlipayApiException, AlipayAccountException {
        BindingAccount bindingAccount = bindingAccountMapper.selectByUidAndType(uid, BindingAccount.TYPE_ALIPAY);
        if (bindingAccount != null) {
            // 验证是否7天内更换了手机号
            UserAccountBindingHistory history = userAccountBindingHistoryService.getLatestHistory(uid,
                    UserAccountBindingHistory.TYPE_PHONE);
            // 手机号更换绑定的7天内不能提现
            if (history != null && !history.getFirst()
                    && (System.currentTimeMillis() - history.getCreateTime().getTime()) < 1000 * 60 * 60 * 24 * 7L) {
                throw new AlipayAccountException(111, "修改手机号后,7天内无法更换提现账号");
            }
        }
        try {
            validAlipayAccount(uid, account, name);
        } catch (AlipayTransferException e1) {
            throw new AlipayTransferException(e1.getCode(), e1.getSubCode(), e1.getMsg());
        } catch (AlipayApiException e1) {
            throw new AlipayApiException(e1.getErrCode(), e1.getErrMsg());
        } catch (AlipayAccountException e1) {
            throw new AlipayAccountException(e1.getCode(), e1.getMsg());
        }
        if (bindingAccount == null)// 创建账号
        {
            bindingAccount = new BindingAccount();
            bindingAccount.setAccount(account);
            bindingAccount.setName(name);
            bindingAccount.setType(BindingAccount.TYPE_ALIPAY);
            bindingAccount.setUserInfo(new UserInfo(uid));
            bindingAccountMapper.insertSelective(bindingAccount);
        } else {
            BindingAccount updateBindingAccount = new BindingAccount();
            updateBindingAccount.setId(bindingAccount.getId());
            updateBindingAccount.setName(name);
            updateBindingAccount.setAccount(account);
            bindingAccountMapper.updateByPrimaryKeySelective(updateBindingAccount);
            bindingAccount.setName(updateBindingAccount.getName());
            bindingAccount.setAccount(updateBindingAccount.getAccount());
        }
        return bindingAccount;
    }
    @Override
    public boolean canVerifyAlipayAccount(Long uid) throws BindingAccountException {
        UserInfo userInfo = userInfoMapper.selectByPrimaryKeyForUpdate(uid);
        if (userInfo.getMyHongBao().compareTo(new BigDecimal("0")) <= 0) {
            BindingAccount bindingAccount = bindingAccountMapper.selectByUidAndType(uid, BindingAccount.TYPE_ALIPAY);
            if (bindingAccount != null)
                throw new BindingAccountException(1, "当前账户没有余额,无需修改,请有余额后修改。");
            else
                throw new BindingAccountException(1, "当前账户没有余额,请有余额后绑定。");
        }
        AlipayAccountValidNormalHistory latest = alipayAccountValidNormalHistoryMapper.selectLatestByUid(uid);
        if (latest != null) {
            if (TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM")
                    .equalsIgnoreCase(TimeUtil.getGernalTime(latest.getCreateTime().getTime(), "yyyy-MM")))// 上次更改和现在是同一年同一个月
                throw new BindingAccountException(2, "每月仅可修改1次提现账号,请下月再试吧。");
        }
        return true;
    }
}