From cf8c5e8f64de9981fb49debd6a44d04b10ac8ea5 Mon Sep 17 00:00:00 2001 From: mkm <727897186@qq.com> Date: Sat, 3 Aug 2024 14:01:26 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=A4=84=E7=90=86=E7=B1=BB=E4=BB=A5=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=B8=8D=E5=90=8C=E7=BA=A7=E5=88=AB=E7=9A=84=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/log.php | 18 +++++++++++++++--- config/plugin/webman/redis-queue/log.php | 6 ++++-- support/log/MonologExtendHandler.php | 18 ++++++++++++++---- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/config/log.php b/config/log.php index b6c0e6c59..ee8448c4a 100644 --- a/config/log.php +++ b/config/log.php @@ -16,11 +16,23 @@ return [ 'default' => [ 'handlers' => [ [ - 'class' => Monolog\Handler\RotatingFileHandler::class, + // 'class' => Monolog\Handler\RotatingFileHandler::class, + // 'constructor' => [ + // runtime_path() . '/logs/'.date('Ym').'/.log', + // 2048, + // Monolog\Logger::INFO, + // true, + // 0755 + // ], + // 'formatter' => [ + // 'class' => Monolog\Formatter\LineFormatter::class, + // 'constructor' => [null, 'Y-m-d H:i:s', true,true], + // ], + 'class' => \support\log\MonologExtendHandler::class, 'constructor' => [ - runtime_path() . '/logs/'.date('Ym').'/.log', + null, 2048, - Monolog\Logger::INFO, + Monolog\Logger::DEBUG, true, 0755 ], diff --git a/config/plugin/webman/redis-queue/log.php b/config/plugin/webman/redis-queue/log.php index c50153649..b44d71694 100644 --- a/config/plugin/webman/redis-queue/log.php +++ b/config/plugin/webman/redis-queue/log.php @@ -19,8 +19,10 @@ return [ 'class' => \support\log\MonologExtendHandler::class, 'constructor' => [ 'redis-queue', - 7, //$maxFiles - Monolog\Logger::NOTICE, + 2048, + Monolog\Logger::DEBUG, + true, + 0755 ], 'formatter' => [ 'class' => Monolog\Formatter\LineFormatter::class, diff --git a/support/log/MonologExtendHandler.php b/support/log/MonologExtendHandler.php index 5aec547af..608ba08ad 100644 --- a/support/log/MonologExtendHandler.php +++ b/support/log/MonologExtendHandler.php @@ -1,11 +1,15 @@ <?php +/** + * Created by PhpStorm. + * User: hjl + * Date: 2023/6/21 + * Time: 07:25 + */ namespace support\log; use Monolog\Handler\StreamHandler; use Monolog\Logger; -use Monolog\DateFormatter; -use DateTime; class MonologExtendHandler extends StreamHandler { @@ -13,6 +17,7 @@ class MonologExtendHandler extends StreamHandler protected bool $mustRotate; protected string $runtimeLogPath; protected string|null $channelDirName; + protected $level; /** * @param string $channelDirName 日志通道路径 @@ -28,6 +33,7 @@ class MonologExtendHandler extends StreamHandler { $this->runtimeLogPath = runtime_path() . '/logs/'; $this->channelDirName = $channelDirName; + $this->level=$level; $dateDir = date('Ym').'/'; $filename = date('d') .'.log'; $fullFilePath = empty($channelDirName) ? $this->runtimeLogPath . $dateDir .$filename : $this->runtimeLogPath . $this->channelDirName . '/' . $dateDir . $filename; @@ -97,12 +103,16 @@ class MonologExtendHandler extends StreamHandler } $dateDir = date('Ym') . '/'; $logBasePath = empty($this->channelDirName) ? $this->runtimeLogPath . $dateDir : $this->runtimeLogPath . $this->channelDirName . '/' . $dateDir; - $filename = date('d').'.log'; + if($this->level==200){ + $filename = date('d').'.log'; + }else{ + $filename = date('d').'_error.log'; + } $fullLogFilename = $logBasePath . $filename; // archive latest file clearstatcache(true, $fullLogFilename); if (file_exists($fullLogFilename)) { - $target = $logBasePath. date('Y-m') . '_' . $filename; + $target = $logBasePath. $filename; rename($fullLogFilename, $target); }else{ if (!is_dir($logBasePath)) From 07b1ebc3c89a0ee991a300be2584b28dc320b2d1 Mon Sep 17 00:00:00 2001 From: mkm <727897186@qq.com> Date: Sat, 3 Aug 2024 18:04:52 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=9C=88?= =?UTF-8?q?=E9=94=80=E5=94=AE=E5=95=86=E5=93=81=E7=BB=9F=E8=AE=A1=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/WorkbenchController.php | 8 +- .../StoreOrderCartInfoController.php | 16 +++ .../StoreOrderCartInfoGroupMonthLists.php | 122 ++++++++++++++++++ .../StoreOrderCartInfoLogic.php | 44 +++++++ 4 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 app/admin/lists/store_order_cart_info/StoreOrderCartInfoGroupMonthLists.php create mode 100644 app/admin/logic/store_order_cart_info/StoreOrderCartInfoLogic.php diff --git a/app/admin/controller/WorkbenchController.php b/app/admin/controller/WorkbenchController.php index 027a06cd5..86053d804 100644 --- a/app/admin/controller/WorkbenchController.php +++ b/app/admin/controller/WorkbenchController.php @@ -15,6 +15,7 @@ namespace app\admin\controller; use app\admin\lists\store_order_cart_info\StoreOrderCartInfoGroupLists; +use app\admin\lists\store_order_cart_info\StoreOrderCartInfoGroupMonthLists; use app\admin\logic\statistic\ProductStatisticLogic; use app\admin\logic\statistic\TradeStatisticLogic; use app\admin\logic\statistic\UserStatisticLogic; @@ -230,9 +231,14 @@ class WorkbenchController extends BaseAdminController */ public function product_order(){ return $this->dataLists(new StoreOrderCartInfoGroupLists()); - } + /** + * 月销售商品统计 + */ + public function product_month_order(){ + return $this->dataLists(new StoreOrderCartInfoGroupMonthLists()); + } /** * 格式化时间 * @param $time diff --git a/app/admin/controller/store_order_cart_info/StoreOrderCartInfoController.php b/app/admin/controller/store_order_cart_info/StoreOrderCartInfoController.php index 8683acbc9..ba3e16292 100644 --- a/app/admin/controller/store_order_cart_info/StoreOrderCartInfoController.php +++ b/app/admin/controller/store_order_cart_info/StoreOrderCartInfoController.php @@ -6,6 +6,7 @@ namespace app\admin\controller\store_order_cart_info; use app\admin\controller\BaseAdminController; use app\admin\lists\store_order_cart_info\StoreOrderCartInfoLists; use app\admin\lists\store_order_cart_info\StoreOrderCartInfoTwoLists; +use app\admin\logic\store_order_cart_info\StoreOrderCartInfoLogic; /** * 订单购物详情控制器 @@ -30,4 +31,19 @@ class StoreOrderCartInfoController extends BaseAdminController { return $this->dataLists(new StoreOrderCartInfoTwoLists()); } + + public function curve(){ + $product_id=$this->request->get('product_id'); + $start_time=$this->request->get('start_time'); + $end_time=$this->request->get('end_time'); + if(empty($product_id)){ + return $this->fail('请选择商品'); + } + if(empty($start_time) || empty($end_time)){ + return $this->fail('请选择时间'); + } + $res=(new StoreOrderCartInfoLogic())->curve($product_id,$start_time,$end_time); + return $this->data($res); + + } } \ No newline at end of file diff --git a/app/admin/lists/store_order_cart_info/StoreOrderCartInfoGroupMonthLists.php b/app/admin/lists/store_order_cart_info/StoreOrderCartInfoGroupMonthLists.php new file mode 100644 index 000000000..f4398fd62 --- /dev/null +++ b/app/admin/lists/store_order_cart_info/StoreOrderCartInfoGroupMonthLists.php @@ -0,0 +1,122 @@ +<?php + +namespace app\admin\lists\store_order_cart_info; + + +use app\admin\lists\BaseAdminDataLists; +use app\common\enum\PayEnum; +use app\common\lists\ListsExcelInterface; +use app\common\lists\ListsSearchInterface; +use app\common\model\store_branch_product\StoreBranchProduct; +use app\common\model\store_category\StoreCategory; +use app\common\model\store_order\StoreOrder; +use app\common\model\store_order_cart_info\StoreOrderCartInfo; +use app\common\model\store_product\StoreProduct; +use app\common\model\store_product_unit\StoreProductUnit; +use app\common\model\system_store\SystemStore; + +/** + * 订单购物详情列表 + * Class StoreOrderCartInfoGroupMonthLists + * @package app\admin\store_order_cart_info + */ +class StoreOrderCartInfoGroupMonthLists extends BaseAdminDataLists implements ListsSearchInterface,ListsExcelInterface +{ + + /** + * @notes 设置搜索条件 + * @return \string[][] + * @author admin + * @date 2024/05/31 16:02 + */ + public function setSearch(): array + { + return [ + 'between_time' => 'create_time' + ]; + } + + + /** + * @notes 获取订单购物详情列表 + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author admin + * @date 2024/05/31 16:02 + */ + public function lists(): array + { + + if($this->request->get('start_time')==''){ + $this->searchWhere[]=['create_time','between',[strtotime(date('Y-m-01 00:00:00')),strtotime(date('Y-m-t 23:59:59'))]]; + } + $this->searchWhere[]=['is_pay','=',1]; + $this->searchWhere[]=['status','>=',0]; + return StoreOrderCartInfo::where($this->searchWhere) + ->field('product_id,price,SUM(total_price) as total_price,SUM(cart_num) as cart_num')->group('product_id') + ->order('cart_num desc') + ->limit($this->limitOffset, $this->limitLength) + ->select()->each(function ($item) { + $find=StoreProduct::where('id',$item['product_id'])->field('image,unit,cate_id,store_name,store_info')->find(); + if($find){ + $item['image']=$find['image'];//商品图片 + $item['store_name']=$find['store_name'];//商品名称 + $item['store_info']=$find['store_info'];//商品规格 + $item['unit_name'] = StoreProductUnit::where('id', $find['unit'])->value('name')??""; + }else{ + $item['image']='';//商品图片 + $item['store_name']='';//商品名称 + $item['store_info']='';//商品规格-(数据库叫商品简介) + $item['unit_name']='';// + } + return $item; //返回处理后的数据。 + }) + ->toArray(); + } + + + /** + * @notes 获取订单购物详情数量 + * @return int + * @author admin + * @date 2024/05/31 16:02 + */ + public function count(): int + { + return StoreOrderCartInfo::where($this->searchWhere)->group('product_id')->count(); + } + + /** + * @notes 导出文件名 + * @return string + * @author 乔峰 + * @date 2022/11/24 16:17 + */ + public function setFileName(): string + { + return '订单总商品统计'; + } + + + /** + * @notes 导出字段 + * @return string[] + * @author 乔峰 + * @date 2022/11/24 16:17 + */ + public function setExcelFields(): array + { + $data=[ + 'store_name' => '商品名称', + 'store_info' => '规格', + 'unit_name' => '单位', + 'cate_name' => '分类', + 'cart_num' => '数量', + 'price' => '单价', + 'total_price' => '总价', + ]; + return $data; + } +} diff --git a/app/admin/logic/store_order_cart_info/StoreOrderCartInfoLogic.php b/app/admin/logic/store_order_cart_info/StoreOrderCartInfoLogic.php new file mode 100644 index 000000000..9346281d4 --- /dev/null +++ b/app/admin/logic/store_order_cart_info/StoreOrderCartInfoLogic.php @@ -0,0 +1,44 @@ +<?php + +namespace app\admin\logic\store_order_cart_info; + +use app\admin\logic\statistic\TradeStatisticLogic; +use app\common\logic\BaseLogic; +use app\common\model\store_order_cart_info\StoreOrderCartInfo; + +/** + * 订单购物详情表逻辑 + * Class StoreProductLogic + * @package app\admin\logic\store_order_cart_info + */ +class StoreOrderCartInfoLogic extends BaseLogic +{ + public function curve($product_id,$start_time,$end_time) + { + $store_order_cart_info = new StoreOrderCartInfo(); + $tradeStatisticLogic = new TradeStatisticLogic(); + $where[] = ['product_id', '=', $product_id]; + $where[] = ['is_pay', '=', 1]; + $where[] = ['status', '>=', 0]; + $timeKey = $tradeStatisticLogic->TimeConvert(['start_time' => $start_time, 'end_time' => $end_time]); + $time['timeKey'] = $timeKey; + + $totalCartNum= $store_order_cart_info->getCurveData($where, $time, 'sum(cart_num)'); + $totalCartNum = $tradeStatisticLogic->trendYdata((array)$totalCartNum, $timeKey); + $data=[]; + if($totalCartNum){ + $data['xAxis']=$totalCartNum['x']; + $data['series']=[ + [ + 'name'=>'销量', + 'smooth'=>'true', + 'type'=>'line', + 'yAxisIndex'=>1, + 'data'=>$totalCartNum['y'] + ] + ]; + } + return $data; + + } +} From c8c7333ec748bc0cd897dd168a1d4a0466057ba3 Mon Sep 17 00:00:00 2001 From: mkm <727897186@qq.com> Date: Sat, 3 Aug 2024 21:17:38 +0800 Subject: [PATCH 3/3] 1 --- .../StoreOrderCartInfoController.php | 9 ++-- .../StoreOrderCartInfoLogic.php | 50 ++++++++++++------- 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/app/admin/controller/store_order_cart_info/StoreOrderCartInfoController.php b/app/admin/controller/store_order_cart_info/StoreOrderCartInfoController.php index ba3e16292..60d41c4c0 100644 --- a/app/admin/controller/store_order_cart_info/StoreOrderCartInfoController.php +++ b/app/admin/controller/store_order_cart_info/StoreOrderCartInfoController.php @@ -35,13 +35,16 @@ class StoreOrderCartInfoController extends BaseAdminController public function curve(){ $product_id=$this->request->get('product_id'); $start_time=$this->request->get('start_time'); + if(empty($start_time)){ + $start_time=date('Y-m-01 00:00:00'); + } $end_time=$this->request->get('end_time'); + if(empty($end_time)){ + $end_time=date('Y-m-t 23:59:59'); + } if(empty($product_id)){ return $this->fail('请选择商品'); } - if(empty($start_time) || empty($end_time)){ - return $this->fail('请选择时间'); - } $res=(new StoreOrderCartInfoLogic())->curve($product_id,$start_time,$end_time); return $this->data($res); diff --git a/app/admin/logic/store_order_cart_info/StoreOrderCartInfoLogic.php b/app/admin/logic/store_order_cart_info/StoreOrderCartInfoLogic.php index 9346281d4..84c9a84f0 100644 --- a/app/admin/logic/store_order_cart_info/StoreOrderCartInfoLogic.php +++ b/app/admin/logic/store_order_cart_info/StoreOrderCartInfoLogic.php @@ -13,7 +13,7 @@ use app\common\model\store_order_cart_info\StoreOrderCartInfo; */ class StoreOrderCartInfoLogic extends BaseLogic { - public function curve($product_id,$start_time,$end_time) + public function curve($product_id, $start_time, $end_time) { $store_order_cart_info = new StoreOrderCartInfo(); $tradeStatisticLogic = new TradeStatisticLogic(); @@ -23,22 +23,38 @@ class StoreOrderCartInfoLogic extends BaseLogic $timeKey = $tradeStatisticLogic->TimeConvert(['start_time' => $start_time, 'end_time' => $end_time]); $time['timeKey'] = $timeKey; - $totalCartNum= $store_order_cart_info->getCurveData($where, $time, 'sum(cart_num)'); - $totalCartNum = $tradeStatisticLogic->trendYdata((array)$totalCartNum, $timeKey); - $data=[]; - if($totalCartNum){ - $data['xAxis']=$totalCartNum['x']; - $data['series']=[ - [ - 'name'=>'销量', - 'smooth'=>'true', - 'type'=>'line', - 'yAxisIndex'=>1, - 'data'=>$totalCartNum['y'] - ] - ]; - } - return $data; + $totalCartNum1 = $store_order_cart_info->getCurveData($where, $time, 'sum(cart_num)'); + $totalCartNum1 = $tradeStatisticLogic->trendYdata((array)$totalCartNum1, $timeKey); + $totalCartNum2 = $store_order_cart_info->getCurveData($where, $time, 'sum(total_price)'); + $totalCartNum2 = $tradeStatisticLogic->trendYdata((array)$totalCartNum2, $timeKey); + + $value1=[]; + $value2=[]; + foreach($totalCartNum1['y'] as $k=>$v){ + $value1[]=$v; + } + foreach($totalCartNum2['y'] as $k=>$v){ + $value2[]=$v; + } + $data = []; + $data['xAxis'] = $totalCartNum1['x'] ?? []; + $data['series'] = [ + [ + 'name' => '销量', + 'smooth' => 'true', + 'type' => 'line', + 'yAxisIndex' => 1, + 'value' =>$value1 + ] + ,[ + 'name' => '金额', + 'smooth' => 'true', + 'type' => 'line', + 'yAxisIndex' => 1, + 'value' => $value2 + ] + ]; + return $data; } }