admin/app/model/goods/GoodsAttribute.php

452 lines
16 KiB
PHP

<?php
/**
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 成都云之牛科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.cdcloudshop.com
* =========================================================
*/
namespace app\model\goods;
use think\facade\Cache;
use app\model\BaseModel;
/**
* 商品类型、属性
*/
class GoodsAttribute extends BaseModel
{
/************************************************************商品类型*********************************************/
/**
* 添加商品类型
* @param $data
* @return \multitype
*/
public function addAttrClass($data)
{
$site_id = isset($data[ 'site_id' ]) ? $data[ 'site_id' ] : '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$class_id = model("goods_attr_class")->add($data);
Cache::tag("goods_attr_class_" . $site_id)->clear();
return $this->success($class_id);
}
/**
* 编辑商品类型
* @param $data
* @return \multitype
*/
public function editAttrClass($data)
{
$site_id = isset($data[ 'site_id' ]) ? $data[ 'site_id' ] : '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$res = model("goods_attr_class")->update($data, [ [ 'class_id', '=', $data[ 'class_id' ] ], [ 'site_id', '=', $data[ 'site_id' ] ] ]);
if (!empty($data[ 'class_name' ])) {
//修改属性表
model("goods_attribute")->update([ 'attr_class_name' => $data[ 'class_name' ] ], [ [ 'attr_class_id', '=', $data[ 'class_id' ] ] ]);
}
//预留修改商品
Cache::tag("goods_attr_class_" . $site_id)->clear();
return $this->success($res);
}
/**
* 删除商品类型
* @param $class_id
* @return \multitype
*/
public function deleteAttrClass($class_id, $site_id)
{
$site_id = isset($site_id) ? $site_id : '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$res = model('goods_attr_class')->delete([ [ 'class_id', '=', $class_id ], [ 'site_id', '=', $site_id ] ]);
if ($res) {
// 删除商品参数
model('goods_attribute')->delete([ [ 'attr_class_id', '=', $class_id ] ]);
Cache::tag("goods_attribute_" . $site_id . "_" . $class_id)->clear();
}
Cache::tag("goods_attr_class_" . $site_id)->clear();
return $this->success($res);
}
/**
* 修改排序
* @param int $sort
* @param int $class_id
*/
public function modifyAttrClassSort($sort, $class_id, $site_id)
{
$site_id = isset($site_id) ? $site_id : '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$res = model('goods_attr_class')->update([ 'sort' => $sort ], [ [ 'class_id', '=', $class_id ], [ 'site_id', '=', $site_id ] ]);
Cache::tag("goods_attr_class_" . $site_id)->clear();
return $this->success($res);
}
/**
* 获取商品类型信息
* @param array $condition
* @param string $field
*/
public function getAttrClassInfo($condition, $field = '*')
{
$check_condition = array_column($condition, 2, 0);
$site_id = isset($check_condition[ 'site_id' ]) ? $check_condition[ 'site_id' ] : '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$data = json_encode([ $condition, $field ]);
$cache = Cache::get("goods_attr_class_getAttrClassInfo_" . $site_id . "_" . $data);
if (!empty($cache)) {
return $this->success($cache);
}
$res = model('goods_attr_class')->getInfo($condition, $field);
Cache::tag("goods_attr_class_" . $site_id)->set("goods_attr_class_getAttrClassInfo_" . $site_id . "_" . $data, $res);
return $this->success($res);
}
/**
* 获取商品类型列表
* @param array $condition
* @param string $field
* @param string $order
* @param null $limit
* @return \multitype
*/
public function getAttrClassList($condition = [], $field = 'class_id,class_name,sort', $order = 'class_id desc', $limit = null)
{
$check_condition = array_column($condition, 2, 0);
$site_id = isset($check_condition[ 'site_id' ]) ? $check_condition[ 'site_id' ] : '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$data = json_encode([ $condition, $field, $order, $limit ]);
$cache = Cache::get("goods_attr_class_getAttrClassList_" . $site_id . "_" . $data);
if (!empty($cache)) {
return $this->success($cache);
}
$list = model('goods_attr_class')->getList($condition, $field, $order, '', '', '', $limit);
Cache::tag("goods_attr_class_" . $site_id)->set("goods_attr_class_getAttrClassList_" . $site_id . "_" . $data, $list);
return $this->success($list);
}
/**
* 获取商品类型分页列表
* @param array $condition
* @param int $page
* @param int $page_size
* @param string $order
* @param string $field
* @return \multitype
*/
public function getAttrClassPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = 'sort asc', $field = 'class_id,class_name,sort')
{
$check_condition = array_column($condition, 2, 0);
$site_id = isset($check_condition[ 'site_id' ]) ? $check_condition[ 'site_id' ] : '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$data = json_encode([ $condition, $field, $order, $page, $page_size ]);
$cache = Cache::get("goods_attr_class_getAttrClassPageList_" . $site_id . "_" . $data);
if (!empty($cache)) {
return $this->success($cache);
}
$list = model('goods_attr_class')->pageList($condition, $field, $order, $page, $page_size);
Cache::tag("goods_attr_class_" . $site_id)->set("goods_attr_class_getAttrClassPageList_" . $site_id . "_" . $data, $list);
return $this->success($list);
}
/************************************************************商品参数*********************************************/
/**
* 添加商品参数
* @param $attr_class_id
* @param $data
* @return \multitype
*/
public function addAttribute($attr_class_id, $data)
{
$site_id = isset($data[ 'site_id' ]) ? $data[ 'site_id' ] : '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$attr_id = model("goods_attribute")->add($data);
Cache::tag("goods_attribute_" . $site_id . "_" . $attr_class_id)->clear();
return $this->success($attr_id);
}
/**
* 编辑商品参数
* @param $attr_class_id
* @param $data
* @return \multitype
*/
public function editAttribute($attr_class_id, $data)
{
$site_id = isset($data[ 'site_id' ]) ? $data[ 'site_id' ] : '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$res = model("goods_attribute")->update($data, [ [ 'attr_id', '=', $data[ 'attr_id' ] ], [ 'attr_class_id', '=', $attr_class_id ], [ 'site_id', '=', $site_id ] ]);
Cache::tag("goods_attribute_" . $site_id . "_" . $attr_class_id)->clear();
return $this->success($res);
}
/**
* 删除属性
* @param $attr_class_id
* @param $attr_id
* @return \multitype
*/
public function deleteAttribute($attr_class_id, $attr_id, $site_id)
{
$site_id = isset($site_id) ? $site_id : '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$res = model('goods_attribute')->delete([ [ 'attr_id', '=', $attr_id ], [ 'attr_class_id', '=', $attr_class_id ], [ 'site_id', '=', $site_id ] ]);
Cache::tag("goods_attribute_" . $site_id . "_" . $attr_class_id)->clear();
return $this->success($res);
}
/**
* 修改排序
* @param $sort
* @param $attr_class_id
* @param $attr_id
* @param $site_id
* @return array
*/
public function modifyAttributeSort($sort, $attr_class_id, $attr_id, $site_id)
{
$res = model('goods_attribute')->update([ 'sort' => $sort ], [ [ 'attr_id', '=', $attr_id ], [ 'site_id', '=', $site_id ] ]);
Cache::tag("goods_attribute_" . $site_id . "_" . $attr_class_id)->clear();
return $this->success($res);
}
/**
* 获取属性信息
* @param $condition
* @param string $field
* @return \multitype
*/
public function getAttributeInfo($condition, $field = '*')
{
$check_condition = array_column($condition, 2, 0);
$attr_class_id = isset($check_condition[ 'attr_class_id' ]) ? $check_condition[ 'attr_class_id' ] : '';
if ($attr_class_id === '') {
return $this->error('', 'REQUEST_GOODS_ATTRIBUTE_ID');
}
$site_id = isset($check_condition[ 'site_id' ]) ? $check_condition[ 'site_id' ] : '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$data = json_encode([ $condition, $field ]);
$cache = Cache::get("goods_attribute_getAttributeInfo_" . $site_id . "_" . $attr_class_id . '_' . $data);
if (!empty($cache)) {
return $this->success($cache);
}
$res = model('goods_attribute')->getInfo($condition, $field);
Cache::tag("goods_attribute_" . $site_id . "_" . $attr_class_id)->set("goods_attribute_getAttributeInfo_" . $site_id . "_" . $attr_class_id . '_' . $data, $res);
return $this->success($res);
}
/**
* 获取商品参数列表
* @param array $condition
* @param string $field
* @param string $order
* @param null $limit
* @return \multitype
*/
public function getAttributeList($condition = [], $field = '*', $order = 'sort asc', $limit = null)
{
$check_condition = array_column($condition, 2, 0);
$attr_class_id = isset($check_condition[ 'attr_class_id' ]) ? $check_condition[ 'attr_class_id' ] : '';
if ($attr_class_id === '') {
return $this->error('', 'REQUEST_GOODS_ATTRIBUTE_ID');
}
$site_id = isset($check_condition[ 'site_id' ]) ? $check_condition[ 'site_id' ] : '';
if ($site_id === '') {
return $this->error('', 'REQUEST_SITE_ID');
}
$data = json_encode([ $condition, $field, $order, $limit ]);
$cache = Cache::get("goods_attribute_getAttributeList_" . $site_id . "_" . $attr_class_id . '_' . $data);
if (!empty($cache)) {
return $this->success($cache);
}
$list = model('goods_attribute')->getList($condition, $field, $order, '', '', '', $limit);
Cache::tag("goods_attribute_" . $site_id . "_" . $attr_class_id)->set("goods_attribute_getAttributeList_" . $site_id . "_" . $attr_class_id . '_' . $data, $list);
return $this->success($list);
}
/**
* 获取商品规格列表,暂时不加缓存
* @param array $condition
* @param string $field
* @param string $order
* @param null $limit
* @return \multitype
*/
public function getSpecList($condition = [], $field = 'attr_id,attr_name,attr_class_id,sort,is_query,is_spec,attr_value_list,attr_value_list,attr_type,site_id', $order = 'sort asc', $limit = null)
{
$list = model('goods_attribute')->getList($condition, $field, $order, '', '', '', $limit);
return $this->success($list);
}
/************************************************************商品参数值*********************************************/
/**
* 添加属性值
* @param $attr_class_id
* @param $data
* @return \multitype
*/
public function addAttributeValue($attr_class_id, $data)
{
$attr_value_id = model("goods_attribute_value")->addList($data);
if ($attr_value_id) {
// 刷新属性值JSON格式
$this->refreshAttrValueFormat($attr_class_id, $data[ 0 ][ 'attr_id' ]);
Cache::tag("goods_attribute_value_" . $attr_class_id)->clear();
return $this->success($attr_value_id);
} else {
return $this->error();
}
}
/**
* 编辑商品参数值
* @param $attr_class_id
* @param $data
* @return \multitype
*/
public function editAttributeValue($attr_class_id, $data)
{
$res = model("goods_attribute_value")->update($data, [ [ 'attr_value_id', '=', $data[ 'attr_value_id' ] ] ]);
if ($res) {
// 刷新属性值JSON格式
$this->refreshAttrValueFormat($attr_class_id, $data[ 'attr_id' ]);
Cache::tag("goods_attribute_value_" . $attr_class_id)->clear();
return $this->success($res);
} else {
return $this->error();
}
}
/**
* 刷新属性值JSON格式
* @param $attr_class_id
* @param $attr_id
*/
private function refreshAttrValueFormat($attr_class_id, $attr_id)
{
$list = model('goods_attribute_value')->getList([ [ 'attr_id', '=', $attr_id ] ], 'attr_value_id,attr_value_name');
if (!empty($list)) {
$attr_value_format = [];
foreach ($list as $k => $v) {
$item = [
'attr_value_id' => $v[ 'attr_value_id' ],
'attr_value_name' => $v[ 'attr_value_name' ]
];
$attr_value_format[] = $item;
}
$res = model("goods_attribute")->update([ 'attr_value_format' => json_encode($attr_value_format) ], [ [ 'attr_id', '=', $attr_id ], [ 'attr_class_id', '=', $attr_class_id ] ]);
Cache::tag("goods_attribute_" . $attr_class_id)->clear();
return $this->success($res);
}
}
/**
* 删除属性值
* @param $attr_class_id
* @param $condition
* @return \multitype
*/
public function deleteAttributeValue($attr_class_id, $attr_id, $condition)
{
$res = model('goods_attribute_value')->delete($condition);
$this->refreshAttrValueFormat($attr_class_id, $attr_id);
Cache::tag("goods_attribute_value_" . $attr_class_id)->clear();
return $this->success($res);
}
/**
* 获取商品参数值列表
* @param array $condition
* @param string $field
* @param string $order
* @param null $limit
* @return \multitype
*/
public function getAttributeValueList($condition = [], $field = 'attr_value_id,attr_value_name,attr_id,attr_class_id,sort', $order = '', $limit = null)
{
$check_condition = array_column($condition, 2, 0);
$attr_class_id = isset($check_condition[ 'attr_class_id' ]) ? $check_condition[ 'attr_class_id' ] : '';
if ($attr_class_id === '') {
return $this->error('', 'REQUEST_GOODS_ATTRIBUTE_ID');
}
$data = json_encode([ $condition, $field, $order, $limit ]);
$cache = Cache::get("goods_attribute_value_getAttributeValueList_" . $attr_class_id . '_' . $data);
if (!empty($cache)) {
return $this->success($cache);
}
$list = model('goods_attribute_value')->getList($condition, $field, $order, '', '', '', $limit);
Cache::tag("goods_attribute_value_" . $attr_class_id)->set("goods_attribute_value_getAttributeValueList_" . $attr_class_id . '_' . $data, $list);
return $this->success($list);
}
/**
* 获取商品规格值列表,暂时不加缓存
* @param array $condition
* @param string $field
* @param string $order
* @param null $limit
* @return \multitype
*/
public function getSpecValueList($condition = [], $field = 'attr_value_id,attr_value_name,attr_id,attr_class_id,sort', $order = 'attr_value_id desc', $limit = null)
{
$list = model('goods_attribute_value')->getList($condition, $field, $order, '', '', '', $limit);
return $this->success($list);
}
}