wesmiler 1 năm trước cách đây
mục cha
commit
bd98f36713

+ 47 - 19
app/Services/Api/GoodsService.php

@@ -134,8 +134,8 @@ class GoodsService extends BaseService
                 $item['supply_name'] = isset($supplyList[$item['supply_type']]) ? $supplyList[$item['supply_type']] : '';
                 $item['usdt_price'] = $usdtPrice;
                 $item['xd_price_rate'] = $xdPrice;
-                $item['original_price'] = $item['retail_price'];
-                $item['retail_price'] = $usdtPrice > 0 ? moneyFormat($item['retail_price'] / $usdtPrice * $xdPrice, 2) : $item['retail_price'];
+                $item['retail_price1'] = $item['retail_price'];
+                $item['retail_price'] = $this->getRealSalePrice($item['cost_price']);
             }
             unset($item);
         } else {
@@ -184,7 +184,8 @@ class GoodsService extends BaseService
             $info['xd_price'] = $xdPrice;
             $info['custom_uid'] = ConfigService::make()->getConfigByCode('xl_custom_id',100001);
             if(isset($info['retail_price']) && $info['retail_price']){
-                $info['retail_price'] = moneyFormat($info['retail_price']/$usdtPrice * $xdPrice,2);
+                $info['retail_price1'] =$info['retail_price'];
+                $info['retail_price'] = $this->getRealSalePrice($info['cost_price']);
             }
 
             if(isset($info['sku_list']) && $info['sku_list']){
@@ -192,7 +193,8 @@ class GoodsService extends BaseService
                     $v['detail_img'] = $v['detail_img']? json_decode($v['detail_img'], true) : [];
                     $v['attr'] = $v['attr']? json_decode($v['attr'], true) : [];
                     $v['main_img'] = $v['main_img']? get_image_url($v['main_img']) : '';
-                    $v['retail_price'] =  $v['retail_price']? moneyFormat($v['retail_price']/$usdtPrice * $xdPrice,2) : $info['retail_price'];
+                    $v['retail_price_1'] =  $v['retail_price'];
+                    $v['retail_price'] =  $this->getRealSalePrice($v['plat_price']);
 
                 }
                 unset($v);
@@ -209,6 +211,29 @@ class GoodsService extends BaseService
     }
 
     /**
+     * 实际售价
+     * @param $price 成本价或其他价格
+     * @param bool $float 是否浮动转换,1-浮动转换,2-不浮动转换,3-浮动不转换
+     * @return string
+     */
+    public function getRealSalePrice($price, $float=1)
+    {
+        $usdtPrice = RedisService::get("caches:wallets:usdt_rate");
+        if($usdtPrice<=0){
+            $usdtCnyPrice = ConfigService::make()->getConfigByCode('usdt_cny_price', 7.2);
+            $usdtPrice = $usdtCnyPrice>0 && $usdtCnyPrice< 100? $usdtCnyPrice : 0;
+        }
+        $xdPrice = ConfigService::make()->getConfigByCode('xd_price', 100);
+        $xdPrice = $xdPrice > 0 && $xdPrice <= 10000 ? $xdPrice : 100;
+        $floatRate = ConfigService::make()->getConfigByCode('goods_price_float_rate', 0);
+        $floatRate = $floatRate>0 && $floatRate<100? $floatRate : 0;
+        $price = $float == 2? $price : floatval($price * (1 + ($floatRate/100)));
+        if($float==3){
+            return $price;
+        }
+        return $usdtPrice > 0 ? moneyFormat($price / $usdtPrice * $xdPrice, 2) : $price;
+    }
+    /**
      * 获取要购买或结算的商品列表
      * @param $userId
      * @param array $params
@@ -254,9 +279,10 @@ class GoodsService extends BaseService
                 $info['num'] = $num;
                 $info['sku_id'] = $skuId;
                 $skuInfo = GoodsSkuModel::where(['goods_id'=> $goodsId,'sku_id'=> $skuId,'mark'=>1])->first();
-                $retailPrice = isset($skuInfo['retail_price'])? $skuInfo['retail_price'] : 0;
-                if($retailPrice){
-                    $info['retail_price'] = $usdtPrice > 0 ? moneyFormat($retailPrice / $usdtPrice * $xdPrice, 2) : $retailPrice;
+                $price = isset($skuInfo['plat_price'])? $skuInfo['plat_price'] : 0;
+                if($price){
+                    $info['retail_price1'] = $info['retail_price'];
+                    $info['retail_price'] = $this->getRealSalePrice($price);
                 }
 
                 if(isset($skuInfo['attr']) && $skuInfo['attr']){
@@ -293,17 +319,17 @@ class GoodsService extends BaseService
                     $item['supply_name'] = isset($supplyList[$item['supply_type']]) ? $supplyList[$item['supply_type']] : '';
                     $item['usdt_price'] = $usdtPrice;
                     $item['xd_price_rate'] = $xdPrice;
-                    $item['original_price'] = $item['retail_price'];
+                    $item['retail_price1'] = $item['retail_price'];
                     $skuInfo = isset($item['sku'])? $item['sku'] : [];
                     if(isset($skuInfo['attr']) && $skuInfo['attr']){
                         $skuInfo['attr'] = json_decode($skuInfo['attr'], true);
                     }
                     $item['sku'] = $skuInfo;
-                    $retailPrice = isset($skuInfo['retail_price'])? $skuInfo['retail_price'] : 0;
-                    if($retailPrice){
-                        $item['retail_price'] = $usdtPrice > 0 ? moneyFormat($retailPrice / $usdtPrice * $xdPrice, 2) : $retailPrice;
+                    $price = isset($skuInfo['plat_price'])? $skuInfo['plat_price'] : 0;
+                    if($price){
+                        $item['retail_price'] = $this->getRealSalePrice($price);
                     }else{
-                        $item['retail_price'] = $usdtPrice > 0 ? moneyFormat($item['retail_price'] / $usdtPrice * $xdPrice, 2) : $item['retail_price'];
+                        $item['retail_price'] = $this->getRealSalePrice($item['cost_price']);
                     }
                     $skuList[$item['goods_id']] = [
                         'sku_id'=> $item['sku_id'],
@@ -341,7 +367,7 @@ class GoodsService extends BaseService
             ->whereIn('a.goods_id',$ids)
             ->where(['a.status' => 1, 'a.mark' => 1])
             ->where('a.retail_price', '>', 0)
-            ->select(['a.goods_id','a.merch_id','a.goods_name','a.cate_id','a.supply_type','a.main_img','a.retail_price'])
+            ->select(['a.goods_id','a.merch_id','a.goods_name','a.cate_id','a.supply_type','a.main_img','a.cost_price','a.retail_price'])
             ->get();
         $goods = $goods? $goods->toArray() : [];
         if($goods){
@@ -433,13 +459,13 @@ class GoodsService extends BaseService
                 $item['supply_name'] = isset($supplyList[$item['supply_type']]) ? $supplyList[$item['supply_type']] : '';
                 $item['usdt_price'] = $usdtPrice;
                 $item['xd_price_rate'] = $xdPrice;
-                $item['original_price'] = $item['retail_price'];
+                $item['retail_price1'] = $item['retail_price'];
                 $skuInfo = isset($item['sku'])? $item['sku'] : [];
-                $retailPrice = isset($skuInfo['retail_price'])? $skuInfo['retail_price'] : 0;
-                if($retailPrice){
-                    $item['retail_price'] = $usdtPrice > 0 ? moneyFormat($retailPrice / $usdtPrice * $xdPrice, 2) : $retailPrice;
+                $price = isset($skuInfo['plat_price'])? $skuInfo['plat_price'] : 0;
+                if($price){
+                    $item['retail_price'] = $this->getRealSalePrice($price);
                 }else{
-                    $item['retail_price'] = $usdtPrice > 0 ? moneyFormat($item['retail_price'] / $usdtPrice * $xdPrice, 2) : $item['retail_price'];
+                    $item['retail_price'] = $this->getRealSalePrice($item['cost_price']);
                 }
             }
             unset($item);
@@ -469,7 +495,7 @@ class GoodsService extends BaseService
             ->leftJoin('goods as b','b.goods_id','=','a.goods_id')
             ->where(['a.status' => 1, 'a.mark' => 1,'b.status'=>1,'b.mark'=>1])
             ->where('a.num', '>', 0)
-            ->where('b.retail_price', '>', 0)
+            ->where('b.cost_price', '>', 0)
             ->count('a.id');
         if($data){
             RedisService::set($cacheKey, $data, rand(300, 600));
@@ -639,6 +665,8 @@ class GoodsService extends BaseService
             return false;
         }
 
+        $size = ConfigService::make()->getConfigByCode('goods_update_limit', 0);
+        $pageSize = $size>10 && $size < 500? $size : $pageSize;
         $page = RedisService::get($cacheKey . '_page');
         $page = $page ? $page + 1 : 1;
         $lastTime = $this->model->where(['mark' => 1])->orderBy('create_time', 'desc')->value('create_time');

+ 42 - 27
app/Services/Api/OrderService.php

@@ -222,13 +222,14 @@ class OrderService extends BaseService
         foreach($goods as &$item){
             $goodsId = isset($item['goods_id'])? $item['goods_id'] : 0;
             $merchId = isset($item['merch_id'])? $item['merch_id'] : 0;
-            $retailPrice = isset($item['retail_price'])? $item['retail_price'] : 0;
+            $price = isset($item['cost_price'])? $item['cost_price'] : 0;
             $num = isset($skuList[$goodsId]['num'])? intval($skuList[$goodsId]['num']) : 0;
             $skuId = isset($skuList[$goodsId]['sku_id'])? intval($skuList[$goodsId]['sku_id']) : 0;
             $attr = isset($skuAttr[$goodsId])? $skuAttr[$goodsId] : [];
-            if($num>0 && $skuId >0 && $retailPrice>0){
-                $item['price'] = moneyFormat($retailPrice/$usdtPrice * $xdPrice,2);
-                $total = moneyFormat($retailPrice * $num, 2);
+            if($num>0 && $skuId >0 && $price>0){
+                $item['price'] = GoodsService::make()->getRealSalePrice($price); // 浮动后星豆价
+                $price = GoodsService::make()->getRealSalePrice($price. 3); // 浮动后原售价
+                $total = moneyFormat($price * $num, 2);
                 $xdTotal = moneyFormat($item['price'] * $num, 2);
 
                 // 订单商品
@@ -1010,7 +1011,7 @@ class OrderService extends BaseService
         $goodsId = isset($params['goods_id']) ? $params['goods_id'] : 0;
         $refundType = isset($params['refund_type']) ? $params['refund_type'] : 0;
         $refundRemark = isset($params['remark']) ? $params['remark'] : '';
-        $info = $this->model->where(['id' => $id, 'mark' => 1])
+        $info = $this->model->with(['goods'])->where(['id' => $id, 'mark' => 1])
             ->select(['id','order_no','out_order_no','user_id','merch_id','pay_money','coupon_id','pay_status','status','refund_status','pay_time'])
             ->first();
         $status = isset($info['status']) ? $info['status'] : 0;
@@ -1019,6 +1020,7 @@ class OrderService extends BaseService
         $orderUserId = isset($info['user_id']) ? $info['user_id'] : 0;
         $payStatus = isset($info['pay_status']) ? $info['pay_status'] : 0;
         $refundStatus = isset($info['refund_status']) ? $info['refund_status'] : 0;
+        $goods = isset($info['goods']) ? $info['goods'] : [];
         if (!$id || empty($info)) {
             $this->error = 2912;
             return false;
@@ -1040,6 +1042,17 @@ class OrderService extends BaseService
             return false;
         }
 
+        if(!in_array($refundType,[1,2,3,4])){
+            $this->error = 2922;
+            return false;
+        }
+
+        // 多商品退款暂不开放
+        if(count($goods)>1){
+            $this->error = 2920;
+            return false;
+        }
+
         // 订单商品
         /*$orderGoodsIds = OrderGoodsModel::where(['order_no'=>$orderNo,'status'=>1,'mark'=>1])->pluck('goods_id');
         $orderGoodsIds = $orderGoodsIds? $orderGoodsIds->toArray() : [];
@@ -1051,37 +1064,39 @@ class OrderService extends BaseService
         // 站外售后验证
         $result = SupplyService::make()->getApiData('getAfterCan',['plat_order_no'=> $outOrderNo]);
         $orderGoods = isset($result['order_goods'])? $result['order_goods'] : [];
-        var_dump($orderGoods);
-        if(empty($orderGoods)){
+        $orderGoodsInfo = isset($orderGoods[0])? $orderGoods[0] : [];
+        if(empty($orderGoods) || empty($orderGoodsInfo)){
             $this->error = 2918;
             return false;
         }
 
         // 检查
-//        foreach ($orderGoods as $item){
-//            if($item['status'] == 0){
-//                $this->error = 2919;
-//                return false;
-//            }
-//        }
-//
-//        // 站外申请售后
-//        foreach ($orderGoods as $item){
-//            $data = [
-//                'goods_sku'=> $item['goods_sku'],
-//                'after_type'=> $refundType,
-//                'after_num'=> $item['after_num'],
-//                'explain'=> $refundRemark,
-//                'order_goods_id'=> $refundRemark,
-//            ];
-//            $result = SupplyService::make()->getApiData('applyAfter',$data);
+        $outRefundStatus = isset($orderGoodsInfo['status'])? $orderGoodsInfo['status'] : 0;
+        if($outRefundStatus == 0){
+            $this->error = 2921;
+            return false;
+        }
+
+        // 站外申请售后
+        $data = [
+            'plat_order_no'=> $outOrderNo,
+            'goods_sku'=> isset($orderGoodsInfo['goods_sku'])? $orderGoodsInfo['goods_sku'] : '',
+            'after_num'=> isset($orderGoodsInfo['after_num'])? $orderGoodsInfo['after_num'] : 1,
+            'order_goods_id'=> isset($orderGoodsInfo['order_goods_id'])? $orderGoodsInfo['order_goods_id'] : 0,
+            'after_type'=> $refundType,
+            'explain'=> $refundRemark,
+        ];
+
+        $result = SupplyService::make()->getApiData('applyAfter', $data);
+        var_dump($result);
 //            if($item['status'] == 0){
 //                $this->error = 2919;
 //                return false;
 //            }
-//        }
-//
-//        // 处理
+
+
+
+        // 处理
 //        if(!$this->model->where(['id'=> $id,'mark'=>1])->update(['status'=> 5,'refund_status'=>1,'refund_type'=> $refundType,'refund_remark'=> $refundRemark,'refund_result'=>'','update_time'=>time()])){
 //            $this->error = 2917;
 //            return false;

+ 3 - 0
resources/lang/zh-cn/api.php

@@ -194,6 +194,9 @@ return [
     '2917'=> '订单申请售后失败,请返回重试',
     '2918'=> '没有可售后的商品,请联系客服',
     '2919'=> '订单商品存在不可售后商品,请联系客服',
+    '2920'=> '多商品售后暂未开放,请联系客服处理',
+    '2921'=> '该订单不支持售后,请联系客服处理',
+    '2922'=> '请选择有效的售后类型',
 
 
     '112009'=> '供应商账户余额不足,请联系客服',