文件
mashangyoujiu/Application/Common/Business/SkuAttribute.class.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 : []);
}
}