Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
MCMS
Commits
ac217e7c
Commit
ac217e7c
authored
Dec 03, 2019
by
sgjj
Browse files
标签升级
parent
b03361cd
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
src/main/java/net/mingsoft/cms/action/GeneraterAction.java
View file @
ac217e7c
...
...
@@ -31,7 +31,9 @@ import javax.servlet.http.HttpServletResponse;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.bean.copier.CopyOptions
;
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
org.apache.commons.lang3.StringUtils
;
import
org.apache.shiro.authz.annotation.RequiresPermissions
;
...
...
@@ -48,8 +50,6 @@ import net.mingsoft.basic.action.BaseAction;
import
net.mingsoft.basic.biz.IModelBiz
;
import
net.mingsoft.basic.entity.AppEntity
;
import
net.mingsoft.cms.bean.ColumnArticleIdBean
;
import
net.mingsoft.cms.biz.IArticleBiz
;
import
net.mingsoft.cms.constant.ModelCode
;
import
net.mingsoft.cms.util.CmsParserUtil
;
import
net.mingsoft.mdiy.biz.IContentModelBiz
;
import
net.mingsoft.mdiy.biz.IContentModelFieldBiz
;
...
...
@@ -76,7 +76,7 @@ public class GeneraterAction extends BaseAction {
* 文章管理业务层
*/
@Autowired
private
I
ArticleBiz
article
Biz
;
private
I
ContentBiz
content
Biz
;
/**
* 栏目管理业务层
...
...
@@ -99,11 +99,6 @@ public class GeneraterAction extends BaseAction {
@Autowired
protected
IContentModelFieldBiz
fieldBiz
;
/**
* 自定义模型业务层
*/
@Autowired
protected
IContentModelBiz
contentBiz
;
/**
* 更新主页
...
...
@@ -151,7 +146,7 @@ public class GeneraterAction extends BaseAction {
*
* @param request
* @param response
* @param
column
Id
* @param
Category
Id
*/
@RequestMapping
(
"/{CategoryId}/genernateColumn"
)
@RequiresPermissions
(
"cms:generate:column"
)
...
...
@@ -172,7 +167,7 @@ public class GeneraterAction extends BaseAction {
categoryEntity
.
setAppId
(
app
.
getAppId
());
columns
=
categoryBiz
.
query
(
categoryEntity
);
}
List
<
Co
lumnArticleId
Bean
>
articleIdList
=
null
;
List
<
Co
ntent
Bean
>
articleIdList
=
null
;
try
{
// 1、设置模板文件夹路径
// 获取栏目列表模版
...
...
@@ -181,7 +176,7 @@ public class GeneraterAction extends BaseAction {
if
(!
FileUtil
.
exist
(
ParserUtil
.
buildTempletPath
(
column
.
getCategoryUrl
())))
{
continue
;
}
articleIdList
=
article
Biz
.
queryIdsByCategoryIdForParser
(
Integer
.
parseInt
(
column
.
get
Category
Id
()
)
,
null
,
null
);
articleIdList
=
content
Biz
.
queryIdsByCategoryIdForParser
(
column
.
getId
(),
null
,
null
);
// 判断列表类型
switch
(
column
.
getCategoryType
())
{
//TODO 暂时先用字符串代替
...
...
@@ -190,7 +185,7 @@ public class GeneraterAction extends BaseAction {
break
;
case
"2"
:
// 单页
if
(
articleIdList
.
size
()==
0
){
Co
lumnArticleId
Bean
columnArticleIdBean
=
new
Co
lumnArticleId
Bean
();
Co
ntent
Bean
columnArticleIdBean
=
new
Co
ntent
Bean
();
CopyOptions
copyOptions
=
CopyOptions
.
create
();
copyOptions
.
setIgnoreError
(
true
);
BeanUtil
.
copyProperties
(
column
,
columnArticleIdBean
,
copyOptions
);
...
...
@@ -217,13 +212,13 @@ public class GeneraterAction extends BaseAction {
@RequestMapping
(
"/{columnId}/generateArticle"
)
@RequiresPermissions
(
"cms:generate:article"
)
@ResponseBody
public
void
generateArticle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
@PathVariable
in
t
columnId
)
{
public
void
generateArticle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
@PathVariable
Str
in
g
columnId
)
{
String
dateTime
=
request
.
getParameter
(
"dateTime"
);
// 网站风格物理路径
List
<
Co
lumnArticleId
Bean
>
articleIdList
=
null
;
List
<
Co
ntent
Bean
>
articleIdList
=
null
;
try
{
// 查出所有文章(根据选择栏目)包括子栏目
articleIdList
=
article
Biz
.
queryIdsByCategoryIdForParser
(
columnId
,
dateTime
,
null
);
articleIdList
=
content
Biz
.
queryIdsByCategoryIdForParser
(
columnId
,
dateTime
,
null
);
// 有符合条件的新闻就更新
if
(
articleIdList
.
size
()
>
0
)
{
CmsParserUtil
.
generateBasic
(
articleIdList
);
...
...
src/main/java/net/mingsoft/cms/action/web/MCmsAction.java
View file @
ac217e7c
...
...
@@ -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
I
ArticleBiz
article
Biz
;
private
I
ContentBiz
content
Biz
;
/**
* 栏目业务层
*/
@Autowired
private
IC
olumnBiz
column
Biz
;
private
IC
ategoryBiz
category
Biz
;
/**
* 搜索标签;
*/
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
<
Co
lumnArticleId
Bean
>
columnArticles
=
article
Biz
.
queryIdsByCategoryIdForParser
(
typeId
,
null
,
null
);
List
<
Co
ntent
Bean
>
columnArticles
=
content
Biz
.
queryIdsByCategoryIdForParser
(
String
.
valueOf
(
typeId
)
,
null
,
null
);
//判断栏目下是否有文章
if
(
columnArticles
.
size
()==
0
){
this
.
outJson
(
resp
,
false
);
...
...
@@ -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
)
{
//参数文章编号
Article
Entity
article
=
(
Article
Entity
)
article
Biz
.
getEntity
(
BasicUtil
.
getInt
(
ParserUtil
.
ID
));
Content
Entity
article
=
(
Content
Entity
)
content
Biz
.
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
();
//根据文章编号查询栏目详情模版
C
olumn
Entity
column
=
(
C
olumn
Entity
)
c
olumn
Biz
.
getEntity
(
article
.
get
Basic
CategoryId
());
C
ategory
Entity
column
=
(
C
ategory
Entity
)
c
ategory
Biz
.
getEntity
(
Integer
.
parseInt
(
article
.
get
Content
CategoryId
())
)
;
//解析后的内容
String
content
=
""
;
Map
map
=
BasicUtil
.
assemblyRequestMap
();
...
...
@@ -240,13 +246,13 @@ 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
.
get
ArticleID
());
List
<
Co
lumnArticleId
Bean
>
articleIdList
=
article
Biz
.
queryIdsByCategoryIdForParser
(
column
.
getCategory
Category
Id
(),
null
,
null
,
orderby
,
order
);
map
.
put
(
ParserUtil
.
ID
,
article
.
get
Id
());
List
<
Co
ntent
Bean
>
articleIdList
=
content
Biz
.
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
.
get
ArticleID
(
)){
if
(
articleIdList
.
get
(
artId
).
getArticleId
()
!=
Integer
.
parseInt
(
article
.
get
Id
()
)){
artId
++;
continue
;
}
...
...
@@ -272,7 +278,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
}
// 第一篇文章没有上一篇
if
(
artId
>
0
)
{
Co
lumnArticleId
Bean
preCaBean
=
articleIdList
.
get
(
artId
-
1
);
Co
ntent
Bean
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
())
{
Co
lumnArticleId
Bean
nextCaBean
=
articleIdList
.
get
(
artId
+
1
);
Co
ntent
Bean
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
.
getC
olumn
Url
(),
map
,
isMobileDevice
(
req
));
content
=
CmsParserUtil
.
generate
(
column
.
getC
ategoryList
Url
(),
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
(
ParserUtil
.
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
(
ParserUtil
.
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
src/main/java/net/mingsoft/cms/action/web/SearchAction.java
deleted
100644 → 0
View file @
b03361cd
/**
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
;
}
}
}
src/main/java/net/mingsoft/cms/bean/ContentBean.java
0 → 100644
View file @
ac217e7c
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
src/main/java/net/mingsoft/cms/biz/IContentBiz.java
View file @
ac217e7c
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
;
/**
...
...
@@ -11,4 +16,9 @@ import net.mingsoft.base.biz.IBaseBiz;
*/
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
src/main/java/net/mingsoft/cms/biz/impl/CategoryBizImpl.java
View file @
ac217e7c
...
...
@@ -21,6 +21,7 @@ The MIT License (MIT) * Copyright (c) 2019 铭飞科技
package
net.mingsoft.cms.biz.impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
net.mingsoft.base.entity.BaseEntity
;
import
net.mingsoft.cms.entity.CategoryEntity
;
import
org.apache.commons.lang3.StringUtils
;
...
...
@@ -28,6 +29,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
net.mingsoft.base.biz.impl.BaseBizImpl
;
import
net.mingsoft.base.dao.IBaseDao
;
import
java.io.File
;
import
java.util.*
;
import
net.mingsoft.cms.biz.ICategoryBiz
;
...
...
@@ -69,24 +72,38 @@ public class CategoryBizImpl extends BaseBizImpl implements ICategoryBiz {
if
(
StringUtils
.
isNotEmpty
(
categoryEntity
.
getCategoryId
())&&
Integer
.
parseInt
(
categoryEntity
.
getCategoryId
())>
0
)
{
CategoryEntity
category
=
(
CategoryEntity
)
categoryDao
.
getEntity
(
Integer
.
parseInt
(
categoryEntity
.
getCategoryId
()));
if
(
StringUtils
.
isEmpty
(
category
.
getCategoryParentId
()))
{
categoryEntity
.
setCategoryParentId
(
category
Entity
.
getCategory
Id
());
categoryEntity
.
setCategoryParentId
(
category
.
get
Id
());
}
else
{
categoryEntity
.
setCategoryParentId
(
category
.
getCategoryParentId
()+
","
+
category
Entity
.
getCategoryParen
tId
());
categoryEntity
.
setCategoryParentId
(
category
.
getCategoryParentId
()+
","
+
category
.
ge
tId
());
}
}
else
{
categoryEntity
.
setCategoryParentId
(
null
);
}
String
path
=
ObjectUtil
.
isNotNull
(
categoryEntity
.
getCategoryParentId
())?
categoryEntity
.
getCategoryParentId
():
""
;
categoryEntity
.
setCategoryPath
(
"/"
+
path
.
replaceAll
(
","
,
"/"
)+
"/"
+
categoryEntity
.
getId
());
}
private
void
setChildParentId
(
CategoryEntity
categoryEntity
)
{
CategoryEntity
category
=
new
CategoryEntity
();
category
.
setCategoryId
(
categoryEntity
.
getId
());
List
<
CategoryEntity
>
list
=
categoryDao
.
query
(
category
);
list
.
forEach
(
x
->{
if
(
StringUtils
.
isEmpty
(
categoryEntity
.
getCategoryParentId
()))
{
x
.
setCategoryParentId
(
categoryEntity
.
getId
());
}
else
{
x
.
setCategoryParentId
(
categoryEntity
.
getCategoryParentId
()+
","
+
categoryEntity
.
getId
());
}
String
path
=
ObjectUtil
.
isNotNull
(
x
.
getCategoryParentId
())?
x
.
getCategoryParentId
():
""
;
x
.
setCategoryPath
(
"/"
+
path
.
replaceAll
(
","
,
"/"
)+
"/"
+
x
.
getId
());
super
.
updateEntity
(
x
);
setChildParentId
(
x
);
});
}
@Override
public
void
updateEntity
(
CategoryEntity
entity
)
{
List
<
CategoryEntity
>
categoryEntities
=
queryChilds
(
entity
);
setParentId
(
entity
);
super
.
updateEntity
(
entity
);
categoryEntities
.
forEach
(
x
->{
setParentId
(
x
);
if
(!
x
.
getId
().
equals
(
entity
.
getId
())){
super
.
updateEntity
(
x
);
}
});
setChildParentId
(
entity
);
}
}
\ No newline at end of file
src/main/java/net/mingsoft/cms/biz/impl/ContentBizImpl.java
View file @
ac217e7c
...
...
@@ -21,6 +21,9 @@ The MIT License (MIT) * Copyright (c) 2019 铭飞科技
package
net.mingsoft.cms.biz.impl
;
import
net.mingsoft.basic.util.BasicUtil
;
import
net.mingsoft.cms.bean.ContentBean
;
import
net.mingsoft.mdiy.entity.ModelEntity
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
net.mingsoft.base.biz.impl.BaseBizImpl
;
...
...
@@ -48,5 +51,22 @@ public class ContentBizImpl extends BaseBizImpl implements IContentBiz {
protected
IBaseDao
getDao
()
{
// TODO Auto-generated method stub
return
contentDao
;
}
}
@Override
public
List
<
ContentBean
>
queryIdsByCategoryIdForParser
(
String
categoryId
,
String
beginTime
,
String
endTime
)
{
return
this
.
contentDao
.
queryIdsByCategoryIdForParser
(
categoryId
,
BasicUtil
.
getAppId
(),
beginTime
,
endTime
,
null
,
null
);
}
@Override
public
List
<
ContentBean
>
queryIdsByCategoryIdForParser
(
String
categoryId
,
String
beginTime
,
String
endTime
,
String
orderBy
,
String
order
)
{
return
this
.
contentDao
.
queryIdsByCategoryIdForParser
(
categoryId
,
BasicUtil
.
getAppId
(),
beginTime
,
endTime
,
orderBy
,
order
);
}
@Override
public
int
getSearchCount
(
ModelEntity
contentModel
,
Map
whereMap
,
int
appId
,
String
categoryIds
)
{
if
(
contentModel
!=
null
)
{
return
contentDao
.
getSearchCount
(
contentModel
.
getModelTableName
(),
whereMap
,
appId
,
categoryIds
);
}
return
contentDao
.
getSearchCount
(
null
,
whereMap
,
appId
,
categoryIds
);
}
}
\ No newline at end of file
src/main/java/net/mingsoft/cms/dao/ICategoryDao.xml
View file @
ac217e7c
...
...
@@ -91,6 +91,7 @@
<set>
<if
test=
"categoryTitle != null and categoryTitle != ''"
>
category_title=#{categoryTitle},
</if>
category_id=#{categoryId},
category_parent_id=#{categoryParentId},
<if
test=
"categoryType != null and categoryType != ''"
>
category_type=#{categoryType},
</if>
<if
test=
"categorySort != null"
>
category_sort=#{categorySort},
</if>
<if
test=
"categoryListUrl != null and categoryListUrl != ''"
>
category_list_url=#{categoryListUrl},
</if>
...
...
@@ -106,7 +107,6 @@
<if
test=
"dictId != null"
>
dict_id=#{dictId},
</if>
<if
test=
"categoryFlag != null and categoryFlag != ''"
>
category_flag=#{categoryFlag},
</if>
<if
test=
"categoryPath != null and categoryPath != ''"
>
category_path=#{categoryPath},
</if>
<if
test=
"categoryParentId != null and categoryParentId != ''"
>
category_parent_id=#{categoryParentId},
</if>
<if
test=
"createBy > 0"
>
create_by=#{createBy},
</if>
<if
test=
"createDate != null"
>
create_date=#{createDate},
</if>
<if
test=
"updateBy > 0"
>
update_by=#{updateBy},
</if>
...
...
src/main/java/net/mingsoft/cms/dao/IContentDao.java
View file @
ac217e7c
...
...
@@ -2,7 +2,9 @@ package net.mingsoft.cms.dao;
import
net.mingsoft.base.dao.IBaseDao
;
import
java.util.*
;
import
net.mingsoft.cms.entity.ContentEntity
;
import
net.mingsoft.cms.bean.ContentBean
;
import
org.apache.ibatis.annotations.Param
;
/**
* 文章持久层
...
...
@@ -11,4 +13,27 @@ import net.mingsoft.cms.entity.ContentEntity;
* 历史修订:<br/>
*/
public
interface
IContentDao
extends
IBaseDao
{
/**
* 查询文章编号集合
* @param categoryId 栏目编号
* @param appId 站点编号
* @param beginTime 开始时间
* @param endTime 结束时间
* @return
*/
public
List
<
ContentBean
>
queryIdsByCategoryIdForParser
(
@Param
(
"categoryId"
)
String
categoryId
,
@Param
(
"appId"
)
int
appId
,
@Param
(
"beginTime"
)
String
beginTime
,
@Param
(
"endTime"
)
String
endTime
,
@Param
(
"orderBy"
)
String
orderBy
,
@Param
(
"order"
)
String
order
);
/**
* 根据查询文章实体总数
*
* @param tableName
* :自定义生成的表名
* @param map
* key:字段名 value:List 字段的各种判断值 list[0]:是否为自定义字段 list[1]:是否为整形
* list[2]:是否是等值查询 list[3]:字段的值
* @return 文章实体总数
*/
int
getSearchCount
(
@Param
(
"tableName"
)
String
tableName
,
@Param
(
"map"
)
Map
<
String
,
List
>
map
,
@Param
(
"websiteId"
)
int
websiteId
,
@Param
(
"ids"
)
String
ids
);
}
\ No newline at end of file
src/main/java/net/mingsoft/cms/dao/IContentDao.xml
View file @
ac217e7c
...
...
@@ -26,6 +26,34 @@
<result
column=
"del"
property=
"del"
/>
<!--删除标记 -->
</resultMap>
<resultMap
id=
"resultBean"
type=
"net.mingsoft.cms.bean.ContentBean"
>
<id
column=
"id"
property=
"id"
/>
<!--编号 -->
<id
column=
"article_Id"
property=
"articleId"
/>
<!--编号 -->
<result
column=
"category_title"
property=
"categoryTitle"
/>
<!--栏目管理名称 -->
<result
column=
"category_id"
property=
"categoryId"
/>
<!--所属栏目 -->
<result
column=
"category_type"
property=
"categoryType"
/>
<!--栏目管理属性 -->
<result
column=
"category_sort"
property=
"categorySort"
/>
<!--自定义顺序 -->
<result
column=
"category_list_url"
property=
"categoryListUrl"
/>
<!--列表模板 -->
<result
column=
"category_url"
property=
"categoryUrl"
/>
<!--内容模板 -->
<result
column=
"category_keyword"
property=
"categoryKeyword"
/>
<!--栏目管理关键字 -->
<result
column=
"category_descrip"
property=
"categoryDescrip"
/>
<!--栏目管理描述 -->
<result
column=
"category_img"
property=
"categoryImg"
/>
<!--缩略图 -->
<result
column=
"category_diy_url"
property=
"categoryDiyUrl"
/>
<!--自定义链接 -->
<result
column=
"mdiy_model_id"
property=
"mdiyModelId"
/>
<!--栏目管理的内容模型id -->
<result
column=
"category_datetime"
property=
"categoryDatetime"
/>
<!--类别发布时间 -->
<result
column=
"category_manager_id"
property=
"categoryManagerId"
/>
<!--发布用户id -->
<result
column=
"app_id"
property=
"appId"
/>
<!--应用编号 -->
<result
column=
"dict_id"
property=
"dictId"
/>
<!--字典对应编号 -->
<result
column=
"category_flag"
property=
"categoryFlag"
/>
<!--栏目属性 -->
<result
column=
"category_path"
property=
"categoryPath"
/>
<!--栏目路径 -->
<result
column=
"category_parent_id"
property=
"categoryParentId"
/>
<!--父类型编号 -->
<result
column=
"create_by"
property=
"createBy"
/>
<!--创建人 -->
<result
column=
"create_date"
property=
"createDate"
/>
<!--创建时间 -->
<result
column=
"update_by"
property=
"updateBy"
/>
<!--修改人 -->
<result
column=
"update_date"
property=
"updateDate"
/>
<!--修改时间 -->
<result
column=
"del"
property=
"del"
/>
<!--删除标记 -->
</resultMap>
<!--保存-->
<insert
id=
"saveEntity"
useGeneratedKeys=
"true"
keyProperty=
"id"
parameterType=
"net.mingsoft.cms.entity.ContentEntity"
>
...
...
@@ -184,4 +212,113 @@
order by id desc
</select>
<sql
id=
"queryWhereCategoryId"
databaseId=
"mysql"
>
find_in_set('${categoryId}',CATEGORY_PARENT_ID)
</sql>
<sql
id=
"queryWhereCategoryId"
databaseId=
"oracle"
>
instr(','||'${categoryId}'||',', ','||CATEGORY_PARENT_ID||',')>0
</sql>
<sql
id=
"queryWhereCategoryId"
databaseId=
"sqlServer"
>
CHARINDEX(','+'${categoryId}'+',' , ','+CATEGORY_PARENT_ID +',')>0
</sql>
<!-- 根据站点编号、开始、结束时间和栏目编号查询文章编号集合 -->
<select
id=
"queryIdsByCategoryIdForParser"
resultMap=
"resultBean"
>
select
cms_content.id article_id,c.*
FROM cms_content
LEFT JOIN cms_category c ON content_category_id = c.id
where
<if
test=
"appId > 0"
>
cms_content.app_id = #{appId}
</if>
<!-- 查询子栏目数据 -->
<if
test=
"categoryId > 0"
>
and (content_category_id=#{categoryId} or content_category_id in
(select id FROM cms_category where
<include
refid=
"queryWhereCategoryId"
></include>
))
</if>
<if
test=
"beginTime!=null and beginTime!=''"
>
and content_updatetime
>
= #{beginTime}
</if>
<if
test=
"endTime!=null and endTime!=''"
>
and content_updatetime
>
= #{endTime}
</if>
<if
test=
"orderBy!=null and order!=null and orderBy!='' and order!=''"
>
ORDER BY `${orderBy}` ${order}
</if>
</select>
<select
id=
"getSearchCount"
resultType=
"int"
>
select count(*) from
cms_content a
left join cms_category c
ON a.content_category_id
= c.id
<if
test=
"tableName!=null and tableName!=''"
>
left join ${tableName} d on d.link_id=a.id
</if>
where a.app_id = #{websiteId}
<if
test=
"ids!=null and ids!=''"
>
and FIND_IN_SET(content_category_id,'${ids}')
</if>
<foreach
item=
"item"
index=
"key"
collection=
"map"
open=
""
separator=
""
close=
""
>
<if
test=
" item[0] == false"
>
and ${key}
</if>
<if
test=
"item[0]== true"
>
and d.${key}
</if>
<!-- 数字类型的查找 item[1]:字段是否为数字类型false:数字 -->
<if
test=
"item[1] == false"
>
<!--item[2]: 是采用等值还是区间查询。false:区间 itme[3][0]第一个值item[3][1]的二个值 -->
<if
test=
"item[2] == true"
>
=
<foreach
item=
"val"
index=
"index"
collection=
"item[3]"
>
#{val}
</foreach>
</if>
<if
test=
"item[2] == false"
>
between
<foreach
item=
"val"
index=
"index"
collection=
"item[3]"
separator=
"and"
>
#{val}
</foreach>
</if>
</if>
<!-- 字符型数据的查找 item[1]:字段是否为数字类型true:字符串 -->
<if
test=
"item[1] == true"
>
<!--item[2]: 是采用模糊查询。false:不采用模糊 -->
<if
test=
"item[2] == true"
>
<include
refid=
"queryLike"
></include>
</if>
<if
test=
"item[2] == false"
>
=
<foreach
item=
"val"
index=
"index"
collection=
"item[3]"
>
#{val}
</foreach>
</if>
</if>
</foreach>
</select>
<!-- 根据字段条件查找文章实体开始 -->
<sql
id=
"queryLike"
databaseId=
"mysql"
>
like CONCAT("%",
<foreach
item=
"val"
index=
"index"
collection=
"item[3]"
>
<if
test=
"index==0"
>
#{val}
</if>
</foreach>
,"%")
</sql>
<sql
id=
"queryLike"
databaseId=
"oracle"
>
like '%'||
<foreach
item=
"val"
index=
"index"
collection=
"item[3]"
>
<if
test=
"index==0"
>
#{val}
</if>
</foreach>
||'%'
</sql>
<sql
id=
"queryLike"
databaseId=
"sqlServer"
>
like '%'+
<foreach
item=
"val"
index=
"index"
collection=
"item[3]"
>
<if
test=
"index==0"
>
#{val}
</if>
</foreach>
+'%'
</sql>
</mapper>
\ No newline at end of file
src/main/java/net/mingsoft/cms/util/CmsParserUtil.java
View file @
ac217e7c
...
...
@@ -21,10 +21,12 @@ import net.mingsoft.basic.entity.ColumnEntity;
import
net.mingsoft.basic.util.BasicUtil
;
import
net.mingsoft.basic.util.SpringUtil
;
import
net.mingsoft.cms.bean.ColumnArticleIdBean
;
import
net.mingsoft.cms.bean.ContentBean
;
import
net.mingsoft.cms.constant.e.ColumnTypeEnum
;
import
net.mingsoft.cms.entity.CategoryEntity
;
import
net.mingsoft.mdiy.bean.PageBean
;
import
net.mingsoft.mdiy.biz.IContentModelBiz
;
import
net.mingsoft.mdiy.biz.IModelBiz
;
import
net.mingsoft.mdiy.biz.impl.ModelBizImpl
;
import
net.mingsoft.mdiy.entity.ContentModelEntity
;
import
net.mingsoft.mdiy.entity.ModelEntity
;
...
...
@@ -192,11 +194,11 @@ public class CmsParserUtil extends ParserUtil {
* @throws MalformedTemplateNameException
* @throws TemplateNotFoundException
*/
public
static
void
generateBasic
(
List
<
Co
lumnArticleId
Bean
>
articleIdList
)
public
static
void
generateBasic
(
List
<
Co
ntent
Bean
>
articleIdList
)
throws
TemplateNotFoundException
,
MalformedTemplateNameException
,
ParseException
,
IOException
{
Map
<
Object
,
Object
>
contentModelMap
=
new
HashMap
<
Object
,
Object
>();
Content
ModelEntity
contentModel
=
null
;
ModelEntity
contentModel
=
null
;
String
writePath
=
null
;
// 记录已经生成了文章编号
List
<
Integer
>
generateIds
=
new
ArrayList
<>();
...
...
@@ -237,29 +239,29 @@ public class CmsParserUtil extends ParserUtil {
if
(
StringUtils
.
isNotBlank
(
columnContentModelId
))
{
// 通过当前栏目的模型编号获取,自定义模型表名
if
(
contentModelMap
.
containsKey
(
columnContentModelId
))
{
parserParams
.
put
(
TABLE_NAME
,
contentModel
.
get
Cm
TableName
());
parserParams
.
put
(
TABLE_NAME
,
contentModel
.
get
Model
TableName
());
}
else
{
// 通过栏目模型编号获取自定义模型实体
contentModel
=
(
Content
ModelEntity
)
SpringUtil
.
getBean
(
I
Content
ModelBiz
.
class
)
contentModel
=
(
ModelEntity
)
SpringUtil
.
getBean
(
IModelBiz
.
class
)
.
getEntity
(
Integer
.
parseInt
(
columnContentModelId
));
// 将自定义模型编号设置为key值
contentModelMap
.
put
(
columnContentModelId
,
contentModel
.
get
Cm
TableName
());
parserParams
.
put
(
TABLE_NAME
,
contentModel
.
get
Cm
TableName
());
contentModelMap
.
put
(
columnContentModelId
,
contentModel
.
get
Model
TableName
());
parserParams
.
put
(
TABLE_NAME
,
contentModel
.
get
Model
TableName
());
}
}
parserParams
.
put
(
ID
,
articleId
);
// 第一篇文章没有上一篇
if
(
artId
>
0
)
{
Co
lumnArticleId
Bean
preCaBean
=
articleIdList
.
get
(
artId
-
1
);
Co
ntent
Bean
preCaBean
=
articleIdList
.
get
(
artId
-
1
);
//判断当前文档是否与上一页文章在同一栏目下,并且不能使用父栏目字符串,因为父栏目中没有所属栏目编号
if
(
articleColumnPath
.
contains
(
preCaBean
.
getCategoryId
()+
""
)){
if
(
articleColumnPath
.
contains
(
preCaBean
.
getCategoryId
()+
""
)){
page
.
setPreId
(
preCaBean
.
getArticleId
());
}
}
// 最后一篇文章没有下一篇
if
(
artId
+
1
<
articleIdList
.
size
())
{
Co
lumnArticleId
Bean
nextCaBean
=
articleIdList
.
get
(
artId
+
1
);
Co
ntent
Bean
nextCaBean
=
articleIdList
.
get
(
artId
+
1
);
//判断当前文档是否与下一页文章在同一栏目下并且不能使用父栏目字符串,因为父栏目中没有所属栏目编号
if
(
articleColumnPath
.
contains
(
nextCaBean
.
getCategoryId
()+
""
)){
page
.
setNextId
(
nextCaBean
.
getArticleId
());
...
...
src/main/webapp/static/plugins/tree-select/tree.js
View file @
ac217e7c
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment