300 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			300 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | |||
|  | // +----------------------------------------------------------------------
 | |||
|  | // | likeshop100%开源免费商用商城系统
 | |||
|  | // +----------------------------------------------------------------------
 | |||
|  | // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
 | |||
|  | // | 开源版本可自由商用,可去除界面版权logo
 | |||
|  | // | 商业版本务必购买商业授权,以免引起法律纠纷
 | |||
|  | // | 禁止对系统程序代码以任何目的,任何形式的再发布
 | |||
|  | // | gitee下载:https://gitee.com/likeshop_gitee
 | |||
|  | // | github下载:https://github.com/likeshop-github
 | |||
|  | // | 访问官网:https://www.likeshop.cn
 | |||
|  | // | 访问社区:https://home.likeshop.cn
 | |||
|  | // | 访问手册:http://doc.likeshop.cn
 | |||
|  | // | 微信公众号:likeshop技术社区
 | |||
|  | // | likeshop团队 版权所有 拥有最终解释权
 | |||
|  | // +----------------------------------------------------------------------
 | |||
|  | // | author: likeshopTeam
 | |||
|  | // +----------------------------------------------------------------------
 | |||
|  | namespace app\shopapi\logic; | |||
|  | use app\admin\controller\activity_area\Area; | |||
|  | use app\common\enum\NoticeEnum; | |||
|  | use app\common\enum\WithdrawalEnum; | |||
|  | use app\common\model\shop\Shop; | |||
|  | use app\common\model\shop\ShopAccountLog; | |||
|  | use app\common\model\shop\ShopAdmin; | |||
|  | use app\common\model\shop\ShopBank; | |||
|  | use app\common\model\shop\ShopWithdrawal; | |||
|  | use app\common\server\AreaServer; | |||
|  | use app\common\server\ConfigServer; | |||
|  | use think\facade\Db; | |||
|  | 
 | |||
|  | /** | |||
|  |  * 商家逻辑层 | |||
|  |  * Class ShopLogic | |||
|  |  * @package app\shopapi\logic | |||
|  |  */ | |||
|  | class ShopLogic{ | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @notes 获取商家可提现余额 | |||
|  |      * @param $shop_id | |||
|  |      * @return mixed | |||
|  |      * @author cjhao | |||
|  |      * @date 2021/11/10 16:15 | |||
|  |      */ | |||
|  |     public function getShopInfo(int $shop_id){ | |||
|  |         $shop = Shop::where(['id'=>$shop_id]) | |||
|  |             ->field("id,name,logo,is_run,wallet,score,nickname,mobile,intro,
 | |||
|  |             run_start_time,run_end_time,weekdays,province_id,city_id,district_id,address,refund_address,open_invoice,spec_invoice")
 | |||
|  |             ->find()->toArray(); | |||
|  |          | |||
|  |         $shop['run_start_time'] = date('H:i',$shop['run_start_time']); | |||
|  |         $shop['run_end_time'] = date('H:i',$shop['run_end_time']); | |||
|  | 
 | |||
|  | 
 | |||
|  |         $shop['province_name'] = ''; | |||
|  |         $shop['city_name'] = ''; | |||
|  |         $shop['district_name'] = ''; | |||
|  | 
 | |||
|  |         $shop['province_id'] && $shop['province_name'] = AreaServer::getAddress($shop['province_id']); | |||
|  |         $shop['city_id'] && $shop['city_name'] = AreaServer::getAddress($shop['city_id']); | |||
|  |         $shop['district_id'] && $shop['district_name'] = AreaServer::getAddress($shop['district_id']); | |||
|  | 
 | |||
|  |         $shop['refund_address']['province_name'] = !empty($shop['refund_address']['province_id']) ? AreaServer::getAddress($shop['refund_address']['province_id']) : ''; | |||
|  |         $shop['refund_address']['city_name'] = !empty($shop['refund_address']['city_id']) ? AreaServer::getAddress($shop['refund_address']['city_id']) : ''; | |||
|  |         $shop['refund_address']['district_name'] = !empty($shop['refund_address']['district_id']) ? AreaServer::getAddress($shop['refund_address']['district_id']) : ''; | |||
|  | 
 | |||
|  |         return $shop; | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @notes 获取提现信息 | |||
|  |      * @param int $shop_id | |||
|  |      * @return array | |||
|  |      * @throws \think\db\exception\DataNotFoundException | |||
|  |      * @throws \think\db\exception\DbException | |||
|  |      * @throws \think\db\exception\ModelNotFoundException | |||
|  |      * @author cjhao | |||
|  |      * @date 2021/11/10 16:30 | |||
|  |      */ | |||
|  |     public function getWithdrawInfo(int $shop_id){ | |||
|  |         $wallet = Shop::where(['id'=>$shop_id]) | |||
|  |             ->value("wallet"); | |||
|  | 
 | |||
|  |         $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); | |||
|  | 
 | |||
|  |         $bank_list = ShopBank::where(['shop_id'=>$shop_id,'del'=>0]) | |||
|  |                         ->field('id,name,branch,nickname,account') | |||
|  |                         ->select()->toArray(); | |||
|  |         return [ | |||
|  |             'wallet'                    => $wallet, | |||
|  |             'min_withdrawal_money'      => $min_withdrawal_money, | |||
|  |             'max_withdrawal_money'      => $max_withdrawal_money, | |||
|  |             'withdrawal_service_charge' => $withdrawal_service_charge, | |||
|  |             'bank_list'                 => $bank_list, | |||
|  |         ]; | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @notes 提现金额 | |||
|  |      * @param array $post | |||
|  |      * @return bool|string | |||
|  |      * @author cjhao | |||
|  |      * @date 2021/11/10 16:56 | |||
|  |      */ | |||
|  |     public function withdraw(array $post){ | |||
|  |         Db::startTrans(); | |||
|  |         try { | |||
|  |             $shop_id = $post['shop_id']; | |||
|  |             // 1、获取提现条件
 | |||
|  |             $withdrawal_service_charge = ConfigServer::get('shop_withdrawal', 'withdrawal_service_charge', 0); | |||
|  | 
 | |||
|  |             // 2、获取商家信息
 | |||
|  |             $shop   = (new Shop())->findOrEmpty($shop_id)->toArray(); | |||
|  | 
 | |||
|  |             // 4、获取商家提现手续费
 | |||
|  |             $poundage_amount   = 0; | |||
|  |             if ($withdrawal_service_charge > 0) { | |||
|  |                 $proportion = $withdrawal_service_charge / 100; | |||
|  |                 $poundage_amount = $post['money'] * $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['money']), | |||
|  |                 'left_amount'     => $post['money'] - $poundage_amount, | |||
|  |                 'poundage_amount' => $poundage_amount, | |||
|  |                 'poundage_ratio'  => $withdrawal_service_charge, | |||
|  |                 'status'          => WithdrawalEnum::APPLY_STATUS | |||
|  |             ]); | |||
|  |             // 6、扣除商家可提现金额
 | |||
|  |             Shop::update([ | |||
|  |                 'wallet'      => ['dec', floatval($post['money'])], | |||
|  |                 '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['money'], $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(); | |||
|  |             return $e->getMessage(); | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @notes 提现记录 | |||
|  |      * @param $shop_id | |||
|  |      * @param $page_no | |||
|  |      * @param $page_size | |||
|  |      * @return array | |||
|  |      * @throws \think\db\exception\DbException | |||
|  |      * @author cjhao | |||
|  |      * @date 2021/11/10 17:10 | |||
|  |      */ | |||
|  |     public function withdrawLog(int $shop_id,int $page_no,int $page_size){ | |||
|  |         $lists = ShopWithdrawal::alias('SW') | |||
|  |             ->join('shop_account_log SCL','SW.sn = SCL.source_sn') | |||
|  |             ->where(['SW.shop_id'=>$shop_id,'source_type'=>[ShopAccountLog::withdrawal_stay_money,ShopAccountLog::withdrawal_dec_money,ShopAccountLog::withdrawal_fail_money]]) | |||
|  |             ->field("SCL.id,SCL.change_amount,SCL.left_amount,status,SCL.create_time") | |||
|  |             ->paginate([ | |||
|  |                 'page'      => $page_no, | |||
|  |                 'list_rows' => $page_size, | |||
|  |                 'var_page' => 'page' | |||
|  |             ])->toArray(); | |||
|  | 
 | |||
|  |         return ['count' => $lists['total'], 'lists' => $lists['data']]; | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @notes 添加银行账户 | |||
|  |      * @param $post | |||
|  |      * @return bool | |||
|  |      * @author cjhao | |||
|  |      * @date 2021/11/10 18:30 | |||
|  |      */ | |||
|  |     public function addBank(array $post){ | |||
|  |         $shop_bank = new ShopBank(); | |||
|  |         $shop_bank->shop_id     = $post['shop_id']; | |||
|  |         $shop_bank->name        = $post['name']; | |||
|  |         $shop_bank->branch      = $post['branch']; | |||
|  |         $shop_bank->nickname    = $post['nickname']; | |||
|  |         $shop_bank->account     = $post['account']; | |||
|  |         $shop_bank->save(); | |||
|  |         return true; | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @notes 获取银行卡 | |||
|  |      * @param int $id | |||
|  |      * @param int $shop_id | |||
|  |      * @return array | |||
|  |      * @author cjhao | |||
|  |      * @date 2021/11/11 15:46 | |||
|  |      */ | |||
|  |     public function getBank(int $id,int $shop_id){ | |||
|  |         $shop_bank = ShopBank::where(['id'=>$id,'shop_id'=>$shop_id]) | |||
|  |                     ->field('id,name,branch,nickname,account') | |||
|  |                     ->findOrEmpty()->toArray(); | |||
|  |         return $shop_bank; | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @notes 编辑银行账户 | |||
|  |      * @param $post | |||
|  |      * @return bool | |||
|  |      * @author cjhao | |||
|  |      * @date 2021/11/10 18:38 | |||
|  |      */ | |||
|  |     public function editBank(array $post){ | |||
|  |         ShopBank::update([ | |||
|  |             'name'     => $post['name'], | |||
|  |             'branch'   => $post['branch'], | |||
|  |             'nickname' => $post['nickname'], | |||
|  |             'account'  => $post['account'], | |||
|  |             'del'      => 0 | |||
|  |         ], ['id'=>$post['id']]); | |||
|  |         return true; | |||
|  | 
 | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @notes 删除银行卡 | |||
|  |      * @param $id | |||
|  |      * @param $shop_id | |||
|  |      * @return bool | |||
|  |      * @author cjhao | |||
|  |      * @date 2021/11/10 18:42 | |||
|  |      */ | |||
|  |     public function delBank(int $id,int $shop_id){ | |||
|  |         ShopBank::where(['id'=>$id,'shop_id'=>$shop_id])->delete(); | |||
|  |         return true; | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @notes 更新商家信息 | |||
|  |      * @param array $post | |||
|  |      * @param int $shop_id | |||
|  |      * @return Shop | |||
|  |      * @author cjhao | |||
|  |      * @date 2021/11/11 11:34 | |||
|  |      */ | |||
|  |     public function shopSet(array $post,int $shop_id){ | |||
|  |         if(isset($post['refund_address'])){ | |||
|  |             $post['refund_address'] = json_encode($post['refund_address'],JSON_UNESCAPED_UNICODE); | |||
|  |         } | |||
|  |         return Shop::update($post,['id'=>$shop_id]); | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @notes 修改密码 | |||
|  |      * @param $password | |||
|  |      * @param $admin_id | |||
|  |      * @param $shop_id | |||
|  |      * @return bool | |||
|  |      * @author cjhao | |||
|  |      * @date 2021/11/11 16:03 | |||
|  |      */ | |||
|  |     public function updatePassword(array $post,int $shop_id) | |||
|  |     { | |||
|  |         try { | |||
|  |             $admin = ShopAdmin::where(['id' => $post['admin_id'], 'shop_id' => $shop_id])->find(); | |||
|  |             $admin->password = generatePassword($post['password'], $admin['salt']); | |||
|  |             $admin->save(); | |||
|  |             return true; | |||
|  |         } catch (\Exception $e) { | |||
|  |             return $e->getMessage(); | |||
|  |         } | |||
|  |     } | |||
|  | } |