/** * @brief 处理实际的提现流程,只有在提现审核通过之后才会调用此方法 * 来产生trans * * @return public function * @retval * @see * @note * @author 吕宝贵 * @date 2015/12/06 17:44:54 **/ public function processWithdraw($withdrawId) { $withdraw = UserWithdraw::findOne($withdrawId); if (empty($withdraw)) { $this->addError('display-error', '提现申请记录不存在'); return false; } $withdrawUser = $this->getUserAccount($withdraw->uid); //生成trans $trans = new Trans(); $trans->trans_id_ext = $withdrawId; $trans->trans_type_id = Trans::TRANS_TYPE_WITHDRAW; $trans->status = Trans::PAY_STATUS_WAITPAY; $trans->pay_mode = Trans::PAY_MODE_DIRECTPAY; $trans->total_money = $withdraw->money; $trans->from_uid = $withdraw->uid; $trans->to_uid = $withdraw->uid; $trans->currency = 1; if (!$trans->save()) { $this->addError('display-error', '处理提现时保存交易信息出错'); $this->addErrors($trans->getErrors()); return false; } $freeze = Freeze::findOne(['source_id' => $withdraw->id]); if (!$freeze) { $this->addError('display-error', '找不到冻结记录'); return false; } if (!$freeze->saveTransId($trans->id)) { $this->addError('display-error', '冻结记录回写交易信息失败'); $this->addErrors($trans->freeze->getErrors()); return false; } $payable = null; if (!($payable = Payable::findOne(['trans_id' => $trans->id]))) { $payable = new Payable(); } $payable->trans_id = $trans->id; $payable->pay_uid = 0; $payable->receive_uid = $trans->to_uid; $payable->currency = 1; $payable->money = $trans->total_money; $payable->status = Payable::PAY_STATUS_WAITPAY; $payable->pay_method = Payable::PAY_METHOD_DIRECTPAY; //返回收款记录,用以跳转到第三方进行支付 if ($payable->save()) { return true; } else { $this->addErrors($payable->getErrors()); return false; } }
/** * @brief 产生Excel文件 * * @return protected function * @retval * @see * @note * @author 吕宝贵 * @date 2016/01/11 14:34:57 **/ protected function generateDatas($payables, $processBatch = null) { if (empty($payables)) { throw new Exception('没有可供下载的记录'); } $meta = ['filename' => '付款明细' . date('Y-m-d-H'), 'author' => 'Mr-Hug', 'modify_user' => 'Mr-Hug', 'title' => 'Mr-Hug付款明细', 'subject' => 'Mr-Hug付款明细', 'description' => 'Mr-Hug应付账款明细,用户提现明细', 'keywords' => 'Mr-Hug, 付款,银行转账', 'category' => '银行转账']; $headerLables = ['企业参考号', '收款人编号', '收款人账号', '收款人名称', '收方开户支行', '收款人所在省', '收款人所在市', '收方邮件地址', '收方移动电话', '币种', '付款分行', '结算方式', '业务种类', '付方账号', '期往日', '期望时间', '用途', '金额', '收方行号', '收方开户银行', '业务摘要']; $datas = []; //第一行为title信息 $datas[] = $headerLables; $totalMoney = 0; $payableCount = 0; $payableIds = []; foreach ($payables as $payable) { $totalMoney += $payable->money; $payableCount += 1; $data = [$payable->id, $payable->receive_uid, $payable->receiverBankAccount->account_no, $payable->receiverBankAccount->account_name, '', $payable->receiverBankAccount->province, $payable->receiverBankAccount->city, '', '', '', '', '普通', '', '', date('Ymd', $payable->updated_at + 86400 * 2), '', 'Mr-Hug服务费', $payable->money, '', $payable->receiverBankAccount->bank_name, $payable->memo]; if (!$processBatch) { $callbackFunc = [UserWithdraw::className(), 'processPayingNotify']; if (!Yii::$app->account->processWithdrawPaying($payable, $callbackFunc)) { return false; } } $datas[] = $data; $payableIds[] = $payable->id; } if (!$processBatch) { $processBatch = new PayableProcessBatch(); $processBatch->total_money = $totalMoney; $processBatch->count = $payableCount; $processBatch->download_time = time(); if (!$processBatch->save()) { return false; } } //处理相关的应付记录状态 if (!Yii::$app->db->createCommand()->update(Payable::tableName(), ['process_batch_no' => $processBatch->id], ['id' => $payableIds])->execute()) { return false; } return ['datas' => $datas, 'meta' => $meta]; }