withdrawModel = Withdraw::records(); } //全部记录 public function index() { $this->searchRecords(); return $this->isExport() ? $this->export() : $this->view(); } //待审核记录 public function initial() { $this->withdrawModel->initial(); return $this->index(); } //待打款记录 public function audit() { $this->withdrawModel->audit(); return $this->index(); } //打款中记录 public function paying() { $this->withdrawModel->paying(); return $this->index(); } //已打款记录 public function payed() { $this->withdrawModel->payed(); return $this->index(); } //已驳回记录 public function rebut() { $this->withdrawModel->rebut(); return $this->index(); } //已无效记录 public function invalid() { $this->withdrawModel->invalid(); return $this->index(); } /** * 视图和页面数据 * */ private function view() { if (request()->ajax()) { return $this->successJson('ok', $this->resultData()); } return view('withdraw.records'); } /** * 导出 Excel */ private function export() { return $this->_export(); } /** * @return array */ private function resultData() { $records = $this->withdrawModel->paginate()->toArray(); $shopSet = Setting::get('shop.member'); foreach ($records['data'] as &$item) { $item['has_one_member']['avatar'] = $item['has_one_member']['avatar'] ? tomedia($item['has_one_member']['avatar'] ) : tomedia($shopSet['headimg']); $item['has_one_member']['nickname'] = $item['has_one_member']['nickname'] ?: '未更新'; } return [ 'records' => $records, 'search' => $this->searchParams(), 'types' => Withdraw::getTypes(), 'pay_way_list' => Withdraw::getPayWay(), 'amount' => $this->amount ]; } /** * 记录搜索 */ private function searchRecords() { $search = $this->searchParams(); if ($search) { $search['searchtime'] = is_numeric($search['time']['start']) && is_numeric($search['time']['end']); $this->withdrawModel->search($search); } $this->withdrawModel->orderBy('created_at', 'desc'); $this->amount = $this->withdrawModel->sum('amounts'); } /** * @return array */ private function searchParams() { $search = \YunShop::request()->search; return $search ?: []; } /** * @return bool */ private function isExport() { $isExport = \YunShop::request()->export; return $isExport ? true : false; } /** * 导出Excel */ private function _export() { $records = $this->withdrawModel; $export_page = request()->export_page ? request()->export_page : 1; $export_model = new ExportService($records, $export_page); $file_name = date('Ymdhis', time()) . '提现记录导出'; $export_data[0] = [ '提现编号', '会员ID', '粉丝', '姓名、手机', '收入类型', '提现方式', '申请金额', '手续费', '劳务税', '应打款金额', '申请时间', '审核时间', '打款时间', '到账时间', '自定义信息', '打款至', '打款微信号', '支付宝姓名', '支付宝账号', '开户行', '开户行省份', '开户行城市', '开户行支行', '银行卡信息', '开户人姓名', ]; foreach ($export_model->builder_model as $key => $item) { $nickname = $item->hasOneMember->nickname; $realname = $item->hasOneMember->realname.'/'.$item->hasOneMember->mobile; $export_data[$key + 1] = [ $item->withdraw_sn, $item->member_id, strpos($nickname,'=') === 0 ? ' ' . $nickname : $nickname, strpos($realname,'=') === 0 ? ' ' . $realname : $realname, $item->type_name, $item->pay_way_name, $item->amounts, $this->getEstimatePoundage($item),//$item->actual_poundage, ($item->type == 'balance'?0:$this->getEstimateServiceTax($item)),//$item->actual_servicetax, // $item->actual_amounts, $this->getActualAmount($item), $item->created_at->toDateTimeString(), $item->audit_at ? $item->audit_at->toDateTimeString() : '', $item->pay_at ? $item->pay_at->toDateTimeString() : '', $item->arrival_at ? $item->arrival_at->toDateTimeString() : '', $this->getCustomValue($item->member_id), ]; if($item->pay_way==Withdraw::WITHDRAW_WITH_MANUAL){ switch ($item->manual_type) { case 2: $export_data[$key + 1][] = '微信'; $export_data[$key + 1] = array_merge($export_data[$key + 1], $this->getMemberWeChat($item->member_id)); break; case 3: $export_data[$key + 1][] = '支付宝'; $export_data[$key + 1] = array_merge($export_data[$key + 1], $this->getMemberAlipay($item->member_id)); break; default: $export_data[$key + 1][] = '银行卡'; $export_data[$key + 1] = array_merge($export_data[$key + 1], $this->getMemberBankCard($item->member_id)); break; } }else{ switch ($item->pay_way) { case Withdraw::WITHDRAW_WITH_WECHAT: $export_data[$key + 1][] = ''; $export_data[$key + 1] = array_merge($export_data[$key + 1], $this->getMemberWeChat($item->member_id)); break; case Withdraw::WITHDRAW_WITH_ALIPAY: $export_data[$key + 1][] = ''; $export_data[$key + 1] = array_merge($export_data[$key + 1], $this->getMemberAlipay($item->member_id)); break; case Withdraw::WITHDRAW_WITH_WORK_WITHDRAW_BANK: case Withdraw::WITHDRAW_WITH_JIANZHIMAO_BANK: case Withdraw::TAX_WITHDRAW_BANK: $export_data[$key + 1][] = ''; $export_data[$key + 1] = array_merge($export_data[$key + 1], $this->getMemberBankCard($item->member_id)); break; } } //判断字体,针对性的防止𠂆字,使xsl终止不完整的bug $zit = strpos($export_data[$key + 1][21],'𠂆'); if ($zit) { $export_data[$key + 1][21] = '*'; } } $export_model->export($file_name, $export_data, \Request::query('route')); } private function getMemberAlipay($member_id) { $yzMember = MemberShopInfo::select('alipayname','alipay')->where('member_id',$member_id)->first(); return $yzMember ? [ '', $yzMember->alipayname ?: '', $yzMember->alipay ?: '' ] : ['', '']; } private function getMemberWeChat($member_id) { $yzMember = MemberShopInfo::select('wechat')->where('member_id',$member_id)->first(); return $yzMember ? [ $yzMember->wechat ?: '' ] : ['']; } private function getMemberBankCard($member_id) { $bankCard = MemberBankCard::where('member_id',$member_id)->first(); if ($bankCard) { return [ '', '', '', $bankCard->bank_name ?: '', $bankCard->bank_province ?: '', $bankCard->bank_city ?: '', $bankCard->bank_branch ?: '', $bankCard->bank_card ? $bankCard->bank_card . ",": '', $bankCard->member_name ?: '' ]; } return ['','','','','','','','','']; } private function getEstimatePoundage($item) { if (!(float)$item->actual_poundage > 0 || is_null($item->actual_poundage)) { return bcdiv(bcmul($item->amounts, $item->poundage_rate, 4), 100, 2); } return $item->actual_poundage; } private function getEstimateServiceTax($withdraw) { // if (!(float)$item->actual_servicetax > 0 || is_null($item->actual_servicetax)) { // $poundage = $this->getEstimatePoundage($item); // $amount = bcsub($item->amounts, $poundage, 2); // return bcdiv(bcmul($amount, $item->servicetax_rate, 4), 100, 2); // } $withdraw->servicetax = $this->setWithdraw($withdraw)->servicetax; return $withdraw->servicetax; } private function getCustomValue($member_id) { $yzMember = MemberShopInfo::select('member_form')->where('member_id',$member_id)->first(); $str = ''; if($yzMember->member_form){ foreach(json_decode($yzMember->member_form) as $value){ $str .= '<'.$value->name.':'.$value->value.'> '; } } return $str; } public function getActualAmount($withdraw) { $withdraw_data = $this->setWithdraw($withdraw); if ($withdraw_data->type == 'balance') {//余额不减劳务税 $withdraw_data->actual_amounts = bcsub($withdraw_data->amounts, $withdraw_data->poundage, 2); } // 暂时屏蔽, 等之后有误重新计算 // else { // $withdraw_data->actual_amounts = bcsub(bcsub($withdraw_data->amounts, $withdraw_data->poundage, 2), $withdraw_data->servicetax, 2); // } return $withdraw_data->actual_amounts; } private function setWithdraw($withdraw) { if ($withdraw->status == 0) { $withdraw_set = \Setting::get('withdraw.income'); if ($withdraw->pay_way == 'balance' && $withdraw_set['balance_special']) { $merge_percent = null; } else { $merge_percent = WithdrawMergeServicetaxRate::uniacid()->where('withdraw_id', $withdraw->id)->where('is_disabled', 0)->first(); } if ($merge_percent) { $withdraw->servicetax_rate = $merge_percent->servicetax_rate; $base_amount = !$withdraw_set['service_tax_calculation'] ? bcsub($withdraw->amounts, $withdraw->poundage, 2) : $withdraw->amounts; $withdraw->servicetax = bcmul($base_amount, bcdiv($withdraw->servicetax_rate, 100, 4), 2); } elseif ($withdraw->pay_way != 'balance' || !$withdraw_set['balance_special']) { $base_amount = !$withdraw_set['service_tax_calculation'] ? bcsub($withdraw->amounts, $withdraw->poundage, 2) : $withdraw->amounts; $res = \app\common\services\finance\Withdraw::getWithdrawServicetaxPercent($base_amount,$withdraw); $withdraw->servicetax_rate = $res['servicetax_percent']; $withdraw->servicetax = $res['servicetax_amount']; } } return $withdraw; } }