From 66571b43a1bbb29fe00a3fef0185f96fb9b854fb Mon Sep 17 00:00:00 2001
From: mkm <727897186@qq.com>
Date: Thu, 1 Aug 2024 18:03:45 +0800
Subject: [PATCH 1/2] =?UTF-8?q?feat(purchase=5Forder):=20=E6=B7=BB?=
 =?UTF-8?q?=E5=8A=A0=E5=90=88=E5=B9=B6=E4=BB=8A=E6=97=A5=E5=95=86=E6=88=B7?=
 =?UTF-8?q?=E5=92=8C=E5=B9=B3=E5=8F=B0=E8=AE=A2=E5=8D=95=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../PurchaseOrderController.php               |  15 +++
 .../purchase_order/PurchaseOrderLogic.php     | 125 +++++++++++-------
 2 files changed, 95 insertions(+), 45 deletions(-)

diff --git a/app/admin/controller/purchase_order/PurchaseOrderController.php b/app/admin/controller/purchase_order/PurchaseOrderController.php
index 0555831d2..657786175 100644
--- a/app/admin/controller/purchase_order/PurchaseOrderController.php
+++ b/app/admin/controller/purchase_order/PurchaseOrderController.php
@@ -2,6 +2,7 @@
 namespace app\admin\controller\purchase_order;
 use app\admin\controller\BaseAdminController;
 use app\admin\lists\purchase_order\PurchaseOrderLists;
+use app\admin\logic\purchase_order\PurchaseOrderLogic;
 
 class PurchaseOrderController extends BaseAdminController{
 
@@ -10,4 +11,18 @@ class PurchaseOrderController extends BaseAdminController{
         return $this->dataLists(new PurchaseOrderLists());
     }
 
+    /**
+     * 合并今日商户订单
+     */
+    public function add(){
+        PurchaseOrderLogic::StoreTodayOrder();
+        return $this->success('合并成功');
+    }
+   /**
+     * 合并今日平台订单
+     */
+    public function platform(){
+        PurchaseOrderLogic::platformTodayOrder();
+        return $this->success('合并成功');
+    }
 }
\ No newline at end of file
diff --git a/app/admin/logic/purchase_order/PurchaseOrderLogic.php b/app/admin/logic/purchase_order/PurchaseOrderLogic.php
index 1fb4f5330..dcd1aadea 100644
--- a/app/admin/logic/purchase_order/PurchaseOrderLogic.php
+++ b/app/admin/logic/purchase_order/PurchaseOrderLogic.php
@@ -5,6 +5,9 @@ namespace app\admin\logic\purchase_order;
 
 use app\common\model\purchase_order\PurchaseOrder;
 use app\common\logic\BaseLogic;
+use app\common\model\purchase_order_info\PurchaseOrderInfo;
+use app\common\model\store_order\StoreOrder;
+use app\common\model\store_order_cart_info\StoreOrderCartInfo;
 use think\facade\Db;
 
 
@@ -18,31 +21,48 @@ class PurchaseOrderLogic extends BaseLogic
 
 
     /**
-     * @notes 添加采购订单
+     * @notes 合并今日商户订单
      * @param array $params
      * @return bool
      * @author admin
      * @date 2024/08/01 16:32
      */
-    public static function add(array $params): bool
+    public static function StoreTodayOrder(): bool
     {
         Db::startTrans();
         try {
-            PurchaseOrder::create([
-                'store_id' => $params['store_id'],
-                'order_arr' => $params['order_arr'],
-                'order_id' => $params['order_id'],
-                'total' => $params['total'],
-                'actual' => $params['actual'],
-                'money' => $params['money'],
-                'paid' => $params['paid'],
-                'file' => $params['file'],
-                'data' => $params['data'],
-                'is_opurchase' => $params['is_opurchase'],
-                'is_mer' => $params['is_mer'],
-                'storage' => $params['storage']
-            ]);
-
+            $store_arr = StoreOrder::where(['paid' => 1, 'refund_status' => 0])->whereDay('create_time')->group('store_id')->column('store_id');
+            $purchaseOrderInfo = new PurchaseOrderInfo();
+            foreach ($store_arr as $store_id) {
+                $purchase_order_info = [];
+                $order_arr = StoreOrder::where(['paid' => 1, 'refund_status' => 0, 'store_id' => $store_id])->whereDay('create_time')->column('id');
+                $price = StoreOrder::where(['paid' => 1, 'refund_status' => 0, 'store_id' => $store_id])->whereDay('create_time')->field('SUM(pay_price) as pay_price,SUM(total_price) as total_price')->find();
+                $data = [
+                    'store_id' => $store_id,
+                    'order_arr' => json_encode($order_arr),
+                    'order_id' => getNewOrderId('CG'),
+                    'total' => $price['total_price'],
+                    'actual' => $price['pay_price'],
+                    'money' => $price['pay_price'],
+                    'paid' => 1,
+                    'is_mer' => 1,
+                    'create_time' => time(),
+                    'update_time' => time(),
+                ];
+                $res = PurchaseOrder::create($data);
+                $info = StoreOrderCartInfo::where('oid', 'in', $order_arr)->field('store_id, product_id,price,SUM(total_price) as total_price, SUM(cart_num) as cart_num')->group('store_id, product_id')->select();
+                foreach ($info as $item) {
+                    $arr['oid'] = $res['id'];
+                    $arr['store_id'] = $item['store_id'];
+                    $arr['product_id'] = $item['product_id'];
+                    $arr['price'] = $item['price'];
+                    $arr['total_price'] = $item['total_price'];
+                    $arr['cart_num'] = $item['cart_num'];
+                    $arr['status'] = 1;
+                    $purchase_order_info[] = $arr;
+                }
+                $purchaseOrderInfo->saveAll($purchase_order_info);
+            }
             Db::commit();
             return true;
         } catch (\Exception $e) {
@@ -52,43 +72,58 @@ class PurchaseOrderLogic extends BaseLogic
         }
     }
 
-
     /**
-     * @notes 编辑采购订单
+     * @notes 合并今日平台订单
      * @param array $params
      * @return bool
      * @author admin
      * @date 2024/08/01 16:32
      */
-    public static function edit(array $params): bool
+    public static function platformTodayOrder()
     {
-        Db::startTrans();
-        try {
-            PurchaseOrder::where('id', $params['id'])->update([
-                'store_id' => $params['store_id'],
-                'order_arr' => $params['order_arr'],
-                'order_id' => $params['order_id'],
-                'total' => $params['total'],
-                'actual' => $params['actual'],
-                'money' => $params['money'],
-                'paid' => $params['paid'],
-                'file' => $params['file'],
-                'data' => $params['data'],
-                'is_opurchase' => $params['is_opurchase'],
-                'is_mer' => $params['is_mer'],
-                'storage' => $params['storage']
-            ]);
+        // Db::startTrans();
+        // try {
+            $purchaseOrderInfo = new PurchaseOrderInfo();
+            $purchase_order_info=[];
+            $order_arr = PurchaseOrder::whereDay('create_time')->where('is_mer',1)->column('id');
+            // $price = PurchaseOrder::whereDay('create_time')->field('SUM(actual) as pay_price,SUM(total) as total_price')->find();
+            // $data = [
+            //     'store_id' => 0,
+            //     'order_arr' => json_encode($order_arr),
+            //     'order_id' => getNewOrderId('PT'),
+            //     'total' => $price['total_price'],
+            //     'actual' => $price['pay_price'],
+            //     'money' => $price['pay_price'],
+            //     'paid' => 1,
+            //     'is_mer' => 2,
+            //     'create_time' => time(),
+            //     'update_time' => time(),
+            // ];
+            // $res = PurchaseOrder::create($data);
+            $info = StoreOrderCartInfo::where('oid', 'in', $order_arr)->field('store_id, product_id,price,SUM(total_price) as total_price, SUM(cart_num) as cart_num')->group('store_id, product_id')->select();
+           d($info);
+            foreach ($info as $item) {
+                $arr['oid'] = $res['id'];
+                $arr['store_id'] = $item['store_id'];
+                $arr['product_id'] = $item['product_id'];
+                $arr['price'] = $item['price'];
+                $arr['total_price'] = $item['total_price'];
+                $arr['cart_num'] = $item['cart_num'];
+                $arr['status'] = 1;
+                $purchase_order_info[] = $arr;
+            }
+            $purchaseOrderInfo->saveAll($purchase_order_info);
 
-            Db::commit();
-            return true;
-        } catch (\Exception $e) {
-            Db::rollback();
-            self::setError($e->getMessage());
-            return false;
-        }
+        //     Db::commit();
+        //     return true;
+        // } catch (\Exception $e) {
+        //     Db::rollback();
+        //     d($e);
+        //     self::setError($e->getMessage());
+        //     return false;
+        // }
     }
 
-
     /**
      * @notes 删除采购订单
      * @param array $params
@@ -113,4 +148,4 @@ class PurchaseOrderLogic extends BaseLogic
     {
         return PurchaseOrder::findOrEmpty($params['id'])->toArray();
     }
-}
\ No newline at end of file
+}

From d0842aadc5c1abcc58152e7003cd67529e53eba3 Mon Sep 17 00:00:00 2001
From: mkm <727897186@qq.com>
Date: Thu, 1 Aug 2024 22:41:52 +0800
Subject: [PATCH 2/2] 1

---
 .../PurchaseOrderController.php               | 15 +++-
 .../purchase_order/PurchaseOrderLists.php     | 43 +++++++++-
 .../PurchaseOrderInfoLists.php                | 85 +++++++++++++++++++
 .../purchase_order/PurchaseOrderLogic.php     | 77 +++++++++++------
 .../model/purchase_order/PurchaseOrder.php    |  2 +-
 5 files changed, 188 insertions(+), 34 deletions(-)
 create mode 100644 app/admin/lists/purchase_order_info/PurchaseOrderInfoLists.php

diff --git a/app/admin/controller/purchase_order/PurchaseOrderController.php b/app/admin/controller/purchase_order/PurchaseOrderController.php
index 657786175..390727d2a 100644
--- a/app/admin/controller/purchase_order/PurchaseOrderController.php
+++ b/app/admin/controller/purchase_order/PurchaseOrderController.php
@@ -2,6 +2,7 @@
 namespace app\admin\controller\purchase_order;
 use app\admin\controller\BaseAdminController;
 use app\admin\lists\purchase_order\PurchaseOrderLists;
+use app\admin\lists\purchase_order_info\PurchaseOrderInfoLists;
 use app\admin\logic\purchase_order\PurchaseOrderLogic;
 
 class PurchaseOrderController extends BaseAdminController{
@@ -10,7 +11,10 @@ class PurchaseOrderController extends BaseAdminController{
     {
         return $this->dataLists(new PurchaseOrderLists());
     }
-
+    public function info_lists()
+    {
+        return $this->dataLists(new PurchaseOrderInfoLists());
+    }
     /**
      * 合并今日商户订单
      */
@@ -25,4 +29,13 @@ class PurchaseOrderController extends BaseAdminController{
         PurchaseOrderLogic::platformTodayOrder();
         return $this->success('合并成功');
     }
+
+      /**
+     * 详情
+     */
+    public function detail(){
+        $id=$this->request->get('id');
+        $res=PurchaseOrderLogic::detail($id);
+        return $this->data($res);
+    } 
 }
\ No newline at end of file
diff --git a/app/admin/lists/purchase_order/PurchaseOrderLists.php b/app/admin/lists/purchase_order/PurchaseOrderLists.php
index 29fe0f1d9..933af29fa 100644
--- a/app/admin/lists/purchase_order/PurchaseOrderLists.php
+++ b/app/admin/lists/purchase_order/PurchaseOrderLists.php
@@ -6,6 +6,7 @@ namespace app\admin\lists\purchase_order;
 use app\admin\lists\BaseAdminDataLists;
 use app\common\lists\ListsSearchInterface;
 use app\common\model\purchase_order\PurchaseOrder;
+use app\common\model\system_store\SystemStore;
 
 /**
  * 采购订单列表
@@ -25,7 +26,7 @@ class PurchaseOrderLists extends BaseAdminDataLists implements ListsSearchInterf
     public function setSearch(): array
     {
         return [
-            '=' => ['store_id', 'order_id'],
+            '=' => ['store_id', 'order_id', 'is_mer','storage'],
         ];
     }
 
@@ -41,10 +42,45 @@ class PurchaseOrderLists extends BaseAdminDataLists implements ListsSearchInterf
      */
     public function lists(): array
     {
+        if($this->request->get('o_id')){
+            $arr=PurchaseOrder::where('id',$this->request->get('o_id'))->value('order_arr');
+            if($arr){
+                $this->searchWhere[]=['id','in',$arr];
+            }
+        }
         return PurchaseOrder::where($this->searchWhere)
             ->limit($this->limitOffset, $this->limitLength)
             ->order(['id' => 'desc'])
-            ->select();
+            ->select()->each(function ($item) {
+                if ($item->store_id) {
+                    $item->system_store = SystemStore::where('id',$item->store_id)->value('name');
+                } else {
+                    $item->system_store = '平台';
+                }
+                if ($item->is_mer == 1) {
+                    $item->mer_name = '商户';
+                } else {
+                    $item->mer_name = '平台';
+                }
+                if ($item->is_opurchase == 1) {
+                    $item->opurchase_name = '已采购';
+                } else {
+                    $item->opurchase_name = '未采购';
+                }
+                switch ($item->storage) {
+                    case 0:
+                        $item->storage_name = '未入库';
+                        break;
+                    case 1:
+                        $item->storage_name = '部分入库';
+                        break;
+                    case 2:
+                        $item->storage_name = '已入库';
+                        break;
+                    default:
+                        $item->storage_name = '未入库';
+                }
+            })->toArray();
     }
 
 
@@ -58,5 +94,4 @@ class PurchaseOrderLists extends BaseAdminDataLists implements ListsSearchInterf
     {
         return PurchaseOrder::where($this->searchWhere)->count();
     }
-
-}
\ No newline at end of file
+}
diff --git a/app/admin/lists/purchase_order_info/PurchaseOrderInfoLists.php b/app/admin/lists/purchase_order_info/PurchaseOrderInfoLists.php
new file mode 100644
index 000000000..b4dacaefe
--- /dev/null
+++ b/app/admin/lists/purchase_order_info/PurchaseOrderInfoLists.php
@@ -0,0 +1,85 @@
+<?php
+
+namespace app\admin\lists\purchase_order_info;
+
+
+use app\admin\lists\BaseAdminDataLists;
+use app\common\lists\ListsSearchInterface;
+use app\common\model\purchase_order_info\PurchaseOrderInfo;
+use app\common\model\store_product\StoreProduct;
+use app\common\model\store_product_unit\StoreProductUnit;
+use app\common\model\system_store\SystemStore;
+
+/**
+ * 采购订单详情表
+ * Class PurchaseOrderInfoLists
+ * @package app\admin\lists\purchase_order
+ */
+class PurchaseOrderInfoLists extends BaseAdminDataLists implements ListsSearchInterface
+{
+
+
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author admin
+     * @date 2024/05/31 17:09
+     */
+    public function setSearch(): array
+    {
+        return [
+            '=' => ['store_id', 'oid', ],
+        ];
+    }
+
+
+    /**
+     * @notes 获取采购订单列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author admin
+     * @date 2024/05/31 17:09
+     */
+    public function lists(): array
+    {
+        return PurchaseOrderInfo::where($this->searchWhere)
+            ->limit($this->limitOffset, $this->limitLength)
+            ->order(['id' => 'desc'])
+            ->select()->each(function ($item) {
+                $find=StoreProduct::where('id',$item->product_id)->field('store_info,unit,store_name,image')->find();
+                if($find){
+                    $item->store_name=$find->store_name;
+                    $item->unit_name=StoreProductUnit::where('id',$find->unit)->value('name');
+                    $item->store_info=$find->store_info;
+                    $item->image=$find->image;
+                }
+                switch ($item->storage) {
+                    case 0:
+                        $item->storage_name = '未入库';
+                        break;
+                    case 1:
+                        $item->storage_name = '部分入库';
+                        break;
+                    case 2:
+                        $item->storage_name = '已入库';
+                        break;
+                    default:
+                        $item->storage_name = '未入库';
+                }
+            })->toArray();
+    }
+
+
+    /**
+     * @notes 获取采购订单数量
+     * @return int
+     * @author admin
+     * @date 2024/05/31 17:09
+     */
+    public function count(): int
+    {
+        return PurchaseOrderInfo::where($this->searchWhere)->count();
+    }
+}
diff --git a/app/admin/logic/purchase_order/PurchaseOrderLogic.php b/app/admin/logic/purchase_order/PurchaseOrderLogic.php
index dcd1aadea..cab700969 100644
--- a/app/admin/logic/purchase_order/PurchaseOrderLogic.php
+++ b/app/admin/logic/purchase_order/PurchaseOrderLogic.php
@@ -8,6 +8,7 @@ use app\common\logic\BaseLogic;
 use app\common\model\purchase_order_info\PurchaseOrderInfo;
 use app\common\model\store_order\StoreOrder;
 use app\common\model\store_order_cart_info\StoreOrderCartInfo;
+use app\common\model\system_store\SystemStore;
 use think\facade\Db;
 
 
@@ -81,27 +82,26 @@ class PurchaseOrderLogic extends BaseLogic
      */
     public static function platformTodayOrder()
     {
-        // Db::startTrans();
-        // try {
+        Db::startTrans();
+        try {
             $purchaseOrderInfo = new PurchaseOrderInfo();
             $purchase_order_info=[];
             $order_arr = PurchaseOrder::whereDay('create_time')->where('is_mer',1)->column('id');
-            // $price = PurchaseOrder::whereDay('create_time')->field('SUM(actual) as pay_price,SUM(total) as total_price')->find();
-            // $data = [
-            //     'store_id' => 0,
-            //     'order_arr' => json_encode($order_arr),
-            //     'order_id' => getNewOrderId('PT'),
-            //     'total' => $price['total_price'],
-            //     'actual' => $price['pay_price'],
-            //     'money' => $price['pay_price'],
-            //     'paid' => 1,
-            //     'is_mer' => 2,
-            //     'create_time' => time(),
-            //     'update_time' => time(),
-            // ];
-            // $res = PurchaseOrder::create($data);
-            $info = StoreOrderCartInfo::where('oid', 'in', $order_arr)->field('store_id, product_id,price,SUM(total_price) as total_price, SUM(cart_num) as cart_num')->group('store_id, product_id')->select();
-           d($info);
+            $price = PurchaseOrder::whereDay('create_time')->field('SUM(actual) as pay_price,SUM(total) as total_price')->find();
+            $data = [
+                'store_id' => 0,
+                'order_arr' => json_encode($order_arr),
+                'order_id' => getNewOrderId('PT'),
+                'total' => $price['total_price'],
+                'actual' => $price['pay_price'],
+                'money' => $price['pay_price'],
+                'paid' => 1,
+                'is_mer' => 2,
+                'create_time' => time(),
+                'update_time' => time(),
+            ];
+            $res = PurchaseOrder::create($data);
+            $info = PurchaseOrderInfo::where('oid', 'in', $order_arr)->field('store_id, product_id,price,SUM(total_price) as total_price, SUM(cart_num) as cart_num')->group('store_id, product_id')->select();
             foreach ($info as $item) {
                 $arr['oid'] = $res['id'];
                 $arr['store_id'] = $item['store_id'];
@@ -114,14 +114,14 @@ class PurchaseOrderLogic extends BaseLogic
             }
             $purchaseOrderInfo->saveAll($purchase_order_info);
 
-        //     Db::commit();
-        //     return true;
-        // } catch (\Exception $e) {
-        //     Db::rollback();
-        //     d($e);
-        //     self::setError($e->getMessage());
-        //     return false;
-        // }
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            d($e);
+            self::setError($e->getMessage());
+            return false;
+        }
     }
 
     /**
@@ -144,8 +144,29 @@ class PurchaseOrderLogic extends BaseLogic
      * @author admin
      * @date 2024/08/01 16:32
      */
-    public static function detail($params): array
+    public static function detail($id): array
     {
-        return PurchaseOrder::findOrEmpty($params['id'])->toArray();
+        $data= PurchaseOrder::findOrEmpty($id)->toArray();
+        if($data){
+            if($data['store_id']){
+                $data['system_store']=SystemStore::where('id',$data['store_id'])->value('name');
+            }else{
+                $data['system_store']='平台';
+            }
+            switch ($data['storage']) {
+                case 0:
+                    $data['storage_name'] = '未入库';
+                    break;
+                case 1:
+                    $data['storage_name'] = '部分入库';
+                    break;
+                case 2:
+                    $data['storage_name'] = '已入库';
+                    break;
+                default:
+                    $data['storage_name'] = '未入库';
+            }
+        }
+        return $data;
     }
 }
diff --git a/app/common/model/purchase_order/PurchaseOrder.php b/app/common/model/purchase_order/PurchaseOrder.php
index 10cada22f..f05cb3081 100644
--- a/app/common/model/purchase_order/PurchaseOrder.php
+++ b/app/common/model/purchase_order/PurchaseOrder.php
@@ -17,6 +17,6 @@ class PurchaseOrder extends BaseModel
     use SoftDelete;
     protected $name = 'purchase_order';
     protected $deleteTime = 'delete_time';
-
+    protected $json = ['order_arr'];
     
 }
\ No newline at end of file