xieruidong 2 år sedan
förälder
incheckning
8469e370c5

+ 6 - 0
application/admin/controller/Goods.php

@@ -228,6 +228,12 @@ class Goods extends Backend
     public function goods_statistics($ids){
         $row=$this->model->find($ids);
         $this->assign('row',$row);
+        $time=input('time')?:sprintf('%s - %s',date('Y-m-d 00:00:00'),date('Y-m-d 23:59:59'));
+        $this->assign('time',$time);
+        $timeArr=explode(' - ',$time);
+        $this->assign('viewCount',$row->viewFavCart()->typeView()->filterDate($timeArr)->sum('num'));
+        $this->assign('favCount',$row->viewFavCart()->typeFav()->filterDate($timeArr)->sum('num'));
+        $this->assign('cartCount',$row->viewFavCart()->typeCart()->filterDate($timeArr)->sum('num'));
         return $this->fetch();
     }
 }

+ 7 - 1
application/admin/model/Goods.php

@@ -4,6 +4,7 @@ namespace app\admin\model;
 
 use app\common\model\Category;
 use think\Model;
+use think\model\relation\HasMany;
 
 
 class Goods extends \app\common\model\Goods
@@ -36,7 +37,12 @@ class Goods extends \app\common\model\Goods
     {
         return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
     }
-
+    /**
+     * @return HasMany|GoodsViewFavCart
+     */
+    public function viewFavCart(){
+        return $this->hasMany(GoodsViewFavCart::class);
+    }
 
     public function category(){
         return $this->belongsTo(Category::class)->setEagerlyType(0);

+ 47 - 0
application/admin/model/GoodsViewFavCart.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace app\admin\model;
+
+use think\db\Query;
+use think\Model;
+use app\common\model\Goods;
+/**
+ * @method Query|static typeView()
+ * @method Query|static typeFav()
+ * @method Query|static typeCart()
+ * @method Query|static filterDate($dateRange)
+ */
+class GoodsViewFavCart extends Model
+{
+    public function scopeTypeView(Query $query){
+        $query->where('type','view');
+    }
+    public function scopeTypeCart(Query $query){
+        $query->where('type','cart');
+    }
+    public function scopeTypeFav(Query $query){
+        $query->where('type','fav');
+    }
+    public function scopeFilterDate(Query $query,$dateRange){
+        $query->whereBetween('date',$dateRange);
+    }
+
+    public static function increment($goods,$type){
+        $goods_id=$goods instanceof Goods ?$goods['id']:$goods;
+        $date=date('Y-m-d');
+        $has=self::where('goods_id',$goods_id)
+            ->where('date',$date)
+            ->where('type',$type)
+            ->find();
+        if($has){
+            $has->setInc('num');
+        }else{
+            self::create([
+                'goods_id'=>$goods_id,
+                'date'=>$date,
+                'type'=>$type,
+                'num'=>1,
+            ]);
+        }
+    }
+}

+ 12 - 3
application/admin/view/goods/goods_statistics.html

@@ -1,12 +1,21 @@
-<form class="form-inline" role="form">
+<form class="form-inline form" role="form">
     <div class="form-group">
         <label for="time">时间段</label>
-        <input type="text" class="form-control datetimerange" id="time" placeholder="选择时间">
+        <input type="text" name="time" value="{$time}" class="form-control datetimerange" id="time" placeholder="选择时间" style="width: 300px;">
     </div>
     <div class="form-group" style="text-align: right">
-        <button type="submit" class="btn btn-primary">确定</button>
+        <button type="submit" class="btn btn-primary doSearch">确定</button>
     </div>
+    <input type="hidden" name="dialog" value="{:input('dialog')}">
 </form>
 <table id="table" class="table table-bordered table-hover table-nowrap" width="100%">
     <tr><td><b>商品名称</b></td><td>{$row.name}</td></tr>
+    <tr><td><b>浏览量</b></td><td>{$viewCount}</td></tr>
+    <tr><td><b>收藏量</b></td><td>{$favCount}</td></tr>
+    <tr><td><b>添加购物车量</b></td><td>{$cartCount}</td></tr>
 </table>
+<style>
+    #table{
+        margin-top: 20px;
+    }
+</style>

+ 2 - 0
application/api/controller/mall/Goods.php

@@ -2,6 +2,7 @@
 
 namespace app\api\controller\mall;
 
+use app\admin\model\GoodsViewFavCart;
 use app\common\controller\Api;
 use app\common\model\Category;
 use app\common\model\GoodsSku;
@@ -77,6 +78,7 @@ class Goods extends Api
             }
         }
         $goods['favourite']=$fav;
+        GoodsViewFavCart::increment($goods,'view');
         $this->success('',$goods);
     }
 

+ 2 - 0
application/api/controller/mall/GoodsCart.php

@@ -2,6 +2,7 @@
 
 namespace app\api\controller\mall;
 
+use app\admin\model\GoodsViewFavCart;
 use app\common\controller\Api;
 use app\common\model\Coupon;
 use app\common\model\GoodsSku;
@@ -54,6 +55,7 @@ class GoodsCart extends Api
                     'num_install'=>$goods[$sku['id']]['num_install'],
                 ]);
             }
+            GoodsViewFavCart::increment($sku['goods_id'],'cart');
             $sku->save();
         }
         Db::commit();

+ 3 - 1
application/api/controller/mall/GoodsFav.php

@@ -2,6 +2,7 @@
 
 namespace app\api\controller\mall;
 
+use app\admin\model\GoodsViewFavCart;
 use app\common\controller\Api;
 use app\common\model\GoodsSku;
 
@@ -42,13 +43,14 @@ class GoodsFav extends Api
             'goods_id'=>['require'],
             'goods_sku_id'=>['require'],
         ]);
-        GoodsSku::where('goods_id',$data['goods_id'])->where('id',$data['goods_sku_id'])->findOrFail();
+        $sku=GoodsSku::where('goods_id',$data['goods_id'])->where('id',$data['goods_sku_id'])->findOrFail();
         if(!$user->favourite()->where('fav_id',$data['goods_id'])->where('goods_sku_id',$data['goods_sku_id'])->find()){
             $user->favourite()->save([
                 'fav_type'=>'goods',
                 'fav_id'=>$data['goods_id'],
                 'goods_sku_id'=>$data['goods_sku_id'],
             ]);
+            GoodsViewFavCart::increment($sku['goods_id'],'fav');
         }
         $this->success();
     }

+ 6 - 2
public/assets/js/backend/goods.js

@@ -61,7 +61,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                                     classname: 'btn btn-xs btn-info btn-dialog',
                                     icon: 'fa',
                                     url: extend.statistics_url,
-                                    extend:`data-area='["700px","80%"]'`,
+                                    extend:`data-area='["800px","80%"]'`,
                                     callback: function (data) {
                                     },
                                     visible: function (row) {
@@ -95,7 +95,11 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
             Controller.api.bindevent();
         },
         goods_statistics(){
-            Controller.api.bindevent();
+            //Controller.api.bindevent();
+            Form.events.daterangepicker($('.form'))
+            $('.doSearch').click(()=>{
+                layer.load()
+            })
         },
         editor(){
             $('.btnAddSku').click(function (){