'供货商', '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; } }