ActivityController.php 8.7 KB
<?php
/**
 * Created by PhpStorm.
 * User: yhbr
 * Date: 2018/8/29
 * Time: 11:21
 */

namespace app\admin\controller;
use cmf\controller\AdminBaseController;
use think\Db;

class ActivityController extends AdminBaseController
{

    public function index()
    {
        $search = [];
        $search['is_del'] = ['eq', 0];
        $post = request()->param();
        $t_id = (isset($post['t_id'])) ? $post['t_id'] : 0;
        $name = (isset($post['name'])) ? $post['name'] : null;
        if ($t_id != 0) {
            $search['t_id'] = ['eq', $_POST['t_id']];
        }
        if ($name != null) {
            $search['name'] = ['like', "%$_POST[name]%"];
        }
        $res = Db::name('activity')->alias('a')
            ->field('a.*,t.type_name,q.qr_code')
            ->join('type t', 'a.t_id=t.id')
            ->join('qr q', 'q.activity_id=a.id')
            ->where($search)
            ->paginate(20, false, [
                'query' => request()->param()
            ]);
        return $this->fetch('index', [
            'activity' => $res,
            'page' => $res->render(),
            'type' => Db::name('type')->field('id,type_name')->select(),
            'search' => ['t_id' => $t_id, 'name' => $name]
        ]);
    }

    public function add()
    {
        $request = request();
        if ($request->isPost()) {
            $post = $request->param();
            $post['is_down_payment'] = (isset($post['is_down_payment'])) ? 1 : 0;
            $post['is_new'] = (isset($post['is_new'])) ? 1 : 0;
            $post['is_hot'] = (isset($post['is_hot'])) ? 1 : 0;
            $post['is_on_sale'] = (isset($post['is_on_sale'])) ? 1 : 0;
            $post['date_type'] = 1;
            if (!empty($post['thumb'])) {
                $post['thumb'] = cmf_get_image_url($post['thumb']);
            }
            if (!empty($post['content'])) {
                $post['content'] = htmlspecialchars_decode($post['content']);
            }
            if (!empty($post['banner'])) {
                $banner = '';
                for ($j = 0; $j < count($post['banner']); $j++) {
                    $banner .= cmf_get_image_url($post['banner'][$j]) . ',';
                }
                $post['banner'] = substr($banner, 0, strlen($banner) - 1);
            }
            Db::startTrans();
            $schedule = $post['schedule'];
            unset($post['schedule']);
            if (Db::name('activity')->insert($post)) {
                $activity_id = Db::name('activity')->getLastInsID();
                $data = [];
                for ($i = 0; $i < count($schedule); $i++) {
                    $data[$i] = [
                        'activity_id' => $activity_id,
                        'start_time' => strtotime($schedule[$i]['start_time']),
                        'end_time' => strtotime($schedule[$i]['end_time']),
                        'price' => $schedule[$i]['price'],
                        'maximum' => $schedule[$i]['maximum'],
                        'deadline' => strtotime($schedule[$i]['deadline'])
                    ];
                }
                if (Db::name('activity_schedule')->insertAll($data)) {
                    //生成二维码
                    $qr = [
                        'activity_id' => $activity_id,
                        'qr_code' => $this->qrCode($activity_id),
                    ];
                    if (Db::name('qr')->insert($qr)) {
                        Db::commit();
                        $this->success('添加成功');
                    } else {
                        Db::rollback();
                        $this->error('添加失败');
                    }
                } else {
                    Db::rollback();
                    $this->error('添加失败');
                }
            } else {
                Db::rollback();
                $this->error('添加失败');
            }
        } else {
            return $this->fetch('add', [
                'type' => Db::name('type')->field('id,type_name')->select()
            ]);
        }
    }

    public function edit()
    {
        $request = request();
        if ($request->isPost()) {
            $post = $request->param();
            $post['is_down_payment'] = (isset($post['is_down_payment'])) ? 1 : 0;
            $post['is_new'] = (isset($post['is_new'])) ? 1 : 0;
            $post['is_hot'] = (isset($post['is_hot'])) ? 1 : 0;
            $post['is_on_sale'] = (isset($post['is_on_sale'])) ? 1 : 0;
            $post['date_type'] = 1;
            if ($post['is_down_payment'] == 0) {
                $post['down_price'] = 0;
            }
            if (!empty($post['thumb'])) {
                $post['thumb'] = cmf_get_image_url($post['thumb']);
            }
            if (!empty($post['content'])) {
                $post['content'] = htmlspecialchars_decode($post['content']);
            }
            if (!empty($post['banner'])) {
                $banner = '';
                for ($j = 0; $j < count($post['banner']); $j++) {
                    $banner .= cmf_get_image_url($post['banner'][$j]) . ',';
                }
                $post['banner'] = substr($banner, 0, strlen($banner) - 1);
            }
            unset($post['schedule']);
            if (Db::name('activity')->update($post)) {
                $this->success('编辑成功');
            } else {
                $this->error('您为做出任何修改');
            }
        } else {
            $info = Db::name('activity')->where(['id' => $request->param('id')])->find();
            $banner = $info['banner'];
            $arr = [];
            if (!empty($banner)) {
                $temp = explode(',', $banner);
                for ($i = 0; $i < count($temp); $i++) {
                    $arr[$i]['url'] = $temp[$i];
                }
            }
            return $this->fetch('edit', [
                'info' => $info,
                'type' => Db::name('type')->field('id,type_name')->select(),
                'schedule' => Db::name('activity_schedule')->where(['activity_id' => $request->param('id')])->select(),
                'banner' => $arr
            ]);
        }
    }

    public function del()
    {
        $id = request()->param('id');
        if (Db::name('activity')->update(['id' => $id, 'is_del' => 1])) {
            $this->success('删除成功');
        } else {
            $this->error('删除失败');
        }
    }

    /**
     * 生成活动二维码,扫码进入下单页面
     * @param $id
     * @return string
     */
    private function qrCode($id)
    {
        $savePath = '/alidata/www/w/sami/public/qrcode/';
        $webPath = '/qrcode/';
        $qrData = 'https://www.baidu.com';
        $qrLevel = 'H';
        $qrSize = '8';
        $savePrefix = 'activity_' . $id . '_';
        $pic = '';
        if ($filename = createQRcode($savePath, $qrData, $qrLevel, $qrSize, $savePrefix)) {
            $pic = $webPath . $filename;
        }
        $qr_code = cmf_get_image_url($pic);
        return $qr_code;
    }

    public function addSchedule()
    {
        $request = request();
        if ($request->isPost()) {
            $post = $request->param();
            $schedule = $post['schedule'];
            $data = [];
            for ($i = 0; $i < count($schedule); $i++) {
                $data[$i] = [
                    'activity_id' => $request->param('activity_id'),
                    'start_time' => strtotime($schedule[$i]['start_time']),
                    'end_time' => strtotime($schedule[$i]['end_time']),
                    'price' => $schedule[$i]['price'],
                    'maximum' => $schedule[$i]['maximum'],
                    'deadline' => strtotime($schedule[$i]['deadline'])
                ];
            }
            if (Db::name('activity_schedule')->insertAll($data)) {
                $this->success('新增批次成功');
            } else {
                $this->error('新增批次失败');
            }
        } else {
            return $this->fetch('add_schedule', [
                'activity_id' => $request->param('id'),
                'schedule' => Db::name('activity_schedule')->where(['activity_id' => $request->param('id')])->select(),
            ]);
        }
    }

    public function delSchedule()
    {
        $schedule_id = request()->param('id');
        if (Db::name('activity_schedule')->delete($schedule_id)) {
            return $this->success('', '', true);
        }
    }

    public function editSchedule()
    {
        $post = request()->param();
        $post['start_time'] = strtotime($post['start_time']);
        $post['end_time'] = strtotime($post['end_time']);
        $post['deadline'] = strtotime($post['deadline']);
        if (Db::name('activity_schedule')->update($post)) {
            return $this->success('编辑批次成功', '', true);
        }
    }

}