From 834cb473f5bc738e1f1df228ab4db758a360ffc9 Mon Sep 17 00:00:00 2001 From: sgjj <995959152@qq.com> Date: Fri, 3 Jan 2020 16:49:51 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mingsoft/cms/action/web/MCmsAction.java | 382 +++++++----------- .../net/mingsoft/cms/biz/IContentBiz.java | 2 +- .../mingsoft/cms/biz/impl/ContentBizImpl.java | 6 +- .../net/mingsoft/cms/dao/IContentDao.java | 2 +- .../java/net/mingsoft/cms/dao/IContentDao.xml | 92 ++--- 5 files changed, 183 insertions(+), 301 deletions(-) diff --git a/src/main/java/net/mingsoft/cms/action/web/MCmsAction.java b/src/main/java/net/mingsoft/cms/action/web/MCmsAction.java index 3d87b7b5..c7c17e52 100644 --- a/src/main/java/net/mingsoft/cms/action/web/MCmsAction.java +++ b/src/main/java/net/mingsoft/cms/action/web/MCmsAction.java @@ -318,254 +318,164 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction { -// /** -// * 实现前端页面的文章搜索 -// * -// * @param request -// * 搜索id -// * @param response -// */ -// @RequestMapping(value = "search") -// @ResponseBody -// public void search(HttpServletRequest request, HttpServletResponse response) { -// -// Map map = new HashMap<>(); -// // 读取请求字段 -// Map field = request.getParameterMap(); -// Map basicField = getMapByProperties(net.mingsoft.mdiy.constant.Const.BASIC_FIELD); -// // 文章字段集合 -// Map articleFieldName = new HashMap(); -// // 自定义字段集合 -// Map diyFieldName = new HashMap(); -// CategoryEntity column = null; // 当前栏目 -// ModelEntity contentModel = null; // 栏目对应模型 -// List fieldValueList = new ArrayList(); // 栏目对应字段的值 -// int typeId = 0; -// String categoryIds = BasicUtil.getString("categoryId"); -// //当传递了栏目编号,但不是栏目集合 -// if(!StringUtil.isBlank(categoryIds) && !categoryIds.contains(",")){ -// typeId = Integer.parseInt(categoryIds); -// } -// //记录自定义模型字段名 -// List filedStr = new ArrayList<>(); -// //根据栏目确定自定义模型 -// if(typeId>0){ -// column = (CategoryEntity) categoryBiz.getEntity(Integer.parseInt(typeId+"")); -// // 获取表单类型的id -// if (column != null&&ObjectUtil.isNotNull(column.getMdiyModelId())) { -// contentModel = (ModelEntity) modelBiz.getEntity(Integer.parseInt(column.getMdiyModelId())); -// if (contentModel != null) { -// Map fieldMap = contentModel.getFieldMap(); -// for (String s : fieldMap.keySet()) { -// filedStr.add(fieldMap.get(s)); -// } -// map.put(ParserUtil.TABLE_NAME, contentModel.getModelTableName()); -// } -// } -// map.put(ParserUtil.COLUMN, column); -// //设置栏目编号 -//// map.put(ParserUtil.TYPE_ID, typeId); -// } -// -// // 遍历取字段集合 -// if (field != null) { -// for (Map.Entry entry : field.entrySet()) { -// if (entry != null) { -// String value = entry.getValue()[0]; // 处理由get方法请求中文乱码问题 -// if (ObjectUtil.isNull(value)) { -// continue; -// } -// if (request.getMethod().equals(RequestMethod.GET)) { // 如果是get方法需要将请求地址参数转吗 -// try { -// value = new String(value.getBytes("ISO-8859-1"), Const.UTF8); -// } catch (UnsupportedEncodingException e) { -// e.printStackTrace(); -// } -// } -// // 若为文章字段,则保存至文章字段集合;否则保存至自定义字段集合 -// if (ObjectUtil.isNotNull(basicField.get(entry.getKey())) && ObjectUtil.isNotNull(value)) { -// articleFieldName.put(entry.getKey(), value); -// } else { -// if (!StringUtil.isBlank(value)) { -// diyFieldName.put(entry.getKey(), value); -// //判断请求中的是否是自定义模型中的字段 -// if(filedStr.contains(entry.getKey())){ -// //设置自定义模型字段和值 -// DiyModelMap diyMap = new DiyModelMap(); -// diyMap.setKey(entry.getKey()); -// diyMap.setValue(value); -// fieldValueList.add(diyMap); -// } -// } -// } -// } -// } -// } -// //添加自定义模型的字段和值 -// if(fieldValueList.size()>0){ -// map.put("diyModel", fieldValueList); -// } -// //组织where查询条件 -// Map whereMap = ObjectUtil.isNotNull(contentModel)? -// this.searchMap(articleFieldName, diyFieldName, JSONArray.parseArray(contentModel.getModelField())): -// new HashMap(); -// -// // 获取符合条件的文章总数 -// int count = contentBiz.getSearchCount(contentModel, whereMap, BasicUtil.getAppId(), categoryIds); -// //设置分页类 -// PageBean page = new PageBean(); -// //读取模板的分页数量 -// int size = BasicUtil.getInt(ParserUtil.SIZE,10); -// try { -// size = TagParser.getPageSize(ParserUtil.read(SEARCH+ParserUtil.HTM_SUFFIX,false )); -// } catch (TemplateNotFoundException e1) { -// e1.printStackTrace(); -// } catch (MalformedTemplateNameException e1) { -// e1.printStackTrace(); -// } catch (ParseException e1) { -// e1.printStackTrace(); -// } catch (IOException e1) { -// e1.printStackTrace(); -// } -// int total = PageUtil.totalPage(count, size); -// -// int pageNo = BasicUtil.getInt(ParserUtil.PAGE_NO, 1); -// if(pageNo >= total && total!=0) { -// pageNo = total; -// } -// //获取总数 -// page.setTotal(total); -// //设置页面显示数量 -// page.setSize(size); -// //设置列表当前页 -// -// page.setPageNo(pageNo); -// -// String str = ParserUtil.PAGE_NO+","+ParserUtil.SIZE; -// //设置分页的统一链接 -// String url = BasicUtil.getUrl()+request.getServletPath() +"?" + BasicUtil.assemblyRequestUrlParams(str.split(",")); -// String pageNoStr = "&"+ParserUtil.SIZE+"="+size+"&"+ParserUtil.PAGE_NO+"="; -// //下一页 -// String nextUrl = url + pageNoStr+((pageNo+1 > total)?total:pageNo+1); -// //首页 -// String indexUrl = url + pageNoStr + 1; -// //尾页 -// String lastUrl = url + pageNoStr + total; -// //上一页 当前页为1时,上一页就是1 -// String preUrl = url + pageNoStr + ((pageNo==1) ? 1:pageNo-1); -// -// page.setIndexUrl(indexUrl); -// page.setNextUrl(nextUrl); -// page.setPreUrl(preUrl); -// page.setLastUrl(lastUrl); -// map.put(ParserUtil.URL, BasicUtil.getUrl()); -// Map searchMap = BasicUtil.assemblyRequestMap(); -// searchMap.put(ParserUtil.PAGE_NO, pageNo); -// map.put(SEARCH, searchMap); -// map.put(ParserUtil.PAGE, page); -// //动态解析 -// map.put(ParserUtil.IS_DO,false); -// //设置动态请求的模块路径 -// map.put(ParserUtil.MODEL_NAME, "mcms"); -// //解析后的内容 -// String content = ""; -// try { -// //根据模板路径,参数生成 -// content = CmsParserUtil.generate(SEARCH+ParserUtil.HTM_SUFFIX,map, isMobileDevice(request)); -// } catch (TemplateNotFoundException e) { -// e.printStackTrace(); -// } catch (MalformedTemplateNameException e) { -// e.printStackTrace(); -// } catch (ParseException e) { -// e.printStackTrace(); -// } catch (IOException e) { -// e.printStackTrace(); -// } -// this.outString(response, content); -// } - /** - * 动态组织查询where条件 获取查询条件的Map key:字段名 value:List 字段的各种判断值 list[0]:是否为自定义字段 - * list[1]:是否为整形 list[2]:是否是等值查询 list[3]:字段的值 + * 实现前端页面的文章搜索 * - * @param articleField - * 文章字段 - * @param diyFieldName - * 动态字段 - * @param fields - * 模型对应的字段类型 - * @return + * @param request + * 搜索id + * @param response */ - @SuppressWarnings({ "rawtypes", "unchecked" }) - private Map searchMap(Map articleField, Map diyFieldName, - List fields) { - Map map = new HashMap(); + @RequestMapping(value = "search") + @ResponseBody + public void search(HttpServletRequest request, HttpServletResponse response) { - // 遍历文章中的字段 - for (Iterator iter = articleField.keySet().iterator(); iter.hasNext();) { - String key = iter.next().toString(); - String fieldValue = articleField.get(key).toString(); - List list = new ArrayList(); - List listValue = new ArrayList(); - // 是否为自定义字段 - list.add(false); - - // 是否是数字类型,true:不是 - list.add(true); - // 是否是模糊查询3 - list.add(true); - // 字段值 - listValue.add(articleField.get(key)); - list.add(listValue); - map.put(key, list); + Map map = new HashMap<>(); + // 读取请求字段 + Map field = request.getParameterMap(); + // 文章字段集合 + Map articleFieldName = new HashMap(); + // 自定义字段集合 + Map diyFieldName = new HashMap(); + CategoryEntity column = null; // 当前栏目 + ModelEntity contentModel = null; // 栏目对应模型 + List fieldValueList = new ArrayList(); // 栏目对应字段的值 + int typeId = 0; + String categoryIds = BasicUtil.getString("categoryId"); + //当传递了栏目编号,但不是栏目集合 + if(!StringUtil.isBlank(categoryIds) && !categoryIds.contains(",")){ + typeId = Integer.parseInt(categoryIds); + } + //记录自定义模型字段名 + List filedStr = new ArrayList<>(); + //根据栏目确定自定义模型 + if(typeId>0){ + column = (CategoryEntity) categoryBiz.getEntity(Integer.parseInt(typeId+"")); + // 获取表单类型的id + if (column != null&&ObjectUtil.isNotNull(column.getMdiyModelId())) { + contentModel = (ModelEntity) modelBiz.getEntity(Integer.parseInt(column.getMdiyModelId())); + if (contentModel != null) { + Map fieldMap = contentModel.getFieldMap(); + for (String s : fieldMap.keySet()) { + filedStr.add(fieldMap.get(s)); + } + map.put(ParserUtil.TABLE_NAME, contentModel.getModelTableName()); + } + } + map.put(ParserUtil.COLUMN, column); } - // 遍历字段自定义字段 - for (Iterator iter = diyFieldName.keySet().iterator(); iter.hasNext();) { - String key = iter.next().toString(); - String fieldValue = diyFieldName.get(key); - // 获取字段实体 - Map field = get(key, fields); - if (field != null) { - List list = new ArrayList(); - // 是否为自定义字段0 - list.add(0, true); - List listValue = new ArrayList(); - // 字段的值 - if ("int".equals(field.get("javaType") ) || "float".equals(field.get("javaType") )|| "Double".equals(field.get("javaType")) ) { - // 判断是否为区间查询 - - if (diyFieldName.get(key).toString().indexOf("-") > 0) { - String[] values = fieldValue.toString().split("-"); - // 是否是数字类型,false:是 - list.add(false); - // 是否是区间比较 false:是 - list.add(false); - // 字段值1 - listValue.add(values[0]); - listValue.add(values[1]); - } else { - // 是否是数字类型,false:是2 - list.add(false); - // 是否是区间比较 true:不是3 - list.add(true); - // 字段值 1 - listValue.add(fieldValue); + // 遍历取字段集合 + if (field != null) { + for (Map.Entry entry : field.entrySet()) { + if (entry != null) { + String value = entry.getValue()[0]; // 处理由get方法请求中文乱码问题 + if (ObjectUtil.isNull(value)) { + continue; } - } else { - // 是否是数字类型,true:不是2 - list.add(true); - list.add(false); - // 字段值 1 - listValue.add(fieldValue); + if (request.getMethod().equals(RequestMethod.GET)) { // 如果是get方法需要将请求地址参数转码 + try { + value = new String(value.getBytes("ISO-8859-1"), Const.UTF8); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + // 保存至自定义字段集合 + if (!StringUtil.isBlank(value)) { + diyFieldName.put(entry.getKey(), value); + //判断请求中的是否是自定义模型中的字段 + if(filedStr.contains(entry.getKey())){ + //设置自定义模型字段和值 + DiyModelMap diyMap = new DiyModelMap(); + diyMap.setKey(entry.getKey()); + diyMap.setValue(value); + fieldValueList.add(diyMap); + } + } + } - list.add(listValue); - map.put(key, list); } } - return map; + + //添加自定义模型的字段和值 + if(fieldValueList.size()>0){ + map.put("diyModel", fieldValueList); + } + + //设置分页类 + PageBean page = new PageBean(); + //读取模板的分页数量 + int size = BasicUtil.getInt(ParserUtil.SIZE,10); + try { + size = TagParser.getPageSize(ParserUtil.read(SEARCH+ParserUtil.HTM_SUFFIX,false )); + } catch (TemplateNotFoundException e1) { + e1.printStackTrace(); + } catch (MalformedTemplateNameException e1) { + e1.printStackTrace(); + } catch (ParseException e1) { + e1.printStackTrace(); + } catch (IOException e1) { + e1.printStackTrace(); + } + //查询数量 + int count= contentBiz.getSearchCount(contentModel,fieldValueList,BasicUtil.assemblyRequestMap(),BasicUtil.getAppId(),categoryIds); + int total = PageUtil.totalPage(count, size); + + int pageNo = BasicUtil.getInt(ParserUtil.PAGE_NO, 1); + if(pageNo >= total && total!=0) { + pageNo = total; + } + //获取总数 + page.setTotal(total); + //设置页面显示数量 + page.setSize(size); + //设置列表当前页 + + page.setPageNo(pageNo); + + String str = ParserUtil.PAGE_NO+","+ParserUtil.SIZE; + //设置分页的统一链接 + String url = BasicUtil.getUrl()+request.getServletPath() +"?" + BasicUtil.assemblyRequestUrlParams(str.split(",")); + String pageNoStr = "&"+ParserUtil.SIZE+"="+size+"&"+ParserUtil.PAGE_NO+"="; + //下一页 + String nextUrl = url + pageNoStr+((pageNo+1 > total)?total:pageNo+1); + //首页 + String indexUrl = url + pageNoStr + 1; + //尾页 + String lastUrl = url + pageNoStr + total; + //上一页 当前页为1时,上一页就是1 + String preUrl = url + pageNoStr + ((pageNo==1) ? 1:pageNo-1); + + page.setIndexUrl(indexUrl); + page.setNextUrl(nextUrl); + page.setPreUrl(preUrl); + page.setLastUrl(lastUrl); + map.put(ParserUtil.URL, BasicUtil.getUrl()); + Map searchMap = BasicUtil.assemblyRequestMap(); + searchMap.put(ParserUtil.PAGE_NO, pageNo); + map.put(SEARCH, searchMap); + map.put(ParserUtil.PAGE, page); + //动态解析 + map.put(ParserUtil.IS_DO,false); + //设置动态请求的模块路径 + map.put(ParserUtil.MODEL_NAME, "mcms"); + //解析后的内容 + String content = ""; + try { + //根据模板路径,参数生成 + content = CmsParserUtil.generate(SEARCH+ParserUtil.HTM_SUFFIX,map, isMobileDevice(request)); + } catch (TemplateNotFoundException e) { + e.printStackTrace(); + } catch (MalformedTemplateNameException e) { + e.printStackTrace(); + } catch (ParseException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + this.outString(response, content); } + private Map get(String key, List fields) { for (Map field : fields) { if(key.equals(field.get("key"))){ diff --git a/src/main/java/net/mingsoft/cms/biz/IContentBiz.java b/src/main/java/net/mingsoft/cms/biz/IContentBiz.java index 581881e5..52faf36e 100644 --- a/src/main/java/net/mingsoft/cms/biz/IContentBiz.java +++ b/src/main/java/net/mingsoft/cms/biz/IContentBiz.java @@ -20,5 +20,5 @@ public interface IContentBiz extends IBaseBiz { List queryIdsByCategoryIdForParser(String categoryId, String beginTime, String endTime, String orderBy, String order); - int getSearchCount(ModelEntity contentModel, Map whereMap, int appId, String categoryIds); + int getSearchCount(ModelEntity contentModel, List diyList, Map whereMap, int appId, String categoryIds); } \ No newline at end of file diff --git a/src/main/java/net/mingsoft/cms/biz/impl/ContentBizImpl.java b/src/main/java/net/mingsoft/cms/biz/impl/ContentBizImpl.java index a41ef4bb..8a01fb38 100644 --- a/src/main/java/net/mingsoft/cms/biz/impl/ContentBizImpl.java +++ b/src/main/java/net/mingsoft/cms/biz/impl/ContentBizImpl.java @@ -63,10 +63,10 @@ public class ContentBizImpl extends BaseBizImpl implements IContentBiz { } @Override - public int getSearchCount(ModelEntity contentModel, Map whereMap, int appId, String categoryIds) { + public int getSearchCount(ModelEntity contentModel, List diyList, Map whereMap, int appId, String categoryIds) { if (contentModel!=null) { - return contentDao.getSearchCount(contentModel.getModelTableName(),whereMap, appId,categoryIds); + return contentDao.getSearchCount(contentModel.getModelTableName(),diyList,whereMap, appId,categoryIds); } - return contentDao.getSearchCount(null,whereMap, appId,categoryIds); + return contentDao.getSearchCount(null,null,whereMap, appId,categoryIds); } } \ No newline at end of file diff --git a/src/main/java/net/mingsoft/cms/dao/IContentDao.java b/src/main/java/net/mingsoft/cms/dao/IContentDao.java index 2f61868b..d92f57f3 100644 --- a/src/main/java/net/mingsoft/cms/dao/IContentDao.java +++ b/src/main/java/net/mingsoft/cms/dao/IContentDao.java @@ -34,6 +34,6 @@ public interface IContentDao extends IBaseDao { * list[2]:是否是等值查询 list[3]:字段的值 * @return 文章实体总数 */ - int getSearchCount(@Param("tableName") String tableName, @Param("map") Map map, + int getSearchCount(@Param("tableName") String tableName, @Param("diyList") List diyList,@Param("map") Map map, @Param("websiteId") int websiteId, @Param("ids") String ids); } \ No newline at end of file diff --git a/src/main/java/net/mingsoft/cms/dao/IContentDao.xml b/src/main/java/net/mingsoft/cms/dao/IContentDao.xml index cfea7f07..1e680907 100644 --- a/src/main/java/net/mingsoft/cms/dao/IContentDao.xml +++ b/src/main/java/net/mingsoft/cms/dao/IContentDao.xml @@ -254,71 +254,43 @@ left join cms_category c ON a.content_category_id = c.id - left join ${tableName} d on d.link_id=a.id + left join ${tableName} d on d.link_id=a.id - where a.app_id = #{websiteId} - - and FIND_IN_SET(content_category_id,'${ids}') - - - - and ${key} + + a.app_id = #{websiteId} + + and FIND_IN_SET(content_category_id,'${ids}') - - and d.${key} + + and a.content_title like CONCAT("%",'${map.content_title}',"%") - - - - - = - #{val} - - - - between - - #{val} - - + + and a.content_author like CONCAT("%",'${map.content_author}',"%") - - - - - - - - = - #{val} - - + + and a.content_source like CONCAT("%",'${map.content_source}',"%") - + + and a.content_type like CONCAT("%",'${map.content_type}',"%") + + + and a.content_description like CONCAT("%",'${map.content_description}',"%") + + + and a.content_keyword like CONCAT("%",'${map.content_keyword}',"%") + + + and a.content_details like CONCAT("%",'${map.content_details}',"%") + + + + and d.${item.key} like CONCAT("%",'${item.value}',"%") + + + + - - - like CONCAT("%", - - #{val} - - ,"%") - - - like '%'|| - - #{val} - - ||'%' - - - like '%'+ - - #{val} - - +'%' - + \ No newline at end of file