528 行
20 KiB
PHP
可执行文件
528 行
20 KiB
PHP
可执行文件
<?php
|
|
|
|
namespace Common\Business;
|
|
|
|
use Api\Controller\InventoryController;
|
|
use Common\Model\ImageGalleryModel;
|
|
use Common\Model\RetailSkuAttrModel;
|
|
use Common\Model\RetailSkuGoodsModel;
|
|
use Common\Model\RetailSkuListModel;
|
|
use Common\Model\RetailStoreModel;
|
|
use Common\Model\SaleMGoodsModel;
|
|
use Common\Model\SkuMGoodsModel;
|
|
|
|
//[1.8.50]
|
|
|
|
/**
|
|
* 商品规格类
|
|
* Class SkuAttribute
|
|
* [
|
|
* 门店商品-根据规格sku_id_list获取该规格下面的所有规格名称集合 basisSkuIdListSkuNameArr
|
|
* 根据规格id获取该规格下面的所有规格名称 basisSkuIdGetSkuName
|
|
* 获取规格值名称 getSkuListName
|
|
* 根据规格值列表ID,处理规格属性列表 handleSkuList
|
|
* 获取门店指定商品的规格列表、规格属性信息 getStoreGoodsSkuInfo
|
|
* 商品规格属性的添加 skuAttributeAdd
|
|
* 商品规格名称添加 skuNameAdd
|
|
* 新增/编辑商品处获取规格供选择 getSkuAttr
|
|
* ]
|
|
* @package Common\Business
|
|
*/
|
|
class SkuAttribute
|
|
{
|
|
/**
|
|
* 根据商品id获取规格属性名称
|
|
* @param $param
|
|
* [
|
|
* user_type 3商户 4门店
|
|
* goods_id
|
|
* ]
|
|
* @return mixed
|
|
*/
|
|
public function basisGoodsIdGetName($param)
|
|
{
|
|
$where = [
|
|
'state' => 0,
|
|
];
|
|
switch ($param['user_type']) {
|
|
case 3:
|
|
//商户
|
|
$where['mgoods_id'] = $param['goods_id'];
|
|
$SkuModel = new SkuMGoodsModel();
|
|
break;
|
|
case 4:
|
|
//门店
|
|
$where['goods_id'] = $param['goods_id'];
|
|
$SkuModel = new RetailSkuGoodsModel();
|
|
break;
|
|
}
|
|
$list = $SkuModel->getFindField($where, 'sku_id_list');
|
|
$list = explode(',', $list);
|
|
$name = [];
|
|
$SkuAttrModel = new RetailSkuAttrModel();
|
|
foreach ($list as $key => &$val) {
|
|
$name[$key] = $SkuAttrModel->getAttrName($val);
|
|
}
|
|
return $name;
|
|
}
|
|
|
|
|
|
/**
|
|
* 门店商品-根据规格id获取该规格下面的所有规格名称
|
|
* @param $user_type 3商户 4门店
|
|
* @param $sku_id
|
|
* @return mixed
|
|
*/
|
|
public function basisSkuIdGetSkuName($user_type, $sku_id)
|
|
{
|
|
try {
|
|
switch ($user_type) {
|
|
case 3:
|
|
$SkuGoodsModel = new SkuMGoodsModel();
|
|
break;
|
|
case 4:
|
|
$SkuGoodsModel = new RetailSkuGoodsModel();
|
|
break;
|
|
}
|
|
$SkuListModel = new RetailSkuListModel();
|
|
$list = $SkuGoodsModel->getFindField(['id' => $sku_id], "sku_id_list");
|
|
$sku_name = $SkuListModel->getFindField(['id' => ['in', $list]], "name", true);
|
|
$sku_name = implode(',', $sku_name);
|
|
return $sku_name;
|
|
} catch (\Exception $e) {
|
|
return '';
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 门店商品-根据规格sku_id_list获取该规格下面的所有规格名称集合
|
|
* @param $sku_id_list
|
|
* @return mixed
|
|
*/
|
|
public function basisSkuIdListSkuNameArr($sku_id_list)
|
|
{
|
|
try {
|
|
$SkuListModel = new RetailSkuListModel();
|
|
$sku_name = $SkuListModel->getFindField(['id' => ['in', $sku_id_list]], "name", true);
|
|
return $sku_name;
|
|
} catch (\Exception $e) {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 商品规格属性的添加
|
|
* @param $parameter
|
|
* [
|
|
* merchant_id
|
|
* store_id
|
|
* name 规格属性名称
|
|
* ]
|
|
* @return array
|
|
*[
|
|
* status
|
|
* message
|
|
* data=>[
|
|
* skuAttributeId 规格属性id
|
|
* ]
|
|
* ]
|
|
*/
|
|
public function skuAttributeAdd($parameter)
|
|
{
|
|
$merchant_id = $parameter['merchant_id'];
|
|
$store_id = $parameter['store_id'] ? $parameter['store_id'] : 0;
|
|
$name = $parameter['name'];
|
|
$skuAttrModel = new RetailSkuAttrModel();
|
|
$skuAttributeId = $skuAttrModel->getFindField([
|
|
'merchantid' => $merchant_id,
|
|
'state' => 0,
|
|
'status' => 1,
|
|
'name' => $name
|
|
], 'id'); //规格属性信息
|
|
if (empty($skuAttributeId)) {
|
|
$content = [
|
|
'merchantid' => $merchant_id,
|
|
'storeid' => $store_id,
|
|
'name' => $name,
|
|
'addtime' => time()
|
|
];
|
|
$skuAttributeId = $skuAttrModel->addOrder($content);
|
|
if (empty($skuAttributeId)) {
|
|
return ['status' => 0, 'message' => '添加失败'];
|
|
}
|
|
}
|
|
return ['status' => 1, 'message' => '查询成功', 'data' => ['skuAttributeId' => $skuAttributeId]];
|
|
}
|
|
|
|
|
|
/**
|
|
* 商品规格名称添加
|
|
* @param $parameter
|
|
* [
|
|
* merchant_id
|
|
* store_id
|
|
* name 规格名称
|
|
* attributeId 规格属性Id
|
|
* ]
|
|
* @return array
|
|
* [
|
|
* status
|
|
* msg
|
|
* data=>[
|
|
* skuNameId 规格名称ID
|
|
* ]
|
|
* ]
|
|
*/
|
|
public function skuNameAdd($parameter)
|
|
{
|
|
$merchant_id = $parameter['merchant_id'];
|
|
$store_id = $parameter['store_id'];
|
|
$name = $parameter['name'];
|
|
$attributeId = $parameter['attributeId'];
|
|
if (empty($merchant_id) || empty($store_id) || empty($name) || empty($attributeId)) {
|
|
return ['status' => 0, 'message' => '参数缺失'];
|
|
}
|
|
$skuListModel = new RetailSkuListModel();
|
|
$skuNameId = $skuListModel->getFindField([
|
|
'merchant_id' => $merchant_id,
|
|
'state' => 0,
|
|
'name' => $name,
|
|
'attr_id' => $attributeId
|
|
], 'id');
|
|
if (empty($skuNameId)) {
|
|
$content = [
|
|
'attr_id' => $attributeId,
|
|
'merchant_id' => $merchant_id,
|
|
'store_id' => $store_id,
|
|
'name' => $name,
|
|
'addt_ime' => time(),
|
|
];
|
|
$skuNameId = $skuListModel->addOrder($content);
|
|
if (empty($skuNameId)) {
|
|
return ['status' => 0, 'message' => '新规格名称添加失败'];
|
|
}
|
|
}
|
|
return ['status' => 1, 'message' => '添加成功', 'data' => ['skuNameId' => $skuNameId]];
|
|
}
|
|
|
|
/**
|
|
* 获取门店指定商品的规格列表、规格属性信息
|
|
* @param $param
|
|
* @return mixed
|
|
* @throws \think\db\exception\DataNotFoundException
|
|
* @throws \think\db\exception\DbException
|
|
* @throws \think\db\exception\ModelNotFoundException
|
|
* @throws \think\exception\DbException
|
|
*/
|
|
public function getStoreGoodsSkuInfo($param)
|
|
{
|
|
$user_type = $param['user_type']; //3商户 4门店
|
|
$platform_type = $param['platform_type']; //商户平台类型 1默认系统 2微礼平台
|
|
$merchant_id = $param['merchant_id'];
|
|
$store_id = $param['store_id'];
|
|
$goods_id = $param['goods_id'];
|
|
if (empty($merchant_id) || empty($store_id) || empty($goods_id)) {
|
|
return callBack(statusCode()['error'], '缺少必要参数,详情请见data', array(
|
|
'store_id' => $store_id,
|
|
'merchant_id' => $merchant_id,
|
|
'goods_id' => $goods_id,
|
|
));
|
|
}
|
|
$skuAttr = array();
|
|
$skuCodeList = array(0 => 0);//记录规格条码,用于返回给前台进行自动编号
|
|
$skuNumberList = array(0 => 0);//记录规格货号,用于返回给前台进行自动编号
|
|
$SkuGoodsModel = new RetailSkuGoodsModel();
|
|
$map = array(
|
|
'goods_id' => $goods_id,
|
|
'store_id' => $store_id,
|
|
'state' => 0
|
|
);
|
|
$skuList = $SkuGoodsModel->getSelect($map);
|
|
if (!empty($skuList)) {
|
|
$sku_id_list = [];//临时存储规格值ID、为展示默认选中值使用
|
|
$sku_name = [];
|
|
$ImageGalleryModel = new ImageGalleryModel();
|
|
$InventoryApi = new InventoryController();
|
|
|
|
//处理商品规格列表
|
|
if ($user_type == 4 && $platform_type == 2) {
|
|
$code_arr = [];
|
|
}
|
|
foreach ($skuList as &$value) {
|
|
//临时记录旧ID,给后面赋值使用
|
|
$sku_id = $value['id'];
|
|
|
|
$sku_id_list = array_merge($sku_id_list, explode(',', $value['sku_id_list']));
|
|
|
|
//临时设置旧ID,给前端做数据处理
|
|
$value['old_id'] = $value['id'];
|
|
|
|
//处理ID为数组、获取规格值名称
|
|
$id = explode(',', $value['sku_id_list']);
|
|
foreach ($id as &$v) {
|
|
$value['name'][] = $this->getSkuListName(intval($v), $sku_name);
|
|
}
|
|
|
|
//处理自动递增的条码
|
|
if (!empty($value['sku_code'])) {
|
|
$tempArr = explode('-', $value['sku_code']);
|
|
if (count($tempArr) > 1) {
|
|
if (is_numeric($tempArr[count($tempArr) - 1])) {
|
|
$skuCodeList[] = (int)$tempArr[count($tempArr) - 1];
|
|
}
|
|
}
|
|
}
|
|
|
|
//处理自动递增的货号
|
|
if (!empty($value['sku_goods_number'])) {
|
|
$tempArr = explode('-', $value['sku_goods_number']);
|
|
if (count($tempArr) > 1) {
|
|
if (is_numeric($tempArr[count($tempArr) - 1])) {
|
|
$skuNumberList[] = (int)$tempArr[count($tempArr) - 1];
|
|
}
|
|
}
|
|
}
|
|
|
|
$value['more_num'] = round($value['more_num'], 3);
|
|
$value['less_num'] = round($value['less_num'], 3);
|
|
$value['purchase_price'] = floatval($value['purchase_price']) ? floatval($value['purchase_price']) : '';
|
|
$value['online_price'] = floatval($value['online_price']) ? floatval($value['online_price']) : '';
|
|
$value['retail_price'] = floatval($value['retail_price']) ? floatval($value['retail_price']) : '';
|
|
$value['shop_mem_price'] = floatval($value['shop_mem_price']) ? floatval($value['shop_mem_price']) : '';
|
|
$value['store_mem_price'] = floatval($value['store_mem_price']) ? floatval($value['store_mem_price']) : '';
|
|
$value['plus_price'] = floatval($value['plus_price']) ? floatval($value['plus_price']) : '';
|
|
$value['guide_royalty_price'] = floatval($value['guide_royalty_price']) ? floatval($value['guide_royalty_price']) : '';
|
|
$value['guide_royalty_online_price'] = floatval($value['guide_royalty_online_price']) ? floatval($value['guide_royalty_online_price']) : '';
|
|
$value['id'] = $id;
|
|
$value['sku_code'] = $value['sku_code'] ? $value['sku_code'] : '';
|
|
$value['weight_value'] = $value['weight_value'] ? round($value['weight_value'], 3) : '';
|
|
|
|
//获取规格图片
|
|
$value['goods_img'] = '';
|
|
if (!empty($value['goods_img_id'])) {
|
|
$value['goods_img'] = $ImageGalleryModel->getFieldPath(array('id' => $value['goods_img_id']));
|
|
}
|
|
|
|
//获取规格库存
|
|
if ($user_type == 4 && $platform_type == 2) {
|
|
$code_arr[$sku_id] = $value['third_goods_code'];
|
|
$value['goods_num'] = 0;
|
|
} else {
|
|
$value['goods_num'] = $InventoryApi->goods_num(1, $store_id, $goods_id, $sku_id);
|
|
}
|
|
}
|
|
if ($user_type == 4 && $platform_type == 2 && !empty($code_arr)) {
|
|
//Q3库存
|
|
$StoreModel = new RetailStoreModel();
|
|
$Customer_Codes = $StoreModel->getFindField([
|
|
'id'=>$store_id
|
|
],'third_code');
|
|
$GoodsClass = new \LittleGift\Business\Goods();
|
|
$thirdResult = $GoodsClass->goodsNumQuery([
|
|
'merchant_id'=>$merchant_id,
|
|
'type'=>2,
|
|
'code_arr'=>$code_arr,
|
|
'Customer_Codes'=>$Customer_Codes
|
|
]);
|
|
if($thirdResult['status'] == 1){
|
|
$stock = $thirdResult['data'];
|
|
foreach ($skuList as &$val){
|
|
$val['goods_num'] = floatval($stock[$val['old_id']]);
|
|
}
|
|
}
|
|
}
|
|
|
|
//获取规格属性列表,保证规格属性顺序
|
|
$skuAttr = $this->handleSkuList($skuList[0]['id'], $sku_id_list);
|
|
}
|
|
$data['skuNumberList'] = $skuNumberList;
|
|
$data['skuCodeList'] = $skuCodeList;
|
|
$data['attr'] = $skuAttr;
|
|
$data['list'] = $skuList;
|
|
return callBack(statusCode()['success'], '获取成功', $data);
|
|
}
|
|
|
|
/**
|
|
* 获取商户指定商品的规格列表、规格属性信息
|
|
* @param $param
|
|
* @return mixed
|
|
* @throws \think\db\exception\DataNotFoundException
|
|
* @throws \think\db\exception\DbException
|
|
* @throws \think\db\exception\ModelNotFoundException
|
|
* @throws \think\exception\DbException
|
|
*/
|
|
public function getMerGoodsSkuInfo($param)
|
|
{
|
|
$merchant_id = $param['merchant_id'];
|
|
$goods_id = $param['goods_id'];
|
|
if (empty($merchant_id) || empty($goods_id)) {
|
|
return callBack(statusCode()['error'], '缺少必要参数,详情请见data', array(
|
|
'merchant_id' => $merchant_id,
|
|
'goods_id' => $goods_id,
|
|
));
|
|
}
|
|
$skuAttr = array();
|
|
$skuCodeList = array(0 => 0);//记录规格条码,用于返回给前台进行自动编号
|
|
$skuNumberList = array(0 => 0);//记录规格货号,用于返回给前台进行自动编号
|
|
$SkuMGoodsModel = new SkuMGoodsModel();
|
|
$map = array(
|
|
'merchantid' => $merchant_id,
|
|
'mgoods_id' => $goods_id,
|
|
'state' => 0
|
|
);
|
|
$skuList = $SkuMGoodsModel->getSelect($map);
|
|
if (!empty($skuList)) {
|
|
$sku_id_list = [];//临时存储规格值ID、为展示默认选中值使用
|
|
$sku_name = [];
|
|
$ImageGalleryModel = new ImageGalleryModel();
|
|
$SaleMGoodsModel = new SaleMGoodsModel();
|
|
//处理商品规格列表
|
|
foreach ($skuList as &$value) {
|
|
//临时记录旧ID,给后面赋值使用
|
|
$sku_id = $value['id'];
|
|
|
|
$sku_id_list = array_merge($sku_id_list, explode(',', $value['sku_id_list']));
|
|
|
|
//临时设置旧ID,给前端做数据处理
|
|
$value['old_id'] = $value['id'];
|
|
|
|
//处理ID为数组、获取规格值名称
|
|
$id = explode(',', $value['sku_id_list']);
|
|
foreach ($id as &$v) {
|
|
$value['name'][] = $this->getSkuListName(intval($v), $sku_name);
|
|
}
|
|
|
|
//处理自动递增的条码
|
|
if (!empty($value['sku_code'])) {
|
|
$tempArr = explode('-', $value['sku_code']);
|
|
if (count($tempArr) > 1) {
|
|
if (is_numeric($tempArr[count($tempArr) - 1])) {
|
|
$skuCodeList[] = (int)$tempArr[count($tempArr) - 1];
|
|
}
|
|
}
|
|
}
|
|
|
|
//处理自动递增的货号
|
|
if (!empty($value['sku_goods_number'])) {
|
|
$tempArr = explode('-', $value['sku_goods_number']);
|
|
if (count($tempArr) > 1) {
|
|
if (is_numeric($tempArr[count($tempArr) - 1])) {
|
|
$skuNumberList[] = (int)$tempArr[count($tempArr) - 1];
|
|
}
|
|
}
|
|
}
|
|
|
|
$value['more_num'] = round($value['more_num'], 3);
|
|
$value['less_num'] = round($value['less_num'], 3);
|
|
$value['purch_price'] = floatval($value['purch_price']) ? floatval($value['purch_price']) : '';
|
|
$value['online_price'] = floatval($value['online_price']) ? floatval($value['online_price']) : '';
|
|
$value['retail_price'] = floatval($value['retail_price']) ? floatval($value['retail_price']) : '';
|
|
$value['shop_mem_price'] = floatval($value['shop_mem_price']) ? floatval($value['shop_mem_price']) : '';
|
|
$value['store_mem_price'] = floatval($value['store_mem_price']) ? floatval($value['store_mem_price']) : '';
|
|
$value['plus_price'] = floatval($value['plus_price']) ? floatval($value['plus_price']) : '';
|
|
$value['id'] = $id;
|
|
$value['sku_code'] = $value['sku_code'] ? $value['sku_code'] : '';
|
|
$value['weight_value'] = $value['weight_value'] ? round($value['weight_value'], 3) : '';
|
|
|
|
//获取规格图片
|
|
$value['goods_img'] = '';
|
|
if (!empty($value['goods_img_id'])) {
|
|
$value['goods_img'] = $ImageGalleryModel->getFieldPath(array('id' => $value['goods_img_id']));
|
|
}
|
|
//获取规格库存
|
|
$where = array(
|
|
'merchant_id' => $merchant_id,
|
|
'goods_id' => $goods_id,
|
|
'sku_id' => $sku_id,
|
|
'status' => array('in', '0,1'),
|
|
);
|
|
$goods_num = $SaleMGoodsModel->getFindField($where, 'goods_num');
|
|
$value['goods_num'] = $goods_num ? $goods_num : 0;
|
|
}
|
|
|
|
//获取规格属性列表,保证规格属性顺序
|
|
$skuAttr = $this->handleSkuList($skuList[0]['id'], $sku_id_list);
|
|
}
|
|
$data['skuNumberList'] = $skuNumberList;
|
|
$data['skuCodeList'] = $skuCodeList;
|
|
$data['attr'] = $skuAttr;
|
|
$data['list'] = $skuList;
|
|
return callBack(statusCode()['success'], '获取成功', $data);
|
|
}
|
|
|
|
/**
|
|
* 根据规格值列表ID,处理规格属性列表
|
|
* @param array $ids 规格值列表ID
|
|
* @param array $sku_id_list 所有被选中的规格值ID
|
|
* @return array
|
|
* @throws \think\db\exception\DataNotFoundException
|
|
* @throws \think\db\exception\DbException
|
|
* @throws \think\db\exception\ModelNotFoundException
|
|
* @throws \think\exception\DbException
|
|
*/
|
|
public function handleSkuList($ids = array(), $sku_id_list = array())
|
|
{
|
|
$skuAttr = array();
|
|
$SkuListModel = new RetailSkuListModel();
|
|
foreach ($ids as $val) {
|
|
$item = $SkuListModel->getAttrInfo($val);
|
|
$item['list'] = $SkuListModel->getSelect(array('attr_id' => $item['id'], 'state' => 0), 'id,name');
|
|
foreach ($item['list'] as &$v) {
|
|
if (in_array($v['id'], $sku_id_list)) {
|
|
$v['checked'] = true;
|
|
} else {
|
|
$v['checked'] = false;
|
|
}
|
|
}
|
|
$skuAttr[] = $item;
|
|
}
|
|
return $skuAttr;
|
|
}
|
|
|
|
/**
|
|
* 获取规格值名称
|
|
* @param null $list_id 规格值ID
|
|
* @param array $sku_name 规格值数组
|
|
* @return mixed
|
|
*/
|
|
public function getSkuListName($list_id = null, &$sku_name = array())
|
|
{
|
|
if (!$list_id) {
|
|
return '';
|
|
}
|
|
if (!isset($sku_name[$list_id])) {
|
|
$SkuListModel = new RetailSkuListModel();
|
|
$sku_name[$list_id] = $SkuListModel->getFindField(array('id' => $list_id), 'name');
|
|
}
|
|
return $sku_name[$list_id];
|
|
}
|
|
|
|
|
|
/**
|
|
* 新增/编辑商品处获取规格供选择
|
|
* @param $merchant_id
|
|
* @return mixed
|
|
*/
|
|
public function getSkuAttr($merchant_id)
|
|
{
|
|
$RetailSkuAttrModel = new RetailSkuAttrModel();
|
|
$RetailSkuListModel = new RetailSkuListModel();
|
|
$map = [
|
|
'merchantid' => $merchant_id,
|
|
'status' => 1,
|
|
'state' => 0,
|
|
];
|
|
$skuList = $RetailSkuAttrModel->getSelect($map, 'id,name');
|
|
foreach ($skuList as &$val) {
|
|
$list_map = ['attr_id' => $val['id'], 'status' => 1, 'state' => 0];
|
|
$list = $RetailSkuListModel->getSelect($list_map, 'id,name');
|
|
foreach ($list as &$v) {
|
|
$v['checked'] = false;
|
|
}
|
|
$val['list'] = $list;
|
|
}
|
|
return callBack(statusCode()['success'], '查询成功', $skuList ? $skuList : []);
|
|
}
|
|
} |