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;
     }
 }