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
eebc3781
Commit
eebc3781
authored
Sep 09, 2022
by
zhouyk
Browse files
5.2.9 预发布版本
parent
38816bf6
Changes
18
Hide whitespace changes
Inline
Side-by-side
README.md
View file @
eebc3781
...
@@ -143,6 +143,7 @@ git clone https://gitee.com/mingSoft/MCMS.git<br/>
...
@@ -143,6 +143,7 @@ git clone https://gitee.com/mingSoft/MCMS.git<br/>
# 文档
# 文档
*
使用手册 http://doc.mingsoft.net/mcms/
*
使用手册 http://doc.mingsoft.net/mcms/
*
插件手册 http://doc.mingsoft.net/plugs-cms/
# 关于版本说明 [更多版本查看](https://www.mingsoft.net/html/default/cms/banben/index.html)
# 关于版本说明 [更多版本查看](https://www.mingsoft.net/html/default/cms/banben/index.html)
1.
开源版本永久免费发布源代码,开发者、企业可以终身免费使用,每个月团队会收集开源系统的问题并在每月的28号进行更新;
1.
开源版本永久免费发布源代码,开发者、企业可以终身免费使用,每个月团队会收集开源系统的问题并在每月的28号进行更新;
...
...
pom.xml
View file @
eebc3781
...
@@ -10,14 +10,14 @@
...
@@ -10,14 +10,14 @@
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
net.mingsoft
</groupId>
<groupId>
net.mingsoft
</groupId>
<artifactId>
ms-mcms
</artifactId>
<artifactId>
ms-mcms
</artifactId>
<version>
5.2.
8
</version>
<version>
5.2.
9
</version>
<name>
${project.groupId}:${project.artifactId}
</name>
<name>
${project.groupId}:${project.artifactId}
</name>
<!-- 打包war包,注意不启用(resources》resource》excludes的配置并注释掉maven-assembly-plugin 插件配置 -->
<!-- 打包war包,注意不启用(resources》resource》excludes的配置并注释掉maven-assembly-plugin 插件配置 -->
<!--<packaging>war</packaging>-->
<!--<packaging>war</packaging>-->
<properties>
<properties>
<java.version>
1.8
</java.version>
<java.version>
1.8
</java.version>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<log4j.version>
2.1
7
.0
</log4j.version>
<log4j.version>
2.1
8
.0
</log4j.version>
</properties>
</properties>
<repositories>
<repositories>
<repository>
<repository>
...
@@ -44,26 +44,30 @@
...
@@ -44,26 +44,30 @@
<dependency>
<dependency>
<groupId>
net.mingsoft
</groupId>
<groupId>
net.mingsoft
</groupId>
<artifactId>
ms-base
</artifactId>
<artifactId>
ms-base
</artifactId>
<version>
2.1.1
3
</version>
<version>
2.1.1
4
</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
net.mingsoft
</groupId>
<groupId>
net.mingsoft
</groupId>
<artifactId>
ms-basic
</artifactId>
<artifactId>
ms-basic
</artifactId>
<version>
2.1.1
3.
4
</version>
<version>
2.1.14
</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
net.mingsoft
</groupId>
<groupId>
net.mingsoft
</groupId>
<artifactId>
ms-mdiy
</artifactId>
<artifactId>
ms-mdiy
</artifactId>
<version>
2.1.1
3.1
</version>
<version>
2.1.1
4
</version>
</dependency>
</dependency>
<!--store入口依赖(源码不开发),如果不需要MStore可以直接去掉依赖-->
<!--store入口依赖(源码不开发),如果不需要MStore可以直接去掉依赖-->
<dependency>
<dependency>
<groupId>
net.mingsoft
</groupId>
<groupId>
net.mingsoft
</groupId>
<artifactId>
store-client
</artifactId>
<artifactId>
store-client
</artifactId>
<version>
2.1.13
</version>
<version>
2.1.14
</version>
</dependency>
<dependency>
<groupId>
com.github.oshi
</groupId>
<artifactId>
oshi-core
</artifactId>
<version>
6.2.2
</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
org.apache.logging.log4j
</groupId>
<groupId>
org.apache.logging.log4j
</groupId>
<artifactId>
log4j-core
</artifactId>
<artifactId>
log4j-core
</artifactId>
...
...
src/main/java/net/mingsoft/MSApplication.java
View file @
eebc3781
...
@@ -32,7 +32,6 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
...
@@ -32,7 +32,6 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
import
java.util.Locale
;
import
java.util.Locale
;
@SpringBootApplication
(
scanBasePackages
=
{
"net.mingsoft"
})
@SpringBootApplication
(
scanBasePackages
=
{
"net.mingsoft"
})
@MapperScan
(
basePackages
={
"**.dao"
,
"com.baomidou.**.mapper"
})
@MapperScan
(
basePackages
={
"**.dao"
,
"com.baomidou.**.mapper"
})
@ServletComponentScan
(
basePackages
=
{
"net.mingsoft"
})
@ServletComponentScan
(
basePackages
=
{
"net.mingsoft"
})
...
...
src/main/java/net/mingsoft/cms/action/CategoryAction.java
View file @
eebc3781
...
@@ -151,6 +151,10 @@ public class CategoryAction extends BaseAction {
...
@@ -151,6 +151,10 @@ public class CategoryAction extends BaseAction {
@LogAnn
(
title
=
"保存分类"
,
businessType
=
BusinessTypeEnum
.
INSERT
)
@LogAnn
(
title
=
"保存分类"
,
businessType
=
BusinessTypeEnum
.
INSERT
)
@RequiresPermissions
(
"cms:category:save"
)
@RequiresPermissions
(
"cms:category:save"
)
public
ResultData
save
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
public
ResultData
save
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
//验证缩略图参数值是否合法
if
(!
category
.
getCategoryImg
().
matches
(
"^\\[.{1,}]$"
)
||
category
.
getCategoryImg
()==
null
){
category
.
setCategoryImg
(
""
);
}
//验证栏目管理名称的值是否合法
//验证栏目管理名称的值是否合法
if
(
StringUtil
.
isBlank
(
category
.
getCategoryTitle
())){
if
(
StringUtil
.
isBlank
(
category
.
getCategoryTitle
())){
return
ResultData
.
build
().
error
(
getResString
(
"err.empty"
,
this
.
getResString
(
"category.title"
)));
return
ResultData
.
build
().
error
(
getResString
(
"err.empty"
,
this
.
getResString
(
"category.title"
)));
...
@@ -229,6 +233,10 @@ public class CategoryAction extends BaseAction {
...
@@ -229,6 +233,10 @@ public class CategoryAction extends BaseAction {
@LogAnn
(
title
=
"更新分类"
,
businessType
=
BusinessTypeEnum
.
UPDATE
)
@LogAnn
(
title
=
"更新分类"
,
businessType
=
BusinessTypeEnum
.
UPDATE
)
@RequiresPermissions
(
"cms:category:update"
)
@RequiresPermissions
(
"cms:category:update"
)
public
ResultData
update
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
public
ResultData
update
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
//验证缩略图参数值是否合法
if
(!
category
.
getCategoryImg
().
matches
(
"^\\[.{1,}]$"
)
||
category
.
getCategoryImg
()==
null
){
category
.
setCategoryImg
(
""
);
}
//验证栏目管理名称的值是否合法
//验证栏目管理名称的值是否合法
if
(
StringUtil
.
isBlank
(
category
.
getCategoryTitle
())){
if
(
StringUtil
.
isBlank
(
category
.
getCategoryTitle
())){
return
ResultData
.
build
().
error
(
getResString
(
"err.empty"
,
this
.
getResString
(
"category.title"
)));
return
ResultData
.
build
().
error
(
getResString
(
"err.empty"
,
this
.
getResString
(
"category.title"
)));
...
@@ -298,7 +306,7 @@ public class CategoryAction extends BaseAction {
...
@@ -298,7 +306,7 @@ public class CategoryAction extends BaseAction {
@GetMapping
(
"/verifyPingYin"
)
@GetMapping
(
"/verifyPingYin"
)
@ResponseBody
@ResponseBody
public
ResultData
verifyPingYin
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
){
public
ResultData
verifyPingYin
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
){
int
count
=
categoryBiz
.
count
(
Wrappers
.<
CategoryEntity
>
lambdaQuery
()
long
count
=
categoryBiz
.
count
(
Wrappers
.<
CategoryEntity
>
lambdaQuery
()
.
ne
(
StrUtil
.
isNotBlank
(
category
.
getId
()),
CategoryEntity:
:
getId
,
category
.
getId
())
.
ne
(
StrUtil
.
isNotBlank
(
category
.
getId
()),
CategoryEntity:
:
getId
,
category
.
getId
())
.
eq
(
CategoryEntity:
:
getCategoryPinyin
,
category
.
getCategoryPinyin
()));
.
eq
(
CategoryEntity:
:
getCategoryPinyin
,
category
.
getCategoryPinyin
()));
...
...
src/main/java/net/mingsoft/cms/action/ContentAction.java
View file @
eebc3781
...
@@ -31,7 +31,7 @@ import net.mingsoft.basic.annotation.LogAnn;
...
@@ -31,7 +31,7 @@ import net.mingsoft.basic.annotation.LogAnn;
import
net.mingsoft.basic.bean.EUListBean
;
import
net.mingsoft.basic.bean.EUListBean
;
import
net.mingsoft.basic.constant.e.BusinessTypeEnum
;
import
net.mingsoft.basic.constant.e.BusinessTypeEnum
;
import
net.mingsoft.basic.util.BasicUtil
;
import
net.mingsoft.basic.util.BasicUtil
;
import
net.mingsoft.bas
ic
.util.SqlInjectionUtil
;
import
net.mingsoft.bas
e
.util.SqlInjectionUtil
;
import
net.mingsoft.basic.util.StringUtil
;
import
net.mingsoft.basic.util.StringUtil
;
import
net.mingsoft.cms.bean.ContentBean
;
import
net.mingsoft.cms.bean.ContentBean
;
import
net.mingsoft.cms.biz.ICategoryBiz
;
import
net.mingsoft.cms.biz.ICategoryBiz
;
...
@@ -40,6 +40,7 @@ import net.mingsoft.cms.entity.CategoryEntity;
...
@@ -40,6 +40,7 @@ import net.mingsoft.cms.entity.CategoryEntity;
import
net.mingsoft.cms.entity.ContentEntity
;
import
net.mingsoft.cms.entity.ContentEntity
;
import
net.mingsoft.mdiy.biz.IModelBiz
;
import
net.mingsoft.mdiy.biz.IModelBiz
;
import
net.mingsoft.mdiy.entity.ModelEntity
;
import
net.mingsoft.mdiy.entity.ModelEntity
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.shiro.authz.annotation.RequiresPermissions
;
import
org.apache.shiro.authz.annotation.RequiresPermissions
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.stereotype.Controller
;
...
@@ -85,6 +86,7 @@ public class ContentAction extends BaseAction {
...
@@ -85,6 +86,7 @@ public class ContentAction extends BaseAction {
/**
/**
* 返回主界面index
* 返回主界面index
*/
*/
@ApiIgnore
@GetMapping
(
"/index"
)
@GetMapping
(
"/index"
)
public
String
index
(){
public
String
index
(){
return
"/cms/content/index"
;
return
"/cms/content/index"
;
...
@@ -93,6 +95,7 @@ public class ContentAction extends BaseAction {
...
@@ -93,6 +95,7 @@ public class ContentAction extends BaseAction {
/**
/**
* 返回主界面main
* 返回主界面main
*/
*/
@ApiIgnore
@GetMapping
(
"/main"
)
@GetMapping
(
"/main"
)
public
String
main
(){
public
String
main
(){
return
"/cms/content/main"
;
return
"/cms/content/main"
;
...
@@ -119,7 +122,7 @@ public class ContentAction extends BaseAction {
...
@@ -119,7 +122,7 @@ public class ContentAction extends BaseAction {
// 检查SQL注入
// 检查SQL注入
SqlInjectionUtil
.
filterContent
(
content
.
getCategoryId
());
SqlInjectionUtil
.
filterContent
(
content
.
getCategoryId
());
BasicUtil
.
startPage
();
BasicUtil
.
startPage
();
List
contentList
=
contentBiz
.
query
(
content
);
List
contentList
=
contentBiz
.
query
Content
(
content
);
return
ResultData
.
build
().
success
(
new
EUListBean
(
contentList
,(
int
)
BasicUtil
.
endPage
(
contentList
).
getTotal
()));
return
ResultData
.
build
().
success
(
new
EUListBean
(
contentList
,(
int
)
BasicUtil
.
endPage
(
contentList
).
getTotal
()));
}
}
...
@@ -195,6 +198,10 @@ public class ContentAction extends BaseAction {
...
@@ -195,6 +198,10 @@ public class ContentAction extends BaseAction {
@LogAnn
(
title
=
"保存文章"
,
businessType
=
BusinessTypeEnum
.
INSERT
)
@LogAnn
(
title
=
"保存文章"
,
businessType
=
BusinessTypeEnum
.
INSERT
)
@RequiresPermissions
(
"cms:content:save"
)
@RequiresPermissions
(
"cms:content:save"
)
public
ResultData
save
(
@ModelAttribute
@ApiIgnore
ContentEntity
content
)
{
public
ResultData
save
(
@ModelAttribute
@ApiIgnore
ContentEntity
content
)
{
//验证缩略图参数值是否合法
if
(
content
.
getContentImg
()==
null
||
!
content
.
getContentImg
().
matches
(
"^\\[.{1,}]$"
)){
content
.
setContentImg
(
""
);
}
//验证文章标题的值是否合法
//验证文章标题的值是否合法
if
(
StringUtil
.
isBlank
(
content
.
getContentTitle
())){
if
(
StringUtil
.
isBlank
(
content
.
getContentTitle
())){
return
ResultData
.
build
().
error
(
getResString
(
"err.empty"
,
this
.
getResString
(
"content.title"
)));
return
ResultData
.
build
().
error
(
getResString
(
"err.empty"
,
this
.
getResString
(
"content.title"
)));
...
@@ -238,7 +245,7 @@ public class ContentAction extends BaseAction {
...
@@ -238,7 +245,7 @@ public class ContentAction extends BaseAction {
//获取栏目实体
//获取栏目实体
CategoryEntity
categoryEntity
=
categoryBiz
.
getById
(
contents
.
get
(
i
).
getCategoryId
());
CategoryEntity
categoryEntity
=
categoryBiz
.
getById
(
contents
.
get
(
i
).
getCategoryId
());
//如果栏目绑定的模型ID为空
//如果栏目绑定的模型ID为空
if
(
categoryEntity
.
getMdiyModelId
()
==
null
){
if
(
StringUtils
.
isBlank
(
categoryEntity
.
getMdiyModelId
()
)
){
continue
;
continue
;
}
}
//获取到配置模型实体
//获取到配置模型实体
...
@@ -279,6 +286,10 @@ public class ContentAction extends BaseAction {
...
@@ -279,6 +286,10 @@ public class ContentAction extends BaseAction {
@LogAnn
(
title
=
"更新文章"
,
businessType
=
BusinessTypeEnum
.
UPDATE
)
@LogAnn
(
title
=
"更新文章"
,
businessType
=
BusinessTypeEnum
.
UPDATE
)
@RequiresPermissions
(
"cms:content:update"
)
@RequiresPermissions
(
"cms:content:update"
)
public
ResultData
update
(
@ModelAttribute
@ApiIgnore
ContentEntity
content
)
{
public
ResultData
update
(
@ModelAttribute
@ApiIgnore
ContentEntity
content
)
{
//验证缩略图参数值是否合法
if
(
content
.
getContentImg
()==
null
||
!
content
.
getContentImg
().
matches
(
"^\\[.{1,}]$"
)){
content
.
setContentImg
(
""
);
}
//验证文章标题的值是否合法
//验证文章标题的值是否合法
if
(
StringUtil
.
isBlank
(
content
.
getContentTitle
())){
if
(
StringUtil
.
isBlank
(
content
.
getContentTitle
())){
return
ResultData
.
build
().
error
(
getResString
(
"err.empty"
,
this
.
getResString
(
"content.title"
)));
return
ResultData
.
build
().
error
(
getResString
(
"err.empty"
,
this
.
getResString
(
"content.title"
)));
...
...
src/main/java/net/mingsoft/cms/action/GeneraterAction.java
View file @
eebc3781
...
@@ -99,7 +99,7 @@ public class GeneraterAction extends BaseAction {
...
@@ -99,7 +99,7 @@ public class GeneraterAction extends BaseAction {
@Value
(
"${ms.manager.path}"
)
@Value
(
"${ms.manager.path}"
)
private
String
managerPath
;
private
String
managerPath
;
@Value
(
"${ms.html-dir:html}"
)
@Value
(
"${ms.
diy.
html-dir:html}"
)
private
String
htmlDir
;
private
String
htmlDir
;
/**
/**
...
@@ -251,7 +251,7 @@ public class GeneraterAction extends BaseAction {
...
@@ -251,7 +251,7 @@ public class GeneraterAction extends BaseAction {
contentBean
.
setCategoryId
(
category
.
getId
());
contentBean
.
setCategoryId
(
category
.
getId
());
contentBean
.
setCategoryType
(
category
.
getCategoryType
());
contentBean
.
setCategoryType
(
category
.
getCategoryType
());
//将文章列表标签中的中的参数
//将文章列表标签中的中的参数
articleIdList
=
contentBiz
.
queryIdsByCategoryIdForParser
(
contentBean
);
articleIdList
=
contentBiz
.
queryIdsByCategoryIdForParser
AndNotCover
(
contentBean
);
// 分类是列表
// 分类是列表
if
(
category
.
getCategoryType
().
equals
(
CategoryTypeEnum
.
LIST
.
toString
()))
{
if
(
category
.
getCategoryType
().
equals
(
CategoryTypeEnum
.
LIST
.
toString
()))
{
// 判断模板文件是否存在
// 判断模板文件是否存在
...
...
src/main/java/net/mingsoft/cms/action/web/MCmsAction.java
View file @
eebc3781
...
@@ -19,9 +19,6 @@
...
@@ -19,9 +19,6 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
*/
package
net.mingsoft.cms.action.web
;
package
net.mingsoft.cms.action.web
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
...
@@ -31,24 +28,19 @@ import freemarker.core.ParseException;
...
@@ -31,24 +28,19 @@ import freemarker.core.ParseException;
import
freemarker.template.MalformedTemplateNameException
;
import
freemarker.template.MalformedTemplateNameException
;
import
freemarker.template.TemplateNotFoundException
;
import
freemarker.template.TemplateNotFoundException
;
import
net.mingsoft.base.constant.Const
;
import
net.mingsoft.base.constant.Const
;
import
net.mingsoft.basic.exception.BusinessException
;
import
net.mingsoft.basic.util.BasicUtil
;
import
net.mingsoft.basic.util.BasicUtil
;
import
net.mingsoft.cms.bean.CategoryBean
;
import
net.mingsoft.cms.bean.ContentBean
;
import
net.mingsoft.cms.biz.ICategoryBiz
;
import
net.mingsoft.cms.biz.ICategoryBiz
;
import
net.mingsoft.cms.biz.IContentBiz
;
import
net.mingsoft.cms.biz.IContentBiz
;
import
net.mingsoft.cms.entity.CategoryEntity
;
import
net.mingsoft.cms.entity.CategoryEntity
;
import
net.mingsoft.cms.entity.ContentEntity
;
import
net.mingsoft.mdiy.bean.PageBean
;
import
net.mingsoft.mdiy.bean.PageBean
;
import
net.mingsoft.mdiy.biz.IModelBiz
;
import
net.mingsoft.mdiy.biz.IModelBiz
;
import
net.mingsoft.mdiy.biz.IPageBiz
;
import
net.mingsoft.mdiy.entity.ModelEntity
;
import
net.mingsoft.mdiy.entity.ModelEntity
;
import
net.mingsoft.mdiy.util.ParserUtil
;
import
net.mingsoft.mdiy.util.ParserUtil
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.http.MediaType
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
org.springframework.web.bind.annotation.ResponseBody
;
...
@@ -75,12 +67,6 @@ import java.util.Map;
...
@@ -75,12 +67,6 @@ import java.util.Map;
@RequestMapping
(
"/mcms"
)
@RequestMapping
(
"/mcms"
)
public
class
MCmsAction
extends
net
.
mingsoft
.
cms
.
action
.
BaseAction
{
public
class
MCmsAction
extends
net
.
mingsoft
.
cms
.
action
.
BaseAction
{
/**
* 自定义页面业务层
*/
@Autowired
private
IPageBiz
pageBiz
;
/**
/**
* 文章管理业务处理层
* 文章管理业务处理层
*/
*/
...
@@ -101,19 +87,16 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
...
@@ -101,19 +87,16 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
private
IModelBiz
modelBiz
;
private
IModelBiz
modelBiz
;
@Value
(
"${ms.html-dir:html}"
)
@Value
(
"${ms.
diy.
html-dir:html}"
)
private
String
htmlDir
;
private
String
htmlDir
;
/**
/**
* 实现前端页面的文章搜索
* 实现前端页面的文章搜索
*
*
* @param request 搜索id
* @param request 搜索id
* @param response
* @param response
*/
*/
@RequestMapping
(
value
=
"search"
,
method
=
{
RequestMethod
.
GET
,
RequestMethod
.
POST
})
@RequestMapping
(
value
=
"search"
,
method
=
{
RequestMethod
.
GET
,
RequestMethod
.
POST
}
,
produces
=
MediaType
.
TEXT_HTML_VALUE
+
";charset=utf-8"
)
@ResponseBody
@ResponseBody
public
String
search
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
public
String
search
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
String
search
=
BasicUtil
.
getString
(
"tmpl"
,
"search.htm"
);
String
search
=
BasicUtil
.
getString
(
"tmpl"
,
"search.htm"
);
...
@@ -178,7 +161,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
...
@@ -178,7 +161,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
column
=
(
CategoryEntity
)
categoryBiz
.
getById
(
typeId
);
column
=
(
CategoryEntity
)
categoryBiz
.
getById
(
typeId
);
// 获取表单类型的id
// 获取表单类型的id
if
(
column
!=
null
&&
ObjectUtil
.
isNotNull
(
column
.
getMdiyModelId
()))
{
if
(
column
!=
null
&&
ObjectUtil
.
isNotNull
(
column
.
getMdiyModelId
()))
{
contentModel
=
(
ModelEntity
)
modelBiz
.
get
Entity
(
column
.
getMdiyModelId
());
contentModel
=
(
ModelEntity
)
modelBiz
.
get
ById
(
column
.
getMdiyModelId
());
if
(
contentModel
!=
null
)
{
if
(
contentModel
!=
null
)
{
// 保存自定义模型的数据
// 保存自定义模型的数据
Map
<
String
,
String
>
fieldMap
=
contentModel
.
getFieldMap
();
Map
<
String
,
String
>
fieldMap
=
contentModel
.
getFieldMap
();
...
...
src/main/java/net/mingsoft/cms/aop/CategoryAop.java
View file @
eebc3781
...
@@ -7,14 +7,22 @@
...
@@ -7,14 +7,22 @@
package
net.mingsoft.cms.aop
;
package
net.mingsoft.cms.aop
;
import
cn.hutool.core.io.FileUtil
;
import
cn.hutool.core.io.FileUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
net.mingsoft.base.entity.ResultData
;
import
net.mingsoft.basic.exception.BusinessException
;
import
net.mingsoft.basic.util.BasicUtil
;
import
net.mingsoft.basic.util.BasicUtil
;
import
net.mingsoft.cms.constant.e.CategoryTypeEnum
;
import
net.mingsoft.cms.dao.ICategoryDao
;
import
net.mingsoft.cms.dao.IContentDao
;
import
net.mingsoft.cms.entity.CategoryEntity
;
import
net.mingsoft.cms.entity.CategoryEntity
;
import
net.mingsoft.mdiy.biz.IDictBiz
;
import
net.mingsoft.cms.entity.ContentEntity
;
import
net.mingsoft.mdiy.entity.DictEntity
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.annotation.After
;
import
org.aspectj.lang.annotation.After
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -23,7 +31,6 @@ import org.springframework.stereotype.Component;
...
@@ -23,7 +31,6 @@ import org.springframework.stereotype.Component;
import
java.io.File
;
import
java.io.File
;
import
java.util.List
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
/**
...
@@ -38,11 +45,73 @@ public class CategoryAop extends net.mingsoft.basic.aop.BaseAop {
...
@@ -38,11 +45,73 @@ public class CategoryAop extends net.mingsoft.basic.aop.BaseAop {
@Value
(
"${ms.diy.html-dir:html}"
)
@Value
(
"${ms.diy.html-dir:html}"
)
private
String
htmlDir
;
private
String
htmlDir
;
@Autowired
private
ICategoryDao
categoryDao
;
@Autowired
private
IContentDao
contentDao
;
@Pointcut
(
"execution(* net.mingsoft.cms.action.CategoryAction.delete(..)) "
)
@Pointcut
(
"execution(* net.mingsoft.cms.action.CategoryAction.delete(..)) "
)
public
void
delete
()
{
public
void
delete
()
{
}
}
/**
* 栏目保存接口切面
*/
@Pointcut
(
"execution(* net.mingsoft.cms.action.CategoryAction.save(..)) "
)
public
void
save
()
{}
/**
* 栏目更新接口切面
*/
@Pointcut
(
"execution(* net.mingsoft.cms.action.CategoryAction.update(..)) "
)
public
void
update
()
{}
@Around
(
"save() || update()"
)
public
ResultData
move
(
ProceedingJoinPoint
pjp
)
throws
Throwable
{
CategoryEntity
category
=
getType
(
pjp
,
CategoryEntity
.
class
);
if
(
category
==
null
)
{
throw
new
BusinessException
(
"栏目不存在!"
);
}
// 获取返回值
Object
obj
=
pjp
.
proceed
(
pjp
.
getArgs
());
ResultData
resultData
=
JSONObject
.
parseObject
(
JSONObject
.
toJSON
(
obj
).
toString
(),
ResultData
.
class
);
CategoryEntity
parent
=
categoryDao
.
selectById
(
category
.
getCategoryId
());
if
(
parent
==
null
)
{
return
resultData
;
}
// 用于判断父级栏目之前是否是子栏目
// 只有父节点之前为子节点 && 父栏目类型为列表 && 子栏目为列表
boolean
flag
=
parent
.
getLeaf
()
&&
StringUtils
.
equals
(
parent
.
getCategoryType
(),
CategoryTypeEnum
.
LIST
.
toString
());
if
(
flag
)
{
// 将父栏目的内容模板清空
parent
.
setCategoryUrl
(
""
);
categoryDao
.
updateById
(
parent
);
CategoryEntity
returnCategory
=
JSONObject
.
parseObject
(
resultData
.
get
(
ResultData
.
DATA_KEY
).
toString
(),
CategoryEntity
.
class
);
// 获取父栏目ID集合
String
categoryIds
=
StringUtils
.
isEmpty
(
parent
.
getCategoryParentIds
())
?
returnCategory
.
getId
()
:
parent
.
getCategoryParentIds
()
+
","
+
returnCategory
.
getId
();
if
(!
StringUtils
.
equals
(
returnCategory
.
getCategoryType
(),
CategoryTypeEnum
.
LIST
.
toString
()))
{
// 如果子栏目不为列表,将直接删除父栏目下的文章
LambdaUpdateWrapper
<
ContentEntity
>
contentDeleteWrapper
=
new
UpdateWrapper
<
ContentEntity
>().
lambda
();
contentDeleteWrapper
.
eq
(
ContentEntity:
:
getCategoryId
,
parent
.
getId
());
contentDao
.
delete
(
contentDeleteWrapper
);
}
// 将父栏目下的文章移动到子栏目下
LambdaUpdateWrapper
<
ContentEntity
>
contentWrapper
=
new
UpdateWrapper
<
ContentEntity
>().
lambda
();
contentWrapper
.
set
(
ContentEntity:
:
getCategoryId
,
returnCategory
.
getId
());
contentWrapper
.
eq
(
ContentEntity:
:
getCategoryId
,
parent
.
getId
());
contentDao
.
update
(
new
ContentEntity
(),
contentWrapper
);
return
resultData
;
}
return
resultData
;
}
/**
/**
* 删除栏目后并删除文章对应的静态化文件
* 删除栏目后并删除文章对应的静态化文件
*
*
...
...
src/main/java/net/mingsoft/cms/biz/IContentBiz.java
View file @
eebc3781
...
@@ -40,12 +40,32 @@ import java.util.Map;
...
@@ -40,12 +40,32 @@ import java.util.Map;
*/
*/
public
interface
IContentBiz
extends
IBaseBiz
<
ContentEntity
>
{
public
interface
IContentBiz
extends
IBaseBiz
<
ContentEntity
>
{
/**
/**
* 根据文章属性查询
* 根据文章属性查询
* @param contentBean
* @param contentBean
* @return
* @return
*/
*/
List
<
CategoryBean
>
queryIdsByCategoryIdForParser
(
ContentBean
contentBean
);
List
<
CategoryBean
>
queryIdsByCategoryIdForParser
(
ContentBean
contentBean
);
/**
* 查询文章,不包括单篇
* @param contentBean
* @return
*/
List
<
CategoryBean
>
queryContent
(
ContentBean
contentBean
);
int
getSearchCount
(
ModelEntity
contentModel
,
List
diyList
,
Map
whereMap
,
int
appId
,
String
categoryIds
);
int
getSearchCount
(
ModelEntity
contentModel
,
List
diyList
,
Map
whereMap
,
int
appId
,
String
categoryIds
);
/**
* 根据文章属性查询,不包括单篇
* @param contentBean
* @return
*/
List
<
CategoryBean
>
queryIdsByCategoryIdForParserAndNotCover
(
ContentBean
contentBean
);
/**
* 根据解析标签arclist的sql获取list
* @return
*/
List
list
(
Map
map
);
}
}
src/main/java/net/mingsoft/cms/biz/impl/ContentBizImpl.java
View file @
eebc3781
...
@@ -24,6 +24,8 @@
...
@@ -24,6 +24,8 @@
package
net.mingsoft.cms.biz.impl
;
package
net.mingsoft.cms.biz.impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
freemarker.template.TemplateException
;
import
net.mingsoft.base.biz.impl.BaseBizImpl
;
import
net.mingsoft.base.biz.impl.BaseBizImpl
;
import
net.mingsoft.base.dao.IBaseDao
;
import
net.mingsoft.base.dao.IBaseDao
;
import
net.mingsoft.cms.bean.CategoryBean
;
import
net.mingsoft.cms.bean.CategoryBean
;
...
@@ -32,13 +34,16 @@ import net.mingsoft.cms.biz.IContentBiz;
...
@@ -32,13 +34,16 @@ import net.mingsoft.cms.biz.IContentBiz;
import
net.mingsoft.cms.dao.ICategoryDao
;
import
net.mingsoft.cms.dao.ICategoryDao
;
import
net.mingsoft.cms.dao.IContentDao
;
import
net.mingsoft.cms.dao.IContentDao
;
import
net.mingsoft.cms.entity.ContentEntity
;
import
net.mingsoft.cms.entity.ContentEntity
;
import
net.mingsoft.mdiy.biz.ITagBiz
;
import
net.mingsoft.mdiy.entity.ModelEntity
;
import
net.mingsoft.mdiy.entity.ModelEntity
;
import
net.mingsoft.mdiy.entity.TagEntity
;
import
net.mingsoft.mdiy.util.ParserUtil
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.io.IOException
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -64,9 +69,9 @@ public class ContentBizImpl extends BaseBizImpl<IContentDao, ContentEntity> imp
...
@@ -64,9 +69,9 @@ public class ContentBizImpl extends BaseBizImpl<IContentDao, ContentEntity> imp
@Autowired
@Autowired
private
ICategoryDao
categoryDao
;
private
ICategoryDao
categoryDao
;
@Value
(
"${ms.html-dir:html}"
)
private
String
htmlDir
;
@Autowired
private
ITagBiz
tagBiz
;
@Override
@Override
protected
IBaseDao
getDao
()
{
protected
IBaseDao
getDao
()
{
...
@@ -74,11 +79,18 @@ public class ContentBizImpl extends BaseBizImpl<IContentDao, ContentEntity> imp
...
@@ -74,11 +79,18 @@ public class ContentBizImpl extends BaseBizImpl<IContentDao, ContentEntity> imp
return
contentDao
;
return
contentDao
;
}
}
@Override
@Override
public
List
<
CategoryBean
>
queryIdsByCategoryIdForParser
(
ContentBean
contentBean
)
{
public
List
<
CategoryBean
>
queryIdsByCategoryIdForParser
(
ContentBean
contentBean
)
{
return
this
.
contentDao
.
queryIdsByCategoryIdForParser
(
contentBean
);
return
this
.
contentDao
.
queryIdsByCategoryIdForParser
(
contentBean
);
}
}
@Override
public
List
<
CategoryBean
>
queryContent
(
ContentBean
contentBean
)
{
return
this
.
contentDao
.
queryContent
(
contentBean
);
}
@Override
@Override
public
int
getSearchCount
(
ModelEntity
contentModel
,
List
diyList
,
Map
whereMap
,
int
appId
,
String
categoryIds
)
{
public
int
getSearchCount
(
ModelEntity
contentModel
,
List
diyList
,
Map
whereMap
,
int
appId
,
String
categoryIds
)
{
if
(
contentModel
!=
null
)
{
if
(
contentModel
!=
null
)
{
...
@@ -87,5 +99,30 @@ public class ContentBizImpl extends BaseBizImpl<IContentDao, ContentEntity> imp
...
@@ -87,5 +99,30 @@ public class ContentBizImpl extends BaseBizImpl<IContentDao, ContentEntity> imp
return
contentDao
.
getSearchCount
(
null
,
null
,
whereMap
,
appId
,
categoryIds
);
return
contentDao
.
getSearchCount
(
null
,
null
,
whereMap
,
appId
,
categoryIds
);
}
}
@Override
public
List
<
CategoryBean
>
queryIdsByCategoryIdForParserAndNotCover
(
ContentBean
contentBean
)
{
return
this
.
contentDao
.
queryIdsByCategoryIdForParser
(
contentBean
);
}
@Override
public
List
list
(
Map
map
)
{
//通过tagSqlBiz获取arclist对应的sql
QueryWrapper
<
TagEntity
>
tagWrapper
=
new
QueryWrapper
<>();
tagWrapper
.
eq
(
"tag_name"
,
"arclist"
);
TagEntity
tagEntity
=
tagBiz
.
getOne
(
tagWrapper
);
String
sqlFtl
=
tagEntity
.
getTagSql
();
List
<
ContentEntity
>
contentEntities
=
null
;
//通过ParserUtil
try
{
String
sql
=
ParserUtil
.
rendering
(
map
,
sqlFtl
);
//执行原生的sql
contentEntities
=
(
List
<
ContentEntity
>)
tagBiz
.
excuteSql
(
sql
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
catch
(
TemplateException
e
)
{
e
.
printStackTrace
();
}
return
contentEntities
;
}
}
}
src/main/java/net/mingsoft/cms/constant/e/CategoryTypeEnum.java
View file @
eebc3781
...
@@ -43,7 +43,12 @@ public enum CategoryTypeEnum implements BaseEnum {
...
@@ -43,7 +43,12 @@ public enum CategoryTypeEnum implements BaseEnum {
/**
/**
* 链接
* 链接
*/
*/
LINK
(
"3"
);
LINK
(
"3"
),
/**
* 未知类型
*/
UN_KNOW
(
"0"
);
CategoryTypeEnum
(
String
type
)
{
CategoryTypeEnum
(
String
type
)
{
...
@@ -58,7 +63,7 @@ public enum CategoryTypeEnum implements BaseEnum {
...
@@ -58,7 +63,7 @@ public enum CategoryTypeEnum implements BaseEnum {
return
e
;
return
e
;
}
}
}
}
return
null
;
return
CategoryTypeEnum
.
UN_KNOW
;
}
}
@Override
@Override
...
...
src/main/java/net/mingsoft/cms/dao/ICategoryDao.xml
View file @
eebc3781
...
@@ -40,6 +40,7 @@
...
@@ -40,6 +40,7 @@
<if
test=
"leaf != null"
>
leaf=#{leaf},
</if>
<if
test=
"leaf != null"
>
leaf=#{leaf},
</if>
category_id=#{categoryId},
category_id=#{categoryId},
category_parent_ids=#{categoryParentIds},
category_parent_ids=#{categoryParentIds},
mdiy_model_id=#{mdiyModelId},
<if
test=
"categoryType != null and categoryType != ''"
>
category_type=#{categoryType},
</if>
<if
test=
"categoryType != null and categoryType != ''"
>
category_type=#{categoryType},
</if>
<if
test=
"categorySort != null"
>
category_sort=#{categorySort},
</if>
<if
test=
"categorySort != null"
>
category_sort=#{categorySort},
</if>
category_list_url=#{categoryListUrl},
category_list_url=#{categoryListUrl},
...
@@ -48,7 +49,6 @@
...
@@ -48,7 +49,6 @@
<if
test=
"categoryDescrip != null "
>
category_descrip=#{categoryDescrip},
</if>
<if
test=
"categoryDescrip != null "
>
category_descrip=#{categoryDescrip},
</if>
<if
test=
"categoryImg != null and categoryImg != ''"
>
category_img=#{categoryImg},
</if>
<if
test=
"categoryImg != null and categoryImg != ''"
>
category_img=#{categoryImg},
</if>
<if
test=
"categoryDiyUrl != null"
>
category_diy_url=#{categoryDiyUrl},
</if>
<if
test=
"categoryDiyUrl != null"
>
category_diy_url=#{categoryDiyUrl},
</if>
<if
test=
"mdiyModelId != null and mdiyModelId != ''"
>
mdiy_model_id=#{mdiyModelId},
</if>
<if
test=
"dictId != null"
>
dict_id=#{dictId},
</if>
<if
test=
"dictId != null"
>
dict_id=#{dictId},
</if>
<if
test=
"categoryFlag != null "
>
category_flag=#{categoryFlag},
</if>
<if
test=
"categoryFlag != null "
>
category_flag=#{categoryFlag},
</if>
<if
test=
"categoryPath != null and categoryPath != ''"
>
category_path=#{categoryPath},
</if>
<if
test=
"categoryPath != null and categoryPath != ''"
>
category_path=#{categoryPath},
</if>
...
@@ -98,18 +98,20 @@
...
@@ -98,18 +98,20 @@
<!-- 模糊查询开始 -->
<!-- 模糊查询开始 -->
<select
id=
"queryChildren"
resultMap=
"resultMap"
>
<select
id=
"queryChildren"
resultMap=
"resultMap"
>
select * from cms_category
select *,
( SELECT count(*) FROM cms_category cc WHERE cc.category_id = cms_category.id AND cc.del = 0 ) AS childsize from cms_category
<where>
<where>
del=0
<if
test=
"dictId > 0"
>
<if
test=
"dictId > 0"
>
and dict_id=#{dictId}
and dict_id=#{dictId}
</if>
</if>
and
<if
test=
"id != null and id != ''"
>
(
and
(
find_in_set(#{id},CATEGORY_PARENT_IDS)>0
find_in_set(#{id},CATEGORY_PARENT_IDS)>0
or id=#{id}
or id=#{id}
)
)
and del=0
</if>
</where>
</where>
</select>
</select>
...
...
src/main/java/net/mingsoft/cms/dao/IContentDao.java
View file @
eebc3781
...
@@ -39,6 +39,8 @@ import java.util.Map;
...
@@ -39,6 +39,8 @@ import java.util.Map;
*/
*/
public
interface
IContentDao
extends
IBaseDao
<
ContentEntity
>
{
public
interface
IContentDao
extends
IBaseDao
<
ContentEntity
>
{
/**
/**
* 查询文章编号集合
* 查询文章编号集合
* @contentBean
* @contentBean
...
@@ -46,6 +48,20 @@ public interface IContentDao extends IBaseDao<ContentEntity> {
...
@@ -46,6 +48,20 @@ public interface IContentDao extends IBaseDao<ContentEntity> {
*/
*/
public
List
<
CategoryBean
>
queryIdsByCategoryIdForParser
(
ContentBean
contentBean
);
public
List
<
CategoryBean
>
queryIdsByCategoryIdForParser
(
ContentBean
contentBean
);
/**
* 查询文章编号集合,不包括单篇
* @contentBean
* @return
*/
public
List
<
CategoryBean
>
queryIdsByCategoryIdForParserAndNotCover
(
ContentBean
contentBean
);
/**
* 查询文章,不包括单篇
* @contentBean
* @return
*/
public
List
<
CategoryBean
>
queryContent
(
ContentBean
contentBean
);
/**
/**
* 根据查询文章实体总数
* 根据查询文章实体总数
*
*
...
...
src/main/java/net/mingsoft/cms/dao/IContentDao.xml
View file @
eebc3781
...
@@ -207,6 +207,45 @@
...
@@ -207,6 +207,45 @@
<select
id=
"queryAll"
resultMap=
"resultMap"
>
<select
id=
"queryAll"
resultMap=
"resultMap"
>
select * from cms_content where del=0 order by id desc
select * from cms_content where del=0 order by id desc
</select>
</select>
<!-- 查询文章,不包括单篇 -->
<select
id=
"queryContent"
resultMap=
"resultContentMap"
>
<!--,CONCAT('/html/',ct.app_id,category_path,'/',ct.id,'.html') AS static_url-->
select ct.* from (
select ct.*,cc.category_path from cms_content ct
join cms_category cc on ct.category_id=cc.id
<where>
ct.del=0
<if
test=
"contentTitle != null and contentTitle != ''"
>
and content_title like CONCAT(CONCAT('%',#{contentTitle}),'%')
</if>
<if
test=
"categoryId != null and categoryId != ''"
>
and (ct.category_id=#{categoryId} or ct.category_id in
(select id FROM cms_category where find_in_set(#{categoryId},CATEGORY_PARENT_IDS)>0 and cms_category.category_type != 2))
</if>
<if
test=
"contentType != null and contentType != ''"
>
and
<foreach
item=
"item"
index=
"index"
collection=
"contentType.split(',')"
open=
"("
separator=
"or"
close=
")"
>
FIND_IN_SET(#{item},ct.content_type)>0
</foreach>
</if>
<if
test=
"contentDisplay != null and contentDisplay != ''"
>
and content_display=#{contentDisplay}
</if>
<if
test=
"contentAuthor != null and contentAuthor != ''"
>
and content_author=#{contentAuthor}
</if>
<if
test=
"contentSource != null and contentSource != ''"
>
and content_source=#{contentSource}
</if>
<if
test=
"contentDatetime != null"
>
and content_datetime=#{contentDatetime}
</if>
<if
test=
"contentSort != null"
>
and content_sort=#{contentSort}
</if>
<if
test=
"contentImg != null and contentImg != ''"
>
and content_img=#{contentImg}
</if>
<if
test=
"contentDescription != null and contentDescription != ''"
>
and content_description=#{contentDescription}
</if>
<if
test=
"contentKeyword != null and contentKeyword != ''"
>
and content_keyword=#{contentKeyword}
</if>
<if
test=
"contentDetails != null and contentDetails != ''"
>
and content_details=#{contentDetails}
</if>
<if
test=
"contentUrl != null and contentUrl != ''"
>
and content_url=#{contentUrl}
</if>
<if
test=
"contentHit != null"
>
and content_hit=#{contentHit}
</if>
<if
test=
"createBy > 0"
>
and ct.create_by=#{createBy}
</if>
<if
test=
"createDate != null"
>
and ct.create_date=#{createDate}
</if>
<if
test=
"updateBy > 0"
>
and ct.update_by=#{updateBy}
</if>
<if
test=
"updateDate != null"
>
and update_date=#{updateDate}
</if>
<include
refid=
"net.mingsoft.base.dao.IBaseDao.sqlWhere"
></include>
</where>
)ct ORDER BY ct.content_datetime desc,content_sort desc
</select>
<!--条件查询-->
<!--条件查询-->
<select
id=
"query"
resultMap=
"resultContentMap"
>
<select
id=
"query"
resultMap=
"resultContentMap"
>
<!--,CONCAT('/html/',ct.app_id,category_path,'/',ct.id,'.html') AS static_url-->
<!--,CONCAT('/html/',ct.app_id,category_path,'/',ct.id,'.html') AS static_url-->
...
@@ -288,7 +327,7 @@
...
@@ -288,7 +327,7 @@
<if
test=
"orderBy=='hit'"
>
ORDER BY content_hit
</if>
<if
test=
"orderBy=='hit'"
>
ORDER BY content_hit
</if>
<if
test=
"orderBy=='sort'"
>
ORDER BY content_sort
</if>
<if
test=
"orderBy=='sort'"
>
ORDER BY content_sort
</if>
<if
test=
"orderBy!='date' and orderBy!='hit' and orderBy!='sort'"
>
<if
test=
"orderBy!='date' and orderBy!='hit' and orderBy!='sort'"
>
ORDER BY ct.
id
ORDER BY ct.
content_datetime
</if>
</if>
<choose>
<choose>
<when
test=
"order!=null and order!=''"
>
<when
test=
"order!=null and order!=''"
>
...
@@ -301,6 +340,65 @@
...
@@ -301,6 +340,65 @@
</if>
</if>
</select>
</select>
<!-- 根据站点编号、开始、结束时间和栏目编号查询文章编号集合,不包括单篇 -->
<select
id=
"queryIdsByCategoryIdForParserAndNotCover"
resultMap=
"resultBean"
>
select
ct.id article_id,c.*
FROM cms_content ct
LEFT JOIN cms_category c ON ct.category_id = c.id
where ct.del=0
<!-- 查询子栏目数据 -->
<if
test=
"categoryId!=null and categoryId!='' and categoryType==1"
>
and (ct.category_id=#{categoryId} or ct.category_id in
(select id FROM cms_category where find_in_set(#{categoryId},CATEGORY_PARENT_IDS)>0 and category_type!=2))
</if>
<if
test=
"categoryId!=null and categoryId!='' and categoryType==2"
>
and ct.category_id=#{categoryId}
</if>
<if
test=
"beginTime!=null and beginTime!=''"
>
<if
test=
"_databaseId == 'mysql'"
>
AND ct.UPDATE_DATE
>
= #{beginTime}
</if>
<if
test=
"_databaseId == 'oracle'"
>
and ct.UPDATE_DATE
>
= to_date(#{beginTime}, 'yyyy-mm-dd hh24:mi:ss')
</if>
</if>
<if
test=
"endTime!=null and endTime!=''"
>
<if
test=
"_databaseId == 'mysql'"
>
and ct.UPDATE_DATE
>
= #{endTime}
</if>
<if
test=
"_databaseId == 'oracle'"
>
and ct.UPDATE_DATE
>
= to_date(#{endTime}, 'yyyy-mm-dd hh24:mi:ss')
</if>
</if>
<if
test=
"flag!=null and flag!=''"
>
and ct.content_type in ( #{flag})
</if>
<if
test=
"noflag!=null and noflag!=''"
>
and (ct.content_type not in ( #{noflag} ) or ct.content_type is null)
</if>
<if
test=
"orderBy!=null and orderBy!='' "
>
<if
test=
"orderBy=='date'"
>
ORDER BY content_datetime
</if>
<if
test=
"orderBy=='hit'"
>
ORDER BY content_hit
</if>
<if
test=
"orderBy=='sort'"
>
ORDER BY content_sort
</if>
<if
test=
"orderBy!='date' and orderBy!='hit' and orderBy!='sort'"
>
ORDER BY ct.content_datetime
</if>
<choose>
<when
test=
"order!=null and order!=''"
>
${order}
</when>
<otherwise>
desc
</otherwise>
</choose>
</if>
</select>
<select
id=
"getSearchCount"
resultType=
"int"
>
<select
id=
"getSearchCount"
resultType=
"int"
>
select count(*) from
select count(*) from
cms_content a
cms_content a
...
...
src/main/java/net/mingsoft/cms/entity/CategoryEntity.java
View file @
eebc3781
...
@@ -22,13 +22,12 @@
...
@@ -22,13 +22,12 @@
package
net.mingsoft.cms.entity
;
package
net.mingsoft.cms.entity
;
import
com.alibaba.fastjson.annotation.JSONField
;
import
com.baomidou.mybatisplus.annotation.FieldStrategy
;
import
com.baomidou.mybatisplus.annotation.*
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
net.mingsoft.base.entity.BaseEntity
;
import
net.mingsoft.base.entity.BaseEntity
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
java.util.Date
;
/**
/**
* 分类实体
* 分类实体
...
@@ -106,7 +105,7 @@ public class CategoryEntity extends BaseEntity {
...
@@ -106,7 +105,7 @@ public class CategoryEntity extends BaseEntity {
/**
/**
* 栏目管理的内容模型id
* 栏目管理的内容模型id
*/
*/
private
Integer
mdiyModelId
;
private
String
mdiyModelId
;
/**
/**
* 字典对应编号
* 字典对应编号
...
@@ -123,6 +122,7 @@ public class CategoryEntity extends BaseEntity {
...
@@ -123,6 +122,7 @@ public class CategoryEntity extends BaseEntity {
/**
/**
* 父类型编号
* 父类型编号
*/
*/
@TableField
(
updateStrategy
=
FieldStrategy
.
IGNORED
)
private
String
categoryParentIds
;
private
String
categoryParentIds
;
/**
/**
...
@@ -299,11 +299,11 @@ public class CategoryEntity extends BaseEntity {
...
@@ -299,11 +299,11 @@ public class CategoryEntity extends BaseEntity {
return
this
.
categoryDiyUrl
;
return
this
.
categoryDiyUrl
;
}
}
public
Integer
getMdiyModelId
()
{
public
String
getMdiyModelId
()
{
return
mdiyModelId
;
return
mdiyModelId
;
}
}
public
void
setMdiyModelId
(
Integer
mdiyModelId
)
{
public
void
setMdiyModelId
(
String
mdiyModelId
)
{
this
.
mdiyModelId
=
mdiyModelId
;
this
.
mdiyModelId
=
mdiyModelId
;
}
}
...
@@ -442,4 +442,28 @@ public class CategoryEntity extends BaseEntity {
...
@@ -442,4 +442,28 @@ public class CategoryEntity extends BaseEntity {
return
categoryPath
;
return
categoryPath
;
}
}
/**
* 获取栏目属性 (标签使用)
*/
@TableField
(
exist
=
false
)
private
String
type
;
public
String
getType
()
{
return
this
.
categoryType
;
}
/**
* 获取子分类数量 (标签使用)
*/
@TableField
(
exist
=
false
)
private
String
childsize
;
public
String
getChildsize
()
{
return
this
.
childsize
;
}
public
void
setChildsize
(
String
childsize
)
{
this
.
childsize
=
childsize
;
}
}
}
src/main/java/net/mingsoft/cms/util/CmsParserUtil.java
View file @
eebc3781
...
@@ -24,6 +24,7 @@ package net.mingsoft.cms.util;
...
@@ -24,6 +24,7 @@ package net.mingsoft.cms.util;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.io.FileUtil
;
import
cn.hutool.core.io.FileUtil
;
import
cn.hutool.core.map.MapUtil
;
import
cn.hutool.core.util.PageUtil
;
import
cn.hutool.core.util.PageUtil
;
import
freemarker.core.ParseException
;
import
freemarker.core.ParseException
;
import
freemarker.template.MalformedTemplateNameException
;
import
freemarker.template.MalformedTemplateNameException
;
...
@@ -138,7 +139,7 @@ public class CmsParserUtil {
...
@@ -138,7 +139,7 @@ public class CmsParserUtil {
// 判断当前栏目是否有自定义模型
// 判断当前栏目是否有自定义模型
if
(
column
.
getMdiyModelId
()
!=
null
)
{
if
(
column
.
getMdiyModelId
()
!=
null
)
{
// 通过栏目模型编号获取自定义模型实体
// 通过栏目模型编号获取自定义模型实体
contentModel
=
(
ModelEntity
)
SpringUtil
.
getBean
(
ModelBizImpl
.
class
).
get
Entity
(
column
.
getMdiyModelId
());
contentModel
=
(
ModelEntity
)
SpringUtil
.
getBean
(
ModelBizImpl
.
class
).
get
ById
(
column
.
getMdiyModelId
());
}
}
if
(
contentModel
!=
null
)
{
if
(
contentModel
!=
null
)
{
...
@@ -232,8 +233,8 @@ public class CmsParserUtil {
...
@@ -232,8 +233,8 @@ public class CmsParserUtil {
String
columnUrl
=
categoryBean
.
getCategoryUrl
();
String
columnUrl
=
categoryBean
.
getCategoryUrl
();
LOG
.
debug
(
"columnUrl {}"
,
columnUrl
);
LOG
.
debug
(
"columnUrl {}"
,
columnUrl
);
// 文章的栏目模型编号
// 文章的栏目模型编号
Integer
columnContentModelId
=
null
;
String
columnContentModelId
=
null
;
if
(
articleIdList
.
get
(
artId
).
getMdiyModelId
()
!=
null
&&
categoryBean
.
getMdiyModelId
()
>
0
)
{
if
(
StringUtils
.
isNotBlank
(
articleIdList
.
get
(
artId
).
getMdiyModelId
()
)
&&
StringUtils
.
isNotBlank
(
categoryBean
.
getMdiyModelId
()
)
)
{
columnContentModelId
=
categoryBean
.
getMdiyModelId
();
columnContentModelId
=
categoryBean
.
getMdiyModelId
();
}
}
...
@@ -270,10 +271,12 @@ public class CmsParserUtil {
...
@@ -270,10 +271,12 @@ public class CmsParserUtil {
}
else
{
}
else
{
// 通过栏目模型编号获取自定义模型实体
// 通过栏目模型编号获取自定义模型实体
contentModel
=
(
ModelEntity
)
SpringUtil
.
getBean
(
IModelBiz
.
class
)
contentModel
=
(
ModelEntity
)
SpringUtil
.
getBean
(
IModelBiz
.
class
)
.
getEntity
(
columnContentModelId
);
.
getById
(
columnContentModelId
);
// 将自定义模型编号设置为key值
if
(
null
!=
contentModel
){
contentModelMap
.
put
(
columnContentModelId
,
contentModel
.
getModelTableName
());
// 将自定义模型编号设置为key值
parserParams
.
put
(
ParserUtil
.
TABLE_NAME
,
contentModel
.
getModelTableName
());
contentModelMap
.
put
(
columnContentModelId
,
contentModel
.
getModelTableName
());
parserParams
.
put
(
ParserUtil
.
TABLE_NAME
,
contentModel
.
getModelTableName
());
}
}
}
}
}
...
@@ -298,7 +301,7 @@ public class CmsParserUtil {
...
@@ -298,7 +301,7 @@ public class CmsParserUtil {
parserParams
.
put
(
ParserUtil
.
PAGE
,
page
);
parserParams
.
put
(
ParserUtil
.
PAGE
,
page
);
String
finalWritePath
=
writePath
;
String
finalWritePath
=
writePath
;
HashMap
<
Object
,
Object
>
cloneMap
=
Coll
Util
.
newHashMap
();
HashMap
<
Object
,
Object
>
cloneMap
=
Map
Util
.
newHashMap
();
cloneMap
.
putAll
(
parserParams
);
cloneMap
.
putAll
(
parserParams
);
HttpServletRequest
request
=
SpringUtil
.
getRequest
();
HttpServletRequest
request
=
SpringUtil
.
getRequest
();
String
content
=
null
;
String
content
=
null
;
...
...
src/main/java/net/mingsoft/config/WebConfig.java
View file @
eebc3781
...
@@ -26,14 +26,11 @@ import com.alibaba.druid.pool.DruidDataSource;
...
@@ -26,14 +26,11 @@ import com.alibaba.druid.pool.DruidDataSource;
import
com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator
;
import
com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.fasterxml.jackson.databind.DeserializationFeature
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
net.mingsoft.basic.filter.XSSEscapeFilter
;
import
net.mingsoft.basic.filter.XSSEscapeFilter
;
import
net.mingsoft.basic.interceptor.ActionInterceptor
;
import
net.mingsoft.basic.interceptor.ActionInterceptor
;
import
net.mingsoft.mdiy.biz.IConfigBiz
;
import
net.mingsoft.mdiy.biz.IConfigBiz
;
import
net.mingsoft.mdiy.entity.ConfigEntity
;
import
net.mingsoft.mdiy.entity.ConfigEntity
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.web.servlet.FilterRegistrationBean
;
import
org.springframework.boot.web.servlet.FilterRegistrationBean
;
import
org.springframework.boot.web.servlet.ServletListenerRegistrationBean
;
import
org.springframework.boot.web.servlet.ServletListenerRegistrationBean
;
...
@@ -43,11 +40,9 @@ import org.springframework.core.Ordered;
...
@@ -43,11 +40,9 @@ import org.springframework.core.Ordered;
import
org.springframework.http.converter.HttpMessageConverter
;
import
org.springframework.http.converter.HttpMessageConverter
;
import
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
;
import
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
;
import
org.springframework.web.context.request.RequestContextListener
;
import
org.springframework.web.context.request.RequestContextListener
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.*
;
import
org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
;
import
org.springframework.web.servlet.config.annotation.ViewControllerRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurer
;
import
javax.annotation.Resource
;
import
java.io.File
;
import
java.io.File
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.HashMap
;
...
@@ -61,10 +56,10 @@ import java.util.concurrent.TimeUnit;
...
@@ -61,10 +56,10 @@ import java.util.concurrent.TimeUnit;
@Configuration
@Configuration
public
class
WebConfig
implements
WebMvcConfigurer
{
public
class
WebConfig
implements
WebMvcConfigurer
{
@
Autowired
(
required
=
false
)
@
Resource
private
IConfigBiz
configBiz
;
private
IConfigBiz
configBiz
;
@
Autowired
(
required
=
false
)
@
Resource
private
MappingJackson2HttpMessageConverter
mappingJackson2HttpMessageConverter
;
private
MappingJackson2HttpMessageConverter
mappingJackson2HttpMessageConverter
;
@Bean
@Bean
...
@@ -100,7 +95,7 @@ public class WebConfig implements WebMvcConfigurer {
...
@@ -100,7 +95,7 @@ public class WebConfig implements WebMvcConfigurer {
String
uploadMapping
=
MSProperties
.
upload
.
mapping
;
String
uploadMapping
=
MSProperties
.
upload
.
mapping
;
String
uploadFolderPath
=
MSProperties
.
upload
.
path
;
String
uploadFolderPath
=
MSProperties
.
upload
.
path
;
String
template
=
MSProperties
.
upload
.
template
;
String
template
=
MSProperties
.
upload
.
template
;
String
htmlDir
=
MSProperties
.
htmlDir
;
String
htmlDir
=
MSProperties
.
DiyProperties
.
htmlDir
;
// 上传路径映射 这里的映射不能使用File.separator Windows会存在映射问题
// 上传路径映射 这里的映射不能使用File.separator Windows会存在映射问题
registry
.
addResourceHandler
(
uploadMapping
).
addResourceLocations
(
"/"
+
uploadFolderPath
+
"/"
,
"file:"
+
uploadFolderPath
+
"/"
);
registry
.
addResourceHandler
(
uploadMapping
).
addResourceLocations
(
"/"
+
uploadFolderPath
+
"/"
,
"file:"
+
uploadFolderPath
+
"/"
);
registry
.
addResourceHandler
(
"/"
+
template
+
"/**"
).
addResourceLocations
(
"/"
+
template
+
"/"
,
"file:"
+
template
+
"/"
);
registry
.
addResourceHandler
(
"/"
+
template
+
"/**"
).
addResourceLocations
(
"/"
+
template
+
"/"
,
"file:"
+
template
+
"/"
);
...
@@ -141,13 +136,15 @@ public class WebConfig implements WebMvcConfigurer {
...
@@ -141,13 +136,15 @@ public class WebConfig implements WebMvcConfigurer {
registration
.
setName
(
"XSSFilter"
);
registration
.
setName
(
"XSSFilter"
);
registration
.
addUrlPatterns
(
new
String
[]{
"/*"
});
registration
.
addUrlPatterns
(
new
String
[]{
"/*"
});
registration
.
setOrder
(-
2147483648
);
registration
.
setOrder
(-
2147483648
);
xssFilter
.
includes
.
add
(
"/**"
);
if
(
filterUrl
!=
null
&&
StrUtil
.
isNotBlank
(
filterUrl
))
{
xssFilter
.
ex
cludes
.
add
(
MSProperties
.
manager
.
path
+
"/**"
);
xssFilter
.
in
cludes
.
add
All
(
Arrays
.
asList
(
filterUrl
.
split
(
","
))
);
if
(
filterUrl
!=
null
&&
StrUtil
.
isNotBlank
(
filterUrl
.
toString
()))
{
}
else
{
xssFilter
.
includes
.
add
All
(
Arrays
.
asList
(
filterUrl
.
toString
().
split
(
","
))
);
xssFilter
.
includes
.
add
(
"/**"
);
}
}
if
(
excludeUrl
!=
null
&&
StrUtil
.
isNotBlank
(
excludeUrl
.
toString
()))
{
if
(
excludeUrl
!=
null
&&
StrUtil
.
isNotBlank
(
excludeUrl
))
{
xssFilter
.
excludes
.
addAll
(
Arrays
.
asList
(
excludeUrl
.
toString
().
split
(
","
)));
xssFilter
.
excludes
.
addAll
(
Arrays
.
asList
(
excludeUrl
.
split
(
","
)));
}
else
{
xssFilter
.
excludes
.
add
(
MSProperties
.
manager
.
path
+
"/**"
);
}
}
initParameters
.
put
(
"isIncludeRichText"
,
"false"
);
initParameters
.
put
(
"isIncludeRichText"
,
"false"
);
registration
.
setInitParameters
(
initParameters
);
registration
.
setInitParameters
(
initParameters
);
...
...
src/main/resources/application.yml
View file @
eebc3781
server
:
server
:
port
:
8080
port
:
8080
servlet.session.timeout
:
P0DT60M0S
#D天H小时M分钟S秒,字符T是紧跟在时分秒之前的,每个单位都必须由数字开始,且时分秒顺序不能乱
servlet.session.timeout
:
P0DT60M0S
#D天H小时M分钟S秒,字符T是紧跟在时分秒之前的,每个单位都必须由数字开始,且时分秒顺序不能乱
error
:
include-exception
:
true
include-message
:
always
servlet
:
servlet
:
encoding
:
encoding
:
force
:
true
force
:
true
charset
:
utf-8
charset
:
utf-8
enabled
:
true
enabled
:
true
# ssl: #https证书配置 配置了之后只能通过https访问应用
,此配置只争对springboot方式有效,如果使用了nginx需要在nginx配置证书
# ssl: #https证书配置 配置了之后只能通过https访问应用
# key-store: xxx.pfx 证书文件
# key-store: xxx.pfx 证书文件
# key-store-password: 1234 证书密码
# key-store-password: 1234 证书密码
...
@@ -17,8 +20,13 @@ logging:
...
@@ -17,8 +20,13 @@ logging:
config
:
classpath:log4j-spring.xml
config
:
classpath:log4j-spring.xml
ms
:
ms
:
xss
:
shiro-key
:
d3d3bWluZ3NvZnRuZXRtcw==
#生产必须修改此值否则会存在安全风险,可以通过 https://base64.us/随机生产一个Base64值
xssEnable
:
true
#xss过滤器的开关
filterUrl
:
/**
#过滤的url,多个用逗号分开
excludeUrl
:
/ms/**,/static/**,/template/**,/file/upload.do,/static/plugins/ueditor/1.4.3.3/jsp/editor.do,/activity/saveUser.do
#排除的url,多个用逗号分开
# mstore-url: http://store.i.mingsoft.net
# mstore-host: store.i.mingsoft.net
# shiro-key: #16位长度,不填写默认随机生成
cookie-name
:
SHIRO_SESSION_ID
cookie-name
:
SHIRO_SESSION_ID
html-dir
:
html
html-dir
:
html
rand-code
:
rand-code
:
...
@@ -30,20 +38,17 @@ ms:
...
@@ -30,20 +38,17 @@ ms:
manager
:
manager
:
path
:
/ms
#后台访问的路径,如:http://项目/ms/login.do,生产的时候建议修改
path
:
/ms
#后台访问的路径,如:http://项目/ms/login.do,生产的时候建议修改
check-code
:
true
#默认开启验证码验证,false验证码不验证
check-code
:
true
#默认开启验证码验证,false验证码不验证
xss
:
xssEnable
:
true
#xss过滤器的开关
filterUrl
:
/**
#过滤的url,多个用逗号分开
excludeUrl
:
/ms**,/static**,/template**,/file/upload.do,/static/plugins/ueditor/1.4.3.3/jsp/editor.do
#排除的url,多个用逗号分开
upload
:
upload
:
enable-web
:
true
#启用web层的上传
enable-web
:
true
#启用web层的上传
template
:
template
#模板文件夹支持重命名,不支持路径
template
:
template
#模板文件夹支持重命名,不支持路径
path
:
upload
#文件上传路径,可以根据实际写绝对路径
path
:
upload
#文件上传路径,可以根据实际写绝对路径
mapping
:
/upload/**
#修改需要谨慎,系统第一次部署可以随意修改,如果已经有了上传数据,再次修改会导致之前上传的文件404
mapping
:
/upload/**
#修改需要谨慎,系统第一次部署可以随意修改,如果已经有了上传数据,再次修改会导致之前上传的文件404
denied
:
.
exe,
.
jsp,
.jspx,.sh
denied
:
exe,jsp,
xml,sh,bat,py
back-up
:
/upload_back
back-up
:
/upload_back
multipart
:
multipart
:
#最大上传文件大小 单位:KB
#最大上传文件大小 单位:KB
max-file-size
:
1024
0
max-file-size
:
1024
#文件暂存临时目录
#文件暂存临时目录
upload-temp-dir
:
temp
upload-temp-dir
:
temp
#临时文件大小
#临时文件大小
...
@@ -52,8 +57,20 @@ ms:
...
@@ -52,8 +57,20 @@ ms:
max-request-size
:
-1
max-request-size
:
-1
spring
:
spring
:
main
:
allow-circular-references
:
true
datasource
:
datasource
:
druid
:
druid
:
initialSize
:
5
#初始连接数,默认0
minIdle
:
5
#最小连接数,默认8
maxActive
:
20
#最大连接数,默认8
maxWait
:
2000
#获取连接的最大等待时间,单位毫秒
validationQuery
:
SELECT
1
testOnBorrow
:
true
#设置从连接池获取连接时是否检查连接有效性,true检查,false不检查
testOnReturn
:
true
#设置从连接池归还连接时是否检查连接有效性,true检查,false不检查
poolPreparedStatements
:
true
#可以支持PSCache(提升写入、查询效率)
filters
:
stat,wall
#配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
keepAlive
:
true
#保持长连接
stat-view-servlet
:
stat-view-servlet
:
enabled
:
false
#启用druid监控
enabled
:
false
#启用druid监控
profiles
:
profiles
:
...
@@ -63,6 +80,7 @@ spring:
...
@@ -63,6 +80,7 @@ spring:
config
:
classpath:ehcache.xml
config
:
classpath:ehcache.xml
mvc
:
mvc
:
pathmatch
:
pathmatch
:
matching-strategy
:
ANT_PATH_MATCHER
use-suffix-pattern
:
true
use-suffix-pattern
:
true
devtools
:
devtools
:
restart
:
restart
:
...
@@ -92,11 +110,6 @@ spring:
...
@@ -92,11 +110,6 @@ spring:
time_format
:
HH:mm:ss
time_format
:
HH:mm:ss
datetime_format
:
yyyy-MM-dd HH:mm:ss
datetime_format
:
yyyy-MM-dd HH:mm:ss
number_format
:
0.##
number_format
:
0.##
http
:
encoding
:
force
:
true
charset
:
utf-8
enabled
:
true
mybatis-plus
:
mybatis-plus
:
global-config
:
global-config
:
...
...
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