* 优惠券管理 */ namespace app\ais\controller\coupon; use app\ais\controller\Common; use app\ais\model\AisConfig; use app\ais\model\AisCoupon; use app\ais\model\AisCouponUser; use app\ais\model\AisCard; use app\ais\model\AisStore; use think\facade\Request; use think\helper\Time; class Index extends Common{ public function initialize() { parent::initialize(); $this->assign('pathMaps', [['name'=>'优惠券管理','url'=>url("coupon.index/index")]]); } /** * 列表 */ public function index(int $types = 0){ $condition = []; $time = Request::param('time/d',0); $starttime = Request::param('starttime/s'); $endtime = Request::param('endtime/s'); if($time){ switch ($time) { case 2: list($start, $end) = Time::yesterday(); break; case 30: list($start, $end) = Time::month(); break; case 60: list($start, $end) = Time::lastMonth(); break; default: list($start, $end) = Time::today(); break; } $condition[] = ['create_time','>=',$start]; $condition[] = ['create_time','<=',$end]; }else{ if($starttime){ $condition[] = ['create_time','>=',strtotime($starttime)]; } if($endtime){ $condition[] = ['create_time','<=',strtotime($endtime)]; } } $store_id = Request::param('store_id/d'); $store_name = Request::param('store_name'); if($store_id){ $condition[] = ['store_id','=',$store_id]; } $keyword = Request::param('keyword'); if(!empty($keyword)){ $condition[] = ['name','like','%'.$keyword.'%']; } switch ($types) { case 1: $condition[] = ['is_lock','=',1]; $condition[] = ['is_end','=',0]; break; case 2: $condition[] = ['is_end','=',1]; break; default; $condition[] = ['is_end','=',0]; break; } $view['lists'] = AisCoupon::where($this->mini_program)->where($condition)->order('sort desc,is_lock desc,update_time desc')->paginate(10,false,['query' => ['types' => $types,'store_id' => $store_id,'store_name' => $store_name]]); $view['types'] = $types; $view['keyword'] = $keyword; $view['store_id'] = $store_id; $view['store_name'] = $store_name; $view['time'] = $time; $view['starttime'] = $starttime; $view['endtime'] = $endtime; return view()->assign($view); } //优惠券预览和统计 public function review(int $id,int $types = 0){ $info = AisCoupon::where($this->mini_program)->where(['id' => $id])->find(); if(empty($info)){ $this->error('内容不存在'); } $condition = []; $condition['is_end'] = $types ?? 0; $condition['coupon_id'] = $id; $view['lists'] = AisCouponUser::where($this->mini_program)->where($condition)->order('id asc')->paginate(10,false,['query'=>['id' => $id,'types' => $types]]); $view['types'] = $types; $view['coupon_count'] = AisCouponUser::where($this->mini_program)->where(['coupon_id' => $id])->count(); $view['coupon_end_count'] = AisCouponUser::where($this->mini_program)->where(['coupon_id' => $id,'is_end' => 1])->count(); $view['info'] = $info; $config = AisConfig::getConfig($this->member_miniapp_id); $view['end_time'] = $config->coupon_longtime * 60 * 60; return view()->assign($view); } //编辑 public function edit($id = 0){ if(request()->isAjax()){ $param = [ 'id' => $this->request->param('id/d',0), 'name' => $this->request->param('name/s'), 'price' => $this->request->param('price/d'), 'types' => $this->request->param('types/d'), 'discount' => $this->request->param('discount/d',0), 'howmuch' => $this->request->param('howmuch/d',0), 'amount' => $this->request->param('amount/f',0), 'tips' => $this->request->param('tips/s'), 'num' => $this->request->param('num/d',0), ]; $validate = $this->validate($param,'Coupon.edit'); if(true !== $validate){ return enjson(0,$validate); } $data['name'] = $param['name']; $data['price'] = $param['price']; $data['tips'] = $param['tips']; $data['num'] = $param['num']; $data['howmuch'] = $param['howmuch']; $data['types'] = $param['types'];; $data['price'] = 0; $data['amount'] = 0; $data['discount'] = 0; switch ($param['types'] ) { case 1: //折扣券 $data['discount'] = $param['discount']; break; case 2: //兑换券 $data['amount'] = $param['amount']; break; default: //代金券 $data['price'] = $param['price']; break; } if($param['id']){ $result = AisCoupon::where($this->mini_program)->where(['id' => $param['id']])->update($data); }else{ $store_id = $this->request->param('store_id/d',0); $store = AisStore::where(['id' => $store_id])->find(); if(empty($store)){ return json(['code'=>0,'msg'=>'商家必须选择']); } $data['member_miniapp_id'] = $this->member_miniapp_id; $data['create_time'] = time(); $data['update_time'] = time(); $data['store_id'] = $store_id; $data['cate_id'] = $store->cate_id; $data['cate_sid'] = $store->cate_sid; $data['citycode'] = $store->citycode; $data['is_top'] = 0; $result = AisCoupon::create($data); } if($result){ return enjson(200); } return enjson(0); }else{ $view['info'] = AisCoupon::where($this->mini_program)->where(['id' => $id])->find(); return view()->assign($view); } } //删除 public function delete(int $id){ if(AisCoupon::where($this->mini_program)->where(['id' => $id,'types' => 3])->find()){ return enjson(0,'本券禁止删除'); } $result = AisCoupon::where($this->mini_program)->where(['id' => $id])->delete(); if($result){ return enjson(200); } return enjson(0); } /** * 排序 */ public function sort(){ if(request()->isAjax()){ $data = [ 'sort' => $this->request->param('sort/d'), 'id' => $this->request->param('id/d'), ]; $validate = $this->validate($data,'Category.sort'); if(true !== $validate){ return enjson(0,$validate); } $result = AisCoupon::where($this->mini_program)->where(['id' => $data['id']])->update(['sort'=>$data['sort']]); if($result){ return enjson(200); } return enjson(0); } } /** * 置顶/取消 * @param integer $id 用户ID */ public function isTop(int $id){ $result = AisCoupon::where(['id' => $id])->where('types','<','3')->field('is_top')->find(); if(empty($result)){ return enjson(0,'本券禁止操作'); } $result->is_top = $result->is_top ? 0 : 1; $rel = $result->save(); if($rel){ return enjson(200); } return enjson(0); } /** * 审核和取消 * @param integer $id 用户ID */ public function isLock(int $id){ $result = AisCoupon::where(['id' => $id])->where('types','<','3')->field('is_lock,store_id')->find(); if(empty($result)){ return enjson(0,'本券禁止操作'); } $result->is_lock = $result->is_lock ? 0 : 1; $rel = $result->save(); if($rel){ return enjson(200); } return enjson(0); } /** * 优惠券选项 */ public function select(){ $view['input'] = $this->request->param('input/s'); $view['store_id'] = $this->request->param('store_id/d',0); $view['keyword'] = $this->request->param('keyword'); $view['types'] = $this->request->param('types/d',0); $view['is_lock'] = $this->request->param('is_lock/d',0); $condition = []; $condition[] = ['is_lock', '=',0]; if($view['types']){ $condition[] = ['types','=',$view['types']]; }else{ $condition[] = ['types','<=',1]; } if($view['store_id']){ $condition[] = ['store_id','=',$view['store_id']]; } $view['lists'] = AisCoupon::where($this->mini_program)->withSearch(['name'],['name' => $view['keyword']])->where($condition)->order('is_top desc,sort desc,is_lock desc,update_time desc')->paginate(10,false,['query' => ['keyword' => $view['keyword'],'store_id' => $view['store_id'],'input' => $view['input']]]); return view()->assign($view); } }