238 lines
8.0 KiB
PHP
238 lines
8.0 KiB
PHP
<?php
|
|
namespace app\common\validate;
|
|
|
|
use think\Validate;
|
|
use think\Db;
|
|
|
|
class PreSell extends Validate
|
|
{
|
|
// 验证规则
|
|
protected $rule = [
|
|
'pre_sell_id'=>'checkId',
|
|
'ladder_amount' => 'require|checkLadderAmount',
|
|
'ladder_price' => 'require|checkLadderPrice',
|
|
'sell_start_time' => 'require|checkSellStartTime',
|
|
'sell_end_time' => 'require|checkSellEndTime',
|
|
'deposit_price' => ['require', 'regex' => '([0-9]\d*(\.\d*[1-9])?)|(0\.\d*[1-9])','checkDepositPrice'],
|
|
'stock_num' => 'require|number|gt:0|checkStockNum',
|
|
'goods_id' => 'require|checkGoodsId',
|
|
'item_id' => 'checkItemId',
|
|
'pay_start_time' => 'checkPayStartTime',
|
|
'pay_end_time' => 'checkPayEndTime',
|
|
'title' => 'require|max:255',
|
|
'delivery_time_desc' => 'require|max:255',
|
|
];
|
|
//错误信息
|
|
protected $message = [
|
|
'ladder_amount.require' => '价格阶梯必须',
|
|
'ladder_price.require' => '价格阶梯必须',
|
|
'sell_start_time.require' => '活动开始时间必须',
|
|
'sell_end_time.require' => '活动结束时间必须',
|
|
'deposit_price.require' => '订金必须',
|
|
'deposit_price.regex' => '订金格式错误',
|
|
'stock_num.require' => '库存必须',
|
|
'stock_num.number' => '库存必须为数字',
|
|
'stock_num.gt' => '库存必须大于0',
|
|
'goods_id.require' => '请选择参与预售的商品',
|
|
'title.require' => '预售标题必须',
|
|
'title.max' => '预售标题长度不得超过255字符',
|
|
'delivery_time_desc.require' => '发货时间描述必须',
|
|
'delivery_time_desc.max' => '发货时间描述长度不得超过255字符',
|
|
];
|
|
|
|
/**
|
|
* 检查活动时间
|
|
* @param $value |验证数据
|
|
* @param $rule |验证规则
|
|
* @param $data |全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkId($value, $rule)
|
|
{
|
|
$pre_sell = Db::name('pre_sell')->field('sell_start_time')->where('pre_sell_id', $value)->find();
|
|
if(time() > $pre_sell['sell_start_time'] && $pre_sell['status'] == 1){
|
|
return '预售活动已经开始不能更改预售商品';
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* 检查活动时间
|
|
* @param $value |验证数据
|
|
* @param $rule |验证规则
|
|
* @param $data |全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkSellStartTime($value, $rule, $data)
|
|
{
|
|
$sell_start_time = strtotime($data['sell_start_time']);
|
|
$sell_end_time = strtotime($data['sell_end_time']);
|
|
if ($sell_start_time > $sell_end_time) {
|
|
return '您输入了一个无效的时间,活动结束时间不能早于活动开始时间!';
|
|
}
|
|
return true;
|
|
}
|
|
/**
|
|
* 检查活动时间
|
|
* @param $value |验证数据
|
|
* @param $rule |验证规则
|
|
* @param $data |全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkSellEndTime($value, $rule, $data)
|
|
{
|
|
$sell_end_time = strtotime($data['sell_end_time']);
|
|
if($data['pre_sell_id'] > 0 && $data['deposit_price'] > 0 && !array_key_exists('pay_start_time', $data)){
|
|
$pre_sell = Db::name('pre_sell')->where(['pre_sell_id'=>$data['pre_sell_id']])->find();
|
|
if($sell_end_time > $pre_sell['pay_start_time']){
|
|
return '尾款开始支付时间不能早于活动结束时间!';
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* 检查阶梯价格中的库存
|
|
* @param $value |验证数据
|
|
* @param $rule |验证规则
|
|
* @param $data |全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkLadderAmount($value, $rule, $data)
|
|
{
|
|
if ($data['stock_num'] < max($value)) {
|
|
return '预定最多人数不能大于预售库存!';
|
|
}
|
|
if(min($value) <= 0){
|
|
return '预定人数不能小于零';
|
|
}
|
|
return true;
|
|
|
|
}
|
|
/**
|
|
* 检查阶梯价格中的价格
|
|
* @param $value |验证数据
|
|
* @param $rule |验证规则
|
|
* @param $data |全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkLadderPrice($value, $rule)
|
|
{
|
|
if(min($value) <= 0){
|
|
return '阶梯价格不能小于0';
|
|
}else{
|
|
return true;
|
|
}
|
|
}
|
|
/**
|
|
* 检查商品id
|
|
* @param $value |验证数据
|
|
* @param $rule |验证规则
|
|
* @return bool|string
|
|
*/
|
|
protected function checkGoodsId($value, $rule)
|
|
{
|
|
$goods = Db::name('goods')->field('prom_type')->where('goods_id', $value)->find();
|
|
if(empty($goods)){
|
|
return '选择参与预售的商品不存在';
|
|
}
|
|
if($goods['prom_type'] != 4 && $goods['prom_type'] != 0){
|
|
return '选择参与预售的商品已经参与了其他活动';
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* 检查预售库存
|
|
* @param $value |验证数据
|
|
* @param $rule |验证规则
|
|
* @param $data |全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkStockNum($value, $rule, $data)
|
|
{
|
|
if($data['item_id']){
|
|
$stock_num = Db::name('spec_goods_price')->where('item_id', $data['item_id'])->value('store_count');
|
|
}else{
|
|
$stock_num = Db::name('goods')->where('goods_id', $data['goods_id'])->value('store_count');
|
|
}
|
|
if($value > $stock_num){
|
|
return '预售库存不得大于商品库存';
|
|
}else{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
protected function checkDepositPrice($value, $rule, $data){
|
|
if ($value >= min($data['ladder_price'])) {
|
|
return '定金不能大于等于阶梯价格!';
|
|
}
|
|
if($value > 0 && empty($data['pre_sell_id']) && (empty($data['pay_start_time']) || empty($data['pay_end_time']))){
|
|
return '请选择尾款支付时间!';
|
|
}
|
|
return true;
|
|
}
|
|
/**
|
|
* 检查支付尾款时间
|
|
* @param $value |验证数据
|
|
* @param $rule |验证规则
|
|
* @param $data |全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkPayStartTime($value, $rule, $data)
|
|
{
|
|
$pay_start_time = strtotime($data['pay_start_time']);
|
|
$sell_start_time = strtotime($data['sell_start_time']);
|
|
$sell_end_time = strtotime($data['sell_end_time']);
|
|
if($sell_start_time > $pay_start_time){
|
|
return '尾款开始支付时间不能早于活动开始时间!';
|
|
}
|
|
if($sell_end_time > $pay_start_time){
|
|
return '尾款开始支付时间不能早于活动结束时间!';
|
|
}
|
|
return true;
|
|
|
|
}
|
|
/**
|
|
* 检查支付尾款时间
|
|
* @param $value |验证数据
|
|
* @param $rule |验证规则
|
|
* @param $data |全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkPayEndTime($value, $rule, $data)
|
|
{
|
|
$pay_start_time = strtotime($data['pay_start_time']);
|
|
$pay_end_time = strtotime($data['pay_end_time']);
|
|
if ($pay_start_time > $pay_end_time) {
|
|
return '尾款结束支付时间不能早于尾款开始支付时间!';
|
|
}
|
|
return true;
|
|
}
|
|
/**
|
|
* 检查预售库存
|
|
* @param $value |验证数据
|
|
* @param $rule |验证规则
|
|
* @param $data |全部数据
|
|
* @return bool|string
|
|
*/
|
|
protected function checkItemId($value, $rule, $data)
|
|
{
|
|
$spec_goods_price = Db::name('spec_goods_price')->field('prom_type,prom_id')->where('item_id', $value)->find();
|
|
if(empty($spec_goods_price)){
|
|
return '选择参与预售的商品规格不存在';
|
|
}
|
|
if($spec_goods_price['prom_type'] != 4 && $spec_goods_price['prom_type'] != 0){
|
|
return '选择参与预售的商品规格已参与了其他活动';
|
|
}
|
|
if($data['pre_sell_id'] && $spec_goods_price['prom_id']){
|
|
if($data['pre_sell_id'] != $spec_goods_price['prom_id']){
|
|
return '选择参与预售的商品规格参与了其他预售活动';
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
} |