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;
|
|||
|
}
|
|||
|
}
|