/** * [激活充值明细] * * @param financeAccountDetailId [充值纪录标识] * @return * @throws Exception */ public boolean activeRechargeDetail(Integer financeAccountDetailId) throws Exception { // 申明变量 boolean flag = false; FinanceAccountDetail financeAccountDetail = null; // 判断参数合法性 if (NumberUtil.isEmptyOrZero(financeAccountDetailId)) { throw new ParamErrorException(ServiceErrorCodeConstant.E0038); } else { financeAccountDetail = this.hibernateTemplate.load(FinanceAccountDetail.class, financeAccountDetailId); if (DataStatusEnum.NORMAL.getCode().equals(financeAccountDetail.getDstatus())) { // 如果已经是正常状态的话,什么都不做 } else { // 将状态置为正常 financeAccountDetail.setDstatus(DataStatusEnum.NORMAL.getCode()); // 如果成功-对冻结账户进行加值 this.changeFinanceAccountMoney( financeAccountDetail.getAccountId(), true, FinanceAccountMoneyTypeEnum.FROZEN.getCode(), financeAccountDetail.getPrice()); } flag = true; } return flag; }
/** * [创建财富账户] * * @param financeAccount [需要创建的财富账户实例] * @return * @throws Exception */ public boolean createFinanceAcount(FinanceAccount financeAccount) throws Exception { // 申明变量 boolean flag = false; boolean isExist = false; // 验证参数是否合法 if (null == financeAccount || !financeAccount.validate()) { throw new ParamErrorException(ServiceErrorCodeConstant.E0035); } else { // 首先判断财富账户是否已经存在 isExist = this.isFinanceAccountExist(financeAccount); if (isExist) { // 如果已经存在 throw new ProcessErrorException(ServiceErrorCodeConstant.E0036); } else { // 如果不存在 // 设定默认参数 financeAccount.setDstatus(DataStatusEnum.NORMAL.getCode()); // 默认账户没钱 financeAccount.setCanUseMoney(0.0); financeAccount.setFrozenMoney(0.0); // 执行创建 this.hibernateTemplate.save(financeAccount); flag = true; } } return flag; }
/** * [可用金额是否足够支付] * * @param passportId [用户标识] * @param money [金额] * @return * @throws Exception */ public boolean isCanUseMoneyEnough(Integer passportId, Double money) throws Exception { // 申明变量 boolean flag = false; FinanceAccount financeAccount = null; FinanceAccountCriteria financeAccountCriteria = null; List<FinanceAccount> financeAccounts = null; // 判断参数合法性 if (NumberUtil.isEmptyOrZero(passportId) || NumberUtil.isEmptyOrZero(money)) { throw new ParamErrorException(ServiceErrorCodeConstant.E0051); } else { // 获取目标用户的财富账户 financeAccountCriteria = new FinanceAccountCriteria(); financeAccountCriteria.setRequirePage(false); financeAccountCriteria.setDstatus(DataStatusEnum.NORMAL.getCode()); financeAccountCriteria.setPassportId(passportId); financeAccounts = this.financeDao.selectFinanceAccountWithPage(financeAccountCriteria); if (null != financeAccounts && 1 == financeAccounts.size()) { // 获取到该用户的财富账户 financeAccount = financeAccounts.get(0); // 进行判断 if (money <= financeAccount.getCanUseMoney()) { // 可用 flag = true; } else { // 不可用 flag = false; } } else { throw new ProcessErrorException(ServiceErrorCodeConstant.E0052); } } return flag; }
/** * [创建一个提现纪录信息] * * @param financeAccountDetail [需要创建的充值纪录实例] * @return * @throws Exception */ public Integer createWithdrawDetail(FinanceAccountDetail financeAccountDetail) throws Exception { // 申明变量 Integer id = 0; FinanceAccount financeAccount = null; // 检查参数合法性 if (null == financeAccountDetail) { throw new ParamErrorException(ServiceErrorCodeConstant.E0038); } else { // 获取对应的账户信息 financeAccount = this.hibernateTemplate.load(FinanceAccount.class, financeAccountDetail.getAccountId()); // 判断提现金额 if (financeAccount.getCanUseMoney() >= financeAccountDetail.getPrice()) { // 预设信息 financeAccountDetail.setType(FinanceAccountDetailTypeEnum.WITHDRAW.getCode()); financeAccountDetail.setStatus(FinanceAccountDetailStatusEnum.WAIT_JUDGEMENT.getCode()); financeAccountDetail.setDstatus(DataStatusEnum.NORMAL.getCode()); financeAccountDetail.setRequireJudgement(YesOrNoEnum.YES.getCode()); // 执行保存操作 id = (Integer) this.createFinanceAccountDetail(financeAccountDetail); // 冻结金额 financeAccount.setCanUseMoney( financeAccount.getCanUseMoney() - financeAccountDetail.getPrice()); financeAccount.setFrozenMoney( financeAccount.getFrozenMoney() + financeAccountDetail.getPrice()); } else { throw new ProcessErrorException(ServiceErrorCodeConstant.E0089); } } return id; }
/** * [支付项目费用] * * @param passportId [支付用户标识] * @param money [支付金额] * @param type [支付类型] * @return * @throws Exception */ public boolean payProjectCost(Integer passportId, Double money, String typeStr) throws Exception { // 申明变量 boolean flag = false; FinanceAccount financeAccount = null; FinanceAccountCriteria financeAccountCriteria = null; List<FinanceAccount> financeAccounts = null; FinanceAccountDetail financeAccountDetail = null; // 判断参数合法性 if (NumberUtil.isEmptyOrZero(passportId) || NumberUtil.isEmptyOrZero(money) || StringUtil.isEmpty(typeStr)) { throw new ParamErrorException(ServiceErrorCodeConstant.E0051); } else { // 获取目标用户的财富账户 financeAccountCriteria = new FinanceAccountCriteria(); financeAccountCriteria.setRequirePage(false); financeAccountCriteria.setDstatus(DataStatusEnum.NORMAL.getCode()); financeAccountCriteria.setPassportId(passportId); financeAccounts = this.financeDao.selectFinanceAccountWithPage(financeAccountCriteria); if (null != financeAccounts && 1 == financeAccounts.size()) { // 获取到该用户的财富账户 financeAccount = financeAccounts.get(0); // 重新获取持久化态的账户信息 financeAccount = this.hibernateTemplate.load(FinanceAccount.class, financeAccount.getId()); // 进行金额改动 financeAccount.setCanUseMoney(financeAccount.getCanUseMoney() - money); // 生成支付明细 if (FinanceAccountDetailTypeEnum.ENTRY_FREE.getCode().equals(typeStr)) { financeAccountDetail = new FinanceAccountDetail(); financeAccountDetail.setPassportId(financeAccount.getPassportId()); financeAccountDetail.setAccountId(financeAccount.getId()); financeAccountDetail.setPrice(money); financeAccountDetail.setCurrency(CurrencyEnum.RMB.getCode()); this.createEntryFreeDetail(financeAccountDetail); } else if (FinanceAccountDetailTypeEnum.ALLPAYMENT.getCode().equals(typeStr)) { financeAccountDetail = new FinanceAccountDetail(); financeAccountDetail.setPassportId(financeAccount.getPassportId()); financeAccountDetail.setAccountId(financeAccount.getId()); financeAccountDetail.setPrice(money); financeAccountDetail.setCurrency(CurrencyEnum.RMB.getCode()); this.createAllProjectFreeDetail(financeAccountDetail); } flag = true; } else { throw new ProcessErrorException(ServiceErrorCodeConstant.E0052); } } return flag; }
/** * [创建一个支付报名费纪录信息] * * @param financeAccountDetail [需要创建的充值纪录实例] * @return * @throws Exception */ public boolean createEntryFreeDetail(FinanceAccountDetail financeAccountDetail) throws Exception { // 申明变量 boolean flag = false; // 检查参数合法性 if (null == financeAccountDetail) { throw new ParamErrorException(ServiceErrorCodeConstant.E0038); } else { // 预设信息 financeAccountDetail.setType(FinanceAccountDetailTypeEnum.ENTRY_FREE.getCode()); financeAccountDetail.setStatus(FinanceAccountDetailStatusEnum.PASS_JUDGEMENT.getCode()); // 默认正常 financeAccountDetail.setDstatus(DataStatusEnum.NORMAL.getCode()); financeAccountDetail.setRequireJudgement(YesOrNoEnum.NO.getCode()); // 执行保存操作 this.createFinanceAccountDetail(financeAccountDetail); flag = true; } return flag; }