Forráskód Böngészése

Merge branch 'liuxiangxin' into jun

jun 5 hónapja
szülő
commit
b19e36d028

+ 1 - 1
.gitignore

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

+ 120 - 0
app/Http/Controllers/Admin/Custom.php

@@ -9,6 +9,11 @@ use Illuminate\Support\Carbon;
 use App\Models\WeiBan\Follow as WeiBanFollow;
 use App\Models\FilesManager;
 use App\Models\WeiBan\External as WeiBanExternal;
+use PhpOffice\PhpSpreadsheet\Cell\DataType;
+use PhpOffice\PhpSpreadsheet\IOFactory;
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use PhpOffice\PhpSpreadsheet\Style\Alignment;
+use PhpOffice\PhpSpreadsheet\Style\Fill;
 
 /**
  * 客户管理
@@ -223,4 +228,119 @@ class Custom extends Auth{
 		return								json_send(['code'=>'success','msg'=>'批量导入成功','path'=>'']);
 	}
 
+	/**
+	 * 导出表格
+	 * 
+	 * */
+	public function down_excel(Model $Model,City $City){
+		// 接受参数
+		$code					= request('custom_code','');
+		$phone					= request('phone','');
+		$username				= request('username','');
+		$weibanId				= request('weiban_extid','');
+		$cityId					= request('city_id',0);
+		$status					= request('status');
+		$startTime				= request('start_time','');
+		// 编码转ID
+		$uid					= $Model->codeToId($code);
+		// 查询条件
+		$map 					= [];
+		// 编码ID
+		if( $uid )				$map[] = ['uid','=',$uid];
+		if( $phone )			$map[] = ['phone','=',$phone];
+		if( $username )			$map[] = ['username','=',$username];
+		if( $cityId )			$map[] = ['city_id','=',$cityId];
+		if( $weibanId )			$map[] = ['weiban_extid','=',$weibanId];
+		if( $startTime )		$map[] = ['insert_time','>=',Carbon::createFromFormat('Y-m-d',$startTime)->startOfDay()->getTimestamp()];
+		if( $startTime )		$map[] = ['insert_time','<=',Carbon::createFromFormat('Y-m-d',$startTime)->endOfDay()->getTimestamp()];
+		if( !is_null($status) )	$map[] = ['status','=',$status];
+		// 查询数据
+		$list					= $Model->query()->where($map)->orderByDesc('uid')->get()->toArray();
+		// 循环处理数据
+		foreach ($list as $key => $value) {
+			// 城市名
+			$value['city_name'] 	= $value['city_id'] ? $City->getOne($value['city_id'],'name') : '';
+			// id转编号
+			$value['custom_code'] 	= $Model->idToCode($value['uid']);
+			// 重组
+			$list[$key]				= $value;
+		}
+		try {
+			// 去下载
+			$this->toDown($list);
+		} catch (\Throwable $th) {
+			echo $th->getMessage();
+		}
+	}
+
+	/**
+	 * 去下载
+	 */
+	private function  toDown($data){
+		// 创建新的电子表格对象
+		$spreadsheet			= new Spreadsheet();
+		// 设置合并单元格的行和列,例如合并A1到B2的单元格
+		$sheet					= $this->setStyle($spreadsheet);
+		// 从第二行写入
+		$row					= 2;
+		// 循环写入
+		foreach ($data as  $value) {
+			// 单元格内容写入
+			$sheet->setCellValue('A'.$row, $value['custom_code']);
+			//避免 = + - 识别成公式
+            $sheet->setCellValueExplicit('B'.$row, $value['username'],DataType::TYPE_STRING);
+            $sheet->setCellValue('C'.$row, $value['phone']);
+			$sheet->setCellValue('D'.$row, $value['weiban_extid']);
+			$sheet->setCellValue('E'.$row, $value['city_name']);
+			$sheet->setCellValue('F'.$row, $value['status']?'禁用':'正常');
+			$sheet->setCellValue('G'.$row, date('Y-m-d H:i:s',$value['insert_time']));
+			$sheet->setCellValue('H'.$row, date('Y-m-d H:i:s',$value['update_time']));
+			// 行数+1
+			$row++;
+		}
+		// 创建内容
+		$writer 				= IOFactory::createWriter($spreadsheet, 'Xlsx');
+		header('Pragma: public');
+		header('Content-type:application/vnd.ms-excel');
+		header('Content-Disposition: inline;filename=下载订单.xlsx');
+		// 输出数据流
+		return $writer->save('php://output');
+	}
+
+	/**
+	 * 设置表格样式
+	 * 
+	 */
+	private function setStyle(Spreadsheet $spreadsheet){
+		// 选择当前活动的工作表
+		$sheet					= $spreadsheet->getActiveSheet();
+		// 宽
+		$sheet->getColumnDimension('A')->setWidth(15);
+		$sheet->getColumnDimension('B')->setWidth(15);
+		$sheet->getColumnDimension('C')->setWidth(15);
+		$sheet->getColumnDimension('D')->setWidth(30);
+		$sheet->getColumnDimension('E')->setWidth(15);
+		$sheet->getColumnDimension('F')->setWidth(15);
+		$sheet->getColumnDimension('G')->setWidth(20);
+		$sheet->getColumnDimension('H')->setWidth(20);
+		// 默认高度
+		$sheet->getDefaultRowDimension()->setRowHeight(18);
+		// 加粗第一行
+		$sheet->getStyle('A:H')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER);
+		$sheet->getStyle('A1:H1')->getFont()->setBold(true);
+		$sheet->getStyle('A1:H1')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('FF00FF00'); // ARGB颜色代码,例如绿色
+		// 设置表格标题
+		$sheet
+		->setCellValue('A1', '客户编码')
+		->setCellValue('B1', '客户昵称')
+		->setCellValue('C1', '联系方式')
+		->setCellValue('D1', '微伴ID')
+		->setCellValue('E1', '客户城市')
+		->setCellValue('F1', '客户状态')
+		->setCellValue('G1', '创建时间')
+		->setCellValue('H1', '更新时间');
+		// 返回结果
+		return 					$sheet;
+	}
+
 }

+ 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 - 4
app/Http/Controllers/Admin/Product.php

@@ -186,7 +186,7 @@ class Product extends Auth{
 				// 组合数据
 				foreach ($specAttr as $key => $value) {
 					// 查询结果
-					$value['id']		= $ProductAttr->upsertByName($value['name'],$id,$value['spec_id']);
+					$value['id']		= $ProductAttr->upsertByName($value,$id);
 					// 提示新增失败
 					if( !$value['id'] )	{
 						// 回滚
@@ -399,7 +399,7 @@ class Product extends Auth{
 				// 组合数据
 				foreach ($specAttr as $key => $value) {
 					// 查询结果
-					$value['id']		= $ProductAttr->upsertByName($value['name'],$id,$value['spec_id']);
+					$value['id']		= $ProductAttr->upsertByName($value,$id);
 					// 提示新增失败
 					if( !$value['id'] )	{
 						// 回滚
@@ -473,7 +473,7 @@ class Product extends Auth{
 				// 回滚
 				DB::rollBack();
 				// 提示
-				return 				json_send(['code'=>'error','msg'=>'系统异常,写入失败','data'=>$th->getMessage()]);
+				return 				json_send(['code'=>'error','msg'=>'系统异常,写入失败','data'=>$th->getMessage() .'=>'.$th->getLine()]);
 			}	
 		}
 		// 接收参数
@@ -631,7 +631,7 @@ class Product extends Auth{
 				// 组合数据
 				foreach ($specAttr as $key => $value) {
 					// 查询结果
-					$value['id']		= $ProductAttr->upsertByName($value['name'],$id,$value['spec_id']);
+					$value['id']		= $ProductAttr->upsertByName($value,$id);
 					// 提示新增失败
 					if( !$value['id'] )	{
 						// 回滚

+ 142 - 88
app/Http/Controllers/Admin/RegimentActive.php

@@ -18,7 +18,7 @@ class RegimentActive extends Auth{
 	protected function _initialize(){
 		parent::_initialize();
 		$this->assign('breadcrumb1','拼团活动');
-		$this->assign('breadcrumb2','拼团活动列表');
+		$this->assign('breadcrumb2','活动列表');
 	}
 
     /**
@@ -32,16 +32,15 @@ class RegimentActive extends Auth{
         $map 					= [];
         // 组合条件
         if( $name )				$map[] = ['regiment_active.name','=',$name];
-        $select = ['regiment_active.*','product.name as product_name'];
         // 查询数据
         $list					= $Model->query()
-            ->join('product','product.id','=','regiment_active.product_id')
-            ->where($map)
-            ->select($select)
-            ->orderByDesc('regiment_active.id')
-            ->paginate(config('page_num',10));
+                                ->join('product','product.id','=','regiment_active.product_id')
+                                ->where($map)
+                                ->select(['regiment_active.*','product.name as product_name'])
+                                ->orderByDesc('regiment_active.id')
+                                ->paginate(config('page_num',10));
         // 循环处理数据
-        foreach ($list as $key => &$value) {
+        foreach ($list as &$value) {
             $value['code']	= $Model->idToCode($value['id']);
         }
         // 分配数据
@@ -76,65 +75,65 @@ class RegimentActive extends Auth{
             $data['start_time']		        = $data['start_time'] ? strtotime($data['start_time']) : 0;
             $data['end_time']		        = $data['end_time'] ? strtotime($data['end_time']) : 0;
             $data['participation_number']	= request('participation_number',0);
-            $data['open_people']			= request('open_people',1);
-            $data['partake_people']			= request('partake_people',1);
-            $data['exceed_people']			= request('exceed_people',1);
-            $data['automatic']				= request('automatic',1);
-            $data['virtually']				= request('virtually',1);
+            $data['open_people']			= request('open_people',0);
+            $data['partake_people']			= request('partake_people',0);
+            $data['exceed_people']			= request('exceed_people',0);
+            $data['automatic']				= request('automatic',0);
+            $data['virtually']				= request('virtually',0);
             $data['status']			        = 1;
-            $where                          =   [
-                ['status','=', 1],
-                ['product_id','=', $data['product_id']],
-                ['end_time','>=', time()]
-            ];
-            $product_res                    = $Model::query()->where($where)->first();
+            // 核对产品
+            $product_res                    = $Model::query()->where([['status','=', 1],['product_id','=', $data['product_id']],['end_time','>=', time()]])->first();
+            // 提示
             if ($product_res)               return json_send(['code'=>'error','msg'=>'该产品正在参加拼团活动']);
             // 写入数据表
             $id						        = $Model->add($data);
             // 如果操作失败
             if( !$id ) 				        return json_send(['code'=>'error','msg'=>'新增失败']);
             //商户开团
-            if ($data['automatic'] == 1){
-                $regimentData  =   [
-                    'custom_uid'    =>  0,
-                    'active_id'     =>  $id,
-                    'product_id'    =>  $data['product_id'],
-                    'status'        =>  1,
-                    'start_time'    =>  $data['start_time'],
-                    'end_time'      =>  $data['start_time'] + $data['expiration']*60*60,
-                    'update_time'   =>  time(),
-                    'insert_time'   =>  time(),
-                ];
-                $regimentRes            =   Regiment::query()->where($where)->insert($regimentData);
-                if (!$regimentRes)      return json_send(['code'=>'error','msg'=>'商户开团失败']);
+            if ($data['automatic'] == 1 )   {
+                // 开团信息
+                $regimentData               = [
+                                                'custom_uid'    =>  0,
+                                                'active_id'     =>  $id,
+                                                'product_id'    =>  $data['product_id'],
+                                                'status'        =>  1,
+                                                'start_time'    =>  $data['start_time'],
+                                                'end_time'      =>  $data['start_time'] + $data['expiration']*60*60,
+                                                'update_time'   =>  time(),
+                                                'insert_time'   =>  time(),
+                                            ];
+                // 开团
+                $regimentRes                = Regiment::query()->insert($regimentData);
+                // 开团结果
+                if (!$regimentRes)          return json_send(['code'=>'error','msg'=>'商户开团失败']);
             }
             // 记录行为
             $this->addAdminHistory(admin('uid'),$Model->getTable(),$id,1,[],$data);
             // 告知结果
-            return					json_send(['code'=>'success','msg'=>'新增成功','action'=>'add']);
+            return					        json_send(['code'=>'success','msg'=>'新增成功','action'=>'add']);
         }
         // 标签列表
-        $tagList					= [];
-        $cityList					= [];
+        $tagList					        = [];
+        $cityList					        = [];
         // 分配数据
         $this->assign('cityList',$cityList);
         $this->assign('tagList',$tagList);
         $this->assign('crumbs','新增');
         // 加载模板
-        return						$this->fetch();
+        return						        $this->fetch();
     }
 
     /**
      * 修改
      *
      * */
-    public function edit(Request $request,Model $Model,Product $Product){
+    public function edit(Request $request,Model $Model,Product $Product,Regiment $Regiment){
         // 接收参数
-        $id							= request('id',0);
+        $id							        = request('id',0);
         // 查询用户
-        $oldData					= $Model->where(['id'=>$id])->first()->toArray();
+        $oldData					        = $Model->where(['id'=>$id])->first()->toArray();
         // 修改
-        if(request()->isMethod('post')){
+        if(request()->isMethod('post'))     {
             // 验证参数
             $request->scene('edit')->validate();
             // 接收数据
@@ -153,27 +152,51 @@ class RegimentActive extends Auth{
             $data['start_time']		        = $data['start_time'] ? strtotime($data['start_time']) : 0;
             $data['end_time']		        = $data['end_time'] ? strtotime($data['end_time']) : 0;
             $data['participation_number']	= request('participation_number',0);
-            $data['open_people']			= request('open_people',1);
-            $data['partake_people']			= request('partake_people',1);
-            $data['exceed_people']			= request('exceed_people',1);
-            $data['automatic']				= request('automatic',1);
-            $data['virtually']				= request('virtually',1);
+            $data['open_people']			= request('open_people',0);
+            $data['partake_people']			= request('partake_people',0);
+            $data['exceed_people']			= request('exceed_people',0);
+            $data['automatic']				= request('automatic',0);
+            $data['virtually']				= request('virtually',0);
+            $data['status']			        = 1;
+            // 核对产品
+            $product_res                    = $Model::query()->where([['status','=', 1],['product_id','=', $data['product_id']],['end_time','>=', time()]])->first();
+            // 提示
+            if ($product_res)               return json_send(['code'=>'error','msg'=>'该产品正在参加拼团活动']);
             // 写入数据表
-            $result					= $Model->edit($id,$data);
+            $id						        = $Model->add($data);
             // 如果操作失败
-            if( !$result ) 			return json_send(['code'=>'error','msg'=>'修改失败']);
+            if( !$id ) 				        return json_send(['code'=>'error','msg'=>'新增失败']);
+            //商户开团
+            if ($data['automatic'] == 1 )   {
+                // 开团信息
+                $regimentData               = [
+                                                'custom_uid'    =>  0,
+                                                'active_id'     =>  $id,
+                                                'product_id'    =>  $data['product_id'],
+                                                'status'        =>  1,
+                                                'start_time'    =>  $data['start_time'],
+                                                'end_time'      =>  $data['start_time'] + $data['expiration']*60*60,
+                                                'update_time'   =>  time(),
+                                                'insert_time'   =>  time(),
+                                            ];
+                // 开团
+                $regimentRes                = Regiment::query()->insert($regimentData);
+                // 开团结果
+                if (!$regimentRes)          return json_send(['code'=>'error','msg'=>'商户开团失败']);
+            }
             // 记录行为
             $this->addAdminHistory(admin('uid'),$Model->getTable(),$id,2,$oldData,$data);
             // 告知结果
-            return					json_send(['code'=>'success','msg'=>'修改成功','action'=>'edit']);
+            return					        json_send(['code'=>'success','msg'=>'修改成功','action'=>'edit']);
         }
         // 错误告知
-        if( !$oldData )				return $this->error('查无数据');
-        $oldData['product_code']	= $Product->idToCode($oldData['product_id']);
+        if( !$oldData )				        return $this->error('查无数据');
+        // 返回结果
+        $oldData['product_code']	        = $Product->idToCode($oldData['product_id']);
         $this->assign('oldData',$oldData);
         $this->assign('crumbs','修改');
         // 加载模板
-        return						$this->fetch();
+        return						        $this->fetch();
     }
 
     /**
@@ -199,48 +222,79 @@ class RegimentActive extends Auth{
         // 告知结果
         return 			json_send(['code'=>'success','msg'=>'设置成功','path'=>'']);
     }
+
     /**
      * 复制
      *
      * */
-    public function copy(Request $request,Model $Model,Clockin $Clockin){
-        // 验证参数
-        $request->scene('copy')->validate();
-        // 设置状态
-        $id				= request('id',0);
-        $time           =   time();
-        // 查询
-        $data		    = $Model->where(['id'=>$id])->first()->toArray();
-        if (!$data)     json_send(['code'=>'error','msg'=>'复制失败,活动不存在']);
-        $clockinList    = $Clockin->getActiveList($id);
-        DB::beginTransaction();
-        try {
-            unset($data['id']);
-            $data['status'] = 1;
-            $data['name'] = $data['name'].'复制';
-            //复制活动
-            $newId          = $Model->add($data);
-            if (!$newId){
-                DB::rollBack();
-                return json_send(['code'=>'error','msg'=>'复制失败']);
-            }
-            if ($clockinList){
-                foreach ($clockinList as &$clockin){
-                    $clockin['active_id'] = $newId;
-                    $clockin['insert_time'] = $time;
-                    $clockin['update_time'] = $time;
-                    unset($clockin['id']);
-                }
-                $re = $Clockin->Query()->insert($clockinList);
-                if (!$re)   return  json_send(['code'=>'error','msg'=>'复制失败']);
+    public function copy(Request $request,Model $Model,Product $Product){
+        // 接收参数
+        $id							        = request('id',0);
+        // 查询用户
+        $oldData					        = $Model->where(['id'=>$id])->first()->toArray();
+        // 修改
+        if(request()->isMethod('post'))     {
+            // 验证参数
+            $request->scene('edit')->validate();
+            // 接收数据
+            $product_code		            = request('product_code','');
+            $data['product_id']		        = $Product->codeToId($product_code);
+            if (!$data['product_id'])       return json_send(['code'=>'error','msg'=>'产品不存在']);
+            $data['regiment_price']		    = request('regiment_price',0);
+            $data['quota']	                = request('quota','');
+            $data['name']	                = request('name','');
+            $data['number']	                = request('number',0);
+            $expiration_day	                = request('expiration_day',0);
+            $expiration_hours	            = request('expiration_hours',0);
+            $data['expiration']	            = $expiration_day * 24 + $expiration_hours;
+            $data['start_time']		        = request('start_time','');
+            $data['end_time']		        = request('end_time','');
+            $data['start_time']		        = $data['start_time'] ? strtotime($data['start_time']) : 0;
+            $data['end_time']		        = $data['end_time'] ? strtotime($data['end_time']) : 0;
+            $data['participation_number']	= request('participation_number',0);
+            $data['open_people']			= request('open_people',0);
+            $data['partake_people']			= request('partake_people',0);
+            $data['exceed_people']			= request('exceed_people',0);
+            $data['automatic']				= request('automatic',0);
+            $data['virtually']				= request('virtually',0);
+            // 核对产品
+            $product_res                    = $Model::query()->where([['status','=', 1],['product_id','=', $data['product_id']],['end_time','>=', time()]])->first();
+            // 提示
+            if ($product_res)               return json_send(['code'=>'error','msg'=>'该产品正在参加拼团活动']);
+            // 写入数据表
+            $result					        = $Model->add($data);
+            // 如果操作失败
+            if( !$result ) 			        return json_send(['code'=>'error','msg'=>'复制失败']);
+            //商户开团
+            if ($data['automatic'] == 1 )   {
+                // 开团信息
+                $regimentData               = [
+                                                'custom_uid'    =>  0,
+                                                'active_id'     =>  $id,
+                                                'product_id'    =>  $data['product_id'],
+                                                'status'        =>  1,
+                                                'start_time'    =>  $data['start_time'],
+                                                'end_time'      =>  $data['start_time'] + $data['expiration']*60*60,
+                                                'update_time'   =>  time(),
+                                                'insert_time'   =>  time(),
+                                            ];
+                // 开团
+                $regimentRes                = Regiment::query()->insert($regimentData);
+                // 开团结果
+                if (!$regimentRes)          return json_send(['code'=>'error','msg'=>'商户开团失败']);
             }
-            DB::commit();
-        }catch (\Exception $e){
-            // 回退数据
-            DB::rollBack();
-            // 失败提示
-            return						json_send(['code'=>'error','msg'=>'复制失败','data'=>['error'=>$e->getMessage().$e->getLine()]]);
+            // 记录行为
+            $this->addAdminHistory(admin('uid'),$Model->getTable(),$id,2,$oldData,$data);
+            // 告知结果
+            return					        json_send(['code'=>'success','msg'=>'复制成功','action'=>'edit']);
         }
-        return json_send(['code'=>'success','msg'=>'复制成功','path'=>'']);
+        // 错误告知
+        if( !$oldData )				        return $this->error('查无数据');
+        // 返回结果
+        $oldData['product_code']	        = $Product->idToCode($oldData['product_id']);
+        $this->assign('oldData',$oldData);
+        $this->assign('crumbs','修改');
+        // 加载模板
+        return						        $this->fetch();
     }
 }

+ 15 - 25
app/Http/Controllers/Api/Product.php

@@ -66,28 +66,16 @@ class Product extends Api{
 		// 处理请求
 		foreach ( $data['data'] as $key => $value ) {
 			// 处理数据
-			$value['thumb'] 		= path_compat($value['thumb']);
-            $regimentWhere = [
-                ['status','=',1],
-                ['start_time','<=',$time],
-                ['end_time','>=',$time],
-                ['product_id','=',$value['id']]
-            ];
-            $regiment = $RegimentActive::query()->where($regimentWhere)->first();
-            if ( $regiment ){
-                $value['regiment_number']   = $regiment['number'];
-                $value['regiment_active_id']       = $regiment['id'];
-                if ($regiment['automatic'] == 1){
-                    $regimentInfo = Regiment::query()->where([['active_id','=',$regiment['id']],['start_time','<=',$time],['end_time','>=',$time]])->first();
-                    if ($regimentInfo){
-                        $value['regiment_title']    = '多人团';
-                    }
-                }else{
-                    $value['regiment_title']    = $regiment['number'].'人团';
-                }
-            }else{
-                $value['regiment_active_id'] = null;
-            }
+			$value['thumb'] 				= path_compat($value['thumb']);
+			$value['regiment_active_id'] 	= null;
+			$value['regiment_title'] 		= '';
+			// 查询产品拼团信息
+            $regiment 						= $RegimentActive::query()->where([['status','=',1],['start_time','<=',$time],['end_time','>=',$time],['product_id','=',$value['id']]])->first(['id as active_id','number','automatic']);
+			// 如果有拼团信息
+			if ( $regiment )				{
+				$value['regiment_active_id']= $regiment['id'];
+				$value['regiment_title']    = $regiment['automatic'] == 1 ? '多人团' : $regiment['number'].'人团';
+			}
 			// 重组数据
 			$data['data'][$key]		= $value;
 		}
@@ -180,10 +168,12 @@ class Product extends Api{
             if ($regimentActive['automatic'] == 1){
                 $automaticInfo              = $Regiment::query()->where([['status','=',1],['active_id','=',$regimentActive['id']],['start_time','<=',$time],['end_time','>=',$time]])->first();
                 if ($automaticInfo){
-                    $data['regiment_title']     = '多人团';
                     $data['automatic_info']     = $automaticInfo;
-                    $data['regiment_type']      = 1;
-                }
+					$data['regiment_type']      = 1;
+                }else{
+					$data['regiment_type']      = 2;
+				}
+				$data['regiment_title']     = '多人团';
             }else{
                 $data['regiment_title']     = $regimentActive['number'].'人团';
                 $data['regiment_type']      = 2;

+ 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获取客户信息
      * 

+ 5 - 6
app/Models/Product/Attr.php

@@ -47,9 +47,9 @@ class Attr extends Model
         // 写入数据表
         $result						        = $this->query()->where([['id','=',$id]])->update($data);
         // 如果操作失败
-        if( !$result )                      return $result;
+        if( !$result )                      return 0;
         // 返回结果
-        return                              $result;
+        return                              $id;
     }
 
 
@@ -57,17 +57,16 @@ class Attr extends Model
      * 添加数据
      * 
      */
-    public function upsertByName($name,$productId,$specId)
+    public function upsertByName($value,$productId)
     {
         // 写入数据表
-        $id						            = $this->query()->where([['name','=',$name],['product_id','=',$productId],['spec_id','=',$specId]])->value('id');
+        $id						            = $this->query()->where([['name','=',$value['name']],['product_id','=',$productId],['spec_id','=',$value['spec_id']]])->value('id');
         // 如果操作失败
-        if( !$id )                          return $this->add(['name'=>$name,'product_id'=>$productId,'spec_id'=>$specId]);
+        $id                                 = $id ? $this->edit($id,['name'=>$value['name'],'remark'=>$value['remark'],'product_id'=>$productId,'spec_id'=>$value['spec_id']]) : $this->add(['name'=>$value['name'],'remark'=>$value['remark'],'product_id'=>$productId,'spec_id'=>$value['spec_id']]);
         // 返回结果
         return                              $id;
     }
 
-
     /**
      * 添加数据
      * 

+ 3 - 7
app/Models/Regiment.php

@@ -33,8 +33,6 @@ class Regiment extends Model
         $id						            = $this->query()->insertGetId($data);
         // 如果操作失败
         if( !$id )                          return $id;
-        // 更新缓存
-        $this->getList(true);
         // 返回结果
         return                              $id;
     }
@@ -48,13 +46,11 @@ class Regiment extends Model
         // 更新时间
         $data['update_time']                = time();
         // 写入数据表
-        $result						        = $this->query()->where(['id'=>$id])->update($data);
+        $result						        = $this->query()->where([['id','=',$id]])->update($data);
         // 如果操作失败
-        if( !$result )                      return $result;
-        // 更新缓存
-        $this->getList(true);
+        if( !$result )                      return 0;
         // 返回结果
-        return                              $result;
+        return                              $id;
     }
 
     /**

+ 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


BIN
resources.zip


+ 8 - 3
resources/views/admin/custom/index.blade.php

@@ -15,7 +15,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 	@endif
 </div>
 @endif
-<form action="" method="get" class="form-horizontal form-line">
+<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-2" style="margin-right: 2px;">
 		<input type="text" class="form-control" name="custom_code" value="{{request('custom_code','')}}" placeholder="请输入客户编码查询" />
 	</div>
@@ -46,8 +46,13 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 	<div class="form-group col col-lg-2 col-md-2 col-sm-2 col-xs-2" style="margin-right: 2px;">
 		<input type="date" class="form-control" name="start_time" value="{{request('start_time','')}}" placeholder="请输入创建时间查询" />
 	</div>
-	<input type="submit" class="btn btn-sm btn-primary" value="查询"/>
-	<a href="{{url('admin/custom/index')}}" class="btn btn-sm btn-default" >重置</a>
+	<div class="form-group col col-xs-4 col-md-2" style="margin-right: 2px;">
+		<button type="button" onclick="alter_from_attr({'method':'get','action':''})" class="btn btn-sm btn-primary" style="margin-right: 20px;"> 查询</button>
+		<a href="{{url('admin/custom/index')}}" class="btn btn-sm btn-default" style="margin-right: 20px;" >重置</a>
+		@if( check_auth('admin/custom/down_excel') )
+		<button type="button" onclick="alter_from_attr({'method':'get','action':`{{url('admin/custom/down_excel')}}`})" class="btn btn-sm btn-primary"> 下载表格</button>
+		@endif
+	</div>
 </form>
 
 <div class="row">

+ 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

+ 5 - 5
resources/views/admin/product/copy.blade.php

@@ -173,10 +173,10 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 								<input type="hidden" name="attr[{{$spec['id']}}][thumb][]" placeholder="图片路径">
 							</span>
 							@endif -->
-							<input type="{{$spec['input_type']}}" name="attr[{{$spec['id']}}][name][]" class="form-control attr_name" required="required" placeholder="属性" />
+							<input type="{{$spec['input_type']}}" name="attr[{{$spec['id']}}][name][]" class="form-control attr_name" maxlength="20" required="required" placeholder="属性" />
 						</div>
 						<div class="input-group col-sm-4">
-							<input type="text" class="form-control" name="attr[{{$spec['id']}}][remark][]"  placeholder="备注" />
+							<input type="text" class="form-control" name="attr[{{$spec['id']}}][remark][]" maxlength="20" placeholder="备注" />
 							<span class="input-group-addon btn-danger remove_attr" style="cursor:pointer;">
 								<i class="fa fa-trash-o"></i>
 							</span>
@@ -194,10 +194,10 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 									<input type="hidden" name="attr[{{$spec['id']}}][thumb][]" placeholder="图片路径" vlalue="value="{{$attr['thumb']}}" ">
 								</span>
 								@endif -->
-								<input type="{{$spec['input_type']}}" name="attr[{{$spec['id']}}][name][]" class="form-control attr_name" required="required" placeholder="属性" value="{{$attr['name']}}" />
+								<input type="{{$spec['input_type']}}" name="attr[{{$spec['id']}}][name][]" class="form-control attr_name" maxlength="20" required="required" placeholder="属性" value="{{$attr['name']}}" />
 							</div>
 							<div class="input-group col-sm-4">
-								<input type="text" class="form-control" name="attr[{{$spec['id']}}][remark][]"  placeholder="备注" value="{{$attr['remark']}}" />
+								<input type="text" class="form-control" name="attr[{{$spec['id']}}][remark][]" maxlength="20" placeholder="备注" value="{{$attr['remark']}}" />
 								<span class="input-group-addon btn-danger remove_attr" style="cursor:pointer;">
 									<i class="fa fa-trash-o"></i>
 								</span>
@@ -254,7 +254,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 									<a id="sku_thumb-image{{$key}}" href="#" data-toggle="image" class="img-thumb">
 										<img src="{{path_compat($value['sku_thumb']??'')}}" height="30" />
 									</a>
-									<input type="hidden" name="sku[{{$value['attr_names']}}][sku_thumb]" laceholder="缩略图" value="{{$value['sku_thumb']??''}}" id="input-sku_thumb{{$key}}" />
+									<input type="hidden" name="sku[{{$value['attr_ids']}}][sku_thumb]" laceholder="缩略图" value="{{$value['sku_thumb']??''}}" id="input-sku_thumb{{$key}}" />
 								</div>
 							</td>
 							<td><input type="text" name="sku[{{$value['attr_ids']}}][price]" placeholder="价格" value="{{$value['price']}}"></td>

+ 5 - 5
resources/views/admin/product/edit.blade.php

@@ -173,10 +173,10 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 								<input type="hidden" name="attr[{{$spec['id']}}][thumb][]" placeholder="图片路径">
 							</span>
 							@endif -->
-							<input type="{{$spec['input_type']}}" name="attr[{{$spec['id']}}][name][]" class="form-control attr_name" required="required" placeholder="属性" />
+							<input type="{{$spec['input_type']}}" name="attr[{{$spec['id']}}][name][]" class="form-control attr_name" maxlength="20" required="required" placeholder="属性" />
 						</div>
 						<div class="input-group col-sm-4">
-							<input type="text" class="form-control" name="attr[{{$spec['id']}}][remark][]"  placeholder="备注" />
+							<input type="text" class="form-control" name="attr[{{$spec['id']}}][remark][]" maxlength="20" placeholder="备注" />
 							<span class="input-group-addon btn-danger remove_attr" style="cursor:pointer;">
 								<i class="fa fa-trash-o"></i>
 							</span>
@@ -194,10 +194,10 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 									<input type="hidden" name="attr[{{$spec['id']}}][thumb][]" placeholder="图片路径" vlalue="value="{{$attr['thumb']}}" ">
 								</span>
 								@endif -->
-								<input type="{{$spec['input_type']}}" name="attr[{{$spec['id']}}][name][]" class="form-control attr_name" required="required" placeholder="属性" value="{{$attr['name']}}" />
+								<input type="{{$spec['input_type']}}" name="attr[{{$spec['id']}}][name][]" class="form-control attr_name" maxlength="20" required="required" placeholder="属性" value="{{$attr['name']}}" />
 							</div>
 							<div class="input-group col-sm-4">
-								<input type="text" class="form-control" name="attr[{{$spec['id']}}][remark][]"  placeholder="备注" value="{{$attr['remark']}}" />
+								<input type="text" class="form-control" name="attr[{{$spec['id']}}][remark][]" maxlength="20" placeholder="备注" value="{{$attr['remark']}}" />
 								<span class="input-group-addon btn-danger remove_attr" style="cursor:pointer;">
 									<i class="fa fa-trash-o"></i>
 								</span>
@@ -254,7 +254,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 									<a id="sku_thumb-image{{$key}}" href="#" data-toggle="image" class="img-thumb">
 										<img src="{{path_compat($value['sku_thumb']??'')}}" height="30" />
 									</a>
-									<input type="hidden" name="sku[{{$value['attr_names']}}][sku_thumb]" laceholder="缩略图" value="{{$value['sku_thumb']??''}}" id="input-sku_thumb{{$key}}" />
+									<input type="hidden" name="sku[{{$value['attr_ids']}}][sku_thumb]" laceholder="缩略图" value="{{$value['sku_thumb']??''}}" id="input-sku_thumb{{$key}}" />
 								</div>
 							</td>
 							<td><input type="text" name="sku[{{$value['attr_ids']}}][price]" placeholder="价格" value="{{$value['price']}}"></td>

+ 1 - 7
resources/views/admin/regiment/index.blade.php

@@ -4,12 +4,6 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 @endsection
 @section('content')
 
-@if(check_auth('admin/score_clockin_active/add'))
-	<div class="page-header">
-		<a href="{{url('admin/score_clockin_active/add')}}" class="btn btn-primary">新增</a>
-	</div>
-@endif
-
 <form action="" method="get" class="form-horizontal form-line">
 	<div class="form-group col col-lg-2 col-md-2 col-sm-2 col-xs-2" style="margin-right: 2px;">
 		<input type="text" class="form-control" name="code" value="{{request('code','')}}" placeholder="请输入活动编码" />
@@ -35,7 +29,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<input type="date" class="form-control" name="end_time" value="{{request('end_time','')}}" placeholder="请输入结束查询" />
 	</div>
 	<input type="submit" class="btn btn-sm btn-primary" value="查询"/>
-	<a href="{{url('admin/score_clockin_active/index')}}" class="btn btn-sm btn-default" >重置</a>
+	<a href="{{url('admin/regiment/index')}}" class="btn btn-sm btn-default" >重置</a>
 </form>
 
 <div class="row">

+ 23 - 32
resources/views/admin/regiment_active/add.blade.php

@@ -5,25 +5,33 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 @section('content')
 <form class="post-form" action="" method="post">
 	<div class="form-group col-sm-12" style="font-size:large">基础信息</div>
-	<div class="form-group col-sm-2">
+	<div class="form-group col-sm-3">
+		<label class="control-label">活动名称</label>
+		<input class="form-control" required="required" type="text" placeholder="活动名称" name="name" maxlength="45" value="" />
+	</div>
+	<div class="form-group col-sm-3">
 		<label class="control-label">拼团产品</label>
 		<input class="form-control" required="required" type="text" placeholder="产品编码" name="product_code" value="" />
 	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">成团人数</label>
+		<input class="form-control" required="required" type="number" placeholder="成团人数" name="number" min="1" max="65535" value="" />
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">每人限购</label>
+		<input class="form-control" required="required" type="number" placeholder="每人限购" min="0" max="65535" name="quota" value="" />
+	</div>
 	<div class="form-group col-sm-2">
 		<label class="control-label">活动价格</label>
 		<input class="form-control" required="required" type="text" placeholder="活动价格" min="0" name="regiment_price" value="" />
 	</div>
 	<div class="form-group col-sm-2">
-		<label class="control-label">每人限购</label>
-		<input class="form-control" required="required" type="number" placeholder="每人限购" min="0" name="quota" value="" />
-	</div>
-	<div class="form-group col-sm-4">
-		<label class="control-label">活动名称</label>
-		<input class="form-control" required="required" type="text" placeholder="活动名称" name="name" maxlength="45" value="" />
+		<label class="control-label">拼团有效期 </label>
+		<input class="form-control" required="required" type="number" placeholder="拼团有效期, 小时" name="expiration_hours" max="24" value="" />
 	</div>
-	<div class="form-group col-sm-4">
-		<label class="control-label">成团人数</label>
-		<input class="form-control" required="required" type="number" placeholder="成团人数" name="number" maxlength="45" value="" />
+	<div class="form-group col-sm-2">
+		<label class="control-label">最多参与次数</label>
+		<input class="form-control" required="required" type="number" placeholder="最多参与次数" min="0" max="255" name="participation_number" value="" />
 	</div>
 	<div class="form-group col-sm-3">
 		<label class="control-label">活动开始时间</label>
@@ -33,30 +41,13 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">活动结束时间</label>
 		<input class="form-control" required="required" type="datetime-local" placeholder="结束时间" name="end_time" value="" />
 	</div>
-	<div class="form-group col-sm-6">
-		<label class="control-label">拼团有效期</label>
-		<div class="form-group col-sm-12">
-			{{--<div class="form-group col-sm-6">
-				<label class="control-label">天</label>
-				<input class="form-control" required="required" type="number" placeholder="天" name="expiration_day" maxlength="45" value="" />
-			</div>--}}
-			<div class="form-group col-sm-6">
-				<label class="control-label">小时 </label>
-				<input class="form-control" required="required" type="number" placeholder="小时" name="expiration_hours" maxlength="45" max="24" value="" />
-			</div>
-		</div>
-	</div>
 	<div class="form-group col-sm-12 " style="font-size:large">更多设置</div>
-	<div class="form-group col-sm-12">
-		<label class="control-label">最多参与次数</label>
-		<input class="form-control" required="required" type="text" placeholder="最多参与次数" min="0" name="participation_number" value="" />
-	</div>
 	<div class="form-group col-sm-12">
 		<label class="control-label">开团人员</label>
 		<div class="radio">
 			<label class="radio-inline"><input type="radio" value="1" name="open_people" >老用户</label>
 			<label class="radio-inline"><input type="radio" value="2" name="open_people" >新用户</label>
-			<label class="radio-inline"><input type="radio" value="3" name="open_people" >不限新老用户</label>
+			<label class="radio-inline"><input type="radio" value="0" name="open_people" >不限新老用户</label>
 		</div>
 	</div>
 	<div class="form-group col-sm-12">
@@ -64,27 +55,27 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<div class="radio">
 			<label class="radio-inline"><input type="radio" value="1" name="partake_people" >老用户</label>
 			<label class="radio-inline"><input type="radio" value="2" name="partake_people" >新用户</label>
-			<label class="radio-inline"><input type="radio" value="3" name="partake_people" >不限新老用户</label>
+			<label class="radio-inline"><input type="radio" value="0" name="partake_people" >不限新老用户</label>
 		</div>
 	</div>
 	<div class="form-group col-sm-12">
 		<label class="control-label">超员成团</label>
 		<div class="radio">
-			<label class="radio-inline"><input type="radio" value="2" name="exceed_people" >开启</label>
+			<label class="radio-inline"><input type="radio" value="0" name="exceed_people" >开启</label>
 			<label class="radio-inline"><input type="radio" value="1" name="exceed_people" >关闭</label>
 		</div>
 	</div>
 	<div class="form-group col-sm-12">
 		<label class="control-label">自动开团</label>
 		<div class="radio">
-			<label class="radio-inline"><input type="radio" value="2" name="automatic" >开启</label>
+			<label class="radio-inline"><input type="radio" value="0" name="automatic" >开启</label>
 			<label class="radio-inline"><input type="radio" value="1" name="automatic" >关闭</label>
 		</div>
 	</div>
 	<div class="form-group col-sm-12">
 		<label class="control-label">虚拟成团</label>
 		<div class="radio">
-			<label class="radio-inline"><input type="radio" value="2" name="virtually" >开启</label>
+			<label class="radio-inline"><input type="radio" value="0" name="virtually" >开启</label>
 			<label class="radio-inline"><input type="radio" value="1" name="virtually" >关闭</label>
 		</div>
 	</div>

+ 87 - 0
resources/views/admin/regiment_active/copy.blade.php

@@ -0,0 +1,87 @@
+@extends('admin.public.base')
+@section('body_class')
+style="margin: 0 auto;width: 96%;padding: 30px 0px;"
+@endsection
+@section('content')
+	<form class="post-form" action="" method="post">
+		<div class="form-group col-sm-12" style="font-size:large">基础信息</div>
+		<div class="form-group col-sm-3">
+			<label class="control-label">活动名称</label>
+			<input class="form-control" required="required" type="text" placeholder="活动名称" name="name" maxlength="45" value="{{$oldData['name']}}" />
+		</div>
+		<div class="form-group col-sm-3">
+			<label class="control-label">拼团产品</label>
+			<input class="form-control" required="required" type="text" placeholder="产品编码" name="product_code" value="{{$oldData['product_code']}}" />
+		</div>
+		<div class="form-group col-sm-3">
+			<label class="control-label">成团人数</label>
+			<input class="form-control" required="required" type="number" placeholder="成团人数" name="number" min="1" max="65535" value="{{$oldData['number']}}" />
+		</div>
+		<div class="form-group col-sm-3">
+			<label class="control-label">每人限购</label>
+			<input class="form-control" required="required" type="number" placeholder="每人限购" min="0" max="65535" name="quota" value="{{$oldData['quota']}}" />
+		</div>
+		<div class="form-group col-sm-2">
+			<label class="control-label">活动价格</label>
+			<input class="form-control" required="required" type="text" placeholder="活动价格" min="0" name="regiment_price" value="{{$oldData['regiment_price']}}" />
+		</div>
+		<div class="form-group col-sm-2">
+			<label class="control-label">拼团有效期</label>
+			<input class="form-control" required="required" type="number" placeholder="拼团有效期,小时" name="expiration_hours" max="24" value="{{fmod($oldData['expiration'], 24)}}" />
+		</div>
+		<div class="form-group col-sm-2">
+			<label class="control-label">最多参与次数</label>
+			<input class="form-control" required="required" type="number" placeholder="最多参与次数" min="0" max="255" name="participation_number" value="{{$oldData['participation_number']}}" />
+		</div>
+		<div class="form-group col-sm-3">
+			<label class="control-label">活动开始时间</label>
+			<input class="form-control" required="required" type="datetime-local" placeholder="开始时间"  name="start_time" value="{{date('Y-m-d H:i',$oldData['start_time'])}}" />
+		</div>
+		<div class="form-group col-sm-3">
+			<label class="control-label">活动结束时间</label>
+			<input class="form-control" required="required" type="datetime-local" placeholder="结束时间" name="end_time" value="{{date('Y-m-d H:i',$oldData['end_time'])}}" />
+		</div>
+		<div class="form-group col-sm-12 " style="font-size:large">更多设置</div>
+		<div class="form-group col-sm-12">
+			<label class="control-label">开团人员</label>
+			<div class="radio">
+				<label class="radio-inline"><input type="radio" value="1" @if($oldData['open_people'] == 1) checked @endif name="open_people" >老用户</label>
+				<label class="radio-inline"><input type="radio" value="2" name="open_people" @if($oldData['open_people'] == 2) checked @endif>新用户</label>
+				<label class="radio-inline"><input type="radio" value="3" name="open_people" @if($oldData['open_people'] == 3) checked @endif>不限新老用户</label>
+			</div>
+		</div>
+		<div class="form-group col-sm-12">
+			<label class="control-label">参团人员</label>
+			<div class="radio">
+				<label class="radio-inline"><input type="radio" value="1" name="partake_people" @if($oldData['partake_people'] == 1) checked @endif>老用户</label>
+				<label class="radio-inline"><input type="radio" value="2" name="partake_people" @if($oldData['partake_people'] == 2) checked @endif>新用户</label>
+				<label class="radio-inline"><input type="radio" value="3" name="partake_people" @if($oldData['partake_people'] == 3) checked @endif>不限新老用户</label>
+			</div>
+		</div>
+		<div class="form-group col-sm-12">
+			<label class="control-label">超员成团</label>
+			<div class="radio">
+				<label class="radio-inline"><input type="radio" value="0" name="exceed_people" @if($oldData['exceed_people'] == 0) checked @endif>开启</label>
+				<label class="radio-inline"><input type="radio" value="1" name="exceed_people" @if($oldData['exceed_people'] == 1) checked @endif>关闭</label>
+			</div>
+		</div>
+		<div class="form-group col-sm-12">
+			<label class="control-label">自动开团</label>
+			<div class="radio">
+				<label class="radio-inline"><input type="radio" value="0" name="automatic" @if($oldData['automatic'] == 0) checked @endif>开启</label>
+				<label class="radio-inline"><input type="radio" value="1" name="automatic" @if($oldData['automatic'] == 1) checked @endif>关闭</label>
+			</div>
+		</div>
+		<div class="form-group col-sm-12">
+			<label class="control-label">虚拟成团</label>
+			<div class="radio">
+				<label class="radio-inline"><input type="radio" value="0" name="virtually" @if($oldData['virtually'] == 0) checked @endif>开启</label>
+				<label class="radio-inline"><input type="radio" value="1" name="virtually" @if($oldData['virtually'] == 1) checked @endif>关闭</label>
+			</div>
+		</div>
+		<div class="form-group col-sm-12">
+			@csrf
+			<input id="send" type="submit" value="提交" class="btn btn-primary btn-block" />
+		</div>
+	</form>
+@endsection

+ 22 - 30
resources/views/admin/regiment_active/edit.blade.php

@@ -5,25 +5,33 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 @section('content')
 	<form class="post-form" action="" method="post">
 		<div class="form-group col-sm-12" style="font-size:large">基础信息</div>
-		<div class="form-group col-sm-2">
+		<div class="form-group col-sm-3">
+			<label class="control-label">活动名称</label>
+			<input class="form-control" required="required" type="text" placeholder="活动名称" name="name" maxlength="45" value="{{$oldData['name']}}" />
+		</div>
+		<div class="form-group col-sm-3">
 			<label class="control-label">拼团产品</label>
 			<input class="form-control" required="required" type="text" placeholder="产品编码" name="product_code" value="{{$oldData['product_code']}}" />
 		</div>
+		<div class="form-group col-sm-3">
+			<label class="control-label">每人限购</label>
+			<input class="form-control" required="required" type="number" placeholder="每人限购" min="0" max="65535" name="quota" value="{{$oldData['quota']}}" />
+		</div>
+		<div class="form-group col-sm-3">
+			<label class="control-label">成团人数</label>
+			<input class="form-control" required="required" type="number" placeholder="成团人数" name="number" min="1" max="65535" value="{{$oldData['number']}}" />
+		</div>
 		<div class="form-group col-sm-2">
 			<label class="control-label">活动价格</label>
 			<input class="form-control" required="required" type="text" placeholder="活动价格" min="0" name="regiment_price" value="{{$oldData['regiment_price']}}" />
 		</div>
 		<div class="form-group col-sm-2">
-			<label class="control-label">每人限购</label>
-			<input class="form-control" required="required" type="number" placeholder="每人限购" min="0" name="quota" value="{{$oldData['quota']}}" />
-		</div>
-		<div class="form-group col-sm-4">
-			<label class="control-label">活动名称</label>
-			<input class="form-control" required="required" type="text" placeholder="活动名称" name="name" maxlength="45" value="{{$oldData['name']}}" />
+			<label class="control-label">拼团有效期,小时 </label>
+			<input class="form-control" required="required" type="number" placeholder="拼团有效期小时" name="expiration_hours" maxlength="45" max="24" value="{{fmod($oldData['expiration'], 24)}}" />
 		</div>
-		<div class="form-group col-sm-4">
-			<label class="control-label">成团人数</label>
-			<input class="form-control" required="required" type="number" placeholder="成团人数" name="number" maxlength="45" value="{{$oldData['number']}}" />
+		<div class="form-group col-sm-2">
+			<label class="control-label">最多参与次数</label>
+			<input class="form-control" required="required" type="number" placeholder="最多参与次数" min="0" max="255" name="participation_number" value="{{$oldData['participation_number']}}" />
 		</div>
 		<div class="form-group col-sm-3">
 			<label class="control-label">活动开始时间</label>
@@ -33,24 +41,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			<label class="control-label">活动结束时间</label>
 			<input class="form-control" required="required" type="datetime-local" placeholder="结束时间" name="end_time" value="{{date('Y-m-d H:i',$oldData['end_time'])}}" />
 		</div>
-		<div class="form-group col-sm-6">
-			<label class="control-label">拼团有效期</label>
-			<div class="form-group col-sm-12">
-				{{--<div class="form-group col-sm-6">
-					<label class="control-label">天</label>
-					<input class="form-control" required="required" type="number" placeholder="天" name="expiration_day" maxlength="45" value="{{(int)$oldData['expiration']/24}}" />
-				</div>--}}
-				<div class="form-group col-sm-6">
-					<label class="control-label">小时 </label>
-					<input class="form-control" required="required" type="number" placeholder="小时" name="expiration_hours" maxlength="45" max="24" value="{{fmod($oldData['expiration'], 24)}}" />
-				</div>
-			</div>
-		</div>
 		<div class="form-group col-sm-12 " style="font-size:large">更多设置</div>
-		<div class="form-group col-sm-12">
-			<label class="control-label">最多参与次数</label>
-			<input class="form-control" required="required" type="text" placeholder="最多参与次数" min="0" name="participation_number" value="{{$oldData['participation_number']}}" />
-		</div>
 		<div class="form-group col-sm-12">
 			<label class="control-label">开团人员</label>
 			<div class="radio">
@@ -70,26 +61,27 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<div class="form-group col-sm-12">
 			<label class="control-label">超员成团</label>
 			<div class="radio">
-				<label class="radio-inline"><input type="radio" value="2" name="exceed_people" @if($oldData['exceed_people'] == 2) checked @endif>开启</label>
+				<label class="radio-inline"><input type="radio" value="0" name="exceed_people" @if($oldData['exceed_people'] == 0) checked @endif>开启</label>
 				<label class="radio-inline"><input type="radio" value="1" name="exceed_people" @if($oldData['exceed_people'] == 1) checked @endif>关闭</label>
 			</div>
 		</div>
 		<div class="form-group col-sm-12">
 			<label class="control-label">自动开团</label>
 			<div class="radio">
-				<label class="radio-inline"><input type="radio" value="2" name="automatic" @if($oldData['automatic'] == 2) checked @endif>开启</label>
+				<label class="radio-inline"><input type="radio" value="0" name="automatic" @if($oldData['automatic'] == 0) checked @endif>开启</label>
 				<label class="radio-inline"><input type="radio" value="1" name="automatic" @if($oldData['automatic'] == 1) checked @endif>关闭</label>
 			</div>
 		</div>
 		<div class="form-group col-sm-12">
 			<label class="control-label">虚拟成团</label>
 			<div class="radio">
-				<label class="radio-inline"><input type="radio" value="2" name="virtually" @if($oldData['virtually'] == 2) checked @endif>开启</label>
+				<label class="radio-inline"><input type="radio" value="0" name="virtually" @if($oldData['virtually'] == 0) checked @endif>开启</label>
 				<label class="radio-inline"><input type="radio" value="1" name="virtually" @if($oldData['virtually'] == 1) checked @endif>关闭</label>
 			</div>
 		</div>
 		<div class="form-group col-sm-12">
 			@csrf
+			<input type="hidden" name="id" id="id" value="{{$oldData['id']}}" />
 			<input id="send" type="submit" value="提交" class="btn btn-primary btn-block" />
 		</div>
 	</form>

+ 3 - 3
resources/views/admin/regiment_active/index.blade.php

@@ -23,7 +23,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 	<div class="form-group col col-md-1" style="margin-right: 2px;">
 		<select name="status" class="form-control">
 			<option value="" >状态</option>
-			<option value="0" @if (request('status') === '1' ) selected="selected" @endif >启用</option>
+			<option value="1" @if (request('status') === '1' ) selected="selected" @endif >启用</option>
 			<option value="2" @if (request('status') === '2' ) selected="selected" @endif >停用</option>
 			<option value="3" @if (request('status') === '3' ) selected="selected" @endif >结束</option>
 		</select>
@@ -35,7 +35,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<input type="date" class="form-control" name="end_time" value="{{request('end_time','')}}" placeholder="请输入结束查询" />
 	</div>
 	<input type="submit" class="btn btn-sm btn-primary" value="查询"/>
-	<a href="{{url('admin/score_clockin_active/index')}}" class="btn btn-sm btn-default" >重置</a>
+	<a href="{{url('admin/regiment_active/index')}}" class="btn btn-sm btn-default" >重置</a>
 </form>
 
 <div class="row">
@@ -90,7 +90,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 								<a href="{{url('admin/regiment_active/edit?'.http_build_query(['id'=>$a['id']]))}}" class="btn btn-sm btn-warning" >编辑</a>
 								@endif
 								@if(check_auth('admin/regiment_active/copy'))
-									<a data-url="{{url('admin/regiment_active/copy?'.http_build_query(['id'=>$a['id'],'status'=>0]))}}" class="set_status btn btn-sm btn-success" >复制</a>
+									<a href="{{url('admin/regiment_active/copy?'.http_build_query(['id'=>$a['id']]))}}" class="btn btn-sm btn-success" >复制</a>
 								@endif
 								@if(check_auth('admin/regiment_active/set_status'))
 									@if($a['status'] === 2)

+ 1 - 7
resources/views/admin/regiment_record/index.blade.php

@@ -4,18 +4,12 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 @endsection
 @section('content')
 
-@if(check_auth('admin/score_clockin_active/add'))
-	<div class="page-header">
-		<a href="{{url('admin/score_clockin_active/add')}}" class="btn btn-primary">新增</a>
-	</div>
-@endif
-
 <form action="" method="get" class="form-horizontal form-line">
 	<div class="form-group col col-lg-2 col-md-2 col-sm-2 col-xs-2" style="margin-right: 2px;">
 		<input type="text" class="form-control" name="name" value="{{request('name','')}}" placeholder="请输入活动名称查询" />
 	</div>
 	<input type="submit" class="btn btn-sm btn-primary" value="查询"/>
-	<a href="{{url('admin/score_clockin_active/index')}}" class="btn btn-sm btn-default" >重置</a>
+	<a href="{{url('admin/regiment_record/index')}}" class="btn btn-sm btn-default" >重置</a>
 </form>
 
 <div class="row">

+ 8 - 0
routes/web.php

@@ -132,6 +132,8 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     Route::any('custom/set_status',[App\Http\Controllers\Admin\Custom::class,'set_status']);
     // 订单导入
     Route::any('custom/import_execl',[App\Http\Controllers\Admin\Custom::class,'import_execl']);
+    // 订单导入
+    Route::any('custom/down_excel',[App\Http\Controllers\Admin\Custom::class,'down_excel']);
 
     /* 积分管理 */
     // 列表
@@ -169,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']);
 
     /* 订单物流-发货 */
     // 列表
@@ -449,8 +453,12 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     Route::any('regiment_active/add',[App\Http\Controllers\Admin\RegimentActive::class,'add']);
     // 编辑
     Route::any('regiment_active/edit',[App\Http\Controllers\Admin\RegimentActive::class,'edit']);
+    // 编辑
+    Route::any('regiment_active/copy',[App\Http\Controllers\Admin\RegimentActive::class,'copy']);
     // 状态
     Route::any('regiment_active/set_status',[App\Http\Controllers\Admin\RegimentActive::class,'set_status']);
+
+
     //团列表
     Route::any('regiment/index',[App\Http\Controllers\Admin\Regiment::class,'index']);
     //团记录列表