package com.tj.dr.service.impl;
import com.alibaba.dubbo.config.annotation.Reference;
import com.tj.dr.common.tools.Common;
import com.tj.dr.common.tools.PageUtils;
import com.tj.dr.dao.SearchMapper;
import com.tj.dr.interfaces.config.ConfigInterface;
import com.tj.dr.interfaces.user.UserInterfaces;
import com.tj.dr.model.trade.dto.SearchGoodsDto;
import com.tj.dr.model.trade.vo.GoodsClassNameVo;
import com.tj.dr.model.user.RedpigmallAccessory;
import com.tj.dr.service.SearchService;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.tj.dr.common.tools.Common;
import com.tj.dr.common.tools.PageUtils;
import com.tj.dr.dao.SearchMapper;
import com.tj.dr.interfaces.config.ConfigInterface;
import com.tj.dr.interfaces.user.UserInterfaces;
import com.tj.dr.model.trade.dto.SearchGoodsDto;
import com.tj.dr.model.trade.vo.GoodsClassNameVo;
import com.tj.dr.model.user.RedpigmallAccessory;
import com.tj.dr.service.SearchService;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Service
public class SearchServiceImpl implements SearchService {
public class SearchServiceImpl implements SearchService {
@Autowired
private SearchMapper searchMapper;
private SearchMapper searchMapper;
@Autowired
private SolrClient solrClient;
private SolrClient solrClient;
@Reference(version = "1.0")
private UserInterfaces userInterfaces;
private UserInterfaces userInterfaces;
@Reference(version = "1.0")
private ConfigInterface configInterface;
private ConfigInterface configInterface;
/**
* 更新索引库所有索引
*/
@Override
public void importAllIndex() {
try {
List<SearchGoodsDto> searchGoodsDtos = searchMapper.selectByGoodsList();
* 更新索引库所有索引
*/
@Override
public void importAllIndex() {
try {
List<SearchGoodsDto> searchGoodsDtos = searchMapper.selectByGoodsList();
List<SolrInputDocument> documents = new ArrayList<>();
for (SearchGoodsDto goods : searchGoodsDtos) {
SolrInputDocument document = new SolrInputDocument();
document.addField("id", goods.getId());
document.addField("goodsName", goods.getGoodsName());
String price = goods.getGoodsPrice().toString();
document.addField("goodsPrice", price);
String url = null;
if (!Common.isEmpty(goods.getGoodsMainPhotoId())) {
RedpigmallAccessory pic = userInterfaces.getRedpigmallAccessoryById(Long.valueOf(goods.getGoodsMainPhotoId()));
url = configInterface.getSysConfig().getDetail().getImagewebserver() + pic.getPath() + "/"
+ pic.getName();
}
document.addField("goodsMainPhotoId", url);
documents.add(document);
}
for (SearchGoodsDto goods : searchGoodsDtos) {
SolrInputDocument document = new SolrInputDocument();
document.addField("id", goods.getId());
document.addField("goodsName", goods.getGoodsName());
String price = goods.getGoodsPrice().toString();
document.addField("goodsPrice", price);
String url = null;
if (!Common.isEmpty(goods.getGoodsMainPhotoId())) {
RedpigmallAccessory pic = userInterfaces.getRedpigmallAccessoryById(Long.valueOf(goods.getGoodsMainPhotoId()));
url = configInterface.getSysConfig().getDetail().getImagewebserver() + pic.getPath() + "/"
+ pic.getName();
}
document.addField("goodsMainPhotoId", url);
documents.add(document);
}
solrClient.add(documents);
solrClient.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 分页查询商品
*
* @param name
* @param currentPage
* @param pageSize
* @return
*/
@Override
public PageUtils query(String name, int currentPage, int pageSize) throws IOException, SolrServerException {
* 分页查询商品
*
* @param name
* @param currentPage
* @param pageSize
* @return
*/
@Override
public PageUtils query(String name, int currentPage, int pageSize) throws IOException, SolrServerException {
SolrQuery params = new SolrQuery();
//查询条件
params.set("q", "goodsName:" + name);
//这里的分页和mysql分页一样
params.set("start", (currentPage - 1) * pageSize);
params.set("rows", pageSize);
params.set("wt", "json");
QueryResponse query = solrClient.query(params);
//查询结果
SolrDocumentList results = query.getResults();
//查询条件
params.set("q", "goodsName:" + name);
//这里的分页和mysql分页一样
params.set("start", (currentPage - 1) * pageSize);
params.set("rows", pageSize);
params.set("wt", "json");
QueryResponse query = solrClient.query(params);
//查询结果
SolrDocumentList results = query.getResults();
List<GoodsClassNameVo> list = new ArrayList<>();
for (SolrDocument result : results) {
GoodsClassNameVo searchGoodsDto = new GoodsClassNameVo();
searchGoodsDto.setId(Long.valueOf(result.get("id").toString()));
searchGoodsDto.setGoodsName(String.valueOf(result.get("goodsName")));
BigDecimal goodsPrice = new BigDecimal(result.get("goodsPrice").toString());
searchGoodsDto.setGoodsPrice(goodsPrice);
if (null!=result.get("goodsMainPhotoId")){
searchGoodsDto.setIcon(result.get("goodsMainPhotoId").toString());
}
for (SolrDocument result : results) {
GoodsClassNameVo searchGoodsDto = new GoodsClassNameVo();
searchGoodsDto.setId(Long.valueOf(result.get("id").toString()));
searchGoodsDto.setGoodsName(String.valueOf(result.get("goodsName")));
BigDecimal goodsPrice = new BigDecimal(result.get("goodsPrice").toString());
searchGoodsDto.setGoodsPrice(goodsPrice);
if (null!=result.get("goodsMainPhotoId")){
searchGoodsDto.setIcon(result.get("goodsMainPhotoId").toString());
}
list.add(searchGoodsDto);
}
//搜索总数
long found = results.getNumFound();
//搜索开始
long start = results.getStart();
}
//搜索总数
long found = results.getNumFound();
//搜索开始
long start = results.getStart();
PageUtils<GoodsClassNameVo> pageUtils = new PageUtils<>();
pageUtils.setPageNum(currentPage);
pageUtils.setPageSize(pageSize);
pageUtils.setTotalNum(Integer.valueOf(String.valueOf(found)));
pageUtils.setPageCount(Integer.valueOf(String.valueOf(found / pageSize == 0 ? found / pageSize : found / pageSize + 1)));
pageUtils.setIsMore(found - start > pageSize ? 1 : 0);
pageUtils.setItems(list);
pageUtils.setPageNum(currentPage);
pageUtils.setPageSize(pageSize);
pageUtils.setTotalNum(Integer.valueOf(String.valueOf(found)));
pageUtils.setPageCount(Integer.valueOf(String.valueOf(found / pageSize == 0 ? found / pageSize : found / pageSize + 1)));
pageUtils.setIsMore(found - start > pageSize ? 1 : 0);
pageUtils.setItems(list);
return pageUtils;
}
}
/**
* @param
* @author: xxx
* Description:添加单个商品索引
* @Date: 22:54 2016/5/3
*/
@Override
public void addGoodsIndex(SearchGoodsDto searchGoodsDto) throws IOException, SolrServerException {
RedpigmallAccessory pic = userInterfaces.getRedpigmallAccessoryById(Long.valueOf(searchGoodsDto.getGoodsMainPhotoId()));
String url = null;
if (pic != null) {
url = configInterface.getSysConfig().getDetail().getImagewebserver() + pic.getPath() + "/"
+ pic.getName();
}
SolrInputDocument document = new SolrInputDocument();
document.addField("id", searchGoodsDto.getId());
document.addField("goodsName", searchGoodsDto.getGoodsName());
String price = searchGoodsDto.getGoodsPrice().toString();
document.addField("goodsPrice", price);
document.addField("goodsMainPhotoId", url);
solrClient.add(document);
solrClient.commit();
}
* @param
* @author: xxx
* Description:添加单个商品索引
* @Date: 22:54 2016/5/3
*/
@Override
public void addGoodsIndex(SearchGoodsDto searchGoodsDto) throws IOException, SolrServerException {
RedpigmallAccessory pic = userInterfaces.getRedpigmallAccessoryById(Long.valueOf(searchGoodsDto.getGoodsMainPhotoId()));
String url = null;
if (pic != null) {
url = configInterface.getSysConfig().getDetail().getImagewebserver() + pic.getPath() + "/"
+ pic.getName();
}
SolrInputDocument document = new SolrInputDocument();
document.addField("id", searchGoodsDto.getId());
document.addField("goodsName", searchGoodsDto.getGoodsName());
String price = searchGoodsDto.getGoodsPrice().toString();
document.addField("goodsPrice", price);
document.addField("goodsMainPhotoId", url);
solrClient.add(document);
solrClient.commit();
}
/**
* @param
* @param ids
* @author: xxx
* Description: 根据id批量删除
* @Date: 22:42 2016/5/3
*/
@Override
public void deleteGoodsIndex(String[] ids) throws IOException, SolrServerException {
List list = new ArrayList<>();
for (String id : ids) {
list.add(id);
}
solrClient.deleteById(list);
solrClient.commit();
}
}
* @param
* @param ids
* @author: xxx
* Description: 根据id批量删除
* @Date: 22:42 2016/5/3
*/
@Override
public void deleteGoodsIndex(String[] ids) throws IOException, SolrServerException {
List list = new ArrayList<>();
for (String id : ids) {
list.add(id);
}
solrClient.deleteById(list);
solrClient.commit();
}
}