Przeglądaj źródła

关键词1.0版本功能开发
信息中心页面添加关键词联动
采美百科页面添加关键词联动
商品资料页面添加关键词联动

JiangChongBo 2 lat temu
rodzic
commit
db91e5cb5d

+ 8 - 0
src/main/java/com/caimei/modules/archive/entity/CmProductArchive.java

@@ -22,7 +22,15 @@ public class CmProductArchive extends DataEntity<CmProductArchive> {
 	private Integer productType;		// 商品属性:1产品,2仪器
 	private Integer productClassify;		// 商品分类:1生美,2医美
 	private Date addTime;		// 添加时间
+    private String seoKeyword;  //关键词
 
+	public void setSeoKeyword(String seoKeyword) {
+		this.seoKeyword = seoKeyword;
+	}
+
+	public String getSeoKeyword() {
+		return seoKeyword;
+	}
 
 	private Integer existProductType;	//商品库商品是否有设置商品属性:0没有,1有
 	

+ 23 - 1
src/main/java/com/caimei/modules/archive/web/CmProductArchiveController.java

@@ -3,7 +3,11 @@ package com.caimei.modules.archive.web;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.alibaba.fastjson.JSONArray;
+import com.caimei.modules.product.dao.KeywordFrequencyDao;
 import com.caimei.modules.product.entity.Product;
+import com.caimei.modules.product.entity.SearchFrequencyVo;
+import com.caimei.redis.RedisService;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -20,6 +24,9 @@ import com.thinkgem.jeesite.common.utils.StringUtils;
 import com.caimei.modules.archive.entity.CmProductArchive;
 import com.caimei.modules.archive.service.CmProductArchiveService;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 商品资料Controller
  * @author Aslee
@@ -31,7 +38,13 @@ public class CmProductArchiveController extends BaseController {
 
 	@Autowired
 	private CmProductArchiveService cmProductArchiveService;
-	
+
+	@Autowired
+	private RedisService redisService;
+
+	@Autowired
+	private KeywordFrequencyDao keywordFrequencyDao;
+
 	@ModelAttribute
 	public CmProductArchive get(@RequestParam(required=false) String id) {
 		CmProductArchive entity = null;
@@ -53,7 +66,16 @@ public class CmProductArchiveController extends BaseController {
 
 	@RequestMapping(value = "form")
 	public String form(CmProductArchive cmProductArchive, Model model) {
+		//先从reids中获取keyword值,不存在时在查询数据库
+		List<SearchFrequencyVo> searchFrequencyVos=new ArrayList<>();
+		if(redisService.getExpireTime("keyword")>0){
+			searchFrequencyVos= JSONArray.parseArray(redisService.get("keyword").toString(),SearchFrequencyVo.class);
+		}else{
+			searchFrequencyVos = keywordFrequencyDao.getKeywordList();
+		}
 		model.addAttribute("cmProductArchive", cmProductArchive);
+		model.addAttribute("SearchFrequencyVo",searchFrequencyVos);
+
 		return "modules/archive/cmProductArchiveForm";
 	}
 

+ 18 - 0
src/main/java/com/caimei/modules/baike/web/CmBaikeProductController.java

@@ -4,6 +4,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.alibaba.fastjson.JSONArray;
 import com.caimei.modules.baike.dao.CmBaikeProductDao;
 import com.caimei.modules.baike.dao.CmBaikeProductRecommendDao;
 import com.caimei.modules.baike.dao.CmBaikeTypeDao;
@@ -12,9 +13,12 @@ import com.caimei.modules.baike.service.CmBaikeTypeService;
 import com.caimei.modules.info.dao.InfoDao;
 import com.caimei.modules.opensearch.GenerateUtils;
 import com.caimei.modules.oss.utils.OSSUtils;
+import com.caimei.modules.product.dao.KeywordFrequencyDao;
 import com.caimei.modules.product.entity.CmProductRecommend;
 import com.caimei.modules.product.entity.Product;
+import com.caimei.modules.product.entity.SearchFrequencyVo;
 import com.caimei.modules.user.entity.NewCmShop;
+import com.caimei.redis.RedisService;
 import com.caimei.utils.AppUtils;
 import com.google.common.collect.Maps;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -65,6 +69,12 @@ public class CmBaikeProductController extends BaseController {
 
 	@Resource
 	private InfoDao infoDao;
+
+	@Autowired
+	private RedisService redisService;
+
+	@Autowired
+	private KeywordFrequencyDao keywordFrequencyDao;
 	
 	@ModelAttribute
 	public CmBaikeProduct get(@RequestParam(required=false) String id) {
@@ -132,10 +142,18 @@ public class CmBaikeProductController extends BaseController {
 		cmBaikeProduct.setShopList(shopList);
 		// 敏感词
 		String sensitiveWords = infoDao.getSensitiveWords(4);
+		//先从reids中获取keyword值,不存在时在查询数据库
+		List<SearchFrequencyVo> searchFrequencyVos=new ArrayList<>();
+		if(redisService.getExpireTime("keyword")>0){
+			searchFrequencyVos= JSONArray.parseArray(redisService.get("keyword").toString(),SearchFrequencyVo.class);
+		}else{
+			searchFrequencyVos = keywordFrequencyDao.getKeywordList();
+		}
 		model.addAttribute("cmBaikeProduct", cmBaikeProduct);
 		model.addAttribute("typeList", typeList);
 		model.addAttribute("commodityType", commodityType);
 		model.addAttribute("sensitiveWords", sensitiveWords);
+		model.addAttribute("SearchFrequencyVo",searchFrequencyVos);
 		return "modules/baikePage/cmBaikeProductForm";
 	}
 

+ 13 - 0
src/main/java/com/caimei/modules/info/web/InfoController.java

@@ -6,11 +6,14 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import com.alibaba.fastjson.JSONArray;
 import com.caimei.modules.info.dao.InfoDao;
 import com.caimei.modules.info.entity.CmInfoDocSyn;
 import com.caimei.modules.info.service.CmInfoDocSynService;
 import com.caimei.modules.opensearch.GenerateUtils;
 import com.caimei.modules.opensearch.CoreServiceUitls;
+import com.caimei.modules.product.dao.KeywordFrequencyDao;
+import com.caimei.modules.product.entity.SearchFrequencyVo;
 import com.caimei.redis.RedisService;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -58,6 +61,8 @@ public class InfoController extends BaseController {
     private GenerateUtils generateUtils;
 	@Autowired
 	private InfoDao infoDao;
+	@Autowired
+	private KeywordFrequencyDao keywordFrequencyDao;
 	@ModelAttribute
 	public Info get(@RequestParam(required=false) String id) {
 		Info entity = null;
@@ -137,12 +142,20 @@ public class InfoController extends BaseController {
 		}
 		InfoType infoType = new InfoType();
 		List<InfoType> typeList = infoTypeService.findList(infoType);
+		//先从reids中获取keyword值,不存在时在查询数据库
+		List<SearchFrequencyVo> searchFrequencyVos=new ArrayList<>();
+		if(redisService.getExpireTime("keyword")>0){
+			searchFrequencyVos= JSONArray.parseArray(redisService.get("keyword").toString(),SearchFrequencyVo.class);
+		}else{
+			searchFrequencyVos = keywordFrequencyDao.getKeywordList();
+		}
 		// 敏感词
 		String sensitiveWords = infoDao.getSensitiveWords(3);
 		model.addAttribute("typeList", typeList);
 		model.addAttribute("info", info);
 		model.addAttribute("ltype", ltype);
 		model.addAttribute("sensitiveWords", sensitiveWords);
+		model.addAttribute("SearchFrequencyVo", searchFrequencyVos);
 		return "modules/info/infoForm";
 	}
 

+ 6 - 3
src/main/resources/mappings/modules/archive/CmProductArchiveMapper.xml

@@ -130,7 +130,8 @@
 			archiveLevel,
 			productType,
 			productClassify,
-			addTime
+			addTime,
+			seoKeyword
 		) VALUES (
 			#{productId},
 			#{productName},
@@ -139,7 +140,8 @@
 			#{archiveLevel},
 			#{productType},
 			#{productClassify},
-			#{addTime}
+			#{addTime},
+		    #{seoKeyword}
 		)
 	</insert>
 	
@@ -151,7 +153,8 @@
 			productImage = #{productImage},
 			archiveLevel = #{archiveLevel},
 			productType = #{productType},
-			productClassify = #{productClassify}
+			productClassify = #{productClassify},
+			seoKeyword= #{seoKeyword}
 		WHERE id = #{id}
 	</update>
 	

+ 28 - 1
src/main/webapp/WEB-INF/views/modules/archive/cmProductArchiveForm.jsp

@@ -170,12 +170,39 @@
 				</form:select>
 			</div>
 		</div>
+		<div class="control-group">
+			<label class="control-label">SEO关键词:</label>
+			<div class="auto-input">
+				<form:input path="seoKeyword" htmlEscape="false" style="position: relative" class="input-xlarge"/>
+				<label id="seoKeywordSensitiveWords" class="red"></label>
+			</div>
+		</div>
 		<div class="form-actions">
 			<input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>&nbsp;
 			<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
 		</div>
 	</form:form>
-<script>
+	<script type="text/javascript" src="${ctxStatic}/auto-input.js"></script>
+	<script>
+		//关键词联动
+		function autocomplete(text) {
+			// return ['三全鲜食(北新泾店)', 'Hot honey 首尔炸鸡(仙霞路)', '新旺角茶餐厅', '泷千家(天山西路店)', '胖仙女纸杯蛋糕(上海凌空店)', '贡茶', '豪大大香鸡排超级奶爸', '茶芝兰(奶茶,手抓饼)', '十二泷町', '星移浓缩咖啡', '阿姨奶茶/豪大大', '新麦甜四季甜品炸鸡', 'Monica摩托主题咖啡店', '浮生若茶(凌空soho店)', 'NONO JUICE  鲜榨果汁', 'CoCo都可(北新泾店)', '快乐柠檬(神州智慧店)', 'Merci Paul cafe', '猫山王(西郊百联店)', '枪会山', '纵食', '钱记', '壹杯加', '唦哇嘀咖', '爱茜茜里(西郊百联)', '爱茜茜里(近铁广场)', '鲜果榨汁(金沙江路和美广店)', '开心丽果(缤谷店)', '超级鸡车(丰庄路店)', '妙生活果园(北新泾店)', '香宜度麻辣香锅', '凡仔汉堡(老真北路店)', '港式小铺', '蜀香源麻辣香锅(剑河路店)', '北京饺子馆', '饭典*新简餐(凌空SOHO店)', '焦耳·川式快餐(金钟路店)', '动力鸡车', '浏阳蒸菜', '四海游龙(天山西路店)', '樱花食堂(凌空店)', '壹分米客家传统调制米粉(天山店)', '福荣祥烧腊(平溪路店)', '速记黄焖鸡米饭', '红辣椒麻辣烫', '(小杨生煎)西郊百联餐厅', '阳阳麻辣烫', '南拳妈妈龙虾盖浇饭'].filter(function (item) {
+			//     return text && item.indexOf(text) > -1;
+			// });
+			var keywordlist=new Array();
+			<c:forEach items="${SearchFrequencyVo}" var="search">
+			keywordlist.push("${search.keyword}")
+			</c:forEach>
+			return keywordlist.filter(function (item) {
+				return text && item.indexOf(text) > -1;
+			});
+		}
+
+		new AutoComplete({
+			el: '.auto-input',
+			callback: autocomplete,
+			offsetLeft: -25
+		});
 	$(function () {
 		showInfo();
 		$('.upload-content .conList .btn:nth-of-type(1)').html('<div><span>+</span><h5>选择图片</h5></div>');

+ 22 - 1
src/main/webapp/WEB-INF/views/modules/baikePage/cmBaikeProductForm.jsp

@@ -262,6 +262,7 @@
 		.Main-content{
 			height: 100px;
 		}
+
 	</style>
 	<script type="text/javascript">
 		$(document).ready(function() {
@@ -662,7 +663,7 @@
 		</div>
 		<div class="control-group">
 			<label class="control-label">SEO关键词:</label>
-			<div class="controls">
+			<div class="auto-input">
 				<form:input path="seoKeyword" htmlEscape="false" style="position: relative" class="input-xlarge"/>
                 <label id="seoKeywordSensitiveWords" class="red"></label>
 			</div>
@@ -865,6 +866,7 @@
 <% request.setAttribute("caimeiCore", Global.getConfig("caimei.core"));%>
 <script type="text/javascript" src="${ctxStatic}/ckeditor5-new/ckeditor.js"></script>
 <script type="text/javascript" src="${ctxStatic}/sensitiveWords/mint-filter.umd.js"></script>
+<script type="text/javascript" src="${ctxStatic}/auto-input.js"></script>
 <script>
 	var paramIndex = 6;
 	var questionIndex = 2;
@@ -1313,6 +1315,25 @@
 			buttons: {"关闭": '-1'}
 		});
 	}
+	//关键词联动
+	function autocomplete(text) {
+		// return ['三全鲜食(北新泾店)', 'Hot honey 首尔炸鸡(仙霞路)', '新旺角茶餐厅', '泷千家(天山西路店)', '胖仙女纸杯蛋糕(上海凌空店)', '贡茶', '豪大大香鸡排超级奶爸', '茶芝兰(奶茶,手抓饼)', '十二泷町', '星移浓缩咖啡', '阿姨奶茶/豪大大', '新麦甜四季甜品炸鸡', 'Monica摩托主题咖啡店', '浮生若茶(凌空soho店)', 'NONO JUICE  鲜榨果汁', 'CoCo都可(北新泾店)', '快乐柠檬(神州智慧店)', 'Merci Paul cafe', '猫山王(西郊百联店)', '枪会山', '纵食', '钱记', '壹杯加', '唦哇嘀咖', '爱茜茜里(西郊百联)', '爱茜茜里(近铁广场)', '鲜果榨汁(金沙江路和美广店)', '开心丽果(缤谷店)', '超级鸡车(丰庄路店)', '妙生活果园(北新泾店)', '香宜度麻辣香锅', '凡仔汉堡(老真北路店)', '港式小铺', '蜀香源麻辣香锅(剑河路店)', '北京饺子馆', '饭典*新简餐(凌空SOHO店)', '焦耳·川式快餐(金钟路店)', '动力鸡车', '浏阳蒸菜', '四海游龙(天山西路店)', '樱花食堂(凌空店)', '壹分米客家传统调制米粉(天山店)', '福荣祥烧腊(平溪路店)', '速记黄焖鸡米饭', '红辣椒麻辣烫', '(小杨生煎)西郊百联餐厅', '阳阳麻辣烫', '南拳妈妈龙虾盖浇饭'].filter(function (item) {
+		//     return text && item.indexOf(text) > -1;
+		// });
+		var keywordlist=new Array();
+		<c:forEach items="${SearchFrequencyVo}" var="search">
+		keywordlist.push("${search.keyword}")
+		</c:forEach>
+		return keywordlist.filter(function (item) {
+			return text && item.indexOf(text) > -1;
+		});
+	}
+
+	new AutoComplete({
+		el: '.auto-input',
+		callback: autocomplete,
+		offsetLeft: -25
+	});
 </script>
 </body>
 </html>

+ 22 - 1
src/main/webapp/WEB-INF/views/modules/info/infoForm.jsp

@@ -45,7 +45,7 @@
 		</tr>
 		<tr>
 			<th><span class="red">*</span>SEO关键词:</th>
-			<td colspan="3">
+			<td colspan="3" class="auto-input">
 				<form:input path="keyword" htmlEscape="false" maxlength="50" class="input-xxlarge required"/>
 				<label id="keywordSensitiveWords" class="red"></label>
 			</td>
@@ -171,7 +171,28 @@
 <script type="text/javascript" src="${ctxStatic}/jquery-validation/1.19.3/jquery.validate.js"></script>
 <script type="text/javascript" src="${ctxStatic}/ckeditor5-new/ckeditor.js"></script>
 <script type="text/javascript" src="${ctxStatic}/sensitiveWords/mint-filter.umd.js"></script>
+<script type="text/javascript" src="${ctxStatic}/auto-input.js"></script>
 <script type="text/javascript">
+
+	//关键词联动
+	function autocomplete(text) {
+		// return ['三全鲜食(北新泾店)', 'Hot honey 首尔炸鸡(仙霞路)', '新旺角茶餐厅', '泷千家(天山西路店)', '胖仙女纸杯蛋糕(上海凌空店)', '贡茶', '豪大大香鸡排超级奶爸', '茶芝兰(奶茶,手抓饼)', '十二泷町', '星移浓缩咖啡', '阿姨奶茶/豪大大', '新麦甜四季甜品炸鸡', 'Monica摩托主题咖啡店', '浮生若茶(凌空soho店)', 'NONO JUICE  鲜榨果汁', 'CoCo都可(北新泾店)', '快乐柠檬(神州智慧店)', 'Merci Paul cafe', '猫山王(西郊百联店)', '枪会山', '纵食', '钱记', '壹杯加', '唦哇嘀咖', '爱茜茜里(西郊百联)', '爱茜茜里(近铁广场)', '鲜果榨汁(金沙江路和美广店)', '开心丽果(缤谷店)', '超级鸡车(丰庄路店)', '妙生活果园(北新泾店)', '香宜度麻辣香锅', '凡仔汉堡(老真北路店)', '港式小铺', '蜀香源麻辣香锅(剑河路店)', '北京饺子馆', '饭典*新简餐(凌空SOHO店)', '焦耳·川式快餐(金钟路店)', '动力鸡车', '浏阳蒸菜', '四海游龙(天山西路店)', '樱花食堂(凌空店)', '壹分米客家传统调制米粉(天山店)', '福荣祥烧腊(平溪路店)', '速记黄焖鸡米饭', '红辣椒麻辣烫', '(小杨生煎)西郊百联餐厅', '阳阳麻辣烫', '南拳妈妈龙虾盖浇饭'].filter(function (item) {
+		//     return text && item.indexOf(text) > -1;
+		// });
+		var keywordlist=new Array();
+		<c:forEach items="${SearchFrequencyVo}" var="search">
+		keywordlist.push("${search.keyword}")
+		</c:forEach>
+		return keywordlist.filter(function (item) {
+			return text && item.indexOf(text) > -1;
+		});
+	}
+
+	new AutoComplete({
+		el: '.auto-input',
+		callback: autocomplete,
+		offsetLeft: -25
+	});
 	$(document).ready(function() {
 		//$("#name").focus();
 		$("#inputForm").validate({

+ 2 - 1
src/main/webapp/WEB-INF/views/modules/product-new/productEdit.jsp

@@ -928,7 +928,8 @@
 
     new AutoComplete({
         el: '.auto-input',
-        callback: autocomplete
+        callback: autocomplete,
+        offsetLeft: -25
     });
     function js(){
             var val = $("#productType").val();

+ 15 - 0
src/main/webapp/WEB-INF/views/modules/product/keywordFrequency.jsp

@@ -42,6 +42,12 @@
                             option.text("首页搜索");
                         }else if(obj==2){
                             option.text("信息中心搜索");
+                        }else if(obj==3){
+                            option.text("美业资料搜索");
+                        }else if(obj==4){
+                            option.text("采美百科搜索");
+                        }else if(obj==6){
+                            option.text("管理员添加");
                         }
                         $('#search').append(option);
                     });
@@ -181,6 +187,15 @@
                 <c:if test="${newCmSp.fromSearch eq 2}">
                     信息中心搜索
                 </c:if>
+                <c:if test="${newCmSp.fromSearch eq 3}">
+                    美业资料搜索
+                </c:if>
+                <c:if test="${newCmSp.fromSearch eq 4}">
+                    采美百科搜索
+                </c:if>
+                <c:if test="${newCmSp.fromSearch eq 6}">
+                    管理员添加
+                </c:if>
             </td>
                 <%--<td>${newCmSp.spIdentity}</td>--%>
             <td>${newCmSp.frequency}</td>

+ 12 - 0
src/main/webapp/WEB-INF/views/modules/product/keywordThesaurus.jsp

@@ -68,6 +68,12 @@
                             option.text("首页搜索");
                         }else if(obj==2){
                             option.text("信息中心搜索");
+                        }else if(obj==3){
+                            option.text("美业资料搜索");
+                        }else if(obj==4){
+                            option.text("采美百科搜索");
+                        }else if(obj==6){
+                            option.text("管理员添加");
                         }
                         $('#search').append(option);
                     });
@@ -224,6 +230,12 @@
                 <c:if test="${newCmSp.fromSearch eq 2}">
                     信息中心搜索
                 </c:if>
+                <c:if test="${newCmSp.fromSearch eq 3}">
+                    美业资料搜索
+                </c:if>
+                <c:if test="${newCmSp.fromSearch eq 4}">
+                    采美百科搜索
+                </c:if>
                 <c:if test="${newCmSp.fromSearch eq 6}">
                     管理员添加
                 </c:if>

+ 3 - 2
src/main/webapp/static/auto-input.js

@@ -23,7 +23,8 @@ var AutoComplete =
                 },
                 itemTop: 'auto',
                 follow: 'input',
-                offsetTop: 5
+                offsetTop: 5,
+                offsetLeft: 0,
             };
             Object.assign(this.options, options);
             this.handleInput = this.debounce(this.inputEvent).bind(this);
@@ -105,7 +106,7 @@ var AutoComplete =
                 }
 
                 if (this.options.follow === 'input') {
-                    this.ul.style.left = this.input.offsetLeft-25 + 'px';
+                    this.ul.style.left = this.input.offsetLeft + this.options.offsetLeft + 'px';
                     this.ul.style.width = this.input.offsetWidth + 'px';
                 } else {
                     this.ul.style.left = 0;