| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570 | <?php/** * Created by PhpStorm. * User: tandunzhao * Date: 2017/12/2 * Time: 下午3:34 */namespace App\Modules\Finance\Services;use App\Modules\Channel\Services\ChannelService;use App\Modules\Finance\Models\FinancialStat;use App\Modules\Finance\Models\WithdrawCash;use App\Modules\Manage\Services\ManageService;use App\Modules\User\Services\UserService;class WithdrawCashService{		/**	 * 自动提现	 * @param unknown_type $request	 */	public static function auto_add_withdrawCash($distribution_channel_id,$amount,$remark) {		$distribution_channel_name = '';			if(!is_numeric($amount)) {			return response()->error("PARAM_ERROR");		}		if($amount < 100) {			//TODO 渠道14,取消100 金额的判断 大于1一块钱就可以			if($distribution_channel_id == 14 || $distribution_channel_id = "14" || $distribution_channel_id = '14') {				if($amount < 1) {					return response()->error("WITHDRAW_CASH_AMOUNT");				}			} else {				return response()->error("WITHDRAW_CASH_AMOUNT");			}		}		if($amount >= (20 * 10000)) {			//TODO 取消单笔提现额度限制			//return response()->error("WITHDRAW_CASH_AMOUNT_MORE");		}			$financialStat = FinancialStatService::getFinancialStatSingle($distribution_channel_id);		if(empty($financialStat) || $financialStat['enable_withdrawal_amount'] < $amount) {			//可提现金额不够			return response()->error("WITHDRAW_CASH_AMOUNT_INSUFFICIEN");		}			if(FinancialConfigService::isFrozenDistributionChannel($distribution_channel_id)) {			//渠道被冻结			return response()->error("WITHDRAW_CASH_AMOUNT_FROZEN");		}			//判断账户是否设置		if(!CashAccountService::isCashAccountExits($distribution_channel_id)) {			return response()->error("WITHDRAW_CASH_AMOUNT_ACCOUNT");		}			//判断今天是否已经提现		if(WithdrawCashService::isWithdrawCashChannelToToday($distribution_channel_id)) {			return response()->error("WITHDRAW_CASH_TODAY_USE");		}			WithdrawCashService::addWithdrawCash($distribution_channel_id, $amount, $remark);			$financialStatUp = FinancialStatService::updateFinancialStatByWithdraw($distribution_channel_id, $amount);		//修改可提现总额		$enable_amount = $financialStatUp['enable_withdrawal_amount'];		//修改提现中金额		$withdraw_pending_amount = $financialStatUp['withdraw_pending_amount'];			return response()->success(compact('enable_amount', 'withdraw_pending_amount'));	}    /**     * 保存提现信息     * @param $channelId 渠道ID     * @param $amount 提现金额     * @param $remark 备注     * @return mixed     */    public static function addWithdrawCash($channelId, $amount, $remark) {        $tallage = FinanceService::getWithdrawCashTallage($channelId, $amount);        $is_company = 0;        $channelName = ChannelService::getChannelNicknameById($channelId);        $cashAccount = CashAccountService::getCashAccountSingle($channelId);        if(!empty($cashAccount)) {            $is_company = $cashAccount['is_company'];        }        $dataWithdrawCash['distribution_channel_id'] = $channelId;        $dataWithdrawCash['distribution_channel_name'] = $channelName;        $dataWithdrawCash['amount'] = $amount;        $dataWithdrawCash['tallage'] = $tallage;        $dataWithdrawCash['status'] = self::getWithdrawCashStatusStr(0);        $dataWithdrawCash['remark'] = $remark;        $dataWithdrawCash['is_company'] = $is_company;        //$dataWithdrawCash['serial_number'] = "";        //$dataWithdrawCash['check_user_id'] = "";        //$dataWithdrawCash['check_user_name'] = "";        $withdrawCash = WithdrawCash::create($dataWithdrawCash);        return $withdrawCash;    }    /**     * 更新提现信息状态     * @param $id     * @param $userId     * @param $statusIn 状态 查看接口 WithdrawCashService::getWithdrawCashStatusList     * @param $remark     * @param string $serialNumber     * @return mixed     */    public static function updateWithdrawCashStatus($id, $userId = '', $statusIn, $remark='', $serialNumber='') {        //TODO 对于一个提现记录只有一条打款是没有Bug的。        //TODO 一个提现记录对应多个支付通道打款,存在逻辑bug        $withdrawCash = WithdrawCash::where('id', $id)->first();        if(!empty($withdrawCash) && is_numeric($statusIn)) {            if(WithdrawCashService::isWithdrawCashStatusPaymentIngStr($withdrawCash['status'])) {                //当前状态是 打款中 可以修改状态            } else {                if(WithdrawCashService::isEditWithdrawCashStatus($id)) {                    return $withdrawCash;                }            }            $userName = "";            if($userId) {                $manage = ManageService::getById($userId);                if(!empty($manage)) {                    $userName = $manage['nickname'];                }            }            $statusStr = WithdrawCashService::getWithdrawCashStatusStr($statusIn);            if(empty($statusStr)) {            } else {                if($statusStr) {                    $withdrawCash['status'] = $statusStr;                }            }            if(WithdrawCashService::isWithdrawCashStatusCodeSuccess($statusIn)) {                //成功提现                $financialStat = FinancialStat::getByDistributionChannel($withdrawCash['distribution_channel_id']);                //修改累计提现金额                $financialStat['accumulative_withdrawal_amount'] = (float)$financialStat['accumulative_withdrawal_amount'] + (float)$withdrawCash['amount'];                //修改提现中金额                $financialStat['withdraw_pending_amount'] = (float)$financialStat['withdraw_pending_amount'] - (float)$withdrawCash['amount'];                $financialStat->save();            }            if($userId) {                $withdrawCash['check_user_id'] = $userId;            }            if($userName) {                $withdrawCash['check_user_name'] = $userName;            }            if($remark) {                $withdrawCash['remark'] = $remark;            }            if($serialNumber) {                if(strpos($withdrawCash['serial_number'], $serialNumber) !== false) {                    //包含                } else {                    $serialNumber = $withdrawCash['serial_number'].",".$serialNumber;                }                $withdrawCash['serial_number'] = $serialNumber;            }            $withdrawCash->save();        }        return $withdrawCash;    }    /**     * 获取一个提现信息     * @param $id     * @return mixed     */    public static function getWithdrawCash($id) {        $withdrawCash = WithdrawCash::where('id', $id)->first();        return $withdrawCash;    }    /**     * 获取提现列表     * @param string $channel_id 可不传     * @param string $channel_name 可不传     * @param string $start_date 可不传     * @param string $end_date 可不传     * @param string $statusIn 状态 查看接口 WithdrawCashService::getWithdrawCashStatusList  可不传     * @param bool $is_all 可不传     * @return mixed     */    public static function getList($channel_id='', $channel_name='', $start_date='',$end_date='', $statusIn = '', $is_all=false) {        $status = false;        if(is_numeric($statusIn)) {            $status = self::getWithdrawCashStatusStrList($statusIn);        }        return WithdrawCash::getListByDistributionChannel($channel_id, $channel_name, $start_date, $end_date, $status, $is_all);    }    /**     * 财务对账     * @param $params[]     *                  channel_id:渠道ID 可选     *                  channel_name:渠道名称 可选     *                  account_name: 打款人姓名     *                  search_name: 搜索名称     *                  start_date:开始时间 可选     *                  end_date:结束时间 可选     *                  is_frozen:冻结  0:正常状态; -1:冻结状态 可选     *                  is_company: 0:私人; 1:公司     * @param string $statusIn 状态 查看接口 WithdrawCashService::getWithdrawCashStatusList  可不传     * @param $isAll     * @return mixed     */    public static function getFinancialCounting($params=[], $statusIn = '', $isAll = '') {        if(is_numeric($statusIn)) {            $params['status'] = self::getWithdrawCashStatusStrList($statusIn);        }        return WithdrawCash::getFinancialCountingParam($params, $isAll);    }    /**     * 财务审核     * @param $params[]     *                  channel_id:渠道ID 可选     *                  channel_name:渠道名称 可选     *                  account_name: 打款人姓名     *                  search_name: 搜索名称 可选     *                  start_date:开始时间 可选     *                  end_date:结束时间 可选     *                  is_frozen:冻结  0:正常状态; -1:冻结状态 可选     *                  is_company: 0:私人; 1:公司     * @param string $statusIn 状态 查看接口 WithdrawCashService::getWithdrawCashStatusList  可不传     * @param $isAll     * @return mixed     */    public static function getFinancialAudit($params=[], $statusIn = '', $isAll = false) {        if(is_numeric($statusIn)) {            $params['status'] = self::getWithdrawCashStatusStrList($statusIn);        }        return WithdrawCash::getFinancialAuditParam($params, $isAll);    }    /**     * 判断当前渠道今天有没有提现     * @param $channelId     * @return bool  true:今天已经提现     */    public static function isWithdrawCashChannelToToday($channelId) {        $withdrawCash = WithdrawCash::getWithdrawCashLastRecord($channelId);        if(empty($withdrawCash)) {            return false;        }        $todayStart = strtotime(date('Y-m-d', time()).' 00:00:00');        $createTime = strtotime($withdrawCash['created_at']);        if($createTime > $todayStart) {            return true;        }        return false;    }    /**     * 是否能修改提现状态     * @param $withdrawCashId     * @return bool true:不能修改     */    public static function isEditWithdrawCashStatus($withdrawCashId) {        $withdrawCash = WithdrawCash::where('id', $withdrawCashId)->first();        if(empty($withdrawCash)) {            return false;        }        if($withdrawCash['status'] == "打款中"            || $withdrawCash['status'] == "自动打款中"            || $withdrawCash['status'] == "人工打款中"            || $withdrawCash['status'] == "打款成功"            || $withdrawCash['status'] == "自动打款成功"            || $withdrawCash['status'] == "人工打款成功" ) {            return true;        }        return false;    }    /**     * 判断当前提现记录是否 已打款  打款成功 状态     * @param $withdrawCashId     * @return bool true:已经打款 打款成功     */    public static function isWithdrawCashStatusSuccess($withdrawCashId) {        $withdrawCash = WithdrawCash::where('id', $withdrawCashId)->first();        if(empty($withdrawCash)) {            return false;        }        if($withdrawCash['status'] == "打款成功"            || $withdrawCash['status'] == "自动打款成功"            || $withdrawCash['status'] == "人工打款成功" ) {            return true;        }        return false;    }    /**     * 待打款状态     * @param string $statusStr     * @return bool     */    public static function isWithdrawCashStatusPaymentWaitStr($statusStr = '') {        if($statusStr == "待打款"            || $statusStr == "自动待打款"            || $statusStr == "人工待打款") {            return true;        }        return false;    }    /**     * 打款中状态     * @param string $statusStr     * @return bool     */    public static function isWithdrawCashStatusPaymentIngStr($statusStr = '') {        if($statusStr == "打款中"            || $statusStr == "自动打款中"            || $statusStr == "人工打款中") {            return true;        }        return false;    }    /**     * 成功打款Code     * @param string $statusIn     * @return bool     */    public static function isWithdrawCashStatusCodeSuccess($statusIn = '') {        if($statusIn == 30 || $statusIn == 31 || $statusIn == 32) {            return true;        }        return false;    }    /**     * 成功打款     * @param string $statusStr     * @return bool     */    public static function isWithdrawCashStatusStrSuccess($statusStr = '') {        if($statusStr == "打款成功"            || $statusStr == "自动打款成功"            || $statusStr == "人工打款成功") {            return true;        }        return false;    }    /**     * 获取成功和失败的状态     * @return array     */    public static function getWithdrawCashStatusStrSuccessAndFailList() {        $status = [];        $status[] = "打款成功";        $status[] = "自动打款成功";        $status[] = "人工打款成功";        $status[] = "打款失败";        $status[] = "自动打款失败";        $status[] = "人工打款失败";        return $status;    }    /**     * 获取 审核失败 打款成功 打款失败 状态     * @return array     */    public static function getWithdrawCashStatusStrSuccessFailCheckedSuccessList() {        $status = [];        $status[] = "审核通过";        $status[] = "审核不通过";        $status[] = "待打款";        $status[] = "自动待打款";        $status[] = "人工待打款";        $status[] = "打款中";        $status[] = "自动打款中";        $status[] = "人工打款中";        $status[] = "打款成功";        $status[] = "自动打款成功";        $status[] = "人工打款成功";        $status[] = "打款失败";        $status[] = "自动打款失败";        $status[] = "人工打款失败";        return $status;    }    public static function getWithdrawCashStatusList($type) {        if($type == 10) {            //channel            $params = [                ['code' => 0 ,'name' => "待审核",        'show' => 1],//                ['code' => 1 ,'name' => "审核中",        'show' => 0],//                ['code' => 2 ,'name' => "审核通过",        'show' => 0],                ['code' => 9 ,'name' => "审核不通过",       'show' => 1],                ['code' => 10,'name' => "待打款",         'show' => 1],//                ['code' => 11,'name' => "自动待打款",      'show' => 0],//                ['code' => 13,'name' => "人工待打款",      'show' => 0],                ['code' => 20,'name' => "打款中",         'show' => 1],//                ['code' => 21,'name' => "自动打款中",      'show' => 0],//                ['code' => 22,'name' => "人工打款中",      'show' => 0],                ['code' => 30,'name' => "打款成功",       'show' => 1],//                ['code' => 31,'name' => "自动打款成功",    'show' => 0],//                ['code' => 32,'name' => "人工打款成功",    'show' => 0],                ['code' => 40,'name' => "打款失败",       'show' => 1],//                ['code' => 41,'name' => "自动打款失败",    'show' => 0],//                ['code' => 42,'name' => "人工打款失败",    'show' => 0],//                ['code' => -1,'name' => "其他错误",       'show' => 0],            ];            return $params;        }        if($type == 20) {            //manage            $params = [                ['code' => 0 ,'name' => "待审核",        'show' => 1],                ['code' => 1 ,'name' => "审核中",        'show' => 0],                ['code' => 2 ,'name' => "审核通过",        'show' => 0],                ['code' => 9 ,'name' => "审核不通过",       'show' => 1],                ['code' => 10,'name' => "待打款",         'show' => 1],                ['code' => 11,'name' => "自动待打款",      'show' => 0],                ['code' => 13,'name' => "人工待打款",      'show' => 0],                ['code' => 20,'name' => "打款中",         'show' => 1],                ['code' => 21,'name' => "自动打款中",      'show' => 0],                ['code' => 22,'name' => "人工打款中",      'show' => 0],                ['code' => 30,'name' => "打款成功",       'show' => 1],                ['code' => 31,'name' => "自动打款成功",    'show' => 0],                ['code' => 32,'name' => "人工打款成功",    'show' => 0],                ['code' => 40,'name' => "打款失败",       'show' => 1],                ['code' => 41,'name' => "自动打款失败",    'show' => 0],                ['code' => 42,'name' => "人工打款失败",    'show' => 0],                ['code' => -1,'name' => "其他错误",       'show' => 0],            ];            return $params;        }    }    public static function getWithdrawCashStatusStr($statusIn = '') {        $status = '';        if(is_numeric($statusIn)) {            if($statusIn == 0) {                $status = "待审核";            } else if($statusIn == 1) {                $status = "审核中";            } else if($statusIn == 2) {                $status = "审核通过";            } else if($statusIn == 9) {                $status = "审核不通过";            } else if($statusIn == 10) {                $status = "待打款";            } else if($statusIn == 11) {                $status = "自动待打款";            } else if($statusIn == 12) {                $status = "人工待打款";            } else if($statusIn == 20) {                $status = "打款中";            } else if($statusIn == 21) {                $status = "自动打款中";            } else if($statusIn == 22) {                $status = "人工打款中";            } else if($statusIn == 30) {                $status = "打款成功";            } else if($statusIn == 31) {                $status = "自动打款成功";            } else if($statusIn == 32) {                $status = "人工打款成功";            } else if($statusIn == 40) {                $status = "打款失败";            } else if($statusIn == 41) {                $status = "自动打款失败";            } else if($statusIn == 42) {                $status = "人工打款失败";            } else if($statusIn == -1) {                $status = "其他错误";            } else {                $status = "";            }        }        return $status;    }    public static function getWithdrawCashStatusStrList($statusIn = '') {        $status = '';        if(is_numeric($statusIn)) {            $status = [];            if($statusIn == 0) {                $status[] = "待审核";            } else if($statusIn == 1) {                $status[] = "审核中";            } else if($statusIn == 2) {                $status[] = "审核通过";            } else if($statusIn == 9) {                $status[] = "审核不通过";            } else if($statusIn == 10) {                $status[] = "待打款";                $status[] = "自动待打款";                $status[] = "人工待打款";            } else if($statusIn == 11) {                $status[] = "自动待打款";            } else if($statusIn == 12) {                $status[] = "人工待打款";            } else if($statusIn == 20) {                $status[] = "打款中";                $status[] = "自动打款中";                $status[] = "人工打款中";            } else if($statusIn == 21) {                $status[] = "自动打款中";            } else if($statusIn == 22) {                $status[] = "人工打款中";            } else if($statusIn == 30) {                $status[] = "打款成功";                $status[] = "自动打款成功";                $status[] = "人工打款成功";            } else if($statusIn == 31) {                $status[] = "自动打款成功";            } else if($statusIn == 32) {                $status[] = "人工打款成功";            } else if($statusIn == 40) {                $status[] = "打款失败";                $status[] = "自动打款失败";                $status[] = "人工打款失败";            } else if($statusIn == 41) {                $status[] = "自动打款失败";            } else if($statusIn == 42) {                $status[] = "人工打款失败";            } else if($statusIn == -1) {                $status[] = "其他错误";            } else {                $status[] = "未知错误码";            }        }        return $status;    }    public static function updateWithdrawCashType($id,$param) {        return WithdrawCash::where('id',$id)->update($param);    }}
 |