|
|
|
<?php
|
|
|
|
|
|
|
|
namespace app\common\service;
|
|
|
|
|
|
|
|
use app\common\library\elasticsearch\Client;
|
|
|
|
|
|
|
|
class GoodsEs
|
|
|
|
{
|
|
|
|
private Client $esService;
|
|
|
|
|
|
|
|
private string $index_name = 'goods_list';
|
|
|
|
|
|
|
|
private string $field = 'goods_id,goods_type,goods_no,goods_name';
|
|
|
|
|
|
|
|
public function __construct()
|
|
|
|
{
|
|
|
|
$this->esService = Client::setEs($this->index_name);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 查询商品列表
|
|
|
|
* @param $params
|
|
|
|
*/
|
|
|
|
public function list($params = [],$page = 1, $limit = 10)
|
|
|
|
{
|
|
|
|
return $this->esService
|
|
|
|
->select($this->field)
|
|
|
|
//->setDebug()
|
|
|
|
->like($params)
|
|
|
|
->from($page)
|
|
|
|
->size($limit)
|
|
|
|
->order(['goods_id' => 'desc'])
|
|
|
|
->query();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function count($params = [],$page = 1, $limit = 10)
|
|
|
|
{
|
|
|
|
return $this->esService
|
|
|
|
//->setDebug()
|
|
|
|
->like($params)
|
|
|
|
->from($page)
|
|
|
|
->size($limit)
|
|
|
|
->query(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 更新商品
|
|
|
|
*/
|
|
|
|
public function updateData($goods_id, $data)
|
|
|
|
{
|
|
|
|
return $this->esService->update($goods_id, $data);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 查询商品详情
|
|
|
|
*/
|
|
|
|
public function detail($goods_id)
|
|
|
|
{
|
|
|
|
return $this->esService->getDoc($goods_id);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 创建商品
|
|
|
|
*/
|
|
|
|
public function createData($goods_id, $goods_list)
|
|
|
|
{
|
|
|
|
$goods_list['create_time'] = $goods_list['create_time'] ? strtotime($goods_list['create_time']) * 1000 : time() * 1000;
|
|
|
|
$goods_list['update_time'] = $goods_list['update_time'] ? strtotime($goods_list['update_time']) * 1000 : time() * 1000;
|
|
|
|
$goods_list['delivery_type'] = implode(',', $goods_list['delivery_type']);
|
|
|
|
return $this->esService->addDoc($goods_id, $goods_list)->asArray();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 批量创建商品
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public function batchCreateData()
|
|
|
|
{
|
|
|
|
for ($page = 1; $page<=134; $page++)
|
|
|
|
{
|
|
|
|
$this->addData($page);
|
|
|
|
sleep(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function addData($page)
|
|
|
|
{
|
|
|
|
$goods_list = \app\common\model\Goods::where('goods_id', '>', 368257)
|
|
|
|
// ->order('goods_id desc')
|
|
|
|
->page($page)
|
|
|
|
->limit(2000)
|
|
|
|
->select()
|
|
|
|
->toArray();
|
|
|
|
//
|
|
|
|
$i = 0;
|
|
|
|
foreach ($goods_list as $value)
|
|
|
|
{
|
|
|
|
$value['create_time'] = strtotime($value['create_time']) * 1000;
|
|
|
|
$value['update_time'] = strtotime($value['update_time']) * 1000;
|
|
|
|
$value['delivery_type'] = implode(',', $value['delivery_type']);
|
|
|
|
$res = $this->esService->addDoc($value['goods_id'], $value)->asArray();
|
|
|
|
if($res['result'] == 'created')
|
|
|
|
{
|
|
|
|
$i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
echo('同步成功'.$i.'条数据').PHP_EOL;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 删除商品
|
|
|
|
*/
|
|
|
|
public function delete($goods_id)
|
|
|
|
{
|
|
|
|
return $this->esService->deleteDoc($goods_id);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 删除索引
|
|
|
|
*/
|
|
|
|
public function deleteIndex()
|
|
|
|
{
|
|
|
|
return $this->esService->deleteIndexNew();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 创建商品Index
|
|
|
|
* @return void
|
|
|
|
* @throws Exception
|
|
|
|
*/
|
|
|
|
function createGoodsIndex()
|
|
|
|
{
|
|
|
|
$mapping = [
|
|
|
|
'properties' => [
|
|
|
|
'goods_id' => [
|
|
|
|
'type' => 'keyword'
|
|
|
|
],
|
|
|
|
'goods_type' => [
|
|
|
|
'type' => 'keyword'
|
|
|
|
],
|
|
|
|
'goods_name' => [
|
|
|
|
'type' => 'text',
|
|
|
|
"analyzer" => "ik_smart"
|
|
|
|
],
|
|
|
|
'goods_no' => [
|
|
|
|
'type' => 'keyword',
|
|
|
|
],
|
|
|
|
'video_id' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'brand_id' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'video_cover_id' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'selling_point' => [
|
|
|
|
'type' => 'text',
|
|
|
|
"analyzer" => "ik_smart"
|
|
|
|
],
|
|
|
|
'spec_type' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'cost_price_min' => [
|
|
|
|
'type' => 'float'
|
|
|
|
],
|
|
|
|
'goods_price_min' => [
|
|
|
|
'type' => 'float'
|
|
|
|
],
|
|
|
|
'goods_price_max' => [
|
|
|
|
'type' => 'float'
|
|
|
|
],
|
|
|
|
'line_price_min' => [
|
|
|
|
'type' => 'float'
|
|
|
|
],
|
|
|
|
'line_price_max' => [
|
|
|
|
'type' => 'float'
|
|
|
|
],
|
|
|
|
'stock_total' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'deduct_stock_type' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'is_restrict' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'restrict_total' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'restrict_single' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'content' => [
|
|
|
|
'type' => 'text',
|
|
|
|
],
|
|
|
|
'sales_initial' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'delivery_id' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'is_points_gift' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'is_points_discount' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'is_alone_points_discount' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'points_discount_config' => [
|
|
|
|
'type' => 'text'
|
|
|
|
],
|
|
|
|
'is_enable_grade' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'is_alone_grade' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'alone_grade_equity' => [
|
|
|
|
'type' => 'text'
|
|
|
|
],
|
|
|
|
'is_ind_dealer' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'dealer_money_type' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'first_money' => [
|
|
|
|
'type' => 'float'
|
|
|
|
],
|
|
|
|
'second_money' => [
|
|
|
|
'type' => 'float'
|
|
|
|
],
|
|
|
|
'third_money' => [
|
|
|
|
'type' => 'float'
|
|
|
|
],
|
|
|
|
'is_ind_delivery_type' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'delivery_type' => [
|
|
|
|
'type' => 'keyword'
|
|
|
|
],
|
|
|
|
'status' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'sort' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'store_id' => [
|
|
|
|
'type' => 'keyword'
|
|
|
|
],
|
|
|
|
'merchant_id' => [
|
|
|
|
'type' => 'keyword'
|
|
|
|
],
|
|
|
|
'create_time' => [
|
|
|
|
'type' => 'date',
|
|
|
|
'format' => 'yyyy-MM-dd HH:mm:ss'
|
|
|
|
],
|
|
|
|
'update_time' => [
|
|
|
|
'type' => 'date',
|
|
|
|
'format' => 'yyyy-MM-dd HH:mm:ss'
|
|
|
|
],
|
|
|
|
'is_brand' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'is_new' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'paihang' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'remaizhishu' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'spu_id' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'channel' => [
|
|
|
|
'type' => 'keyword'
|
|
|
|
],
|
|
|
|
'unicode' => [
|
|
|
|
'type' => 'keyword'
|
|
|
|
],
|
|
|
|
'is_in_store' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'profit' => [
|
|
|
|
'type' => 'float'
|
|
|
|
],
|
|
|
|
'profit_rate' => [
|
|
|
|
'type' => 'float'
|
|
|
|
],
|
|
|
|
'cmmdty_model'=> [
|
|
|
|
'type' => 'keyword'
|
|
|
|
],
|
|
|
|
'remark' => [
|
|
|
|
'type' => 'text'
|
|
|
|
],
|
|
|
|
'sale_areas' => [
|
|
|
|
'type' => 'text'
|
|
|
|
],
|
|
|
|
'sale_areas_id' => [
|
|
|
|
'type' => 'keyword'
|
|
|
|
],
|
|
|
|
'data_type' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'is_pool' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'is_self' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'link' => [
|
|
|
|
'type' => 'keyword'
|
|
|
|
],
|
|
|
|
'origin_goods_id' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'link_other' => [
|
|
|
|
'type' => 'text'
|
|
|
|
],
|
|
|
|
'goods_no_other' => [
|
|
|
|
'type' => 'keyword'
|
|
|
|
],
|
|
|
|
'region' => [
|
|
|
|
'type' => 'text'
|
|
|
|
],
|
|
|
|
'region_text' => [
|
|
|
|
'type' => 'text'
|
|
|
|
],
|
|
|
|
'specific_value' => [
|
|
|
|
'type' => 'keyword'
|
|
|
|
],
|
|
|
|
'cate_status' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'is_check' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'goods_source' => [
|
|
|
|
'type' => 'keyword'
|
|
|
|
],
|
|
|
|
'delivery_time' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'distribute_price' => [
|
|
|
|
'type' => 'float'
|
|
|
|
],
|
|
|
|
'shop_price' => [
|
|
|
|
'type' => 'float'
|
|
|
|
],
|
|
|
|
'is_has_banner' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'is_has_detail' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'is_jingpin' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'sale_time' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
],
|
|
|
|
'markup_rate' => [
|
|
|
|
'type' => 'integer'
|
|
|
|
]
|
|
|
|
]
|
|
|
|
];
|
|
|
|
|
|
|
|
return $this->esService->createIndexNew($mapping);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 设置分词字段
|
|
|
|
*/
|
|
|
|
public function analyze()
|
|
|
|
{
|
|
|
|
return $this->esService->analyze('goods_name');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|