[ * 商品导出 exportGoods * 商品字段转换 exportTrans * 规格字段转换信息 exportSkuTrans * 导出的查询条件 exportTerm * 导出查询的规格字段 querySkuGoodsFields * 导出查询的商品字段 queryGoodsFields * 导出头部 exportGoodsTitle * ] * 门店商品信息更新记录 goodsEditRecord * 批量修改简拼 batchSimpleSpelling * 生成或修改简拼验证 SimpleSpellingVerify * 一键生成简拼 generateSimpleSpelling * 门店根据商品id集合获取商品名称集合 GoodsNameList * 商户的商品列表(不是单品列表) getMerchantGoodsList * 商户的商品列表(不是单品列表)的where查询条件 getMerchantGoodsListTerm * 门店商品列表(不是单品列表) getStoreGoodsList * 门店商品列表(不是单品列表)的where查询条件 getStoreGoodsListTerm * 商品导入的商品列表 getImportGoodsList * 商户商品导入的商品列表的where条件 getMerchantImportGoodsListTerm * 门店商品导入的商品列表的where条件 getStoreImportGoodsListTerm * 删除商品导入表的商品 importGoodsOut * 添加到导入商品表 ImportGoodsAdd * 上传导入商品文件以及存入导入表 goodsImportOperation * 导入商品表格头部 ImportGoodsTitle * 导入商品验证且区分 ImportGoodsHandle * 导入商品公共验证 ImportGoodsVerify * 无规格商品验证 ImportPlainGoodsVerify * 无规格商品处理 ImportPlainGoodsArr * 规格商品验证 ImportGoodsSkuVerify * 规格商品处理 ImportGoodsSkuArr * 将条码查询出的商品图片存入图片库 basisCodeAddImageGallery * 获取商户与门店条码查询方式 basisUserIdGetCode * 根据商品条码从云库查询商品信息 basisCodeGetGoodsInfo * 获取本地商品库信息 getLocal * 添加本地商品云库 addLocal * 阿里云根据商品条码查询商品信息 aLiYunGoodsInfo * 判断货号或者条码在门店是否可以使用 jumpGoodsNumberOrCode * 判断货号或者条码在商户是否可以使用 jumpMerGoodsNumberOrCode * 按规格|非规格筛选么你单商品列表 comStoreGoods * ] */ class Goods { /** * 商品导出 * @param $param * [ * platform_type 商户平台类型 1默认系统 2微礼平台 * operator_type 操作端 1后台 * user_type 3 商户 4门店 * merchant_id * store_id * directory_name 导出路径 * searchText 搜索内容 * keyword_type 1货号 2条码 3名称 * pricing_method 1非称重 2称重 * condition_name 排序规则关键词 * person1 一级分类 * person2 二级分类 * person3 三级分类 * online_state 商城出售 * attribute_state 1无规格商品 2规格商品 * advance_sale_status 销售模式 0现货销售 1预售模式 * status 上架状态 0上架 1下架 * page 页码 * limit 每页条数 * ] * @return mixed * @throws \PHPExcel_Reader_Exception * @throws \PHPExcel_Writer_Exception */ public function exportGoods($param) { $platform_type = $param['platform_type'] ? $param['platform_type'] : 1; $param['limit'] = 300; $VerifyClass = new VerifyParam(); $verifyResult = $VerifyClass->identityVerify($param); if ($verifyResult['status'] != 1) { return $verifyResult; } unset($verifyResult); if (!in_array($param['attribute_state'], ['1', '2'])) { return callBack(statusCode()['error'], "请选择规格属性"); } $where = $this->exportTerm($param); $fields = $this->queryGoodsFields($param['user_type'], $param['attribute_state']); switch ($param['user_type']) { case 3: //商户 $GoodsModel = new RetailMgoodsModel(); switch ($param['attribute_state']) { case 1: $goodsList = $GoodsModel->GoodsSaleList($where, $fields, 'g.id asc', $param['page'], $param['limit']); break; case 2: $goodsList = $GoodsModel->getSelect($where, $fields, 'id asc', $param['page'] . ',' . $param['limit']); break; } break; case 4: //门店 $GoodsModel = new RetailGoodsModel(); switch ($param['attribute_state']) { case 1: $goodsList = $GoodsModel->getOnlineGoods($where, $fields, 'g.id asc', $param['page'] . ',' . $param['limit']); break; case 2: $goodsList = $GoodsModel->getSelect($where, $fields, 'id asc', $param['page'] . ',' . $param['limit']); break; } break; } unset($where); unset($fields); $goods_arr = []; if (!empty($goodsList)) { $goods_arr = $this->exportTrans([ 'merchant_id' => $param['merchant_id'], 'user_type' => $param['user_type'], 'attribute_state' => $param['attribute_state'], 'goodsList' => $goodsList, 'store_id' => $param['store_id'] ? $param['store_id'] : 0, 'platform_type' => $platform_type ]); } $header_arr = $this->exportGoodsTitle($param['attribute_state'], $platform_type); //头部字段 if ($param['page'] == 1) { switch ($param['attribute_state']) { case 1: $filename = "非规格商品档案导出"; $str = [ '导入说明(勿动)', '1.当开启了店内出售,店内零售价为必填', '2.当开启了商城出售,商城零售价为必填', '3.当开启了店内会员价,店内会员价为必填', '4.当开启了商城会员价,商城会员价为必填', '5.所有价格最多设置两位小数', '6.商品条码长度 1~17位、英文字母、数字或-_ 组合', '7.商品货号长度 1-17位、英文字母、数字或-_ 组合', '8.开启商品称重时,商品库存、超量值、预警值小数点后最多只能有3位;不开启时只能为正整数', '9.称重商品开启时必须输入单位', '10.单位取值范围:KG,kg,G,g,千克,克,斤,市斤', '11.商品设置库存后则商品进价为必填', '12.每个商品的货号和商品条码都不能重复', '导入列表', ]; break; case 2: $filename = "规格商品档案导出"; $str = [ '导入说明(勿动)', '1.当开启了店内出售,店内零售价为必填(规格的店内零售价也必填)', '2.当开启了商城出售,商城零售价为必填(规格的商城零售价也必填)', '3.当开启了店内会员价,店内会员价为必填(规格的店内会员价也必填)', '4.当开启了商城会员价,商城会员价为必填(规格的商城会员价也必填)', '5.所有价格最多设置两位小数', '6.商品条码长度 1~17位、英文字母、数字或-_ 组合', '7.商品货号长度 1-17位、英文字母、数字或-_ 组合', '8.开启商品称重时,商品库存、超量值、预警值小数点后最多只能有3位;不开启时只能为正整数', '9.多规格商品无法进行称重设置', '10.单位取值范围:KG,kg,G,g,千克,克,斤,市斤', '11.商品设置库存后则商品进价为必填', '12.多规格商品的规格货号为必填项且货号与条码不能重复', '导入列表', ]; break; } } if (empty($param['directory_name'])) { switch ($param['user_type']) { case 3: $directory_name = "./Uploads/MerGoodsExcel/{$param['merchant_id']}/"; break; case 4: $directory_name = "./Uploads/storeGoodsExcel/{$param['store_id']}/"; break; } } else { $directory_name = $param['directory_name']; } $parameter = [ 'expTitle' => $filename, 'expCellName' => $header_arr, 'expTableData' => $goods_arr, 'common' => $str, 'directory_name' => $directory_name, 'page' => $param['page'] ]; $ExportClass = new Export(); $result = $ExportClass->generateXLS($parameter); $res = array( 'type' => 1, 'directory_name' => $result['directory_name'], ); if (count($goodsList) < $param['limit']) { $res['type'] = 2; } return callBack(statusCode()['success'], "查询成功", $res); } /** * 商品字段转换 * @param $param * [ * merchant_id * user_type 3商户 4门店 * attribute_state 1无规格 2规格 * goodsList * store_id * platform_type 商户平台类型 1默认系统 2微礼平台 * ] * @return mixed */ public function exportTrans($param) { $user_type = $param['user_type']; $attribute_state = $param['attribute_state']; $GoodsClassify = new GoodsClassify(); $SkuAttributeClass = new SkuAttribute(); $BrandModel = new RetailGoodsBrandModel(); $goodsList = $param['goodsList']; $store_id = $param['store_id']; $platform_type = $param['platform_type']; if ($attribute_state == 2) { switch ($user_type) { case 3: $SkuModel = new SkuMGoodsModel(); break; case 4: $SkuModel = new RetailSkuGoodsModel(); break; } $SkuListModel = new RetailSkuListModel(); $sku_list_name_arr = $SkuListModel->getSelect([ 'state' => 0, 'merchant_id' => $param['merchant_id'] ], 'name,id'); if (!empty($sku_list_name_arr)) { $sku_list_name_arr = array_column($sku_list_name_arr, null, 'id'); } $sku_where['k.state'] = 0; //规格查询条件 $sku_fields = $this->querySkuGoodsFields($param['user_type']); //规格查询字段 } $goods_arr = []; if ($platform_type == 2 && $user_type == 4) { //Q3库存 $code_arr = []; } foreach ($goodsList as $key => &$val) { if (!empty($val['goods_brand_id'])) { $val['goods_brand'] = $BrandModel->getFindField(['id' => $val['goods_brand_id']], 'name'); } $class_arr = $GoodsClassify->getName($val['goods_class_id'], []); $val['class_name_1'] = $class_arr['class_name_1']; $val['class_name_2'] = $class_arr['class_name_2']; $val['class_name_3'] = $class_arr['class_name_3']; if ($platform_type == 2) { if ($user_type == 4 && $attribute_state == 1) { $code_arr[$val['id']] = $val['third_goods_code']; $val['goods_num'] = 0; } else { $val['goods_num'] = '---'; } } else { if ($attribute_state == 2) { $val['goods_num'] = A('Api/Inventory')->goods_num(2, $store_id, $val['id']); } else { $val['goods_num'] = floatval($val['goods_num']); } } if (isset($val['purchase_price'])) floatval($val['purchase_price']); if (isset($val['retail_price'])) floatval($val['retail_price']); if (isset($val['online_price'])) floatval($val['online_price']); if (isset($val['store_mem_price'])) floatval($val['store_mem_price']); if (isset($val['shop_mem_price'])) floatval($val['shop_mem_price']); if (isset($val['more_num'])) floatval($val['more_num']); if (isset($val['less_num'])) floatval($val['less_num']); if (isset($val['weight_value'])) floatval($val['weight_value']); if ($val['retail_state'] == 1) { $val['retail_state_name'] = '是'; } else { $val['retail_state_name'] = '否'; } if ($val['online_state'] == 1) { $val['online_state_name'] = '是'; } else { $val['online_state_name'] = '否'; } if ($val['store_mem_status'] == 1) { $val['store_mem_status_name'] = '是'; } else { $val['store_mem_status_name'] = '否'; } if ($val['shop_mem_status'] == 1) { $val['shop_mem_status_name'] = '是'; } else { $val['shop_mem_status_name'] = '否'; } if ($attribute_state == 1) { if ($val['pricing_method'] == 2) { $val['pricing_method_name'] = '是'; } else { $val['pricing_method_name'] = '否'; } } if ($val['vip_online_state'] == 1) { $val['vip_online_state_name'] = '是'; } else { $val['vip_online_state_name'] = '否'; } if ($val['vip_retail_state'] == 1) { $val['vip_retail_state_name'] = '是'; } else { $val['vip_retail_state_name'] = '否'; } if ($attribute_state == 2) { //规格处理 $attrName = $SkuAttributeClass->basisGoodsIdGetName([ 'user_type' => $param['user_type'], 'goods_id' => $val['id'] ]); for ($i = 0; $i < count($attrName); $i++) { $val["sku_" . ($i + 1)] = $attrName[$i]; } unset($attrName); if ($user_type == 3) { $sku_where['k.mgoods_id'] = $val['id']; } else if ($user_type == 4) { $sku_where['k.goods_id'] = $val['id']; } $sku_info = $SkuModel->getSkuGoodsList($sku_where, $sku_fields, 'k.id asc'); if (!empty($sku_info)) { foreach ($sku_info as $skuKey => $skuVal) { $sku_id_list = explode(',', $skuVal['sku_id_list']); $sku_name_count = count($sku_id_list); for ($i = 0; $i < $sku_name_count; $i++) { $sku_arr["sku_val_" . ($i + 1)] = $sku_list_name_arr[$sku_id_list[$i]]['name']; } if ($platform_type == 2) { //Q3库存 if ($user_type == 4) { $code_arr[$val['id'] . '_' . $skuVal['id']] = $skuVal['third_goods_code']; } else { $sku_arr['sku_goods_num'] = '---'; } } else { $sku_arr['sku_goods_num'] = $skuVal['goods_num']; } if (isset($skuVal['more_num'])) $sku_arr['sku_more_num'] = $skuVal['more_num']; if (isset($skuVal['less_num'])) $sku_arr['sku_less_num'] = $skuVal['less_num']; if (isset($skuVal['purchase_price'])) $sku_arr['sku_purchase_price'] = $skuVal['purchase_price']; if (isset($skuVal['retail_price'])) $sku_arr['sku_retail_price'] = $skuVal['retail_price']; if (isset($skuVal['online_price'])) $sku_arr['sku_online_price'] = $skuVal['online_price']; if (isset($skuVal['store_mem_price'])) $sku_arr['sku_store_mem_price'] = $skuVal['store_mem_price']; if (isset($skuVal['shop_mem_price'])) $sku_arr['sku_shop_mem_price'] = $skuVal['shop_mem_price']; if (isset($skuVal['weight_value'])) $sku_arr['sku_weight_value'] = $skuVal['weight_value']; if (isset($skuVal['third_goods_code'])) $sku_arr['third_goods_code'] = $skuVal['third_goods_code']; $sku_arr['sku_goods_number'] = $skuVal['sku_goods_number']; $sku_arr['sku_code'] = $skuVal['sku_code']; $sku_arr['sku_id'] = $skuVal['id']; $sku_arr['id'] = $val['id']; if ($skuKey == 0) { $new_val = array_merge($val, $sku_arr); $goods_arr[] = $new_val; unset($new_val); } else { $goods_arr[] = $sku_arr; } unset($sku_arr); } } } else { $goods_arr[] = $val; } } unset($class_arr); if ($platform_type == 2 && !empty($code_arr) && $user_type == 4) { $StoreModel = new RetailStoreModel(); $Customer_Codes = $StoreModel->getFindField([ 'id' => $param['store_id'] ], 'third_code'); $GoodsClass = new \LittleGift\Business\Goods(); $thirdResult = $GoodsClass->goodsNumQuery([ 'merchant_id' => $param['merchant_id'], 'type' => 2, 'code_arr' => $code_arr, 'Customer_Codes' => $Customer_Codes ]); if ($thirdResult['status'] == 1) { $stock = $thirdResult['data']; $custom_key = ''; foreach ($goods_arr as $key => &$val) { if ($attribute_state == 2) { $val['sku_goods_num'] = $stock[$val['id'] . '_' . $val['sku_id']]; if (!empty($val['class_name_1'])) { $custom_key = $key; $goods_arr[$custom_key]['goods_num'] += $val['sku_goods_num']; } else { $goods_arr[$custom_key]['goods_num'] += $val['sku_goods_num']; } } else { $val['goods_num'] = $stock[$val['id']] ? $stock[$val['id']] : 0; } } } } return $goods_arr; } /** * 规格字段转换信息 * @param $skuVal * @param $user_type * @param $store_id * @return mixed */ public function exportSkuTrans($skuVal, $user_type, $store_id) { } /** * 导出的查询条件 * @param $param * [ * operator_type 操作端 1后台 * user_type 3 商户 4门店 * merchant_id * store_id * searchText 搜索内容 * keyword_type 1货号 2条码 3名称 * pricing_method 1非称重 2称重 * person1 一级分类 * person2 二级分类 * person3 三级分类 * online_state 商城出售 是否在商城中出售:0,不在1在商城出售 * attribute_state 1无规格商品 2规格商品 * advance_sale_status 销售模式 0现货销售 1预售模式 * status 上架状态 0上架 1下架 * page 页码 * limit 每页条数 * ] * @return mixed */ public function exportTerm($param) { $class_param = [ 'person1' => $param['person1'], 'person2' => $param['person2'], 'person3' => $param['person3'], ]; switch ($param['attribute_state']) { case 1: $GoodsClassify = new GoodsClassify(); $where = $GoodsClassify->getGoodsClassId($class_param, [], 'g.goods_class_id'); $where['g.status'] = ['neq', 2]; switch ($param['user_type']) { case 3: //商户 $where['g.merchantid'] = $param['merchant_id']; $where['g.attribute'] = $param['attribute_state']; if (!empty($param['pricing_method'])) { $where['g.can_exchange_weigh'] = $param['pricing_method']; } if (in_array($param['online_state'], ['0', '1'])) { $where['g.issellonline'] = $param['online_state']; } break; case 4: //门店 $where['g.merchant_id'] = $param['merchant_id']; $where['g.attribute_state'] = $param['attribute_state']; $where['g.store_id'] = $param['store_id']; if (!empty($param['pricing_method'])) { $where['g.pricing_method'] = $param['pricing_method']; } if (in_array($param['online_state'], ['0', '1'])) { $where['g.online_state'] = $param['online_state']; } if (in_array($param['advance_sale_status'], ['0', '1'])) { $where['g.advance_sale_status'] = $param['advance_sale_status']; } break; } if (in_array($param['status'], ['0', '1'])) { $where['g.status'] = $param['status']; } if (!empty($param['searchText'])) { switch ($param['keyword_type']) { case 1: //货号 if ($param['user_type'] == 3) { $where['g.good_number'] = $param['searchText']; } else if ($param['user_type'] == 4) { $where['g.goods_number'] = $param['searchText']; } break; case 2: //条码 $where['g.goods_code'] = $param['searchText']; break; case 3: //名称 $where['g.goods_name'] = array('like', '%' . $param['searchText'] . '%'); break; } } break; case 2: $GoodsClassify = new GoodsClassify(); $where = $GoodsClassify->getGoodsClassId($class_param, [], 'goods_class_id'); $where['status'] = ['neq', 2]; switch ($param['user_type']) { case 3: //商户 $where['merchantid'] = $param['merchant_id']; $where['attribute'] = $param['attribute_state']; if (!empty($param['pricing_method'])) { $where['can_exchange_weigh'] = $param['pricing_method']; } if (in_array($param['online_state'], ['0', '1'])) { $where['issellonline'] = $param['online_state']; } break; case 4: //门店 $where['merchant_id'] = $param['merchant_id']; $where['attribute_state'] = $param['attribute_state']; $where['store_id'] = $param['store_id']; if (!empty($param['pricing_method'])) { $where['pricing_method'] = $param['pricing_method']; } if (in_array($param['online_state'], ['0', '1'])) { $where['online_state'] = $param['online_state']; } if (in_array($param['advance_sale_status'], ['0', '1'])) { $where['advance_sale_status'] = $param['advance_sale_status']; } break; } if (in_array($param['status'], ['0', '1'])) { $where['status'] = $param['status']; } if (!empty($param['searchText'])) { switch ($param['keyword_type']) { case 1: //货号 if ($param['user_type'] == 3) { $where['good_number'] = $param['searchText']; } else if ($param['user_type'] == 4) { $where['goods_number'] = $param['searchText']; } break; case 2: //条码 $where['goods_code'] = $param['searchText']; break; case 3: //名称 $where['goods_name'] = array('like', '%' . $param['searchText'] . '%'); break; } } break; } return $where; } /** * 导出查询的规格字段 * @param $user_type 3商户 4门店 * @return array */ public function querySkuGoodsFields($user_type) { $arr = [ 'k.id', 'k.sku_id_list', 'k.sku_goods_number', 'k.sku_code', 'k.more_num', 'k.less_num', 'k.retail_price', 'k.online_price', 'k.store_mem_price', 'k.shop_mem_price', 'k.weight_value', 'k.third_goods_code', 's.goods_num', 's.sku_id_list', ]; switch ($user_type) { case 3: //商户 $arr[] = 'k.purch_price as purchase_price'; $arr[] = 'k.mgoods_id as goods_id'; break; case 4: //门店 $arr[] = 'k.goods_id'; break; } return $arr; } /** * 导出查询的商品字段 * @param $user_type 3商户 4门店 * @param $attribute_state 1无规格 2规格 * @return array */ public function queryGoodsFields($user_type, $attribute_state) { switch ($attribute_state) { case 1: $arr = [ 'g.id', 'g.goods_name', 'g.subheading', 'g.goods_class_id', 'g.goods_brand_id', 'g.goods_code', 'g.retail_price', 'g.online_price', 'g.store_mem_price', 'g.shop_mem_price', 'g.retail_state', 'g.store_mem_status', 'g.shop_mem_status', 'g.vip_online_state', 'g.vip_retail_state', 'g.more_num', 'g.less_num', 'g.company', 'g.weight_value', 'g.specifications', 'g.third_goods_code', ]; switch ($user_type) { case 3: $arr[] = 'g.good_number as goods_number'; $arr[] = 'g.purch_price as purchase_price'; $arr[] = 'g.issellonline as online_state'; $arr[] = 'g.can_exchange_weigh as pricing_method'; $arr[] = 'g.attribute as attribute_state'; break; case 4: $arr[] = 'g.goods_number'; $arr[] = 'g.purchase_price'; $arr[] = 'g.online_state'; $arr[] = 'g.pricing_method'; $arr[] = 'g.attribute_state'; break; } $arr[] = 's.goods_num'; break; case 2: $arr = [ 'id', 'goods_name', 'subheading', 'goods_class_id', 'goods_brand_id', 'goods_code', 'retail_price', 'online_price', 'store_mem_price', 'shop_mem_price', 'retail_state', 'store_mem_status', 'shop_mem_status', 'vip_online_state', 'vip_retail_state', 'more_num', 'less_num', 'company', 'weight_value', 'specifications', 'third_goods_code', ]; switch ($user_type) { case 3: $arr[] = 'good_number as goods_number'; $arr[] = 'purch_price as purchase_price'; $arr[] = 'issellonline as online_state'; $arr[] = 'can_exchange_weigh as pricing_method'; $arr[] = 'attribute as attribute_state'; break; case 4: $arr[] = 'goods_number'; $arr[] = 'purchase_price'; $arr[] = 'online_state'; $arr[] = 'pricing_method'; $arr[] = 'attribute_state'; break; } break; } return $arr; } /** * 导出头部 * @param $user_type 3商户 4门店 * @param $attribute_state 1无规格 2规格 * @param $platform_type 商户平台类型 1默认系统 2微礼平台 * @return array */ public function exportGoodsTitle($attribute_state, $platform_type) { switch ($attribute_state) { case 1: $headArr = array( ['goods_name', '商品名称(必填)'], ['subheading', '副标题'], ['goods_brand', '品牌名称'], ['goods_code', '条码'], ['goods_number', '货号(必填)'], ['class_name_1', '第一级分类(必填)'], ['class_name_2', '第二级分类'], ['class_name_3', '第三级分类'], ['goods_num', '商品总库存'], ['purchase_price', '进货价'], ['retail_price', '店内零售价(开启店内出售后必填)'], ['online_price', '商城零售价(开启商城出售后必填)'], ['store_mem_price', '店内会员价(开启店内会员价必填)'], ['shop_mem_price', '商城会员价(开启商城会员价必填)'], ['pricing_method_name' => '是否称重'], ['retail_state_name', '是否开启店内出售'], ['online_state_name', '是否开启商城出售'], ['store_mem_status_name', '是否开启店内会员价'], ['shop_mem_status_name', '是否开启商城会员价'], ['vip_online_state_name', '是否开启线上折扣'], ['vip_retail_state_name', '是否开启线下折扣'], ['more_num', '库存上限(超量值)'], ['less_num', '库存下限(预警值)'], ['company', '单位'], ['weight_value', '重量(Kg)'], ['specifications', '规格'], ); //第三方平台 if ($platform_type == 2) { $headArr[] = ['third_goods_code', 'Q3 ERP平台商品编码']; } break; case 2: $headArr = array( ['goods_name', '商品名称(必填)'], ['subheading', '副标题'], ['goods_brand', '品牌名称'], ['goods_code', '条码'], ['goods_number', '货号(必填)'], ['class_name_1', '第一级分类(必填)'], ['class_name_2', '第二级分类'], ['class_name_3', '第三级分类'], ['goods_num', '商品总库存'], ['purchase_price', '进货价'], ['retail_price', '店内零售价(开启店内出售后必填)'], ['online_price', '商城零售价(开启商城出售后必填)'], ['store_mem_price', '店内会员价(开启店内会员价必填)'], ['shop_mem_price', '商城会员价(开启商城会员价必填)'], ['retail_state_name', '是否开启店内出售'], ['online_state_name', '是否开启商城出售'], ['store_mem_status_name', '是否开启店内会员价'], ['shop_mem_status_name', '是否开启商城会员价'], ['vip_online_state_name', '是否开启线上折扣'], ['vip_retail_state_name', '是否开启线下折扣'], ['more_num', '库存上限(超量值)'], ['less_num', '库存下限(预警值)'], ['company', '单位'], ['weight_value', '重量(Kg)'], ['specifications', '规格'], ['sku_1', '规格1'], ['sku_val_1', '规格值1'], ['sku_2', '规格2'], ['sku_val_2', '规格值2'], ['sku_3', '规格3'], ['sku_val_3', '规格值3'], ['sku_4', '规格4'], ['sku_val_4', '规格值4'], ['sku_goods_number', '规格货号(必填)'], ['sku_code', '规格条码'], ['sku_goods_num', '规格库存'], ['sku_more_num', '规格上限'], ['sku_less_num', '规格下限'], ['sku_purchase_price', '规格进价'], ['sku_retail_price', '规格店内零售价(必填)'], ['sku_online_price', '规格商城售价(必填)'], ['sku_store_mem_price', '规格店内会员价(必填)'], ['sku_shop_mem_price', '规格商城会员价(必填)'], ['sku_weight_value', '规格重量(Kg)'] ); //第三方平台 if ($platform_type == 2) { $headArr[] = ['third_goods_code', 'Q3 ERP平台商品编码']; } break; } return $headArr; } /** * 门店商品信息更新记录 * @param $param * [ * store_id * merchant_id * goods_id int|array * ] * @return mixed */ public function goodsEditRecord($param) { if (empty($param['merchant_id']) || empty($param['store_id']) || empty($param['goods_id'])) { return callBack(statusCode()['error'], "缺少参数"); } try { $goods_id = $param['goods_id']; $GoodsPriceRecordModel = new GoodsEditRecordModel(); if (is_array($goods_id)) { $result = $GoodsPriceRecordModel->addAll($goods_id); } else { $data = [ 'goods_id' => $goods_id, 'store_id' => $param['store_id'], 'merchant_id' => $param['merchant_id'], 'add_time' => $_SERVER['REQUEST_TIME'] ]; $result = $GoodsPriceRecordModel->addOrder($data); } if ($result) { return callBack(statusCode()['success'], "记录成功"); } else { return callBack(statusCode()['error'], "记录失败"); } } catch (\Exception $e) { return callBack(statusCode()['error'], "记录失败"); } } /** * 批量修改简拼 * @param $param * [ * type 1商户 2门店 * merchant_id * store_id * goodsSelection 选中的商品 * ] * @return mixed */ public function batchSimpleSpelling($param) { $result = $this->SimpleSpellingVerify($param); if ($result['status'] != 1) { return $result; } try { switch ($param['type']) { case 1: $GoodsModel = new RetailMgoodsModel(); break; case 2: //门店 $GoodsModel = new RetailGoodsModel(); break; } foreach ($param['goodsSelection'] as &$val) { $result = $GoodsModel->updateOrder(['id' => $val['goods_id']], [ 'simple_spelling' => $val['simple_spelling'] ]); } return callBack(statusCode()['success'], "操作成功"); } catch (\Exception $e) { return callBack(statusCode()['error'], "操作失败"); } } /** * 一键生成简拼 * @param $param * [ * type 1商户 2门店 * store_id * merchant_id * ] * @return mixed */ public function generateSimpleSpelling($param) { $result = $this->SimpleSpellingVerify($param); if ($result['status'] != 1) { return $result; } try { switch ($param['type']) { case 1: $goodsModel = new RetailMgoodsModel(); $where = [ 'merchant_id' => $param['merchant_id'], 'status' => ['neq', 2] ]; break; case 2: //门店 $goodsModel = new RetailGoodsModel(); $where = [ 'status' => ['neq', 2], 'store_id' => $param['store_id'], ]; break; } $where['_string'] = "simple_spelling IS NULL or simple_spelling = ''"; $page = $param['page'] ? $param['page'] . ',3000' : ''; $goods_info = $goodsModel->getSelect($where, 'id,goods_name', 'id desc', $page); if (!empty($goods_info)) { $PinYinClass = new PinYin(); foreach ($goods_info as &$val) { $str = ''; $str = $PinYinClass->strChangePin($val['goods_name']); if (!empty($str)) { $goodsModel->updateOrder(['id' => $val['id']], ['simple_spelling' => $str]); } } } if (count($goods_info) < 3000) { $state = 2; } else { $state = 1; } return callBack(statusCode()['success'], '生成成功', ['state' => $state]); } catch (\Exception $e) { return callBack(statusCode()['error'], "生成失败,请重试"); } } /** * 生成或修改简拼验证 * @return mixed */ public function SimpleSpellingVerify($param) { if (empty($param['type']) || empty($param['merchant_id']) || ($param['type'] == 2 && empty($param['store_id']))) { return callBack(statusCode()['error'], "缺少身份参数"); } return callBack(statusCode()['success'], '验证成功'); } /** * 根据商品id集合获取商品名称集合 * @param $param * @return mixed */ public function GoodsNameList($param) { $GoodsModel = new RetailGoodsModel(); $list = $GoodsModel->getFindField([ 'id' => ['in', $param['goods_id_gather']] ], "goods_name", true); return callBack(statusCode()['success'], "查询成功", ['list' => $list]); } /** * 商户的商品列表(不是单品列表) * @param $param * [ * searchText 名称货号条码 * person1 一级分类 * person2 二级分类 * person3 三级分类 * merchant_id * page * limit * ] * @return mixed */ public function getMerchantGoodsList($param) { if (empty($param['merchant_id'])) { return callBack(statusCode()['error'], "缺少身份必要参数"); } $where = $this->getMerchantGoodsListTerm($param); $page = $param['page']; $limit = $param['limit']; $fields = [ 'id', 'goods_name', 'good_number', 'goods_code', 'simple_spelling' ]; $GoodsModel = new RetailMgoodsModel(); $goods = $GoodsModel->getSelect($where, $fields, 'id desc', $page . ',' . $limit); if (!empty($goods)) { $count = $GoodsModel->getCount($where); foreach ($goods as $key => &$val) { $val['index'] = $key + 1; $val['goods_id'] = $val['id']; $val['goods_number'] = $val['good_number']; } } return callBack(statusCode()['success'], "查询成功", ['list' => $goods, 'count' => $count ? $count : 0]); } /** * 商户的商品列表(不是单品列表)的查询条件 * @param $param * [ * searchText 名称货号条码 * person1 一级分类 * person2 二级分类 * person3 三级分类 * merchant_id * ] * @return mixed */ public function getMerchantGoodsListTerm($param) { $where = []; $GoodsClassify = new GoodsClassify(); $where = $GoodsClassify->getGoodsClassId($param, $where, "goods_class_id"); if (!empty($param['searchText'])) { $where['good_number|goods_code|goods_name'] = array('like', '%' . $param['searchText'] . '%'); } $where['merchantid'] = $param['merchant_id']; $where['status'] = ['neq', 2]; return $where; } /** * 门店商品列表(不是单品列表) * @param $param * [ * store_id * notInIds 已经选中的商品id * searchText 名称货号条码 * person1 分类 * person2 * person3 * page * limit * ] * @return mixed */ public function getStoreGoodsList($param) { if (empty($param['store_id'])) { return callBack(statusCode()['error'], "缺少门店ID"); } $where = $this->getStoreGoodsListTerm($param); $page = $param['page'] ? $param['page'] : ''; $limit = $param['limit'] ? $param['limit'] : ''; if (!empty($page) && !empty($limit)) { $page = $page . ',' . $limit; } $fields = 'id as goods_id,goods_name,goods_number,goods_code,store_id,simple_spelling'; $goodsModel = new RetailGoodsModel(); $list = $goodsModel->getSelect($where, $fields, 'id desc', $page); if (!empty($list)) { $count = $goodsModel->getCount($where); $storeModel = new RetailStoreModel(); $store_name = $storeModel->getFindField(['id' => $param['store_id']], "storetag"); foreach ($list as &$val) { $val['store_name'] = $store_name; } } return callBack(statusCode()['success'], "查询成功", ['list' => $list, 'count' => $count ? $count : 0]); } /** * 门店商品列表(不是单品列表)的where查询条件 * @param $param * [ * store_id * notInIds 已经选中的商品 * searchText 名称货号条码 * person1 分类 * person2 * person3 * ] * @return mixed */ public function getStoreGoodsListTerm($param) { $goodsClass = new GoodsClassify(); $where = $goodsClass->getGoodsClassId($param, [], "goods_class_id"); if (!empty($param['searchText'])) { $where['goods_name|goods_number|goods_code'] = ['like', "%{$param['searchText']}%"]; } if (!empty($param['notInIds'])) { $where['id'] = ['not in', $param['notInIds']]; } $where['store_id'] = $param['store_id']; $where['status'] = ['in', '0,1']; return $where; } /** * 商品导入的商品列表 * @param $parameter * [ * merchant_id * store_id * user_type 1商户 2门店 * status 状态:0,正常,1,已导入,2,删除,3,货号重复,4,商品条码重复 * searchText 商品名称/货号/条码 * page * limit * ] * @return array * [ * status * message * data=>[ * list 列表 * ] * ] */ public function getImportGoodsList($parameter) { switch ($parameter['user_type']) { case 1: //商户 $where = $this->getMerchantImportGoodsListTerm($parameter); //获取查询条件 break; case 2: //门店 $where = $this->getStoreImportGoodsListTerm($parameter); //获取查询条件 break; } if (empty($where)) { return ['status' => 0, 'message' => '参数缺失']; } try { $goodsImportModel = new GoodsImportModel(); $list = $goodsImportModel->getSelect($where, "*", 'id desc', $parameter['page'] . ',' . $parameter['limit']); if ($list) { $count = $goodsImportModel->getCount($where); foreach ($list as $k => &$v) { $v['index'] = $k + 1; $v['retail_state_name'] = $v['retail_state'] == 1 ? '开启' : '关闭'; $v['issellonline_name'] = $v['issellonline'] == 1 ? '开启' : '关闭'; $v['vip_retail_state'] = $v['vip_retail_state'] == 0 ? '关闭' : '开启'; $v['vip_online_state'] = $v['vip_online_state'] == 0 ? '关闭' : '开启'; $v['shop_mem_status'] = $v['shop_mem_status'] == 1 ? '开启' : '关闭'; $v['store_mem_status'] = $v['store_mem_status'] == 1 ? '开启' : '关闭'; $v['serial_number_state'] = $v['serial_number_state'] == 1 ? '开启' : '关闭'; $v['can_exchange_weigh'] = $v['can_exchange_weigh'] == 2 ? '开启' : '关闭'; $v['goods_num'] = round($v['goods_num'], 3); $v['more_num'] = round($v['more_num'], 3); $v['less_num'] = round($v['less_num'], 3); if ($v['attribute'] == 2) { $v['sku_json'] = json_decode($v['sku_json'], true); if ($v['sku_json']['sku_list']) { $arr = $v['sku_json']['sku_list']; foreach ($arr as $val) { $val['name'] = explode(',', $val['name']); $val['store_mem_price'] = $val['store_mem_price'] ? $val['store_mem_price'] : 0; } } } else { $v['sku_json'] = array(); } $v['attribute_name'] = $v['attribute'] == 2 ? '开启' : '关闭'; if ($v['can_exchange_weigh'] == 1) { $v['goods_num'] = round($v['goods_num']); } switch ($v['status']) { case 0: $v['status_name'] = '未导入'; break; case 1: $v['status_name'] = '已导入'; break; case 2: $v['status_name'] = '已删除'; break; case 3: $v['status_name'] = '货号重复'; break; case 4: $v['status_name'] = '条码重复'; break; } } } return ['status' => 1, 'message' => '查询成功', 'data' => ['list' => $list, 'count' => $count ? $count : 0]]; } catch (\Exception $e) { return ['status' => 1, 'message' => '查询成功', 'data' => ['list' => [], 'count' => 0]]; } } /** * 商户商品导入的商品列表的where条件 * @param $parameter * [ * merchant_id * status 状态:0,正常,1,已导入,2,删除,3,货号重复,4,商品条码重复。 * searchText 商品名称货号条码 * * ] * @return array */ public function getMerchantImportGoodsListTerm($parameter) { if (empty($parameter['merchant_id'])) { return []; } $where = array( 'merchantid' => $parameter['merchant_id'], 'type' => 1, ); if (in_array($parameter['status'], ['0', '1', '3', '4'])) { $where['status'] = $parameter['status']; } else { $where['status'] = array('neq', 2); } if (!empty($parameter['searchText'])) { $where['goods_name|good_number|goods_code'] = ['like', '%' . $parameter['searchText'] . '%']; } return $where; } /** * 门店商品导入的商品列表的where条件 * @param $parameter * [ * merchant_id * store_id * status 状态:0,正常,1,已导入,2,删除,3,货号重复,4,商品条码重复。 * * ] * @return array */ public function getStoreImportGoodsListTerm($parameter) { if (empty($parameter['store_id']) || empty($parameter['merchant_id'])) { return []; } $where = array( 'merchantid' => $parameter['merchant_id'], 'storeid' => $parameter['store_id'], 'type' => 2, ); if ($parameter['status'] != -1) { $where['status'] = $parameter['status']; } else { $where['status'] = array('neq', 2); } if (!empty($parameter['searchText'])) { $where['goods_name|good_number|goods_code'] = ['like', '%' . $parameter['searchText'] . '%']; } return $where; } /** * 删除商品导入表的商品 * @param $parameter * [ * user_type 1商户后台 2门店后台 * merchant_id * store_id * idArr 删除的id集合 * ] * @return bool */ public function importGoodsOut($parameter) { $goodsImportModel = new GoodsImportModel(); $user_type = $parameter['user_type']; $idArr = $parameter['idArr']; switch ($user_type) { case 1: //商户后台 $where = [ 'merchantid' => $parameter['merchant_id'] ]; break; case 2: //门店后台 $where = [ 'merchantid' => $parameter['merchant_id'], 'storeid' => $parameter['store_id'] ]; break; } foreach ($idArr as $k => $v) { $where['id'] = $v; $goodsImportModel->updateOrder($where, ['status' => 2]); } return true; } /** * 上传导入商品文件以及存入导入表 * @param $parameter *[ * operator_type 1后台端 2收银端 3助手端 * user_type 3商户 4门店 * merchant_id * store_id * attribute_state 1无规格商品导入 2规格商品导入 * platform_type 商户平台类型 1默认系统 2微礼平台 *] * @return array * [ * status 0有误信息 * message * ] * @throws \PHPExcel_Exception * @throws \PHPExcel_Reader_Exception */ public function goodsImportOperation($parameter) { header('Content-Type: text/html; charset=utf-8'); //网页编码 $VerifyClass = new VerifyParam(); $verifyResult = $VerifyClass->identityVerify($parameter); //参数验证 if ($verifyResult['status'] != 1) { return $verifyResult; } if (!in_array($parameter['attribute_state'], ['1', '2'])) { return callBack(statusCode()['error'], "导入类型有误"); } $uploadFileClass = new UploadFile(); $uploadResult = $uploadFileClass->uploadFile([]); //上传文件 if ($uploadResult['status'] != 1) { $uploadResult['message'] = $uploadResult['msg']; return $uploadResult; } $downFileClass = new DownFile(); $file = $downFileClass->readFile_v1("." . $uploadResult['path']); //读取文件 if ($file['status'] != 1) { return $file; } $goodsClass = new GoodsClassify(); $ClassResult = $goodsClass->getClassArr([ 'merchant_id' => $parameter['merchant_id'] ]); //分类集合 $parameter['class_arr_1'] = $ClassResult['class_arr_1']; $parameter['class_arr_2'] = $ClassResult['class_arr_2']; $parameter['class_arr_3'] = $ClassResult['class_arr_3']; switch ($parameter['attribute_state']) { case 1: //非规格 $headArr = $this->ImportGoodsTitle($parameter['platform_type']); //自定义数组头部字段与字段名 break; case 2: //规格 $headArr = $this->ImportSkuGoodsTitle($parameter['platform_type']); //自定义数组头部字段与字段名 break; } array_flip($headArr); //将数组键名键值替换位置 $file_count = count($file['data']); $faultArr = []; //失败信息 $num = 0; //添加成功次数 for ($f = 0; $f < $file_count; $f++) { $goodsArr = $file['data'][$f]; $goodsArr = json_decode(json_encode($goodsArr), true); if ($f == 0) { for ($i = 0; $i < 14; $i++) { unset($goodsArr[$i]); //删除无用信息 } $goodsArr = array_merge($goodsArr); } $titleArr = $goodsArr[0]; $keyArr = array(); foreach ($titleArr as $k => $v) { foreach ($headArr as $k2 => $v2) { if ($v == $v2) { $keyArr[$k2] = $k; } } } $parameter['goodsArr'] = $goodsArr; $parameter['keyArr'] = $keyArr; $result = $this->ImportGoodsHandle($parameter); //验证以及获取验证通过商品集合与失败的商品集合 $faultArr = array_merge($faultArr, $result['faultArr']); //失败的商品信息 if (!empty($result['addGoodsArr'])) { //存商品导入表 $num += count($result['addGoodsArr']); $result = $this->ImportGoodsAdd(['num' => $num, 'addGoodsArr' => $result['addGoodsArr']]); $faultArr[] = $result['faultArr']; } $newGoodsArr = array(); foreach ($faultArr as $key => $val2) { $e = false; foreach ($val2 as $k2 => $v2) { $val2[$k2] = trim($v2, ' '); if ($val2[$k2]) { $e = true; } } if ($e) { $newGoodsArr[] = $val2; } } $faultArr = $newGoodsArr; } if (count($faultArr) > 0) { // 生成错误表格,并返回路径。 switch ($parameter['platform_type']) { case 1: switch ($parameter['user_type']) { case 3: //商户 switch ($parameter['attribute_state']) { case 1: $path2 = './Uploads/Temp/Mgoodsinport' . $parameter['merchant_id'] . '.txt'; break; case 2: $path2 = './Uploads/Temp/MSkugoodsinport' . $parameter['merchant_id'] . '.txt'; break; } break; case 4: //门店 switch ($parameter['attribute_state']) { case 1: $path2 = './Uploads/Temp/StoreGoodsImport' . $parameter['merchant_id'] . $parameter['store_id'] . '.txt'; break; case 2: //规格 $path2 = './Uploads/Temp/StoreSkuGoodsImport' . $parameter['merchant_id'] . $parameter['store_id'] . '.txt'; break; } break; } break; case 2: switch ($parameter['user_type']) { case 3: //商户 switch ($parameter['attribute_state']) { case 1: $path2 = './Uploads/Temp/ThirdMgoodsinport' . $parameter['merchant_id'] . '.txt'; break; case 2: $path2 = './Uploads/Temp/ThirdMSkugoodsinport' . $parameter['merchant_id'] . '.txt'; break; } break; case 4: //门店 switch ($parameter['attribute_state']) { case 1: $path2 = './Uploads/Temp/ThirdStoreGoodsImport' . $parameter['merchant_id'] . $parameter['store_id'] . '.txt'; break; case 2: //规格 $path2 = './Uploads/Temp/ThirdStoreSkuGoodsImport' . $parameter['merchant_id'] . $parameter['store_id'] . '.txt'; break; } break; } break; } file_put_contents($path2, json_encode($faultArr)); $res['status'] = 2; $res['path'] = $path2; $res['message'] = '导入成功' . $num . '项,但有' . count($faultArr) . '项数据不正确'; } else { $res['status'] = 1; $res['message'] = '全部导入成功,共' . $num . '项'; } return $res; } /** *添加到导入商品表 * @param $parameter * [ * num 成功次数 * addGoodsArr 添加的商品信息 * ] * @return array * [ * faultArr 失败的商品信息 * num 成功次数 * ] */ public function ImportGoodsAdd($parameter) { $goodsImportModel = new GoodsImportModel(); $addGoodsArr = $parameter['addGoodsArr']; //添加的商品信息 $faultArr = []; //失败信息 $new_arr = []; $add_num = 1; foreach ($addGoodsArr as $key => &$valueAdd) { if (!empty($valueAdd['sku_json']) && $valueAdd['attribute'] == 2) { $arr = $valueAdd['sku_json']['sku_list']; $goods_num = 0; foreach ($arr as $val1) { $goods_num += $val1['goods_num'] ? $val1['goods_num'] : 0; } $goods_num = round($goods_num, 3); $valueAdd['goods_num'] = $goods_num; $valueAdd['sku_json'] = json_encode($valueAdd['sku_json']); } $new_arr[] = $valueAdd; if (($key / 500) == $add_num) { $goodsImportModel->addAll($new_arr); $new_arr = []; $add_num++; } } if (!empty($new_arr)) { $goodsImportModel->addAll($new_arr); } return ['faultArr' => $faultArr]; } /** * 导入商品验证且区分 * @param $parameter *[ * platform_type 商户平台类型 1默认系统 2微礼平台 * operator_type 1后台端 2收银端 3助手端 * user_type 3商户 4门店 * merchant_id * store_id * attribute_state 1无规格商品导入 2规格商品导入 * goodsArr 表格的商品信息 * keyArr 转换后的商品信息 * class_arr_1 一级分类 * class_arr_2 二级分类 * class_arr_3 三级分类 * ] * @return array * [ * faultArr 失败的商品信息 * addGoodsArr 添加的商品信息 * ] */ public function ImportGoodsHandle($parameter) { $platform_type = $parameter['platform_type']; $goodsArr = $parameter['goodsArr']; //表格的商品信息 $keyArr = $parameter['keyArr']; //转换后的商品信息 $attribute_state = $parameter['attribute_state']; $addGoodsArr = []; //验证成功的商品信息 $faultArr = []; //验证失败的商品信息 foreach ($goodsArr as $key => &$val) { if ($key == 0) { continue; } $val_str = implode('', $val); if (empty($val_str)) { continue; } $value = []; foreach ($keyArr as $k => $_val) { $value[$k] = $val[$_val] != '' && $val[$_val] != null ? trim($val[$_val]) : ''; } $tempValue = implode($value, ''); if ($tempValue == '') { continue; } switch ($attribute_state) { case 1: //无规格导入 $result = $this->ImportPlainGoodsVerify([ 'value' => $value, 'val' => $val, 'merchant_id' => $parameter['merchant_id'], 'store_id' => $parameter['store_id'], 'class_arr_1' => $parameter['class_arr_1'], 'class_arr_2' => $parameter['class_arr_2'], 'class_arr_3' => $parameter['class_arr_3'], 'user_type' => $parameter['user_type'], 'attribute_state' => $attribute_state, 'platform_type' => $platform_type ]); //无规格商品验证 if (!empty($result['faultArr']) && isset($result['faultArr'])) { $faultArr[] = $result['faultArr']; continue; } else { $result = $this->ImportPlainGoodsArr([ 'merchant_id' => $parameter['merchant_id'], 'store_id' => $parameter['store_id'], 'user_type' => $parameter['user_type'], 'goods_class_id' => $result['data'], 'attribute_state' => $attribute_state, 'value' => $value, 'addGoodsArr' => $addGoodsArr, 'platform_type' => $platform_type ]); //无规格商品信息处理 $addGoodsArr = $result['addGoodsArr']; } break; case 2: //规格商品导入 if (empty($value['good_number']) && !empty($value['sku_goods_number']) && !empty($value['sku_val_1'])) { $result = $this->ImportGoodsSkuVerify([ 'addGoodsArr' => $addGoodsArr, 'user_type' => $parameter['user_type'], 'merchant_id' => $parameter['merchant_id'], 'store_id' => $parameter['store_id'], 'value' => $value, 'val' => $val, 'goods_type' => 2, 'platform_type' => $platform_type ]); //规格信息验证 if (!empty($result['faultArr'])) { $faultArr[] = $result['faultArr']; continue; } else { $result = $this->ImportGoodsSkuArr([ 'addGoodsArr' => $addGoodsArr, 'value' => $value, 'platform_type' => $platform_type ]); //规格信息处理 $addGoodsArr = $result['addGoodsArr']; } } else { //商品验证 $result = $this->ImportPlainGoodsVerify([ 'value' => $value, 'val' => $val, 'merchant_id' => $parameter['merchant_id'], 'store_id' => $parameter['store_id'] ? $parameter['store_id'] : 0, 'class_arr_1' => $parameter['class_arr_1'], 'class_arr_2' => $parameter['class_arr_2'], 'class_arr_3' => $parameter['class_arr_3'], 'user_type' => $parameter['user_type'], 'attribute_state' => $attribute_state, 'platform_type' => $platform_type ]); //无规格商品验证 if (!empty($result['faultArr']) && isset($result['faultArr'])) { $faultArr[] = $result['faultArr']; continue; } else { $result = $this->ImportPlainGoodsArr([ 'merchant_id' => $parameter['merchant_id'], 'store_id' => $parameter['store_id'], 'user_type' => $parameter['user_type'], 'goods_class_id' => $result['data'], 'attribute_state' => $attribute_state, 'value' => $value, 'addGoodsArr' => $addGoodsArr, 'platform_type' => $platform_type ]); //无规格商品信息处理 $addGoodsArr = $result['addGoodsArr']; } } break; } } return ['addGoodsArr' => $addGoodsArr, 'faultArr' => $faultArr]; } /** * 无规格商品验证 * @param $parameter * [ * platform_type 商户平台类型 1默认系统 2微礼平台 * merchant_id * store_id * user_type 3商户 4门店 * value * val * class_arr_1 一级分类 * class_arr_2 二级分类 * class_arr_3 三级分类 * attribute_state 1无规格 2规格 * ] * @return array * [ * faultArr 失败信息 * addGoodsArr 验证通过的商品信息 * ] */ public function ImportPlainGoodsVerify($parameter) { $platform_type = $parameter['platform_type']; $merchant_id = $parameter['merchant_id']; $user_type = $parameter['user_type']; $value = $parameter['value']; $val = $parameter['val']; $attribute_state = $parameter['attribute_state']; $class_arr_1 = array_column($parameter['class_arr_1'], NULL, 'class_name'); //一级分类 $class_arr_2_old = $parameter['class_arr_2']; $class_arr_2 = []; foreach ($class_arr_2_old as $key => $v) { $class_arr_2[$v['pid'] . '_' . $v['class_name']] = $v; } $class_arr_3_old = $parameter['class_arr_3']; $class_arr_3 = []; foreach ($class_arr_3_old as $key => $v) { $class_arr_3[$v['pid'] . '_' . $v['class_name']] = $v; } $goodsImportModel = new GoodsImportModel(); if (empty($value['good_number']) || strlen($value['good_number']) > 17) { $val['reson'] = '货号不能大于17位'; $faultArr = $val; return ['faultArr' => $faultArr]; } if (!empty($value['goods_code']) && strlen($value['goods_code']) > 17) { $val['reson'] = '条码不能大于17位'; $faultArr = $val; return ['faultArr' => $faultArr]; } //第三方平台 if ($platform_type == 2) { if (empty($value['third_goods_code']) || mb_strlen($value['third_goods_code'], 'UTF-8') > 255) { $val['reson'] = 'Q3 ERP平台编码必填且不能大于255位'; $faultArr = $val; return ['faultArr' => $faultArr]; } } $where = [ 'merchantid' => $merchant_id, 'status' => 0, ]; switch ($user_type) { case 3: //商户 $where['type'] = 1; break; case 4: //门店 $where['storeid'] = $parameter['store_id']; $where['type'] = 2; break; } if (!empty($value['goods_code']) && trim($value['goods_code'], ' ')) { $where['goods_code'] = $value['goods_code']; $goods = $goodsImportModel->where($where)->find(); } else { $goods = false; } if (!$goods) { unset($where['goods_code']); $where['good_number'] = $value['good_number']; if (!empty($value['good_number']) && trim($value['good_number'], ' ')) { $goods = $goodsImportModel->where($where)->find(); } else { $goods = false; } } //第三方平台 if ($platform_type == 2) { unset($where['good_number']); unset($where['goods_code']); $where['third_goods_code'] = $value['third_goods_code']; $goods = $goodsImportModel->where($where)->find(); if (empty($goods)) { $goods = false; } } unset($where); if ($goods) { $val['reson'] = '导入数据档案中已有该商品'; // 未找到正常的 $faultArr = $val; return ['faultArr' => $faultArr]; } $class_name_1 = trim($value['class_name_1'], ' '); $class_name_2 = trim($value['class_name_2'], ' '); $class_name_3 = trim($value['class_name_3'], ' '); if (empty($class_name_1)) { $val['reson'] = '请填写商品一级分类'; $faultArr = $val; return ['faultArr' => $faultArr]; } if (!empty($class_name_3) && empty($class_name_2)) { $val['reson'] = '请填写商品二级分类'; $faultArr = $val; return ['faultArr' => $faultArr]; } $GoodsClassify = new GoodsClassify(); $classVerifyResult = $GoodsClassify->existClassAdd([ 'class_arr_1' => $class_arr_1, 'class_arr_2' => $class_arr_2, 'class_arr_3' => $class_arr_3, 'class_name_1' => $class_name_1, 'class_name_2' => $class_name_2, 'class_name_3' => $class_name_3, 'merchant_id' => $parameter['merchant_id'] ]); //分类添加 if ($classVerifyResult['status'] != 1) { $val['reson'] = $classVerifyResult['message']; $faultArr = $val; return ['faultArr' => $faultArr]; } $goods_class_id = $classVerifyResult['data']; $retail_state = $value['retail_state'] == '是' ? 1 : 0; $issellonline = $value['issellonline'] == '是' ? 1 : 0; $shop_mem_status = $value['shop_mem_status'] == '是' ? 1 : 2; $store_mem_status = $value['store_mem_status'] == '是' ? 1 : 2; if (empty($value['goods_name'])) { $val['reson'] = '未填写商品名称'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($retail_state == 1 && (!$value['retail_price'] || !is_numeric($value['retail_price']) || $value['retail_price'] < 0.01 || $value['retail_price'] != round($value['retail_price'], 2))) { $val['reson'] = '商品店内零售价填写有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($issellonline == 1 && (!$value['online_price'] || !is_numeric($value['online_price']) || $value['online_price'] < 0.01 || $value['online_price'] != round($value['online_price'], 2))) { $val['reson'] = '商品商城价填写有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($shop_mem_status == 1 && (!$value['shop_mem_price'] || !is_numeric($value['shop_mem_price']) || $value['shop_mem_price'] < 0.01 || $value['shop_mem_price'] != round($value['shop_mem_price'], 2))) { $val['reson'] = '商品商城会员价填写有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($store_mem_status == 1 && (!$value['store_mem_price'] || !is_numeric($value['store_mem_price']) || $value['store_mem_price'] < 0.01 || $value['store_mem_price'] != round($value['store_mem_price'], 2))) { $val['reson'] = '商品店内会员价填写有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if (!empty($value['weight_value']) && ((round($value['weight_value'], 3) != $value['weight_value']) || $value['weight_value'] < 0.001)) { $val['reson'] = '重量有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } $serial_number_state = $value['serial_number_state'] == '是' ? 1 : 0; switch ($attribute_state) { case 1: //无规格 $can_exchange_weigh = $value['can_exchange_weigh'] == '是' ? 2 : 1; if ($serial_number_state == 1 && $can_exchange_weigh == 2) { $val['reson'] = '串号与称重不能同时开启'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($serial_number_state == 1 && $value['goods_num'] > 0) { $val['reson'] = '开启串号库存必须通过采购新增'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($value['goods_num'] > 0 && ($value['purch_price'] == 0 || !$value['purch_price'] || !is_numeric($value['purch_price']) || $value['purch_price'] < 0 || $value['purch_price'] != round($value['purch_price'], 2))) { $val['reson'] = '商品进价填写有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($can_exchange_weigh == 1 && ((int)$value['less_num'] != $value['less_num'] || (int)$value['more_num'] != $value['more_num'] || (int)$value['goods_num'] != $value['goods_num'])) { $val['reson'] = '该商品数量信息有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } else if ($can_exchange_weigh == 2 && (round($value['less_num'], 3) != $value['less_num'] || round($value['more_num'], 3) != $value['more_num'] || round($value['goods_num'], 3) != $value['goods_num'])) { $val['reson'] = '该商品数量信息有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } $company_verify = ['kg', 'KG', '斤', '公斤', '市斤', '千克', 'g', 'G', '克']; if ($can_exchange_weigh == 2 && (empty($value['company']) || !in_array($value['company'], $company_verify))) { $val['reson'] = '开启称重后单位必须按要求填写,请查看导入模板单位规则'; $faultArr = $val; return ['faultArr' => $faultArr]; } break; case 2: //规格 if (!empty($value['purch_price']) && (!$value['purch_price'] || !is_numeric($value['purch_price']) || $value['purch_price'] < 0 || $value['purch_price'] != round($value['purch_price'], 2))) { $val['reson'] = '商品进价填写有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if (((int)$value['less_num'] != $value['less_num'] || (int)$value['more_num'] != $value['more_num'])) { $val['reson'] = '该商品数量信息有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if (empty($value['sku_1']) || empty($value['sku_val_1']) || (!empty($value['sku_2']) && empty($value['sku_val_2'])) || (!empty($value['sku_3']) && empty($value['sku_val_3'])) || (!empty($value['sku_4']) && empty($value['sku_val_4']))) { //开启规格 $val['reson'] = '未填写规格信息'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ((!empty($value['sku_3']) && empty($value['sku_2'])) || (!empty($value['sku_4']) && empty($value['sku_3']))) { $val['reson'] = '规格属性顺序有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($serial_number_state == 1 && $value['goods_num'] > 0) { $val['reson'] = '开启串号库存必须通过采购新增'; $faultArr = $val; return ['faultArr' => $faultArr]; } $SkuVerifyResult = $this->ImportGoodsSkuVerify([ 'value' => $parameter['value'], 'val' => $parameter['val'], 'retail_state' => $retail_state, 'issellonline' => $issellonline, 'shop_mem_status' => $shop_mem_status, 'store_mem_status' => $store_mem_status, 'goods_type' => 1, 'serial_number_state' => $serial_number_state, 'platform_type' => $platform_type ]); if ($SkuVerifyResult['status'] != 1) { return ['faultArr' => $SkuVerifyResult['faultArr']]; } break; } return callBack(statusCode()['success'], "验证成功", $goods_class_id); } /** * 规格信息验证 * @param $param * [ * platform_type 商户平台类型 1默认系统 2微礼平台 * value * val * retail_state 店内出售 1开启 0关闭 * issellonline 商城出售 1开启 0关闭 * shop_mem_status 商城会员 1 开启 2关闭 * store_mem_status 店内会员 1 开启 2关闭 * serial_number_state 商品串码状态 0关闭 1开启 * merchant_id * store_id * user_type 3商户 4门店 * goods_type 1 商品信息 2规格信息 * addGoodsArr 验证通过的商品信息 * ] * @return mixed */ public function ImportGoodsSkuVerify($param) { $value = $param['value']; $val = $param['val']; $goods_type = $param['goods_type']; $merchant_id = $param['merchant_id']; $store_id = $param['store_id']; $user_type = $param['user_type']; switch ($goods_type) { case 1: //商品信息 $retail_state = $param['retail_state']; $issellonline = $param['issellonline']; $shop_mem_status = $param['shop_mem_status']; $store_mem_status = $param['store_mem_status']; $serial_number_state = $param['serial_number_state'] ? $param['serial_number_state'] : 0; break; case 2: //规格信息 $addGoodsArr = $param['addGoodsArr']; $goodsInfo = $addGoodsArr[count($addGoodsArr) - 1]; $retail_state = $goodsInfo['retail_state']; $issellonline = $goodsInfo['issellonline']; $shop_mem_status = $goodsInfo['shop_mem_status']; $store_mem_status = $goodsInfo['store_mem_status']; $serial_number_state = $goodsInfo['serial_number_state']; $sku_json = $addGoodsArr[count($addGoodsArr) - 1]['sku_json']; $sku_count = count($sku_json['sku_name_title']); $sku_arr = []; if (!empty($value['sku_val_1'])) $sku_arr[] = $value['sku_val_1']; if (!empty($value['sku_val_2'])) $sku_arr[] = $value['sku_val_2']; if (!empty($value['sku_val_3'])) $sku_arr[] = $value['sku_val_3']; if (!empty($value['sku_val_4'])) $sku_arr[] = $value['sku_val_4']; if (count($sku_arr) != $sku_count) { $val['reson'] = '规格有误,商品信息有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($sku_count >= 1) { if (empty($value['sku_val_1'])) { $val['reson'] = '规格有误,商品信息有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } } if ($sku_count >= 2) { if (empty($value['sku_val_2'])) { $val['reson'] = '规格有误,商品信息有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } } if ($sku_count >= 3) { if (empty($value['sku_val_3'])) { $val['reson'] = '规格有误,商品信息有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } } break; } $goodsImportModel = new GoodsImportModel(); if (empty($value['sku_goods_number']) || strlen($value['sku_goods_number']) > 17) { $val['reson'] = '请输入正确规格货号'; $faultArr = $val; return ['faultArr' => $faultArr]; } //第三方平台 if ($param['platform_type'] == 2) { if (empty($value['third_goods_code']) || mb_strlen($value['third_goods_code'], 'UTF-8') > 255) { $val['reson'] = '请输入正确Q3 ERP平台商品编码且不能大于255位'; $faultArr = $val; return ['faultArr' => $faultArr]; } } $where = [ 'merchantid' => $merchant_id, 'status' => 0, 'good_number' => $value['sku_goods_number'] ]; switch ($user_type) { case 3: //商户 $where['type'] = 1; break; case 4: //门店 $where['storeid'] = $store_id; $where['type'] = 2; break; } $oldNumber = $goodsImportModel->where($where)->find(); if (!empty($oldNumber)) { $val['reson'] = '该规格货号已存在'; $faultArr = $val; return ['faultArr' => $faultArr]; } if (!empty($value['sku_code'])) { if (strlen($value['sku_code']) > 17) { $val['reson'] = '条码不能大于17位'; $faultArr = $val; return ['faultArr' => $faultArr]; } unset($where['good_number']); $where['goods_code'] = $value['sku_code']; $oldCode = $goodsImportModel->where($where)->find(); if (!empty($oldCode)) { $val['reson'] = '该规格条码已存在'; $faultArr = $val; return ['faultArr' => $faultArr]; } } //第三方平台 if ($param['platform_type'] == 2) { unset($where['good_number']); unset($where['goods_code']); $where['third_goods_code'] = $value['third_goods_code']; $oldCode = $goodsImportModel->where($where)->find(); if (!empty($oldCode)) { $val['reson'] = '该规格Q3 ERP平台商品遍码已存在'; $faultArr = $val; return ['faultArr' => $faultArr]; } } unset($where); if ($value['sku_goods_num'] > 0 && ($value['sku_purch_price'] == 0 || !$value['sku_purch_price'] || $value['sku_purch_price'] < 0 || $value['sku_purch_price'] != round($value['sku_purch_price'], 2) || $value['sku_purch_price'] < 0.01)) { $val['reson'] = '该规格进价填写有误' . $value['sku_purch_price']; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($retail_state == 1 && (!$value['sku_retail_price'] || !is_numeric($value['sku_retail_price']) || $value['sku_retail_price'] < 0.01 || $value['sku_retail_price'] != round($value['sku_retail_price'], 2))) { $val['reson'] = '该规格店内零售价填写有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($store_mem_status == 1 && (!$value['sku_store_mem_price'] || !is_numeric($value['sku_store_mem_price']) || $value['sku_store_mem_price'] < 0.01 || $value['sku_store_mem_price'] != round($value['sku_store_mem_price'], 2))) { $val['reson'] = '该规格店内会员价填写有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($issellonline == 1 && (!$value['sku_online_price'] || !is_numeric($value['sku_online_price']) || $value['sku_online_price'] < 0.01 || $value['sku_online_price'] != round($value['sku_online_price'], 2))) { $val['reson'] = '该规格商城价填写有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($shop_mem_status == 1 && (!$value['sku_shop_mem_price'] || !is_numeric($value['sku_shop_mem_price']) || $value['sku_shop_mem_price'] < 0.01 || $value['sku_shop_mem_price'] != round($value['sku_shop_mem_price'], 2))) { $val['reson'] = '该规格商城会员价填写有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if ($serial_number_state == 1 && $value['sku_goods_num'] > 0) { $val['reson'] = '开启串号,规格库存必须通过进销存增加'; $faultArr = $val; return ['faultArr' => $faultArr]; } if (((int)$value['sku_goods_num'] != $value['sku_goods_num'])) { $val['reson'] = '规格库存有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } if (!empty($value['sku_weight_value']) && (round($value['sku_weight_value'], 3) != $value['sku_weight_value'] || $value['sku_weight_value'] < 0.001)) { $val['reson'] = '规格重量有误'; $faultArr = $val; return ['faultArr' => $faultArr]; } return callBack(statusCode()['success'], '验证成功'); } /** * 商品信息处理 * @param $parameter * [ * platform_type 商户平台类型 1默认系统 2微礼平台 * user_type 3商户 4门店 * merchant_id * store_id * attribute_state 1无规格 2规格 * goods_class_id 分类id * addGoodsArr 验证成功的商品 * value 商品信息 * ] * @return array * [ * addGoodsArr 添加的商品信息 * ] */ public function ImportPlainGoodsArr($parameter) { $user_type = $parameter['user_type']; $merchant_id = $parameter['merchant_id']; $store_id = $parameter['store_id']; $value = $parameter['value']; $goods_class_id = $parameter['goods_class_id']; $addGoodsArr = $parameter['addGoodsArr']; //成功的商品信息 $attribute_state = $parameter['attribute_state']; $goods_class_name = $value['class_name_1']; if (!empty($value['class_name_2'])) { $goods_class_name .= '/' . $value['class_name_2']; if (!empty($value['class_name_3'])) { $goods_class_name .= '/' . $value['class_name_3']; } } $data = [ 'goods_class_id' => $goods_class_id, 'less_num' => $value['less_num'] ? $value['less_num'] : null, 'more_num' => $value['more_num'] ? $value['more_num'] : null, 'goods_num' => $value['goods_num'] ? $value['goods_num'] : 0, 'attribute' => $attribute_state, 'retail_state' => $value['retail_state'] == '是' ? 1 : 0, 'issellonline' => $value['issellonline'] == '是' ? 1 : 0, 'shop_mem_status' => $value['shop_mem_status'] == '是' ? 1 : 2, 'store_mem_status' => $value['store_mem_status'] == '是' ? 1 : 2, 'merchantid' => $merchant_id, 'goods_code' => $value['goods_code'], 'specifications' => $value['specifications'], 'company' => $value['company'], 'addtime' => $_SERVER['REQUEST_TIME'], 'vip_retail_state' => $value['vip_retail_state'] == '是' ? 1 : 0, 'vip_online_state' => $value['vip_online_state'] == '是' ? 1 : 0, 'purch_price' => $value['purch_price'] ? $value['purch_price'] : null, 'retail_price' => $value['retail_price'] ? $value['retail_price'] : null, 'online_price' => $value['online_price'] ? $value['online_price'] : null, 'good_number' => $value['good_number'], 'shop_mem_price' => $value['shop_mem_price'] ? $value['shop_mem_price'] : null, 'store_mem_price' => $value['store_mem_price'] ? $value['store_mem_price'] : null, 'goods_class_name' => $goods_class_name, 'goods_name' => $value['goods_name'], 'subheading' => $value['subheading'], 'status' => 0, 'goods_brand' => $value['goods_brand'], 'weight_value' => $value['weight_value'] ? $value['weight_value'] : null, 'serial_number_state' => $value['serial_number_state'] == '是' ? 1 : 0 ]; switch ($attribute_state) { case 1: $data['can_exchange_weigh'] = $value['can_exchange_weigh'] == '是' ? 2 : 1; //第三方平台 if ($parameter['platform_type'] == 2) { $data['third_goods_code'] = $value['third_goods_code']; } break; case 2: $data['can_exchange_weigh'] = 1; //开启规格 $temp = []; $temp['sku_name_title'][] = $value['sku_1']; $name[] = $value['sku_val_1']; if (!empty($value['sku_2'])) { $temp['sku_name_title'][] = $value['sku_2']; $name[] = $value['sku_val_2']; if (!empty($value['sku_3'])) { $temp['sku_name_title'][] = $value['sku_3']; $name[] = $value['sku_val_3']; if (!empty($value['sku_4'])) { $temp['sku_name_title'][] = $value['sku_4']; $name[] = $value['sku_val_4']; } } } $temp['sku_list'][] = [ 'name' => $name, 'purch_price' => $value['sku_purch_price'] ? $value['sku_purch_price'] : null, 'retail_price' => $value['sku_retail_price'] ? $value['sku_retail_price'] : null, 'online_price' => $value['sku_online_price'] ? $value['sku_online_price'] : null, 'shop_mem_price' => $value['sku_shop_mem_price'] ? $value['sku_shop_mem_price'] : null, 'store_mem_price' => $value['sku_store_mem_price'] ? $value['sku_store_mem_price'] : null, 'sku_num' => 1, 'goods_num' => $value['sku_goods_num'] ? $value['sku_goods_num'] : 0, 'sku_code' => $value['sku_code'], 'sku_goods_number' => $value['sku_goods_number'], 'more_num' => $value['sku_more_num'], 'less_num' => $value['sku_less_num'], 'sku_weight_value' => $value['sku_weight_value'], 'third_goods_code' => $parameter['platform_type'] == 2 ? $value['third_goods_code'] : '' ]; $data['sku_json'] = $temp; $data['goods_num'] = 0; break; } if ($user_type == 4) { //门店 $data['storeid'] = $store_id; $data['type'] = 2; } $addGoodsArr[] = $data; unset($data); unset($value); unset($name); unset($temp); return ['addGoodsArr' => $addGoodsArr]; } /** * 规格信息处理 * @param $parameter * [ * platform_type 商户平台类型 1默认系统 2微礼平台 * addGoodsArr 成功的商品列表 * value 商品信息 * ] * @return array */ public function ImportGoodsSkuArr($parameter) { $addGoodsArr = $parameter['addGoodsArr']; $value = $parameter['value']; $name[] = $value['sku_val_1']; if (!empty($value['sku_val_2'])) $name[] = $value['sku_val_2']; if (!empty($value['sku_val_3'])) $name[] = $value['sku_val_3']; if (!empty($value['sku_val_4'])) $name[] = $value['sku_val_4']; $data = [ 'name' => $name, 'purch_price' => $value['sku_purch_price'] ? $value['sku_purch_price'] : null, 'retail_price' => $value['sku_retail_price'] ? $value['sku_retail_price'] : null, 'online_price' => $value['sku_online_price'] ? $value['sku_online_price'] : null, 'shop_mem_price' => $value['sku_shop_mem_price'] ? $value['sku_shop_mem_price'] : null, 'store_mem_price' => $value['sku_store_mem_price'] ? $value['sku_store_mem_price'] : null, 'sku_num' => 1, 'goods_num' => $value['sku_goods_num'] ? $value['sku_goods_num'] : 0, 'sku_code' => $value['sku_code'], 'sku_goods_number' => $value['sku_goods_number'], 'more_num' => $value['sku_more_num'], 'less_num' => $value['sku_less_num'], 'sku_weight_value' => $value['sku_weight_value'], ]; //第三方平台 if ($parameter['platform_type'] == 2) { $data['third_goods_code'] = $value['third_goods_code']; } $addGoodsArr[count($addGoodsArr) - 1]['sku_json']['sku_list'][] = $data; unset($name); unset($data); unset($value); return ['addGoodsArr' => $addGoodsArr]; } /** * 导入商品表格头部 * @param $platform_type 商户平台类型 1默认系统 2微礼平台 * @return array */ public function ImportGoodsTitle($platform_type) { $headArr = [ 'goods_name' => '商品名称(必填)', 'subheading' => '副标题', 'goods_brand' => '品牌名称', 'goods_code' => '条码', 'good_number' => '货号(必填)', 'class_name_1' => '第一级分类(必填)', 'class_name_2' => '第二级分类', 'class_name_3' => '第三级分类', 'goods_num' => '商品总库存', 'purch_price' => '进货价', 'retail_price' => '店内零售价(开启店内出售后必填)', 'online_price' => '商城零售价(开启商城出售后必填)', 'store_mem_price' => '店内会员价(开启店内会员价必填)', 'shop_mem_price' => '商城会员价(开启商城会员价必填)', 'retail_state' => '是否开启店内出售', 'issellonline' => '是否开启商城出售', 'store_mem_status' => '是否开启店内会员价', 'shop_mem_status' => '是否开启商城会员价', 'can_exchange_weigh' => '是否称重', 'vip_online_state' => '是否开启线上折扣', 'vip_retail_state' => '是否开启线下折扣', 'serial_number_state' => '是否开启串号', 'more_num' => '库存上限(超量值)', 'less_num' => '库存下限(预警值)', 'company' => '单位', 'weight_value' => '重量(Kg)', 'specifications' => '规格', ]; switch ($platform_type) { case 2: $headArr['third_goods_code'] = 'Q3 ERP平台商品编码'; break; } return $headArr; } /** * 导入商品的规格商品头部 * @param $platform_type $platform_type 商户平台类型 1默认系统 2微礼平台 * @return array */ public function ImportSkuGoodsTitle($platform_type) { $headArr = [ 'goods_name' => '商品名称(必填)', 'subheading' => '副标题', 'goods_brand' => '品牌名称', 'goods_code' => '条码', 'good_number' => '货号(必填)', 'class_name_1' => '第一级分类(必填)', 'class_name_2' => '第二级分类', 'class_name_3' => '第三级分类', 'goods_num' => '商品总库存', 'purch_price' => '进货价', 'retail_price' => '店内零售价(开启店内出售后必填)', 'online_price' => '商城零售价(开启商城出售后必填)', 'store_mem_price' => '店内会员价(开启店内会员价必填)', 'shop_mem_price' => '商城会员价(开启商城会员价必填)', 'retail_state' => '是否开启店内出售', 'issellonline' => '是否开启商城出售', 'store_mem_status' => '是否开启店内会员价', 'shop_mem_status' => '是否开启商城会员价', 'vip_online_state' => '是否开启线上折扣', 'vip_retail_state' => '是否开启线下折扣', 'serial_number_state' => '是否开启串号', 'more_num' => '库存上限(超量值)', 'less_num' => '库存下限(预警值)', 'company' => '单位', 'weight_value' => '重量(Kg)', 'specifications' => '规格', 'sku_1' => '规格1', 'sku_val_1' => '规格值1', 'sku_2' => '规格2', 'sku_val_2' => '规格值2', 'sku_3' => '规格3', 'sku_val_3' => '规格值3', 'sku_4' => '规格4', 'sku_val_4' => '规格值4', 'sku_goods_number' => '规格货号(必填)', 'sku_code' => '规格条码', 'sku_goods_num' => '规格库存', 'sku_more_num' => '规格上限', 'sku_less_num' => '规格下限', 'sku_purch_price' => '规格进价', 'sku_retail_price' => '规格店内零售价(必填)', 'sku_online_price' => '规格商城售价(必填)', 'sku_store_mem_price' => '规格店内会员价(必填)', 'sku_shop_mem_price' => '规格商城会员价(必填)', 'sku_weight_value' => '规格重量(Kg)' ]; switch ($platform_type) { case 2: $headArr['third_goods_code'] = 'Q3 ERP平台商品编码'; break; } return $headArr; } /** * 根据商品单位获取重量-针对称重商品 * @param string $company 单位 * @return float|int|string */ public function getGoodsWeightFromCompany($company = '') { switch ($company) { case 'g': case 'G': case '克': $weight_value = 0.001; break; case '斤': case '市斤': $weight_value = 0.5; break; default: $weight_value = 1; break; } return $weight_value; } /** * 将条码查询出的商品图片存入图片库 * @param $parameter * [ * path 图片链接 * ] * @return array * [ * status * message * goods_image=>[ * id 图片库id * path 图片路径 * ] * ] */ public function basisCodeAddImageGallery($parameter) { $imageGalleryModel = new ImageGalleryModel(); $imageInfo = $imageGalleryModel->getFind(array('path' => $parameter['path'])); if (!empty($imageInfo)) { return ['status' => 1, 'message' => '查询成功', 'goods_image' => ['id' => $imageInfo['id'], 'path' => $imageInfo['path']]]; } else { $data = array( 'path' => $parameter['path'], 'add_time' => time(), 'storage_type' => 0, 'source_type' => 0, 'user_type' => 0, 'from_type_id' => 52, 'from_name' => '商品云库图片', ); $image_id = $imageGalleryModel->add($data); if (!$image_id) { return ['status' => 0, 'message' => '存入图片库失败']; } return ['status' => 1, 'message' => '添加成功', 'goods_image' => ['id' => $image_id, 'path' => $parameter['path']]]; } } /** * 条码查询方式 * @param $partner_id 合伙人id * @return array|mixed */ public function basisUserIdGetCode($partner_id) { if (empty($partner_id)) { return []; } $partner_info = M('retail_admin')->field("app_status,app_code")->where(['id' => $partner_id])->find(); return $partner_info; } /** * 根据商品条码从云库查询商品信息 * @param $code * @param $partner_id 合伙人id * @return array|mixed */ public function basisCodeGetGoodsInfo($code, $partner_id) { if (empty($code)) { return ['status' => 0, 'message' => '请输入商品条码']; } $code = trim($code); $info = $this->getLocal($code); //本地云库 if (empty($info)) { $partner_info = $this->basisUserIdGetCode($partner_id); //合伙人信息 if ($partner_info['app_status'] == 1 && !empty($partner_info['app_code'])) { $result = $this->aLiYunGoodsInfo($code, $partner_info['app_code']); //阿里云云库 if (!empty($result)) { $result = json_decode($result, true); if ($result['status'] == '200') { $goods_info = $result['result']; $info = array( 'code' => $code, 'name' => $goods_info['goodsName'], 'specification' => $goods_info['spec'], 'unit' => '', 'origin' => $goods_info['ycg'], 'trademark' => $goods_info['trademark'], 'image' => $goods_info['img'], ); $info['id'] = $this->addLocal($info); //添加本地商品库 } else { return ['status' => 0, 'message' => '未找到该商品']; } } else { return ['status' => 0, 'message' => '未找到该商品']; } } else { return ['status' => 0, 'message' => '未找到该商品']; } } if ($info['image'] && empty($info['image_id'])) { $codeImage = $this->basisCodeAddImageGallery([ 'path' => $info['image'], 'storage_type' => 5 ]); //商品图片存入库图片库 if (!empty($codeImage['goods_image'])) { $info['image_id'] = $codeImage['goods_image']['id']; //商品封面图 $GoodsCodeModel = new GoodsCodeModel(); $GoodsCodeModel->updateOrder(['id' => $info['id']], ['image_id' => $info['image_id']]); } } return ['status' => 1, 'message' => '查询成功', 'data' => ['goods' => $info]]; } /** * 获取本地商品库信息 * @param $code 条码 * @return mixed */ public function getLocal($code) { if (empty($code)) { return []; } $GoodsCodeModel = new GoodsCodeModel(); $info = $GoodsCodeModel->getFind(array('code' => $code), 'id,name,specification,unit,origin,trademark,image,image_id'); return $info; } /** * 添加本地商品云库 * @param $parameter * @return bool|mixed */ protected function addLocal($parameter) { if (empty($parameter)) { return false; } $data = [ 'code' => $parameter['code'], 'name' => $parameter['name'], 'specification' => $parameter['specification'], 'origin' => $parameter['origin'], 'trademark' => $parameter['trademark'], 'image' => $parameter['img'] ]; $GoodsCodeModel = new GoodsCodeModel(); $id = $GoodsCodeModel->addOrder($parameter); return $id; } /** * 阿里云根据商品条码查询商品信息 * @param $goods_code 条码 * @param $appcode appcode * @return bool|string */ public function aLiYunGoodsInfo($goods_code, $appcode) { $host = 'https://codequery.market.alicloudapi.com'; $path = '/querybarcode'; $method = "GET"; $Authorization = "Authorization:APPCODE"; $querys = "code="; $headers = array( $Authorization . ' ' . $appcode ); $querys = $querys . $goods_code; $bodys = ""; $url = $host . $path . "?" . $querys; $result = $this->curl_get($method, $url, $headers, $host); return $result; } /** * 发送请求(向阿里云) * @param $method * @param $url * @param $headers * @param $host * @return bool|string */ protected function curl_get($method, $url, $headers, $host) { $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_FAILONERROR, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, false); //curl_setopt($curl, CURLOPT_HEADER, true); //如不输出json, 请打开这行代码,打印调试头部状态码。 //状态码: 200 正常;400 URL无效;401 appCode错误; 403 次数用完; 500 API网管错误 if (1 == strpos("$" . $host, "https://")) { curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); } $out_put = curl_exec($curl); return $out_put; } /** * 判断货号或者条码在门店是否可以使用 * @param $param * $param['type'](必传) 检测类型 1货号 2条码 3第三方平台商品编码 * $param['store_id'](必传) 门店ID * $param['value'](必传) 需要检测的值 * $param['goods_id'] 商品ID (与商品规格ID只能二选一传输) * $param['goods_sku_id'] 商品规格ID (与商品ID只能二选一传输) * @return mixed */ public function jumpGoodsNumberOrCode($param) { if (!isset($param['type']) || !isset($param['value']) || !isset($param['store_id'])) { return callBack(statusCode()['error'], '缺少必要参数'); } if (isset($param['goods_id']) && isset($param['goods_sku_id'])) { return callBack(statusCode()['error'], '只能检测一种数据'); } switch ($param['type']) { case 1: $goods_key = 'goods_number'; $sku_key = 'sku_goods_number'; $name = '货号'; break; case 2: $goods_key = 'goods_code'; $sku_key = 'sku_code'; $name = '条码'; break; case 3: $goods_key = 'third_goods_code'; $sku_key = 'third_goods_code'; $name = 'Q3 ERP平台商品编码'; break; } $map = array( 'store_id' => $param['store_id'], $goods_key => $param['value'], 'status' => ['in', [0, 1]], ); if (isset($param['goods_id']) && !empty($param['goods_id'])) { $map['id'] = array('neq', $param['goods_id']); } $GoodsModel = new RetailGoodsModel(); $count = $GoodsModel->getCount($map); if ($count > 0) { return callBack(statusCode()['error'], '已有商品使用该' . $name); } $sMap = array( 'store_id' => $param['store_id'], $sku_key => $param['value'], 'state' => 0, ); if (isset($param['goods_sku_id']) && !empty($param['goods_sku_id'])) { $sMap['id'] = array('neq', $param['goods_sku_id']); } $SkuGoodsModel = new RetailSkuGoodsModel(); $sku_count = $SkuGoodsModel->getCount($sMap); if ($sku_count > 0) { return callBack(statusCode()['error'], '已有规格使用该' . $name); } return callBack(statusCode()['success'], '该' . $name . '可使用'); } /** * 判断货号或者条码在商户是否可以使用 * @param $param * $param['type'](必传) 检测类型 1货号 2条码 3第三方平台Q3商品编码 * $param['merchant_id'](必传) 商户ID * $param['value'](必传) 需要检测的值 * $param['goods_id'] 商品ID (与商品规格ID只能二选一传输) * $param['goods_sku_id'] 商品规格ID (与商品ID只能二选一传输) * @return mixed */ public function jumpMerGoodsNumberOrCode($param) { if (!isset($param['type']) || !isset($param['value']) || !isset($param['merchant_id'])) { return callBack(statusCode()['error'], '缺少必要参数'); } if (isset($param['goods_id']) && isset($param['goods_sku_id'])) { return callBack(statusCode()['error'], '只能检测一种数据'); } switch ($param['type']) { case 1: $goods_key = 'good_number'; $sku_key = 'sku_goods_number'; $name = '货号'; break; case 2: $goods_key = 'goods_code'; $sku_key = 'sku_code'; $name = '条码'; break; } //商户与全部 $map = array( 'merchantid' => $param['merchant_id'], $goods_key => $param['value'], 'status' => ['in', [0, 1]], ); if (isset($param['goods_id']) && !empty($param['goods_id'])) { $map['id'] = array('neq', $param['goods_id']); } $GoodsModel = new RetailMgoodsModel(); $count = $GoodsModel->getCount($map); if ($count > 0) { return callBack(statusCode()['error'], '已有商品使用该' . $name); } $sMap = array( 'merchantid' => $param['merchant_id'], $sku_key => $param['value'], 'state' => 0, ); if (isset($param['goods_sku_id']) && !empty($param['goods_sku_id'])) { $sMap['id'] = array('neq', $param['goods_sku_id']); } $SkuGoodsModel = new SkuMGoodsModel(); $sku_count = $SkuGoodsModel->getCount($sMap); if ($sku_count > 0) { return callBack(statusCode()['error'], '已有规格使用该' . $name); } return callBack(statusCode()['success'], '该' . $name . '可使用'); } /** * 获取门店商品列表信息、按照规格、非规格筛选 * @param $param * $param['store_id'](必传) 门店ID * $param['attribute_state'](必传) 1非规格 2多规格 * $param['pricing_method'] 1不称重 2称重 * $param['keyword'] 搜索关键词,主要对名称模糊搜索,货号和条码全等搜索 * $param['person1'] 一级分类 * $param['person2'] 二级分类 * $param['person3'] 三级分类 * $param['page'] 页码 * $param['limit'] 每页数量 最大值 1000 * $param['unwanted_id'] 不需要的、要剔除的ID * $serial_number_state 0不包含串号商品 1包含串号商品 * @return mixed */ public function comStoreGoods($param) { $serial_number_state = $param['serial_number_state'] ? $param['serial_number_state'] : 0; $attribute_state = $param['attribute_state'] ? $param['attribute_state'] : 1; $keyword = $param['keyword']; //搜索关键词 $page = $param['page']; $limit = $param['limit']; $store_id = $param['store_id']; if (!$attribute_state || !$page || !$limit) { return callBack(statusCode()['error'], '缺少必要参数,详情请见data', array( 'store_id' => $store_id, 'attribute_state' => $attribute_state, 'page' => $page, 'limit' => $limit, )); } if (!in_array($attribute_state, ['1', '2'])) { return callBack(statusCode()['error'], '请传入正确的规格类型'); } if (!verifyNumber($limit, 0, 1, 1000)) { return callBack(statusCode()['error'], '请传入正确的每页数量'); } $map = array( 'store_id' => $store_id, 'status' => 0, //正常商品 ); $map['attribute_state'] = $attribute_state; if ($serial_number_state != 1) { $map['serial_number_state'] = 0; } if ($attribute_state == 1) { $GoodsModel = new RetailGoodsModel(); //称重 if (!empty($param['pricing_method'])) { $map['pricing_method'] = $param['pricing_method']; } } else { $GoodsModel = new SkuGoodsViewModel(); $map['attribute_state'] = 2; //开启的规格商品 $map['state'] = 0; } //按名称、货号、条码搜索 if (!empty($keyword)) { $map[] = array( 'goods_name' => array('like', "%" . $keyword . "%"), 'goods_number|goods_code' => $keyword, '_logic' => 'OR', ); } //剔除已选商品 if (!empty($param['used_id'])) { if ($attribute_state == 1) { $map['id'] = array('not in', $param['used_id']); } else { $map['sku_goods.id'] = array('not in', $param['used_id']); } } $GoodsClassify = new GoodsClassify(); $map = $GoodsClassify->getGoodsClassId($param, $map, "goods_class_id"); //设定获取的字段 if ($attribute_state == 1) { $field = array( 'id', 'goods_class_id', 'goods_img_id', 'goods_name', 'goods_code', 'plu_code', 'goods_class_id', 'retail_price', 'online_price', 'store_mem_status', 'shop_mem_status', 'plus_mem_status', 'store_mem_price', 'shop_mem_price', 'plus_price', 'goods_yieldly_id', 'goods_brand_id', 'company', 'specifications', 'goods_number', 'pricing_method', ); } else { $field = array( 'id', 'goods_class_id', 'goods_img_id', 'sku_id', 'sku_plu_code', 'goods_name', 'store_mem_status', 'shop_mem_status', 'plus_mem_status', 'sku_retail_price', 'sku_store_mem_price', 'sku_shop_mem_price', 'sku_online_price', 'sku_plus_price', 'sku_goods_number', 'sku_code', 'sku_id_list', 'goods_yieldly_id', 'goods_brand_id', 'company', 'pricing_method', ); } $goodsList = $GoodsModel->getSelect($map, $field, 'id desc', "{$page},{$limit}"); $goodsList = $goodsList ? $goodsList : array(); $count = !empty($goodsList) ? ($GoodsModel->getCount($map)) : 0; $SkuAttribute = new SkuAttribute(); $Brand = new Brand(); $Yieldly = new Yieldly(); $sku_name = array(); //临时存储规格名称列表 $brand_name = array(); //临时存品牌名称列表 $yieldly_name = array(); //临时存储产地名称列表 $WarehouseGoodsModel = new SWarehousingGoodsModel(); //入库记录 $GoodsClassModel = new RetailGoodsClassModel(); $ImageModel = new ImageGalleryModel(); foreach ($goodsList as $key => &$value) { $value['index'] = $key + 1; $dateMap = [ 'goods_id' => $value['id'], ]; if ($attribute_state == 2) { $value['plu_code'] = $value['sku_plu_code']; $sku_id_list = explode(',', $value['sku_id_list']); $name = []; foreach ($sku_id_list as $v) { $name[] = $SkuAttribute->getSkuListName($v, $sku_name); } $value['specifications'] = implode(';', $name); $value['retail_price'] = $value['sku_retail_price']; $value['store_mem_price'] = $value['sku_store_mem_price']; $value['shop_mem_price'] = $value['sku_shop_mem_price']; $value['online_price'] = $value['sku_online_price']; $value['plus_price'] = $value['sku_plus_price']; $value['goods_number'] = $value['sku_goods_number']; $value['goods_code'] = $value['sku_code']; $value['goods_sku_id'] = $value['sku_id']; unset($value['sku_retail_price']); unset($value['sku_store_mem_price']); unset($value['sku_online_price']); unset($value['sku_plus_price']); unset($value['sku_goods_number']); unset($value['sku_code']); unset($value['sku_id']); $dateMap['sku_id'] = $value['sku_id']; } //生产日期、保质期 $date = $WarehouseGoodsModel->basisOrderFind($dateMap, 'quality_guarantee_period,build_date', 'id asc'); $value['build_date'] = $date ? $date['build_date'] : ''; $value['quality_guarantee_period'] = $date ? $date['quality_guarantee_period'] : ''; $value['goods_img'] = $value['goods_img_id'] ? $ImageModel->getFieldPath(['id' => $value['goods_img_id']]) : ''; $value['goods_class_name'] = $GoodsClassModel->getClassName($value['goods_class_id']); if ($value['store_mem_status'] != 1) $value['store_mem_price'] = ''; if ($value['shop_mem_status'] != 1) $value['shop_mem_price'] = ''; if ($value['plus_mem_status'] != 1) $value['plus_price'] = ''; $value['goods_brand'] = $Brand->getBrandName($value['goods_brand_id'], $brand_name); $value['goods_yieldly'] = $Yieldly->getYieldlyName($value['goods_yieldly_id'], $yieldly_name); unset($value['goods_brand_id']); unset($value['goods_yieldly_id']); } unset($sku_name); unset($brand_name); unset($yieldly_name); $message = $goodsList ? '获取成功' : '暂无数据'; return callBack(statusCode()['success'], $message, ['list' => $goodsList, 'count' => $count]); } }