975 行
35 KiB
PHP
可执行文件
975 行
35 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace Common\Business;
|
||
|
||
use Common\Model\RetailGoodsClassModel;
|
||
use Common\Model\RetailGoodsModel;
|
||
use Common\Model\RetailMgoodsModel;
|
||
use Common\Model\SSaleMGoodsModel;
|
||
|
||
//[1.9.2]
|
||
|
||
/**
|
||
* 商品分类
|
||
* Class GoodsClassify
|
||
* [
|
||
* 根据行业id查询分类id集合 basisIndustryGetClass
|
||
* 指定id集合查询最低层分类id的集合 basisIdGetLowerId
|
||
* 根据分类id获取最下级列表 basisIdGetList
|
||
* 指定分类集合的名称集合 basisIdGetNameList
|
||
* 指定分类id与类型下面的所有下级分类id集合 lowerId
|
||
* 判断是否存在某分类不存在则添加 existClassAdd
|
||
* 新增指定级别的分类 addAppointClass
|
||
* 获取各级分类集合 getClassArr
|
||
* 获取各分类名称 getName
|
||
* 获取分类id作条件 getGoodsClassId
|
||
* 获取顶级分类列表 getGoodsClassTopLevel
|
||
* 指定分类级别的列表 appointTypeClassList
|
||
* 获取用于优惠券指定分类(用于优惠券详情) appointClass
|
||
* 获取所有分类(用于优惠券指定分类)的字段转换classListTerm
|
||
* 获取所有分类(用于优惠券指定分类)classList
|
||
* 获取所有分类 (用于商品导入) goodsClassTurnList
|
||
* 新增分类与子分类 createGoodsClass
|
||
* ]
|
||
* @package Common\Business
|
||
*/
|
||
class GoodsClassify
|
||
{
|
||
/**
|
||
* 根据行业id查询分类id集合
|
||
* @param $param
|
||
* [
|
||
* industry_id 行业id
|
||
* merchant_id
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function basisIndustryGetClass($param)
|
||
{
|
||
if (empty($param['merchant_id']) || empty($param['industry_id'])) {
|
||
return callBack(statusCode()['error'], '缺少唯一标识');
|
||
}
|
||
$where = [
|
||
'merchantid' => $param['merchant_id'],
|
||
'status' => 0,
|
||
[
|
||
[
|
||
'industry_id' => $param['industry_id'],
|
||
],
|
||
[
|
||
'industry_id'=>0
|
||
],
|
||
'_logic'=>'or'
|
||
]
|
||
];
|
||
$ClassModel = new RetailGoodsClassModel();
|
||
$id_arr = $ClassModel->getFindField($where, 'id', true);
|
||
return callBack(statusCode()['success'], '查询成功', $id_arr);
|
||
}
|
||
|
||
|
||
/**
|
||
* 指定id集合查询最低层分类id的集合
|
||
* @param $class_id_str string
|
||
* @return mixed
|
||
*/
|
||
public function basisIdGetLowerId($class_id_str)
|
||
{
|
||
$arr = [];
|
||
$where = [
|
||
'id' => ['in', $class_id_str]
|
||
];
|
||
$GoodsClassModel = new RetailGoodsClassModel();
|
||
$list = $GoodsClassModel->getSelect($where, $field = 'id,type', 'id desc');
|
||
if (!empty($list)) {
|
||
foreach ($list as $val) {
|
||
$info = $this->lowerId([
|
||
'id' => $val['id'],
|
||
'type' => $val['type']
|
||
]);
|
||
if (!empty($info)) {
|
||
$arr = array_merge($arr, $info);
|
||
}
|
||
}
|
||
$arr = array_unique($arr);
|
||
}
|
||
return $arr;
|
||
}
|
||
|
||
|
||
/**
|
||
* 根据分类id获取下级列表
|
||
* @param $param
|
||
* class_id_str string
|
||
* @return mixed
|
||
*/
|
||
public function basisIdGetList($param)
|
||
{
|
||
$where = [
|
||
'id' => ['in', $param['class_id_str']]
|
||
];
|
||
$ClassModel = new RetailGoodsClassModel();
|
||
$list = $ClassModel->getSelect($where, 'id,type,class_name', 'id desc');
|
||
$class_list = [];
|
||
foreach ($list as $value) {
|
||
switch ($value['type']) {
|
||
case 1:
|
||
$info = $ClassModel->basisOneGetClassListAll($value['id'], "c1.id as c1_id,c1.class_name as c1_class_name,c2.id as c2_id,c2.class_name as c2_class_name,c3.id as c3_id,c3.class_name as c3_class_name");
|
||
foreach ($info as $v1) {
|
||
$arr = [];
|
||
if (!empty($v1['c3_id'])) {
|
||
$arr['class_id'] = $v1['c3_id'];
|
||
$arr['class_name'] = $v1['c3_class_name'];
|
||
} else if (!empty($v1['c2_id'])) {
|
||
$arr['class_id'] = $v1['c2_id'];
|
||
$arr['class_name'] = $v1['c2_class_name'];
|
||
} else {
|
||
$arr['class_id'] = $v1['c1_id'];
|
||
$arr['class_name'] = $v1['c1_class_name'];
|
||
}
|
||
$class_list[] = $arr;
|
||
}
|
||
break;
|
||
case 2:
|
||
$info = $ClassModel->basisTwoGetClassListAll($value['id'], "c2.id as c2_id,c2.class_name as c2_class_name,c3.id as c3_id,c3.class_name as c3_class_name");
|
||
foreach ($info as $v2) {
|
||
$arr = [];
|
||
if (!empty($val['c3_id'])) {
|
||
$arr['class_id'] = $v2['c3_id'];
|
||
$arr['class_name'] = $v2['c3_class_name'];
|
||
} else {
|
||
$arr['class_id'] = $v2['c2_id'];
|
||
$arr['class_name'] = $v2['c2_class_name'];
|
||
}
|
||
$class_list[] = $arr;
|
||
}
|
||
break;
|
||
case 3:
|
||
$class_list[] = [
|
||
'class_id' => $value['id'],
|
||
'class_name' => $value['class_name']
|
||
];
|
||
break;
|
||
}
|
||
}
|
||
$class_list = array_unique($class_list, SORT_REGULAR);
|
||
return callBack(statusCode()['success'], "查询成功", $class_list);
|
||
}
|
||
|
||
|
||
/**
|
||
* 指定分类id的名称集合
|
||
* @param $id_arr 分类id集合
|
||
* @return mixed
|
||
*/
|
||
public function basisIdGetNameList($id_arr)
|
||
{
|
||
if (empty($id_arr)) {
|
||
return [];
|
||
}
|
||
$where = [
|
||
'id' => ['in', $id_arr]
|
||
];
|
||
try {
|
||
$ClassModel = new RetailGoodsClassModel();
|
||
$list = $ClassModel->getFindField($where, 'class_name', true);
|
||
return $list;
|
||
} catch (\Exception $e) {
|
||
return [];
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 指定分类id下面的所有下级分类id集合
|
||
* @param $param
|
||
* [
|
||
* id 分类id
|
||
* type 1 一级 2二级 3三级
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function lowerId($param)
|
||
{
|
||
$arr = [];
|
||
$ClassModel = new RetailGoodsClassModel();
|
||
switch ($param['type']) {
|
||
case 3:
|
||
$arr[] = $param['id'];
|
||
break;
|
||
case 2:
|
||
$info = $ClassModel->basisTwoGetClassListAll($param['id'], "c2.id as c2_id,c3.id as c3_id");
|
||
foreach ($info as $val) {
|
||
if (!empty($val['c3_id'])) {
|
||
$arr[] = $val['c3_id'];
|
||
} else {
|
||
$arr[] = $val['c2_id'];
|
||
}
|
||
}
|
||
break;
|
||
case 1:
|
||
$info = $ClassModel->basisOneGetClassListAll($param['id'], "c1.id as c1_id,c2.id as c2_id,c3.id as c3_id");
|
||
foreach ($info as $val) {
|
||
if (!empty($val['c3_id'])) {
|
||
$arr[] = $val['c3_id'];
|
||
} else if (!empty($val['c2_id'])) {
|
||
$arr[] = $val['c2_id'];
|
||
} else {
|
||
$arr[] = $val['c1_id'];
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
return $arr;
|
||
}
|
||
|
||
|
||
/**
|
||
* 判断是否存在某分类不存在则添加
|
||
* @param $param
|
||
* [
|
||
* class_arr_1 一级分类集合 (含id)
|
||
* class_arr_2 二级分类集合 (含id)
|
||
* class_arr_3 三级分类集合 (含id)
|
||
* class_name_1 一级分类名称
|
||
* class_name_2 二级分类名称
|
||
* class_name_3 三级分类名称
|
||
* merchant_id
|
||
* ]
|
||
* @return array
|
||
*/
|
||
public function existClassAdd($param)
|
||
{
|
||
$class_arr_1 = $param['class_arr_1'];
|
||
$class_arr_2 = $param['class_arr_2'];
|
||
$class_arr_3 = $param['class_arr_3'];
|
||
$class_name_1 = $param['class_name_1'];
|
||
$class_name_2 = $param['class_name_2'];
|
||
$class_name_3 = $param['class_name_3'];
|
||
$goodsClassModel = new RetailGoodsClassModel();
|
||
if (!empty($class_arr_1[$class_name_1])) {
|
||
$class_id_1 = $class_arr_1[$class_name_1]['id']; //一级分类id
|
||
} else {
|
||
$classResult = $this->addAppointClass([
|
||
'type' => 1,
|
||
'merchant_id' => $param['merchant_id'],
|
||
'class_name' => $class_name_1,
|
||
]); //创建分类
|
||
if ($classResult['status'] != 1) {
|
||
return $classResult;
|
||
}
|
||
$class_id_1 = $classResult['data'];
|
||
if (empty($class_name_2)) {
|
||
$child = $goodsClassModel->getFind(array('pid' => $class_id_1, 'status' => 0));
|
||
if (!empty($child)) {
|
||
return callBack(statusCode()['error'], $class_name_2 . "该分类下存在子集分类,不能直接添加商品");
|
||
}
|
||
}
|
||
}
|
||
$goods_class_id = $class_id_1;
|
||
if (!empty($class_name_2)) {
|
||
if (!empty($class_arr_2[$class_id_1 . '_' . $class_name_2])) {
|
||
$class_id_2 = $class_arr_2[$class_id_1 . '_' . $class_name_2]['id']; //二级分类id
|
||
} else {
|
||
$classResult = $this->addAppointClass([
|
||
'type' => 2,
|
||
'merchant_id' => $param['merchant_id'],
|
||
'class_name' => $class_name_2,
|
||
'pid' => $class_id_1
|
||
]); //创建分类
|
||
if ($classResult['status'] != 1) {
|
||
return $classResult;
|
||
}
|
||
$class_id_2 = $classResult['data'];
|
||
if (empty($class_name_3)) {
|
||
$child = $goodsClassModel->getFind(array('pid' => $class_id_2, 'status' => 0));
|
||
if (!empty($child)) {
|
||
return callBack(statusCode()['error'], $class_name_2 . "该分类下存在子集分类,不能直接添加商品");
|
||
}
|
||
}
|
||
}
|
||
$goods_class_id = $class_id_2;
|
||
}
|
||
if (!empty($class_name_3)) {
|
||
if (!empty($class_arr_3[$class_id_2 . '_' . $class_name_3])) {
|
||
$class_id_3 = $class_arr_3[$class_id_2 . '_' . $class_name_3]['id']; //三级分类id
|
||
} else {
|
||
$classResult = $this->addAppointClass([
|
||
'type' => 3,
|
||
'merchant_id' => $param['merchant_id'],
|
||
'class_name' => $class_name_3,
|
||
'pid' => $class_id_2
|
||
]); //创建分类
|
||
if ($classResult['status'] != 1) {
|
||
return $classResult;
|
||
}
|
||
$class_id_3 = $classResult['data'];
|
||
}
|
||
$goods_class_id = $class_id_3;
|
||
}
|
||
return callBack(statusCode()['success'], "操作成功", $goods_class_id);
|
||
}
|
||
|
||
/**
|
||
* 新增指定级别的分类
|
||
* @param $param
|
||
* [
|
||
* type 1 一级 2 二级 3三级
|
||
* class_name
|
||
* merchant_id
|
||
* pid 上级分类
|
||
* ]
|
||
* @return array
|
||
*/
|
||
public function addAppointClass($param)
|
||
{
|
||
if (!empty($param['pid'])) {
|
||
$storeGoodsModel = new RetailGoodsModel();
|
||
$merchantGoodsModel = new RetailMgoodsModel();
|
||
$goods = $storeGoodsModel->getFind(array('goods_class_id' => $param['pid'], 'status' => array('in', '0,1')));
|
||
if (!empty($goods)) {
|
||
return callBack(statusCode()['error'], '该一级分类存在商品,不能添加二级分类');
|
||
}
|
||
$goods = $merchantGoodsModel->getFind(array('goods_class_id' => $param['pid'], 'status' => array('in', '0,1')));
|
||
if (!empty($goods)) {
|
||
return callBack(statusCode()['error'], '该一级分类存在商品,不能添加二级分类');
|
||
}
|
||
}
|
||
$ClassModel = new RetailGoodsClassModel();
|
||
$id = $ClassModel->getOrderFindField(['merchantid' => $param['merchant_id'],
|
||
'type' => $param['type'], 'status' => 0, 'class_name' => trim($param['class_name'], ' '), 'pid' => $param['pid'] ? $param['pid'] : 0],
|
||
'id');
|
||
if (empty($id)) {
|
||
$data = [
|
||
'merchantid' => $param['merchant_id'],
|
||
'status' => 0,
|
||
'addtime' => $_SERVER['REQUEST_TIME'],
|
||
'class_name' => $param['class_name'],
|
||
'pid' => $param['pid'] ? $param['pid'] : 0,
|
||
'type' => $param['type'] ? $param['type'] : 1
|
||
];
|
||
$code = $ClassModel->getOrderFindField(array('merchantid' => $param['merchant_id'], 'type' => $data['type'], 'pid' => $param['pid'] ? $param['pid'] : 0), 'code', 'code desc');
|
||
if ($code) {
|
||
if (is_numeric($code)) {
|
||
$data['code'] = $code + 1;
|
||
} else {
|
||
$data['code'] = $code . '1';
|
||
}
|
||
} else {
|
||
$data['code'] = 1;
|
||
}
|
||
$id = $ClassModel->addOrder($data);
|
||
}
|
||
return callBack(statusCode()['success'], '获取成功', $id);
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取各级分类集合
|
||
* @param $param
|
||
* [
|
||
* merchant_id
|
||
* ]
|
||
* @return array
|
||
*/
|
||
public function getClassArr($param)
|
||
{
|
||
try {
|
||
$ClassModel = new RetailGoodsClassModel();
|
||
$class_arr_1 = $ClassModel->getSelect(['merchantid' => $param['merchant_id'], 'status' => 0, 'type' => 1], "id,class_name", "code asc");
|
||
$class_arr_2 = $ClassModel->getSelect(['merchantid' => $param['merchant_id'], 'status' => 0, 'type' => 2], "id,class_name,pid", "code asc");
|
||
$class_arr_3 = $ClassModel->getSelect(['merchantid' => $param['merchant_id'], 'status' => 0, 'type' => 3], "id,class_name,pid", "code asc");
|
||
return ['class_arr_1' => $class_arr_1, 'class_arr_2' => $class_arr_2, 'class_arr_3' => $class_arr_3];
|
||
} catch (\Exception $e) {
|
||
$class_arr_1 = [];
|
||
$class_arr_2 = [];
|
||
$class_arr_3 = [];
|
||
return ['class_arr_1' => $class_arr_1, 'class_arr_2' => $class_arr_2, 'class_arr_3' => $class_arr_3];
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取各分类名称
|
||
* @param $id 分类id
|
||
* @param $arr 分类集合
|
||
* @return string
|
||
*/
|
||
public function getName($id, $arr = [])
|
||
{
|
||
$ClassModel = new RetailGoodsClassModel();
|
||
$info = $ClassModel->field('class_name,pid,type')->where(['id' => $id])->cache(true, 300)->find();
|
||
$arr["class_name_" . $info['type']] = $info['class_name'];
|
||
if (!empty($info['pid'])) {
|
||
return $this->getName($info['pid'], $arr);
|
||
}
|
||
return $arr;
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取分类id作条件
|
||
* @param $parameter [person1=>一级分类,person2=>二级分类,person3=>三级分类]
|
||
* @param $where 条件数组 []
|
||
* @param $key 条件字段名
|
||
* @return $where
|
||
*/
|
||
public static function getGoodsClassId($parameter, $where, $key)
|
||
{
|
||
if (empty($parameter['person1']) && empty($parameter['person2']) && empty($parameter['person3']) || empty($key)) {
|
||
return $where;
|
||
}
|
||
$person1 = $parameter['person1']; //一级分类id
|
||
$person2 = $parameter['person2']; //二级分类id
|
||
$person3 = $parameter['person3']; //三级分类id
|
||
$goodsClassModel = new RetailGoodsClassModel();
|
||
$flag = 0;
|
||
if (!empty($person3)) {
|
||
$where[$key] = $person3;
|
||
} else if (!empty($person2)) {
|
||
$class = $goodsClassModel->basisTwoGetClassId($person2); //根据二级分类id获取三级分类ID集合
|
||
$flag = 1;
|
||
} else if (!empty($person1)) {
|
||
$class = $goodsClassModel->basisOneGetClassId($person1); //根据一级分类id获取三级分类ID集合
|
||
$flag = 1;
|
||
}
|
||
if (!empty($class)) {
|
||
$arr = array();
|
||
foreach ($class as &$val) {
|
||
if (!in_array($val['id'], $arr)) {
|
||
$arr[] = $val['id'];
|
||
}
|
||
if (!empty($val['c3_id'])) {
|
||
if (!in_array($val['c3_id'], $arr)) {
|
||
$arr[] = $val['c3_id'];
|
||
}
|
||
}
|
||
}
|
||
$str = implode(',', $arr);
|
||
$where[$key] = array('in', $str . ',' . ($person2 ? $person2 : $person1));
|
||
} else if ($flag == 1) {
|
||
$where[$key] = $person2 ? $person2 : $person1;
|
||
}
|
||
return $where;
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取顶级分类列表
|
||
* @param $merchant_id
|
||
* @return array
|
||
*/
|
||
public function getGoodsClassTopLevel($merchant_id)
|
||
{
|
||
try {
|
||
$classModel = new RetailGoodsClassModel();
|
||
$list = $classModel->getSelect(['merchantid' => $merchant_id, 'status' => 0, 'type' => 1], "*", "code asc");
|
||
return ['status' => 1, 'message' => '查询成功', 'data' => ['list' => $list]];
|
||
} catch (\Exception $e) {
|
||
return ['status' => 1, 'message' => '查询成功', 'data' => ['list' => []]];
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 指定分类级别的列表
|
||
* @param $param
|
||
* [
|
||
* merchant_id
|
||
* industry_id 行业id
|
||
* id 上级分类的id
|
||
* type 1:一级分类; 2:二级分类 ; 3:三级分类
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function appointTypeClassList($param)
|
||
{
|
||
$industry_id = $param['industry_id'];
|
||
$ClassModel = new RetailGoodsClassModel();
|
||
switch ($param['type']) {
|
||
case 1:
|
||
//一级分类
|
||
$where = [
|
||
'merchantid' => $param['merchant_id'],
|
||
'status' => 0,
|
||
'type' => 1
|
||
];
|
||
if(!empty($industry_id)){
|
||
$where[] = [
|
||
[
|
||
'industry_id'=>0
|
||
],
|
||
[
|
||
'industry_id'=>$industry_id
|
||
],
|
||
'_logic'=>'OR'
|
||
];
|
||
}
|
||
$list = $ClassModel->getSelect($where, "id,class_name", "code asc");
|
||
break;
|
||
case 2:
|
||
//二级分类
|
||
$where = [
|
||
'c1.id' => $param['id'],
|
||
];
|
||
if(!empty($industry_id)){
|
||
$where[] = [
|
||
[
|
||
'c2.industry_id'=>0
|
||
],
|
||
[
|
||
'c2.industry_id'=>$industry_id
|
||
],
|
||
'_logic'=>'OR'
|
||
];
|
||
}
|
||
$list = $ClassModel->basisOneGetClassList($where, "c2.id,c2.class_name");
|
||
break;
|
||
case 3:
|
||
//三级分类
|
||
$where['c2.id'] = $param['id'];
|
||
if(!empty($industry_id)){
|
||
$where[] = [
|
||
[
|
||
'c3.industry_id'=>0
|
||
],
|
||
[
|
||
'c3.industry_id'=>$industry_id
|
||
],
|
||
'_logic'=>'OR'
|
||
];
|
||
}
|
||
$list = $ClassModel->basisTwoGetClassList($where, "c3.id,c3.class_name");
|
||
break;
|
||
default:
|
||
return callBack(statusCode()['error'], "分类级别错误");
|
||
break;
|
||
}
|
||
return callBack(statusCode()['success'], "查询成功", $list);
|
||
}
|
||
|
||
|
||
/**
|
||
* 指定分类获取分类信息(用于优惠券指定分类详情)
|
||
* @param $param
|
||
* [
|
||
* merchant_id
|
||
* store_id
|
||
* class_id_str string
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function appointClass($param)
|
||
{
|
||
$fields = [
|
||
'c1.id',
|
||
'c2.id as c2_id',
|
||
'c3.id as c3_id',
|
||
'c1.type',
|
||
'c1.class_name as c1_class_name',
|
||
'c2.class_name as c2_class_name',
|
||
'c3.class_name as c3_class_name'
|
||
];
|
||
$class_id_arr = explode(',', $param['class_id_str']);
|
||
if (empty($class_id_arr)) {
|
||
return [];
|
||
}
|
||
$where['c1.id'] = ['in', $class_id_arr];
|
||
try {
|
||
$goodsClassModel = new RetailGoodsClassModel();
|
||
$list = $goodsClassModel->ClassListAll($where, $fields, 'c1.id desc');
|
||
if (!empty($list)) {
|
||
$list = $this->classListTurn([
|
||
'list' => $list,
|
||
'merchant_id' => $param['merchant_id'],
|
||
'store_id' => $param['store_id']
|
||
]);
|
||
}
|
||
return $list;
|
||
} catch (\Exception $e) {
|
||
return [];
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取所有分类(用于优惠券指定分类)
|
||
* @param $param
|
||
* [
|
||
* operator_type 1后台 2收银端 3助手端
|
||
* user_type 3商户 4门店
|
||
* merchant_id
|
||
* store_id
|
||
* class_name 分类名称
|
||
* exists_class_id_arr 已经选中的分类id集合
|
||
* page
|
||
* limit
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function classList($param)
|
||
{
|
||
$verifyClass = new VerifyParam();
|
||
$verifyResult = $verifyClass->identityVerify($param);
|
||
if ($verifyResult['status'] != 1) {
|
||
return $verifyResult;
|
||
}
|
||
$fields = [
|
||
'c1.id',
|
||
'c2.id as c2_id',
|
||
'c3.id as c3_id',
|
||
'c1.type',
|
||
'c1.class_name as c1_class_name',
|
||
'c2.class_name as c2_class_name',
|
||
'c3.class_name as c3_class_name'
|
||
];
|
||
$where = [
|
||
'c1.merchantid' => $param['merchant_id'],
|
||
'c1.status' => 0
|
||
];
|
||
if (!empty($param['exists_class_id_arr'])) {
|
||
$where['c1.id'] = ['not in', $param['exists_class_id_arr']];
|
||
}
|
||
if (!empty($param['class_name'])) {
|
||
$where['c1.class_name'] = ['like', '%' . $param['class_name'] . '%'];
|
||
}
|
||
$goodsClassModel = new RetailGoodsClassModel();
|
||
$list = $goodsClassModel->ClassListAll($where, $fields, 'c1.id desc', $param['page'] . ',' . $param['limit']);
|
||
if (!empty($list)) {
|
||
$count = $goodsClassModel->ClassListCount($where);
|
||
$list = $this->classListTurn([
|
||
'list' => $list,
|
||
'merchant_id' => $param['merchant_id'],
|
||
'store_id' => $param['store_id']
|
||
]);
|
||
}
|
||
return callBack(statusCode()['success'], "查询成功", [
|
||
'list' => $list,
|
||
'count' => $count ? $count : 0
|
||
]);
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取所有分类(用于优惠券指定分类)的字段转换
|
||
* @param $param
|
||
* [
|
||
* list 列表
|
||
* merchant_id
|
||
* store_id
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function classListTurn($param)
|
||
{
|
||
$list = $param['list'];
|
||
$GoodsModel = new SSaleMGoodsModel();
|
||
$map = [
|
||
'merchant_id' => $param['merchant_id'],
|
||
'store_id' => $param['store_id'],
|
||
'status' => ['neq', 2]
|
||
];
|
||
foreach ($list as $key => &$val) {
|
||
$val['index'] = $key + 1;
|
||
switch ($val['type']) {
|
||
case 1:
|
||
$val['type_name'] = '一级分类';
|
||
$class_name_1 = $val['c1_class_name'];
|
||
$val['id_list'] = [$val['id']];
|
||
break;
|
||
case 2:
|
||
$val['type_name'] = '二级分类';
|
||
$class_name_1 = $val['c2_class_name'];
|
||
$class_name_2 = $val['c1_class_name'];
|
||
$val['id_list'] = [$val['c2_id'], $val['id']];
|
||
break;
|
||
case 3:
|
||
$val['type_name'] = '三级分类';
|
||
$class_name_3 = $val['c1_class_name'];
|
||
$class_name_2 = $val['c2_class_name'];
|
||
$class_name_1 = $val['c3_class_name'];
|
||
$val['id_list'] = [$val['c3_id'], $val['c2_id'], $val['id']];
|
||
break;
|
||
}
|
||
$class_name = '';
|
||
$class_name .= $class_name_1;
|
||
if (!empty($class_name_2)) {
|
||
$class_name .= '/' . $class_name_2;
|
||
}
|
||
if (!empty($class_name_3)) {
|
||
$class_name .= '/' . $class_name_3;
|
||
}
|
||
$val['class_name'] = $class_name;
|
||
unset($class_name_3);
|
||
unset($class_name_2);
|
||
unset($class_name_1);
|
||
$class_id_arr = $this->lowerId([
|
||
'id' => $val['id'],
|
||
'type' => $val['type']
|
||
]);
|
||
if (!empty($class_id_arr)) {
|
||
$map['goods_class_id'] = ['in', $class_id_arr];
|
||
$num = $GoodsModel->getCount($map);
|
||
}
|
||
$val['goods_num'] = $num ? $num : 0;
|
||
unset($class_id_arr);
|
||
}
|
||
return $list;
|
||
}
|
||
|
||
|
||
/**
|
||
*获取所有分类 (用于商品导入)键名转化格式 一级分类/二级分类/三级分类
|
||
* @param $parameter
|
||
* [
|
||
* merchant_id
|
||
* ]
|
||
* @return array
|
||
*/
|
||
public function goodsClassTurnList($parameter)
|
||
{
|
||
$merchant_id = $parameter['merchant_id'];
|
||
if (empty($merchant_id)) {
|
||
return [];
|
||
}
|
||
try {
|
||
$goodsClassModel = new RetailGoodsClassModel();
|
||
$class_arr = $goodsClassModel->getClassList($merchant_id);
|
||
} catch (\Exception $e) {
|
||
return [];
|
||
}
|
||
$tempClass = array(); //转化后的数组
|
||
if ($class_arr) {
|
||
foreach ($class_arr as $v_class) {
|
||
$name = $v_class['c1_class_name'];
|
||
$class_id = $v_class['c1_id'];
|
||
if ($v_class['c2_id']) {
|
||
$name .= '/' . $v_class['c2_class_name'];
|
||
$class_id = $v_class['c2_id'];
|
||
if ($v_class['c3_id']) {
|
||
$name .= '/' . $v_class['c3_class_name'];
|
||
$class_id = $v_class['c3_id'];
|
||
}
|
||
}
|
||
$v_class['class_id'] = $class_id;
|
||
$tempClass[$name] = $v_class;
|
||
}
|
||
}
|
||
return $tempClass;
|
||
}
|
||
|
||
|
||
/**
|
||
* 新增分类与子分类
|
||
* @param $parameter
|
||
* [
|
||
* name 分类名称
|
||
* merchant_id
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function createGoodsClass($parameter)
|
||
{
|
||
try {
|
||
$name = $parameter['name'];
|
||
$merchant_id = $parameter['merchant_id'];
|
||
$goodsClassModel = new RetailGoodsClassModel();
|
||
$storeGoodsModel = new RetailGoodsModel();
|
||
$merchantGoodsModel = new RetailMgoodsModel();
|
||
$arr = explode('/', $name);
|
||
$map['class_name'] = $arr[0];
|
||
$map['merchantid'] = $merchant_id;
|
||
$map['type'] = 1;
|
||
$map['status'] = 0;
|
||
$class = $goodsClassModel->getFind($map);
|
||
$flag = false;
|
||
if (!empty($class)) {
|
||
$class1_id = $class['id'];
|
||
} else {
|
||
$code = $goodsClassModel->getOrderFindField(array('merchantid' => $merchant_id, 'type' => 1), 'code', 'code desc');
|
||
if ($code) {
|
||
if (is_numeric($code)) {
|
||
$map['code'] = $code + 1;
|
||
} else {
|
||
$map['code'] = $code . '1';
|
||
}
|
||
} else {
|
||
$map['code'] = 1;
|
||
}
|
||
$map['addtime'] = time();
|
||
$add = $goodsClassModel->addOrder($map);
|
||
if ($add) {
|
||
$class1_id = $add;
|
||
$flag = true;
|
||
} else {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '服务器出错,添加分类失败,请重试';
|
||
return $res;
|
||
}
|
||
}
|
||
unset($map['addtime']);
|
||
unset($map['code']);
|
||
$flag1 = false;
|
||
if ($arr[1]) {
|
||
$map['type'] = 2;
|
||
$map['class_name'] = $arr[1];
|
||
$map['pid'] = $class1_id;
|
||
$class2 = $goodsClassModel->getFind($map);
|
||
if (!empty($class2)) {
|
||
$class2_id = $class2['id'];
|
||
} else {
|
||
if (!$flag) {
|
||
$goods = $storeGoodsModel->getFind(array('goods_class_id' => $class1_id, 'status' => array('in', '0,1')));
|
||
if (!empty($goods)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '该一级分类下存在商品,不能添加二级分类';
|
||
return $res;
|
||
}
|
||
$goods = $merchantGoodsModel->getFind(array('goods_class_id' => $class1_id, 'status' => array('in', '0,1')));
|
||
if (!empty($goods)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '该一级分类下存在商品,不能添加二级分类';
|
||
return $res;
|
||
}
|
||
}
|
||
$code = $goodsClassModel->getOrderFindField(array('merchantid' => $merchant_id, 'pid' => $class1_id, 'type' => 2), 'code', 'code desc');
|
||
if ($code) {
|
||
if (is_numeric($code)) {
|
||
$map['code'] = $code + 1;
|
||
} else {
|
||
$map['code'] = $code . '1';
|
||
}
|
||
} else {
|
||
$map['code'] = 1;
|
||
}
|
||
$map['addtime'] = time();
|
||
$add = $goodsClassModel->addOrder($map);
|
||
if ($add) {
|
||
$class2_id = $add;
|
||
$flag1 = true;
|
||
} else {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '服务器出错,添加分类失败,请重试';
|
||
return $res;
|
||
}
|
||
}
|
||
unset($map['addtime']);
|
||
unset($map['code']);
|
||
if ($arr[2]) {
|
||
$map['type'] = 3;
|
||
$map['class_name'] = $arr[2];
|
||
$map['pid'] = $class2_id;
|
||
$class3 = $goodsClassModel->getFind($map);
|
||
if (!empty($class3)) {
|
||
$res['status'] = 1;
|
||
$res['class_id'] = $class3['id'];
|
||
return $res;
|
||
} else {
|
||
if (!$flag1) {
|
||
$goods = $storeGoodsModel->getFind(array('goods_class_id' => $class2_id, 'status' => array('in', '0,1')));
|
||
if (!empty($goods)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '该二级分类下存在商品,不能添加三级分类';
|
||
return $res;
|
||
}
|
||
$goods = $merchantGoodsModel->getFind(array('goods_class_id' => $class2_id, 'status' => array('in', '0,1')));
|
||
if (!empty($goods)) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '该二级分类下存在商品,不能添加三级分类';
|
||
return $res;
|
||
}
|
||
}
|
||
$code = $goodsClassModel->getOrderFindField(array('merchantid' => $merchant_id, 'pid' => $class2_id, 'type' => 3), 'code', 'code desc');
|
||
if ($code) {
|
||
if (is_numeric($code)) {
|
||
$map['code'] = $code + 1;
|
||
} else {
|
||
$map['code'] = $code . '1';
|
||
}
|
||
} else {
|
||
$map['code'] = 1;
|
||
}
|
||
$map['addtime'] = time();
|
||
$add = $goodsClassModel->addOrder($map);
|
||
if ($add) {
|
||
$res['status'] = 1;
|
||
$res['class_id'] = $add;
|
||
return $res;
|
||
} else {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '服务器出错,添加分类失败,请重试';
|
||
return $res;
|
||
}
|
||
}
|
||
} else {
|
||
$res['status'] = 1;
|
||
$res['class_id'] = $class2_id;
|
||
return $res;
|
||
}
|
||
} else {
|
||
$res['status'] = 1;
|
||
$res['class_id'] = $class1_id;
|
||
}
|
||
return $res;
|
||
} catch (\Exception $e) {
|
||
$res['status'] = 0;
|
||
$res['msg'] = '服务器出错,添加分类失败,请重试';
|
||
return $res;
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取商品分类-按数组存放顺序返回一、二、三级分类ID列表
|
||
* @param $id 分类ID
|
||
* @param array $class_list 已记录的分类ID列表
|
||
*/
|
||
public function getAppointGoodsClassList($id, &$class_list = [])
|
||
{
|
||
$ClassModel = new RetailGoodsClassModel();
|
||
$class = $ClassModel->getFind(['id' => $id], 'id,pid');
|
||
//存在分类则继续获取
|
||
if ($class) {
|
||
array_unshift($class_list, $class['id']);
|
||
if (!empty($class['pid'])) {
|
||
//非一级分类
|
||
$this->getAppointGoodsClassList($class['pid'], $class_list);
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 根据上级ID获取商品分类列表 并返回该分类是否含有下级
|
||
* @param $param
|
||
* @return mixed
|
||
*/
|
||
public function getAbsolutelyGoodsClass($param)
|
||
{
|
||
$ClassModel = new RetailGoodsClassModel();
|
||
$map = array(
|
||
'merchantid' => $param['merchant_id'],
|
||
'status' => 0,
|
||
);
|
||
if (!empty($param['pid'])) {
|
||
$map['pid'] = $param['pid'];
|
||
} else {
|
||
$map['type'] = 1;
|
||
}
|
||
$classList = $ClassModel->getSelect($map, 'id,pid,class_name,type');//获取当前的分类
|
||
foreach ($classList as &$val) {
|
||
$val['leaf'] = true;
|
||
if ($val['type'] != 3) {
|
||
$cMap = array(
|
||
'pid' => $val['id'],
|
||
'merchantid' => $param['merchant_id'],
|
||
'status' => 0,
|
||
);
|
||
$children = $ClassModel->getFind($cMap);
|
||
if (!empty($children)) {
|
||
$val['leaf'] = false;
|
||
}
|
||
}
|
||
}
|
||
return $classList ? $classList : array();
|
||
}
|
||
} |