From 7e4e845e445c310f2a8dff71c24cfa8dc7940413 Mon Sep 17 00:00:00 2001
From: liu <1873441552@qq.com>
Date: Tue, 4 Jun 2024 11:58:51 +0800
Subject: [PATCH] =?UTF-8?q?=E8=B4=AD=E7=89=A9=E8=BD=A6=E7=9B=B8=E5=85=B3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/api/controller/order/CartController.php |  6 +++---
 app/api/lists/order/CartList.php            | 12 ++++++------
 app/api/logic/order/CartLogic.php           |  9 ++++++---
 app/api/validate/CartValidate.php           |  8 ++++----
 app/functions.php                           | 21 +++++++++++++++++++++
 5 files changed, 40 insertions(+), 16 deletions(-)

diff --git a/app/api/controller/order/CartController.php b/app/api/controller/order/CartController.php
index 83cf27ef5..4bde451d9 100644
--- a/app/api/controller/order/CartController.php
+++ b/app/api/controller/order/CartController.php
@@ -17,11 +17,11 @@ class CartController extends BaseApiController
     /**
      * @notes 添加购物车
      */
-    public function create(){
+        public function create(){
         $params = (new CartValidate())->post()->goCheck('add');
         $params['uid']=$this->request->userId;
-        $result=Cart::where(['uid'=>$params['uid'],'product_attr_unique'=>$params['product_attr_unique'],'is_fail'=>0,'is_del'=>0])->find();
-        $count=Cart::where(['uid'=>$params['uid'],'is_del'=>0,'is_pay'=>0])->count();
+        $result=Cart::where(['uid'=>$params['uid'],'store_id'=>$params['store_id'],'product_id'=>$params['product_id'],'is_fail'=>0,'delete_time'=>null])->find();
+        $count=Cart::where(['uid'=>$params['uid'],'delete_time'=>null,'is_pay'=>0])->count();
         if($count>100){
             return $this->fail('购物车商品不能大于100个,请先结算');
         }
diff --git a/app/api/lists/order/CartList.php b/app/api/lists/order/CartList.php
index 7030e8ff9..4637481b2 100644
--- a/app/api/lists/order/CartList.php
+++ b/app/api/lists/order/CartList.php
@@ -7,6 +7,7 @@ use app\admin\lists\BaseAdminDataLists;
 use app\common\lists\ListsSearchInterface;
 use app\common\model\order\Cart;
 use app\common\lists\ListsExtendInterface;
+use app\common\model\store_branch_product\StoreBranchProduct;
 use app\common\model\store_product_attr_value\StoreProductAttrValue;
 use app\common\model\store_product_unit\StoreProductUnit;
 
@@ -50,7 +51,7 @@ class CartList extends BaseAdminDataLists implements ListsSearchInterface, Lists
         ];
         $list = Cart::where($this->searchWhere)->where($where)
             ->limit($this->limitOffset, $this->limitLength)
-            ->order(['cart_id' => 'desc'])
+            ->order(['id' => 'desc'])
             ->select()->each(function ($item) {
 
                 return $item;
@@ -58,15 +59,14 @@ class CartList extends BaseAdminDataLists implements ListsSearchInterface, Lists
             ->toArray();
 
         foreach ($list as $key => &$item) {
-            $find = StoreProductAttrValue::where('unique',$item['product_attr_unique'])
-                ->field('product_id,image,purchase')
-                ->with(['storeName'])
+            $find = StoreBranchProduct::where(['store_id'=>$item['store_id'],'product_id'=>$item['product_id']])
+                ->field('product_id,image,price,store_name,unit')
                 ->find();
             if($find){
-                $item['goods_total_price'] = bcmul($item['cart_num'], $find['purchase'], 2);
+                $item['goods_total_price'] = bcmul($item['cart_num'], $find['price'], 2);
                 $this->total_price=bcadd($this->total_price,$item['goods_total_price'],2);
                 $item['imgs'] = $find['image'];
-                $item['sell'] = $find['purchase'];
+                $item['sell'] = $find['price'];
                 $item['goods_name'] = $find['store_name'];
                 $item['unit_name'] = StoreProductUnit::where('id',$find['unit'])->value('name');
 
diff --git a/app/api/logic/order/CartLogic.php b/app/api/logic/order/CartLogic.php
index 249b47ddd..349c229fe 100644
--- a/app/api/logic/order/CartLogic.php
+++ b/app/api/logic/order/CartLogic.php
@@ -34,9 +34,9 @@ class CartLogic extends BaseLogic
                 'product_id' => $params['product_id'],
                 'store_id' => $params['store_id']??0,
                 'staff_id' => $params['staff_id']??0,
-                'product_attr_unique' => $params['product_attr_unique'],
+                'product_attr_unique' => '',
                 'cart_num' => $params['cart_num'],
-                'add_time' => \Qiniu\time(),
+                'add_time' => time(),
                 'is_new' => $params['is_new']??0,
             ]);
             Db::commit();
@@ -60,7 +60,10 @@ class CartLogic extends BaseLogic
     {
         Db::startTrans();
         try {
-                Cart::where(['uid'=>$params['uid'],'product_id'=>$params['product_id']])->update(['cart_num'=>$params['cart_num']]);
+            Cart::where(['uid'=>$params['uid'],
+                'store_id'=>$params['store_id'],
+                'product_id'=>$params['product_id']])
+                ->update(['cart_num'=>$params['cart_num']]);
             Db::commit();
             return true;
         } catch (\Exception $e) {
diff --git a/app/api/validate/CartValidate.php b/app/api/validate/CartValidate.php
index 95aa10e18..268ba8fee 100644
--- a/app/api/validate/CartValidate.php
+++ b/app/api/validate/CartValidate.php
@@ -48,7 +48,7 @@ class CartValidate extends BaseValidate
      */
     public function sceneAdd()
     {
-        return $this->only(['cart_num','product_attr_unique','store_id','product_id']);
+        return $this->only(['cart_num','store_id','product_id']);
     }
 
 
@@ -58,9 +58,9 @@ class CartValidate extends BaseValidate
      * @author likeadmin
      * @date 2024/04/24 10:37
      */
-    public function sceneEdit()
+    public function sceneChange()
     {
-        return $this->only(['']);
+        return $this->only(['cart_num','store_id','product_id']);
     }
 
 
@@ -72,7 +72,7 @@ class CartValidate extends BaseValidate
      */
     public function sceneDelete()
     {
-        return $this->only(['']);
+        return $this->only(['id']);
     }
 
 
diff --git a/app/functions.php b/app/functions.php
index 90b3db2bf..04865a2b0 100644
--- a/app/functions.php
+++ b/app/functions.php
@@ -360,3 +360,24 @@ if (!function_exists('generateUniqueVerificationCode')) {
 
 }
 
+if (!function_exists('haversineDistance')) {
+    function haversineDistance($latitude1, $longitude1, $latitude2, $longitude2) {
+        $earthRadius = 6371; // 地球平均半径,单位是千米
+
+        // 将角度转换为弧度
+        $latFrom = deg2rad($latitude1);
+        $lonFrom = deg2rad($longitude1);
+        $latTo = deg2rad($latitude2);
+        $lonTo = deg2rad($longitude2);
+
+        $latDelta = $latTo - $latFrom;
+        $lonDelta = $lonTo - $lonFrom;
+
+        $angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) +
+                cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
+        return $angle * $earthRadius;
+    }
+}
+
+
+