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();
 | 
						||
        }
 | 
						||
    }
 | 
						||
} |