1299 行
60 KiB
PHP
可执行文件
1299 行
60 KiB
PHP
可执行文件
<?php
|
||
|
||
namespace Common\Business;
|
||
|
||
use Common\Model\ImageGalleryModel;
|
||
use Common\Model\MGoodsBannerModel;
|
||
use Common\Model\MGoodsModel;
|
||
use Common\Model\PurchaseGoodsModel;
|
||
use Common\Model\RetailGoodsClassModel;
|
||
use Common\Model\RetailGoodsModel;
|
||
use Common\Model\RetailMerchantConfigModel;
|
||
use Common\Model\RetailMgoodsModel;
|
||
use Common\Model\RetailSkuListModel;
|
||
use Common\Model\SaleMGoodsModel;
|
||
use Common\Model\SkuMGoodsModel;
|
||
use Common\Model\SkuMGoodsViewModel;
|
||
use Common\Model\WarehousingGoodsModel;
|
||
use Common\Validate\CustomValidate;
|
||
|
||
//[1.8.78]
|
||
|
||
/**
|
||
* 操作商户商品档案类
|
||
* Class OperateGoods
|
||
* @package Common\Business
|
||
*/
|
||
class OperateMGoods
|
||
{
|
||
private $merchant_id; //商户ID
|
||
|
||
/**
|
||
* 商户商品字段名称
|
||
* @var array
|
||
*/
|
||
protected $goods_fields_name = array(
|
||
'supplier_id' => '供货商',
|
||
'goods_name' => '商品名称',
|
||
'good_number' => '商品货号',
|
||
'goods_code' => '商品条码',
|
||
'goods_class_id' => '商品分类',
|
||
'subheading' => '商品副标题',
|
||
'goods_num' => '商品库存',
|
||
'purch_price' => '商品进价',
|
||
'retail_price' => '店内零售价',
|
||
'online_price' => '商城零售价',
|
||
'shop_mem_status' => '商城会员价开启状态',
|
||
'shop_mem_price' => '商城会员价',
|
||
'plus_price' => 'plus会员价',
|
||
'plus_mem_status' => '是否开启plus会员',
|
||
'store_mem_status' => '店内会员价开启状态',
|
||
'store_mem_price' => '店内会员价',
|
||
'company' => '商品单位',
|
||
'weight_value' => '商品重量',
|
||
'specifications' => '商品规格',
|
||
'goods_order' => '商品排序',
|
||
'more_num' => '库存超量',
|
||
'less_num' => '库存预警',
|
||
'issellonline' => '商城出售状态',
|
||
'vip_online_state' => '商城会员折扣',
|
||
'vip_retail_state' => '门店会员折扣',
|
||
'can_exchange_weigh' => '计价方式',
|
||
'refund_state' => '是否允许退款',
|
||
'exchange_state' => '是否允许换货',
|
||
'status' => '商品上下架状态',
|
||
'attribute' => '多规格状态',
|
||
'shop_mem_integral' => '商城会员价换购积分',
|
||
'plus_mem_integral' => 'PLUS会员价换购积分',
|
||
'store_mem_integral' => '店内会员价换购积分',
|
||
'goods_brand_id' => '商品品牌',
|
||
'goods_yieldly_id' => '商品产地',
|
||
);
|
||
|
||
/**
|
||
* 初始化商户ID
|
||
* OperateMGoods constructor.
|
||
* @param null $merchant_id
|
||
*/
|
||
public function __construct($merchant_id = null)
|
||
{
|
||
if (!$merchant_id) {
|
||
return callBack(statusCode()['error'], '缺少商户ID');
|
||
}
|
||
$this->merchant_id = $merchant_id;
|
||
}
|
||
|
||
|
||
/**
|
||
* 获取商品详情进行编辑
|
||
* @param $param
|
||
* @return mixed
|
||
*/
|
||
public function getMGoodsDetails($param)
|
||
{
|
||
$goods_id = $param['goods_id']; //商品ID
|
||
if (!$goods_id) {
|
||
return callBack(statusCode()['error'], '缺少商品ID');
|
||
}
|
||
|
||
//1.查询商品信息
|
||
$GoodsModel = new RetailMgoodsModel();
|
||
$map = array(
|
||
'id' => $goods_id,
|
||
'merchantid' => $this->merchant_id,
|
||
'status' => array('in', '0,1'),
|
||
);
|
||
$goods = $GoodsModel->getFind($map);
|
||
if (!$goods) {
|
||
return callBack(statusCode()['error'], '商品不存在');
|
||
}
|
||
|
||
//2.获取封面图
|
||
$ImageGalleryModel = new ImageGalleryModel();
|
||
if (!empty($goods['goods_image_id'])) {
|
||
$goods['goods_img'] = $ImageGalleryModel->getFieldPath(array('id' => $goods['goods_image_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['goods_code'] = $goods['goods_code'] ? $goods['goods_code'] : '';
|
||
|
||
//4.获取商品库存
|
||
$SaleMGoodsModel = new SaleMGoodsModel();
|
||
$where = array(
|
||
'merchant_id' => $this->merchant_id,
|
||
'goods_id' => $goods_id,
|
||
'status' => array('in', '0,1'),
|
||
);
|
||
if ($goods['attribute'] == 2) {
|
||
$goods['goods_num'] = $SaleMGoodsModel->getSum($where, "goods_num");
|
||
} else {
|
||
$goods['goods_num'] = $SaleMGoodsModel->getFindField($where, "goods_num");
|
||
}
|
||
$goods['goods_num'] = floatval($goods['goods_num']);
|
||
|
||
//5.处理商品分类
|
||
$GoodsClassifyApi = new GoodsClassify();
|
||
$class_list = array();
|
||
$GoodsClassifyApi->getAppointGoodsClassList($goods['goods_class_id'], $class_list);
|
||
|
||
//6.获取轮播图
|
||
$BannerApi = new Banner();
|
||
$banner = $BannerApi->getMGoodsBanner($goods_id, true);
|
||
|
||
return callBack(statusCode()['success'], '获取成功', array(
|
||
'goods' => $goods, //商品信息
|
||
'bannerList' => $banner, //商品轮播图
|
||
'goods_class' => $class_list, //商品选择的分类列表
|
||
));
|
||
}
|
||
|
||
/**
|
||
* 获取商户添加商品的一些基本配置及限制
|
||
* @return array
|
||
*/
|
||
public function getEditGoodsConfig()
|
||
{
|
||
//商户积分设置
|
||
$MerchantConfigModel = new RetailMerchantConfigModel();
|
||
$config = $MerchantConfigModel->getFind(array('merchant_id' => $this->merchant_id));
|
||
return array(
|
||
'integral_arrive_cash' => $config['integral_arrive_cash'] ? $config['integral_arrive_cash'] : 0,
|
||
'marketing_methods' => $config['marketing_methods'] ? $config['marketing_methods'] : 1,
|
||
);
|
||
}
|
||
|
||
|
||
/**
|
||
* 商户新增、编辑商品
|
||
* @param $param
|
||
* [
|
||
* platform_type 商户平台类型 1默认系统 2微礼平台
|
||
* ]
|
||
* @return mixed
|
||
* @throws \think\Exception
|
||
*/
|
||
public function editMerchantGoods($param)
|
||
{
|
||
$platform_type = $param['platform_type'] ? $param['platform_type'] : 1;
|
||
$merchant_id = $this->merchant_id; //商户ID
|
||
$user_type = $param['user_type']; //用户类型 1合伙人端 2代理商端 3商户端 4门店端 6收银员
|
||
if (!$merchant_id || !$user_type) {
|
||
return callBack(statusCode()['error'], '缺少必要参数,详情请见data', array(
|
||
'merchant_id' => $merchant_id,
|
||
'user_type' => $user_type,
|
||
));
|
||
}
|
||
|
||
//1.验证是否创建供给仓
|
||
$WarehousingRecord = new WarehousingRecord();
|
||
$warehouse = $WarehousingRecord->getMerchantSaleWarehouse([
|
||
'merchant_id' => $merchant_id,
|
||
]);
|
||
if (empty($warehouse)) {
|
||
return callBack(statusCode()['error'], "请先创建供给仓");
|
||
}
|
||
$warehouse_id = $warehouse['id'];
|
||
|
||
//获取商户操作商品的一些基本配置
|
||
$config = $this->getEditGoodsConfig([
|
||
'merchant_id' => $merchant_id,
|
||
]);
|
||
|
||
$data = $param['goodsInfo'];
|
||
foreach ($data as $k => $v) {
|
||
if (!is_array($v)) $data[$k] = trim($v, ' ');
|
||
}
|
||
$item = array(
|
||
'merchant_id' => $merchant_id,
|
||
'goods_id' => $data['id'],
|
||
'attribute' => $data['attribute'],
|
||
'retail_state' => $data['retail_state'],
|
||
'issellonline' => $data['issellonline'],
|
||
'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'],
|
||
'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['can_exchange_weigh'] == 2) {
|
||
return callBack(statusCode()['error'], '开启串码功能后,商品不能开启称重');
|
||
}
|
||
}
|
||
$goodsApi = new \Common\Business\Goods(); //商品类
|
||
|
||
//判断货号是否重复
|
||
$verifyNumber = $goodsApi->jumpMerGoodsNumberOrCode([
|
||
'value' => $goods['good_number'],
|
||
'merchant_id' => $merchant_id,
|
||
'type' => 1,
|
||
'goods_id' => $data['id'],
|
||
]);
|
||
if ($verifyNumber['status'] != 1) {
|
||
return $verifyNumber;
|
||
}
|
||
|
||
//判断条码是否重复
|
||
if (!empty($goods['goods_code'])) {
|
||
$verifyCode = $goodsApi->jumpMerGoodsNumberOrCode([
|
||
'value' => $goods['goods_code'],
|
||
'merchant_id' => $merchant_id,
|
||
'type' => 2,
|
||
'goods_id' => $data['id'],
|
||
]);
|
||
if ($verifyCode['status'] != 1) {
|
||
return $verifyCode;
|
||
}
|
||
}
|
||
|
||
//验证第三方平台商品编码
|
||
if ($platform_type == 2 && empty($goods['id']) && $goods['attribute'] == 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['can_exchange_weigh'] == 2 && $goods['attribute'] == 2) {
|
||
return callBack(statusCode()['error'], '规格与称重不能同时开启');
|
||
}
|
||
|
||
//5.处理称重商品重量
|
||
if ($goods['can_exchange_weigh'] == 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_image_id'] = $codeImage['goods_image']['id']; //商品封面图
|
||
}
|
||
}
|
||
|
||
$skuList = array(); //多规格
|
||
if ($goods['attribute'] == 2) {
|
||
$goods['third_goods_code'] = '';
|
||
$item['codeArr'] = $goods['goods_code'] ? [$goods['goods_code']] : [];
|
||
$item['numberArr'] = $goods['good_number'] ? [$goods['good_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 RetailMgoodsModel();
|
||
$PinYinClass = new PinYin();
|
||
$updateTime = 0; //存储商品是否被更新,若是编辑商品被更新,则修改门店被调拨的商品状态
|
||
if (empty($oldGoods)) {
|
||
if (!$goods['simple_spelling']) {
|
||
$goods['simple_spelling'] = $PinYinClass->strChangePin($goods['goods_name']); //获取商品名称简拼
|
||
}
|
||
$goods_id = $GoodsModel->addOrder($goods);
|
||
} else {
|
||
unset($goods['purch_price']);
|
||
unset($goods['third_goods_code']);
|
||
if (!$goods['simple_spelling']) {
|
||
$goods['simple_spelling'] = $PinYinClass->strChangePin($goods['goods_name']); //获取商品名称简拼
|
||
}
|
||
$update = $GoodsModel->updateOrder(array('id' => $oldGoods['id']), $goods);
|
||
$goods_id = $oldGoods['id'];
|
||
if ($update) $updateTime++;
|
||
}
|
||
if ($goods_id) {
|
||
$SaleWarehouseData = $goods;
|
||
$SaleWarehouseData['goods_id'] = $goods_id;
|
||
$SaleWarehouseData['merchant_id'] = $goods['merchantid'];
|
||
$SaleWarehouseData['warehouse_id'] = $warehouse_id;
|
||
$SaleWarehouseData['goods_number'] = $goods['good_number'];
|
||
$SaleWarehouseData['pricing_method'] = $goods['can_exchange_weigh'];
|
||
$SaleWarehouseData['attribute_state'] = $goods['attribute'];
|
||
if ($goods['attribute'] == 1) {
|
||
$SaleWarehouseData['purchase_price'] = $goods['purch_price'];
|
||
if (empty($oldGoods) || $goods['attribute'] != $oldGoods['attribute']) {
|
||
$this->addSaleGoods($SaleWarehouseData, 1); //商品添加到销售库
|
||
} else {
|
||
$this->addSaleGoods($SaleWarehouseData, 2); //商品销售库修改
|
||
}
|
||
} else {
|
||
$sku_id_str = [];
|
||
$SkuGoodsModel = new SkuMGoodsModel();
|
||
//处理规格
|
||
foreach ($skuList as $k => &$v) {
|
||
$v['mgoods_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['purch_price'];
|
||
if ($v['id']) {
|
||
//编辑规格
|
||
unset($v['purch_price']);
|
||
unset($v['third_goods_code']);
|
||
$update = $SkuGoodsModel->updateOrder(array('id' => $v['id']), $v);
|
||
if ($update) $updateTime++;
|
||
$SaleWarehouseData['sku_id'] = $v['id'];
|
||
$this->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'];
|
||
$this->addSaleGoods($SaleWarehouseData, 1);
|
||
unset($SaleWarehouseData['add_time']);
|
||
if (!empty($oldGoods)) $updateTime++;
|
||
}
|
||
}
|
||
//修改旧规格(规格重置)、或被删除的规格的状态
|
||
if (!empty($sku_id_str)) {
|
||
$map = array(
|
||
'goods_id' => $goods_id,
|
||
'sku_id' => array('not in', $sku_id_str),
|
||
);
|
||
$SaleMGoodsModel = new SaleMGoodsModel();
|
||
$SaleMGoodsModel->updateData($map, array('status' => 2));
|
||
$WarehousingGoodsModel = new WarehousingGoodsModel();
|
||
$WarehousingGoodsModel->updateData($map, array('surplus_num' => 0));
|
||
$map = array(
|
||
'mgoods_id' => $goods_id,
|
||
'id' => array('not in', $sku_id_str),
|
||
'state' => 0,
|
||
);
|
||
$update = $SkuGoodsModel->updateOrder($map, array('state' => 1));
|
||
if ($update) $updateTime++;
|
||
}
|
||
}
|
||
|
||
//处理轮播图
|
||
$bannerList = $data['bannerList'];
|
||
|
||
$banner_id_str = [];
|
||
$BannerModel = new MGoodsBannerModel();
|
||
if (!empty($bannerList)) {
|
||
foreach ($bannerList as $kB => $vB) {
|
||
$addBanner = array(
|
||
'image_id' => $vB['image_id'],
|
||
'image' => $vB['image'],
|
||
);
|
||
if (empty($vB['id'])) {
|
||
$addBanner['merchantid'] = $merchant_id;
|
||
$addBanner['mgoods_id'] = $goods_id;
|
||
$addBanner['addtime'] = time();
|
||
$add = $BannerModel->addOrder($addBanner); //添加轮播图
|
||
if (!empty($oldGoods)) $updateTime++;
|
||
$banner_id_str[] = $add;
|
||
} else {
|
||
$banner_id_str[] = $vB['id'];
|
||
}
|
||
}
|
||
}
|
||
$map = array(
|
||
'mgoods_id' => $goods_id,
|
||
);
|
||
if (!empty($banner_id_str)) {
|
||
$map['id'] = array('not in', $banner_id_str);
|
||
} else {
|
||
$map['id'] = array('not in', '0');
|
||
}
|
||
$del = $BannerModel->deleteOrder($map); //删除轮播图
|
||
if ($del) $updateTime++;
|
||
}
|
||
|
||
if ($updateTime > 0) {
|
||
//更新门店商品
|
||
$this->updateStoreGoodsSyncState($goods_id);
|
||
}
|
||
|
||
//操作日志记录
|
||
|
||
// 防止小助手操作重复添加日志
|
||
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 $goods_id
|
||
* @return mixed
|
||
*/
|
||
public function updateStoreGoodsSyncState($goods_id)
|
||
{
|
||
$GoodsModel = new RetailGoodsModel();
|
||
$res = $GoodsModel->updateOrder(['m_goods_id' => ['in', $goods_id]], ['sync_state' => 0]);
|
||
return $res;
|
||
}
|
||
|
||
|
||
/**
|
||
* 商户供给仓库商品信息新增与编辑
|
||
* @param $goods
|
||
* @param $type
|
||
* @return mixed
|
||
*/
|
||
public function addSaleGoods($goods, $type)
|
||
{
|
||
$SaleGoodsClass = new SaleGoodsOperation();
|
||
$result = $SaleGoodsClass->addSaleGoods([
|
||
'user_type' => 3,
|
||
'goods_info' => $goods,
|
||
'type' => $type
|
||
]);
|
||
return $result;
|
||
}
|
||
|
||
/**
|
||
* 验证门店商品是否可以进行编辑、修改规格状态
|
||
* @param $param
|
||
* ['goods_id']商品ID
|
||
* ['attribute']规格状态
|
||
* ['issellonline']商城出售
|
||
* @return mixed
|
||
*/
|
||
public function verifyEditGoods($param)
|
||
{
|
||
$goods_id = $param['goods_id'];
|
||
|
||
//1. 验证商品是否存在
|
||
$GoodsModel = new RetailMgoodsModel();
|
||
$oldGoods = $GoodsModel->getFind(array('id' => $goods_id, 'merchantid' => $this->merchant_id, 'status' => array('neq', 2)));
|
||
if (empty($oldGoods)) {
|
||
return callBack(statusCode()['error'], '商品不存在');
|
||
}
|
||
//2.判断商品规格状态是否有变动 有采购记录和入库记录的商品不得对规格进行开启关闭操作
|
||
// 注意:只含有初始化库存的商品可进行开启关闭规格操作
|
||
if ($oldGoods['attribute'] != $param['attribute']) {
|
||
$PurchaseGoodsModel = new PurchaseGoodsModel();
|
||
$WarehousingGoodsModel = new WarehousingGoodsModel();
|
||
$purchase_goods = $PurchaseGoodsModel->getCount(array('goods_id' => $oldGoods['id'], 'purchase_num' => array('gt', 0)));
|
||
$warehouse_goods = $WarehousingGoodsModel->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.删除初始化库存
|
||
$SaleMGoodsModel = new SaleMGoodsModel();
|
||
$success = $SaleMGoodsModel->deleteData(array('goods_id' => $oldGoods['id']));
|
||
if (!$success) {
|
||
return callBack(statusCode()['error'], '初始化库存删除失败,请稍后重试');
|
||
}
|
||
}
|
||
if ($oldGoods['serial_number_state'] != $param['serial_number_state']) {
|
||
return callBack(statusCode()['error'], '串号状态不能修改');
|
||
}
|
||
return callBack(statusCode()['success'], '可对商品进行正常编辑操作', $oldGoods);
|
||
}
|
||
|
||
/**
|
||
* 接收商品请求参数
|
||
* @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 (empty($data['id'])) {
|
||
$goods['purch_price'] = $data['purch_price'] ? $data['purch_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['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['simple_spelling'] = $data['simple_spelling'] ? $data['simple_spelling'] : ''; //简拼
|
||
$goods['issellonline'] = $data['issellonline']; //是否在商城出售
|
||
$goods['retail_state'] = $data['retail_state']; //是否在店内出售
|
||
$goods['serial_number_state'] = $data['serial_number_state'] ? $data['serial_number_state'] : 0; //串号状态1开启 0关闭
|
||
$goods['vip_online_state'] = $data['vip_online_state']; //商城会员折扣
|
||
$goods['vip_retail_state'] = $data['vip_retail_state']; //门店会员折扣
|
||
$goods['can_exchange_weigh'] = $data['can_exchange_weigh']; //是否称重 1:不称重 2:称重
|
||
$goods['status'] = $data['status']; //商品状态 0上架 1下架 2删除
|
||
$goods['attribute'] = $data['attribute']; //是否开启规格
|
||
$goods['good_number'] = $data['good_number'] ? $data['good_number'] : ''; //商品货号
|
||
$goods['goods_code'] = $data['goods_code'] ? $data['goods_code'] : ''; //商品条码
|
||
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['goods_image_id'] = $data['goods_image_id'] ? $data['goods_image_id'] : null; //商品封面图
|
||
|
||
$goods['details'] = htmlspecialchars_decode($data['details']); //商品详情
|
||
if (empty($data['id'])) {
|
||
$goods['addtime'] = time();
|
||
}
|
||
$goods['video_id'] = $data['video_id'] ? $data['video_id'] : null; //商品视频id
|
||
$goods['merchantid'] = $this->merchant_id; //商户id
|
||
$goods['third_goods_code'] = $goods['attribute'] == 1?($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',),
|
||
'good_number' => array('required' => true, 'type' => 'string', 'maxLen' => 17),
|
||
'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['issellonline'] == 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',),
|
||
'can_exchange_weigh' => array('required' => false, 'type' => 'string', 'in' => [1, 2]),
|
||
'company' => array('required' => $goods['can_exchange_weigh'] == 2 ? true : false, 'type' => 'string', 'in' => $goods['can_exchange_weigh'] == 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['can_exchange_weigh'] == 1 ? 0 : 3, 'min' => 0),
|
||
'less_num' => array('required' => false, 'type' => 'number', 'step' => $goods['can_exchange_weigh'] == 1 ? 0 : 3, 'min' => 0),
|
||
'issellonline' => array('required' => false, 'in' => [0, 1]),
|
||
'vip_online_state' => array('required' => false, 'type' => 'string', 'in' => [0, 1]),
|
||
'vip_retail_state' => array('required' => false, 'type' => 'string', 'in' => [0, 1]),
|
||
'status' => array('required' => false, 'type' => 'string', 'in' => [0, 1]),
|
||
'attribute' => array('required' => false, 'type' => 'string', 'in' => [1, 2]),
|
||
'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',),
|
||
);
|
||
if (!$goods['id']) {
|
||
$verifyParam['goods_num'] = array('required' => false, 'type' => 'number', 'step' => $goods['can_exchange_weigh'] == 1 ? 0 : 3, 'min' => 0);
|
||
$verifyParam['purch_price'] = array('required' => $goods['goods_num'] > 0 ? true : false, 'type' => 'money',);
|
||
}
|
||
//第三方平台商品编码验证
|
||
if ($param['platform_type'] == 2 && empty($goods['id']) && $goods['attribute'] == 1) {
|
||
$verifyParam['third_goods_code'] = array('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'];
|
||
$merchant_id = $this->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 SkuMGoodsModel();
|
||
$GoodsModel = new RetailMgoodsModel();
|
||
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'], 'mgoods_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(
|
||
'merchantid' => $merchant_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(
|
||
'merchantid' => $merchant_id,
|
||
'good_number' => $val['sku_goods_number'],
|
||
'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(
|
||
'merchantid' => $merchant_id,
|
||
'sku_code' => $val['sku_code'],
|
||
'state' => 0
|
||
);
|
||
//判断规格条码是否存在于该门店的正常规格商品中
|
||
$old = $SkuGoodsModel->getFind($map);
|
||
if ($old) {
|
||
return callBack(statusCode()['error'], '第' . ($key + 1) . '个规格商品条码已存在');
|
||
}
|
||
}
|
||
$map = array(
|
||
'merchantid' => $merchant_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 ($val['goods_num'] > 0 || $val['purch_price']) {
|
||
if (!verifyPrice($val['purch_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['issellonline'] == 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['merchantid'] = $merchant_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 (empty($val['old_id'])) {
|
||
$temp['purch_price'] = $val['purch_price'] ? $val['purch_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;
|
||
|
||
$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['addtime'] = 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['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;
|
||
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会员价+积分
|
||
}
|
||
$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);
|
||
}
|
||
|
||
|
||
/**
|
||
* 批量修改商品的某个字段值
|
||
* @param $param
|
||
* $param['merchant_id'] 商户ID
|
||
* $param['user_type'] 用户类型 3商户 4门店 6收银员
|
||
* $param['operate_id'] 操作用户的ID
|
||
* $param['key'] 操作的字段
|
||
* $param['value'] 操作字段的值
|
||
* $param['goodsIds'] 操作的商品
|
||
* @return mixed
|
||
*/
|
||
public function batchOperateGoods($param)
|
||
{
|
||
//仅支持修改的字段名列表
|
||
$keyArr = array(
|
||
'status',
|
||
'retail_state',
|
||
'online_state',
|
||
'vip_retail_state',
|
||
'vip_online_state',
|
||
'goods_class_id',
|
||
'guide_royalty_state',
|
||
);
|
||
if (
|
||
!$param['merchant_id'] || !$param['operate_id'] || !$param['user_type']
|
||
|| !in_array($param['user_type'], array(3, 4, 6))
|
||
|| empty($param['goodsIds']) || !isset($param['value'])
|
||
|| !$param['key'] || !in_array($param['key'], $keyArr)
|
||
) {
|
||
return callBack(statusCode()['error'], '请求参数有误,详情请见data', array(
|
||
'store_id' => $param['merchant_id'],
|
||
'user_type' => $param['user_type'],
|
||
'operate_id' => $param['operate_id'],
|
||
'key' => $param['key'],
|
||
'value' => $param['value'],
|
||
'goodsIds' => $param['goodsIds'],
|
||
));
|
||
}
|
||
switch ($param['key']) {
|
||
case 'online_state':
|
||
$param['key'] = 'issellonline';
|
||
case 'status':
|
||
case 'retail_state':
|
||
case 'vip_retail_state':
|
||
case 'vip_online_state':
|
||
$stateValue = [0, 1];
|
||
if (!in_array($param['value'], $stateValue)) {
|
||
return callBack(statusCode()['error'], '参数值有误');
|
||
}
|
||
break;
|
||
case 'goods_class_id':
|
||
if (!verifyNumber($param['value'])) {
|
||
return callBack(statusCode()['error'], '商品分类为必选');
|
||
}
|
||
break;
|
||
default:
|
||
}
|
||
$MGoodsModel = new RetailMgoodsModel();
|
||
|
||
//修改的商品的条件
|
||
$map = array(
|
||
'merchantid' => $param['merchant_id'], //商户ID
|
||
'status' => array('neq', '2'), //商品状态不为删除
|
||
'id' => array('in', $param['goodsIds']), //修改的商品ID列表
|
||
);
|
||
|
||
//更新的字段信息
|
||
$save = array(
|
||
$param['key'] => is_array($param['value']) ? implode(',', $param['value']) : $param['value'],
|
||
);
|
||
|
||
$update = $MGoodsModel->updateOrder($map, $save);
|
||
if ($update) {
|
||
//更新库存状况表
|
||
//目前仅有商品分类、商品上下架状态
|
||
if (in_array($param['key'], ['goods_class_id', 'status'])) {
|
||
$SaleGoodsModel = new SaleMGoodsModel();
|
||
$map = [
|
||
'merchant_id' => $param['merchant_id'],
|
||
'goods_id' => array('in', $param['goodsIds']),
|
||
];
|
||
$SaleGoodsModel->updateData($map, [$param['key'] => $param['value']]);
|
||
}
|
||
//更新门店商品同步字段信息
|
||
$this->updateStoreGoodsSyncState($param['goodsIds']);
|
||
|
||
return callBack(statusCode()['success'], '保存成功');
|
||
} else {
|
||
return callBack(statusCode()['error'], '保存失败,请检查是否修改');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取商品列表
|
||
* @param $param
|
||
* [
|
||
* platform_type 商户平台类型 1默认系统 2微礼平台
|
||
* ]
|
||
* @return mixed
|
||
*/
|
||
public function getMerGoodsList($param)
|
||
{
|
||
$t1 = mSecTime();
|
||
$platform_type = $param['platform_type'] ? $param['platform_type'] : 1;
|
||
$merchant_id = $param['merchant_id'];
|
||
$page = $param['page'];
|
||
$limit = $param['limit'];
|
||
$keyword = $param['keyword'];
|
||
$keyword_type = $param['keyword_type'];
|
||
$can_exchange_weigh = $param['can_exchange_weigh'];
|
||
$condition_name = $param['condition_name']; //排序规则关键词
|
||
$order_type = $param['order_type']; //排序规则
|
||
//按照商品类别搜索
|
||
$person1 = $param['person1'];
|
||
$person2 = $param['person2'];
|
||
$person3 = $param['person3'];
|
||
$issellonline = $param['issellonline']; //商城出售状态
|
||
$attribute_state = $param['attribute_state']; //规格 1无规格 2规格
|
||
$goods_class_ids = getGoodsClass($person1, $person2, $person3); //处理分类
|
||
$status = $param['status'];
|
||
//按条件搜索
|
||
if ($issellonline !== '' && $issellonline !== null && in_array($issellonline, ['0', '1'])) {
|
||
$where['issellonline'] = $issellonline;
|
||
}
|
||
if (in_array($attribute_state, ['1', '2'])) {
|
||
$where['attribute'] = $attribute_state;
|
||
}
|
||
if (!empty($keyword)) {
|
||
$keyword = trim($keyword);
|
||
if (isset($keyword_type)) {
|
||
switch ($keyword_type) {
|
||
case '1':
|
||
$where['good_number|sku_goods_number'] = array('like', '%' . $keyword . '%');
|
||
break;
|
||
case '2':
|
||
$where['goods_code|sku_code'] = array('like', '%' . $keyword . '%');
|
||
break;
|
||
case '3':
|
||
$where['goods_name'] = array('like', '%' . $keyword . '%');
|
||
break;
|
||
}
|
||
} else {
|
||
$where['good_number|goods_code|goods_name|sku_goods_number|sku_code'] = array('like', '%' . $keyword . '%');
|
||
}
|
||
}
|
||
|
||
if ($can_exchange_weigh == 1 || $can_exchange_weigh == 2) {
|
||
$where['can_exchange_weigh'] = $can_exchange_weigh;
|
||
}
|
||
//处理排序规则关键词
|
||
switch ($condition_name) {
|
||
case '2': //货号
|
||
$order = "good_number";
|
||
break;
|
||
case '4': //名称
|
||
$order = "goods_name";
|
||
break;
|
||
default:
|
||
$order = "id";
|
||
}
|
||
$order = $order_type == 2 ? ($order . ' desc') : ($order . ' asc'); //2降序 1升序
|
||
|
||
if ($goods_class_ids) {
|
||
$where['goods_class_id'] = $goods_class_ids;
|
||
}
|
||
$recovery = $param['recovery_type']; //2回收站
|
||
if (!empty($recovery)) {
|
||
$where['status'] = 2;
|
||
} else {
|
||
if (in_array($status, ['0', '1'])) {
|
||
$where['status'] = $status;
|
||
} else {
|
||
$where['status'] = array('in', array(0, 1));
|
||
}
|
||
}
|
||
$where['merchantid'] = $merchant_id;
|
||
//商品列表
|
||
$fields = $param['fields'] ? $param['fields'] : array(
|
||
'id',
|
||
'goods_name',
|
||
'subheading',
|
||
'goods_class_id',
|
||
'good_number',
|
||
'retail_price',
|
||
'plus_price',
|
||
'online_price',
|
||
'vip_online_state',
|
||
'vip_retail_state',
|
||
'add_time',
|
||
'status',
|
||
'merchantid',
|
||
'goods_code',
|
||
'issellonline',
|
||
'can_exchange_weigh',
|
||
'attribute',
|
||
'goods_image_id',
|
||
'shop_mem_price',
|
||
'store_mem_price',
|
||
'purch_price',
|
||
'retail_state',
|
||
'third_goods_code'
|
||
);
|
||
$SkuMGoodsViewModel = new SkuMGoodsViewModel();
|
||
$goods = $SkuMGoodsViewModel->getGroupSelect($where, 'goods.id', $fields, $order, $page . ',' . $limit);
|
||
$goods_count = $param['need_count'] && $goods ? ($SkuMGoodsViewModel->getGroupCount($where, 'goods.id')) : 0;
|
||
$need_img = $param['need_img'] ? true : false;
|
||
$need_goods_num = $param['need_goods_num'] ? true : false;
|
||
$GoodsClassModel = new RetailGoodsClassModel();
|
||
$ImageGalleryModel = new ImageGalleryModel();
|
||
$SaleMGoodsModel = new SaleMGoodsModel();
|
||
$classNameList = array();
|
||
foreach ($goods as &$value) {
|
||
//查询出分类名称
|
||
if (isset($value['goods_class_id'])) {
|
||
if (!empty($classNameList[$value['goods_class_id']])) {
|
||
$value['cate_name'] = $classNameList[$value['goods_class_id']];
|
||
} else {
|
||
$value['cate_name'] = $GoodsClassModel->getClassNamePath($value['goods_class_id']);
|
||
$classNameList[$value['goods_class_id']] = $value['cate_name'];
|
||
}
|
||
}
|
||
|
||
if (isset($value['purch_price'])) $value['purch_price'] = strval(floatval($value['purch_price']));
|
||
if (isset($value['store_mem_price'])) $value['store_mem_price'] = strval(floatval($value['store_mem_price']));
|
||
if (isset($value['plus_price'])) $value['plus_price'] = strval(floatval($value['plus_price']));
|
||
if (isset($value['online_price'])) $value['online_price'] = strval(floatval($value['online_price']));
|
||
if (isset($value['shop_mem_price'])) $value['shop_mem_price'] = strval(floatval($value['shop_mem_price']));
|
||
if (isset($value['integral'])) $value['integral'] = strval(floatval($value['integral']));
|
||
if (isset($value['guide_royalty_price'])) $value['guide_royalty_price'] = strval(floatval($value['guide_royalty_price']));
|
||
if (isset($value['guide_royalty_online_price'])) $value['guide_royalty_online_price'] = strval(floatval($value['guide_royalty_online_price']));
|
||
if (isset($value['more_num'])) $value['more_num'] = strval(floatval($value['more_num']));
|
||
if (isset($value['less_num'])) $value['less_num'] = strval(floatval($value['less_num']));
|
||
if (isset($value['sell_num'])) $value['sell_num'] = strval(floatval($value['sell_num']));
|
||
if (isset($value['production_date'])) $value['production_date'] = $value['production_date'] ? date('Y-m-d H:i:s', $value['production_date']) : '';
|
||
if (isset($value['shelf_life'])) $value['shelf_life'] = $value['shelf_life'] ? date('Y-m-d H:i:s', $value['shelf_life']) : '';
|
||
if (isset($value['weight_value'])) $value['weight_value'] = $value['weight_value'] ? strval(round($value['weight_value'], 3)) : '';
|
||
//判断出商品的状态以及是否允许修改折扣价
|
||
//商品状态
|
||
if ($value['attribute'] == 2) {
|
||
$value['purch_price'] = '规格成本价';
|
||
}
|
||
|
||
if (isset($value['status'])) {
|
||
if ($value['status'] == 0) {
|
||
$value['status_name'] = '正常';
|
||
} elseif ($value['status'] == 1) {
|
||
$value['status_name'] = '已下架';
|
||
} elseif ($value['status'] == 2) {
|
||
$value['status_name'] = '已删除';
|
||
}
|
||
}
|
||
|
||
//是否开启店内会员价
|
||
if (isset($value['store_mem_status'])) {
|
||
if ($value['store_mem_status'] == 1) {
|
||
$value['store_mem_name'] = "开启";
|
||
} else if ($value['store_mem_status'] == 2) {
|
||
$value['store_mem_name'] = "关闭";
|
||
}
|
||
}
|
||
|
||
//plus会员价开关
|
||
if (isset($value['plus_mem_status'])) {
|
||
if ($value['plus_mem_status'] == 1) {
|
||
$value['plus_mem_name'] = "开启";
|
||
} else {
|
||
$value['plus_mem_name'] = "关闭";
|
||
}
|
||
}
|
||
|
||
//商城出售状态
|
||
if (isset($value['issellonline'])) {
|
||
if ($value['issellonline'] == 1) {
|
||
$value['issellonline_name'] = "开启";
|
||
} else {
|
||
$value['issellonline_name'] = "关闭";
|
||
}
|
||
}
|
||
|
||
//是否开启商城会员价
|
||
if (isset($value['shop_mem_status'])) {
|
||
if ($value['shop_mem_status'] == 1) {
|
||
$value['shop_mem_name'] = "开启";
|
||
} else {
|
||
$value['shop_mem_name'] = "关闭";
|
||
}
|
||
}
|
||
|
||
//线下折扣
|
||
if (isset($value['vip_retail_state'])) {
|
||
if ($value['vip_retail_state'] == 1) {
|
||
$value['vip_retail_name'] = "开启";
|
||
} else {
|
||
$value['vip_retail_name'] = "关闭";
|
||
}
|
||
}
|
||
|
||
if (isset($value['vip_online_state'])) {
|
||
if ($value['vip_online_state'] == 1) {
|
||
$value['vip_online_name'] = '开启';
|
||
} else {
|
||
$value['vip_online_name'] = '关闭';
|
||
}
|
||
}
|
||
|
||
//是否称重
|
||
if (isset($value['can_exchange_weigh'])) {
|
||
if ($value['can_exchange_weigh'] == 2) {
|
||
$value['can_exchange_weigh_name'] = "是";
|
||
} else {
|
||
$value['can_exchange_weigh_name'] = "否";
|
||
}
|
||
}
|
||
|
||
if (isset($value['goods_code'])) $value['goods_code'] = $value['goods_code'] ? $value['goods_code'] : '';
|
||
if ($need_img) {
|
||
if ($value['goods_image_id']) {
|
||
$value['goods_img'] = $ImageGalleryModel->getImagePath($value['goods_image_id']);
|
||
} else {
|
||
$value['goods_img'] = '';
|
||
}
|
||
}
|
||
|
||
if (isset($value['good_number'])) $value['good_number'] = $value['good_number'] ? $value['good_number'] : '';
|
||
if (isset($value['subheading'])) $value['subheading'] = $value['subheading'] ? $value['subheading'] : ''; //副标题
|
||
|
||
if ($need_goods_num) {
|
||
if ($platform_type == 2) {
|
||
$value['goods_num'] = 0;
|
||
} else {
|
||
$value['goods_num'] = $SaleMGoodsModel->getSum(['goods_id' => $value['id']], 'goods_num');
|
||
}
|
||
}
|
||
}
|
||
$ret['status'] = 1;
|
||
$ret['code'] = 0;
|
||
$ret['msg'] = $goods ? '获取成功' : '暂无数据';
|
||
$ret['count'] = $goods_count;
|
||
$ret['data'] = $goods;
|
||
$t2 = mSecTime();
|
||
$ret['need_time'] = ($t2 - $t1) / 1000;
|
||
return $ret;
|
||
}
|
||
}
|