202 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			202 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | |||
|  | // +----------------------------------------------------------------------
 | |||
|  | // | likeshop开源商城系统
 | |||
|  | // +----------------------------------------------------------------------
 | |||
|  | // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
 | |||
|  | // | gitee下载:https://gitee.com/likeshop_gitee
 | |||
|  | // | github下载:https://github.com/likeshop-github
 | |||
|  | // | 访问官网:https://www.likeshop.cn
 | |||
|  | // | 访问社区:https://home.likeshop.cn
 | |||
|  | // | 访问手册:http://doc.likeshop.cn
 | |||
|  | // | 微信公众号:likeshop技术社区
 | |||
|  | // | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
 | |||
|  | // |  likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
 | |||
|  | // | 禁止对系统程序代码以任何目的,任何形式的再发布
 | |||
|  | // | likeshop团队版权所有并拥有最终解释权
 | |||
|  | // +----------------------------------------------------------------------
 | |||
|  | // | author: likeshop.cn.team
 | |||
|  | // +----------------------------------------------------------------------
 | |||
|  | namespace app\shop\validate\goods; | |||
|  | 
 | |||
|  | use app\common\basics\Validate; | |||
|  | use app\common\enum\GoodsEnum; | |||
|  | use app\common\model\goods\GoodsBrand; | |||
|  | use app\common\model\goods\GoodsUnit; | |||
|  | use app\common\model\goods\Supplier; | |||
|  | use app\common\model\goods\Goods; | |||
|  | use app\common\model\bargain\Bargain; | |||
|  | use app\common\model\seckill\SeckillGoods; | |||
|  | use app\common\model\team\TeamActivity; | |||
|  | use think\Db; | |||
|  | 
 | |||
|  | 
 | |||
|  | /** | |||
|  |  * 商品-验证 | |||
|  |  * Class GoodsValidate | |||
|  |  * @package app\admin\validate | |||
|  |  */ | |||
|  | class GoodsValidate extends Validate | |||
|  | { | |||
|  |     protected $rule = [ | |||
|  |         // 商品类型 0-实物商品 1-虚拟商品
 | |||
|  |         'type'                      => 'require|in:0,1', | |||
|  |         'goods_id'                  => 'require|checkActivityGoods', | |||
|  |         'name'                      => 'require|min:3|max:64|checkName', | |||
|  |         'first_cate_id'             => 'require', | |||
|  |         'image'                     => 'require', | |||
|  |         'goods_image'               => 'require|length:1,5', | |||
|  |         'spec_type'                 => 'require', | |||
|  | 
 | |||
|  |         // 配送方式 1-快递配送 2-虚拟发货
 | |||
|  |         'delivery_type'             => 'require|checkDeliveryType', | |||
|  |         // 买家付款后  1-自动大货 2-手动发货
 | |||
|  |         'after_pay'                 => 'requireIf:type,1', | |||
|  |         // 发货后 1-自动完成订单 2-需要买家确认收货
 | |||
|  |         'after_delivery'            => 'requireIf:type,1', | |||
|  |         'delivery_content'          => 'requireIf:type,1', | |||
|  | 
 | |||
|  |         // 快递类型 1-包邮;2-统一运费;3-运费模板
 | |||
|  |         'express_type'              => 'requireIf:type,0', | |||
|  |         'express_money'             => 'requireIf:express_type,2|checkExpressMoney', | |||
|  |         'express_template_id'       => 'requireIf:express_type,3', | |||
|  |         'status'                    => 'require', | |||
|  |         'stock_warn'                => 'integer|egt:0', | |||
|  |         'code'                      => 'checkCode', | |||
|  |         'sort'                      => 'egt:0', | |||
|  |     ]; | |||
|  | 
 | |||
|  |     protected $message = [ | |||
|  |         'type.require'                          => '请选择商品类型', | |||
|  |         'type.in'                               => '商品类型参数错误', | |||
|  |         'name.require'                          => '请输入商品名称', | |||
|  |         'name.min'                              => '商品名称长度至少3个字符', | |||
|  |         'name.max'                              => '商品名称长度最多64个字符', | |||
|  |         'name.unique'                           => '商品名称已存在,请重新输入', | |||
|  |         'first_cate_id.require'                 => '至少选择一个分类', | |||
|  |         'image.require'                         => '请上传商品主图', | |||
|  |         'goods_image.require'                   => '请上传商品轮播图', | |||
|  |         'goods_image.length'                    => '商品轮播图最多只能上传5张', | |||
|  |         'spec_type.require'                     => '请选择规格类型', | |||
|  | 
 | |||
|  |         'delivery_type.require'                 => '请选择配送方式', | |||
|  |         'after_pay.requireIf'                   => '请选择买家付款后发货方式', | |||
|  |         'after_delivery.requireIf'              => '请选择发货后是否自动完成订单', | |||
|  |         'delivery_content.requireIf'            => '请填写发货内容', | |||
|  | 
 | |||
|  |         'express_type.require'                  => '请选择快递运费类型', | |||
|  |         'express_money.requireIf'               => '请输入统一运费', | |||
|  |         'express_template_id.requireIf'         => '请选择快递运费模板', | |||
|  |         'status.require'                        => '请选择销售状态', | |||
|  |         'stock_warn.integer'                    => '库存预警须为整数', | |||
|  |         'stock_warn.egt'                        => '库存预警须大于或等于0', | |||
|  |         'sort.egt'                              => '排序值不能小于0', | |||
|  |     ]; | |||
|  | 
 | |||
|  |     public function sceneAdd() | |||
|  |     { | |||
|  |         $this->remove('goods_id', 'require'); | |||
|  |     } | |||
|  | 
 | |||
|  |     public function sceneDel() | |||
|  |     { | |||
|  |         $this->only(['goods_id']); | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * 校验商品名称 | |||
|  |      */ | |||
|  |     public function checkName($value, $rule, $data) | |||
|  |     { | |||
|  |         $where = [ | |||
|  |             ['del', '=', 0], | |||
|  |             ['name', '=', $value], | |||
|  |             ['shop_id', '=', $data['shop_id']] | |||
|  |         ]; | |||
|  |         if($data['goods_id']) { // 编辑
 | |||
|  |             $where[] = ['id', '<>', $data['goods_id']]; | |||
|  |         } | |||
|  |         $goods = Goods::where($where)->findOrEmpty(); | |||
|  |         if(!$goods->isEmpty()) { | |||
|  |             return '商品名称已存在,请更换其他名称'; | |||
|  |         } | |||
|  |         return true; | |||
|  |     } | |||
|  | 
 | |||
|  | 
 | |||
|  |     //活动商品不可编辑
 | |||
|  |     public function checkActivityGoods($value, $rule, $data) | |||
|  |     { | |||
|  |         $condition = [ | |||
|  |             'goods_id' => $value, | |||
|  |             'del' => 0, | |||
|  |             'shop_id' => $data['shop_id'] | |||
|  |         ]; | |||
|  | 
 | |||
|  |         // 砍价
 | |||
|  |         $bargain = Bargain::where($condition)->findOrEmpty(); | |||
|  |         if(!$bargain->isEmpty()) { | |||
|  |             return '商品正在参与砍价活动, 无法修改'; | |||
|  |         } | |||
|  | 
 | |||
|  |         // 秒杀
 | |||
|  |         $seckillGoods = SeckillGoods::where($condition)->findOrEmpty(); | |||
|  |         if (!$seckillGoods->isEmpty()) { | |||
|  |             return '商品正在参与秒杀活动, 无法修改'; | |||
|  |         } | |||
|  | 
 | |||
|  |         // 拼团
 | |||
|  |         $teamGoods = TeamActivity::where($condition)->findOrEmpty(); | |||
|  |         if(!$teamGoods->isEmpty()){ | |||
|  |             return '商品正在参加拼团活动, 无法修改'; | |||
|  |         } | |||
|  | 
 | |||
|  |         return true; | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @notes 校验商品编码唯一性 | |||
|  |      */ | |||
|  |     public function checkCode($value, $rule, $data) | |||
|  |     { | |||
|  |         $where = [ | |||
|  |             ['code', '=', $data['code']], | |||
|  |             ['del', '=', 0], | |||
|  |         ]; | |||
|  |         if($data['goods_id']) { | |||
|  |             $where[] = ['id', '<>', $data['goods_id']]; | |||
|  |         } | |||
|  |         $goods = Goods::where($where)->select()->toArray(); | |||
|  |         if($goods) { | |||
|  |             return '商品编码已存在'; | |||
|  |         } | |||
|  |         return true; | |||
|  |     } | |||
|  | 
 | |||
|  |     public function checkExpressMoney($value, $rule, $data) | |||
|  |     { | |||
|  |         if ($data['express_type'] == 2 && $value < 0) { | |||
|  |             return '统一运费不能小于0'; | |||
|  |         } | |||
|  |         return true; | |||
|  |     } | |||
|  | 
 | |||
|  |     /** | |||
|  |      * @notes 校验配送方式 | |||
|  |      * @param $value | |||
|  |      * @param $rule | |||
|  |      * @param $data | |||
|  |      * @return string|void | |||
|  |      * @author 段誉 | |||
|  |      * @date 2022/4/7 12:04 | |||
|  |      */ | |||
|  |     public function checkDeliveryType($value, $rule, $data) | |||
|  |     { | |||
|  |         if ($data['type'] == GoodsEnum::TYPE_VIRTUAL && !in_array(GoodsEnum::DELIVERY_VIRTUAL, $value)) { | |||
|  |             return '虚拟商品配送方式需选择虚拟发货'; | |||
|  |         } | |||
|  |         if ($data['type'] == GoodsEnum::TYPE_ACTUAL && !in_array(GoodsEnum::DELIVERY_EXPRESS, $value)) { | |||
|  |             return '实物商品配送方式需选择快递发货'; | |||
|  |         } | |||
|  |         return true; | |||
|  |     } | |||
|  | } |