Commit 09ff0390 authored by tianbj's avatar tianbj
Browse files

Merge remote-tracking branch 'origin/5.0.0' into 5.0.0

# Conflicts:
#	README.md
#	doc/历史/4.6.5-to-4.7.0-mysql.sql
#	doc/历史/4.6.5-to-4.7.0-sqlserver.sql
#	doc/历史/db-mcms-mysql-4.7.0.sql
#	doc/历史/db-mcms-sqlserver-4.7.0.sql
#	pom.xml
#	src/main/java/net/mingsoft/cms/action/ArticleAction.java
#	src/main/java/net/mingsoft/cms/action/ColumnAction.java
#	src/main/java/net/mingsoft/cms/action/GeneraterAction.java
#	src/main/java/net/mingsoft/cms/action/web/MCmsAction.java
#	src/main/java/net/mingsoft/cms/biz/IArticleBiz.java
#	src/main/java/net/mingsoft/cms/biz/impl/ArticleBizImpl.java
#	src/main/java/net/mingsoft/cms/dao/IArticleDao.java
#	src/main/java/net/mingsoft/cms/dao/IArticleDao.xml
#	src/main/java/net/mingsoft/cms/resources/resources_zh_CN.properties
#	src/main/java/net/mingsoft/config/WebConfig.java
#	src/main/resources/application.yml
#	src/main/webapp/WEB-INF/manager/cms/article/article_form.ftl
#	src/main/webapp/WEB-INF/manager/cms/article/article_main.ftl
#	src/main/webapp/WEB-INF/manager/cms/column/shiro-button.ftl
#	src/main/webapp/WEB-INF/manager/cms/column/shiro-update.ftl
#	src/main/webapp/html/1/index.html
#	src/main/webapp/html/1/m/index.html
#	src/main/webapp/static/plugins/ms/1.0.0/ms.util.js
#	src/main/webapp/static/plugins/tree-select/tree.js
#	src/main/webapp/static/plugins/vue-ueditor-wrap/vue-ueditor-wrap.min.js
#	src/main/webapp/templets/1/default/about.htm
#	src/main/webapp/templets/1/default/advice.htm
#	src/main/webapp/templets/1/default/case-list.htm
#	src/main/webapp/templets/1/default/index.htm
#	src/main/webapp/templets/1/default/m/about.htm
#	src/main/webapp/templets/1/default/m/advice.htm
#	src/main/webapp/templets/1/default/m/case-list.htm
#	src/main/webapp/templets/1/default/m/contact.htm
#	src/main/webapp/templets/1/default/m/news-list.htm
#	src/main/webapp/templets/1/default/m/news-show.htm
#	src/main/webapp/templets/1/default/news-show.htm
#	src/main/webapp/templets/1/default/search.htm
parents de640e65 96693c07
package net.mingsoft.cms.action.web;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import net.mingsoft.base.entity.BaseEntity;
import net.mingsoft.base.entity.ResultData;
import net.mingsoft.basic.bean.EUListBean;
import net.mingsoft.basic.util.BasicUtil;
import net.mingsoft.basic.util.StringUtil;
import net.mingsoft.cms.biz.IContentBiz;
import net.mingsoft.cms.entity.ContentEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 文章管理控制层
* @author 铭飞开发团队
* 创建日期:2019-11-28 15:12:32<br/>
* 历史修订:<br/>
*/
@Api(value = "文章接口")
@Controller("WebcmsContentAction")
@RequestMapping("/cms/content")
public class ContentAction extends net.mingsoft.cms.action.BaseAction{
/**
* 注入文章业务层
*/
@Autowired
private IContentBiz contentBiz;
/**
* 返回主界面index
*/
@GetMapping("/index")
public String index(HttpServletResponse response,HttpServletRequest request){
return "/cms/content/index";
}
/**
* 查询文章列表
* @param content 文章实体
*/
@ApiOperation(value = "查询文章列表接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "contentTitle", value = "文章标题", required =false,paramType="query"),
@ApiImplicitParam(name = "contentCategoryId", value = "所属栏目", required =false,paramType="query"),
@ApiImplicitParam(name = "contentType", value = "文章类型", required =false,paramType="query"),
@ApiImplicitParam(name = "contentDisplay", value = "是否显示", required =false,paramType="query"),
@ApiImplicitParam(name = "contentAuthor", value = "文章作者", required =false,paramType="query"),
@ApiImplicitParam(name = "contentSource", value = "文章来源", required =false,paramType="query"),
@ApiImplicitParam(name = "contentDatetime", value = "发布时间", required =false,paramType="query"),
@ApiImplicitParam(name = "contentSort", value = "自定义顺序", required =false,paramType="query"),
@ApiImplicitParam(name = "contentImg", value = "文章缩略图", required =false,paramType="query"),
@ApiImplicitParam(name = "contentDescription", value = "描述", required =false,paramType="query"),
@ApiImplicitParam(name = "contentKeyword", value = "关键字", required =false,paramType="query"),
@ApiImplicitParam(name = "contentDetails", value = "文章内容", required =false,paramType="query"),
@ApiImplicitParam(name = "contentUrl", value = "文章跳转链接地址", required =false,paramType="query"),
@ApiImplicitParam(name = "appid", value = "文章管理的应用id", required =false,paramType="query"),
@ApiImplicitParam(name = "createBy", value = "创建人", required =false,paramType="query"),
@ApiImplicitParam(name = "createDate", value = "创建时间", required =false,paramType="query"),
@ApiImplicitParam(name = "updateBy", value = "修改人", required =false,paramType="query"),
@ApiImplicitParam(name = "updateDate", value = "修改时间", required =false,paramType="query"),
@ApiImplicitParam(name = "del", value = "删除标记", required =false,paramType="query"),
@ApiImplicitParam(name = "id", value = "编号", required =false,paramType="query"),
})
@RequestMapping("/list")
@ResponseBody
public ResultData list(@ModelAttribute @ApiIgnore ContentEntity content,HttpServletResponse response, HttpServletRequest request,@ApiIgnore ModelMap model,BindingResult result) {
BasicUtil.startPage();
List contentList = contentBiz.query(content);
return ResultData.build().success(new EUListBean(contentList,(int)BasicUtil.endPage(contentList).getTotal()));
}
/**
* 返回编辑界面content_form
*/
@GetMapping("/form")
public String form(@ModelAttribute ContentEntity content,HttpServletResponse response,HttpServletRequest request,ModelMap model){
if(content.getId()!=null){
BaseEntity contentEntity = contentBiz.getEntity(Integer.parseInt(content.getId()));
model.addAttribute("contentEntity",contentEntity);
}
return "/cms/content/form";
}
/**
* 获取文章
* @param content 文章实体
*/
@ApiOperation(value = "获取文章列表接口")
@ApiImplicitParam(name = "id", value = "编号", required =true,paramType="query")
@GetMapping("/get")
@ResponseBody
public ResultData get(@ModelAttribute @ApiIgnore ContentEntity content,HttpServletResponse response, HttpServletRequest request,@ApiIgnore ModelMap model){
if(content.getId()==null) {
return ResultData.build().error();
}
ContentEntity _content = (ContentEntity)contentBiz.getEntity(Integer.parseInt(content.getId()));
return ResultData.build().success(_content);
}
@ApiOperation(value = "保存文章列表接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "contentTitle", value = "文章标题", required =true,paramType="query"),
@ApiImplicitParam(name = "contentCategoryId", value = "所属栏目", required =false,paramType="query"),
@ApiImplicitParam(name = "contentType", value = "文章类型", required =false,paramType="query"),
@ApiImplicitParam(name = "contentDisplay", value = "是否显示", required =false,paramType="query"),
@ApiImplicitParam(name = "contentAuthor", value = "文章作者", required =false,paramType="query"),
@ApiImplicitParam(name = "contentSource", value = "文章来源", required =false,paramType="query"),
@ApiImplicitParam(name = "contentDatetime", value = "发布时间", required =true,paramType="query"),
@ApiImplicitParam(name = "contentSort", value = "自定义顺序", required =false,paramType="query"),
@ApiImplicitParam(name = "contentImg", value = "文章缩略图", required =false,paramType="query"),
@ApiImplicitParam(name = "contentDescription", value = "描述", required =false,paramType="query"),
@ApiImplicitParam(name = "contentKeyword", value = "关键字", required =false,paramType="query"),
@ApiImplicitParam(name = "contentDetails", value = "文章内容", required =false,paramType="query"),
@ApiImplicitParam(name = "contentUrl", value = "文章跳转链接地址", required =false,paramType="query"),
@ApiImplicitParam(name = "appid", value = "文章管理的应用id", required =false,paramType="query"),
@ApiImplicitParam(name = "createBy", value = "创建人", required =false,paramType="query"),
@ApiImplicitParam(name = "createDate", value = "创建时间", required =false,paramType="query"),
@ApiImplicitParam(name = "updateBy", value = "修改人", required =false,paramType="query"),
@ApiImplicitParam(name = "updateDate", value = "修改时间", required =false,paramType="query"),
@ApiImplicitParam(name = "del", value = "删除标记", required =false,paramType="query"),
@ApiImplicitParam(name = "id", value = "编号", required =false,paramType="query"),
})
/**
* 保存文章
* @param content 文章实体
*/
@PostMapping("/save")
@ResponseBody
public ResultData save(@ModelAttribute @ApiIgnore ContentEntity content, HttpServletResponse response, HttpServletRequest request) {
//验证文章标题的值是否合法
if(StringUtil.isBlank(content.getContentTitle())){
return ResultData.build().error(getResString("err.empty", this.getResString("content.title")));
}
if(!StringUtil.checkLength(content.getContentTitle()+"", 0, 200)){
return ResultData.build().error(getResString("err.length", this.getResString("content.title"), "0", "200"));
}
if(!StringUtil.checkLength(content.getContentAuthor()+"", 0, 200)){
return ResultData.build().error(getResString("err.length", this.getResString("content.author"), "0", "200"));
}
if(!StringUtil.checkLength(content.getContentSource()+"", 0, 200)){
return ResultData.build().error(getResString("err.length", this.getResString("content.source"), "0", "200"));
}
//验证发布时间的值是否合法
if(StringUtil.isBlank(content.getContentDatetime())){
return ResultData.build().error(getResString("err.empty", this.getResString("content.datetime")));
}
if(!StringUtil.checkLength(content.getContentUrl()+"", 0, 200)){
return ResultData.build().error(getResString("err.length", this.getResString("content.url"), "0", "200"));
}
contentBiz.saveEntity(content);
return ResultData.build().success(content);
}
/**
* @param contents 文章实体
*/
@ApiOperation(value = "批量删除文章列表接口")
@PostMapping("/delete")
@ResponseBody
public ResultData delete(@RequestBody List<ContentEntity> contents,HttpServletResponse response, HttpServletRequest request) {
int[] ids = new int[contents.size()];
for(int i = 0;i<contents.size();i++){
ids[i] =Integer.parseInt(contents.get(i).getId()) ;
}
contentBiz.delete(ids);
return ResultData.build().success();
}
/**
* 更新文章列表
* @param content 文章实体
*/
@ApiOperation(value = "更新文章列表接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "编号", required =true,paramType="query"),
@ApiImplicitParam(name = "contentTitle", value = "文章标题", required =true,paramType="query"),
@ApiImplicitParam(name = "contentCategoryId", value = "所属栏目", required =false,paramType="query"),
@ApiImplicitParam(name = "contentType", value = "文章类型", required =false,paramType="query"),
@ApiImplicitParam(name = "contentDisplay", value = "是否显示", required =false,paramType="query"),
@ApiImplicitParam(name = "contentAuthor", value = "文章作者", required =false,paramType="query"),
@ApiImplicitParam(name = "contentSource", value = "文章来源", required =false,paramType="query"),
@ApiImplicitParam(name = "contentDatetime", value = "发布时间", required =true,paramType="query"),
@ApiImplicitParam(name = "contentSort", value = "自定义顺序", required =false,paramType="query"),
@ApiImplicitParam(name = "contentImg", value = "文章缩略图", required =false,paramType="query"),
@ApiImplicitParam(name = "contentDescription", value = "描述", required =false,paramType="query"),
@ApiImplicitParam(name = "contentKeyword", value = "关键字", required =false,paramType="query"),
@ApiImplicitParam(name = "contentDetails", value = "文章内容", required =false,paramType="query"),
@ApiImplicitParam(name = "contentUrl", value = "文章跳转链接地址", required =false,paramType="query"),
@ApiImplicitParam(name = "appid", value = "文章管理的应用id", required =false,paramType="query"),
@ApiImplicitParam(name = "createBy", value = "创建人", required =false,paramType="query"),
@ApiImplicitParam(name = "createDate", value = "创建时间", required =false,paramType="query"),
@ApiImplicitParam(name = "updateBy", value = "修改人", required =false,paramType="query"),
@ApiImplicitParam(name = "updateDate", value = "修改时间", required =false,paramType="query"),
@ApiImplicitParam(name = "del", value = "删除标记", required =false,paramType="query"),
@ApiImplicitParam(name = "id", value = "编号", required =false,paramType="query"),
})
@PostMapping("/update")
@ResponseBody
public ResultData update(@ModelAttribute @ApiIgnore ContentEntity content, HttpServletResponse response,
HttpServletRequest request) {
//验证文章标题的值是否合法
if(StringUtil.isBlank(content.getContentTitle())){
return ResultData.build().error(getResString("err.empty", this.getResString("content.title")));
}
if(!StringUtil.checkLength(content.getContentTitle()+"", 0, 200)){
return ResultData.build().error(getResString("err.length", this.getResString("content.title"), "0", "200"));
}
if(!StringUtil.checkLength(content.getContentAuthor()+"", 0, 200)){
return ResultData.build().error(getResString("err.length", this.getResString("content.author"), "0", "200"));
}
if(!StringUtil.checkLength(content.getContentSource()+"", 0, 200)){
return ResultData.build().error(getResString("err.length", this.getResString("content.source"), "0", "200"));
}
//验证发布时间的值是否合法
if(StringUtil.isBlank(content.getContentDatetime())){
return ResultData.build().error(getResString("err.empty", this.getResString("content.datetime")));
}
if(!StringUtil.checkLength(content.getContentUrl()+"", 0, 200)){
return ResultData.build().error(getResString("err.length", this.getResString("content.url"), "0", "200"));
}
contentBiz.updateEntity(content);
return ResultData.build().success(content);
}
@ApiOperation(value = "查看文章点击数")
@ApiImplicitParam(name = "contentId", value = "文章编号", required = true,paramType="path")
@GetMapping(value = "/{contentId}/hit")
@ResponseBody
public void hit(@PathVariable @ApiIgnore int contentId, HttpServletRequest request, HttpServletResponse response){
if(contentId<=0){
this.outString(response, "document.write(0)");
return;
}
ContentEntity content = (ContentEntity)contentBiz.getEntity(contentId);
if(content == null){
this.outString(response, "document.write(0)");
return;
}
if(content.getAppId() == null || content.getAppId() != BasicUtil.getAppId()){
this.outString(response, "document.write(0)");
return;
}
this.outString(response, "document.write(" + content.getContentHit() + ")");
return;
}
}
\ No newline at end of file
......@@ -19,110 +19,110 @@ The MIT License (MIT) * Copyright (c) 2016 铭飞科技(mingsoft.net)
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package net.mingsoft.cms.action.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
package net.mingsoft.cms.action.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSONObject;
import net.mingsoft.basic.biz.IColumnBiz;
import net.mingsoft.mdiy.biz.IContentModelBiz;
import net.mingsoft.mdiy.biz.IContentModelFieldBiz;
import net.mingsoft.basic.entity.ColumnEntity;
import net.mingsoft.mdiy.entity.ContentModelEntity;
import net.mingsoft.basic.biz.IColumnBiz;
import net.mingsoft.mdiy.biz.IContentModelBiz;
import net.mingsoft.mdiy.biz.IContentModelFieldBiz;
import net.mingsoft.basic.entity.ColumnEntity;
import net.mingsoft.mdiy.entity.ContentModelEntity;
import net.mingsoft.mdiy.entity.ContentModelFieldEntity;
import net.mingsoft.base.action.BaseAction;
import net.mingsoft.basic.util.BasicUtil;
/**
*
*
*
* <p>
* <b>铭飞科技</b>
* </p>
*
* <p>
* Copyright: Copyright (c) 2014 - 2015
* </p>
*
* @author 史爱华
*
* <p>
* Comments: 供前端页面获取自定义模型中字段实体信息
* </p>
*
* <p>
* Create Date:2015-07-11
* </p>
*
* <p>
* Modification history:
* </p>
*/
@Controller("webField")
@RequestMapping("/field")
public class FieldAction extends BaseAction{
/**
* 栏目业务层
*/
@Autowired
private IColumnBiz columnBiz;
/**
* 内容模型业务层
*/
@Autowired
private IContentModelBiz contentModelBiz;
/**
* 字段管理业务层
*/
@Autowired
private IContentModelFieldBiz fieldBiz;
/**
*
* 根据当前栏目id和字段名称获取自定义模型中的字段实体信息
* @param request
* @param response
*/
@RequestMapping("/{columId}/getEntity")
@ResponseBody
public void getEntity(@PathVariable int columId,HttpServletRequest request, HttpServletResponse response) {
import net.mingsoft.basic.util.BasicUtil;
/**
*
*
*
* <p>
* <b>铭飞科技</b>
* </p>
*
* <p>
* Copyright: Copyright (c) 2014 - 2015
* </p>
*
* @author 史爱华
*
* <p>
* Comments: 供前端页面获取自定义模型中字段实体信息
* </p>
*
* <p>
* Create Date:2015-07-11
* </p>
*
* <p>
* Modification history:
* </p>
*/
@Controller("webField")
@RequestMapping("/field")
public class FieldAction extends BaseAction{
/**
* 栏目业务层
*/
@Autowired
private IColumnBiz columnBiz;
/**
* 内容模型业务层
*/
@Autowired
private IContentModelBiz contentModelBiz;
/**
* 字段管理业务层
*/
@Autowired
private IContentModelFieldBiz fieldBiz;
/**
*
* 根据当前栏目id和字段名称获取自定义模型中的字段实体信息
* @param request
* @param response
*/
@RequestMapping("/{columId}/getEntity")
@ResponseBody
public void getEntity(@PathVariable int columId,HttpServletRequest request, HttpServletResponse response) {
System.out.println("111");
BasicUtil.setSession("xxx", "888");
System.err.println("session:"+BasicUtil.getSession("xxx"));
//获取字段名称
String fieldFieldName = request.getParameter("fieldFieldName");
//根据栏目id获取栏目实体
ColumnEntity column = (ColumnEntity) this.columnBiz.getEntity(columId);
if(column==null){
this.outJson(response, this.getResString("err"));
return;
}else{
//判断该栏目下是存在内容模型
if(column.getColumnContentModelId()>0){
//获取当前栏目对应的内容模型
ContentModelEntity contentModel = (ContentModelEntity) this.contentModelBiz.getEntity(column.getColumnContentModelId());
if(contentModel==null){
this.outJson(response, this.getResString("err"));
return;
}
//获取字段实体
ContentModelFieldEntity field = fieldBiz.getEntityByCmId(column.getColumnContentModelId(), fieldFieldName);
//返回字段实体
this.outJson(response, JSONObject.toJSONString(field));
}
}
}
//获取字段名称
String fieldFieldName = request.getParameter("fieldFieldName");
//根据栏目id获取栏目实体
ColumnEntity column = (ColumnEntity) this.columnBiz.getEntity(columId);
if(column==null){
this.outJson(response, this.getResString("err"));
return;
}else{
//判断该栏目下是存在内容模型
if(column.getColumnContentModelId()>0){
//获取当前栏目对应的内容模型
ContentModelEntity contentModel = (ContentModelEntity) this.contentModelBiz.getEntity(column.getColumnContentModelId());
if(contentModel==null){
this.outJson(response, this.getResString("err"));
return;
}
//获取字段实体
ContentModelFieldEntity field = fieldBiz.getEntityByCmId(column.getColumnContentModelId(), fieldFieldName);
//返回字段实体
this.outJson(response, JSONObject.toJSONString(field));
}
}
}
}
\ No newline at end of file
......@@ -21,41 +21,39 @@
package net.mingsoft.cms.action.web;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.UnsupportedEncodingException;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.io.FileUtil;
import com.github.pagehelper.PageHelper;
import com.alibaba.fastjson.JSONArray;
import net.mingsoft.base.constant.Const;
import net.mingsoft.basic.util.SpringUtil;
import net.mingsoft.cms.constant.e.ColumnTypeEnum;
import net.mingsoft.basic.util.StringUtil;
import net.mingsoft.cms.bean.ContentBean;
import net.mingsoft.cms.biz.ICategoryBiz;
import net.mingsoft.cms.biz.IContentBiz;
import net.mingsoft.cms.entity.CategoryEntity;
import net.mingsoft.cms.entity.ContentEntity;
import net.mingsoft.mdiy.biz.IContentModelBiz;
import net.mingsoft.mdiy.biz.IModelBiz;
import net.mingsoft.mdiy.entity.ContentModelEntity;
import net.mingsoft.mdiy.entity.ModelEntity;
import net.mingsoft.mdiy.parser.TagParser;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.*;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.PageUtil;
import freemarker.core.ParseException;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.TemplateNotFoundException;
import net.mingsoft.basic.biz.IColumnBiz;
import net.mingsoft.basic.entity.ColumnEntity;
import net.mingsoft.basic.util.BasicUtil;
import net.mingsoft.cms.bean.ColumnArticleIdBean;
import net.mingsoft.cms.biz.IArticleBiz;
import net.mingsoft.cms.entity.ArticleEntity;
import net.mingsoft.cms.util.CmsParserUtil;
import net.mingsoft.mdiy.bean.PageBean;
import net.mingsoft.mdiy.biz.IPageBiz;
......@@ -82,15 +80,26 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
* 文章管理业务处理层
*/
@Autowired
private IArticleBiz articleBiz;
private IContentBiz contentBiz;
/**
* 栏目业务层
*/
@Autowired
private IColumnBiz columnBiz;
private ICategoryBiz categoryBiz;
/**
* 搜索标签;
*/
public static final String SEARCH = "search";
/**
* 自定义模型
*/
@Autowired
private IModelBiz modelBiz;
// 如商城就为:/mall/{key}.do
/**
* 前段会员中心所有页面都可以使用该方法 请求地址例如: /{diy}.do,例如登陆界面,与注册界面都可以使用
......@@ -158,9 +167,6 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
* 动态列表页
* @param req
* @param resp
* @param pageNumber 设置列表当前页
* @param typeid 栏目编号
* @param size 显示条数
*/
@GetMapping("/list.do")
public void list(HttpServletRequest req, HttpServletResponse resp) {
......@@ -170,7 +176,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
int size = BasicUtil.getInt(ParserUtil.SIZE,10);
//获取文章总数
List<ColumnArticleIdBean> columnArticles = articleBiz.queryIdsByCategoryIdForParser(typeId, null, null);
List<ContentBean> columnArticles = contentBiz.queryIdsByCategoryIdForParser(String.valueOf(typeId), null, null);
//判断栏目下是否有文章
if(columnArticles.size()==0){
this.outJson(resp, false);
......@@ -196,7 +202,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
String content = "";
try {
//根据模板路径,参数生成
content = CmsParserUtil.generate(columnArticles.get(0).getColumnListUrl(),map, isMobileDevice(req));
content = CmsParserUtil.generate(columnArticles.get(0).getCategoryListUrl(),map, isMobileDevice(req));
} catch (TemplateNotFoundException e) {
e.printStackTrace();
} catch (MalformedTemplateNameException e) {
......@@ -216,7 +222,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
@GetMapping("/view.do")
public void view(String orderby,String order,HttpServletRequest req, HttpServletResponse resp) {
//参数文章编号
ArticleEntity article = (ArticleEntity) articleBiz.getEntity(BasicUtil.getInt(ParserUtil.ID));
ContentEntity article = (ContentEntity) contentBiz.getEntity(BasicUtil.getInt(ParserUtil.ID));
if(ObjectUtil.isNull(article)){
this.outJson(resp, null,false,getResString("err.empty", this.getResString("id")));
return;
......@@ -230,7 +236,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
}
PageBean page = new PageBean();
//根据文章编号查询栏目详情模版
ColumnEntity column = (ColumnEntity) columnBiz.getEntity(article.getBasicCategoryId());
CategoryEntity column = (CategoryEntity) categoryBiz.getEntity(Integer.parseInt(article.getContentCategoryId()));
//解析后的内容
String content = "";
Map map = BasicUtil.assemblyRequestMap();
......@@ -240,31 +246,31 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
map.put(ParserUtil.MODEL_NAME, "mcms");
map.put(ParserUtil.URL, BasicUtil.getUrl());
map.put(ParserUtil.PAGE, page);
map.put(ParserUtil.ID, article.getArticleID());
List<ColumnArticleIdBean> articleIdList = articleBiz.queryIdsByCategoryIdForParser(column.getCategoryCategoryId(), null, null,orderby,order);
map.put(ParserUtil.ID, article.getId());
List<ContentBean> articleIdList = contentBiz.queryIdsByCategoryIdForParser(column.getCategoryId(), null, null,orderby,order);
Map<Object, Object> contentModelMap = new HashMap<Object, Object>();
ContentModelEntity contentModel = null;
for (int artId = 0; artId < articleIdList.size();) {
//如果不是当前文章则跳过
if(articleIdList.get(artId).getArticleId() != article.getArticleID()){
if(articleIdList.get(artId).getArticleId() != Integer.parseInt(article.getId())){
artId++;
continue;
}
// 文章的栏目路径
String articleColumnPath = articleIdList.get(artId).getColumnPath();
String articleColumnPath = articleIdList.get(artId).getCategoryPath();
// 文章的栏目模型编号
int columnContentModelId = articleIdList.get(artId).getColumnContentModelId();
String columnContentModelId = articleIdList.get(artId).getMdiyModelId();
Map<String, Object> parserParams = new HashMap<String, Object>();
parserParams.put(ParserUtil.COLUMN, articleIdList.get(artId));
// 判断当前栏目是否有自定义模型
if (columnContentModelId > 0) {
if ( StringUtils.isNotBlank(columnContentModelId)) {
// 通过当前栏目的模型编号获取,自定义模型表名
if (contentModelMap.containsKey(columnContentModelId)) {
parserParams.put(ParserUtil.TABLE_NAME, contentModel.getCmTableName());
} else {
// 通过栏目模型编号获取自定义模型实体
contentModel = (ContentModelEntity) SpringUtil.getBean(IContentModelBiz.class)
.getEntity(columnContentModelId);
.getEntity(Integer.parseInt(columnContentModelId));
// 将自定义模型编号设置为key值
contentModelMap.put(columnContentModelId, contentModel.getCmTableName());
parserParams.put(ParserUtil.TABLE_NAME, contentModel.getCmTableName());
......@@ -272,7 +278,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
}
// 第一篇文章没有上一篇
if (artId > 0) {
ColumnArticleIdBean preCaBean = articleIdList.get(artId - 1);
ContentBean preCaBean = articleIdList.get(artId - 1);
//判断当前文档是否与上一页文章在同一栏目下,并且不能使用父栏目字符串,因为父栏目中没有所属栏目编号
if(articleColumnPath.contains(preCaBean.getCategoryId()+"")){
page.setPreId(preCaBean.getArticleId());
......@@ -280,7 +286,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
}
// 最后一篇文章没有下一篇
if (artId + 1 < articleIdList.size()) {
ColumnArticleIdBean nextCaBean = articleIdList.get(artId + 1);
ContentBean nextCaBean = articleIdList.get(artId + 1);
//判断当前文档是否与下一页文章在同一栏目下并且不能使用父栏目字符串,因为父栏目中没有所属栏目编号
if(articleColumnPath.contains(nextCaBean.getCategoryId()+"")){
page.setNextId(nextCaBean.getArticleId());
......@@ -290,7 +296,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
}
try {
//根据模板路径,参数生成
content = CmsParserUtil.generate(column.getColumnUrl(), map, isMobileDevice(req));
content = CmsParserUtil.generate(column.getCategoryUrl(), map, isMobileDevice(req));
} catch (TemplateNotFoundException e) {
e.printStackTrace();
} catch (MalformedTemplateNameException e) {
......@@ -302,4 +308,296 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
}
this.outString(resp, content);
}
// /**
// * 实现前端页面的文章搜索
// *
// * @param request
// * 搜索id
// * @param response
// */
// @RequestMapping(value = "search")
// @ResponseBody
// public void search(HttpServletRequest request, HttpServletResponse response) {
//
// Map<String, Object> map = new HashMap<>();
// // 读取请求字段
// Map<String, String[]> field = request.getParameterMap();
// Map<String, String> basicField = getMapByProperties(net.mingsoft.mdiy.constant.Const.BASIC_FIELD);
// // 文章字段集合
// Map<String, Object> articleFieldName = new HashMap<String, Object>();
// // 自定义字段集合
// Map<String, String> diyFieldName = new HashMap<String, String>();
// CategoryEntity column = null; // 当前栏目
// ModelEntity contentModel = null; // 栏目对应模型
// List<DiyModelMap> fieldValueList = new ArrayList<DiyModelMap>(); // 栏目对应字段的值
// 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<String,String> 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<String, String[]> 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<String, Object> 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
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
private Map<String, List> searchMap(Map<String, Object> articleField, Map<String, String> diyFieldName,
List fields) {
Map<String, List> map = new HashMap<String, List>();
// 遍历文章中的字段
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);
}
// 遍历字段自定义字段
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);
}
} else {
// 是否是数字类型,true:不是2
list.add(true);
list.add(false);
// 字段值 1
listValue.add(fieldValue);
}
list.add(listValue);
map.put(key, list);
}
}
return map;
}
private Map get(String key, List<Map> fields) {
for (Map field : fields) {
if(key.equals(field.get("key"))){
return field;
}
}
return null;
}
/**
* 存储自定义模型字段和接口参数
* @author 铭飞开源团队
* @date 2019年3月5日
*/
public class DiyModelMap {
String key;
Object value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
}
\ No newline at end of file
/**
The MIT License (MIT) * Copyright (c) 2016 铭飞科技(mingsoft.net)
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package net.mingsoft.cms.action.web;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.PageUtil;
import freemarker.core.ParseException;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.TemplateNotFoundException;
import net.mingsoft.base.constant.Const;
import net.mingsoft.basic.action.BaseAction;
import net.mingsoft.basic.biz.ICategoryBiz;
import net.mingsoft.basic.biz.IColumnBiz;
import net.mingsoft.basic.biz.IModelBiz;
import net.mingsoft.basic.entity.ColumnEntity;
import net.mingsoft.basic.util.BasicUtil;
import net.mingsoft.basic.util.StringUtil;
import net.mingsoft.cms.biz.IArticleBiz;
import net.mingsoft.cms.util.CmsParserUtil;
import net.mingsoft.mdiy.bean.PageBean;
import net.mingsoft.mdiy.biz.IContentModelBiz;
import net.mingsoft.mdiy.biz.IContentModelFieldBiz;
import net.mingsoft.mdiy.biz.ISearchBiz;
import net.mingsoft.mdiy.entity.ContentModelEntity;
import net.mingsoft.mdiy.entity.ContentModelFieldEntity;
import net.mingsoft.mdiy.entity.SearchEntity;
import net.mingsoft.mdiy.parser.TagParser;
import net.mingsoft.mdiy.util.ParserUtil;
/**
* 根据搜索结果动态解析模版内容
* @author 铭飞开源团队-Administrator
* @date 2018年12月18日
*/
@Controller(value = "webSearchAction")
@RequestMapping("/cms")
public class SearchAction extends BaseAction {
/**
* 搜索标签;
*/
public static final String SEARCH = "search";
/**
* 搜索的标题;
*/
public static final String BASIC_TITLE = "basic_title";
/**
* 注入文章业务层
*/
@Autowired
private IArticleBiz articleBiz;
/**
* 注入搜索业务层
*/
@Autowired
private ISearchBiz searchBiz;
/**
* 注入栏目业务层
*/
@Autowired
private IColumnBiz columnBiz;
/**
* 内容模型业务层
*/
@Autowired
private IContentModelBiz contentModelBiz;
/**
* 内容字段业务层
*/
@Autowired
private IContentModelFieldBiz fieldBiz;
/**
* 注入分类业务层
*/
@Autowired
private ICategoryBiz categoryBiz;
/**
* 模块管理biz
*/
@Autowired
private IModelBiz modelBiz;
/**
* 实现前端页面的文章搜索
*
* @param request
* @param searchId
* 搜索id
* @param response
*/
@RequestMapping(value = "/{searchId}/search")
@ResponseBody
public void search(HttpServletRequest request, @PathVariable int searchId, HttpServletResponse response) {
SearchEntity _search = new SearchEntity();
_search.setAppId(BasicUtil.getAppId());
_search.setSearchId(searchId);
// 获取对应搜索模型
SearchEntity search = (SearchEntity) searchBiz.getEntity(_search);
//判断当前搜索是否有模板文件
if (ObjectUtil.isNull(search)) {
this.outJson(response, false);
}
Map<String, Object> map = new HashMap<>();
// 读取请求字段
Map<String, String[]> field = request.getParameterMap();
Map<String, String> basicField = getMapByProperties(net.mingsoft.mdiy.constant.Const.BASIC_FIELD);
// 文章字段集合
Map<String, Object> articleFieldName = new HashMap<String, Object>();
// 自定义字段集合
Map<String, String> diyFieldName = new HashMap<String, String>();
ColumnEntity column = null; // 当前栏目
ContentModelEntity contentModel = null; // 栏目对应模型
List<ContentModelFieldEntity> fieldList = new ArrayList<ContentModelFieldEntity>(); // 栏目对应字段
List<DiyModelMap> fieldValueList = new ArrayList<DiyModelMap>(); // 栏目对应字段的值
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 = (ColumnEntity) columnBiz.getEntity(Integer.parseInt(typeId+""));
// 获取表单类型的id
if (column != null) {
contentModel = (ContentModelEntity) contentModelBiz.getEntity(column.getColumnContentModelId());
if (contentModel != null) {
fieldList = fieldBiz.queryListByCmid(contentModel.getCmId());
for (ContentModelFieldEntity cmField : fieldList) {
filedStr.add(cmField.getFieldFieldName());
}
map.put(ParserUtil.TABLE_NAME, contentModel.getCmTableName());
}
}
map.put(ParserUtil.COLUMN, column);
//设置栏目编号
// map.put(ParserUtil.TYPE_ID, typeId);
}
// 遍历取字段集合
if (field != null) {
for (Entry<String, String[]> 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 = this.searchMap(articleFieldName, diyFieldName, fieldList);
// 获取符合条件的文章总数
int count = articleBiz.getSearchCount(contentModel, whereMap, BasicUtil.getAppId(), categoryIds);
//设置分页类
PageBean page = new PageBean();
//读取模板的分页数量
int size = BasicUtil.getInt(ParserUtil.SIZE,10);
try {
size = TagParser.getPageSize(ParserUtil.read(search.getSearchTemplets(),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<String, Object> 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.getSearchTemplets(),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
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
private Map<String, List> searchMap(Map<String, Object> articleField, Map<String, String> diyFieldName,
List fields) {
Map<String, List> map = new HashMap<String, List>();
// 遍历文章中的字段
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);
}
// 遍历字段自定义字段
for (Iterator iter = diyFieldName.keySet().iterator(); iter.hasNext();) {
String key = iter.next().toString();
String fieldValue = diyFieldName.get(key);
// 获取字段实体
ContentModelFieldEntity field = this.get(key, fields);
if (field != null) {
List list = new ArrayList();
// 是否为自定义字段0
list.add(0, true);
List listValue = new ArrayList();
// 字段的值
if (field.getFieldType() == IContentModelFieldBiz.INT || field.getFieldType() == IContentModelFieldBiz.FLOAT) {
// 判断是否为区间查询
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);
}
} else {
// 是否是数字类型,true:不是2
list.add(true);
list.add(false);
// 字段值 1
listValue.add(fieldValue);
}
list.add(listValue);
map.put(key, list);
}
}
return map;
}
/**
* 根据字段名称获取字段类型
*
* @param columnName
* 字段名称
* @return 字段实体
*/
private ContentModelFieldEntity get(String columnName, List<ContentModelFieldEntity> fields) {
if (fields == null) {
return null;
}
for (ContentModelFieldEntity field : fields) {
if (field.getFieldFieldName().equals(columnName)) {
return field;
}
}
return null;
}
/**
* 存储自定义模型字段和接口参数
* @author 铭飞开源团队
* @date 2019年3月5日
*/
public class DiyModelMap {
String key;
Object value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
}
package net.mingsoft.cms.aop;
import net.mingsoft.basic.aop.BaseAop;
import net.mingsoft.basic.util.BasicUtil;
import net.mingsoft.cms.biz.IContentBiz;
import net.mingsoft.cms.biz.IHistoryLogBiz;
import net.mingsoft.cms.entity.ContentEntity;
import net.mingsoft.cms.entity.HistoryLogEntity;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @author 铭飞开源团队
* @date 2019/12/23
*/
@Component
@Aspect
public class CotentAop extends BaseAop {
/**
* 注入文章业务
*/
@Autowired
private IContentBiz contentBiz;
/**
* 注入浏览记录业务
*/
@Autowired
private IHistoryLogBiz historyLogBiz;
/**
* 文章浏览记录,
* 如果该文章该ip已经记录过,则不在重复记录
* @param pjp
* @return
* @throws Throwable
*/
@Around("execution(* net.mingsoft.cms.action.web.ContentAction.get(..))")
public Object get(ProceedingJoinPoint pjp) throws Throwable{
// 获取方法参数
ContentEntity content = getType(pjp, ContentEntity.class);
// 如果id为空则直接发行
if(content.getId()==null) {
return pjp.proceed();
}
content = (ContentEntity)contentBiz.getEntity(Integer.parseInt(content.getId()));
//如果文章不存在则直接发行
if(content == null){
return pjp.proceed();
}
//查询判断该ip是否已经有浏览记录了
HistoryLogEntity historyLog = new HistoryLogEntity();
historyLog.setContentId(content.getId());
historyLog.setHlIp(BasicUtil.getIp());
historyLog.setHlIsMobile(BasicUtil.isMobileDevice());
HistoryLogEntity _historyLog = (HistoryLogEntity)historyLogBiz.getEntity(historyLog);
//如果该ip该文章没有浏览记录则保存浏览记录
//并且更新点击数
if(_historyLog == null || StringUtils.isBlank(_historyLog.getId())){
historyLog.setCreateDate(new Date());
historyLogBiz.saveEntity(historyLog);
//更新点击数
ContentEntity updateContent = new ContentEntity();
updateContent.setId(content.getId());
if(content.getContentHit() == null){
updateContent.setContentHit(1);
}else{
updateContent.setContentHit(content.getContentHit()+1);
}
contentBiz.updateEntity(updateContent);
}
return pjp.proceed();
}
}
......@@ -19,16 +19,17 @@ The MIT License (MIT) * Copyright (c) 2016 铭飞科技(mingsoft.net)
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package net.mingsoft.cms.bean;
import net.mingsoft.basic.entity.ColumnEntity;
package net.mingsoft.cms.bean;
import net.mingsoft.basic.entity.ColumnEntity;
import net.mingsoft.cms.entity.CategoryEntity;
/**
* 文章解析生成
* @author 铭飞开源团队
* @date 2018年12月13日
*/
public class ColumnArticleIdBean extends ColumnEntity{
*/
public class ColumnArticleIdBean extends CategoryEntity {
/**
* 文章编号
*/
......
package net.mingsoft.cms.bean;
import net.mingsoft.cms.entity.CategoryEntity;
/**
* 文章实体
* @author 铭飞开发团队
* 创建日期:2019-11-28 15:12:32<br/>
* 历史修订:<br/>
*/
public class ContentBean extends CategoryEntity {
/**
* 文章编号
*/
private int articleId;
public int getArticleId() {
return articleId;
}
public void setArticleId(int articleId) {
this.articleId = articleId;
}
}
\ No newline at end of file
This diff is collapsed.
package net.mingsoft.cms.biz;
import net.mingsoft.base.biz.IBaseBiz;
import net.mingsoft.cms.entity.CategoryEntity;
import java.util.List;
/**
* 分类业务
* @author 铭飞开发团队
* 创建日期:2019-11-28 15:12:32<br/>
* 历史修订:<br/>
*/
public interface ICategoryBiz extends IBaseBiz {
/**
* 查询当前分类下的所有子分类
* @param category
* @return
*/
List<CategoryEntity> queryChilds(CategoryEntity category);
void saveEntity(CategoryEntity entity);
void updateEntity(CategoryEntity entity);
void delete(int categoryId);
}
\ No newline at end of file
package net.mingsoft.cms.biz;
import net.mingsoft.base.biz.IBaseBiz;
import net.mingsoft.cms.bean.ContentBean;
import net.mingsoft.mdiy.entity.ModelEntity;
import java.util.List;
import java.util.Map;
/**
* 文章业务
* @author 铭飞开发团队
* 创建日期:2019-11-28 15:12:32<br/>
* 历史修订:<br/>
*/
public interface IContentBiz extends IBaseBiz {
List<ContentBean> queryIdsByCategoryIdForParser(String categoryId, String beginTime, String endTime);
List<ContentBean> queryIdsByCategoryIdForParser(String categoryId, String beginTime, String endTime, String orderBy, String order);
int getSearchCount(ModelEntity contentModel, Map whereMap, int appId, String categoryIds);
}
\ No newline at end of file
package net.mingsoft.cms.biz;
import net.mingsoft.base.biz.IBaseBiz;
/**
* 文章浏览记录业务
* @author 铭飞开发团队
* 创建日期:2019-12-23 9:24:03<br/>
* 历史修订:<br/>
*/
public interface IHistoryLogBiz extends IBaseBiz {
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment