소스 검색

Merge branch 'zhongqi-IntraCityExpress'

shish 11 달 전
부모
커밋
cc52ab40f0

+ 5 - 8
app-hd/controllers/IntraCityController.php

@@ -49,7 +49,7 @@ class IntraCityController extends BaseController
                     'city' => $shop->city,
                     'area' => $shop->dist,
                     'street' => $shop->address,
-                    'house' => $shop->floor,
+                    'house' => $shop->floor ? $shop->address . $shop->floor : $shop->address,
                     'lat' => $shop->lat,
                     'lng' => $shop->long,
                     'phone' => $shop->telephone
@@ -154,7 +154,7 @@ class IntraCityController extends BaseController
                     'city' => $shop->city,
                     'area' => $shop->dist,
                     'street' => $shop->address,
-                    'house' => $shop->floor,
+                    'house' => $shop->floor ? $shop->address . $shop->floor : $shop->address,
                     'lat' => $shop->lat,
                     'lng' => $shop->long,
                     'phone' => $shop->telephone
@@ -299,22 +299,19 @@ class IntraCityController extends BaseController
             'cargo_type' => IntraCityExpress::GOODS_TYPE_FLOWER,
             'cargo_num' => intval($post['packageNum'])
         ];
-        // 将高德地图坐标转换为腾讯地图坐标
         $originalLng = doubleval($post['user_lng']);
         $originalLat = doubleval($post['user_lat']);
-        $convertedCoord = \common\components\mapUtil::convertCoordinateByApi($originalLng, $originalLat);
-        
         $orderData = [
             //'out_store_id' => $shopId,
             'wx_store_id' => $shopExt['wxStoreId'],
             'user_name' => $post['user_name'],
             'user_phone' => $post['user_phone'],
-            'user_lng' => $convertedCoord['lng'],
-            'user_lat' => $convertedCoord['lat'],
+            'user_lng' => $originalLng,
+            'user_lat' => $originalLat,
             'user_address' => $post['user_address'],
             'cargo' => $cargo,
             //'use_sandbox' => 1 // 如果不需要沙箱,use_sandbox就不传就好了 -- 踩坑人的经验
-            //'use_sandbox' => getenv('YII_ENV') == 'production' ? 0 : 1 // TODO 根据环境变量判断是否使用沙盒环境
+            //'use_sandbox' => getenv('YII_ENV') == 'production' ? 0 : 1 // 根据环境变量判断是否使用沙盒环境 -- 没用,不生效
         ];
         
         $result = IntraCityExpress::preAddOrder($orderData);

+ 3 - 7
app-mall/controllers/BaseController.php

@@ -3,19 +3,13 @@
 namespace mall\controllers;
 
 use biz\shop\classes\ShopClass;
-use biz\sj\classes\SjClass;
 use bizHd\custom\classes\CustomClass;
 use bizMall\hd\classes\HdClass;
-use bizMall\merchant\services\MerchantExtendService;
-use bizMall\merchant\services\MerchantService;
 use bizMall\shop\classes\MainClass;
 use bizMall\user\classes\UserClass;
-use bizMall\user\services\UserService;
 use common\components\dict;
-use common\components\httpUtil;
 use common\components\jwt;
 use common\components\util;
-use function GuzzleHttp\Promise\iter_for;
 use Yii;
 
 class BaseController extends PublicController
@@ -45,7 +39,9 @@ class BaseController extends PublicController
             }
         }
         $this->user = $user;
-        $shopId = Yii::$app->request->get('account');
+        $shopId = Yii::$app->request->get('account'); // 从 $_GET 中取
+        $shopId = empty($shopId) ? Yii::$app->request->post('account') : $shopId; // 从 $_POST 中取
+        $shopId = intval($shopId);
         if (!empty($shopId)) {
             $this->shopId = $shopId;
             $shop = ShopClass::getById($shopId, true);

+ 76 - 11
app-mall/controllers/OrderController.php

@@ -10,7 +10,6 @@ use bizMall\goods\classes\GoodsClass;
 use bizMall\item\classes\ItemClass;
 use bizMall\order\classes\OrderClass;
 use bizMall\order\classes\OrderForwardClass;
-use bizMall\order\classes\OrderGoodsClass;
 use bizMall\order\classes\OrderItemClass;
 use bizMall\order\services\OrderService;
 use bizMall\promote\services\CouponService;
@@ -19,7 +18,6 @@ use bizMall\shop\classes\ShopExtClass;
 use bizMall\user\services\UserService;
 use common\components\dateUtil;
 use common\components\dict;
-use common\components\httpUtil;
 use common\components\imgUtil;
 use common\components\noticeUtil;
 use common\components\orderSn;
@@ -28,6 +26,7 @@ use common\services\xhPayToolService;
 use Yii;
 use common\components\util;
 use common\components\lakala\Lakala;
+use common\components\IntraCityExpress;
 
 class OrderController extends BaseController
 {
@@ -61,6 +60,45 @@ class OrderController extends BaseController
         util::success($respond);
     }
 
+    //新计算运费
+    public function actionNewFreight()
+    {
+        $post = Yii::$app->request->post();
+        $shopId = $this->shopId;
+        if (empty($shopId)) {
+            util::fail("门店不存在");
+        }
+        $shopExt = ShopExtClass::getByCondition(['shopId'=>$shopId], false, false, 'id, wxStoreId');
+
+        $cargoName = $post['cargo_name']; // 商品名称
+        $cargo = [
+            'cargo_name' => $cargoName, // 商品名称
+            'cargo_weight' => intval($post['weight'] * 1000), // 单位:克 -- 把千克转换为克 ---- 重量(用户未知)-- 大概
+            'cargo_price' => intval($post['price'] * 100), // 单位:分 -- 把元转换为分
+            'cargo_type' => IntraCityExpress::GOODS_TYPE_FLOWER,
+            'cargo_num' => intval($post['package_num'])
+        ];
+        $originalLng = doubleval($post['user_lng']);
+        $originalLat = doubleval($post['user_lat']);
+        $orderData = [
+            'wx_store_id' => $shopExt['wxStoreId'],
+            'user_name' => $post['user_name'],
+            'user_phone' => $post['user_phone'],
+            'user_lng' => $originalLng,
+            'user_lat' => $originalLat,
+            'user_address' => $post['user_address'],
+            'cargo' => $cargo,
+        ];
+
+        $result = IntraCityExpress::preAddOrder($orderData);
+        if ($result['errcode'] === 0) {
+            util::success($result, "运费查询成功");
+        } else {
+            Yii::error("运费查询失败:" . json_encode($result));
+            util::fail('运费查询失败' . json_encode($result));
+        }
+    }
+
     //计算运费,请搜索关键词calc_freight,二个方法要合一起 ssh 20221014
     public function actionFreight()
     {
@@ -68,18 +106,44 @@ class OrderController extends BaseController
         $shop = $this->shop;
         $shopLat = isset($shop->lat) ? $shop->lat : '';
         $shopLong = isset($shop->long) ? $shop->long : '';
+
+        // 判断地图功能是否正常。0 表示地图定位不可用,全部经纬度数据失效
+        if (dict::getDict('hasMap') == 0) {
+            $shopLat = '';
+            $shopLong = '';
+        }
         if (empty($shopLat) || empty($shopLong)) {
-            util::success(['distance' => 0, 'showDistance' => 0, 'fee' => 0]);
+            util::success([
+                'distance' => 0,
+                'showDistance' => 0,
+                'fee' => 0,
+                'hasMap'=>dict::getDict('hasMap'),
+                'shop' => 'fail' //门店引起的失败
+            ]);
         }
         $userLat = $get['lat'] ?? '';
         $userLong = $get['long'] ?? '';
         if (empty($userLat) || empty($userLong)) {
-            util::success(['distance' => 0, 'showDistance' => 0, 'fee' => 0]);
+            util::success([
+                'distance' => 0,
+                'showDistance' => 0,
+                'fee' => 0,
+                'hasMap'=>dict::getDict('hasMap'),
+                'client' => 'fail' //用户端定位失败
+            ]);
         }
         $weight = $get['weight'] ?? 0;
         if (empty($weight)) {
-            util::success(['distance' => 0, 'showDistance' => 0, 'fee' => 0]);
+            util::success([
+                'distance' => 0,
+                'showDistance' => 0,
+                'fee' => 0,
+                'hasMap'=>dict::getDict('hasMap'),
+                'weight' => 'fail' //重量不对
+            ]);
         }
+
+        //data: {distance: "321", showDistance: "0.3", fee: "12.00"}
         $respond = OrderClass::getDistanceFee($userLat, $userLong, $shopLat, $shopLong, $weight);
         util::success($respond);
     }
@@ -288,8 +352,8 @@ class OrderController extends BaseController
             $post['payWay'] = 0;
 
             //计算运费
-            $sendDistance = 0;
-            $sendCost = 0;
+            //$sendDistance = 0;
+            //$sendCost = 0;
             $shop = $this->shop;
             if ($sendType == dict::getDict('sendType', 'thirdSend')) {
                 $lat = $post['lat'] ?? '';
@@ -309,11 +373,12 @@ class OrderController extends BaseController
                 }
                 //花束重量默认1.5
                 $weight = 1.5;
-                $disRespond = OrderClass::getDistanceFee($lat, $lng, $shopLat, $shopLong, $weight);
-                $sendCost = $disRespond['fee'] ?? 0;
-                $sendDistance = $disRespond['distance'] ?? 0;
+                //$disRespond = OrderClass::getDistanceFee($lat, $lng, $shopLat, $shopLong, $weight);
+                //$sendCost = $disRespond['fee'] ?? 0;
+                //$sendDistance = $disRespond['distance'] ?? 0;
             }
-            $post['sendDistance'] = $sendDistance;
+            $post['sendDistance'] = isset($post['sendDistance']) ? $post['sendDistance'] : 0;
+            $sendCost = isset($post['sendCost']) ? floatval($post['sendCost']) : 0;
             $post['sendCost'] = $sendCost;
             $post['sjId'] = $this->sjId;
             $post['shopId'] = $this->shopId;

+ 2 - 5
biz-mall/order/classes/OrderClass.php

@@ -82,7 +82,6 @@ class OrderClass extends BaseClass
     //计算运费,请搜索关键词calc_freight,二个方法要合一起 ssh 20221014
     public static function getDistanceFee($userLat, $userLong, $shopLat, $shopLong, $weight)
     {
-
         //基础配送费8元,0-5公里,每公里+1元,5-100公里,6元起,每公里+2元
         //5-10公斤,2元起,每公斤+2元,10-15公斤,+12元,超过15公斤,+20元
         //00:00 - 06:00 +6元,22:00-24:00 +4元
@@ -141,10 +140,8 @@ class OrderClass extends BaseClass
         $showDistance = sprintf("%.1f", ($distance / 1000));
 
         //noticeUtil::push("零售商城 距离:{$distance} {$showDistance} 重量:{$weight} 费用:{$totalFee}", '15280215347');
-
-        return ['distance' => 0, 'showDistance' => 0, 'fee' => 0];
-
-        //return ['distance' => $distance, 'showDistance' => $showDistance, 'fee' => $totalFee];
+        //return ['distance' => 0, 'showDistance' => 0, 'fee' => 0];
+        return ['distance' => $distance, 'showDistance' => $showDistance, 'fee' => $totalFee];
     }
 
 

+ 0 - 59
common/components/mapUtil.php

@@ -56,63 +56,4 @@ class mapUtil
         $result = Json::decode($result);
         return $result;
     }
-
-    /**
-     * 高德地图坐标转换为腾讯地图坐标
-     * 虽然高德和腾讯都使用GCJ-02坐标系,但可能存在细微偏差
-     * 此方法提供精确转换
-     * @param float $lng 高德地图经度
-     * @param float $lat 高德地图纬度
-     * @return array ['lng' => 转换后经度, 'lat' => 转换后纬度]
-     */
-    public static function convertAmapToTencent($lng, $lat)
-    {
-        // 高德转腾讯的偏移参数(基于实际测试调整)
-        $dlng = -0.0065;
-        $dlat = -0.006;
-        
-        // 应用偏移量
-        $convertedLng = $lng + $dlng;
-        $convertedLat = $lat + $dlat;
-        
-        return [
-            'lng' => round($convertedLng, 6),
-            'lat' => round($convertedLat, 6)
-        ];
-    }
-
-    /**
-     * 使用腾讯地图API进行坐标转换
-     * 从高德坐标系(GCJ02)转换为腾讯坐标系
-     * @param float $lng 原始经度
-     * @param float $lat 原始纬度
-     * @return array ['lng' => 转换后经度, 'lat' => 转换后纬度]
-     */
-    public static function convertCoordinateByApi($lng, $lat)
-    {
-        // 使用腾讯地图坐标转换API
-        $url = "https://apis.map.qq.com/ws/coord/v1/translate";
-        $params = [
-            'locations' => $lat . ',' . $lng,
-            'type' => 3, // 3表示从GCJ02转换为腾讯坐标
-            'key' => self::$thirdMapKey
-        ];
-        
-        $curl = new curl\Curl();
-        $result = $curl->get($url . '?' . http_build_query($params));
-        $result = Json::decode($result);
-        
-        if ($result['status'] == 0 && !empty($result['locations'])) {
-            $location = $result['locations'][0];
-            return [
-                'lng' => round($location['lng'], 6),
-                'lat' => round($location['lat'], 6)
-            ];
-        }
-        
-        // 如果API转换失败,使用默认转换方法
-        //return self::convertAmapToTencent($lng, $lat);
-        return ['lng'=>$lng, 'lat'=>$lat];
-    }
-
 }