当前位置: 首页 > news >正文

创意做网站公司苏州的建筑公司网站

创意做网站公司,苏州的建筑公司网站,代码高亮wordpress,金融公司网站源码一、product-es准备 P128 ES在内存中#xff0c;所以在检索中优于mysql。ES也支持集群#xff0c;数据分片存储。 需求#xff1a; 上架的商品才可以在网站展示。上架的商品需要可以被检索。 分析sku在es中如何存储 商品mapping 分析#xff1a;商品上架在es中是存s…一、product-es准备 P128 ES在内存中所以在检索中优于mysql。ES也支持集群数据分片存储。 需求 上架的商品才可以在网站展示。上架的商品需要可以被检索。 分析sku在es中如何存储 商品mapping 分析商品上架在es中是存sku还是spu 1、检索的时候输入名字是需要按照sku的title进行全文检索的 2、检素使用商品规格规格是spu的公共属性每个spu是一样的 3、按照分类id进去的都是直接列出spu的还可以切换。 4〕、我们如果将sku的全量信息保存到es中包括spu属性〕就太多字段了 方案1 {skuId:1spuId:11skyTitile:华为xxprice:999saleCount:99attr:[{尺寸:5},{CPU:高通945},{分辨率:全高清}] 缺点如果每个sku都存储规格参数(如尺寸)会有冗余存储因为每个sku对应的spu的规格参数都一样 方案2 sku索引 {spuId:1skuId:11 } attr索引 {skuId:11attr:[{尺寸:5},{CPU:高通945},{分辨率:全高清}] } 先找到4000个符合要求的spu再根据4000个spu查询对应的属性封装了4000个idlong 8B*400032000B32KB 1K个人检索就是32MB结论如果将规格参数单独建立索引会出现检索时出现大量数据传输的问题会引起网络网络 因此选用方案1以空间换时间 建立product索引 最终选用的数据模型 { “type”: “keyword” }, # 保持数据精度问题可以检索但不分词“analyzer”: “ik_smart” # 中文分词器“index”: false, # 不可被检索不生成index“doc_values”: false # 默认为true不可被聚合es就不会维护一些聚合的信息 PUT product {mappings:{properties: {skuId:{ type: long },spuId:{ type: keyword }, # 不可分词skuTitle: {type: text,analyzer: ik_smart # 中文分词器},skuPrice: { type: keyword }, # 保证精度问题skuImg : { type: keyword }, # 视频中有falsesaleCount:{ type:long },hasStock: { type: boolean },hotScore: { type: long },brandId: { type: long },catalogId: { type: long },brandName: {type: keyword}, # 视频中有falsebrandImg:{type: keyword,index: false, # 不可被检索不生成index只用做页面使用doc_values: false # 不可被聚合默认为true},catalogName: {type: keyword }, # 视频里有falseattrs: {type: nested,properties: {attrId: {type: long },attrName: {type: keyword,index: false,doc_values: false},attrValue: {type: keyword }}}}} } 如果检索不到商品自己用postman测试一下可能有的字段需要更改你也可以把没必要的keyword去掉 冗余存储的字段不用来检索也不用来分析节省空间 库存是bool。 检索品牌id但是不检索品牌名字、图片 用skuTitle检索 二、nested嵌入式对象 属性是type: “nested”,因为是内部的属性进行检索 数组类型的对象会被扁平化处理对象的每个属性会分别存储到一起 user.name[aaa,bbb] user.addr[ccc,ddd]这种存储方式可能会发生如下错误 错误检索到{aaa,ddd}这个组合是不存在的 数组的扁平化处理会使检索能检索到本身不存在的为了解决这个问题就采用了嵌入式属性数组里是对象时用嵌入式属性不是对象无需用嵌入式属性 三、商品上架ES保存 Override // SpuInfoServiceImplpublic void up(Long spuId) {// 1 组装数据 查出当前spuId对应的所有sku信息ListSkuInfoEntity skus skuInfoService.getSkusBySpuId(spuId);// 查询这些sku是否有库存ListLong skuids skus.stream().map(sku - sku.getSkuId()).collect(Collectors.toList());// 2 封装每个sku的信息// 3.查询当前sku所有可以被用来检索的规格属性ListProductAttrValueEntity baseAttrs attrValueService.baseAttrListForSpu(spuId);// 得到基本属性idListLong attrIds baseAttrs.stream().map(attr - attr.getAttrId()).collect(Collectors.toList());// 过滤出可被检索的基本属性id即search_type 1 [数据库中目前 4、5、6、11不可检索]SetLong ids new HashSet(attrService.selectSearchAttrIds(attrIds));// 可被检索的属性封装到SkuEsModel.Attrs中ListSkuEsModel.Attrs attrs baseAttrs.stream().filter(item - ids.contains(item.getAttrId())).map(item - {SkuEsModel.Attrs attr new SkuEsModel.Attrs();BeanUtils.copyProperties(item, attr);return attr;}).collect(Collectors.toList());// 每件skuId是否有库存MapLong, Boolean stockMap null;try {// 3.1 远程调用库存系统 查询该sku是否有库存R hasStock wareFeignService.getSkuHasStock(skuids);// 构造器受保护 所以写成内部类对象stockMap hasStock.getData(new TypeReferenceListSkuHasStockVo() {}).stream().collect(Collectors.toMap(SkuHasStockVo::getSkuId, item - item.getHasStock()));log.warn(服务调用成功 hasStock);} catch (Exception e) {log.error(库存服务调用失败: 原因{}, e);}MapLong, Boolean finalStockMap stockMap;//防止lambda中改变// 开始封装esListSkuEsModel skuEsModels skus.stream().map(sku - {SkuEsModel esModel new SkuEsModel();BeanUtils.copyProperties(sku, esModel);esModel.setSkuPrice(sku.getPrice());esModel.setSkuImg(sku.getSkuDefaultImg());// 4 设置库存只查是否有库存不查有多少if (finalStockMap null) {esModel.setHasStock(true);} else {esModel.setHasStock(finalStockMap.get(sku.getSkuId()));}// TODO 1.热度评分 刚上架是0esModel.setHotScore(0L);// 设置品牌信息BrandEntity brandEntity brandService.getById(esModel.getBrandId());esModel.setBrandName(brandEntity.getName());esModel.setBrandImg(brandEntity.getLogo());// 查询分类信息CategoryEntity categoryEntity categoryService.getById(esModel.getCatalogId());esModel.setCatalogName(categoryEntity.getName());// 保存商品的属性 查询当前sku的所有可以被用来检索的规格属性同一spu都一样在外面查一遍即可esModel.setAttrs(attrs);return esModel;}).collect(Collectors.toList());// 5.发给ES进行保存 gulimall-searchR r searchFeignService.productStatusUp(skuEsModels);if (r.getCode() 0) {// 远程调用成功baseMapper.updateSpuStatus(spuId, ProductConstant.StatusEnum.SPU_UP.getCode());} else {// 远程调用失败 TODO 接口幂等性 重试机制/*** Feign 的调用流程 Feign有自动重试机制* 1. 发送请求执行* 2.*/}}Slf4j Service public class ProductSaveServiceImpl implements ProductSaveService {Resourceprivate RestHighLevelClient client;/*** 将数据保存到ES* 用bulk代替index进行批量保存* BulkRequest bulkRequest, RequestOptions options*/Override // ProductSaveServiceImplpublic boolean productStatusUp(ListSkuEsModel skuEsModels) throws IOException {// 1. 批量保存BulkRequest bulkRequest new BulkRequest();// 2.构造保存请求for (SkuEsModel esModel : skuEsModels) {// 设置es索引 gulimall_productIndexRequest indexRequest new IndexRequest(EsConstant.PRODUCT_INDEX);// 设置索引idindexRequest.id(esModel.getSkuId().toString());// json格式String jsonString JSON.toJSONString(esModel);indexRequest.source(jsonString, XContentType.JSON);// 添加到文档bulkRequest.add(indexRequest);}// bulk批量保存BulkResponse bulk client.bulk(bulkRequest, GuliESConfig.COMMON_OPTIONS);// TODO 是否拥有错误boolean hasFailures bulk.hasFailures();if(hasFailures){ListString collect Arrays.stream(bulk.getItems()).map(item - item.getId()).collect(Collectors.toList());log.error(商品上架错误{},collect);}return hasFailures;} }PUT product {mappings: {properties: {skuId:{type: long},spuId:{type: keyword},skuTitle:{type: text,analyzer: ik_smart},skuPrice:{type: keyword},skuImg:{type: keyword,index: false,doc_values: false},saleCount:{type: long},hasStock:{type: boolean},hotScore:{type: long},brandId:{type: long},catalogId:{type: long},brandName:{type:keyword,index: false,doc_values: false},brandImg:{type: keyword,index: false,doc_values: false},catalogName:{type: keyword,index: false,doc_values: false},attrs:{type: nested,properties: {attrId:{type:long},attrName:{type:keyword,index:false,doc_values: false},attrValue:{type:keyword}}}}} }四、检索服务 package com.atguigu.gulimall.search.service.impl;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.atguigu.common.to.es.SkuEsModel; import com.atguigu.common.utils.R; import com.atguigu.gulimall.search.config.GuliESConfig; import com.atguigu.gulimall.search.constant.EsConstant; import com.atguigu.gulimall.search.feign.ProductFeignService; import com.atguigu.gulimall.search.service.SearchService; import com.atguigu.gulimall.search.vo.AttrResponseVo; import com.atguigu.gulimall.search.vo.BrandVo; import com.atguigu.gulimall.search.vo.SearchParam; import com.atguigu.gulimall.search.vo.SearchResult; import lombok.extern.slf4j.Slf4j; import org.apache.lucene.search.join.ScoreMode; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.NestedQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.RangeQueryBuilder; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.nested.NestedAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.nested.ParsedNested; import org.elasticsearch.search.aggregations.bucket.terms.ParsedLongTerms; import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightField; import org.elasticsearch.search.sort.SortOrder; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils;import javax.annotation.Resource; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors;/*** pTitle: MallServiceImpl/p* Description* date2020/6/12 23:06*/ Slf4j Service public class SearchServiceImpl implements SearchService {Resourceprivate RestHighLevelClient restHighLevelClient;Resourceprivate ProductFeignService productFeignService;Overridepublic SearchResult search(SearchParam Param) {SearchResult result null;// 1.准备检索请求SearchRequest searchRequest buildSearchRequest(Param);try {// 2.执行检索请求SearchResponse response restHighLevelClient.search(searchRequest, GuliESConfig.COMMON_OPTIONS);// 3.分析响应数据result buildSearchResult(response, Param);} catch (IOException e) {e.printStackTrace();}return result;}/*** 准备检索请求 [构建查询语句]*/private SearchRequest buildSearchRequest(SearchParam Param) {// 帮我们构建DSL语句的SearchSourceBuilder sourceBuilder new SearchSourceBuilder();// 1. 模糊匹配 过滤(按照属性、分类、品牌、价格区间、库存) 先构建一个布尔Query// 1.1 mustBoolQueryBuilder boolQuery QueryBuilders.boolQuery();if(!StringUtils.isEmpty(Param.getKeyword())){boolQuery.must(QueryBuilders.matchQuery(skuTitle,Param.getKeyword()));}// 1.2 bool - filter Catalog3Idif(StringUtils.isEmpty(Param.getCatalog3Id() ! null)){boolQuery.filter(QueryBuilders.termQuery(catalogId, Param.getCatalog3Id()));}// 1.2 bool - brandId [集合]if(Param.getBrandId() ! null Param.getBrandId().size() 0){boolQuery.filter(QueryBuilders.termsQuery(brandId, Param.getBrandId()));}// 属性查询if(Param.getAttrs() ! null Param.getAttrs().size() 0){for (String attrStr : Param.getAttrs()) {BoolQueryBuilder boolQueryBuilder QueryBuilders.boolQuery();String[] s attrStr.split(_);// 检索的id 属性检索用的值String attrId s[0];String[] attrValue s[1].split(:);boolQueryBuilder.must(QueryBuilders.termQuery(attrs.attrId, attrId));boolQueryBuilder.must(QueryBuilders.termsQuery(attrs.attrValue, attrValue));// 构建一个嵌入式Query 每一个必须都得生成嵌入的 nested 查询NestedQueryBuilder attrsQuery QueryBuilders.nestedQuery(attrs, boolQueryBuilder, ScoreMode.None);boolQuery.filter(attrsQuery);}}// 1.2 bool - filter [库存]if(Param.getHasStock() ! null){boolQuery.filter(QueryBuilders.termQuery(hasStock,Param.getHasStock() 1));}// 1.2 bool - filter [价格区间]if(!StringUtils.isEmpty(Param.getSkuPrice())){RangeQueryBuilder rangeQuery QueryBuilders.rangeQuery(skuPrice);String[] s Param.getSkuPrice().split(_);if(s.length 2){// 有三个值 就是区间rangeQuery.gte(s[0]).lte(s[1]);}else if(s.length 1){// 单值情况if(Param.getSkuPrice().startsWith(_)){rangeQuery.lte(s[0]);}if(Param.getSkuPrice().endsWith(_)){rangeQuery.gte(s[0]);}}boolQuery.filter(rangeQuery);}// 把以前所有条件都拿来进行封装sourceBuilder.query(boolQuery);// 1.排序if(!StringUtils.isEmpty(Param.getSort())){String sort Param.getSort();// sorthotScore_asc/descString[] s sort.split(_);SortOrder order s[1].equalsIgnoreCase(asc) ? SortOrder.ASC : SortOrder.DESC;sourceBuilder.sort(s[0], order);}// 2.分页 pageSize 5sourceBuilder.from((Param.getPageNum()-1) * EsConstant.PRODUCT_PASIZE);sourceBuilder.size(EsConstant.PRODUCT_PASIZE);// 3.高亮if(!StringUtils.isEmpty(Param.getKeyword())){HighlightBuilder builder new HighlightBuilder();builder.field(skuTitle);builder.preTags(b stylecolor:red);builder.postTags(/b);sourceBuilder.highlighter(builder);}// 聚合分析// TODO 1.品牌聚合TermsAggregationBuilder brand_agg AggregationBuilders.terms(brand_agg);brand_agg.field(brandId).size(50);// 品牌聚合的子聚合brand_agg.subAggregation(AggregationBuilders.terms(brand_name_agg).field(brandName).size(1));brand_agg.subAggregation(AggregationBuilders.terms(brand_img_agg).field(brandImg).size(1));// 将品牌聚合加入 sourceBuildersourceBuilder.aggregation(brand_agg);// TODO 2.分类聚合TermsAggregationBuilder catalog_agg AggregationBuilders.terms(catalog_agg).field(catalogId).size(20);catalog_agg.subAggregation(AggregationBuilders.terms(catalog_name_agg).field(catalogName).size(1));// 将分类聚合加入 sourceBuildersourceBuilder.aggregation(catalog_agg);// TODO 3.属性聚合 attr_agg 构建嵌入式聚合NestedAggregationBuilder attr_agg AggregationBuilders.nested(attr_agg, attrs);// 3.1 聚合出当前所有的attrIdTermsAggregationBuilder attrIdAgg AggregationBuilders.terms(attr_id_agg).field(attrs.attrId);// 3.1.1 聚合分析出当前attrId对应的attrNameattrIdAgg.subAggregation(AggregationBuilders.terms(attr_name_agg).field(attrs.attrName).size(1));// 3.1.2 聚合分析出当前attrId对应的所有可能的属性值attrValue 这里的属性值可能会有很多 所以写50attrIdAgg.subAggregation(AggregationBuilders.terms(attr_value_agg).field(attrs.attrValue).size(50));// 3.2 将这个子聚合加入嵌入式聚合attr_agg.subAggregation(attrIdAgg);sourceBuilder.aggregation(attr_agg);log.info(\n构建语句-\n sourceBuilder.toString());SearchRequest searchRequest new SearchRequest(new String[]{EsConstant.PRODUCT_INDEX}, sourceBuilder);return searchRequest;}/*** 构建结果数据 指定catalogId 、brandId、attrs.attrId、嵌入式查询、倒序、0-6000、每页显示两个、高亮skuTitle、聚合分析*/private SearchResult buildSearchResult(SearchResponse response, SearchParam Param) {SearchResult result new SearchResult();// 1.返回的所有查询到的商品SearchHits hits response.getHits();ListSkuEsModel esModels new ArrayList();if(hits.getHits() ! null hits.getHits().length 0){for (SearchHit hit : hits.getHits()) {String sourceAsString hit.getSourceAsString();// ES中检索得到的对象SkuEsModel esModel JSON.parseObject(sourceAsString, SkuEsModel.class);if(!StringUtils.isEmpty(Param.getKeyword())){// 1.1 获取标题的高亮属性HighlightField skuTitle hit.getHighlightFields().get(skuTitle);String highlightFields skuTitle.getFragments()[0].string();// 1.2 设置文本高亮esModel.setSkuTitle(highlightFields);}esModels.add(esModel);}}result.setProducts(esModels);// 2.当前所有商品涉及到的所有属性信息ArrayListSearchResult.AttrVo attrVos new ArrayList();ParsedNested attr_agg response.getAggregations().get(attr_agg);ParsedLongTerms attr_id attr_agg.getAggregations().get(attr_id_agg);for (Terms.Bucket bucket : attr_id.getBuckets()) {SearchResult.AttrVo attrVo new SearchResult.AttrVo();// 2.1 得到属性的idattrVo.setAttrId(bucket.getKeyAsNumber().longValue());// 2.2 得到属性的名字String attr_name ((ParsedStringTerms) bucket.getAggregations().get(attr_name_agg)).getBuckets().get(0).getKeyAsString();attrVo.setAttrName(attr_name);// 2.3 得到属性的所有值ListString attr_value ((ParsedStringTerms) bucket.getAggregations().get(attr_value_agg)).getBuckets().stream().map(item - item.getKeyAsString()).collect(Collectors.toList());attrVo.setAttrValue(attr_value);attrVos.add(attrVo);}result.setAttrs(attrVos);// 3.当前所有商品涉及到的所有品牌信息ArrayListSearchResult.BrandVo brandVos new ArrayList();ParsedLongTerms brand_agg response.getAggregations().get(brand_agg);for (Terms.Bucket bucket : brand_agg.getBuckets()) {SearchResult.BrandVo brandVo new SearchResult.BrandVo();// 3.1 得到品牌的idlong brnadId bucket.getKeyAsNumber().longValue();brandVo.setBrandId(brnadId);// 3.2 得到品牌的名String brand_name ((ParsedStringTerms) bucket.getAggregations().get(brand_name_agg)).getBuckets().get(0).getKeyAsString();brandVo.setBrandName(brand_name);// 3.3 得到品牌的图片String brand_img ((ParsedStringTerms) (bucket.getAggregations().get(brand_img_agg))).getBuckets().get(0).getKeyAsString();brandVo.setBrandImg(brand_img);brandVos.add(brandVo);}result.setBrands(brandVos);// 4.当前商品所有涉及到的分类信息ParsedLongTerms catalog_agg response.getAggregations().get(catalog_agg);ListSearchResult.CatalogVo catalogVos new ArrayList();for (Terms.Bucket bucket : catalog_agg.getBuckets()) {// 设置分类idSearchResult.CatalogVo catalogVo new SearchResult.CatalogVo();catalogVo.setCatalogId(Long.parseLong(bucket.getKeyAsString()));// 得到分类名ParsedStringTerms catalog_name_agg bucket.getAggregations().get(catalog_name_agg);String catalog_name catalog_name_agg.getBuckets().get(0).getKeyAsString();catalogVo.setCatalogName(catalog_name);catalogVos.add(catalogVo);}result.setCatalogs(catalogVos);// 以上信息从聚合信息中获取// 5.分页信息-页码result.setPageNum(Param.getPageNum());// 总记录数long total hits.getTotalHits().value;result.setTotal(total);// 总页码计算得到int totalPages (int)(total / EsConstant.PRODUCT_PASIZE 0.999999999999);result.setTotalPages(totalPages);// 设置导航页ArrayListInteger pageNavs new ArrayList();for (int i 1;i totalPages; i){pageNavs.add(i);}result.setPageNavs(pageNavs);// 6.构建面包屑导航功能if(Param.getAttrs() ! null){ListSearchResult.NavVo navVos Param.getAttrs().stream().map(attr - {SearchResult.NavVo navVo new SearchResult.NavVo();String[] s attr.split(_);navVo.setNavValue(s[1]);R r productFeignService.getAttrsInfo(Long.parseLong(s[0]));// 将已选择的请求参数添加进去 前端页面进行排除result.getAttrIds().add(Long.parseLong(s[0]));if(r.getCode() 0){AttrResponseVo data r.getData(new TypeReferenceAttrResponseVo(){});navVo.setName(data.getAttrName());}else{// 失败了就拿id作为名字navVo.setName(s[0]);}// 拿到所有查询条件 替换查询条件String replace replaceQueryString(Param, attr, attrs);navVo.setLink(http://search.gulimall.com/list.html? replace);return navVo;}).collect(Collectors.toList());result.setNavs(navVos);}// 品牌、分类if(Param.getBrandId() ! null Param.getBrandId().size() 0){ListSearchResult.NavVo navs result.getNavs();SearchResult.NavVo navVo new SearchResult.NavVo();navVo.setName(品牌);// TODO 远程查询所有品牌R r productFeignService.brandInfo(Param.getBrandId());if(r.getCode() 0){ListBrandVo brand r.getData(data, new TypeReferenceListBrandVo() {});StringBuffer buffer new StringBuffer();// 替换所有品牌IDString replace ;for (BrandVo brandVo : brand) {buffer.append(brandVo.getBrandName() ;);replace replaceQueryString(Param, brandVo.getBrandId() , brandId);}navVo.setNavValue(buffer.toString());navVo.setLink(http://search.gulimall.com/list.html? replace);}navs.add(navVo);}return result;}/*** 替换字符* key 需要替换的key*/private String replaceQueryString(SearchParam Param, String value, String key) {String encode null;try {encode URLEncoder.encode(value,UTF-8);// 浏览器对空格的编码和java的不一样encode encode.replace(,%20);encode encode.replace(%28, ().replace(%29,));} catch (UnsupportedEncodingException e) {e.printStackTrace();}return Param.get_queryString().replace( key encode, );} }
文章转载自:
http://www.morning.mrfnj.cn.gov.cn.mrfnj.cn
http://www.morning.bpmtl.cn.gov.cn.bpmtl.cn
http://www.morning.kxmyj.cn.gov.cn.kxmyj.cn
http://www.morning.cszbj.cn.gov.cn.cszbj.cn
http://www.morning.gcftl.cn.gov.cn.gcftl.cn
http://www.morning.ytbr.cn.gov.cn.ytbr.cn
http://www.morning.bnfrj.cn.gov.cn.bnfrj.cn
http://www.morning.qrksj.cn.gov.cn.qrksj.cn
http://www.morning.rhmk.cn.gov.cn.rhmk.cn
http://www.morning.nkkpp.cn.gov.cn.nkkpp.cn
http://www.morning.hmnhp.cn.gov.cn.hmnhp.cn
http://www.morning.gjcdr.cn.gov.cn.gjcdr.cn
http://www.morning.qgjwx.cn.gov.cn.qgjwx.cn
http://www.morning.nfzzf.cn.gov.cn.nfzzf.cn
http://www.morning.yfphk.cn.gov.cn.yfphk.cn
http://www.morning.jghqc.cn.gov.cn.jghqc.cn
http://www.morning.sbczr.cn.gov.cn.sbczr.cn
http://www.morning.kbntl.cn.gov.cn.kbntl.cn
http://www.morning.rxzcl.cn.gov.cn.rxzcl.cn
http://www.morning.lltdf.cn.gov.cn.lltdf.cn
http://www.morning.jikuxy.com.gov.cn.jikuxy.com
http://www.morning.cxsdl.cn.gov.cn.cxsdl.cn
http://www.morning.dbcw.cn.gov.cn.dbcw.cn
http://www.morning.qtryb.cn.gov.cn.qtryb.cn
http://www.morning.rkfwr.cn.gov.cn.rkfwr.cn
http://www.morning.jmwrj.cn.gov.cn.jmwrj.cn
http://www.morning.lqypx.cn.gov.cn.lqypx.cn
http://www.morning.gwwky.cn.gov.cn.gwwky.cn
http://www.morning.xqbbc.cn.gov.cn.xqbbc.cn
http://www.morning.jpwmk.cn.gov.cn.jpwmk.cn
http://www.morning.gjqgz.cn.gov.cn.gjqgz.cn
http://www.morning.ksggl.cn.gov.cn.ksggl.cn
http://www.morning.yxnfd.cn.gov.cn.yxnfd.cn
http://www.morning.jypqx.cn.gov.cn.jypqx.cn
http://www.morning.kjjbz.cn.gov.cn.kjjbz.cn
http://www.morning.fyskq.cn.gov.cn.fyskq.cn
http://www.morning.xmpbh.cn.gov.cn.xmpbh.cn
http://www.morning.nzxdz.cn.gov.cn.nzxdz.cn
http://www.morning.nfsrs.cn.gov.cn.nfsrs.cn
http://www.morning.pmjw.cn.gov.cn.pmjw.cn
http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn
http://www.morning.cwjxg.cn.gov.cn.cwjxg.cn
http://www.morning.jppdk.cn.gov.cn.jppdk.cn
http://www.morning.rdzlh.cn.gov.cn.rdzlh.cn
http://www.morning.xllrf.cn.gov.cn.xllrf.cn
http://www.morning.ryxdf.cn.gov.cn.ryxdf.cn
http://www.morning.rfyk.cn.gov.cn.rfyk.cn
http://www.morning.mjjty.cn.gov.cn.mjjty.cn
http://www.morning.pzlhq.cn.gov.cn.pzlhq.cn
http://www.morning.qkqgj.cn.gov.cn.qkqgj.cn
http://www.morning.yxnkr.cn.gov.cn.yxnkr.cn
http://www.morning.ckdgj.cn.gov.cn.ckdgj.cn
http://www.morning.kwqqs.cn.gov.cn.kwqqs.cn
http://www.morning.thpns.cn.gov.cn.thpns.cn
http://www.morning.ycmpk.cn.gov.cn.ycmpk.cn
http://www.morning.tfsyk.cn.gov.cn.tfsyk.cn
http://www.morning.rhqn.cn.gov.cn.rhqn.cn
http://www.morning.rnht.cn.gov.cn.rnht.cn
http://www.morning.qhqgk.cn.gov.cn.qhqgk.cn
http://www.morning.nqyzg.cn.gov.cn.nqyzg.cn
http://www.morning.fjlsfs.com.gov.cn.fjlsfs.com
http://www.morning.jyknk.cn.gov.cn.jyknk.cn
http://www.morning.yxlpj.cn.gov.cn.yxlpj.cn
http://www.morning.jjtwh.cn.gov.cn.jjtwh.cn
http://www.morning.wbfly.cn.gov.cn.wbfly.cn
http://www.morning.myzfz.com.gov.cn.myzfz.com
http://www.morning.lwtfx.cn.gov.cn.lwtfx.cn
http://www.morning.xjkr.cn.gov.cn.xjkr.cn
http://www.morning.tkrwm.cn.gov.cn.tkrwm.cn
http://www.morning.shangwenchao4.cn.gov.cn.shangwenchao4.cn
http://www.morning.pqxjq.cn.gov.cn.pqxjq.cn
http://www.morning.pgmbl.cn.gov.cn.pgmbl.cn
http://www.morning.bmqls.cn.gov.cn.bmqls.cn
http://www.morning.tbknh.cn.gov.cn.tbknh.cn
http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn
http://www.morning.kfcz.cn.gov.cn.kfcz.cn
http://www.morning.gmnmh.cn.gov.cn.gmnmh.cn
http://www.morning.rjrnx.cn.gov.cn.rjrnx.cn
http://www.morning.xblrq.cn.gov.cn.xblrq.cn
http://www.morning.wyjhq.cn.gov.cn.wyjhq.cn
http://www.tj-hxxt.cn/news/241734.html

相关文章:

  • 免费门户网站模板下载昆山设计网站公司
  • 广告平台网站有哪些wordpress修改后台管理地址=
  • 专业做网站全包提高网站打开速度
  • 网站开发折旧开发电子商务系统的五个步骤
  • 网站超市网站建设怎样接业务
  • 网站维护页面 下载建设网上银行登录
  • 简约网站程序网站源码下载炫酷
  • 有什么网站可以接单做兼职的企业铭做网站
  • 狼雨seo网站专做老酒的网站
  • 查看网站有没有备案微信公众号管理平台登录
  • 建立网站可以赚钱吗域名购买是什么意思
  • 石嘴山网站定制开发建设成都最差的十大物业公司
  • 邢台网站设计华北冶建工程建设有限公司网站
  • 网站开发和网页制作湖南自驾旅游与房车协会
  • 西安推荐企业网站制作平台韩雪冬推荐网站
  • 洱源县建设局门户网站物流网站推广怎么做
  • 石家庄新钥匙建站手机网站 用户体验
  • 网站优化自己可以做吗c2c平台是洗钱吗
  • 建设专业网站怎样收费广州嘉怡服饰有限公司网站建设
  • html5网站布局教程高校 网站建设实施方案
  • 推广之家官网贵阳利于优化的网站
  • 淘宝推广网站怎么做网站如何做404页面
  • jsp商业网站开发做网站学完html
  • 做本地门户网站网站管理是什么
  • 图书馆网站建设工作dedecms 网站还原数据之后 乱码
  • 做网站是58好还是百度好做网站彩票网站
  • 棋牌网站建设源码深圳建站公司一般需要多久
  • 广西建设中心培训网站记事本做网站的流程
  • 网站界面分析门户网站建设方案公司
  • 麻涌建设网站公司的网站建设与维护