1193 行
59 KiB
PHP
可执行文件
1193 行
59 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace Common\Business;
|
||
|
||
use Api\Controller\InventoryController;
|
||
use Common\Model\ImageGalleryModel;
|
||
use Common\Model\RetailGoodsBannerModel;
|
||
use Common\Model\RetailGoodsModel;
|
||
use Common\Model\RetailMerchantConfigModel;
|
||
use Common\Model\RetailSkuGoodsModel;
|
||
use Common\Model\RetailSkuListModel;
|
||
use Common\Model\RetailStoreAuthModel;
|
||
use Common\Model\RetailStoreModel;
|
||
use Common\Model\RetailVipConfigModel;
|
||
use Common\Model\SPurchaseGoodsModel;
|
||
use Common\Model\SSaleMGoodsModel;
|
||
use Common\Model\SWarehousingGoodsModel;
|
||
use Common\Validate\CustomValidate;
|
||
|
||
//[1.8.85]
|
||
|
||
/**
|
||
* 操作商品档案类
|
||
* Class OperateGoods
|
||
* @package Common\Business
|
||
*
|
||
* getGoodsDetails 获取商品详情进行编辑
|
||
* editStoreGoods 门店新增、编辑商品
|
||
* getEditGoodsConfig 获取门店添加商品的一些基本配置及限制
|
||
* verifyEditGoods 验证门店指定商品是否可以进行编辑、修改规格、修改预售状态
|
||
* batchOperateGoods 批量修改商品的某个字段值
|
||
*
|
||
*/
|
||
class OperateGoods
|
||
{
|
||
/**
|
||
* 门店商品字段名称
|
||
* @var array
|
||
*/
|
||
protected $goods_fields_name = array(
|
||
'supplier_id' => '供货商',
|
||
'goods_name' => '商品名称',
|
||
'goods_number' => '商品货号',
|
||
'goods_code' => '商品条码',
|
||
'goods_class_id' => '商品分类',
|
||
'subheading' => '商品副标题',
|
||
'goods_num' => '商品库存',
|
||
'purchase_price' => '商品进价',
|
||
'retail_price' => '店内零售价',
|
||
'online_price' => '商城零售价',
|
||
'shop_mem_status' => '商城会员价开启状态',
|
||
'shop_mem_price' => '商城会员价',
|
||
'plus_price' => 'plus会员价',
|
||
'plus_mem_status' => '是否开启plus会员',
|
||
'store_mem_status' => '店内会员价开启状态',
|
||
'store_mem_price' => '店内会员价',
|
||
'integral_mem_status' => '商品送积分状态',
|
||
'integral' => '购买商品送的积分',
|
||
'company' => '商品单位',
|
||
'weight_value' => '商品重量',
|
||
'specifications' => '商品规格',
|
||
'goods_order' => '商品排序',
|
||
'more_num' => '库存超量',
|
||
'less_num' => '库存预警',
|
||
'fictitious_num' => '虚拟销量',
|
||
'split_state' => '是否可以拆分',
|
||
'retail_state' => '店内出售状态',
|
||
'online_state' => '商城出售状态',
|
||
'advance_sale_status' => '商城预售状态',
|
||
'delivery_type' => '配送方式',
|
||
'delivery_template_id' => '配送模板',
|
||
'vip_online_state' => '商城会员折扣',
|
||
'vip_retail_state' => '门店会员折扣',
|
||
'pricing_method' => '计价方式',
|
||
'refund_state' => '是否允许退款',
|
||
'exchange_state' => '是否允许换货',
|
||
'status' => '商品上下架状态',
|
||
'attribute_state' => '多规格状态',
|
||
'label_id' => '商品标签',
|
||
'guide_royalty_state' => '导购员提成状态',
|
||
'guide_royalty_custom_state' => '自定义导购员提成状态',
|
||
'guide_royalty_price' => '导购员线下提成固定金额',
|
||
'guide_royalty_online_price' => '导购员线上提成固定金额',
|
||
'shop_mem_integral' => '商城会员价换购积分',
|
||
'plus_mem_integral' => 'PLUS会员价换购积分',
|
||
'store_mem_integral' => '店内会员价换购积分',
|
||
'goods_brand_id' => '商品品牌',
|
||
'goods_yieldly_id' => '商品产地',
|
||
'plu_code' => '商品PLU码',
|
||
'video_id' => '视频地址',
|
||
);
|
||
|
||
|
||
/**
|
||
* 获取商品详情进行编辑
|
||
* @param $param
|
||
* [
|
||
* user_type 3商户 4门店
|
||
* platform_type 商户平台类型 1默认系统 2微礼平台
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function getGoodsDetails($param)
|
||
{
|
||
$user_type = $param['user_type'];
|
||
$platform_type = $param['platform_type'];
|
||
$merchant_id = $param['merchant_id'];
|
||
$store_id = $param['store_id']; //门店ID
|
||
$goods_id = $param['goods_id']; //商品ID
|
||
if (!$store_id || !$goods_id) {
|
||
return callBack(statusCode()['error'], '缺少必要参数,详情请见data', array(
|
||
'store_id' => $store_id,
|
||
'goods_id' => $goods_id,
|
||
));
|
||
}
|
||
|
||
//1.查询商品信息
|
||
$GoodsModel = new RetailGoodsModel();
|
||
$map = array(
|
||
'id' => $goods_id,
|
||
'store_id' => $store_id,
|
||
'status' => array('in', '0,1'),
|
||
);
|
||
$goods = $GoodsModel->getFind($map);
|
||
if (!$goods) {
|
||
return callBack(statusCode()['error'], '商品不存在');
|
||
}
|
||
|
||
//2.获取封面图
|
||
$ImageGalleryModel = new ImageGalleryModel();
|
||
if (!empty($goods['goods_img_id'])) {
|
||
$goods['goods_img'] = $ImageGalleryModel->getFieldPath(array('id' => $goods['goods_img_id']));
|
||
}
|
||
if (!empty($goods['video_id'])) {
|
||
$goods['goods_video'] = $ImageGalleryModel->getFieldPath(array('id' => $goods['video_id']));
|
||
} else {
|
||
$goods['goods_video'] = '';
|
||
}
|
||
|
||
//3.处理字段信息
|
||
$goods['more_num'] = $goods['more_num'] ? floatval($goods['more_num']) : '';
|
||
$goods['less_num'] = $goods['less_num'] ? floatval($goods['less_num']) : '';
|
||
$goods['weight_value'] = $goods['weight_value'] ? floatval($goods['weight_value']) : '';
|
||
|
||
$goods['online_price'] = floatval($goods['online_price']) ? floatval($goods['online_price']) : '';
|
||
$goods['retail_price'] = floatval($goods['retail_price']) ? floatval($goods['retail_price']) : '';
|
||
$goods['shop_mem_price'] = floatval($goods['shop_mem_price']) ? floatval($goods['shop_mem_price']) : '';
|
||
$goods['store_mem_price'] = floatval($goods['store_mem_price']) ? floatval($goods['store_mem_price']) : '';
|
||
$goods['plus_price'] = floatval($goods['plus_price']) ? floatval($goods['plus_price']) : '';
|
||
$goods['guide_royalty_price'] = floatval($goods['guide_royalty_price']) ? floatval($goods['guide_royalty_price']) : '';
|
||
$goods['guide_royalty_online_price'] = floatval($goods['guide_royalty_online_price']) ? floatval($goods['guide_royalty_online_price']) : '';
|
||
|
||
$goods['goods_code'] = $goods['goods_code'] ? $goods['goods_code'] : '';
|
||
|
||
//4.处理线上提货信息
|
||
$goods['delivery_type'] = $goods['delivery_type'] ? json_decode('[' . join(',', array($goods['delivery_type'])) . ']', true) : array();
|
||
$goods['goods_num'] = 0;
|
||
//5.获取商品库存
|
||
if ($platform_type == 2 && $user_type == 4) {
|
||
//Q3库存
|
||
$StoreModel = new RetailStoreModel();
|
||
$Customer_Codes = $StoreModel->getFindField([
|
||
'id' => $store_id,
|
||
], 'third_code');
|
||
if ($goods['attribute_state'] == 2) {
|
||
$SkuGoodsModel = new RetailSkuGoodsModel();
|
||
$sku_code_arr[$goods['id']] = $SkuGoodsModel->getFindField([
|
||
'goods_id' => $goods['id'],
|
||
'state' => 0
|
||
], 'third_goods_code', true);
|
||
} else {
|
||
$code_arr[$goods['id']] = $goods['third_goods_code'];
|
||
}
|
||
$GoodsClass = new \LittleGift\Business\Goods();
|
||
$thirdResult = $GoodsClass->goodsNumQuery([
|
||
'merchant_id' => $merchant_id,
|
||
'type' => 1,
|
||
'code_arr' => $code_arr,
|
||
'sku_code_arr' => $sku_code_arr,
|
||
'Customer_Codes' => $Customer_Codes
|
||
]);
|
||
if ($thirdResult['status'] == 1) {
|
||
$goods['goods_num'] = floatval($thirdResult['data'][$goods['id']]);
|
||
}
|
||
} else {
|
||
$InventoryApi = new InventoryController();
|
||
$goods['goods_num'] = $InventoryApi->goods_num(2, $store_id, $goods_id);
|
||
}
|
||
|
||
|
||
//6.处理商品分类
|
||
$GoodsClassifyApi = new GoodsClassify();
|
||
$class_list = array();
|
||
$GoodsClassifyApi->getAppointGoodsClassList($goods['goods_class_id'], $class_list);
|
||
|
||
//7.获取轮播图
|
||
$BannerApi = new Banner();
|
||
$banner = $BannerApi->getGoodsBanner($goods_id, true);
|
||
|
||
return callBack(statusCode()['success'], '获取成功', array(
|
||
'goods' => $goods, //商品信息
|
||
'bannerList' => $banner, //商品轮播图
|
||
'goods_class' => $class_list, //商品选择的分类列表
|
||
));
|
||
}
|
||
|
||
/**
|
||
* 门店新增、编辑商品
|
||
* @param $param
|
||
* [
|
||
* platform_type 商户平台类型 1默认系统 2微礼平台
|
||
* ]
|
||
* @return mixed
|
||
* @throws \think\Exception
|
||
*/
|
||
public function editStoreGoods($param)
|
||
{
|
||
$platform_type = $param['platform_type'] ? $param['platform_type'] : 1;
|
||
$store_id = $param['store_id']; //门店ID
|
||
$merchant_id = $param['merchant_id']; //商户ID
|
||
$user_type = $param['user_type']; //用户类型 3商户 4门店 6收银员
|
||
$operate_id = $param['operate_id']; //操作用户的ID
|
||
if (!$store_id || !$merchant_id || !$operate_id || !$user_type || !in_array($user_type, array(3, 4, 6))) {
|
||
return callBack(statusCode()['error'], '缺少必要参数,详情请见data', array(
|
||
'store_id' => $store_id,
|
||
'merchant_id' => $merchant_id,
|
||
'user_type' => $user_type,
|
||
'operate_id' => $operate_id,
|
||
));
|
||
}
|
||
//1.验证是否创建供给仓
|
||
$WarehousingRecord = new WarehousingRecord();
|
||
$warehouse = $WarehousingRecord->getStoreSaleWarehouse([
|
||
'merchant_id' => $merchant_id,
|
||
'store_id' => $store_id
|
||
]);
|
||
if (empty($warehouse)) {
|
||
return callBack(statusCode()['error'], "请先创建供给仓");
|
||
}
|
||
$warehouse_id = $warehouse['id'];
|
||
|
||
//获取门店操作商品的一些基本配置
|
||
$config = $this->getEditGoodsConfig([
|
||
'store_id' => $store_id,
|
||
'merchant_id' => $merchant_id,
|
||
'user_type' => $user_type,
|
||
]);
|
||
|
||
$data = $param['goodsInfo'];
|
||
foreach ($data as $k => $v) {
|
||
if (!is_array($v)) $data[$k] = trim($v, ' ');
|
||
}
|
||
$item = array(
|
||
'store_id' => $store_id,
|
||
'merchant_id' => $merchant_id,
|
||
'goods_id' => $data['id'],
|
||
'attribute_state' => $data['attribute_state'],
|
||
'retail_state' => $data['retail_state'],
|
||
'online_state' => $data['online_state'],
|
||
'advance_sale_status' => $data['advance_sale_status'],
|
||
'showpurch_price' => $config['show_purchase_price'],
|
||
'edit_price' => $config['edit_price'],
|
||
'integral_arrive_cash' => $config['integral_arrive_cash'],
|
||
'marketing_methods' => $config['marketing_methods'],
|
||
'store_mem_status' => $data['store_mem_status'],
|
||
'shop_mem_status' => $data['shop_mem_status'],
|
||
'plus_mem_status' => $data['plus_mem_status'],
|
||
'source_type' => $user_type == 3 || $user_type == 4 ? 1 : 3,
|
||
'operate_id' => $operate_id,
|
||
'serial_number_state' => $data['serial_number_state'] ? $data['serial_number_state'] : 0,
|
||
'platform_type' => $platform_type
|
||
); //验证商品参数的配置
|
||
//2.编辑商品时,验证是可进行编辑规格操作
|
||
$oldGoods = array();
|
||
if (!empty($data['id'])) {
|
||
$verifyEditGoods = $this->verifyEditGoods($item);
|
||
if ($verifyEditGoods['status'] != 1) {
|
||
return $verifyEditGoods;
|
||
}
|
||
$oldGoods = $verifyEditGoods['data'];
|
||
}
|
||
|
||
//3.接收传输的商品信息
|
||
$item['goodsInfo'] = $param['goodsInfo'];
|
||
$goods = $this->getPostGoodsData($item);
|
||
$goodsVerifyItem = $item;
|
||
$goodsVerifyItem['goods'] = $goods;
|
||
//4.验证传输的商品基本字段
|
||
$verifyGoods = $this->verifyGoodsData($goodsVerifyItem);
|
||
if ($verifyGoods['status'] != 1) {
|
||
return $verifyGoods;
|
||
}
|
||
//验证串号开关
|
||
if ($goods['serial_number_state'] == 1 && empty($data['id'])) {
|
||
if ($goods['goods_num'] > 0) {
|
||
return callBack(statusCode()['error'], '开启串码功能后,商品库存需要采购增加');
|
||
}
|
||
if ($goods['pricing_method'] == 2) {
|
||
return callBack(statusCode()['error'], '开启串码功能后,商品不能开启称重');
|
||
}
|
||
}
|
||
$goodsApi = new \Common\Business\Goods(); //商品类
|
||
|
||
//判断货号是否重复
|
||
$verifyNumber = $goodsApi->jumpGoodsNumberOrCode([
|
||
'value' => $goods['goods_number'],
|
||
'store_id' => $store_id,
|
||
'type' => 1,
|
||
'goods_id' => $data['id'],
|
||
]);
|
||
if ($verifyNumber['status'] != 1) {
|
||
return $verifyNumber;
|
||
}
|
||
|
||
//判断条码是否重复
|
||
if (!empty($goods['goods_code'])) {
|
||
$verifyCode = $goodsApi->jumpGoodsNumberOrCode([
|
||
'value' => $goods['goods_code'],
|
||
'store_id' => $store_id,
|
||
'type' => 2,
|
||
'goods_id' => $data['id'],
|
||
]);
|
||
if ($verifyCode['status'] != 1) {
|
||
return $verifyCode;
|
||
}
|
||
}
|
||
//第三方平台商品编码验证是否重复
|
||
if ($platform_type == 2 && empty($goods['id']) && $goods['attribute_state'] == 1) {
|
||
$LittleGoodsClass = new \LittleGift\Business\Goods();
|
||
$verifyCode = $LittleGoodsClass->verifyQ3Code([
|
||
'third_goods_code' => $goods['third_goods_code'],
|
||
'merchant_id' => $merchant_id
|
||
]);
|
||
if ($verifyCode['status'] != 1) {
|
||
return $verifyCode;
|
||
}
|
||
$verifyCode = $LittleGoodsClass->GoodsVerify([
|
||
'merchant_id' => $merchant_id,
|
||
'code_arr' => [$goods['third_goods_code']]
|
||
]);
|
||
if ($verifyCode['status'] == 0) {
|
||
return $verifyCode;
|
||
}
|
||
if (!empty($verifyCode['data']['arr_diff'])) {
|
||
return callBack(statusCode()['error'], $goods['third_goods_code'] . 'Q3 ERP平台验证失败');
|
||
}
|
||
}
|
||
//判断规格与称重
|
||
if ($goods['pricing_method'] == 2 && $goods['attribute_state'] == 2) {
|
||
return callBack(statusCode()['error'], '规格与称重不能同时开启');
|
||
}
|
||
|
||
//转换配送方式字段
|
||
$goods['delivery_type'] = implode(',', $goods['delivery_type']);
|
||
|
||
|
||
//5.处理称重商品重量
|
||
if ($goods['pricing_method'] == 2) {
|
||
$goods['weight_value'] = $goodsApi->getGoodsWeightFromCompany($goods['company']);
|
||
}
|
||
|
||
//6.处理图片云库地址
|
||
$goods_image_url = $data['goods_image_url'];
|
||
if (!empty($goods_image_url)) {
|
||
$obj = array(
|
||
'path' => $goods_image_url,
|
||
'storage_type' => 5
|
||
);
|
||
$codeImage = $goodsApi->basisCodeAddImageGallery($obj); //阿里云条码查询的商品图片存入库图片库
|
||
|
||
if (!empty($codeImage['goods_image'])) {
|
||
$goods['goods_img_id'] = $codeImage['goods_image']['id']; //商品封面图
|
||
}
|
||
}
|
||
|
||
$skuList = array(); //多规格
|
||
if ($goods['attribute_state'] == 2) {
|
||
$goods['third_goods_code'] = '';
|
||
$item['codeArr'] = $goods['goods_code'] ? [$goods['goods_code']] : [];
|
||
$item['numberArr'] = $goods['goods_number'] ? [$goods['goods_number']] : [];
|
||
$skuList = $param['goodsInfo']['skuList'];
|
||
try {
|
||
$item['skuList'] = json_decode($skuList, true);
|
||
} catch (\Exception $e) {
|
||
return callBack(statusCode()['error'], '规格参数有误', $skuList);
|
||
}
|
||
|
||
$verifySku = $this->verifyGoodsSku($item);
|
||
if ($verifySku['status'] != 1) {
|
||
return $verifySku;
|
||
}
|
||
$skuList = $verifySku['data'];
|
||
unset($goods['third_goods_code']);
|
||
}
|
||
$GoodsModel = new RetailGoodsModel();
|
||
$PinYinClass = new PinYin();
|
||
if (empty($oldGoods)) {
|
||
if (!$goods['simple_spelling']) {
|
||
$goods['simple_spelling'] = $PinYinClass->strChangePin($goods['goods_name']); //获取商品名称简拼
|
||
}
|
||
$goods_id = $GoodsModel->addOrder($goods);
|
||
} else {
|
||
unset($goods['purchase_price']);
|
||
unset($goods['third_goods_code']);
|
||
if ($goods['goods_name'] != $oldGoods['goods_name']) {
|
||
if (!$goods['simple_spelling']) {
|
||
$goods['simple_spelling'] = $PinYinClass->strChangePin($goods['goods_name']); //获取商品名称简拼
|
||
}
|
||
}
|
||
$GoodsModel->updateOrder(array('id' => $oldGoods['id']), $goods);
|
||
$goods_id = $oldGoods['id'];
|
||
}
|
||
if (!empty($goods_id)) {
|
||
//添加编辑记录
|
||
$GoodsClass = new Goods();
|
||
$GoodsClass->goodsEditRecord([
|
||
'store_id' => $store_id,
|
||
'merchant_id' => $merchant_id,
|
||
'goods_id' => $goods_id
|
||
]);
|
||
$SaleWarehouseData = $goods;
|
||
$SaleWarehouseData['goods_id'] = $goods_id;
|
||
$SaleWarehouseData['warehouse_id'] = $warehouse_id;
|
||
$InventoryApi = new InventoryController();
|
||
if ($goods['attribute_state'] == 1) {
|
||
if (empty($oldGoods) || $goods['attribute_state'] != $oldGoods['attribute_state']) {
|
||
$InventoryApi->addSaleGoods($SaleWarehouseData, 1); //商品添加到销售库
|
||
} else {
|
||
$InventoryApi->addSaleGoods($SaleWarehouseData, 2); //商品销售库修改
|
||
}
|
||
} else {
|
||
$sku_id_str = [];
|
||
$SkuGoodsModel = new RetailSkuGoodsModel();
|
||
//处理规格
|
||
foreach ($skuList as $k => &$v) {
|
||
$v['goods_id'] = $goods_id;
|
||
$v['goods_img'] = $v['goods_img'] ? $v['goods_img'] : '';
|
||
$v['goods_img_id'] = $v['goods_img_id'] ? $v['goods_img_id'] : null;
|
||
$SaleWarehouseData['sku_name'] = $v['name'];
|
||
$SaleWarehouseData['sku_id_list'] = $v['sku_id_list'];
|
||
$SaleWarehouseData['sku_goods_number'] = $v['sku_goods_number'];
|
||
$SaleWarehouseData['sku_code'] = $v['sku_code'];
|
||
$SaleWarehouseData['sku_num'] = $v['sku_num'];
|
||
$SaleWarehouseData['goods_num'] = $v['goods_num'];
|
||
$SaleWarehouseData['more_num'] = $v['more_num'];
|
||
$SaleWarehouseData['less_num'] = $v['less_num'];
|
||
$SaleWarehouseData['purchase_price'] = $v['purchase_price'];
|
||
if ($v['id']) {
|
||
//编辑规格
|
||
unset($v['purchase_price']);
|
||
unset($v['third_goods_code']);
|
||
$SkuGoodsModel->updateOrder(array('id' => $v['id']), $v);
|
||
$SaleWarehouseData['sku_id'] = $v['id'];
|
||
$InventoryApi->addSaleGoods($SaleWarehouseData, 2); //商品供给库修改
|
||
$sku_id_str[] = $v['id'];
|
||
} else {
|
||
//新增规格
|
||
unset($v['id']);
|
||
$add = $SkuGoodsModel->addOrder($v); //添加规格
|
||
if ($add) {
|
||
$sku_id_str[] = $add;
|
||
}
|
||
$SaleWarehouseData['sku_id'] = $add;
|
||
$SaleWarehouseData['add_time'] = $v['add_time'];
|
||
$SaleWarehouseData['third_goods_code'] = $v['third_goods_code'];
|
||
$InventoryApi->addSaleGoods($SaleWarehouseData, 1);
|
||
unset($SaleWarehouseData['add_time']);
|
||
}
|
||
}
|
||
//修改旧规格(规格重置)、或被删除的规格的状态
|
||
if (!empty($sku_id_str)) {
|
||
$map = array(
|
||
'goods_id' => $goods_id,
|
||
'sku_id' => array('not in', $sku_id_str),
|
||
);
|
||
$SSaleMGoodsModel = new SSaleMGoodsModel();
|
||
$SSaleMGoodsModel->updateData($map, array('status' => 2));
|
||
$SWarehousingGoodsModel = new SWarehousingGoodsModel();
|
||
$SWarehousingGoodsModel->updateData($map, array('surplus_num' => 0));
|
||
$map = array(
|
||
'goods_id' => $goods_id,
|
||
'id' => array('not in', $sku_id_str),
|
||
'state' => 0,
|
||
);
|
||
$SkuGoodsModel->updateOrder($map, array('state' => 1));
|
||
}
|
||
}
|
||
|
||
//处理轮播图
|
||
$bannerList = $param['goodsInfo']['bannerList'];
|
||
$banner_id_str = [];
|
||
$BannerModel = new RetailGoodsBannerModel();
|
||
if (!empty($bannerList)) {
|
||
foreach ($bannerList as $kB => $vB) {
|
||
$addBanner = array(
|
||
'image_id' => $vB['image_id'],
|
||
'image' => $vB['image'],
|
||
);
|
||
if (empty($vB['id'])) {
|
||
$addBanner['storeid'] = $store_id;
|
||
$addBanner['goods_id'] = $goods_id;
|
||
$addBanner['addtime'] = time();
|
||
$add = $BannerModel->addOrder($addBanner); //添加轮播图
|
||
$banner_id_str[] = $add;
|
||
} else {
|
||
$banner_id_str[] = $vB['id'];
|
||
}
|
||
}
|
||
}
|
||
$map = array(
|
||
'goods_id' => $goods_id,
|
||
);
|
||
if (!empty($banner_id_str)) {
|
||
$map['id'] = array('not in', $banner_id_str);
|
||
} else {
|
||
$map['id'] = array('not in', '0');
|
||
}
|
||
$BannerModel->deleteOrder($map); //删除轮播图
|
||
}
|
||
|
||
//操作日志记录
|
||
|
||
// 防止小助手操作重复添加日志
|
||
if ($param['operate_source'] != 1) {
|
||
$source = 0; //请求来源: 0后台系统 1小助手
|
||
$type = $user_type; //平台:1合伙人端 2代理商端 3商户端 4门店端 6收银员
|
||
$request_data = json_encode($data); //请求参数 json数据
|
||
if (!empty($oldGoods)) {
|
||
$desc = "商品档案-编辑";
|
||
} else {
|
||
$desc = "商品档案-新增";
|
||
}
|
||
action_log($source, $type, $request_data, $desc);
|
||
}
|
||
|
||
|
||
$res['goods_id'] = $goods_id;
|
||
return callBack(statusCode()['success'], '操作成功', $res);
|
||
}
|
||
|
||
/**
|
||
* 获取门店添加商品的一些基本配置及限制
|
||
* @param $param
|
||
* ['user_type'] 操作的用户类型 3商户 4门店
|
||
* ['merchant_id'] 商户ID
|
||
* ['store_id'] 门店ID
|
||
* @return array
|
||
*/
|
||
public function getEditGoodsConfig($param)
|
||
{
|
||
//商户积分设置
|
||
$RetailMerchantConfigModel = new RetailMerchantConfigModel();
|
||
$config = $RetailMerchantConfigModel->getFind(array('merchant_id' => $param['merchant_id']));
|
||
|
||
//门店类型
|
||
$StoreModel = new RetailStoreModel();
|
||
$supplier_type = $StoreModel->getFindField(array('id' => $param['store_id']), 'supplier_type');
|
||
|
||
//门店权限
|
||
if ($param['user_type'] == 3) {
|
||
//商户操作
|
||
$auth = array(
|
||
'showpurch_price' => 1,
|
||
'edit_price' => 1,
|
||
);
|
||
} else {
|
||
//门店操作
|
||
$StoreAuthModel = new RetailStoreAuthModel();
|
||
$auth = $StoreAuthModel->getFind(array('storeid' => $param['store_id']));
|
||
}
|
||
$VipConfigModel = new RetailVipConfigModel();
|
||
$goods_integral_state = $VipConfigModel->getFindField(['merchantid' => $param['merchant_id']], 'goods_integral_state');
|
||
|
||
return array(
|
||
'supplier_type' => $supplier_type,
|
||
'integral_arrive_cash' => $config['integral_arrive_cash'] ? $config['integral_arrive_cash'] : 0,
|
||
'marketing_methods' => $config['marketing_methods'] ? $config['marketing_methods'] : 1,
|
||
'show_purchase_price' => $auth['showpurch_price'],
|
||
'edit_price' => $auth['edit_price'],
|
||
'goods_integral_state' => $goods_integral_state == 1 ? 1 : 2,
|
||
);
|
||
}
|
||
|
||
/**
|
||
* 验证门店指定商品是否可以进行编辑、修改规格、修改预售状态
|
||
* @param $param
|
||
* platform_type 商户平台类型 1默认系统 2微礼平台
|
||
* ['goods_id']商品ID
|
||
* ['store_id']门店ID
|
||
* ['attribute_state']规格状态
|
||
* ['online_state']商城出售
|
||
* ['advance_sale_status']预售状态
|
||
* @return mixed
|
||
*/
|
||
public function verifyEditGoods($param)
|
||
{
|
||
$goods_id = $param['goods_id'];
|
||
$store_id = $param['store_id'];
|
||
|
||
//1. 验证商品是否存在
|
||
$GoodsModel = new RetailGoodsModel();
|
||
$oldGoods = $GoodsModel->getFind(array('id' => $goods_id, 'store_id' => $store_id, 'status' => array('neq', 2)));
|
||
if (empty($oldGoods)) {
|
||
return callBack(statusCode()['error'], '商品不存在');
|
||
}
|
||
//2.判断商品规格状态是否有变动 有采购记录和入库记录的商品不得对规格进行开启关闭操作
|
||
// 注意:只含有初始化库存的商品可进行开启关闭规格操作
|
||
if ($oldGoods['attribute_state'] != $param['attribute_state']) {
|
||
$SPurchaseGoodsModel = new SPurchaseGoodsModel();
|
||
$SWarehousingGoodsModel = new SWarehousingGoodsModel();
|
||
$purchase_goods = $SPurchaseGoodsModel->getCount(array('goods_id' => $oldGoods['id'], 'purchase_num' => array('gt', 0)));
|
||
$warehouse_goods = $SWarehousingGoodsModel->getCount(array('goods_id' => $oldGoods['id'], 'warehouse_num' => array('gt', 0)));
|
||
$error_arr = [];
|
||
if ($purchase_goods > 0) {
|
||
$error_arr[] = '有' . $purchase_goods . '条采购记录';
|
||
}
|
||
if ($warehouse_goods > 0) {
|
||
$error_arr[] = '有' . $warehouse_goods . '入库记录';
|
||
}
|
||
if (!empty($error_arr)) {
|
||
return callBack(statusCode()['error'], '商品无法修改规格开关属性', $error_arr);
|
||
}
|
||
//3.删除初始化库存
|
||
$SSaleMGoodsModel = new SSaleMGoodsModel();
|
||
$success = $SSaleMGoodsModel->deleteData(array('goods_id' => $oldGoods['id']));
|
||
if (!$success) {
|
||
return callBack(statusCode()['error'], '初始化库存删除失败,请稍后重试');
|
||
}
|
||
}
|
||
//4.判断预售
|
||
if ($param['online_state'] == 1 || $oldGoods['online_state'] == 1) {
|
||
if ($param['advance_sale_status'] == 1) {
|
||
//验证该商品开启预售是否参与促销秒杀拼团活动
|
||
$advance_open_verify = $GoodsModel->advance_open_verify(array("store_id" => $store_id, "goods_id" => $goods_id));
|
||
if ($advance_open_verify['status'] == 0) {
|
||
return callBack(statusCode()['error'], $advance_open_verify['msg']);
|
||
}
|
||
} else {
|
||
// 编辑商品时验证是否可以关闭预售
|
||
$advance_close_verify = $GoodsModel->advance_close_verify(array("store_id" => $store_id, "goods_id" => $goods_id));
|
||
if ($advance_close_verify['status'] == 0) {
|
||
return callBack(statusCode()['error'], $advance_close_verify['msg']);
|
||
}
|
||
}
|
||
}
|
||
if ($param['serial_number_state'] != $oldGoods['serial_number_state']) {
|
||
return callBack(statusCode()['error'], '串号状态禁止修改');
|
||
}
|
||
return callBack(statusCode()['success'], '可对商品进行正常编辑操作', $oldGoods);
|
||
}
|
||
|
||
/**
|
||
* 批量修改商品的某个字段值(配送方式例外)
|
||
* @param $param
|
||
* $param['store_id']
|
||
* $param['user_type']
|
||
* $param['operate_id']
|
||
* $param['key']
|
||
* $param['value']
|
||
* $param['delivery_template_id']
|
||
* $param['goodsIds']
|
||
* @return mixed
|
||
*/
|
||
public function batchOperateGoods($param)
|
||
{
|
||
$store_id = $param['store_id']; //门店ID
|
||
$user_type = $param['user_type']; //用户类型 3商户 4门店 6收银员
|
||
$operate_id = $param['operate_id']; //操作用户的ID
|
||
$goodsIds = $param['goodsIds']; //操作的商品
|
||
$key = $param['key']; //操作的字段
|
||
$value = $param['value']; //操作字段的值
|
||
$delivery_template_id = $param['delivery_template_id']; //发货模板ID
|
||
|
||
//仅支持修改的字段名列表
|
||
$keyArr = array(
|
||
'status',
|
||
'retail_state',
|
||
'online_state',
|
||
'vip_retail_state',
|
||
'vip_online_state',
|
||
'delivery_type',
|
||
'goods_class_id',
|
||
'guide_royalty_state',
|
||
'refund_state',
|
||
'exchange_state',
|
||
'fictitious_num',
|
||
);
|
||
|
||
if (
|
||
!$store_id || !$operate_id || !$user_type
|
||
|| !in_array($user_type, array(3, 4, 6))
|
||
|| empty($goodsIds) || !isset($value)
|
||
|| !$key || !in_array($key, $keyArr)
|
||
) {
|
||
return callBack(statusCode()['error'], '请求参数有误,详情请见data', array(
|
||
'store_id' => $store_id,
|
||
'user_type' => $user_type,
|
||
'operate_id' => $operate_id,
|
||
'key' => $key,
|
||
'value' => $value,
|
||
'delivery_template_id' => $delivery_template_id,
|
||
'goodsIds' => $goodsIds,
|
||
));
|
||
}
|
||
$stateValue = [0, 1];
|
||
$deliveryValue = [1, 2, 3];
|
||
switch ($key) {
|
||
case 'status':
|
||
case 'retail_state':
|
||
case 'online_state':
|
||
case 'vip_retail_state':
|
||
case 'vip_online_state':
|
||
case 'refund_state':
|
||
case 'exchange_state':
|
||
if (!in_array($value, $stateValue)) {
|
||
return callBack(statusCode()['error'], '参数值有误');
|
||
}
|
||
break;
|
||
case 'delivery_type':
|
||
if (count($value) != count(array_intersect($value, $deliveryValue))) {
|
||
return callBack(statusCode()['error'], '参数值有误');
|
||
}
|
||
if (!verifyNumber($delivery_template_id) && in_array('3', $value)) {
|
||
return callBack(statusCode()['error'], '发货模板为必选');
|
||
}
|
||
break;
|
||
case 'goods_class_id':
|
||
if (!verifyNumber($value)) {
|
||
return callBack(statusCode()['error'], '商品分类为必选');
|
||
}
|
||
break;
|
||
case 'fictitious_num':
|
||
if (!verifyNumber($value)) {
|
||
return callBack(statusCode()['error'], '虚拟销量有误');
|
||
}
|
||
break;
|
||
default:
|
||
}
|
||
$GoodsModel = new RetailGoodsModel();
|
||
|
||
//修改的商品的条件
|
||
$map = array(
|
||
'store_id' => $store_id, //门店ID
|
||
'status' => array('neq', '2'), //商品状态不为删除
|
||
'id' => array('in', $goodsIds), //修改的商品ID列表
|
||
);
|
||
|
||
//更新的字段信息
|
||
$save = array(
|
||
$key => is_array($value) ? implode(',', $value) : $value,
|
||
);
|
||
|
||
//若是修改商城配送方式、并且开启了快递发货,则存储发货模板
|
||
if ($key == 'delivery_type' && in_array('3', $value)) {
|
||
$save['delivery_template_id'] = $delivery_template_id;
|
||
}
|
||
$update = $GoodsModel->updateOrder($map, $save);
|
||
if ($update) {
|
||
//更新库存状况表
|
||
//目前仅有商品分类、商品上下架状态
|
||
if (in_array($key, ['goods_class_id', 'status'])) {
|
||
$SSaleGoodsModel = new SSaleMGoodsModel();
|
||
$map = [
|
||
'store_id' => $param['store_id'],
|
||
'goods_id' => array('in', $goodsIds),
|
||
];
|
||
$SSaleGoodsModel->updateData($map, [$key => $value]);
|
||
}
|
||
|
||
return callBack(statusCode()['success'], '保存成功');
|
||
} else {
|
||
return callBack(statusCode()['error'], '保存失败,请检查是否修改');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 接收商品请求参数
|
||
* @param $param
|
||
* @return mixed
|
||
*/
|
||
protected function getPostGoodsData($param)
|
||
{
|
||
$data = $param['goodsInfo'];
|
||
$goods['id'] = $data['id'] ? $data['id'] : null;
|
||
$goods['supplier_id'] = $data['supplier_id'] ? $data['supplier_id'] : 0; //供货商
|
||
$goods['goods_name'] = $data['goods_name']; //商品名称
|
||
$goods['subheading'] = $data['subheading']; //副标题
|
||
$goods['goods_class_id'] = $data['goods_class_id']; //商品分类
|
||
$goods['goods_num'] = $data['goods_num'] ? $data['goods_num'] : 0; //商品库存
|
||
$goods['goods_num'] = $goods['id'] ? strval($goods['goods_num']) : floatval($goods['goods_num']);
|
||
if ($param['showpurch_price'] == 1 && empty($data['id'])) {
|
||
$goods['purchase_price'] = $data['purchase_price'] ? $data['purchase_price'] : null; //商品进价
|
||
}
|
||
$goods['retail_price'] = $data['retail_price'] ? $data['retail_price'] : null; //店内零售价
|
||
$goods['online_price'] = $data['online_price'] ? $data['online_price'] : null; //商城零售价
|
||
$goods['shop_mem_status'] = $data['shop_mem_status']; //商城会员价开启状态
|
||
$goods['shop_mem_price'] = $data['shop_mem_price'] ? $data['shop_mem_price'] : null; //商城会员价
|
||
$goods['plus_price'] = $data['plus_price'] ? $data['plus_price'] : null; //plus会员价
|
||
$goods['plus_mem_status'] = $data['plus_mem_status']; //是否开启plus会员
|
||
$goods['store_mem_status'] = $data['store_mem_status']; //店内会员价开启状态
|
||
$goods['store_mem_price'] = $data['store_mem_price'] ? $data['store_mem_price'] : null; //店内会员价
|
||
$goods['integral_mem_status'] = $data['integral_mem_status']; //商品送积分 1开启 2关闭
|
||
$goods['integral'] = $data['integral'] ? $data['integral'] : null; //送积分
|
||
$goods['company'] = $data['company'] ? $data['company'] : ''; //单位
|
||
$goods['weight_value'] = $data['weight_value'] ? $data['weight_value'] : null; //重量
|
||
$goods['specifications'] = $data['specifications']; //规格
|
||
$goods['goods_order'] = $data['goods_order'] ? $data['goods_order'] : 1; //商品排序
|
||
$goods['more_num'] = $data['more_num'] ? $data['more_num'] : null; //库存超量
|
||
$goods['less_num'] = $data['less_num'] ? $data['less_num'] : null; //库存预警
|
||
$goods['fictitious_num'] = $data['fictitious_num'] ? $data['fictitious_num'] : 0; //虚拟销量
|
||
$goods['split_state'] = $data['split_state']; //是否可以拆分
|
||
$goods['retail_state'] = $data['retail_state']; //是否在店内出售
|
||
$goods['online_state'] = $data['online_state']; //是否在商城出售
|
||
$goods['advance_sale_status'] = $data['advance_sale_status']; //是否在商城预售
|
||
$goods['serial_number_state'] = $data['serial_number_state'] ? $data['serial_number_state'] : 0; //串号状态 0关闭 1开启
|
||
$goods['delivery_type'] = $data['delivery_type'] ? $data['delivery_type'] : [];
|
||
$goods['delivery_template_id'] = $data['delivery_template_id'] ? $data['delivery_template_id'] : null; //配送模板
|
||
$goods['vip_online_state'] = $data['vip_online_state']; //商城会员折扣
|
||
$goods['vip_retail_state'] = $data['vip_retail_state']; //门店会员折扣
|
||
$goods['pricing_method'] = $data['pricing_method']; //是否称重 1:不称重 2:称重
|
||
$goods['refund_state'] = $data['refund_state']; //是否允许退款
|
||
$goods['exchange_state'] = $data['exchange_state']; //是否允许换货
|
||
$goods['status'] = $data['status']; //商品状态 0上架 1下架 2删除
|
||
$goods['attribute_state'] = $data['attribute_state']; //是否开启规格
|
||
$goods['goods_number'] = $data['goods_number'] ? $data['goods_number'] : ''; //商品货号
|
||
$goods['goods_code'] = $data['goods_code'] ? $data['goods_code'] : ''; //商品条码
|
||
$goods['simple_spelling'] = $data['simple_spelling'] ? $data['simple_spelling'] : ''; //商品简拼
|
||
$goods['label_id'] = $data['label_id'] ? $data['label_id'] : null; //商品标签
|
||
$goods['guide_royalty_state'] = $data['guide_royalty_state']; //导购员提成状态 1开启 0关闭
|
||
$goods['guide_royalty_custom_state'] = $data['guide_royalty_custom_state']; //是否使用自定义导购员提成 0不使用 1使用
|
||
$goods['guide_royalty_price'] = $data['guide_royalty_price'] ? $data['guide_royalty_price'] : null; //导购员线下提成固定金额
|
||
$goods['guide_royalty_online_price'] = $data['guide_royalty_online_price'] ? $data['guide_royalty_online_price'] : null; //导购员线上提成固定金额
|
||
if ($param['marketing_methods'] == 2 && $param['integral_arrive_cash'] == 1) {
|
||
//自定义营销
|
||
$goods['shop_mem_integral'] = $data['shop_mem_integral'] ? $data['shop_mem_integral'] : 0;
|
||
$goods['plus_mem_integral'] = $data['plus_mem_integral'] ? $data['plus_mem_integral'] : 0;
|
||
$goods['store_mem_integral'] = $data['store_mem_integral'] ? $data['store_mem_integral'] : 0;
|
||
}
|
||
$goods['goods_brand_id'] = $data['goods_brand_id'] ? $data['goods_brand_id'] : null; //商品品牌 //商品品牌id
|
||
$goods['goods_yieldly_id'] = $data['goods_yieldly_id'] ? $data['goods_yieldly_id'] : null; //商品产地
|
||
$goods['plu_code'] = $data['plu_code'] ? intval($data['plu_code']) : null; //商品PLU码
|
||
$goods['goods_img_id'] = $data['goods_img_id'] ? $data['goods_img_id'] : null; //商品封面图
|
||
|
||
$goods['details'] = htmlspecialchars_decode($data['details']); //商品详情
|
||
if (empty($data['id'])) {
|
||
$goods['add_time'] = time();
|
||
}
|
||
$goods['merchant_id'] = $param['merchant_id']; //商户id
|
||
$goods['store_id'] = $param['store_id']; //门店id
|
||
$goods['video_id'] = $data['video_id'] ? $data['video_id'] : null; //商品视频id
|
||
$goods['third_goods_code'] = $data['third_goods_code'] ? $data['third_goods_code'] : ''; //第三方平台的商品编码
|
||
return $goods;
|
||
}
|
||
|
||
/**
|
||
* 验证请求操作商品的参数是否正确
|
||
* @param $param
|
||
* [
|
||
* platform_type 商户平台类型 1默认系统 2微礼平台
|
||
* ]
|
||
* @return array
|
||
*/
|
||
protected function verifyGoodsData($param)
|
||
{
|
||
$goods = $param['goods'];
|
||
$verifyParam = array(
|
||
'supplier_id' => array('required' => false, 'type' => 'number',),
|
||
'goods_name' => array('required' => true, 'type' => 'string',),
|
||
'goods_number' => array('required' => true, 'type' => 'string', 'maxLen' => 15),
|
||
'goods_code' => array('required' => false, 'type' => 'string', 'maxLen' => 17),
|
||
'goods_class_id' => array('required' => true, 'type' => 'number',),
|
||
'subheading' => array('required' => false, 'type' => 'string',),
|
||
'retail_price' => array('required' => $goods['retail_state'] == 1 ? true : false, 'type' => 'money',),
|
||
'online_price' => array('required' => $goods['online_state'] == 1 ? true : false, 'type' => 'money',),
|
||
'shop_mem_status' => array('required' => false, 'type' => 'string', 'in' => [1, 2]),
|
||
'shop_mem_price' => array('required' => $goods['shop_mem_status'] == 1 ? true : false, 'type' => 'money',),
|
||
'plus_mem_status' => array('required' => false, 'type' => 'string', 'in' => [1, 2]),
|
||
'plus_price' => array('required' => $goods['plus_mem_status'] == 1 ? true : false, 'type' => 'money',),
|
||
'store_mem_status' => array('required' => false, 'type' => 'string', 'in' => [1, 2]),
|
||
'store_mem_price' => array('required' => $goods['store_mem_status'] == 1 ? true : false, 'type' => 'money',),
|
||
'integral_mem_status' => array('required' => false, 'type' => 'string', 'in' => [1, 2]),
|
||
'integral' => array('required' => $goods['integral_mem_status'] == 1 ? true : false, 'type' => 'string',),
|
||
'pricing_method' => array('required' => false, 'type' => 'string', 'in' => [1, 2]),
|
||
'company' => array('required' => $goods['pricing_method'] == 2 ? true : false, 'type' => 'string', 'in' => $goods['pricing_method'] == 1 ? null : array('kg', 'KG', '斤', '公斤', '市斤', '千克', 'g', 'G', '克'),),
|
||
'weight_value' => array('required' => false, 'type' => 'number', 'step' => 3, 'min' => 0.001),
|
||
'specifications' => array('required' => false, 'type' => 'string',),
|
||
'goods_order' => array('required' => false, 'type' => 'number',),
|
||
'more_num' => array('required' => false, 'type' => 'number', 'step' => $goods['pricing_method'] == 1 ? 0 : 3, 'min' => 0),
|
||
'less_num' => array('required' => false, 'type' => 'number', 'step' => $goods['pricing_method'] == 1 ? 0 : 3, 'min' => 0),
|
||
'fictitious_num' => array('required' => false, 'type' => 'number', 'min' => 0),
|
||
'split_state' => array('required' => false, 'in' => [0, 1]),
|
||
'retail_state' => array('required' => false, 'in' => [0, 1]),
|
||
'online_state' => array('required' => false, 'in' => [0, 1]),
|
||
'advance_sale_status' => array('required' => false, 'in' => [0, 1]),
|
||
'delivery_type' => array('required' => $goods['online_state'] == 1 ? true : false, 'type' => 'array', 'in' => [1, 2, 3]),
|
||
'delivery_template_id' => array('required' => array_search('3', $goods['delivery_type']) !== false ? true : false, 'type' => 'number',),
|
||
'vip_online_state' => array('required' => false, 'type' => 'string', 'in' => [0, 1]),
|
||
'vip_retail_state' => array('required' => false, 'type' => 'string', 'in' => [0, 1]),
|
||
'refund_state' => array('required' => false, 'type' => 'string', 'in' => [0, 1]),
|
||
'exchange_state' => array('required' => false, 'type' => 'string', 'in' => [0, 1]),
|
||
'status' => array('required' => false, 'type' => 'string', 'in' => [0, 1]),
|
||
'attribute_state' => array('required' => false, 'type' => 'string', 'in' => [1, 2]),
|
||
'label_id' => array('required' => false, 'type' => 'number',),
|
||
'guide_royalty_state' => array('required' => false, 'type' => 'string', 'in' => [0, 1]),
|
||
'guide_royalty_custom_state' => array('required' => true, 'type' => 'string', 'in' => [0, 1]),
|
||
'guide_royalty_price' => array('required' => $goods['guide_royalty_custom_state'] == 1 ? true : false, 'type' => 'money',),
|
||
'guide_royalty_online_price' => array('required' => $goods['guide_royalty_custom_state'] == 1 ? true : false, 'type' => 'money',),
|
||
'shop_mem_integral' => array('required' => false, 'type' => 'number',),
|
||
'plus_mem_integral' => array('required' => false, 'type' => 'number',),
|
||
'store_mem_integral' => array('required' => false, 'type' => 'number',),
|
||
'goods_brand_id' => array('required' => false, 'type' => 'number',),
|
||
'goods_yieldly_id' => array('required' => false, 'type' => 'number',),
|
||
'plu_code' => array('required' => false, 'type' => 'number', 'min' => 1, 'max' => 9999),
|
||
);
|
||
if (!$goods['id']) {
|
||
$verifyParam['goods_num'] = array('required' => false, 'type' => 'number', 'step' => $goods['pricing_method'] == 1 ? 0 : 3, 'min' => 0);
|
||
$verifyParam['purchase_price'] = array('required' => $goods['goods_num'] > 0 ? true : false, 'type' => 'money',);
|
||
}
|
||
//第三方平台商品编码
|
||
if ($param['platform_type'] == 2 && empty($goods['id']) && $goods['attribute_state'] == 1) {
|
||
$verifyParam['third_goods_code'] = ['required' => true, 'type' => 'string'];
|
||
}
|
||
$CustomValidate = new CustomValidate($this->goods_fields_name);
|
||
$result = $CustomValidate->validate($goods, $verifyParam);
|
||
return callBack(statusCode()[$result['error'] ? 'error' : 'success'], $result['message']);
|
||
}
|
||
|
||
/**
|
||
* 验证传输的规格是否正确,并返回处理过后可直接添加的数组
|
||
* @param $param
|
||
* [
|
||
* platform_type 商户平台类型 1默认系统 2微礼平台
|
||
* ]
|
||
* @return mixed
|
||
* @throws \think\Exception
|
||
*/
|
||
protected function verifyGoodsSku($param)
|
||
{
|
||
$platform_type = $param['platform_type'];
|
||
$store_id = $param['store_id'];
|
||
$merchant_id = $param['merchant_id'];
|
||
$skuList = $param['skuList'];
|
||
$codeArr = $param['codeArr'];
|
||
$numberArr = $param['numberArr'];
|
||
if (empty($skuList) || !is_array($skuList)) {
|
||
return callBack(statusCode()['error'], '请设置商品多规格信息');
|
||
}
|
||
|
||
$sku_attr_length = count($skuList[0]['id']);
|
||
if ($sku_attr_length > 4) {
|
||
return callBack(statusCode()['error'], '最多只能添加四种规格');
|
||
}
|
||
$all_sku_list_id = []; //存储所有的规格ID,用来判断前端传输的数组是否正确
|
||
$skuArrData = []; //存储处理后的规格
|
||
$third_code_arr = []; // 第三方平台的商品编码
|
||
$SkuGoodsModel = new RetailSkuGoodsModel();
|
||
$GoodsModel = new RetailGoodsModel();
|
||
if ($platform_type == 2) {
|
||
$LittleGoodsClass = new \LittleGift\Business\Goods();
|
||
}
|
||
foreach ($skuList as $key => $val) {
|
||
if (count($val['id']) != $sku_attr_length) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格与之前的规格不匹配');
|
||
}
|
||
$oldSku = false;
|
||
if (!empty($val['old_id'])) {
|
||
$skuOldMap = array(
|
||
'id' => $val['old_id'], 'goods_id' => $param['goods_id'], 'state' => 0
|
||
);
|
||
$oldSku = $SkuGoodsModel->getFind($skuOldMap);
|
||
if (empty($oldSku)) return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格信息有误');
|
||
} else {
|
||
//第三方平台商品编码验证
|
||
if ($platform_type == 2) {
|
||
if (empty($val['third_goods_code']) || mb_strlen($val['third_goods_code'], 'UTF-8') > 255) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格的Q3 ERP平台商品编码必传且不能大于255位');
|
||
}
|
||
//判断规格货号是否存在历史判断的数组中
|
||
if (in_array($val['third_goods_code'], $third_code_arr)) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格Q3 ERP平台商品编码已存在');
|
||
}
|
||
$verifyResult = $LittleGoodsClass->verifyQ3Code([
|
||
'merchant_id' => $merchant_id,
|
||
'third_goods_code' => $val['third_goods_code']
|
||
]);
|
||
if ($verifyResult['status'] != 1) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格' . $verifyResult['message']);
|
||
}
|
||
$verifyCode = $LittleGoodsClass->GoodsVerify([
|
||
'merchant_id' => $merchant_id,
|
||
'code_arr' => [$val['third_goods_code']]
|
||
]);
|
||
if ($verifyCode['status'] == 0) {
|
||
return $verifyCode;
|
||
}
|
||
if (!empty($verifyCode['data']['arr_diff'])) {
|
||
return callBack(statusCode()['error'], $val['third_goods_code'] . 'Q3 ERP平台验证失败');
|
||
}
|
||
$third_code_arr[] = $val['third_goods_code'];
|
||
$temp['third_goods_code'] = $val['third_goods_code'];
|
||
}
|
||
}
|
||
if (!$val['sku_goods_number'] || strlen($val['sku_goods_number']) > 17) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格的货号不正确');
|
||
}
|
||
//判断规格货号是否存在历史判断的数组中
|
||
if (in_array($val['sku_goods_number'], $numberArr)) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格货号已存在');
|
||
}
|
||
if (empty($val['old_id']) || (!empty($val['old_id']) && $oldSku['sku_goods_number'] != $val['sku_goods_number'])) {
|
||
//判断规格货号是否存在于该门店的正常规格商品中
|
||
$sku_map = array(
|
||
'store_id' => $store_id,
|
||
'sku_goods_number' => $val['sku_goods_number'],
|
||
'state' => 0,
|
||
);
|
||
$skuInfo = $SkuGoodsModel->getFind($sku_map);
|
||
if ($skuInfo) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格货号已存在');
|
||
}
|
||
}
|
||
|
||
//把规格货号存起来对下一个规格进行验证
|
||
$numberArr[] = $val['sku_goods_number'];
|
||
|
||
//判断规格货号是否存在于该门店的正常普通商品中
|
||
$map = array(
|
||
'store_id' => $store_id,
|
||
'goods_number' => $val['sku_goods_number'],
|
||
'merchant_id' => $merchant_id,
|
||
'status' => array('in', '0,1')
|
||
);
|
||
$goodsInfo = $GoodsModel->getFind($map);
|
||
if ($goodsInfo) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格货号已存在');
|
||
}
|
||
|
||
//判断条码
|
||
if (!empty($val['sku_code'])) {
|
||
if (strlen($val['sku_code']) > 17) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格条码不能大于18位');
|
||
}
|
||
if (in_array($val['sku_code'], $codeArr)) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格商品条码重复');
|
||
}
|
||
|
||
if (empty($val['old_id']) || (!empty($val['old_id']) && $oldSku['sku_code'] != $val['sku_code'])) {
|
||
$map = array(
|
||
'store_id' => $store_id,
|
||
'sku_code' => $val['sku_code'],
|
||
'state' => 0
|
||
);
|
||
//判断规格条码是否存在于该门店的正常规格商品中
|
||
$old = $SkuGoodsModel->getFind($map);
|
||
if ($old) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格商品条码已存在');
|
||
}
|
||
}
|
||
$map = array(
|
||
'store_id' => $store_id,
|
||
'goods_code' => $val['sku_code'],
|
||
'status' => array('in', '0,1')
|
||
);
|
||
$old = $GoodsModel->getFind($map);
|
||
if (!empty($old)) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格商品条码已存在');
|
||
}
|
||
$codeArr[] = $val['sku_code'];
|
||
}
|
||
if ($val['weight_value'] && !verifyNumber($val['weight_value'], 3, 0.001)) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格重量不正确');
|
||
}
|
||
if (empty($val['old_id'])) {
|
||
if ($val['goods_num'] > 0 && $param['serial_number_state'] == 1) {
|
||
return callBack(statusCode()['error'], '开启串号,第' . ($key + 1) . '个规格库存必须采购增加');
|
||
}
|
||
if ($val['goods_num'] && !verifyNumber($val['goods_num'])) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格库存不正确');
|
||
}
|
||
}
|
||
//判断进价
|
||
if ($platform_type != 2 && ($val['goods_num'] > 0 || $val['purchase_price'])) {
|
||
if (!verifyPrice($val['purchase_price'])) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格进价不正确');
|
||
}
|
||
}
|
||
//判断基本价格
|
||
if (($param['retail_state'] == 1 || $val['retail_price']) && !verifyPrice($val['retail_price'])) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格:店内零售价不正确');
|
||
}
|
||
if (($param['online_state'] == 1 || $val['online_price']) && !verifyPrice($val['online_price'])) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格:商城零售价不正确');
|
||
}
|
||
if (($param['store_mem_status'] == 1 || $val['store_mem_price']) && !verifyPrice($val['store_mem_price'])) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格:店内会员价不正确');
|
||
}
|
||
if (($param['shop_mem_status'] == 1 || $val['shop_mem_price']) && !verifyPrice($val['shop_mem_price'])) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格:商城会员价不正确');
|
||
}
|
||
if (($param['plus_mem_status'] == 1 || $val['plus_price']) && !verifyPrice($val['plus_price'])) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格:PLUS会员价不正确');
|
||
}
|
||
|
||
$temp['merchant_id'] = $merchant_id;
|
||
$temp['store_id'] = $store_id;
|
||
$sku_id_list = [];
|
||
$sku_name = [];
|
||
for ($i = 0; $i < $sku_attr_length; $i++) {
|
||
if (!empty($val['id'][$i])) {
|
||
$sku_id_list[] = $val['id'][$i];
|
||
$sku_name[] = $val['name'][$i];
|
||
} else {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '条规格数据的规格信息有误');
|
||
}
|
||
}
|
||
$all_sku_list_id = array_merge($all_sku_list_id, $sku_id_list);
|
||
|
||
$temp['name'] = implode(',', $sku_name);
|
||
$temp['sku_id_list'] = implode(',', $sku_id_list);
|
||
if ($param['showpurch_price'] == 1 && empty($val['old_id'])) {
|
||
$temp['purchase_price'] = $val['purchase_price'] ? $val['purchase_price'] : null;
|
||
}
|
||
if (!empty($val['retail_price'])) {
|
||
$temp['retail_price'] = $val['retail_price'];
|
||
}
|
||
if (!empty($val['online_price'])) {
|
||
$temp['online_price'] = $val['online_price'];
|
||
}
|
||
if (!empty($val['plus_price'])) {
|
||
$temp['plus_price'] = $val['plus_price']; //plus会员价
|
||
}
|
||
$temp['goods_num'] = $val['goods_num'] ? $val['goods_num'] : 0;
|
||
|
||
if (($param['guide_royalty_custom_state'] == 1 || $val['guide_royalty_price']) && !verifyPrice($val['guide_royalty_price'])) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格线下导购提成有误');
|
||
}
|
||
if (($param['guide_royalty_custom_state'] == 1 || $val['guide_royalty_online_price']) && !verifyPrice($val['guide_royalty_online_price'])) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格线上导购提成有误');
|
||
}
|
||
|
||
$temp['weight_value'] = $val['weight_value'] ? $val['weight_value'] : null;
|
||
$temp['shop_mem_price'] = $val['shop_mem_price'] ? $val['shop_mem_price'] : null;
|
||
$temp['store_mem_price'] = $val['store_mem_price'] ? $val['store_mem_price'] : null;
|
||
$temp['add_time'] = time();
|
||
$temp['status'] = $val['status'] == 1 ? 1 : 0;
|
||
$temp['state'] = 0;
|
||
$temp['sku_goods_number'] = $val['sku_goods_number'];
|
||
$temp['sku_code'] = $val['sku_code'];
|
||
$temp['store_id'] = $store_id;
|
||
$temp['goods_img_id'] = $val['goods_img_id'];
|
||
$temp['id'] = $val['old_id'];
|
||
$temp['sku_num'] = 1;
|
||
$temp['more_num'] = $val['more_num'] ? $val['more_num'] : null;
|
||
$temp['less_num'] = $val['less_num'] ? $val['less_num'] : null;
|
||
$temp['guide_royalty_price'] = $val['guide_royalty_price'] ? $val['guide_royalty_price'] : null;
|
||
$temp['guide_royalty_online_price'] = $val['guide_royalty_online_price'] ? $val['guide_royalty_online_price'] : null;
|
||
if ($param['marketing_methods'] == 2 && $param['integral_arrive_cash'] == 1) {
|
||
//自定义积分营销
|
||
$temp['shop_mem_integral'] = $val['shop_mem_integral'] ? $val['shop_mem_integral'] : null; //店内会员价+积分
|
||
$temp['store_mem_integral'] = $val['store_mem_integral'] ? $val['store_mem_integral'] : null; //商城会员价+积分
|
||
$temp['plus_mem_integral'] = $val['plus_mem_integral'] ? $val['plus_mem_integral'] : null; //PLUS会员价+积分
|
||
}
|
||
$temp['plu_code'] = $val['plu_code'] ? $val['plu_code'] : null;
|
||
$skuArrData[] = $temp;
|
||
unset($temp);
|
||
}
|
||
//第三方编码验证
|
||
if ($platform_type == 2 && !empty($third_code_arr)) {
|
||
$LittleGoodsClass = new \LittleGift\Business\Goods();
|
||
$verifyCode = $LittleGoodsClass->GoodsVerify([
|
||
'merchant_id' => $merchant_id,
|
||
'code_arr' => $third_code_arr
|
||
]);
|
||
if ($verifyCode['status'] == 0) {
|
||
return $verifyCode;
|
||
}
|
||
if (!empty($verifyCode['data']['arr_diff'])) {
|
||
return callBack(statusCode()['error'], $verifyCode['data']['arr_diff'][0], 'Q3 ERP平台商品编码验证失败');
|
||
}
|
||
}
|
||
//去重
|
||
$all_sku_list_id = array_unique($all_sku_list_id);
|
||
|
||
//获取属性数量进行判断,是否与规格值属性一致
|
||
$SkuListModel = new RetailSkuListModel();
|
||
$attr_count = $SkuListModel->getAttrCount($merchant_id, $all_sku_list_id);
|
||
if ($attr_count != $sku_attr_length) {
|
||
return callBack(statusCode()['error'], '您添加的规格信息有误');
|
||
}
|
||
return callBack(statusCode()['success'], '规格验证通过', $skuArrData);
|
||
}
|
||
}
|