433 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			433 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			PHP
		
	
	
<?php
 | 
						||
// +----------------------------------------------------------------------
 | 
						||
// | likeshop开源商城系统
 | 
						||
// +----------------------------------------------------------------------
 | 
						||
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
 | 
						||
// | 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系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
 | 
						||
// |  likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
 | 
						||
// | 禁止对系统程序代码以任何目的,任何形式的再发布
 | 
						||
// | likeshop团队版权所有并拥有最终解释权
 | 
						||
// +----------------------------------------------------------------------
 | 
						||
// | author: likeshop.cn.team
 | 
						||
// +----------------------------------------------------------------------
 | 
						||
 | 
						||
 | 
						||
namespace app\admin\logic\bargain;
 | 
						||
 | 
						||
 | 
						||
use app\admin\controller\finance\Shop;
 | 
						||
use app\common\basics\Logic;
 | 
						||
use app\common\model\shop\Shop as ShopModel;
 | 
						||
use app\common\model\bargain\Bargain;
 | 
						||
use app\common\model\bargain\BargainItem;
 | 
						||
use app\common\model\bargain\BargainKnife;
 | 
						||
use app\common\model\bargain\BargainLaunch;
 | 
						||
use app\common\model\goods\Goods as GoodsModel;
 | 
						||
use app\common\model\order\Order;
 | 
						||
use app\common\model\team_activity\TeamActivity as TeamActivityModel;
 | 
						||
use app\common\model\user\User;
 | 
						||
use app\common\server\UrlServer;
 | 
						||
use think\facade\Db;
 | 
						||
use think\Exception;
 | 
						||
 | 
						||
/**
 | 
						||
 * Class BargainLogic
 | 
						||
 * @package app\admin\logic\bargain
 | 
						||
 */
 | 
						||
class BargainLogic extends Logic
 | 
						||
{
 | 
						||
    protected static $error; //错误信息
 | 
						||
 | 
						||
    /**
 | 
						||
     * @notes 砍价活动列表
 | 
						||
     * @param $get
 | 
						||
     * @return array
 | 
						||
     * @throws \think\db\exception\DataNotFoundException
 | 
						||
     * @throws \think\db\exception\DbException
 | 
						||
     * @throws \think\db\exception\ModelNotFoundException
 | 
						||
     * @author suny
 | 
						||
     * @date 2021/7/14 9:57 上午
 | 
						||
     */
 | 
						||
    public static function activity($get)
 | 
						||
    {
 | 
						||
 | 
						||
        $where = [
 | 
						||
            ['del', '=', 0],
 | 
						||
        ];
 | 
						||
 | 
						||
        // 查询条件
 | 
						||
 | 
						||
        if (!empty($get['shop_name']) and $get['shop_name'] !== '') {
 | 
						||
            $shopModel = new ShopModel();
 | 
						||
            $ids = $shopModel->field('id,name')->where([
 | 
						||
                ['name', 'like', '%' . $get['shop_name'] . '%']
 | 
						||
            ])->column('id');
 | 
						||
 | 
						||
            $where[] = ['shop_id', 'in', $ids];
 | 
						||
        }
 | 
						||
 | 
						||
        if (!empty($get['goods_name']) and $get['goods_name'] !== '') {
 | 
						||
            $goodsModel = new GoodsModel();
 | 
						||
            $ids = $goodsModel->field('id,name')->where([
 | 
						||
                ['name', 'like', '%' . $get['goods_name'] . '%']
 | 
						||
            ])->column('id');
 | 
						||
 | 
						||
            $where[] = ['goods_id', 'in', $ids];
 | 
						||
        }
 | 
						||
 | 
						||
        if (isset($get['status']) and is_numeric($get['status'])) {
 | 
						||
            $where[] = ['status', '=', (int)$get['status']];
 | 
						||
        }
 | 
						||
 | 
						||
        //审核状态
 | 
						||
        if (isset($get['type']) && $get['type'] != "") {
 | 
						||
            $where[] = ['audit_status', '=', $get['type']];
 | 
						||
        }
 | 
						||
 | 
						||
        $bargainModel = new Bargain();
 | 
						||
        $count = $bargainModel->where($where)->count('id');
 | 
						||
        $lists = $bargainModel->field(true)
 | 
						||
            ->where($where)
 | 
						||
            ->with(['goods', 'shop'])
 | 
						||
            ->withCount(['launchPeopleNumber', 'successKnifePeopleNumber'])
 | 
						||
            ->page($get['page'], $get['limit'])
 | 
						||
            ->select();
 | 
						||
 | 
						||
        foreach ($lists as &$item) {
 | 
						||
            $item['goods']['image'] = UrlServer::getFileUrl($item['goods']['image']);
 | 
						||
            $item['activity_start_time'] = date('Y-m-d H:i:s', $item['activity_start_time']);
 | 
						||
            $item['activity_end_time'] = date('Y-m-d H:i:s', $item['activity_end_time']);
 | 
						||
        }
 | 
						||
 | 
						||
        return ['count' => $count, 'lists' => $lists];
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
     * @notes 砍价活动审核
 | 
						||
     * @param $post
 | 
						||
     * @return Bargain
 | 
						||
     * @author suny
 | 
						||
     * @date 2021/7/14 9:57 上午
 | 
						||
     */
 | 
						||
    public static function audit($post)
 | 
						||
    {
 | 
						||
 | 
						||
        $data = [
 | 
						||
            'audit_status' => $post['review_status'],
 | 
						||
            'audit_remark' => $post['description'],
 | 
						||
        ];
 | 
						||
        return Bargain::where(['id' => $post['id']])
 | 
						||
            ->update($data);
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
     * @notes 违规重审
 | 
						||
     * @param $post
 | 
						||
     * @return bool
 | 
						||
     * @author suny
 | 
						||
     * @date 2021/7/14 9:58 上午
 | 
						||
     */
 | 
						||
    public static function violation($post)
 | 
						||
    {
 | 
						||
 | 
						||
        try {
 | 
						||
            $data = [
 | 
						||
                'audit_status' => 2,
 | 
						||
                'audit_remark' => $post['description'],
 | 
						||
            ];
 | 
						||
            Bargain::where(['id' => $post['id']])
 | 
						||
                ->update($data);
 | 
						||
            BargainLaunch::where(['bargain_id' => $post['id']])
 | 
						||
                ->update(['status' => 2]);//砍失败
 | 
						||
            return true;
 | 
						||
        } catch (Exception $e) {
 | 
						||
            self::$error = $e->getMessage();
 | 
						||
            return false;
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
     * @notes 切换状态
 | 
						||
     * @param $post
 | 
						||
     * @return bool
 | 
						||
     * @throws \think\exception\PDOException
 | 
						||
     * @author suny
 | 
						||
     * @date 2021/7/14 9:58 上午
 | 
						||
     */
 | 
						||
    public static function switchStatus($post)
 | 
						||
    {
 | 
						||
 | 
						||
        Db::startTrans();
 | 
						||
        try {
 | 
						||
            $bargainModel = new Bargain();
 | 
						||
            // 切换状态
 | 
						||
            $bargainModel->where(['id' => (int)$post['id']])
 | 
						||
                ->update([$post['field'] => $post['status']]);
 | 
						||
 | 
						||
            Db::commit();
 | 
						||
            return true;
 | 
						||
        } catch (\Exception $e) {
 | 
						||
            static::$error = $e->getMessage();
 | 
						||
            Db::rollback();
 | 
						||
            return false;
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
     * @notes 砍价列表
 | 
						||
     * @param $get
 | 
						||
     * @return array
 | 
						||
     * @throws \think\db\exception\DataNotFoundException
 | 
						||
     * @throws \think\db\exception\DbException
 | 
						||
     * @throws \think\db\exception\ModelNotFoundException
 | 
						||
     * @throws \think\exception\DbException
 | 
						||
     * @author suny
 | 
						||
     * @date 2021/7/14 9:58 上午
 | 
						||
     */
 | 
						||
    public static function getLaunch($get)
 | 
						||
    {
 | 
						||
 | 
						||
        // 查询条件
 | 
						||
        $where = [];
 | 
						||
 | 
						||
        //砍价订单编号bargain_sn
 | 
						||
        if (isset($get['bargain_sn']) and $get['bargain_sn']) {
 | 
						||
            $where[] = ['bargain_sn', '=', (int)$get['bargain_sn']];
 | 
						||
        }
 | 
						||
 | 
						||
        if (isset($get['goods_name']) and $get['goods_name'] !== '') {
 | 
						||
            $goodsModel = new GoodsModel();
 | 
						||
            $ids = $goodsModel->field('id,name')->where([
 | 
						||
                ['name', 'like', '%' . $get['goods_name'] . '%']
 | 
						||
            ])->column('id');
 | 
						||
 | 
						||
            $where[] = ['goods_id', 'in', $ids];
 | 
						||
        }
 | 
						||
 | 
						||
        if (isset($get['status']) and is_numeric($get['status'])) {
 | 
						||
            $where[] = ['status', '=', (int)$get['status']];
 | 
						||
        }
 | 
						||
 | 
						||
        if (isset($get['launch_start_time']) and $get['launch_start_time'] !== '') {
 | 
						||
            $where[] = ['launch_start_time', '>=', strtotime($get['launch_start_time'])];
 | 
						||
        }
 | 
						||
 | 
						||
        if (isset($get['launch_end_time']) and $get['launch_end_time'] !== '') {
 | 
						||
            $where[] = ['launch_end_time', '<=', strtotime($get['launch_end_time'])];
 | 
						||
        }
 | 
						||
 | 
						||
        if (isset($get['keyword_type']) and $get['keyword_type'] !== '') {
 | 
						||
            if (isset($get['keyword']) and $get['keyword'] !== '') {
 | 
						||
                switch ($get['keyword_type']) {
 | 
						||
                    case 'sn':
 | 
						||
                        $uid = User::where('sn', '=', $get['keyword'])->column('id');
 | 
						||
                        $where[] = ['user_id', 'in', $uid];
 | 
						||
                        break;
 | 
						||
                    case 'nickname':
 | 
						||
                        $uid = User::where('nickname', 'like', '%' . $get['keyword'] . '%')->column('id');
 | 
						||
                        $where[] = ['user_id', 'in', $uid];
 | 
						||
                        break;
 | 
						||
                }
 | 
						||
            }
 | 
						||
        }
 | 
						||
 | 
						||
        $model = new BargainLaunch();
 | 
						||
        $count = $model->where($where)->count('id');
 | 
						||
        $lists = $model->field(true)
 | 
						||
            ->where($where)
 | 
						||
            ->with(['user.level'])
 | 
						||
            ->order('id', 'desc')
 | 
						||
            ->page($get['page'], $get['limit'])
 | 
						||
            ->select()->toArray();
 | 
						||
 | 
						||
        foreach ($lists as &$item) {
 | 
						||
            // 解决用户被删除及Indirect modification of overloaded element报错
 | 
						||
            if (empty($item['user'])) {
 | 
						||
                $user = [
 | 
						||
                    'avatar' => '',
 | 
						||
                    'sn' => '-',
 | 
						||
                    'nickname' => '-',
 | 
						||
                    'level' => [
 | 
						||
                        'name' => '-'
 | 
						||
                    ]
 | 
						||
                ];
 | 
						||
            } else {
 | 
						||
                $user = $item['user'];
 | 
						||
            }
 | 
						||
            $user['avatar'] = UrlServer::getFileUrl($user['avatar']);
 | 
						||
            $item['user'] = $user;
 | 
						||
            $item['launch_start_time'] = date('Y-m-d H:i:s', $item['launch_start_time']);
 | 
						||
            $item['launch_end_time'] = date('Y-m-d H:i:s', $item['launch_end_time']);
 | 
						||
            $item['status'] = BargainLaunch::getStatusDesc($item['status']);
 | 
						||
            $item['goods_image'] = $item['goods_snap']['image'] == "" ? $item['goods_snap']['goods_iamge'] : $item['goods_snap']['image'];
 | 
						||
        }
 | 
						||
 | 
						||
        return ['count' => $count, 'lists' => $lists];
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
     * @notes 砍价订单详情
 | 
						||
     * @param $id
 | 
						||
     * @return array
 | 
						||
     * @throws \think\db\exception\DataNotFoundException
 | 
						||
     * @throws \think\db\exception\DbException
 | 
						||
     * @throws \think\db\exception\ModelNotFoundException
 | 
						||
     * @author suny
 | 
						||
     * @date 2021/7/14 9:58 上午
 | 
						||
     */
 | 
						||
    public static function getLaunchDetail($id)
 | 
						||
    {
 | 
						||
 | 
						||
        $model = new BargainLaunch();
 | 
						||
        $detail = $model->field(true)
 | 
						||
            ->where(['id' => (int)$id])
 | 
						||
            ->with(['user.level'])
 | 
						||
            ->find()->toArray();
 | 
						||
 | 
						||
        $detail['domain'] = UrlServer::getFileUrl();
 | 
						||
        $detail['launch_start_time'] = date('Y-m-d H:i:s', $detail['launch_start_time']);
 | 
						||
        $detail['launch_end_time'] = date('Y-m-d H:i:s', $detail['launch_end_time']);
 | 
						||
        $detail['payment_where'] = $detail['bargain_snap']['payment_where'] == 1 ? '任意金额购买' : '固定金额购买';
 | 
						||
        $detail['status'] = BargainLaunch::getStatusDesc($detail['status']);
 | 
						||
        return $detail;
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
     * @notes 砍价订单
 | 
						||
     * @param $launch_id
 | 
						||
     * @param $get
 | 
						||
     * @return array
 | 
						||
     * @throws \think\db\exception\DataNotFoundException
 | 
						||
     * @throws \think\db\exception\DbException
 | 
						||
     * @throws \think\db\exception\ModelNotFoundException
 | 
						||
     * @author suny
 | 
						||
     * @date 2021/7/14 9:59 上午
 | 
						||
     */
 | 
						||
    public static function getKnifeOrderRecord($launch_id, $get)
 | 
						||
    {
 | 
						||
 | 
						||
        $model = new BargainLaunch();
 | 
						||
        $count = $model->where(['id' => (int)$launch_id])
 | 
						||
            ->where('order_id', '>', 0)->count('id');
 | 
						||
        $lists = $model->field(true)
 | 
						||
            ->where(['id' => (int)$launch_id])
 | 
						||
            ->where('order_id', '>', 0)
 | 
						||
            ->with(['user.level', 'order'])
 | 
						||
            ->page($get['page'], $get['limit'])
 | 
						||
            ->select();
 | 
						||
 | 
						||
        foreach ($lists as &$item) {
 | 
						||
            $item['user']['avatar'] = UrlServer::getFileUrl($item['user']['avatar']);
 | 
						||
            $item['order_status'] = Order::getOrderStatus($item['order']['order_status']);
 | 
						||
        }
 | 
						||
 | 
						||
        return ['count' => $count, 'lists' => $lists];
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
     * @notes 砍价记录
 | 
						||
     * @param $launch_id
 | 
						||
     * @param $get
 | 
						||
     * @return array
 | 
						||
     * @throws \think\db\exception\DataNotFoundException
 | 
						||
     * @throws \think\db\exception\DbException
 | 
						||
     * @throws \think\db\exception\ModelNotFoundException
 | 
						||
     * @author suny
 | 
						||
     * @date 2021/7/14 9:59 上午
 | 
						||
     */
 | 
						||
    public static function getKnifeRecord($launch_id, $get)
 | 
						||
    {
 | 
						||
 | 
						||
        $model = new BargainKnife();
 | 
						||
 | 
						||
        $count = $model->where(['launch_id' => (int)$launch_id])->count();
 | 
						||
        $lists = $model->field(true)
 | 
						||
            ->where(['launch_id' => (int)$launch_id])
 | 
						||
            ->with(['user.level'])
 | 
						||
            ->page($get['page'], $get['limit'])
 | 
						||
            ->select();
 | 
						||
 | 
						||
        foreach ($lists as &$item) {
 | 
						||
            $item['user']['avatar'] = UrlServer::getFileUrl($item['user']['avatar']);
 | 
						||
            $item['help_time'] = date('Y-m-d H:i:s', $item['help_time']);
 | 
						||
            $item['help_price'] = '¥' . $item['help_price'];
 | 
						||
            $item['surplus_price'] = '¥' . $item['surplus_price'];
 | 
						||
        }
 | 
						||
 | 
						||
        return ['count' => $count, 'lists' => $lists];
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
     * @notes 砍价详情
 | 
						||
     * @param $get
 | 
						||
     * @return array
 | 
						||
     * @throws \think\db\exception\DataNotFoundException
 | 
						||
     * @throws \think\db\exception\DbException
 | 
						||
     * @throws \think\db\exception\ModelNotFoundException
 | 
						||
     * @author suny
 | 
						||
     * @date 2021/7/14 9:59 上午
 | 
						||
     */
 | 
						||
    public static function detail($get)
 | 
						||
    {
 | 
						||
 | 
						||
        $where = [];
 | 
						||
        $where['b.id'] = $get['id'];
 | 
						||
        $info = Bargain::alias('b')
 | 
						||
            ->join('goods g', 'b.goods_id = g.id')
 | 
						||
            ->join('shop s', 's.id = b.shop_id')
 | 
						||
            ->where($where)
 | 
						||
            ->field('b.id,b.goods_id,b.audit_status,b.audit_remark,b.time_limit,b.payment_where,b.share_title,b.share_intro,g.image,g.name,g.min_price,g.max_price,s.id as sid,s.name as shop_name,s.type')
 | 
						||
            ->find()->toArray();
 | 
						||
 | 
						||
        switch ($info['type']) {
 | 
						||
            case 1 :
 | 
						||
                $info['type'] = '官方自营';
 | 
						||
                break;
 | 
						||
            case 2 :
 | 
						||
                $info['type'] = '入驻商家';
 | 
						||
                break;
 | 
						||
        }
 | 
						||
 | 
						||
        switch ($info['audit_status']) {
 | 
						||
            case 0 :
 | 
						||
                $info['audit_status'] = '待审核';
 | 
						||
                break;
 | 
						||
            case 1 :
 | 
						||
                $info['audit_status'] = '审核通过';
 | 
						||
                break;
 | 
						||
            case 2 :
 | 
						||
                $info['audit_status'] = '审核拒绝';
 | 
						||
                break;
 | 
						||
        }
 | 
						||
        $info['image'] = UrlServer::getFileUrl($info['image']);
 | 
						||
        return $info;
 | 
						||
    }
 | 
						||
 | 
						||
    /**
 | 
						||
     * @notes 获取各列表数量
 | 
						||
     * @return array
 | 
						||
     * @author suny
 | 
						||
     * @date 2021/7/14 9:59 上午
 | 
						||
     */
 | 
						||
    public static function getNum()
 | 
						||
    {
 | 
						||
 | 
						||
        $all = Bargain::where('del', 0)->count('id');
 | 
						||
        $unaudit = Bargain::where(['audit_status' => 0, 'del' => 0])->count('id');
 | 
						||
        $audit_pass = Bargain::where(['audit_status' => 1, 'del' => 0])->count('id');
 | 
						||
        $audit_refund = Bargain::where(['audit_status' => 2, 'del' => 0])->count('id');
 | 
						||
        $num = [
 | 
						||
            'all' => $all,
 | 
						||
            'unaudit' => $unaudit,
 | 
						||
            'audit_pass' => $audit_pass,
 | 
						||
            'audit_refund' => $audit_refund
 | 
						||
        ];
 | 
						||
        return $num;
 | 
						||
    }
 | 
						||
} |