116 lines
4.0 KiB
PHP
116 lines
4.0 KiB
PHP
<?php
|
|
namespace app\admin\validate;
|
|
use think\Validate;
|
|
use think\Db;
|
|
class FlashSale extends Validate
|
|
{
|
|
// 验证规则
|
|
protected $rule = [
|
|
['id','checkId'],
|
|
['title', 'require|unique:flash_sale'],
|
|
['goods_id', 'require'],
|
|
['price','require|gt:0|checkPrice'],
|
|
['goods_num','require|gt:0|checkGoodsNum'],
|
|
['buy_limit','require|gt:0|checkLimit'],
|
|
['start_time','require'],
|
|
['end_time','require|checkEndTime'],
|
|
];
|
|
//错误信息
|
|
protected $message = [
|
|
'title.require' => '抢购标题必填',
|
|
'title.unique' => '已存在相同抢购标题',
|
|
'goods_id.require' => '请选择参与抢购的商品',
|
|
'price.require' => '请填写限时抢购价格',
|
|
'price.gt' => '限时抢购价格必须是大于0的数字',
|
|
'price.checkPrice' => '限时抢购价格必须小于商品原价',
|
|
'goods_num.require' => '请填写参加抢购数量',
|
|
'goods_num.gt' => '抢购数量必须是大于0的数字',
|
|
'buy_limit.require' => '请填写限购数量',
|
|
'buy_limit.gt' => '限购数量必须是大于0的数字',
|
|
'start_time.require' => '请选择开始时间',
|
|
'end_time.require' => '请选择结束时间',
|
|
'end_time.checkEndTime' => '结束时间不能早于开始时间',
|
|
];
|
|
/**
|
|
* 检查限购数量
|
|
* @param $value|验证数据
|
|
* @param $rule|验证规则
|
|
* @param $data|全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkLimit($value, $rule ,$data)
|
|
{
|
|
if($value > $data['goods_num']){
|
|
return '限购数量不能超过抢购数量';
|
|
}
|
|
$goods = Db::name("goods")->where(['goods_id'=>$data['goods_id']])->find();
|
|
if($goods['is_virtual'] == 1 && $value > $goods['virtual_limit']){
|
|
return '限购数量不能超过虚拟商品购买上限';
|
|
}
|
|
return true;
|
|
}
|
|
/**
|
|
* 检查结束时间
|
|
* @param $value|验证数据
|
|
* @param $rule|验证规则
|
|
* @param $data|全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkEndTime($value, $rule ,$data)
|
|
{
|
|
return ($value < $data['start_time']) ? false : true;
|
|
}
|
|
/**
|
|
* 检查抢购价格
|
|
* @param $value|验证数据
|
|
* @param $rule|验证规则
|
|
* @param $data|全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkPrice($value, $rule ,$data)
|
|
{
|
|
if($data['item_id'] > 0){
|
|
//商品规格
|
|
$price = Db::name("spec_goods_price")->where(['item_id'=>$data['item_id']])->getField('price');
|
|
}else{
|
|
$price = Db::name('goods')->where('goods_id',$data['goods_id'])->getField('shop_price');
|
|
}
|
|
return ($value >= $price) ? false : true;
|
|
}
|
|
/**
|
|
* 检查参与抢购数量
|
|
* @param $value|验证数据
|
|
* @param $rule|验证规则
|
|
* @param $data|全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkGoodsNum($value, $rule ,$data)
|
|
{
|
|
if($value == 0){
|
|
return '抢购数量不能为零';
|
|
}
|
|
if($data['item_id'] > 0){
|
|
//商品规格
|
|
$store_count = Db::name("spec_goods_price")->where(['item_id'=>$data['item_id']])->getField('store_count');
|
|
}else{
|
|
$store_count = Db::name("goods")->where(['goods_id'=>$data['goods_id']])->getField('store_count');
|
|
}
|
|
return ($value > $store_count) ? '抢购数量不能大于库存数量' : true;
|
|
}
|
|
/**
|
|
* 该活动是否可以编辑
|
|
* @param $value|验证数据
|
|
* @param $rule|验证规则
|
|
* @param $data|全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkId($value, $rule ,$data)
|
|
{
|
|
$isHaveOrder = Db::name('order_goods')->where(['prom_type'=>1,'prom_id'=>$value])->find();
|
|
if($isHaveOrder){
|
|
return '该活动已有用户下单购买不能编辑';
|
|
}else{
|
|
return true;
|
|
}
|
|
}
|
|
} |