Explorar o código

【Add】取消订单恢复库存,产品城市限制显示

liuxiangxin hai 4 meses
pai
achega
f8f7a1aff6

+ 1 - 1
app/Http/Controllers/Api/Orders.php

@@ -80,7 +80,7 @@ class Orders extends Api{
 		// 查询用户标签
 		$tags							= $WeiBanTags->getListByWeibanExtid($custom['weiban_extid']);
 		// 查询产品信息
-		$productList					= $Product->getListByIds(array_column($buyList,'product_id'));
+		$productList					= $Product->getListByIds(array_column($buyList,'product_id'),[1,$cityId]);
 		$skusList						= $ProductSkus->getListByIds(array_column($buyList,'product_skuid'));
 		// 当前时间
 		$time 							= time();

+ 4 - 2
app/Http/Controllers/Api/Product.php

@@ -188,9 +188,11 @@ class Product extends Api{
 		// 接收参数
 		$id						    = request('id',0);
 		// 显示
-		$map[]						= ['status','=','0'];
+		$map[]						= ['product.status','=','0'];
+        // 是否有城市
+		$wherIn						= empty($custom['city_id']) ? [1] : [1,$custom['city_id']];
 		// 查询
-		$data   					= $Model->query()->where($map)->find($id,['id','name','thumb','stock','spec','poster','price','business_id','market_price']);
+		$data   					= $Model->query()->join('product_city','product_city.product_id','=','product.id')->where($map)->whereIn('product_city.city_id',$wherIn)->find($id,['product.id','product.name','product.thumb','product.stock','product.spec','product.poster','product.price','product.business_id','product.market_price']);
 		// 如果没有数据
         if( !$data )                return json_send(['code'=>'error','msg'=>'产品已下架','data'=>['error'=>'产品已下架或不存在']]);
 		// 转数组

+ 37 - 7
app/Models/Orders.php

@@ -3,6 +3,9 @@
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
 use App\Models\Traits\Orders\Status as OrdersStatus;
+use App\Models\Product;
+use App\Models\Product\Skus as ProductSkus;
+use Illuminate\Support\Facades\DB;
 /**
  * 需求模型
  * 
@@ -77,21 +80,23 @@ class Orders extends Model
      */
     public function setOrderStatus($id,$status,$OrdersProduct){
         // 查询数据
-        $result			= $this->edit($id,['status'=>$status]);
+        $result			    = $this->edit($id,['status'=>$status]);
         // 提示新增失败
-        if( !$result )	{
+        if( !$result )	    {
             // 提示信息
-            return		['error'=>'订单修改失败'];
+            return		    ['error'=>'订单修改失败'];
         }
         // 查询数据
-        $result			= $OrdersProduct->query()->where([['order_id','=',$id]])->update(['status'=>$status,'update_time'=>time()]);
+        $result			    = $OrdersProduct->query()->where([['order_id','=',$id]])->update(['status'=>$status,'update_time'=>time()]);
         // 提示新增失败
-        if( !$result )	{
+        if( !$result )	    {
             // 提示信息
-            return      ['error'=>'子订单修改失败'];json_send(['code'=>'error','msg'=>'取消失败','data'=>['error'=>'']]);
+            return          ['error'=>'子订单修改失败'];json_send(['code'=>'error','msg'=>'取消失败','data'=>['error'=>'']]);
         }
+        // 如果是取消订单,恢复库存
+        if( $status == 4 )  $this->restoreProductStock($id,$OrdersProduct);
         // 进行操作
-        return          ['success'=>'成功'];
+        return              ['success'=>'成功'];
     }
 
     /**
@@ -165,5 +170,30 @@ class Orders extends Model
 		return                      ['success'=>'操作成功'];
 	}
 
+     /**
+     * 根据订单ID恢复产品库存
+     * @param	int  			$orderId 		订单OD
+	 * @param	OrdersProduct	$OrdersProduct	子订单模型
+     * 
+     */
+    private function restoreProductStock($orderId,$OrdersProduct){
+        // 产品SKU
+        $ProductSkus                = new ProductSkus();
+        // 产品SKU
+        $Product                    = new Product();
+        // 通过订单ID获取对应的产品
+        $orderProducts              = $OrdersProduct->query()->where([['order_id','=',$orderId]])->select(['product_id','sku_attr_names','buy_num'])->get()->toArray();
+        // 循环产品
+        foreach ($orderProducts as $value) {
+            // 没有产品就不执行
+            if( !$value['product_id'] ) continue;
+            // 恢复库存
+            $ProductSkus->query([['product_id','=',$value['product_id']],['sku_attr_names','=',$value['sku_attr_names']]])->update(['stock'=>DB::raw('stock+'.$value['buy_num'])]);
+            // 恢复库存
+            $Product->edit($value['product_id'],['stock'=>DB::raw('stock+'.$value['buy_num'])]);
+        }
+        // 恢复库存
+        return                      true;
+    }
 
 }

+ 4 - 2
app/Models/Product.php

@@ -157,10 +157,12 @@ class Product extends Model
      * 获取多条数据
      * 
      */
-    public function getListByIds($productIds)
+    public function getListByIds($productIds,$citys=[])
     {
         // 写入数据表
-        $data				    = $this->query()->whereIn('id',$productIds)->where([['status','=',0]])->get(['id','name as product_name','thumb as product_thumb','spec as sku_attr_names','price','stock','status','business_id','quota','min_quota','quota_start','quota_end','tag_scope','tag_exclude'])->toArray();
+        $data				    = $this->query();
+        if( $citys )            $data = $data->join('product_city','product_city.product_id','=','product.id')->whereIn('product_city.city_id',$citys);
+        $data				    = $data->whereIn('product.id',$productIds)->where([['product.status','=',0]])->get(['product.id','product.name as product_name','product.thumb as product_thumb','product.spec as sku_attr_names','product.price','product.stock','product.status','product.business_id','product.quota','product.min_quota','product.quota_start','product.quota_end','product.tag_scope','product.tag_exclude'])->toArray();
         // 列表
         $list                   = [];
         // 循环处理