266 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			266 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | namespace app\admin\logic\seckill; | ||
|  | 
 | ||
|  | use app\common\basics\Logic; | ||
|  | use app\common\model\seckill\SeckillGoods; | ||
|  | use app\common\model\seckill\SeckillTime; | ||
|  | use app\common\model\goods\Goods; | ||
|  | use app\common\server\UrlServer; | ||
|  | use think\facade\Db; | ||
|  | 
 | ||
|  | class SeckillGoodsLogic extends Logic | ||
|  | { | ||
|  |     /** | ||
|  |      * 统计 | ||
|  |      */ | ||
|  |     public static function statistics() | ||
|  |     { | ||
|  |         // 秒杀中商品
 | ||
|  |         $where = [ | ||
|  |             ['sg.del', '=', 0], | ||
|  |             ['sg.review_status', '=', 1], | ||
|  |         ]; | ||
|  |         $lists = SeckillGoods::alias('sg') | ||
|  |             ->leftJoin('seckill_time st', 'st.id=sg.seckill_id') | ||
|  |             ->field('sg.goods_id,sg.start_date,sg.end_date,st.start_time,st.end_time') | ||
|  |             ->where($where) | ||
|  |             ->group('sg.goods_id,sg.start_date,sg.end_date,st.start_time,st.end_time') | ||
|  |             ->select() | ||
|  |             ->toArray(); | ||
|  |         $now = time(); | ||
|  |         $now_date = date('Y-m-d', $now); | ||
|  |         $unSeckillCount = 0; | ||
|  |         foreach($lists as $key => $item) { // 检验是否在秒杀中
 | ||
|  |             $start_date_time = strtotime($item['start_date']. ' 00:00:00'); | ||
|  |             $end_date_time = strtotime($item['end_date']. ' 23:59:59'); | ||
|  |             // 日期校验
 | ||
|  |             if($now >= $start_date_time && $now <= $end_date_time) { | ||
|  |                 $start_time = strtotime($now_date. ' '. $item['start_time']); | ||
|  |                 $end_time = strtotime($now_date. ' '. $item['end_time']); | ||
|  |                 if($now >= $start_time && $now <= $end_time) { | ||
|  |                     // 秒杀中的时段,无需处理
 | ||
|  |                 }else{ | ||
|  |                     unset($lists[$key]); // 未在秒杀时段
 | ||
|  |                     ++$unSeckillCount ; | ||
|  |                 } | ||
|  |             }else{ | ||
|  |                 unset($lists[$key]); // 未在秒杀时间日期
 | ||
|  |                 ++$unSeckillCount; | ||
|  |             } | ||
|  |         } | ||
|  |         $seckillCount = count($lists); | ||
|  | 
 | ||
|  |         // 待审核
 | ||
|  |         $waitReview = SeckillGoods::where(['del'=>0, 'review_status'=>0])->group('seckill_id,goods_id,start_date,end_date')->count(); | ||
|  |         // 审核拒绝
 | ||
|  |         $refuseReview = SeckillGoods::where(['del'=>0, 'review_status'=>2])->group('seckill_id,goods_id,start_date,end_date')->count(); | ||
|  | //
 | ||
|  |         return [ | ||
|  |             'unSeckillCount'  => $unSeckillCount, | ||
|  |             'seckillCount'  => $seckillCount, | ||
|  |             'waitReview' => $waitReview, | ||
|  |             'refuseReview' => $refuseReview, | ||
|  |         ]; | ||
|  |     } | ||
|  | 
 | ||
|  |     public static function getTimeAll(){ | ||
|  |         $time_list =  SeckillTime::where(['del'=>0])->order('start_time asc')->select()->toArray(); | ||
|  |         foreach ($time_list as &$item){ | ||
|  |             $item['time'] = $item['start_time'].' ~ '.$item['end_time']; | ||
|  |         } | ||
|  |         return $time_list; | ||
|  |     } | ||
|  | 
 | ||
|  |     public static function goodsList($get) | ||
|  |     { | ||
|  |         $where = [ | ||
|  |             ['sg.del', '=', 0], | ||
|  |         ]; | ||
|  | 
 | ||
|  |         // 商品名称
 | ||
|  |         if(isset($get['name']) && !($get['name'] == '')) { | ||
|  |             $where[] = ['g.name', 'like', '%'.trim($get['name']).'%']; | ||
|  |         } | ||
|  | 
 | ||
|  |         // 参与日期
 | ||
|  |         if(isset($get['start_end']) && !empty($get['start_end'])) { | ||
|  |             $start_end = explode('~', $get['start_end']); | ||
|  |             $where[] = ['sg.start_date', '=', trim($start_end[0])]; | ||
|  |             $where[] = ['sg.end_date', '=', trim($start_end[1])]; | ||
|  |         } | ||
|  |         // 参与时段
 | ||
|  |         if(isset($get['seckill_id']) && !empty($get['seckill_id'])) { | ||
|  |             $where[] = ['sg.seckill_id', '=', $get['seckill_id']]; | ||
|  |         } | ||
|  | 
 | ||
|  |         $lists = SeckillGoods::alias('sg') | ||
|  |             ->leftJoin('seckill_time st', 'st.id=sg.seckill_id') | ||
|  |             ->leftJoin('goods g', 'sg.goods_id=g.id') | ||
|  |             ->leftJoin('shop s', 's.id=sg.shop_id') | ||
|  |             ->field('sg.seckill_id,sg.goods_id,review_status,review_desc,start_date,end_date,start_time,end_time,g.name,g.image,g.min_price,g.max_price,s.id as shop_id,s.name as shop_name,s.type as shop_type,s.logo as shop_logo') | ||
|  |             ->where($where) | ||
|  |             ->group('sg.seckill_id,sg.goods_id,review_status,review_desc,start_date,end_date,start_time,end_time,g.name,g.image,g.min_price,g.max_price,s.id,s.name,s.type,s.logo') | ||
|  |             ->order(['sg.id' => 'desc']) | ||
|  |             ->select() | ||
|  |             ->toArray(); | ||
|  |         // 按类型提取数据
 | ||
|  |         $unSeckill = []; | ||
|  |         $seckill = []; | ||
|  |         $waitReview = []; | ||
|  |         $refuseReview = []; | ||
|  |         $now = time(); | ||
|  |         $now_date = date('Y-m-d', $now); | ||
|  |         foreach($lists as $key => $item) { | ||
|  |             if($item['review_status'] == 0) { // 待审核
 | ||
|  |                 $waitReview[] = $item; | ||
|  |                 continue; | ||
|  |             }else if($item['review_status'] == 2){ // 审核拒绝
 | ||
|  |                 $refuseReview[] = $item; | ||
|  |                 continue; | ||
|  |             }else if($item['review_status'] == 1) { // 审核通过
 | ||
|  |                 $start_date_time = strtotime($item['start_date']. ' 00:00:00'); | ||
|  |                 $end_date_time = strtotime($item['end_date']. ' 23:59:59'); | ||
|  |                 // 日期校验
 | ||
|  |                 if($now >= $start_date_time && $now <= $end_date_time) { | ||
|  |                     $start_time = strtotime($now_date. ' '. $item['start_time']); | ||
|  |                     $end_time = strtotime($now_date. ' '. $item['end_time']); | ||
|  |                     if($now >= $start_time && $now <= $end_time) { | ||
|  |                         $seckill[] = $item; | ||
|  |                         continue; | ||
|  |                     }else{ | ||
|  |                         // 未在秒杀时段
 | ||
|  |                         $unSeckill[] = $item; | ||
|  |                         continue; | ||
|  |                     } | ||
|  |                 }else{ | ||
|  |                     // 未在秒杀时间日期
 | ||
|  |                     $unSeckill[] = $item; | ||
|  |                     continue; | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         switch($get['type']) { | ||
|  |             case 'seckill': | ||
|  |                 $lists = $seckill; | ||
|  |                 break; | ||
|  |             case 'un_seckill': | ||
|  |                 $lists = $unSeckill; | ||
|  |                 break; | ||
|  |             case 'wait_review': | ||
|  |                 $lists = $waitReview; | ||
|  |                 break; | ||
|  |             case 'refuse_review': | ||
|  |                 $lists = $refuseReview; | ||
|  |                 break; | ||
|  |         } | ||
|  |         // 组装信息
 | ||
|  |         $review_status_desc = ['待审核','审核通过','审核拒绝']; | ||
|  |         $shop_type_desc = [1=>'官方自营', 2=>'入驻商家']; | ||
|  |         foreach($lists as &$item) { | ||
|  |             $item['shop_logo'] = empty($item['shop_logo']) ? '' : UrlServer::getFileUrl($item['shop_logo']); | ||
|  |             // 秒杀价格
 | ||
|  |             $price = SeckillGoods::where([ | ||
|  |                 'del' => 0, | ||
|  |                 'seckill_id' => $item['seckill_id'], | ||
|  |                 'goods_id' => $item['goods_id'], | ||
|  |                 'start_date' => $item['start_date'], | ||
|  |                 'end_date' => $item['end_date'], | ||
|  |             ])->column('price', 'id'); | ||
|  |             $seckill_min_price = min($price); | ||
|  |             $seckill_max_price = max($price); | ||
|  |             $item['seckill_price'] = $seckill_min_price == $seckill_max_price ? '¥ ' .$seckill_min_price : '¥ '. $seckill_min_price . ' ~ ¥ ' . $seckill_max_price; | ||
|  |             // 商品价格
 | ||
|  |             $item['goods_price'] = $item['min_price'] == $item['max_price'] ? '¥ ' .$item['min_price'] : '¥ '. $item['min_price'] .' ~ ¥ '. $item['max_price']; | ||
|  |             // 参与日期
 | ||
|  |             $item['date'] = $item['start_date'] . ' ~ ' . $item['end_date']; | ||
|  |             // 参与时段
 | ||
|  |             $item['time'] = $item['start_time'] . ' ~ ' . $item['end_time']; | ||
|  |             // 审核状态
 | ||
|  |             $item['review_status_desc'] = $review_status_desc[$item['review_status']]; | ||
|  |             // 商家类型
 | ||
|  |             $item['shop_type_desc'] = $shop_type_desc[$item['shop_type']]; | ||
|  |         } | ||
|  | 
 | ||
|  |         // 分页
 | ||
|  |         $count = count($lists); | ||
|  |         $index = ($get['page'] -1) * $get['limit']; | ||
|  |         $lists = array_slice($lists, $index, $get['limit']); | ||
|  | 
 | ||
|  |         // 返回
 | ||
|  |         return [ | ||
|  |             'count' => $count, | ||
|  |             'lists' => $lists, | ||
|  |         ]; | ||
|  |     } | ||
|  | 
 | ||
|  |     public static function getSeckillGoods($id,$seckill_id, $start_date, $end_date){ | ||
|  |         $skill_goods = SeckillGoods::alias('sg') | ||
|  |             ->join('goods_item gi','sg.item_id = gi.id') | ||
|  |             ->join('shop s', 's.id=sg.shop_id') | ||
|  |             ->where(['sg.del'=>0,'sg.goods_id'=>$id,'sg.seckill_id'=>$seckill_id, 'sg.start_date'=>$start_date,'sg.end_date'=>$end_date]) | ||
|  |             ->field('sg.*,gi.image,gi.spec_value_str,gi.price as goods_price,s.name as shop_name') | ||
|  |             ->select() | ||
|  |             ->toArray(); | ||
|  | 
 | ||
|  |         $goods_id = $skill_goods[0]['goods_id']; | ||
|  |         $goods = Goods::where(['del'=>0,'id'=>$goods_id])->field('image,name')->find()->toArray(); | ||
|  | 
 | ||
|  |         foreach ($skill_goods as &$item){ | ||
|  |             $item['name'] = $goods['name']; | ||
|  |             if(!$item['image']){ | ||
|  |                 $item['image'] = $goods['image']; | ||
|  |             } | ||
|  | 
 | ||
|  |             $item['date'] = $item['start_date'] . ' ~ ' . $item['end_date']; | ||
|  |         } | ||
|  | 
 | ||
|  |         return $skill_goods; | ||
|  |     } | ||
|  | 
 | ||
|  |     public static function reAudit($post) | ||
|  |     { | ||
|  |         try{ | ||
|  |             $updateData = [ | ||
|  |                 'review_status' => 2, | ||
|  |                 'review_desc' => $post['reason'], | ||
|  |                 'update_time' => time() | ||
|  |             ]; | ||
|  |             $where = [ | ||
|  |                 'del' => 0, | ||
|  |                 'goods_id' => $post['goods_id'], | ||
|  |                 'seckill_id' => $post['seckill_id'], | ||
|  |                 'start_date' => $post['start_date'], | ||
|  |                 'end_date' => $post['end_date'], | ||
|  |             ]; | ||
|  |             SeckillGoods::where($where)->update($updateData); | ||
|  |             return true; | ||
|  |         }catch(\Exception $e) { | ||
|  |             self::$error = $e->getMessage(); | ||
|  |             return false; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     public static function audit($post) | ||
|  |     { | ||
|  |         try{ | ||
|  |             $updateData = [ | ||
|  |                 'review_status' => $post['audit_status'], | ||
|  |                 'review_desc' => $post['audit_remark'], | ||
|  |                 'update_time' => time() | ||
|  |             ]; | ||
|  |             $where = [ | ||
|  |                 'del' => 0, | ||
|  |                 'goods_id' => $post['goods_id'], | ||
|  |                 'seckill_id' => $post['seckill_id'], | ||
|  |                 'start_date' => $post['start_date'], | ||
|  |                 'end_date' => $post['end_date'], | ||
|  |             ]; | ||
|  |             SeckillGoods::where($where)->update($updateData); | ||
|  |             return true; | ||
|  |         }catch(\Exception $e) { | ||
|  |             self::$error = $e->getMessage(); | ||
|  |             return false; | ||
|  |         } | ||
|  |     } | ||
|  | } |