ActivityController.php 8.2 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;
            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;
            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);
            }
            $schedule=(isset($post['schedule'])) ? $post['schedule'] : null;
            if(empty($schedule)) {
                $this->error('请添加批次');
            }
            $schedule=$post['schedule'];
            unset($post['schedule']);
            Db::startTrans();
            if(Db::name('activity')->update($post) >= 0) {
                if(Db::name('activity_schedule')->where(['activity_id'=>$request->param('id')])->delete()) {
                    $data=[];
                    for ($i=0; $i<count($schedule); $i++) {
                        $data[$i]=[
                            'activity_id'   =>  $request->param('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)) {
                        Db::commit();
                        $this->success('编辑成功');
                    }else {
                        Db::rollback();
                        $this->error('编辑失败');
                    }
                }else {
                    Db::rollback();
                    $this->error('编辑失败');
                }
            }else {
                Db::rollback();
                $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 = APP_PATH . '/../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;
    }

}