| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- <?php
- /**
- *
- * @author: xaboy<365615158@qq.com>
- * @day: 2017/12/18
- */
- namespace app\routine\model\store;
- use basic\ModelBasic;
- class StoreSeckill extends ModelBasic
- {
- protected function getImagesAttr($value)
- {
- return json_decode($value,true)?:[];
- }
- /**
- * 获取所有秒杀产品
- * @param string $field
- * @return array
- */
- public static function getListAll($offset = 0,$limit = 10,$field = 'id,product_id,image,title,price,ot_price,start_time,stop_time,stock,sales'){
- $time = time();
- $model = self::where('is_del',0)->where('status',1)->where('stock','>',0)->field($field)
- ->where('start_time','<',$time)->where('stop_time','>',$time)->order('sort DESC,add_time DESC');
- $model = $model->limit($offset,$limit);
- $list = $model->select();
- if($list) return $list->toArray();
- else return [];
- }
- /**
- * 获取热门推荐的秒杀产品
- * @param int $limit
- * @param string $field
- * @return array
- */
- public static function getHotList($limit = 0,$field = 'id,product_id,image,title,price,ot_price,start_time,stop_time,stock')
- {
- $time = time();
- $model = self::where('is_hot',1)->where('is_del',0)->where('status',1)->where('stock','>',0)->field($field)
- ->where('start_time','<',$time)->where('stop_time','>',$time)->order('sort DESC,add_time DESC');
- if($limit) $model->limit($limit);
- $list = $model->select();
- if($list) return $list->toArray();
- else return [];
- }
- /**
- * 获取一条秒杀产品
- * @param $id
- * @param string $field
- * @return array|false|\PDOStatement|string|\think\Model
- */
- public static function getValidProduct($id,$field = '*')
- {
- $time = time();
- return self::where('id',$id)->where('is_del',0)->where('status',1)->where('start_time','<',$time)->where('stop_time','>',$time)
- ->field($field)->find();
- }
- public static function initFailSeckill()
- {
- self::where('is_hot',1)->where('is_del',0)->where('status','<>',1)->where('stop_time','<',time())->update(['status'=>'-1']);
- }
- public static function idBySimilaritySeckill($id,$limit = 4,$field='*')
- {
- $time = time();
- $list = [];
- $productId = self::where('id',$id)->value('product_id');
- if($productId){
- $list = array_merge($list, self::where('product_id',$productId)->where('id','<>',$id)
- ->where('is_del',0)->where('status',1)->where('stock','>',0)
- ->field($field)->where('start_time','<',$time)->where('stop_time','>',$time)
- ->order('sort DESC,add_time DESC')->limit($limit)->select()->toArray());
- }
- $limit = $limit - count($list);
- if($limit){
- $list = array_merge($list,self::getHotList($limit,$field));
- }
- return $list;
- }
- public static function getProductStock($id){
- $stock = self::where('id',$id)->value('stock');
- if(self::where('id',$id)->where('num','gt',$stock)->count()){//单次购买的产品多于库存
- return $stock;
- }else{
- return self::where('id',$id)->value('num');
- }
- }
- /**
- * 修改秒杀库存
- * @param int $num
- * @param int $seckillId
- * @return bool
- */
- public static function decSeckillStock($num = 0,$seckillId = 0){
- $res = false !== self::where('id',$seckillId)->dec('stock',$num)->inc('sales',$num)->update();
- return $res;
- }
- }
|