初始上传

This commit is contained in:
2026-04-04 17:27:12 +08:00
parent 4d80d28eb4
commit b7e11774ee
11191 changed files with 1588469 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\stat;
use app\model\BaseModel;
use app\model\system\Stat;
/**
* 购物车统计
* @author Administrator
*
*/
class GoodsCartStat extends BaseModel
{
/**
* 用于订单(同与订单支付后调用)
* @param $params
* @return array
*/
public function addGoodsCartStat($params)
{
$stat_model = new Stat();
$result = $stat_model->addShopStat($params);
return $result;
}
}

194
app/model/stat/GoodsStat.php Executable file
View File

@@ -0,0 +1,194 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\stat;
use app\model\BaseModel;
use app\model\system\Stat;
use Carbon\Carbon;
/**
* 统计
* @author Administrator
*
*/
class GoodsStat extends BaseModel
{
/**
* 用于订单(同与订单支付后调用)
* @param $params
* @return array
*/
public function addGoodsStat($params)
{
$stat_model = new Stat();
$result = $stat_model->addShopStat($params);
return $result;
}
/**
* 商品增加收藏量
* @param $params
* @return array
*/
public function addGoodsCollectStat($params)
{
$stat_model = new Stat();
$result = $stat_model->addShopStat($params);
return $result;
}
/**
* 增加访问数
* @param $params
* @return array
*/
public function addGoodsVisit($params)
{
$member_id = $params[ 'member_id' ] ?? 0;
$goods_id = $params[ 'goods_id' ] ?? 0;
$data = array (
'site_id' => $params[ 'site_id' ],
'goods_visit_count' => 1
);
$stat_model = new Stat();
$time_region = getDayStartAndEndTime();
$today_start_time = $time_region[ 'start_time' ];
$today_end_time = $time_region[ 'end_time' ];
if ($goods_id > 0) {
$goods_browse_condition = array (
[ 'goods_id', '=', $goods_id ],
[ 'browse_time', 'between', [ $today_start_time, $today_end_time ] ],
);
$info = model('goods_browse')->getInfo($goods_browse_condition);
if (empty($info)) {
$data[ 'goods_visited_type_count' ] = 1;
}
}
if ($member_id > 0) {
$member_browse_condition = array (
[ 'member_id', '=', $member_id ],
[ 'browse_time', 'between', [ $today_start_time, $today_end_time ] ],
);
$info = model('goods_browse')->getInfo($member_browse_condition);
if (empty($info)) {
$data[ 'goods_visit_member_count' ] = 1;
}
}
$result = $stat_model->addShopStat($data);
return $result;
}
/**
* 商品上架商品统计
* @param $params
* @return array|void
*/
public function addGoodsOnStat($params)
{
$site_id = $params[ 'site_id' ];
//查询当前的已上架商品
$goods_on_condition = array (
[ 'goods_state', '=', 1 ],
[ 'is_delete', '=', 0 ],
[ 'site_id', '=', $site_id ]
);
$count = model('goods')->getCount($goods_on_condition);
$carbon = Carbon::now();
$condition = [
[ 'site_id', '=', $site_id ],
[ 'year', '=', $carbon->year ],
[ 'month', '=', $carbon->month ],
[ 'day', '=', $carbon->day ],
[ 'goods_on_type_count', '>', 0 ]
];
$info = model('stat_shop')->getInfo($condition, 'goods_on_type_count') ?? [];
$o_count = $info[ 'goods_on_type_count' ] ?? 0;
$data = [
'site_id' => $site_id,
];
$diff_count = $count - $o_count;
if ($diff_count != 0) {
$data[ 'goods_on_type_count' ] = $diff_count;
$stat_model = new Stat();
$result = $stat_model->addShopStat($data);
return $result;
}
}
/**
* 销售额统计
* @param $params
* @return array
*/
public function getGoodsOrderMoneyStat($params)
{
$start_time = $params[ 'start_time' ];
$end_time = $params[ 'end_time' ];
$condition = array (
[ 'o.create_time', 'between', [ $start_time, $end_time ] ],
[ 'o.pay_status', '=', 1 ]
);
$site_id = $params[ 'site_id' ] ?? 0;
if ($site_id > 0) {
$condition[] = [ 'o.site_id', '=', $site_id ];
}
$alias = 'og';
$join = [
[
'order o',
'o.order_id = og.order_id',
'inner'
],
];
$list = model('order_goods')->getList($condition, 'sum(og.goods_money) as total_money, og.sku_name, og.goods_id, og.sku_id, og.sku_image', 'total_money desc', $alias, $join, 'og.goods_id', $params[ 'limit' ]);
return $this->success($list);
}
/**
* 销售量统计
* @param $params
* @return array
*/
public function getGoodsOrderNumStat($params)
{
$start_time = $params[ 'start_time' ];
$end_time = $params[ 'end_time' ];
$condition = array (
[ 'o.create_time', 'between', [ $start_time, $end_time ] ],
[ 'o.pay_status', '=', 1 ]
);
$site_id = $params[ 'site_id' ] ?? 0;
if ($site_id > 0) {
$condition[] = [ 'o.site_id', '=', $site_id ];
}
$alias = 'og';
$join = [
[
'order o',
'o.order_id = og.order_id',
'inner'
],
];
$list = model('order_goods')->getList($condition, 'sum(og.num) as total_num, og.sku_name, og.goods_id, og.sku_id, og.sku_image', 'total_num desc', $alias, $join, 'og.goods_id', $params[ 'limit' ]);
return $this->success($list);
}
}

View File

@@ -0,0 +1,53 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\stat;
use app\model\BaseModel;
use app\model\system\Stat;
/**
* 统计
* @author Administrator
*
*/
class MemberLevelStat extends BaseModel
{
/**
* 用于订单(同与订单支付后调用)
* @param $params
* @return array
*/
public function addMemberLevelOrderStat($params)
{
$order_id = $params[ 'order_id' ];
$site_id = $params[ 'site_id' ] ?? 0;
$order_condition = array (
[ 'order_id', '=', $order_id ],
[ 'site_id', '=', $site_id ]
);
$order_info = model('member_level_order')->getInfo($order_condition);
if (empty($order_info))
return $this->error();
$order_money = $order_info[ 'order_money' ];
$stat_data = array (
'site_id' => $site_id,
'member_level_count' => 1,
'member_level_total_money' => $order_money
);
$stat_model = new Stat();
$result = $stat_model->addShopStat($stat_data);
return $result;
}
}

42
app/model/stat/MemberStat.php Executable file
View File

@@ -0,0 +1,42 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\stat;
use app\model\BaseModel;
use app\model\system\Stat;
/**
* 统计
* @author Administrator
*
*/
class MemberStat extends BaseModel
{
/**
* 用于新增会员(便于之后扩展统计各个场景添加的会员)
* @param $params
* @return array
*/
public function addMemberStat($params)
{
$member_id = $params[ 'member_id' ] ?? 0;
$site_id = $params[ 'site_id' ] ?? 0;
$stat_data = array (
'site_id' => $site_id,
'member_count' => 1
);
$stat_model = new Stat();
$result = $stat_model->addShopStat($stat_data);
return $result;
}
}

View File

@@ -0,0 +1,56 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\stat;
use app\model\BaseModel;
use app\model\system\Stat;
use think\facade\Log;
/**
* 会员提现统计
* @author Administrator
*
*/
class MemberWithdrawStat extends BaseModel
{
/**
* 用于会员提现
* @param $params
* @return array
*/
public function addMemberWithdrawStat($params)
{
$id = $params[ 'id' ];
$site_id = $params[ 'site_id' ] ?? 0;
$condition = array (
[ 'id', '=', $id ],
[ 'site_id', '=', $site_id ]
);
$info = model('member_withdraw')->getInfo($condition);
if (empty($info))
return $this->error();
$member_withdraw_total_money = $info[ 'apply_money' ];
$stat_data = array (
'site_id' => $site_id,
'member_withdraw_count' => 1,
'member_withdraw_total_money' => $member_withdraw_total_money
);
$stat_model = new Stat();
Log::write('addMemberWithdrawStat' . json_encode($stat_data));
$result = $stat_model->addShopStat($stat_data);
return $result;
}
}

221
app/model/stat/OrderStat.php Executable file
View File

@@ -0,0 +1,221 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\stat;
use app\model\BaseModel;
use app\model\system\Stat;
use app\model\store\Stat as StoreStat;
/**
* 统计
* @author Administrator
*
*/
class OrderStat extends BaseModel
{
/**
* 用于订单(同与订单创建后调用)
* @param $params
* @return array
*/
public function addOrderCreateStat($params)
{
$order_id = $params[ 'order_id' ];
$site_id = $params[ 'site_id' ] ?? 0;
$order_condition = array (
[ 'order_id', '=', $order_id ],
);
if ($site_id > 0) {
$order_condition[] = [ 'site_id', '=', $site_id ];
}
$order_info = $params['order_data'] ?? [];
if(empty($order_info)){
$order_info = model('order')->getInfo($order_condition);
if (empty($order_info))
return $this->error();
}
$order_create_money = $order_info[ 'order_money' ];
$goods_num = numberFormat($order_info[ 'goods_num' ]);
//如果是第一笔订单才能累加下单会员数
$time_region = getDayStartAndEndTime();
$today_start_time = $time_region[ 'start_time' ];
$today_end_time = $time_region[ 'end_time' ];
$stat_data = array (
'site_id' => $site_id,
'order_create_count' => 1,//下单数
'order_create_money' => $order_create_money,// 销售额 order_money
'goods_order_count' => $goods_num,
);
//订单商品种数
$order_goods_ids = model('order_goods')->getColumn($order_condition, 'goods_id');
$order_goods_ids = array_unique($order_goods_ids);
$other_order_condition = array (
[ 'order_id', '<>', $order_id ],
[ 'goods_id', 'in', $order_goods_ids ],
[ 'create_time', 'between', [ $today_start_time, $today_end_time ] ],
);
$other_order_goods_ids = model('order_goods')->getColumn($other_order_condition, 'goods_id');
$other_order_goods_ids = array_unique($other_order_goods_ids);
$goods_order_type_count = count($order_goods_ids) - count($other_order_goods_ids);
if ($goods_order_type_count > 0) {
$stat_data[ 'goods_order_type_count' ] = $goods_order_type_count;
}
$stat_model = new Stat();
$result = $stat_model->addShopStat($stat_data);
return $result;
}
/**
* 用于订单(同与订单支付后调用)
* @param $params
* @return array
*/
public function addOrderPayStat($params)
{
$order_id = $params[ 'order_id' ];
$site_id = $params[ 'site_id' ] ?? 0;
$order_condition = array (
[ 'order_id', '=', $order_id ],
);
if ($site_id > 0) {
$order_condition[] = [ 'site_id', '=', $site_id ];
}
$order_info = model('order')->getInfo($order_condition);
if (empty($order_info))
return $this->error();
$order_money = $order_info[ 'order_money' ];
$pay_money = $order_info[ 'pay_money' ];
$member_id = $order_info[ 'member_id' ];
$delivery_money = $order_info[ 'delivery_money' ];
$goods_num = numberFormat($order_info[ 'goods_num' ]);
//如果是第一笔订单才能累加下单会员数
$time_region = getDayStartAndEndTime();
$today_start_time = $time_region[ 'start_time' ];
$today_end_time = $time_region[ 'end_time' ];
$today_order_condition = array (
[ 'member_id', '=', $member_id ],
[ 'pay_time', 'between', [ $today_start_time, $today_end_time ] ],
[ 'order_id', '<>', $order_id ]
);
$balance_deduction = 0.00;
$pay_info = model('pay')->getInfo([['out_trade_no', '=', $order_info['out_trade_no']]], 'balance, balance_money');
if(!empty($pay_info)) $balance_deduction = $pay_info['balance'] + $pay_info['balance_money'];
$stat_data = array (
'site_id' => $site_id,
'order_pay_count' => 1,
'order_total' => $order_money,
'shipping_total' => $delivery_money,
'goods_pay_count' => $goods_num,
'order_pay_money' => $pay_money,
'balance_deduction' => $balance_deduction
);
$count = model('order')->getCount($today_order_condition);
if ($count == 0) {
$stat_data[ 'order_member_count' ] = 1;
}
//销售量 order_num
//销售额 order_money
$stat_model = new Stat();
$result = $stat_model->addShopStat($stat_data);
//门店销售额
$store_id = $order_info[ 'store_id' ] ?? 0;
if ($store_id > 0) {
$store_stat_model = new \app\model\store\Stat();
$store_stat_model->addStoreStat(
[
'site_id' => $site_id,
'store_id' => $store_id,
'online_pay_money' => $pay_money,
'balance_deduction' => $balance_deduction
]
);
}
return $result;
}
/**
* 退款维权统计
* @param $params
* @return array
*/
public function addOrderRefundStat($params)
{
$order_goods_id = $params[ 'order_goods_id' ];
$site_id = $params[ 'site_id' ] ?? 0;
$order_goods_condition = array (
[ 'order_goods_id', '=', $order_goods_id ],
);
if ($site_id > 0) {
$order_goods_condition[] = [ 'site_id', '=', $site_id ];
}
$order_goods_info = model('order_goods')->getInfo($order_goods_condition);
if (empty($order_goods_info))
return $this->error();
$order_condition = array (
[ 'order_id', '=', $order_goods_info[ 'order_id' ] ],
);
if ($site_id > 0) {
$order_condition[] = [ 'site_id', '=', $site_id ];
}
$order_info = model('order')->getInfo($order_condition);
if (empty($order_info))
return $this->error();
$stat_data = array (
'site_id' => $site_id,
'order_refund_count' => 1
);
//todo 统计的时候用的是真实退款还是总退款(包含抵扣项)
$refund_money = $params[ 'refund_pay_money' ];
$stat_data[ 'refund_total' ] = $refund_money;
$stat_model = new Stat();
$result = $stat_model->addShopStat($stat_data);
// 门店退款统计
if ($order_goods_info[ 'store_id' ]) {
$order_scene = model('order')->getValue([ [ 'order_id', '=', $order_goods_info[ 'order_id' ] ] ], 'order_scene');
if ($order_scene == 'cashier') {
( new StoreStat() )->addStoreStat([
'site_id' => $site_id,
'store_id' => $order_goods_info[ 'store_id' ],
'refund_count' => 1,
'refund_money' => $refund_money
]);
}
}
//门店退款额
$store_id = $order_info[ 'store_id' ] ?? 0;
if ($store_id > 0 && $order_info['order_scene'] == 'online') {
$store_stat_model = new \app\model\store\Stat();
$store_stat_model->addStoreStat(
[
'site_id' => $site_id,
'store_id' => $store_id,
'online_refund_money' => $refund_money
]
);
}
return true;
}
}

70
app/model/stat/RechargeStat.php Executable file
View File

@@ -0,0 +1,70 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\stat;
use app\model\BaseModel;
use app\model\system\Stat;
/**
* 储值统计
* @author Administrator
*
*/
class RechargeStat extends BaseModel
{
/**
* 用于充值订单(同与订单支付后调用)
* @param $params
* @return array
*/
public function addRechargeStat($params)
{
$order_id = $params[ 'order_id' ];
$site_id = $params[ 'site_id' ] ?? 0;
$order_condition = array (
[ 'order_id', '=', $order_id ],
[ 'site_id', '=', $site_id ]
);
$order_info = model('member_recharge_order')->getInfo($order_condition);
if (empty($order_info))
return $this->error();
$order_money = $order_info[ 'price' ];
$member_id = $order_info[ 'member_id' ];
//如果是第一笔订单才能累加下单会员数
$today_start_time = 0;//当日开始时间
$today_end_time = 0;//当日结束时间
$today_order_condition = array (
[ 'member_id', '=', $member_id ],
[ 'pay_time', 'between', [ $today_start_time, $today_end_time ] ],
[ 'order_id', '<>', $order_id ]
);
$stat_data = array (
'site_id' => $site_id,
'member_recharge_count' => 1,
'member_recharge_total_money' => $order_money,
);
$count = model('member_recharge_order')->getCount($today_order_condition);
if ($count == 0) {
$stat_data[ 'member_recharge_member_count' ] = 1;
}
//销售量 order_num
//销售额 order_money
$stat_model = new Stat();
$result = $stat_model->addShopStat($stat_data);
return $result;
}
}

168
app/model/stat/StatShop.php Executable file
View File

@@ -0,0 +1,168 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\stat;
use app\model\BaseModel;
use Carbon\Carbon;
use extend\Stat;
use think\facade\Db;
use think\facade\Log;
/**
* 统计
* @author Administrator
*
*/
class StatShop extends BaseModel
{
/**
* 添加店铺统计(按照天统计)
* @param array $data
*/
public function addShopStat($data)
{
$carbon = Carbon::now();
$dir = __UPLOAD__.'/stat/stat_shop/';
if (!is_dir($dir) && !mkdir($dir, 0777, true) && !is_dir($dir)) {
return $this->error(sprintf('Directory "%s" was not created', $dir));
}
$filename = $dir.$carbon->year.'_'.$carbon->month.'_'.$carbon->day.'_'.$carbon->second.'_'.unique_random().'.json';
$stat_extend = new Stat($filename, 'stat_shop');
$stat_extend->handleData($data);//写入文件
//增加当天时统计
$this->addShopHourStat($data, $carbon);
return $this->success();
}
public function cronShopStat()
{
$path = __UPLOAD__.'/stat/stat_shop';
if(!is_dir($path)) return;
$result = $this->scanFile($path);
if(empty($result)) return;
try {
$json_array = [];
foreach ($result as $key => $val){
$stat_extend = new Stat($path.'/'.$val, 'stat_shop');
$json_array[] = $stat_extend->load();
unlink($path.'/'.$val);
}
$data_array = [];
foreach ($json_array as $json_k => $json_v){
$k = $json_v['year'].'_'.$json_v['month'].'_'.$json_v['day'];
if (isset($data_array[$k])){
foreach ($data_array[$k] as $data_k => $data_v){
if($data_k != 'site_id' && $data_k != 'year' && $data_k != 'month' && $data_k != 'day' && $data_k != 'day_time'){
if ($json_v[$data_k] > 0) {
$data_array[$k][$data_k] += $json_v[$data_k];
} else if ($json_v[$data_k] < 0) {
$data_array[$k][$data_k] -= abs($json_v[$data_k]);
}
}
}
}else{
$data_array[$k] = $json_v;
}
}
Log::write(time().'stat_shop_'.json_encode($data_array));
$system_stat = new \app\model\system\Stat();
foreach ($data_array as $json_k => $json_v){
$system_stat->addStatShopModel($json_v);
}
} catch (\Exception $e) {
}
}
/**
* 增加当日的时统计记录
* @param $data
* @param $carbon
* @return array
*/
public function addShopHourStat($data, $carbon)
{
$dir = __UPLOAD__.'/stat/stat_shop_hour/';
if (!is_dir($dir) && !mkdir($dir, 0777, true) && !is_dir($dir)) {
return $this->error(sprintf('Directory "%s" was not created', $dir));
}
$filename = $dir.$carbon->year.'_'.$carbon->month.'_'.$carbon->day.'_'.$carbon->hour.'_'.$carbon->second.'_'.unique_random().'.json';
$stat_extend = new Stat($filename, 'stat_shop_hour');
$stat_extend->handleData($data);//写入文件
return $this->success();
}
public function cronShopStatHour()
{
$path = __UPLOAD__.'/stat/stat_shop_hour';
if(!is_dir($path)) return;
$result = $this->scanFile($path);
if(empty($result)) return;
try {
$json_array = [];
foreach ($result as $key => $val){
$stat_extend = new Stat($path.'/'.$val, 'stat_shop_hour');
$json_array[] = $stat_extend->load();
unlink($path.'/'.$val);
}
$data_array = [];
foreach ($json_array as $json_k => $json_v){
$k = $json_v['year'].'_'.$json_v['month'].'_'.$json_v['day'];
if (isset($data_array[$k])){
foreach ($data_array[$k] as $data_k => $data_v){
if($data_k != 'site_id' && $data_k != 'year' && $data_k != 'month' && $data_k != 'day' && $data_k != 'day_time'){
if ($json_v[$data_k] > 0) {
$data_array[$k][$data_k] += $json_v[$data_k];
} else if ($json_v[$data_k] < 0) {
$data_array[$k][$data_k] -= abs($json_v[$data_k]);
}
}
}
}else{
$data_array[$k] = $json_v;
}
}
Log::write(time().'stat_shop_hour_'.json_encode($data_array));
$system_stat = new \app\model\system\Stat();
foreach ($json_array as $json_k => $json_v){
$system_stat->addStatShopHourModel($json_v);
}
} catch (\Exception $e) {
}
}
public function scanFile($path) {
$result = [];
$files = scandir($path);
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
if (is_dir($path . '/' . $file)) {
$this->scanFile($path . '/' . $file);
} else {
$result[] = basename($file);
}
}
}
return $result;
}
}

181
app/model/stat/StatStore.php Executable file
View File

@@ -0,0 +1,181 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\stat;
use app\model\BaseModel;
use Carbon\Carbon;
use extend\Stat;
use think\facade\Db;
use think\facade\Log;
/**
* 统计
* @author Administrator
*
*/
class StatStore extends BaseModel
{
/**
* 添加门店统计(按照天统计)
* @param array $data
*/
public function addStoreStat($data)
{
$dir = __UPLOAD__.'/stat/stat_store/';
if (!is_dir($dir) && !mkdir($dir, 0777, true) && !is_dir($dir)) {
return $this->error(sprintf('Directory "%s" was not created', $dir));
}
$carbon = Carbon::now();
$filename = $dir.$carbon->year.'_'.$carbon->month.'_'.$carbon->day.'_'.$carbon->second.'_'.unique_random().'.json';
$stat_extend = new Stat($filename, 'stat_store');
$stat_extend->handleData($data);//写入文件
//增加当天时统计
$this->addStoreHourStat($data, $carbon);
//增加店铺统计
$stat_shop = [];
foreach ($data as $k => $value) {
if($k != 'site_id' && $k != 'store_id') $stat_shop[ 'cashier_' . $k ] = $value;
}
$stat_shop_model = new StatShop();
$stat_shop_model->addShopStat($stat_shop);
return $this->success();
}
/**
* 门店统计计划任务(按天)
*/
public function cronStatStore()
{
$path = __UPLOAD__.'/stat/stat_store';
if(!is_dir($path)) return;
$result = $this->scanFile($path);
if(empty($result)) return;
try {
$json_array = [];
foreach ($result as $key => $val){
$stat_extend = new Stat($path.'/'.$val, 'stat_store');
$json_array[] = $stat_extend->load();
unlink($path.'/'.$val);
}
$data_array = [];
foreach ($json_array as $json_k => $json_v){
$k = $json_v['year'].'_'.$json_v['month'].'_'.$json_v['day'];
if (isset($data_array[$k])){
foreach ($data_array[$k] as $data_k => $data_v){
if($data_k != 'site_id' && $data_k != 'year' && $data_k != 'month' && $data_k != 'day' && $data_k != 'day_time'){
if ($json_v[$data_k] > 0) {
$data_array[$k][$data_k] += $json_v[$data_k];
} else if ($json_v[$data_k] < 0) {
$data_array[$k][$data_k] -= abs($json_v[$data_k]);
}
}
}
}else{
$data_array[$k] = $json_v;
}
}
Log::write(time().'stat_store'.json_encode($data_array));
$store_stat = new \app\model\store\Stat();
foreach ($json_array as $json_k => $json_v){
$store_stat->addStatStoreModel($json_v);
}
} catch (\Exception $e) {
}
}
/**
* 增加当日的时统计记录
* @param $data
* @param $carbon
* @return array
*/
public function addStoreHourStat($data, $carbon)
{
$dir = __UPLOAD__.'/stat/stat_store_hour/';
if (!is_dir($dir) && !mkdir($dir, 0777, true) && !is_dir($dir)) {
return $this->error(sprintf('Directory "%s" was not created', $dir));
}
$filename = $dir.$carbon->year.'_'.$carbon->month.'_'.$carbon->day.'_'.$carbon->hour.'_'.$carbon->second.'_'.unique_random().'.json';
$stat_extend = new Stat($filename, 'stat_store_hour');
$stat_extend->handleData($data);//写入文件
return $this->success();
}
/**
* 门店统计计划任务(按时)
*/
public function cronStatStoreHour()
{
$path = __UPLOAD__.'/stat/stat_store_hour';
if(!is_dir($path)) return;
$result = $this->scanFile($path);
if(empty($result)) return;
try {
$json_array = [];
foreach ($result as $key => $val){
$stat_extend = new Stat($path.'/'.$val, 'stat_store_hour');
$json_array[] = $stat_extend->load();
unlink($path.'/'.$val);
}
$data_array = [];
foreach ($json_array as $json_k => $json_v){
$k = $json_v['year'].'_'.$json_v['month'].'_'.$json_v['day'];
if (isset($data_array[$k])){
foreach ($data_array[$k] as $data_k => $data_v){
if($data_k != 'site_id' && $data_k != 'year' && $data_k != 'month' && $data_k != 'day' && $data_k != 'day_time'){
if ($json_v[$data_k] > 0) {
$data_array[$k][$data_k] += $json_v[$data_k];
} else if ($json_v[$data_k] < 0) {
$data_array[$k][$data_k] -= abs($json_v[$data_k]);
}
}
}
}else{
$data_array[$k] = $json_v;
}
}
Log::write(time().'stat_store_hour'.json_encode($data_array));
$store_stat = new \app\model\store\Stat();
foreach ($json_array as $json_k => $json_v){
$store_stat->addStatStoreHourModel($json_v);
}
} catch (\Exception $e) {
}
}
public function scanFile($path) {
$result = [];
$files = scandir($path);
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
if (is_dir($path . '/' . $file)) {
$this->scanFile($path . '/' . $file);
} else {
$result[] = basename($file);
}
}
}
return $result;
}
}

58
app/model/stat/VisitStat.php Executable file
View File

@@ -0,0 +1,58 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace app\model\stat;
use app\model\BaseModel;
use app\model\system\Stat;
/**
* 统计
* @author Administrator
*
*/
class VisitStat extends BaseModel
{
/**
* 用于多场景访问量
* @param $params
* @return array
*/
public function addVisitStat($params)
{
$app_module = $params[ 'app_module' ] ?? 'wechat';
// switch($app_module){
// case 'h5':
// $visit_name = 'h5_visit_count';
// break;
// case 'weapp':
// $visit_name = 'weapp_visit_count';
// break;
// case 'wechat':
// $visit_name = 'wechat_visit_count';
// break;
// case 'pc':
// $visit_name = 'pc_visit_count';
// break;
// }
$visit_name = $app_module . '_visit_count';
$site_id = $params[ 'site_id' ] ?? 0;
$stat_data = array (
'site_id' => $site_id,
'visit_count' => 1,
$visit_name => 1
);
$stat_model = new Stat();
$result = $stat_model->addShopStat($stat_data);
return $result;
}
}