Эх сурвалжийг харах

【Add】产品限购逻辑 + 代码逻辑信息优化

liuxiangxin 7 сар өмнө
parent
commit
143902192e

+ 6 - 3
app/Http/Controllers/Admin/Custom.php

@@ -1,6 +1,7 @@
 <?php namespace App\Http\Controllers\Admin;
 
 use App\Http\Requests\Admin\Custom as Request;
+use App\Models\City;
 use App\Models\Custom as Model;
 use App\Models\CustomScore;
 use Illuminate\Support\Carbon;
@@ -92,7 +93,7 @@ class Custom extends Auth{
 	 * 修改
 	 * 
 	 * */
-	public function edit(Request $request,Model $Model){
+	public function edit(Request $request,Model $Model,City $City){
 		// 接收参数
 		$uid						= request('uid',0);
 		// 查询用户
@@ -104,6 +105,7 @@ class Custom extends Auth{
 			// 接收数据
 			$data['username']		= request('username','');
 			$data['phone']			= request('phone','');
+			$data['city_id']		= request('city_id',0);
 			// 写入数据表
 			$result					= $Model->edit($uid,$data);
 			// 如果操作失败
@@ -115,9 +117,10 @@ class Custom extends Auth{
 		}
 		// 错误告知
 		if( !$oldData )				return $this->error('查无数据');
-		// 产品信息转格式
-		$oldData					= $oldData->toArray();
+		// 获取列表
+		$cityList					= $City->getCityList();
 		// 分配数据
+		$this->assign('cityList',$cityList);
 		$this->assign('oldData',$oldData);
 		$this->assign('crumbs','修改');
 		// 加载模板

+ 14 - 0
app/Http/Controllers/Admin/Product.php

@@ -85,6 +85,9 @@ class Product extends Auth{
 			$data['market_price']	= request('market_price',0);
 			$data['producer_id']	= request('producer_id',0);
 			$data['business_id']	= request('business_id',0);
+			$data['quota']			= request('quota',0);
+			$data['quota_start']	= request('quota_start','');
+			$data['quota_end']		= request('quota_end','');
 			$data['stock']			= request('stock',0);
 			$data['status']			= 1;
 			$data['admin_uid']		= admin('uid');
@@ -94,6 +97,10 @@ class Product extends Auth{
 			$cityIds				= request('city_ids',[]);
 			// 如果没有选择,则意味着全部
 			$cityIds				= $cityIds ? $cityIds : [1];
+			$data['quota_start']	= $data['quota_start'] ? strtotime($data['quota_start']) : 0;
+			$data['quota_end']		= $data['quota_end'] ? strtotime($data['quota_end']) : 0;
+			// 限购提示
+			if( $data['quota'] && ( !$data['quota_start'] || !$data['quota_end'] )) 	return json_send(['code'=>'error','msg'=>'限购必填限购时间','data'=>['error'=>'限购必填限购时间']]);
 			// 总库存
 			if( $skuList )			$data['stock'] = array_sum(array_column($skuList,'stock'));
 			// 获取规格属性
@@ -220,6 +227,9 @@ class Product extends Auth{
 			$data['spec']			= request('spec','');
 			$data['price']			= request('price',0);
 			$data['market_price']	= request('market_price',0);
+			$data['quota']			= request('quota',0);
+			$data['quota_start']	= request('quota_start','');
+			$data['quota_end']		= request('quota_end','');
 			$data['producer_id']	= request('producer_id',0);
 			$data['business_id']	= request('business_id',0);
 			$data['stock']			= request('stock',0);
@@ -230,6 +240,10 @@ class Product extends Auth{
 			$cityIds				= request('city_ids',[]);
 			// 如果没有选择,则意味着全部
 			$cityIds				= $cityIds ? $cityIds : [1];
+			$data['quota_start']	= $data['quota_start'] ? strtotime($data['quota_start']) : 0;
+			$data['quota_end']		= $data['quota_end'] ? strtotime($data['quota_end']) : 0;
+			// 限购提示
+			if( $data['quota'] && ( !$data['quota_start'] || !$data['quota_end'] )) 	return json_send(['code'=>'error','msg'=>'限购必填限购时间','data'=>['error'=>'限购必填限购时间']]);
 			// 总库存
 			if( $skuList )			$data['stock'] = array_sum(array_column($skuList,'stock'));
 			// 获取规格属性

+ 23 - 2
app/Http/Controllers/Api/Orders.php

@@ -48,9 +48,18 @@ class Orders extends Api{
 		$buyList						= json_decode($productList,true);
 		// 如果不存在数据
 		if( empty($buyList) )			return json_send(['code'=>'error','msg'=>'没有需下单的产品','data'=>['error'=>'产品列表为空']]);
+		// 商品购买数量
+		$buyNum							= [];
+		// 循环购买信息
+		foreach ($buyList as $key => $value) {
+			// 获取每个商品的总量
+			$buyNum[$value['product_id']] = isset($buyNum[$value['product_id']]) ? ($buyNum[$value['product_id']] + $value['buy_num']) : $value['buy_num'];
+		}
 		// 查询产品信息
 		$productList					= $Product->getListByIds(array_column($buyList,'product_id'));
 		$skusList						= $ProductSkus->getListByIds(array_column($buyList,'product_skuid'));
+		// 当前时间
+		$time 							= time();
 		// 产品以商业公司分组,方便写入订单
 		$orderProduct					= [];
 		// 产品价格同级,用于优惠券计算
@@ -61,10 +70,24 @@ class Orders extends Api{
 			if( empty($productList[$buyInfo['product_id']]) )	return json_send(['code'=>'error','msg'=>'产品不存在或已下架','data'=>['error'=>'产品不存在或已下架=>'.$buyInfo['product_id']]]);
 			// 获取产信息
 			$productInfo 				= $productList[$buyInfo['product_id']];
+			// 如果产品限购
+			if( $productInfo['quota'] )	{
+				// 是否在限购时间,当前时间大于开始时间,并且小于结束时间
+				if( $productInfo['quota_start'] <= $time && $time <= $productInfo['quota_end'] ){
+					// 通过时间查询商品的购买总数
+					$total 				= $OrdersProduct->query()->where([['product_id','=',$productInfo['id']],['insert_time','>=',$productInfo['quota_start']],['insert_time','<=',$productInfo['quota_end']]])->sum('buy_num');
+					// 判断限购数量
+					$total	 			= $buyNum[$buyInfo['product_id']] + $total;
+					// 如果超过数量
+					if( $total > $productInfo['quota'] ) return json_send(['code'=>'error','msg'=>$productInfo['product_name'].'已限购','data'=>['error'=>'已超限=>'.($total - $productInfo['quota'])]]);
+				}
+			}
 			// 如果存在SKU
 			if( $buyInfo['product_skuid'] ) {
 				// 判断SKU信息存不存在
 				if( empty($skusList[$buyInfo['product_skuid']]) ) return json_send(['code'=>'error','msg'=>'该产品规格不存在或已下架','data'=>['error'=>'SKU不存在或已下架=>'.$buyInfo['product_skuid']]]);
+				// 产品ID不匹配的话
+				if( $skusList[$buyInfo['product_skuid']]['product_id'] != $buyInfo['product_id'] ) return json_send(['code'=>'error','msg'=>'该产品规格不存在或已下架','data'=>['error'=>'SKU不匹配=>'.$buyInfo['product_skuid']]]);
 				// 如果SKU存在,合并产品信息
 				$productInfo			= array_merge($productInfo,$skusList[$buyInfo['product_skuid']]);
 				// 扣除库存
@@ -148,8 +171,6 @@ class Orders extends Api{
 		DB::beginTransaction();
 		// 写入数据
 		try {
-			// 当前时间
-			$time 						= time();
 			// 更新库存
 			$Product->updateBatch(array_values($productList));
 			// 更新库存

+ 7 - 2
app/Http/Middleware/AdminAuth.php

@@ -13,10 +13,15 @@ class AdminAuth
                                 'admin/login/index',
                                 'admin/login/send_code',
                                 'admin/login/out',
-                                'admin/files_manager/add',      // 文件上传
-                                'admin/contact_way/part_user',  // 接待人员
+                                'admin/files_manager/add',              // 文件上传
+                                'admin/contact_way/part_user',          // 接待人员
                                 'admin/product/get_spec_html',       // 获取类型下的规格
                                 'admin/product/get_sku_html',       // 获取sku
+                                'admin/image_manager/index',       // 获取sku
+                                'admin/image_manager/upload',       // 获取sku
+                                'admin/image_manager/folder',       // 获取sku
+                                'admin/image_manager/delete',       // 获取sku
+                                'admin/ueditor/upload',             // 获取sku
                             ];
     //默认配置
     protected   $_config    = [

+ 2 - 4
app/Http/Requests/Admin/Business.php

@@ -21,7 +21,7 @@ class Business extends BaseRequest
             // 有时候我们希望某个字段在第一次验证失败后就停止运行验证规则,只需要将 bail 添加到规则中:
             // 验证字段,验证规则,提示信息
 	        'name' 			    => 'required|unique:business,name,'.request('id',0),
-            'phone'		        => ['required','regex:/^1[3456789][0-9]{9}$/'],
+            'phone'		        => ['regex:/^1[3456789][0-9]{9}$/'],
 	        'id'                => 'required|integer|gt:0',
         ];
     }
@@ -44,9 +44,7 @@ class Business extends BaseRequest
         return [
             'name.required'     => '公司名称必填',
             'name.unique'	    => '公司名称已经存在',
-            'phone.required'    => '联系方式必填',
-            'phone.regex'  	    => '联系方式格式错误',  
-            'phone.unique'	    => '联系方式已经存在',
+            'phone.regex'  	    => '联系方式格式错误',
             'id.required'       => 'ID未知',
             'id.integer'        => 'ID格式错误',
             'id.gt'   		    => 'ID格式错误',

+ 1 - 1
app/Jobs/WeiBanSync.php

@@ -90,7 +90,7 @@ class WeiBanSync implements ShouldQueue
         // 获取结果
         $followList                     = $extUser['follow_staffs'];
         // 获取结构数据
-        $extUser                        = ['id'=>$extUser['id'],'name'=>$extUser['name'],'avatar'=>str_ireplace('http://','https://',(string)$extUser['avatar']),'gender'=>$extUser['gender'],'type'=>$extUser['type'],'corp_name'=>(string)$extUser['corp_name'],'corp_full_name'=>(string)$extUser['corp_full_name'],'insert_time'=>$extUser['created_at'],'update_time'=>$extUser['updated_at'],'custom_uid'=>0];
+        $extUser                        = ['id'=>$extUser['id'],'name'=>$extUser['name'],'avatar'=>str_ireplace('http://','https://',(string)$extUser['avatar']),'gender'=>$extUser['gender'],'type'=>$extUser['type'],'corp_name'=>(string)$extUser['corp_name'],'corp_full_name'=>(string)$extUser['corp_full_name'],'insert_time'=>$extUser['created_at'],'update_time'=>time(),'custom_uid'=>0];
         // 手机号
         $phone                          = '';
         // 循环跟进客服

+ 1 - 1
app/Models/Product.php

@@ -160,7 +160,7 @@ class Product extends Model
     public function getListByIds($productIds)
     {
         // 写入数据表
-        $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'])->toArray();
+        $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','quota_start','quota_end'])->toArray();
         // 列表
         $list                   = [];
         // 循环处理

+ 1 - 1
app/Models/Product/Skus.php

@@ -77,7 +77,7 @@ class Skus extends Model
     public function getListByIds($skuIds)
     {
         // 写入数据表
-        $data					= $this->query()->whereIn('id',$skuIds)->where([['status','=',0]])->get(['id as sku_id','attr_names as sku_attr_names','price','stock','status'])->toArray();
+        $data					= $this->query()->whereIn('id',$skuIds)->where([['status','=',0]])->get(['id as sku_id','product_id','attr_names as sku_attr_names','price','stock','status'])->toArray();
         // 列表
         $list                   = [];
         // 循环处理

BIN
public/uploads/company/license/1/img.jpg


BIN
public/uploads/company/license/img.jpg


+ 1 - 1
resources/views/admin/business/add.blade.php

@@ -19,7 +19,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 	</div>
 	<div class="form-group col-sm-12">
 		<label class="control-label">联系方式</label>
-		<input class="form-control" required="required" type="text" placeholder="联系方式,请填写手机号" maxlength="11" name="phone" value="" />
+		<input class="form-control" type="text" placeholder="联系方式,请填写手机号" maxlength="11" name="phone" value="" />
 	</div>
 	<div class="form-group col-sm-12">
 		<label class="control-label">简介说明</label>

+ 1 - 1
resources/views/admin/business/edit.blade.php

@@ -19,7 +19,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 	</div>
 	<div class="form-group col-sm-12">
 		<label class="control-label">联系方式</label>
-		<input class="form-control" required="required" type="text" placeholder="联系方式,请填写手机号" maxlength="11" name="phone" value="{{$oldData['phone']}}" />
+		<input class="form-control" type="text" placeholder="联系方式,请填写手机号" maxlength="11" name="phone" value="{{$oldData['phone']}}" />
 	</div>
 	<div class="form-group col-sm-12">
 		<label class="control-label">简介说明</label>

+ 12 - 4
resources/views/admin/custom/edit.blade.php

@@ -12,10 +12,18 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">联系方式<span class="text-red">*</span></label>
 		<input class="form-control" required="required" type="text" placeholder="联系方式,请填写手机号" name="phone" value="{{$oldData['phone']}}" />
 	</div>
-	<div class="form-group col-sm-12">
-		<label class="control-label">所属商业公司</label>
-		<input class="form-control" required="required" type="text" placeholder="所属商业公司" maxlength="20" name="business_name" value="" />
-	</div>
+	<!-- <div class="form-group col-sm-12">
+		<label class="control-label">客户城市</label>
+		<select name="city_id" class="form-control selectpicker" data-live-search="true" data-live-search-placeholder="搜索城市" data-none-results-text="未搜索到 {0}" title="选择城市">
+			@foreach ($cityList as $group)
+			<optgroup label="{{$group['name']}}">
+				@foreach ($group['city'] as $city)
+				<option value="{{$city['id']}}" @if( $city['id'] == $oldData['city_id'] ) selected @endif >{{$city['name']}}</option>
+				@endforeach
+			</optgroup>
+			@endforeach
+		</select>
+	</div> -->
 	<div class="form-group col-sm-12">
 		@csrf
 		<input type="hidden" name="uid" id="uid" value="{{$oldData['uid']}}" />

+ 0 - 1
resources/views/admin/index/welcome.blade.php

@@ -11,7 +11,6 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<tr>
 			<td colspan="10">欢迎使用 {{config('app.name')}}系统后台管理系统 </td>
 		</tr>
-		<!-- {{dd(request()->authRules)}} -->
 		<!-- <tr>
 			<td class="active" colspan="10">系统信息</td>
 		</tr>

+ 22 - 10
resources/views/admin/product/add.blade.php

@@ -22,11 +22,11 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			<input type="hidden" name="poster" value="" id="input-poster" />
 		</div>
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
 		<label class="control-label">产品名称</label>
 		<input class="form-control" required="required" type="text" placeholder="产品名称" maxlength="50" name="name" value="" />
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
 		<label class="control-label">折扣价格</label>
 		<input class="form-control" required="required" type="text" placeholder="折扣价格" min="0"  max="9999.99" name="price" value="" />
 	</div>
@@ -34,11 +34,27 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">产品原价</label>
 		<input class="form-control" required="required" type="text" placeholder="产品原价" min="0" max="9999.99" name="market_price" value="" />
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
 		<label class="control-label">产品规格</label>
 		<input class="form-control" required="required" type="text" placeholder="产品规格" maxlength="25" name="spec" value="" />
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品库存</label>
+		<input class="form-control" required="required" type="number" placeholder="产品库存"  name="stock" value="" />
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">限购数量</label>
+		<input class="form-control" required="required" type="number" placeholder="限购数量,设置为0表示不限购"  name="quota" value="0" />
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">限购开始</label>
+		<input class="form-control" type="datetime-local" placeholder="限购开始时间"  name="quota_start" value="" />
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">限购结束</label>
+		<input class="form-control" type="datetime-local" placeholder="限购结束时间" name="quota_end" value="" />
+	</div>
+	<div class="form-group col-sm-2">
 		<label class="control-label">服务城市</label>
 		<select name="city_ids[]" class="form-control selectpicker" data-live-search="true" data-live-search-placeholder="搜索城市" data-none-results-text="未搜索到 {0}" title="选择城市" multiple>
 			@foreach ($cityList as $group)
@@ -58,7 +74,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			@endforeach
 		</select>
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
 		<label class="control-label">生产厂家</label>
 		<select name="producer_id" class="form-control selectpicker"  data-live-search="true" data-live-search-placeholder="搜索生产厂家" data-none-results-text="未搜索到 {0}" title="选择厂家">
 			@foreach ($producerList as $value)
@@ -66,7 +82,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			@endforeach
 		</select>
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
 		<label class="control-label">商业公司</label>
 		<select name="business_id" class="form-control selectpicker" data-live-search="true" data-live-search-placeholder="搜索商业公司" data-none-results-text="未搜索到 {0}" title="选择商业公司">
 			@foreach ($businessList as $value)
@@ -74,10 +90,6 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			@endforeach
 		</select>
 	</div>
-	<div class="form-group col-sm-2">
-		<label class="control-label">产品库存</label>
-		<input class="form-control" required="required" type="number" placeholder="产品库存"  name="stock" value="" />
-	</div>
 	<div class="form-group col-sm-12" id="add_spec">
 		
 	</div>

+ 22 - 10
resources/views/admin/product/edit.blade.php

@@ -22,11 +22,11 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			<input type="hidden" name="poster" value="{{$oldData['poster']}}" id="input-poster" />
 		</div>
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
 		<label class="control-label">产品名称</label>
 		<input class="form-control" required="required" type="text" placeholder="产品名称" maxlength="50" name="name" value="{{$oldData['name']}}" />
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
 		<label class="control-label">折扣价格</label>
 		<input class="form-control" required="required" type="text" placeholder="折扣价格" min="0"  max="9999.99" name="price" value="{{$oldData['price']}}" />
 	</div>
@@ -34,11 +34,27 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">产品原价</label>
 		<input class="form-control" required="required" type="text" placeholder="产品原价" min="0" max="9999.99" name="market_price" value="{{$oldData['market_price']}}" />
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
 		<label class="control-label">产品规格</label>
 		<input class="form-control" required="required" type="text" placeholder="产品规格" maxlength="25" name="spec" value="{{$oldData['spec']}}" />
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品库存</label>
+		<input class="form-control" required="required" type="number" placeholder="产品库存" name="stock" value="{{$oldData['stock']}}" />
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">限购数量</label>
+		<input class="form-control" required="required" type="number" placeholder="限购数量,设置为0表示不限购"  name="quota" value="{{$oldData['quota']}}" />
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">限购开始</label>
+		<input class="form-control" type="datetime-local" placeholder="限购开始时间"  name="quota_start" value="{{date('Y-m-d H:i',$oldData['quota_start'])}}" />
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">限购结束</label>
+		<input class="form-control" type="datetime-local" placeholder="限购结束时间" name="quota_end" value="{{date('Y-m-d H:i',$oldData['quota_end'])}}" />
+	</div>
+	<div class="form-group col-sm-2">
 		<label class="control-label">服务城市</label>
 		<select name="city_ids[]" class="form-control selectpicker" data-live-search="true" data-live-search-placeholder="搜索城市" data-none-results-text="未搜索到 {0}" title="选择城市" multiple>
 			@foreach ($cityList as $group)
@@ -58,7 +74,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			@endforeach
 		</select>
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
 		<label class="control-label">生产厂家</label>
 		<select name="producer_id" required class="form-control selectpicker"  data-live-search="true" data-live-search-placeholder="搜索生产厂家" data-none-results-text="未搜索到 {0}" title="选择厂家">
 			@foreach ($producerList as $value)
@@ -66,7 +82,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			@endforeach
 		</select>
 	</div>
-	<div class="form-group col-sm-3">
+	<div class="form-group col-sm-2">
 		<label class="control-label">商业公司</label>
 		<select name="business_id" required class="form-control selectpicker" data-live-search="true" data-live-search-placeholder="搜索商业公司" data-none-results-text="未搜索到 {0}" title="选择商业公司">
 			@foreach ($businessList as $value)
@@ -74,10 +90,6 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			@endforeach
 		</select>
 	</div>
-	<div class="form-group col-sm-2">
-		<label class="control-label">产品库存</label>
-		<input class="form-control" required="required" type="number" placeholder="产品库存" name="stock" value="{{$oldData['stock']}}" />
-	</div>
 	<div class="form-group col-sm-12" id="add_spec">
 		@foreach ($specList as $spec)
 		<div class="form-group col-sm-12">