403 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			403 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace app\shop\logic\finance;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use app\common\basics\Logic;
							 | 
						||
| 
								 | 
							
								use app\common\enum\NoticeEnum;
							 | 
						||
| 
								 | 
							
								use app\common\enum\OrderEnum;
							 | 
						||
| 
								 | 
							
								use app\common\enum\ShopEnum;
							 | 
						||
| 
								 | 
							
								use app\common\enum\PayEnum;
							 | 
						||
| 
								 | 
							
								use app\common\enum\OrderRefundEnum;
							 | 
						||
| 
								 | 
							
								use app\common\enum\WithdrawalEnum;
							 | 
						||
| 
								 | 
							
								use app\common\enum\AfterSaleEnum;
							 | 
						||
| 
								 | 
							
								use app\common\model\order\Order;
							 | 
						||
| 
								 | 
							
								use app\common\model\shop\Shop;
							 | 
						||
| 
								 | 
							
								use app\common\model\shop\ShopAccountLog;
							 | 
						||
| 
								 | 
							
								use app\common\model\shop\ShopBank;
							 | 
						||
| 
								 | 
							
								use app\common\model\shop\ShopWithdrawal;
							 | 
						||
| 
								 | 
							
								use app\common\model\shop\ShopSettlement;
							 | 
						||
| 
								 | 
							
								use app\common\server\ConfigServer;
							 | 
						||
| 
								 | 
							
								use app\common\server\ExportExcelServer;
							 | 
						||
| 
								 | 
							
								use think\Exception;
							 | 
						||
| 
								 | 
							
								use think\facade\Db;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class WithdrawalLogic extends Logic
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @Notes: 商家提现列表
							 | 
						||
| 
								 | 
							
								     * @Author: 张无忌
							 | 
						||
| 
								 | 
							
								     * @param $get
							 | 
						||
| 
								 | 
							
								     * @param $shop_id
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function lists($get, $shop_id, $is_export = false)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            $where[] = ['shop_id', '=', $shop_id];
							 | 
						||
| 
								 | 
							
								            $where[] = ['status', '=', $get['type'] ?? 0];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (!empty($get['start_time']) and $get['start_time']) {
							 | 
						||
| 
								 | 
							
								                $where[] = ['create_time', '>=', strtotime($get['start_time'])];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (!empty($get['end_time']) and $get['end_time']) {
							 | 
						||
| 
								 | 
							
								                $where[] = ['create_time', '<=', strtotime($get['end_time'])];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 导出
							 | 
						||
| 
								 | 
							
								            if (true === $is_export) {
							 | 
						||
| 
								 | 
							
								                return self::export($where);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $model = new ShopWithdrawal();
							 | 
						||
| 
								 | 
							
								            $lists = $model->field(true)
							 | 
						||
| 
								 | 
							
								                ->where($where)
							 | 
						||
| 
								 | 
							
								                ->paginate([
							 | 
						||
| 
								 | 
							
								                    'page'      => $get['page'],
							 | 
						||
| 
								 | 
							
								                    'list_rows' => $get['limit'],
							 | 
						||
| 
								 | 
							
								                    'var_page' => 'page'
							 | 
						||
| 
								 | 
							
								                ])->toArray();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            foreach ($lists['data'] as &$item) {
							 | 
						||
| 
								 | 
							
								                $item['status'] = WithdrawalEnum::getStatusDesc($item['status']);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return ['count' => $lists['total'], 'lists' => $lists['data']];
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            return ['error' => $e->getMessage()];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @Notes: 财务汇总
							 | 
						||
| 
								 | 
							
								     * @Author: 张无忌
							 | 
						||
| 
								 | 
							
								     * @param $shop_id
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function summary($shop_id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $orderModel = new Order();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 成交订单笔数
							 | 
						||
| 
								 | 
							
								        $detail['dealOrderCount'] = $orderModel->where(['shop_id' => $shop_id, 'pay_status' => OrderEnum::PAY_STATUS_PAID])->count();
							 | 
						||
| 
								 | 
							
								        // 商家营业金额
							 | 
						||
| 
								 | 
							
								        $detail['businessMoney'] = $orderModel->where(['shop_id' => $shop_id, 'pay_status' => OrderEnum::PAY_STATUS_PAID])->sum('order_amount');
							 | 
						||
| 
								 | 
							
								        // 退款订单金额
							 | 
						||
| 
								 | 
							
								        $detail['refundMoney'] = $orderModel->where(['shop_id' => $shop_id])->where('refund_status', '>', 0)->sum('order_amount');
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @Notes: 提现详细
							 | 
						||
| 
								 | 
							
								     * @Author: 张无忌
							 | 
						||
| 
								 | 
							
								     * @param $id
							 | 
						||
| 
								 | 
							
								     * @param $shop_id
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function detail($id, $shop_id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $withdrawal = (new ShopWithdrawal())->findOrEmpty($id)->toArray();
							 | 
						||
| 
								 | 
							
								        $shop   = (new Shop())->with(['category'])->findOrEmpty($shop_id)->toArray();
							 | 
						||
| 
								 | 
							
								        $bank   = (new ShopBank())->findOrEmpty($withdrawal['bank_id'])->toArray();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $shop['type'] = ShopEnum::getShopTypeDesc($shop['type']);
							 | 
						||
| 
								 | 
							
								        $withdrawal['status'] = WithdrawalEnum::getStatusDesc($withdrawal['status']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return ['withdrawal' => $withdrawal, 'shop' => $shop, 'bank' => $bank];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @Notes: 选项卡与汇总统计详细
							 | 
						||
| 
								 | 
							
								     * @param $shop_id
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function statistics($shop_id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $model = new ShopWithdrawal();
							 | 
						||
| 
								 | 
							
								        $apply   = $model->where(['status' => WithdrawalEnum::APPLY_STATUS, 'shop_id' => $shop_id])->count();
							 | 
						||
| 
								 | 
							
								        $handle  = $model->where(['status' => WithdrawalEnum::HANDLE_STATUS, 'shop_id' => $shop_id])->count();
							 | 
						||
| 
								 | 
							
								        $success = $model->where(['status' => WithdrawalEnum::SUCCESS_STATUS, 'shop_id' => $shop_id])->count();
							 | 
						||
| 
								 | 
							
								        $error   = $model->where(['status' => WithdrawalEnum::ERROR_STATUS, 'shop_id' => $shop_id])->count();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //成交订单笔数
							 | 
						||
| 
								 | 
							
								        $modelOrder = new Order();
							 | 
						||
| 
								 | 
							
								        $modelShopWithdrawal = new ShopWithdrawal();
							 | 
						||
| 
								 | 
							
								        $orderNum = $modelOrder
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								                ['pay_status', '>', PayEnum::UNPAID]
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->count('id');
							 | 
						||
| 
								 | 
							
								        //营业额
							 | 
						||
| 
								 | 
							
								        $orderAmount = $modelOrder
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								                ['pay_status', '>', PayEnum::UNPAID]
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('order_amount');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //退款订单金额
							 | 
						||
| 
								 | 
							
								        $refundAmount = $modelOrder
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								                ['shipping_status', '=', OrderEnum::SHIPPING_NO],
							 | 
						||
| 
								 | 
							
								                ['pay_status', '=', PayEnum::REFUNDED],
							 | 
						||
| 
								 | 
							
								                ['refund_status', 'in', [OrderEnum::REFUND_STATUS_PART_REFUND, OrderEnum::REFUND_STATUS_ALL_REFUND]],
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('order_amount');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //待退款订单金额
							 | 
						||
| 
								 | 
							
								        $refundAmountIng = $modelOrder->alias('o')
							 | 
						||
| 
								 | 
							
								            ->join('order_refund or', 'or.order_id = o.id')
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['o.shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								                ['o.shipping_status', '=', OrderEnum::SHIPPING_NO],
							 | 
						||
| 
								 | 
							
								                ['or.refund_status', '<>', OrderRefundEnum::REFUND_STATUS_COMPLETE]
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('or.order_amount');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //售后退款金额
							 | 
						||
| 
								 | 
							
								        $salesRefundAmount = $modelOrder->alias('o')
							 | 
						||
| 
								 | 
							
								            ->join('after_sale as', 'as.order_id = o.id')
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['o.shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								                ['o.shipping_status', '=', OrderEnum::SHIPPING_FINISH],
							 | 
						||
| 
								 | 
							
								                ['as.status', '=', AfterSaleEnum::STATUS_COMPLETE]
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('as.refund_price');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //待售后退款金额
							 | 
						||
| 
								 | 
							
								        $salesRefundAmountIng = $modelOrder->alias('o')
							 | 
						||
| 
								 | 
							
								            ->join('after_sale as', 'as.order_id = o.id')
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['o.shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								                ['o.shipping_status', '=', OrderEnum::SHIPPING_FINISH],
							 | 
						||
| 
								 | 
							
								                ['as.status', '=', AfterSaleEnum::STATUS_WAITING]
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('as.refund_price');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //已结算成交订单数
							 | 
						||
| 
								 | 
							
								        $modelShopSettlement = new ShopSettlement();
							 | 
						||
| 
								 | 
							
								        $settleOrederNum = $modelShopSettlement
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('deal_order_count');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //已结算营业额
							 | 
						||
| 
								 | 
							
								        $settleOrederAmount = $modelShopSettlement
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('business_money');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //待结算营业额
							 | 
						||
| 
								 | 
							
								        $settleOrederAmountWait = $modelOrder
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								                ['pay_status', '>', PayEnum::UNPAID],
							 | 
						||
| 
								 | 
							
								                ['settle_id', '=', OrderEnum::SETTLE_WAIT]
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('order_amount');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //已结算分销佣金金额
							 | 
						||
| 
								 | 
							
								        $settleDistributionAmount = $modelShopSettlement
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('distribution_money');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //已结算入账金额
							 | 
						||
| 
								 | 
							
								        $settleWithdrawalAmount = $modelShopSettlement
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('entry_account_money');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //已结算交易服务费
							 | 
						||
| 
								 | 
							
								        $settlePoundageAmount = $modelShopSettlement
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('trade_service_fee');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //已提现金额    
							 | 
						||
| 
								 | 
							
								        $withdrawaLeftamount = $modelShopWithdrawal
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								                ['status', '=', WithdrawalEnum::SUCCESS_STATUS]
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('apply_amount');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //提现中金额
							 | 
						||
| 
								 | 
							
								        $withdrawaLeftamountIng = $modelShopWithdrawal
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								                ['status', 'in', [WithdrawalEnum::APPLY_STATUS, WithdrawalEnum::HANDLE_STATUS]]
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('apply_amount');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //可提现金额       
							 | 
						||
| 
								 | 
							
								        $modelShop = new Shop();
							 | 
						||
| 
								 | 
							
								        $shopWallet = $modelShop
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['id', '=', $shop_id]
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('wallet');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //提现手续费
							 | 
						||
| 
								 | 
							
								        $procedMoney = $modelShopWithdrawal
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                ['shop_id', '=', $shop_id],
							 | 
						||
| 
								 | 
							
								                ['status', '=', WithdrawalEnum::SUCCESS_STATUS]
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->sum('poundage_amount');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return [
							 | 
						||
| 
								 | 
							
								            'apply'                         =>  $apply,
							 | 
						||
| 
								 | 
							
								            'handle'                        =>  $handle,
							 | 
						||
| 
								 | 
							
								            'success'                       =>  $success,
							 | 
						||
| 
								 | 
							
								            'error'                         =>  $error,
							 | 
						||
| 
								 | 
							
								            'orderNum'                      =>  $orderNum, //成交订单笔数
							 | 
						||
| 
								 | 
							
								            'orderAmount'                   =>  $orderAmount, //营业额
							 | 
						||
| 
								 | 
							
								            'refundAmount'                  =>  $refundAmount, //退款订单金额
							 | 
						||
| 
								 | 
							
								            'refundAmountIng'               =>  $refundAmountIng, //待退款订单金额
							 | 
						||
| 
								 | 
							
								            'salesRefundAmount'             =>  $salesRefundAmount, //售后退款金额
							 | 
						||
| 
								 | 
							
								            'salesRefundAmountIng'          =>  $salesRefundAmountIng, //待售后退款金额
							 | 
						||
| 
								 | 
							
								            'settleOrederNum'               =>  $settleOrederNum, //已结算成交订单数
							 | 
						||
| 
								 | 
							
								            'settleOrederAmount'            =>  $settleOrederAmount, //已结算营业额
							 | 
						||
| 
								 | 
							
								            'settleOrederAmountWait'        =>  $settleOrederAmountWait, //待结算营业额
							 | 
						||
| 
								 | 
							
								            'settleDistributionAmount'      =>  $settleDistributionAmount, //已结算分销佣金金额
							 | 
						||
| 
								 | 
							
								            'settleWithdrawalAmount'        =>  $settleWithdrawalAmount, //已结算入账金额
							 | 
						||
| 
								 | 
							
								            'settlePoundageAmount'          =>  $settlePoundageAmount, //已结算交易服务费
							 | 
						||
| 
								 | 
							
								            'withdrawaLeftamount'           =>  $withdrawaLeftamount, //已提现金额
							 | 
						||
| 
								 | 
							
								            'procedMoney'                   =>  $procedMoney, //提现手续费
							 | 
						||
| 
								 | 
							
								            'withdrawaLeftamountIng'        =>  $withdrawaLeftamountIng, //提现中金额
							 | 
						||
| 
								 | 
							
								            'shopWallet'                    =>  $shopWallet, //可提现金额
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @Notes: 申请提现
							 | 
						||
| 
								 | 
							
								     * @Author: 张无忌
							 | 
						||
| 
								 | 
							
								     * @param $post
							 | 
						||
| 
								 | 
							
								     * @param $shop_id
							 | 
						||
| 
								 | 
							
								     * @return bool
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function add($post, $shop_id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        Db::startTrans();
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            // 1、获取提现条件
							 | 
						||
| 
								 | 
							
								            $min_withdrawal_money = ConfigServer::get('shop_withdrawal', 'min_withdrawal_money', 0);
							 | 
						||
| 
								 | 
							
								            $max_withdrawal_money = ConfigServer::get('shop_withdrawal', 'max_withdrawal_money', 0);
							 | 
						||
| 
								 | 
							
								            $withdrawal_service_charge = ConfigServer::get('shop_withdrawal', 'withdrawal_service_charge', 0);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 2、获取商家信息
							 | 
						||
| 
								 | 
							
								            $shop   = (new Shop())->findOrEmpty($shop_id)->toArray();
							 | 
						||
| 
								 | 
							
								            $wallet = $shop['wallet'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 3、验证条件是否满足
							 | 
						||
| 
								 | 
							
								            if (floatval($post['apply_amount']) > $wallet)
							 | 
						||
| 
								 | 
							
								                throw new Exception('账户余额不足');
							 | 
						||
| 
								 | 
							
								            if (floatval($post['apply_amount']) < $min_withdrawal_money)
							 | 
						||
| 
								 | 
							
								                throw new Exception('最低提现金额不能少于' . $min_withdrawal_money . '元');
							 | 
						||
| 
								 | 
							
								            if (floatval($post['apply_amount']) > $max_withdrawal_money)
							 | 
						||
| 
								 | 
							
								                throw new Exception('最高提现金额不能大于' . $max_withdrawal_money . '元');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 4、获取商家提现手续费
							 | 
						||
| 
								 | 
							
								            $poundage_amount   = 0;
							 | 
						||
| 
								 | 
							
								            if ($withdrawal_service_charge > 0) {
							 | 
						||
| 
								 | 
							
								                $proportion = $withdrawal_service_charge / 100;
							 | 
						||
| 
								 | 
							
								                $poundage_amount = $post['apply_amount'] * $proportion;
							 | 
						||
| 
								 | 
							
								                $poundage_amount = $poundage_amount <= 0 ? 0 : $poundage_amount;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 5、创建申请记录
							 | 
						||
| 
								 | 
							
								            $withdrawal = ShopWithdrawal::create([
							 | 
						||
| 
								 | 
							
								                'sn'              => createSn('shop_withdrawal', 'sn'),
							 | 
						||
| 
								 | 
							
								                'bank_id'         => $post['bank_id'],
							 | 
						||
| 
								 | 
							
								                'shop_id'         => $shop_id,
							 | 
						||
| 
								 | 
							
								                'apply_amount'    => floatval($post['apply_amount']),
							 | 
						||
| 
								 | 
							
								                'left_amount'     => $post['apply_amount'] - $poundage_amount,
							 | 
						||
| 
								 | 
							
								                'poundage_amount' => $poundage_amount,
							 | 
						||
| 
								 | 
							
								                'poundage_ratio'  => $withdrawal_service_charge,
							 | 
						||
| 
								 | 
							
								                'status'          => WithdrawalEnum::APPLY_STATUS
							 | 
						||
| 
								 | 
							
								            ]);
							 | 
						||
| 
								 | 
							
								            // 6、扣除商家可提现金额
							 | 
						||
| 
								 | 
							
								            Shop::update([
							 | 
						||
| 
								 | 
							
								                'wallet'      => ['dec', floatval($post['apply_amount'])],
							 | 
						||
| 
								 | 
							
								                'update_time' => time()
							 | 
						||
| 
								 | 
							
								            ], ['id' => $shop_id]);
							 | 
						||
| 
								 | 
							
								            $left_amount =  Shop::where(['id' => $shop_id])->value('wallet');
							 | 
						||
| 
								 | 
							
								            // 7、增加提现流水记录(待提现)
							 | 
						||
| 
								 | 
							
								            $logType = ShopAccountLog::withdrawal_stay_money;
							 | 
						||
| 
								 | 
							
								            ShopAccountLog::decData($shop_id, $logType, $post['apply_amount'], $left_amount, [
							 | 
						||
| 
								 | 
							
								                'source_id' => $withdrawal['id'],
							 | 
						||
| 
								 | 
							
								                'source_sn' => $withdrawal['sn'],
							 | 
						||
| 
								 | 
							
								                'remark'    => '商家提现'
							 | 
						||
| 
								 | 
							
								            ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $platform_contacts = ConfigServer::get('website_platform', 'platform_mobile');
							 | 
						||
| 
								 | 
							
								            if (!empty($platform_contacts)) {
							 | 
						||
| 
								 | 
							
								                event('Notice', [
							 | 
						||
| 
								 | 
							
								                    'scene' => NoticeEnum::SHOP_WITHDRAWAL_NOTICE_PLATFORM,
							 | 
						||
| 
								 | 
							
								                    'mobile' => $platform_contacts,
							 | 
						||
| 
								 | 
							
								                    'params' => [
							 | 
						||
| 
								 | 
							
								                        'shop_withdrawal_sn' => $withdrawal['sn'],
							 | 
						||
| 
								 | 
							
								                        'shop_name' => $shop['name'],
							 | 
						||
| 
								 | 
							
								                    ]
							 | 
						||
| 
								 | 
							
								                ]);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            Db::commit();
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            Db::rollback();
							 | 
						||
| 
								 | 
							
								            static::$error = $e->getMessage();
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 导出
							 | 
						||
| 
								 | 
							
								     * @param $where
							 | 
						||
| 
								 | 
							
								     * @return array|false
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/4/24 11:59
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function export($where)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            $lists = (new ShopWithdrawal())
							 | 
						||
| 
								 | 
							
								                ->field(true)
							 | 
						||
| 
								 | 
							
								                ->where($where)
							 | 
						||
| 
								 | 
							
								                ->select()->toArray();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            foreach ($lists as &$item) {
							 | 
						||
| 
								 | 
							
								                $item['status'] = WithdrawalEnum::getStatusDesc($item['status']);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $excelFields = [
							 | 
						||
| 
								 | 
							
								                'sn' => '提现单号',
							 | 
						||
| 
								 | 
							
								                'apply_amount' => '提现金额',
							 | 
						||
| 
								 | 
							
								                'poundage_amount' => '提现手续费',
							 | 
						||
| 
								 | 
							
								                'left_amount' => '到账金额',
							 | 
						||
| 
								 | 
							
								                'status' => '提现状态',
							 | 
						||
| 
								 | 
							
								                'create_time' => '提现时间',
							 | 
						||
| 
								 | 
							
								            ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $export = new ExportExcelServer();
							 | 
						||
| 
								 | 
							
								            $export->setFileName('财务中心');
							 | 
						||
| 
								 | 
							
								            $result = $export->createExcel($excelFields, $lists);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return ['url' => $result];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            self::$error = $e->getMessage();
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |