Files
littleTiger/application/admin/validate/Combination.php

149 lines
6.5 KiB
PHP
Raw Permalink Normal View History

2019-02-28 19:48:21 +08:00
<?php
namespace app\admin\validate;
use think\Validate;
use think\Db;
class Combination extends Validate
{
// 验证规则
protected $rule = [
'title' => 'require|max:36',
'desc' => 'require|max:255',
'start_time' => 'require',
'end_time' => 'require|checkEndTime',
'combination_goods' => 'require|array|checkCombinationGoods',
];
//错误信息
protected $message = [
'title.require' => '搭配购标题必须',
'title.max' => '搭配购标题长度不得超过30字符',
'desc.require' => '搭配购描述必须',
'desc.max' => '搭配购描述长度不得超过255字符',
'combination_goods.require' => '请选择搭配购商品',
'combination_goods.array' => '参数错误',
'start_time.require' => '请选择活动开始时间',
'end_time.require' => '请选择活动截止时间',
];
/**
* 检查搭配购商品是否符合标准
* @param $value |验证数据
* @param $rule |验证规则
* @param $data |全部数据
* @return bool|string
*/
protected function checkCombinationGoods($value, $rule, $data)
{
$count = count($data['combination_goods']);
if($count <= 1){
return "请选择两件以上(含两件)商品";
}
$where['title']=$data['title'];
if($data['combination_id']){
$where['combination_id']=array('<>',$data['combination_id']);
}
if(Db::name('combination')->where($where)->find()){
return "存在相同的搭配购标题为".$data['title'];
}
$is_master_count = 0;
$is_master_goods = [];
foreach($data['combination_goods'] as $combination_goods){
if($combination_goods['is_master'] == 1){
$is_master_count++;
$is_master_goods['a.goods_id'] = $combination_goods['goods_id'];
$is_master_goods['b.item_id'] = $combination_goods['item_id'];
}
if (!array_key_exists('price', $combination_goods)) {
return "参数错误";
}
if($combination_goods['price'] <= 0){
return "优惠价格不能小于等于0";
}
if(!array_key_exists('item_id',$combination_goods) && !array_key_exists('goods_id',$combination_goods)){
return "参数错误";
}
$goods = Db::name('goods')->where('goods_id', $combination_goods['goods_id'])->find();
if(empty($goods)){
return "选择的商品不存在";
}
if($combination_goods['item_id']){
$spec_goods_price = Db::name('spec_goods_price')->where('item_id', $combination_goods['item_id'])->find();
if(empty($spec_goods_price)){
return "选择的商品(" . $goods['goods_name'] . ")规格不存在";
}
if($combination_goods['price'] > $spec_goods_price['price']){
return $goods['goods_name'].'规格:'.$spec_goods_price['key_name'].'优惠价格'.$combination_goods['price'].'¥大于商城价格'.$spec_goods_price['price'].'¥';
}
}else{
if($combination_goods['price'] > $goods['shop_price']){
return $goods['goods_name'].'优惠价格'.$combination_goods['price'].'¥大于商城价格'.$goods['shop_price'].'¥';
}
}
}
if($is_master_count == 0){
return "每个组合套餐,必须设置一个主商品";
}
if($is_master_count > 1){
return "每个组合套餐,只能设置一个主商品";
}
if($data['combination_id'] > 0){
$is_master_goods['a.combination_id'] = ['neq',$data['combination_id']];
}
$combination_goods_list = Db::name('combination_goods')->alias('a')->join('__COMBINATION_GOODS__ b', 'b.combination_id = a.combination_id')->field('b.*')->where($is_master_goods)->select();
if(!empty($combination_goods_list)){
$combination_goods_count = count($data['combination_goods']);
for ($i = ($combination_goods_count - 1); $i >= 0; $i--) {
$search_goods = $data['combination_goods'][$i];
for ($j = ($i - 1); $j >= 0; $j--) {
if($search_goods['item_id'] > 0){
if($search_goods['item_id'] == $data['combination_goods'][$j]['item_id']){
unset($data['combination_goods'][$i]);
break;
}
}else{
if($search_goods['goods_id'] == $data['combination_goods'][$j]['goods_id']){
unset($data['combination_goods'][$i]);
break;
}
}
}
}
$combination_goods_count = count($data['combination_goods']);
$combination_goods_list_count = count($combination_goods_list);
if($combination_goods_count == $combination_goods_list_count){
$have_combination_goods_count = 0;
foreach($combination_goods_list as $goods_item){
foreach($data['combination_goods'] as $combination_item){
if($goods_item['goods_id'] == $combination_item['goods_id'] && $goods_item['item_id'] == $combination_item['item_id']){
$have_combination_goods_count++;
}
}
}
if($have_combination_goods_count == $combination_goods_count){
$have_combination = Db::name('combination')->where('combination_id', $combination_goods_list[0]['combination_id'])->find();
return "存在相同的搭配购,搭配购标题为".$have_combination['title'];
}
}
}
return true;
}
/**
* 检查活动时间
* @param $value |验证数据
* @param $rule |验证规则
* @param $data |全部数据
* @return bool|string
*/
protected function checkEndTime($value, $rule, $data)
{
$start_time = strtotime($data['start_time']);
$end_time = strtotime($data['end_time']);
if ($start_time >= $end_time) {
return '您输入了一个无效的时间,活动结束时间不能早于或等于活动开始时间!';
}
return true;
}
}