Prechádzať zdrojové kódy

【Add】订单批量更新状态

liuxiangxin 5 mesiacov pred
rodič
commit
c64b35e7a3

+ 1 - 1
.gitignore

@@ -9,7 +9,7 @@
 /elkconf
 /public/uploads/product/*
 /public/uploads/company/*
-/public
+/public/uploads/images/*
 /vendor
 *.DS_Store
 *.log

+ 32 - 0
app/Http/Controllers/Admin/Orders.php

@@ -317,6 +317,38 @@ class Orders extends Auth{
 		return								json_send(['code'=>'success','msg'=>'订单导入成功','path'=>'']);
 	}
 
+	/**
+	 * 批量修改状态
+	 * 
+	 * */
+	public function import_execl_status( Request $request,Model $Model,OrdersProduct $OrdersProduct,FilesManager $FilesManager){
+		// 验证参数
+		$request->scene('import_execl_status')->validate();
+		// 获取表格信息
+		$file								= request()->file('order_file');
+		// 返回结果
+		$sheetList							= $FilesManager->excelToOrderStatus($file);
+		// 如果不存在结果
+		if( isset($sheetList['error']) )	return json_send(['code'=>'error','msg'=>$sheetList['error']]);
+		// 循环表格数据
+		foreach ($sheetList as $key=>$value) 		{
+			// 客户ID
+			$orderId						= $Model->codeToId($value['order_code']);
+			// 如果客户ID有误
+			if( !$orderId )					return json_send(['code'=>'error','msg'=>$value['order_code'].'编码有误']);
+			// 订单状态
+			$status							= $Model->getWeibanStatus($value['status']);
+			// 状态提示
+			if( $status < 0 )				return json_send(['code'=>'error','msg'=>$value['order_code'].'状态有误']);
+			// 修改数据
+			$result							= $Model->setOrderStatus($orderId,$status,$OrdersProduct);
+			// 提示
+			if( isset($result['error'])	)	return json_send(['code'=>'error','msg'=>$value['order_code'].$result['error']]);
+		}
+		// 提示成功
+		return								json_send(['code'=>'success','msg'=>'订单导入成功','path'=>'']);
+	}
+
 	/**
 	 * 导出表格导入
 	 * 

+ 4 - 2
app/Http/Middleware/VerifyCsrfToken.php

@@ -29,11 +29,13 @@ class VerifyCsrfToken extends Middleware
         'admin/image_manager/delete',
         // 编辑器
         'admin/ueditor/upload',
-        // 导入表格
+        // 导入微赞订单
         'admin/orders/import_execl',
+        // 批量更新订单状态
+        'admin/orders/import_execl_status',
         // 导入表格
         'admin/custom/import_execl',
         // 导入表格
-        'admin/custom_score/import_execl'
+        'admin/custom_score/import_execl',
     ];
 }

+ 2 - 1
app/Http/Requests/Admin/Orders.php

@@ -31,7 +31,8 @@ class Orders extends BaseRequest
         'add'                   => ['product_code'],
         'edit'                  => ['id','product_code'],
         'set_status'            => ['id','status'],
-        'import_execl'          => ['order_file']
+        'import_execl'          => ['order_file'],
+        'import_execl_status'   => ['order_file']
 	];
 
     /**

+ 67 - 0
app/Models/FilesManager.php

@@ -253,6 +253,73 @@ class FilesManager extends Model
         return                          $field;
     }
 
+
+    /**
+     * 从Excel获取订单数据
+     * 
+     * @param     \Illuminate\Http\UploadedFile   $file     传入的文件
+     * 
+     */
+    public function excelToOrderStatus($file)
+    {
+        // 获取文件后缀名
+        $ext                                            = pathinfo($file->getClientOriginalName(), PATHINFO_EXTENSION);
+        // 验证文件格式
+        if (!in_array($ext, ['csv', 'xlsx', 'xls']))    return ['error' => '请上传Excel'];
+        // 读取文件
+        $reader                                         = IOFactory::createReader(ucwords($ext))->load($file->getPathname());
+        // 最大行数
+        $reader                                         = $reader->getActiveSheet();
+        $maxRow                                         = $reader->getHighestRow();
+        // 验证文件格式
+        if ( $maxRow > 500 )                            return ['error' => '每次批量仅可处理500条'];
+        // 提取数据
+        $sheetList                                      = $reader->toArray('');
+        // 表格列标题
+        $column                                         = array_shift($sheetList);
+        // 列标题换字段
+        $column                                         = $this->columnToFieldOrderStatus($column);
+        // 字段值
+        if( !$column )                                  return ['error' => '请检查内容表头格式'];
+        // 循环表格数据
+        foreach ($sheetList as $row=>$value)            {
+            // 获取对应的数据
+            $order                                      = [];
+            // 循环每个字段,获取值
+            foreach ($value as $kk => $vv)              {
+                // 根据字段索引获取对应的值,转存到订单
+                if( isset($column[$kk]) )               $order[$column[$kk]] = $vv;
+            }
+            // 验证必须数据
+            if( !$order['order_code'] )                 return ['error' => ($row + 1).' 没有识别到订单ID'];
+            if( !$order['status'] )                     return ['error' => ($row + 1).' 没有识别到订单状态'];
+            // 如果没有订单ID 使用上一条的信息(兼容合并单元格)
+            if( !$order['order_code'] )                 $order['order_code']        = $sheetList[$row-1]['order_code'];
+            if( !$order['status'] )                     $order['status']            = $sheetList[$row-1]['status'];
+            // 追加到订单列表
+            $sheetList[$row]                            = $order;
+        }
+        // 返回结果
+        return                                          $sheetList;
+    }
+
+    /**
+     * 获取列对应的数据库字段名
+     * 
+     */
+    private function columnToFieldOrderStatus($column)
+    {
+        // 字段值
+        $field                              = [];
+        // 循环列标题
+        foreach ($column as $key => $value) {
+            if( $value == '订单编号')       $field[$key] = 'order_code';
+            if( $value == '订单状态')       $field[$key] = 'status';
+        }
+        // 返回字段值
+        return                          $field;
+    }
+
     /**
      * 从Excel获取客户信息
      * 

+ 20 - 2
app/Models/Traits/Orders/Status.php

@@ -53,11 +53,11 @@ trait Status
                                         'state'         =>'回执审核',
                                     ],'10'=>[
                                         'id'            =>10,
-                                        'name'          =>'拼团中',// 回执审核
+                                        'name'          =>'拼团中',// 拼团中
                                         'state'         =>'拼团中',
                                     ],'11'=>[
                                         'id'            =>11,
-                                        'name'          =>'拼团失败',// 回执审核
+                                        'name'          =>'拼团失败',// 拼团失败
                                         'state'         =>'拼团失败',
                                     ]];
 
@@ -87,6 +87,24 @@ trait Status
     }
 
 
+    /**
+     * 获取交易类型
+     * 
+     * @param   string       $state     交易状态
+     * 
+     */
+    public function getStateToStatus($state){
+        // 状态列表
+        $list               = $this->getStatusList();
+        // 状态
+        foreach ($list as $value) {
+            if($value['state'] == $state )  return $value['id'];
+        }
+        // 返回结果
+        return              -1;
+    }
+
+
     /**
      * 获取交易类型
      * 

BIN
public/uploads/order_status_tpl.xlsx


+ 53 - 2
resources/views/admin/orders/index.blade.php

@@ -3,12 +3,18 @@
 style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 @endsection
 @section('content')
-@if( check_auth('admin/orders/import_execl') )
+
 <div class="page-header">
+	@if( check_auth('admin/orders/import_execl') )
 	<a href="javascript:;" class="btn btn-primary upload"> <span class="fa fa-upload"></span> 导入微赞订单</a>
 	<a href="/uploads/order_tpl.xlsx" class="btn btn-primary" download="订单导入模版"> <span class="fa fa-download"></span> 模版</a>
+	@endif
+	@if( check_auth('admin/orders/import_execl_status') )
+	<a href="javascript:;" class="btn btn-primary upload_status"> <span class="fa fa-upload"></span> 批量更新状态</a>
+	<a href="/uploads/order_status_tpl.xlsx" class="btn btn-primary" download="订单导入模版"> <span class="fa fa-download"></span> 批量状态模版</a>
+	@endif
 </div>
-@endif
+
 <form action="" method="get" name="thisform" class="form-horizontal form-line">
 	<div class="form-group col col-lg-2 col-md-2 col-sm-2 col-xs-12" style="margin-right: 2px;">
 		<input type="text" class="form-control" name="order_code" value="{{request('order_code','')}}" maxlength="13" placeholder="请输入订单编号查询" />
@@ -179,6 +185,51 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			}
 		});
 	});
+	$('.upload_status').on('click', function() {
+		$('#form-upload').remove();
+		$('body').prepend('<form enctype="multipart/form-data" id="form-upload" style="display: none;"><input osctype="btn_upload_file" type="file" name="order_file" multiple="multiple" /></form>');
+		$('#form-upload input[name=\'order_file\']').trigger('click');
+		$('[osctype="btn_upload_file"]').fileupload({
+			dataType: 'json',
+			url: "{{url('admin/orders/import_execl_status')}}",
+			singleFileUploads: false,
+			beforeSend: function() {
+				art.dialog({
+					id: 'loading',
+					lock: true,
+					title: '文件上传中'
+				});
+			},
+			done: function(e, data) {
+				art.dialog.list['loading'].close();
+				var result = data.result;
+				if (result.code == 'error') {
+					art.dialog({
+						content: result.msg,
+						lock: true,
+						ok: function() {}
+					});
+				}
+				if (result.code == 'success') {
+					art.dialog({
+						content: result.msg,
+						lock: true,
+						ok: function() {
+							location.reload();
+						}
+					});
+				}
+			},
+			fail: function(e,c) {
+				art.dialog.list['loading'].close();
+				art.dialog({
+					content: '<p>'+c.jqXHR.status+'=>'+c.jqXHR.statusText+'</p>',
+					lock: true,
+					ok: function() {}
+				});
+			}
+		});
+	});
  })
 </script>
 @endsection

+ 2 - 0
routes/web.php

@@ -171,6 +171,8 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     Route::any('orders/import_execl',[App\Http\Controllers\Admin\Orders::class,'import_execl']);
     // 订单下载
     Route::any('orders/down_excel',[App\Http\Controllers\Admin\Orders::class,'down_excel']);
+    // 订单批量更新状态
+    Route::any('orders/import_execl_status',[App\Http\Controllers\Admin\Orders::class,'import_execl_status']);
 
     /* 订单物流-发货 */
     // 列表