stanley-king 8 anni fa
parent
commit
025c6c5d1a

+ 8 - 2
crontab/control/date.php

@@ -9,7 +9,9 @@
  */
 defined('InShopNC') or exit('Access Invalid!');
 
-require_once(BASE_ROOT_PATH.'/helper/notify_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/notify_helper.php');
+require_once(BASE_ROOT_PATH . '/helper/stat_helper.php');
+
 
 class dateControl extends BaseCronControl
 {
@@ -100,11 +102,15 @@ class dateControl extends BaseCronControl
     {
         //已领取但未使用的红包过期通知
         $this->bonus_expire_notify();
-
         //商品到货通知提醒
         $this->_arrival_notice();
     }
 
+    public function t23_50_clockOp()
+    {
+        bonus_helper::onDaiyMember(time());
+    }
+
     /**
      * 未付款订单超期自动关闭
      */

+ 3 - 2
data/logic/queue.logic.php

@@ -612,15 +612,16 @@ class queueLogic
         }
     }
 
-    public function invate_user_register($param)
+    public function invite_user_register($param)
     {
         $member_id = $param['member_id'];
         $relay_id  = $param['relay_id'];
         $password  = $param['password'];
         if($member_id < 0) {
-            return callback(false,"invate_user_register 错误的member_id");
+            return callback(false,"invite_user_register 错误的member_id");
         }
         login_helper::onInvite($member_id,$relay_id,$password);
+
         return callback(true);
     }
 

+ 1 - 1
helper/login/ilogin.php

@@ -33,7 +33,7 @@ abstract class ILogin
     }
 
     abstract public function ismember();
-    abstract public function register($passwd,$user_info);
+    abstract public function register($passwd,$user_info,$relay_id = null);
 
     public function login()
     {

+ 1 - 1
helper/login/memberid_log.php

@@ -20,7 +20,7 @@ class memberid_log extends ILogin
     {
     }
 
-    public function register($passwd,$user_info)
+    public function register($passwd,$user_info,$relay_id = null)
     {
     }
 }

+ 4 - 1
helper/login/mobile_log.php

@@ -29,13 +29,16 @@ class mobile_log extends ILogin
             return true;
         }
     }
-    public function register($passwd,$user_info)
+    public function register($passwd,$user_info,$relay_id = null)
     {
         $info['member_mobile'] = $this->mMobile;
         $info['member_type'] = ILogin::mobile_login;
         $info['member_passwd'] =  $passwd;
         $info['member_name'] =  $this->mMobile;
         $info['member_mobile_bind'] = 1;
+        if(!is_null($relay_id) && intval($relay_id) > 0) {
+            $info['inviter_id'] = $relay_id;
+        }
 
         if(empty($user_info)) {
             $info['member_sex'] = 0;

+ 1 - 1
helper/login/openid_log.php

@@ -29,7 +29,7 @@ class openid_log extends ILogin
             return true;
         }
     }
-    public function register($passwd,$user_info)
+    public function register($passwd,$user_info,$relay_id = null)
     {
 
     }

+ 1 - 1
helper/login/unionid_log.php

@@ -30,7 +30,7 @@ class unionid_log extends ILogin
             return true;
         }
     }
-    public function register($passwd,$user_info)
+    public function register($passwd,$user_info,$relay_id = null)
     {
 
     }

+ 1 - 1
helper/login/userinfo_log.php

@@ -34,7 +34,7 @@ class userinfo_log extends ILogin
         }
     }
 
-    public function register($passwd,$user_info)
+    public function register($passwd,$user_info,$relay_id = null)
     {
 
     }

+ 2 - 2
helper/login_helper.php

@@ -34,9 +34,9 @@ class login_helper
         {
             $passwd = $code . substr($mobile, -4);
             $user_info = self::user_info();
-            if($logger->register($passwd,$user_info) != false)
+            if($logger->register($passwd,$user_info,$relay_id) != false)
             {
-                QueueClient::push('invate_user_register',['member_id' => $logger->memberid(),'relay_id' => $relay_id,'password' => $passwd]);
+                QueueClient::push('invite_user_register',['member_id' => $logger->memberid(),'relay_id' => $relay_id,'password' => $passwd]);
                 unset($_SESSION['wx_author']);
                 return $logger->login();
             }

+ 25 - 0
helper/stat_helper.php

@@ -8,6 +8,7 @@
 
 require_once (BASE_ROOT_PATH . '/helper/statistics/stat_base.php');
 require_once (BASE_ROOT_PATH . '/helper/statistics/stbonus.php');
+require_once (BASE_ROOT_PATH . '/helper/statistics/stmember.php');
 
 class stat_helper
 {
@@ -55,4 +56,28 @@ class stat_helper
             Log::record($ex->getMessage(),Log::DEBUG);
         }
     }
+    public static function onInvite()
+    {
+        try
+        {
+            $stat = new statistics\stmember(time());
+            $stat->onInvite();
+        }
+        catch(Exception $ex)
+        {
+            Log::record($ex->getMessage(),Log::DEBUG);
+        }
+    }
+    public static function onDaiyMember($time)
+    {
+        try
+        {
+            $stat = new statistics\stmember($time);
+            $stat->daily();
+        }
+        catch(Exception $ex)
+        {
+            Log::record($ex->getMessage(),Log::DEBUG);
+        }
+    }
 }

+ 17 - 0
helper/statistics/stat_base.php

@@ -9,6 +9,8 @@
 namespace statistics;
 
 use Exception;
+use DateTime;
+use DateInterval;
 
 class stat_base
 {
@@ -22,8 +24,12 @@ class stat_base
     protected $mEndtm;
     protected $mDateId;
 
+    protected $mModel;
+
     public function __construct($stime)
     {
+        $this->mModel = Model('stat_daily');
+
         $stime = intval($stime);
         $this->mDateId = strtotime(date('Y-m-d',$stime));
 
@@ -69,4 +75,15 @@ class stat_base
 
         return true;
     }
+
+    protected function save($fEdit,$datas)
+    {
+        if($fEdit) {
+            $ret = $this->mModel->where(['date_id' => $this->mDateId])->update($datas);
+        } else {
+            $datas['date_id'] = $this->mDateId;
+            $ret = $this->mModel->insert($datas);
+        }
+        return $ret;
+    }
 }

+ 60 - 0
helper/statistics/stat_order.php

@@ -0,0 +1,60 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/5/27
+ * Time: 下午5:09
+ */
+
+namespace statistics;
+
+use Log;
+
+class stat_order extends stat_base
+{
+    public function __construct($stime)
+    {
+        parent::__construct($stime);
+    }
+
+    /*
+    order_total_num int default '0' null comment '订单总数',
+	order_amount decimal(10,2) default '0.00' null comment '订单总额',
+	order_member_num int default '0' null comment '下单人员数',
+	order_price_avg decimal(10,2) default '0.00' null comment '客单价',
+	order_goods_num int default '0' null comment '订单总商品数目',
+	goods_num int default '0' null comment '商品总数',
+     */
+    public function daily()
+    {
+        $this->order_info();
+
+    }
+
+    private function order_info()
+    {
+        $model = Model('stat');
+        $this->calc_time(stat_base::cur_date_type);
+
+        $where = array();
+        $where['order_isvalid'] = 1;//计入统计的有效订单
+        $where['order_add_time'] = ['between',[$this->mStartm,$this->mEndtm]];
+        $field = ' COUNT(*) as ordernum, SUM(order_amount) as orderamount, COUNT(DISTINCT buyer_id) as ordermembernum, AVG(order_amount) as orderavg ';
+        $stat_order = $model->getoneByStatorder($where, $field);
+
+        if(empty($stat_order)) {
+            return false;
+        }
+        else
+        {
+            $result = $this->mModel->get_one($this->mDateId,'invite_user_count');
+            $fEdit = empty($result) ? false : true;
+
+            $datas['order_total_num'] = ($t = $stat_order['ordernum'])?$t:0;
+            $datas['order_amount'] = ncPriceFormat(($t = $stat_order['orderamount'])?$t:(0));
+            $datas['order_member_num'] = ($t = $stat_order['ordermembernum'])?$t:0;
+            $datas['order_price_avg'] = ncPriceFormat(($t = $stat_order['orderavg'])?$t:0);
+            return $this->save($fEdit,$datas);
+        }
+    }
+}

+ 5 - 20
helper/statistics/stbonus.php

@@ -11,27 +11,22 @@ namespace statistics;
 use Log;
 class stbonus extends stat_base
 {
-    private $mModel;
     public function __construct($stime)
     {
         parent::__construct($stime);
-        $this->mModel = Model('stat_daily');
     }
 
     public function add_paied($rate,$amount)
     {
-        $result = $this->mModel->get_one($this->mDateId,'bonus_pay_amount,person_send_amount');
+        $result = $this->mModel->get_one($this->mDateId, 'bonus_pay_amount,person_send_amount');
         $fEdit = empty($result) ? false : true;
 
-        if(empty($result) || empty($result['bonus_pay_amount']))
-        {
+        if (empty($result) || empty($result['bonus_pay_amount'])) {
             $pay_amount = [];
             $pay_amount[$rate] = $amount;
-        }
-        else
-        {
+        } else {
             $pay_amount = unserialize($result['bonus_pay_amount']);
-            if(array_key_exists($rate,$pay_amount)) {
+            if (array_key_exists($rate, $pay_amount)) {
                 $pay_amount[$rate] += $amount;
             } else {
                 $pay_amount[$rate] = $amount;
@@ -39,17 +34,7 @@ class stbonus extends stat_base
         }
 
         $datas['bonus_pay_amount'] = serialize($pay_amount);
-        $this->save($fEdit,$datas);
-    }
-
-    private function save($fEdit,$datas)
-    {
-        if($fEdit) {
-            $this->mModel->where(['date_id' => $this->mDateId])->update($datas);
-        } else {
-            $datas['date_id'] = $this->mDateId;
-            $this->mModel->insert($datas);
-        }
+        $this->save($fEdit, $datas);
     }
 
     public function add_send($rate,$amount)

+ 62 - 5
helper/statistics/stmember.php

@@ -8,19 +8,76 @@
 
 namespace statistics;
 
-use Log;
-
-class stmember
+class stmember extends stat_base
 {
-    private $mModel;
     public function __construct($stime)
     {
         parent::__construct($stime);
-        $this->mModel = Model('stat_daily');
     }
 
+    /*
+    member_total_num int default '0' null comment '月活',
+    day_active_member int default '0' null comment '日活用户数',
+    week_active_member int default '0' null,
+    halfmoon_active_member int default '0' null,
+    month_active_member int default '0' null comment '月活用户数',
+    */
     public function daily()
     {
+        $this->active_member(stat_base::cur_date_type,'day_active_member');
+        $this->active_member(stat_base::last_week_type,'week_active_member');
+        $this->active_member(stat_base::last_hmonth_type,'halfmoon_active_member');
+        $this->active_member(stat_base::last_month_type,'month_active_member');
+        $this->total_member();
+    }
+
+    private function active_member($type,$name)
+    {
+        $this->calc_time($type);
+        $mod_member = Model('member');
+        $count = $mod_member->where(['member_login_time' => ['between',[$this->mStartm,$this->mEndtm]]])->count();
+
+        if(empty($count)) {
+            return false;
+        }
+        else
+        {
+            $result = $this->mModel->get_one($this->mDateId,'invite_user_count');
+            $fEdit = empty($result) ? false : true;
+
+            $datas[$name] = intval($count);
+            return $this->save($fEdit,$datas);
+        }
+    }
+
+    private function total_member()
+    {
+        $mod_member = Model('member');
+        $count = $mod_member->count();
+
+        if(empty($count)) {
+            return false;
+        }
+        else
+        {
+            $result = $this->mModel->get_one($this->mDateId,'invite_user_count');
+            $fEdit = empty($result) ? false : true;
+
+            $datas['member_total_num'] = intval($count);;
+            return $this->save($fEdit,$datas);
+        }
+    }
+
+    public function onInvite()
+    {
+        $result = $this->mModel->get_one($this->mDateId,'invite_user_count');
+        $fEdit = empty($result) ? false : true;
+        if($fEdit) {
+            $datas['invite_user_count'] = 1;
+        } else {
+            $datas['invite_user_count'] = $result[0]['invite_user_count'] + 1;
+        }
 
+        $this->save($fEdit,$datas);
     }
 }

+ 7 - 1
test/DBTest.php

@@ -28,6 +28,12 @@ class DBTest extends PHPUnit_Framework_TestCase
         $result = $bonus_type->field('*')->where(['send_start_date' => ['between',[1495592858,1495601456]]])->limit(false)->select();
     }
 
+    public function testCount()
+    {
+        $mod_member = Model('member');
+        $num = $mod_member->count();
+    }
+
     public function testQuery()
     {
 //        $sql = "select * from lrlz_user_bonus where type_id=\'{$type_id}\' and \'session_id=\'{$sess_id}\' order by bonus_status asc,bonus_id asc limit 1";
@@ -181,7 +187,7 @@ class DBTest extends PHPUnit_Framework_TestCase
         $itermb = $mod_member->field('member_id,member_sex')->table('member')->order('member_id desc,member_sex asc')->limit(50)->select();
     }
 
-    public function testCount()
+    public function testxCount()
     {
         $mod_member = Model('member');
         $num = $mod_member->count();

+ 6 - 0
test/TestStat.php

@@ -22,4 +22,10 @@ class TestStat extends PHPUnit_Framework_TestCase
         $param = ['time' => time(),'use_type' => 2,'rate' => 30,'amount' => 50,'member_id' => 0];
         stat_helper::onUseBonus($param);
     }
+    public function testMember()
+    {
+        $cur_date = new DateTime();
+        $cur_date->setDate(2016,8,20);
+        stat_helper::onDaiyMember($cur_date->getTimestamp());
+    }
 }