Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
C
cms_sys
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
西魏
cms_sys
Commits
644f0bdc
Commit
644f0bdc
authored
Dec 15, 2022
by
msgroup
Committed by
mingsoft
Dec 15, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix:待发布版本
Signed-off-by:
mingsoft
<
killfen@126.com
>
parent
f66c6298
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
810 additions
and
761 deletions
+810
-761
BaseAction.java
src/main/java/net/mingsoft/cms/action/BaseAction.java
+24
-24
CategoryAction.java
src/main/java/net/mingsoft/cms/action/CategoryAction.java
+298
-292
CategoryBean.java
src/main/java/net/mingsoft/cms/bean/CategoryBean.java
+30
-30
ICategoryBiz.java
src/main/java/net/mingsoft/cms/biz/ICategoryBiz.java
+41
-41
IHistoryLogBiz.java
src/main/java/net/mingsoft/cms/biz/IHistoryLogBiz.java
+16
-16
CategoryBizImpl.java
src/main/java/net/mingsoft/cms/biz/impl/CategoryBizImpl.java
+298
-298
Const.java
src/main/java/net/mingsoft/cms/constant/Const.java
+14
-14
ICategoryDao.java
src/main/java/net/mingsoft/cms/dao/ICategoryDao.java
+27
-27
ICmsHistoryLogDao.java
src/main/java/net/mingsoft/cms/dao/ICmsHistoryLogDao.java
+14
-14
CategoryEntity.java
src/main/java/net/mingsoft/cms/entity/CategoryEntity.java
+43
-3
WebConfig.java
src/main/java/net/mingsoft/config/WebConfig.java
+5
-1
news-detail.htm
src/main/webapp/template/1/default/news-detail.htm
+0
-1
No files found.
src/main/java/net/mingsoft/cms/action/BaseAction.java
View file @
644f0bdc
...
...
@@ -18,27 +18,27 @@
* 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
;
import
java.util.MissingResourceException
;
/**
* @Author: 铭飞开源团队--huise
* @Date: 2019/8/9 20:47
*/
public
class
BaseAction
extends
net
.
mingsoft
.
basic
.
action
.
BaseAction
{
@Override
protected
String
getResString
(
String
key
)
{
// TODO Auto-generated method stub
String
str
=
""
;
try
{
str
=
super
.
getResString
(
key
);
}
catch
(
MissingResourceException
e
)
{
str
=
getLocaleString
(
key
,
net
.
mingsoft
.
cms
.
constant
.
Const
.
RESOURCES
);
}
return
str
;
}
}
package
net
.
mingsoft
.
cms
.
action
;
import
java.util.MissingResourceException
;
/**
* @Author: 铭飞开源团队--huise
* @Date: 2019/8/9 20:47
*/
public
class
BaseAction
extends
net
.
mingsoft
.
basic
.
action
.
BaseAction
{
@Override
protected
String
getResString
(
String
key
)
{
// TODO Auto-generated method stub
String
str
=
""
;
try
{
str
=
super
.
getResString
(
key
);
}
catch
(
MissingResourceException
e
)
{
str
=
getLocaleString
(
key
,
net
.
mingsoft
.
cms
.
constant
.
Const
.
RESOURCES
);
}
return
str
;
}
}
src/main/java/net/mingsoft/cms/action/CategoryAction.java
View file @
644f0bdc
...
...
@@ -7,10 +7,10 @@
* 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:
* <p>
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
* <p>
* 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
...
...
@@ -23,6 +23,7 @@
package
net
.
mingsoft
.
cms
.
action
;
import
cn.hutool.core.util.StrUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
...
...
@@ -53,318 +54,323 @@ import java.util.List;
* 创建日期:2019-11-28 15:12:32<br/>
* 历史修订:<br/>
*/
@Api
(
tags
=
{
"后端-内容模块接口"
})
@Api
(
tags
=
{
"后端-内容模块接口"
})
@Controller
(
"cmsCategoryAction"
)
@RequestMapping
(
"/${ms.manager.path}/cms/category"
)
public
class
CategoryAction
extends
BaseAction
{
/**
* 注入分类业务层
*/
@Autowired
private
ICategoryBiz
categoryBiz
;
/**
* 注入分类业务层
*/
@Autowired
private
ICategoryBiz
categoryBiz
;
/**
* 返回主界面index
* @return
*/
@GetMapping
(
"/index"
)
@RequiresPermissions
(
"cms:category:view"
)
public
String
index
()
{
return
"/cms/category/index"
;
}
/**
* 返回主界面index
* @return
*/
@GetMapping
(
"/index"
)
@RequiresPermissions
(
"cms:category:view"
)
public
String
index
()
{
return
"/cms/category/index"
;
}
/**
* 查询分类列表接口
* @param category 栏目实体
* @return
*/
@ApiOperation
(
value
=
"查询分类列表接口"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"categoryTitle"
,
value
=
"栏目管理名称"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryParentId"
,
value
=
"父类型编号"
,
required
=
false
,
paramType
=
"query"
),
/**
* 查询分类列表接口
* @param category 栏目实体
* @return
*/
@ApiOperation
(
value
=
"查询分类列表接口"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"categoryTitle"
,
value
=
"栏目管理名称"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryParentId"
,
value
=
"父类型编号"
,
required
=
false
,
paramType
=
"query"
),
})
@RequestMapping
(
value
=
"/list"
,
method
=
{
RequestMethod
.
GET
,
RequestMethod
.
POST
})
@ResponseBody
public
ResultData
list
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
BasicUtil
.
startPage
();
List
categoryList
=
categoryBiz
.
query
(
category
);
return
ResultData
.
build
().
success
(
new
EUListBean
(
categoryList
,(
int
)
BasicUtil
.
endPage
(
categoryList
).
getTotal
()));
}
/**
* 返回编辑界面category_form
* @param category 栏目
* @return
*/
@GetMapping
(
"/form"
)
public
String
form
(
@ModelAttribute
CategoryEntity
category
,
ModelMap
model
){
model
.
addAttribute
(
"appId"
,
BasicUtil
.
getApp
().
getAppId
());
return
"/cms/category/form"
;
}
@RequestMapping
(
value
=
"/list"
,
method
=
{
RequestMethod
.
GET
,
RequestMethod
.
POST
})
@ResponseBody
public
ResultData
list
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
BasicUtil
.
startPage
();
List
categoryList
=
categoryBiz
.
list
(
new
LambdaQueryWrapper
<
CategoryEntity
>(
category
));
return
ResultData
.
build
().
success
(
new
EUListBean
(
categoryList
,
(
int
)
BasicUtil
.
endPage
(
categoryList
).
getTotal
()));
}
/**
* 获取分类
* @param category 分类实体
*/
@ApiOperation
(
value
=
"获取分类列表接口"
)
@ApiImplicitParam
(
name
=
"id"
,
value
=
"编号"
,
required
=
true
,
paramType
=
"query"
)
@GetMapping
(
"/get"
)
@RequiresPermissions
(
"cms:category:view"
)
@ResponseBody
public
ResultData
get
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
){
if
(
category
.
getId
()==
null
)
{
return
ResultData
.
build
().
error
();
}
CategoryEntity
_category
=
(
CategoryEntity
)
categoryBiz
.
getById
(
category
.
getId
());
return
ResultData
.
build
().
success
(
_category
);
}
/**
* 返回编辑界面category_form
* @param category 栏目
* @return
*/
@GetMapping
(
"/form"
)
public
String
form
(
@ModelAttribute
CategoryEntity
category
,
ModelMap
model
)
{
model
.
addAttribute
(
"appId"
,
BasicUtil
.
getApp
().
getAppId
());
return
"/cms/category/form"
;
}
/**
* 获取分类
* @param category 分类实体
*/
@ApiOperation
(
value
=
"获取分类列表接口"
)
@ApiImplicitParam
(
name
=
"id"
,
value
=
"编号"
,
required
=
true
,
paramType
=
"query"
)
@GetMapping
(
"/get"
)
@RequiresPermissions
(
"cms:category:view"
)
@ResponseBody
public
ResultData
get
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
if
(
category
.
getId
()
==
null
)
{
return
ResultData
.
build
().
error
();
}
CategoryEntity
_category
=
(
CategoryEntity
)
categoryBiz
.
getById
(
category
.
getId
());
return
ResultData
.
build
().
success
(
_category
);
}
/**
* 保存分类
* @param category 分类实体
*/
@ApiOperation
(
value
=
"保存分类列表接口"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"categoryTitle"
,
value
=
"栏目管理名称"
,
required
=
true
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryId"
,
value
=
"所属栏目"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryType"
,
value
=
"栏目管理属性"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categorySort"
,
value
=
"自定义顺序"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryListUrl"
,
value
=
"列表模板"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryUrl"
,
value
=
"内容模板"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryKeyword"
,
value
=
"栏目管理关键字"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryDescrip"
,
value
=
"栏目管理描述"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryImg"
,
value
=
"缩略图"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryDiyUrl"
,
value
=
"自定义链接"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"mdiyModelId"
,
value
=
"栏目管理的内容模型id"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryDatetime"
,
value
=
"类别发布时间"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"dictId"
,
value
=
"字典对应编号"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryFlag"
,
value
=
"栏目属性"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryPath"
,
value
=
"栏目路径"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryParentId"
,
value
=
"父类型编号"
,
required
=
false
,
paramType
=
"query"
),
})
@PostMapping
(
"/save"
)
@ResponseBody
@LogAnn
(
title
=
"保存分类"
,
businessType
=
BusinessTypeEnum
.
INSERT
)
@RequiresPermissions
(
"cms:category:save"
)
public
ResultData
save
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
//验证缩略图参数值是否合法
if
(!
category
.
getCategoryImg
().
matches
(
"^\\[.{1,}]$"
)
||
category
.
getCategoryImg
()==
null
)
{
category
.
setCategoryImg
(
""
);
}
//验证栏目管理名称的值是否合法
if
(
StringUtil
.
isBlank
(
category
.
getCategoryTitle
()))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.empty"
,
this
.
getResString
(
"category.title"
)));
}
if
(!
StringUtil
.
checkLength
(
category
.
getCategoryTitle
()+
""
,
1
,
100
))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.length"
,
this
.
getResString
(
"category.title"
),
"1"
,
"100"
));
}
/**
* 保存分类
* @param category 分类实体
*/
@ApiOperation
(
value
=
"保存分类列表接口"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"categoryTitle"
,
value
=
"栏目管理名称"
,
required
=
true
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryId"
,
value
=
"所属栏目"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryType"
,
value
=
"栏目管理属性"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categorySort"
,
value
=
"自定义顺序"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryListUrl"
,
value
=
"列表模板"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryUrl"
,
value
=
"内容模板"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryKeyword"
,
value
=
"栏目管理关键字"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryDescrip"
,
value
=
"栏目管理描述"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryImg"
,
value
=
"缩略图"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryDiyUrl"
,
value
=
"自定义链接"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"mdiyModelId"
,
value
=
"栏目管理的内容模型id"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryDatetime"
,
value
=
"类别发布时间"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"dictId"
,
value
=
"字典对应编号"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryFlag"
,
value
=
"栏目属性"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryPath"
,
value
=
"栏目路径"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryParentId"
,
value
=
"父类型编号"
,
required
=
false
,
paramType
=
"query"
),
})
@PostMapping
(
"/save"
)
@ResponseBody
@LogAnn
(
title
=
"保存分类"
,
businessType
=
BusinessTypeEnum
.
INSERT
)
@RequiresPermissions
(
"cms:category:save"
)
public
ResultData
save
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
//验证缩略图参数值是否合法
if
(!
category
.
getCategoryImg
().
matches
(
"^\\[.{1,}]$"
)
||
category
.
getCategoryImg
()
==
null
)
{
category
.
setCategoryImg
(
""
);
}
//验证栏目管理名称的值是否合法
if
(
StringUtil
.
isBlank
(
category
.
getCategoryTitle
()))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.empty"
,
this
.
getResString
(
"category.title"
)));
}
if
(!
StringUtil
.
checkLength
(
category
.
getCategoryTitle
()
+
""
,
1
,
100
))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.length"
,
this
.
getResString
(
"category.title"
),
"1"
,
"100"
));
}
if
(!
StringUtil
.
checkLength
(
category
.
getCategoryPath
()+
""
,
1
,
100
)){
return
ResultData
.
build
().
error
(
getResString
(
"err.length"
,
this
.
getResString
(
"category.path"
),
"1"
,
"100"
));
}
if
(!
StringUtil
.
checkLength
(
category
.
getCategoryParentIds
()+
""
,
1
,
100
)){
return
ResultData
.
build
().
error
(
getResString
(
"err.length"
,
this
.
getResString
(
"category.parent.id"
),
"1"
,
"100"
));
}
//判断拼音是否重复
if
(
StrUtil
.
isNotBlank
(
category
.
getCategoryPinyin
()))
{
CategoryEntity
_category
=
new
CategoryEntity
();
_category
.
setCategoryPinyin
(
category
.
getCategoryPinyin
());
List
<
CategoryEntity
>
query
=
categoryBiz
.
query
(
_category
);
if
(
query
.
size
()
>
0
)
{
return
ResultData
.
build
().
error
(
getResString
(
"err.exist"
,
this
.
getResString
(
"category.pinyin"
)));
}
}
if
(!
StringUtil
.
checkLength
(
category
.
getCategoryPath
()
+
""
,
1
,
100
))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.length"
,
this
.
getResString
(
"category.path"
),
"1"
,
"100"
));
}
if
(!
StringUtil
.
checkLength
(
category
.
getCategoryParentIds
()
+
""
,
1
,
100
))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.length"
,
this
.
getResString
(
"category.parent.id"
),
"1"
,
"100"
));
}
//判断拼音是否重复
if
(
StrUtil
.
isNotBlank
(
category
.
getCategoryPinyin
()))
{
if
(!
category
.
getCategoryPinyin
().
matches
(
"^[a-zA-Z0-9]*$"
)){
return
ResultData
.
build
().
error
(
this
.
getResString
(
"err.format"
));
}
CategoryEntity
_category
=
new
CategoryEntity
();
_category
.
setCategoryPinyin
(
category
.
getCategoryPinyin
());
List
<
CategoryEntity
>
query
=
categoryBiz
.
query
(
_category
);
if
(
query
.
size
()
>
0
)
{
return
ResultData
.
build
().
error
(
getResString
(
"err.exist"
,
this
.
getResString
(
"category.pinyin"
)));
}
}
categoryBiz
.
saveEntity
(
category
);
return
ResultData
.
build
().
success
(
category
);
}
categoryBiz
.
saveEntity
(
category
);
return
ResultData
.
build
().
success
(
category
);
}
/**
* 批量删除分类列表接口
* @param categorys
* @return
*/
@ApiOperation
(
value
=
"批量删除分类列表接口"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"categorys"
,
value
=
"删除的栏目集合"
,
allowMultiple
=
true
,
dataType
=
"CategoryEntity"
,
required
=
true
)
/**
* 批量删除分类列表接口
* @param categorys
* @return
*/
@ApiOperation
(
value
=
"批量删除分类列表接口"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"categorys"
,
value
=
"删除的栏目集合"
,
allowMultiple
=
true
,
dataType
=
"CategoryEntity"
,
required
=
true
)
})
@PostMapping
(
"/delete"
)
@ResponseBody
@LogAnn
(
title
=
"删除分类"
,
businessType
=
BusinessTypeEnum
.
DELETE
)
@RequiresPermissions
(
"cms:category:del"
)
public
ResultData
delete
(
@RequestBody
List
<
CategoryEntity
>
categorys
)
{
for
(
int
i
=
0
;
i
<
categorys
.
size
();
i
++)
{
categoryBiz
.
delete
(
categorys
.
get
(
i
).
getId
());
}
return
ResultData
.
build
().
success
();
}
})
@PostMapping
(
"/delete"
)
@ResponseBody
@LogAnn
(
title
=
"删除分类"
,
businessType
=
BusinessTypeEnum
.
DELETE
)
@RequiresPermissions
(
"cms:category:del"
)
public
ResultData
delete
(
@RequestBody
List
<
CategoryEntity
>
categorys
)
{
for
(
int
i
=
0
;
i
<
categorys
.
size
();
i
++)
{
categoryBiz
.
delete
(
categorys
.
get
(
i
).
getId
());
}
return
ResultData
.
build
().
success
();
}
/**
* 更新分类列表
* @param category 分类实体
*/
@ApiOperation
(
value
=
"更新分类列表接口"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"编号"
,
required
=
true
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryTitle"
,
value
=
"栏目管理名称"
,
required
=
true
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryId"
,
value
=
"所属栏目"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryType"
,
value
=
"栏目管理属性"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categorySort"
,
value
=
"自定义顺序"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryListUrl"
,
value
=
"列表模板"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryUrl"
,
value
=
"内容模板"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryKeyword"
,
value
=
"栏目管理关键字"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryDescrip"
,
value
=
"栏目管理描述"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryImg"
,
value
=
"缩略图"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryDiyUrl"
,
value
=
"自定义链接"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"mdiyModelId"
,
value
=
"栏目管理的内容模型id"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryDatetime"
,
value
=
"类别发布时间"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"dictId"
,
value
=
"字典对应编号"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryFlag"
,
value
=
"栏目属性"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryPath"
,
value
=
"栏目路径"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryParentId"
,
value
=
"父类型编号"
,
required
=
false
,
paramType
=
"query"
),
})
@PostMapping
(
"/update"
)
@ResponseBody
@LogAnn
(
title
=
"更新分类"
,
businessType
=
BusinessTypeEnum
.
UPDATE
)
@RequiresPermissions
(
"cms:category:update"
)
public
ResultData
update
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
//验证缩略图参数值是否合法
if
(!
category
.
getCategoryImg
().
matches
(
"^\\[.{1,}]$"
)
||
category
.
getCategoryImg
()==
null
)
{
category
.
setCategoryImg
(
""
);
}
//验证栏目管理名称的值是否合法
if
(
StringUtil
.
isBlank
(
category
.
getCategoryTitle
()))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.empty"
,
this
.
getResString
(
"category.title"
)));
}
if
(!
StringUtil
.
checkLength
(
category
.
getCategoryTitle
()+
""
,
1
,
100
))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.length"
,
this
.
getResString
(
"category.title"
),
"1"
,
"100"
));
}
/**
* 更新分类列表
* @param category 分类实体
*/
@ApiOperation
(
value
=
"更新分类列表接口"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"编号"
,
required
=
true
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryTitle"
,
value
=
"栏目管理名称"
,
required
=
true
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryId"
,
value
=
"所属栏目"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryType"
,
value
=
"栏目管理属性"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categorySort"
,
value
=
"自定义顺序"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryListUrl"
,
value
=
"列表模板"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryUrl"
,
value
=
"内容模板"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryKeyword"
,
value
=
"栏目管理关键字"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryDescrip"
,
value
=
"栏目管理描述"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryImg"
,
value
=
"缩略图"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryDiyUrl"
,
value
=
"自定义链接"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"mdiyModelId"
,
value
=
"栏目管理的内容模型id"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryDatetime"
,
value
=
"类别发布时间"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"dictId"
,
value
=
"字典对应编号"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryFlag"
,
value
=
"栏目属性"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryPath"
,
value
=
"栏目路径"
,
required
=
false
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryParentId"
,
value
=
"父类型编号"
,
required
=
false
,
paramType
=
"query"
),
})
@PostMapping
(
"/update"
)
@ResponseBody
@LogAnn
(
title
=
"更新分类"
,
businessType
=
BusinessTypeEnum
.
UPDATE
)
@RequiresPermissions
(
"cms:category:update"
)
public
ResultData
update
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
//验证缩略图参数值是否合法
if
(!
category
.
getCategoryImg
().
matches
(
"^\\[.{1,}]$"
)
||
category
.
getCategoryImg
()
==
null
)
{
category
.
setCategoryImg
(
""
);
}
//验证栏目管理名称的值是否合法
if
(
StringUtil
.
isBlank
(
category
.
getCategoryTitle
()))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.empty"
,
this
.
getResString
(
"category.title"
)));
}
if
(!
StringUtil
.
checkLength
(
category
.
getCategoryTitle
()
+
""
,
1
,
100
))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.length"
,
this
.
getResString
(
"category.title"
),
"1"
,
"100"
));
}
if
(!
StringUtil
.
checkLength
(
category
.
getCategoryPath
()+
""
,
0
,
100
)){
return
ResultData
.
build
().
error
(
getResString
(
"err.length"
,
this
.
getResString
(
"category.path"
),
"1"
,
"100"
));
}
if
(!
StringUtil
.
checkLength
(
category
.
getCategoryParentIds
()+
""
,
0
,
100
)){
return
ResultData
.
build
().
error
(
getResString
(
"err.length"
,
this
.
getResString
(
"category.parent.id"
),
"1"
,
"100"
));
}
//判断拼音是否重复并且是否和原拼音相同
if
(
StrUtil
.
isNotBlank
(
category
.
getCategoryPinyin
())
&&
!
categoryBiz
.
getById
(
category
.
getId
()).
getCategoryPinyin
().
equals
(
category
.
getCategoryPinyin
()))
{
CategoryEntity
_category
=
new
CategoryEntity
();
_category
.
setCategoryPinyin
(
category
.
getCategoryPinyin
());
List
<
CategoryEntity
>
query
=
categoryBiz
.
query
(
_category
);
if
(
query
.
size
()
>
0
)
{
return
ResultData
.
build
().
error
(
getResString
(
"err.exist"
,
this
.
getResString
(
"category.pinyin"
)));
}
}
String
pingYin
=
PinYinUtil
.
getPingYin
(
category
.
getCategoryTitle
());
//如果用户填写了拼音则使用用户填写的
if
(
StrUtil
.
isNotBlank
(
category
.
getCategoryPinyin
()))
{
pingYin
=
category
.
getCategoryPinyin
();
}
CategoryEntity
categoryEntity
=
new
CategoryEntity
();
categoryEntity
.
setCategoryPinyin
(
pingYin
);
CategoryEntity
categoryBizEntity
=
categoryBiz
.
getEntity
(
categoryEntity
);
category
.
setCategoryPinyin
(
pingYin
);
//如果存在此拼音栏目则拼接上id
if
(
categoryBizEntity
!=
null
&&!
categoryBizEntity
.
getId
().
equals
(
category
.
getId
())){
category
.
setCategoryPinyin
(
pingYin
+
category
.
getId
());
}
//判断是否选择子级为所属栏目
CategoryEntity
_category
=
new
CategoryEntity
();
_category
.
setId
(
category
.
getId
());
List
<
CategoryEntity
>
categoryList
=
categoryBiz
.
queryChildren
(
_category
);
if
(
categoryList
.
size
()>
1
)
{
for
(
CategoryEntity
item:
categoryList
){
if
(
item
.
getId
().
equals
(
category
.
getCategoryId
())){
return
ResultData
.
build
().
error
(
getResString
(
"cannot.select.child"
));
}
}
category
.
setLeaf
(
false
);
}
else
{
category
.
setLeaf
(
true
);
}
if
(!
StringUtil
.
checkLength
(
category
.
getCategoryPath
()
+
""
,
0
,
100
))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.length"
,
this
.
getResString
(
"category.path"
),
"1"
,
"100"
));
}
if
(!
StringUtil
.
checkLength
(
category
.
getCategoryParentIds
()
+
""
,
0
,
100
))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.length"
,
this
.
getResString
(
"category.parent.id"
),
"1"
,
"100"
));
}
//判断拼音是否重复并且是否和原拼音相同
if
(
StrUtil
.
isNotBlank
(
category
.
getCategoryPinyin
())
&&
!
categoryBiz
.
getById
(
category
.
getId
()).
getCategoryPinyin
().
equals
(
category
.
getCategoryPinyin
()))
{
if
(!
category
.
getCategoryPinyin
().
matches
(
"^[a-zA-Z0-9]*$"
)){
return
ResultData
.
build
().
error
(
this
.
getResString
(
"err.format"
));
}
CategoryEntity
_category
=
new
CategoryEntity
();
_category
.
setCategoryPinyin
(
category
.
getCategoryPinyin
());
List
<
CategoryEntity
>
query
=
categoryBiz
.
query
(
_category
);
if
(
query
.
size
()
>
0
)
{
return
ResultData
.
build
().
error
(
getResString
(
"err.exist"
,
this
.
getResString
(
"category.pinyin"
)));
}
}
String
pingYin
=
PinYinUtil
.
getPingYin
(
category
.
getCategoryTitle
());
//如果用户填写了拼音则使用用户填写的
if
(
StrUtil
.
isNotBlank
(
category
.
getCategoryPinyin
()))
{
pingYin
=
category
.
getCategoryPinyin
();
}
CategoryEntity
categoryEntity
=
new
CategoryEntity
();
categoryEntity
.
setCategoryPinyin
(
pingYin
);
CategoryEntity
categoryBizEntity
=
categoryBiz
.
getEntity
(
categoryEntity
);
category
.
setCategoryPinyin
(
pingYin
);
//如果存在此拼音栏目则拼接上id
if
(
categoryBizEntity
!=
null
&&
!
categoryBizEntity
.
getId
().
equals
(
category
.
getId
()))
{
category
.
setCategoryPinyin
(
pingYin
+
category
.
getId
());
}
//判断是否选择子级为所属栏目
CategoryEntity
_category
=
new
CategoryEntity
();
_category
.
setId
(
category
.
getId
());
List
<
CategoryEntity
>
categoryList
=
categoryBiz
.
queryChildren
(
_category
);
if
(
categoryList
.
size
()
>
1
)
{
for
(
CategoryEntity
item
:
categoryList
)
{
if
(
item
.
getId
().
equals
(
category
.
getCategoryId
()))
{
return
ResultData
.
build
().
error
(
getResString
(
"cannot.select.child"
));
}
}
category
.
setLeaf
(
false
);
}
else
{
category
.
setLeaf
(
true
);
}
// 这里不能使用mybitsplus 存在业务
categoryBiz
.
updateEntity
(
category
);
return
ResultData
.
build
().
success
(
category
);
}
// 这里不能使用mybitsplus 存在业务
categoryBiz
.
updateEntity
(
category
);
return
ResultData
.
build
().
success
(
category
);
}
/**
* 验证拼音
* @param category 栏目
* @return
*/
@ApiOperation
(
value
=
"验证拼音"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"编号"
,
required
=
true
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryPinyin"
,
value
=
"栏目管拼音"
,
required
=
true
,
paramType
=
"query"
),
})
@GetMapping
(
"/verifyPingYin"
)
@ResponseBody
public
ResultData
verifyPingYin
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
long
count
=
categoryBiz
.
count
(
Wrappers
.<
CategoryEntity
>
lambdaQuery
()
.
ne
(
StrUtil
.
isNotBlank
(
category
.
getId
()),
CategoryEntity:
:
getId
,
category
.
getId
())
.
eq
(
CategoryEntity:
:
getCategoryPinyin
,
category
.
getCategoryPinyin
()));
/**
* 验证拼音
* @param category 栏目
* @return
*/
@ApiOperation
(
value
=
"验证拼音"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"编号"
,
required
=
true
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"categoryPinyin"
,
value
=
"栏目管拼音"
,
required
=
true
,
paramType
=
"query"
),
})
@GetMapping
(
"/verifyPingYin"
)
@ResponseBody
public
ResultData
verifyPingYin
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
long
count
=
categoryBiz
.
count
(
Wrappers
.<
CategoryEntity
>
lambdaQuery
()
.
ne
(
StrUtil
.
isNotBlank
(
category
.
getId
()),
CategoryEntity:
:
getId
,
category
.
getId
())
.
eq
(
CategoryEntity:
:
getCategoryPinyin
,
category
.
getCategoryPinyin
()));
if
(
count
>
0
)
{
return
ResultData
.
build
().
error
(
"存在相同拼音的栏目"
);
}
return
ResultData
.
build
().
success
();
}
if
(
count
>
0
)
{
return
ResultData
.
build
().
error
(
"存在相同拼音的栏目"
);
}
return
ResultData
.
build
().
success
();
}
/**
* 批量更新模版
* @param category 栏目实体
* @return
*/
@ApiOperation
(
value
=
"批量更新模版"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"编号"
,
required
=
true
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"dictId"
,
value
=
"字典"
,
required
=
true
,
paramType
=
"query"
)
})
@GetMapping
(
"/updateTemplate"
)
@ResponseBody
@RequiresPermissions
(
"cms:category:update"
)
public
ResultData
updateTemplate
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
if
(
category
==
null
||
StringUtils
.
isEmpty
(
category
.
getId
()))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.error"
,
this
.
getResString
(
"id"
)));
}
category
=
categoryBiz
.
getById
(
category
.
getId
());
category
.
setCategoryParentIds
(
null
);
List
<
CategoryEntity
>
childs
=
categoryBiz
.
queryChildren
(
category
);
//更新与父节点相同类型的子栏目的模板内容
for
(
int
i
=
0
;
i
<
childs
.
size
();
i
++)
{
if
(
childs
.
get
(
i
).
getCategoryType
().
equals
(
category
.
getCategoryType
()))
{
childs
.
get
(
i
).
setCategoryUrl
(
category
.
getCategoryUrl
());
childs
.
get
(
i
).
setCategoryListUrl
(
category
.
getCategoryListUrl
());
categoryBiz
.
updateEntity
(
childs
.
get
(
i
));
}
}
return
ResultData
.
build
().
success
();
}
/**
* 批量更新模版
* @param category 栏目实体
* @return
*/
@ApiOperation
(
value
=
"批量更新模版"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"编号"
,
required
=
true
,
paramType
=
"query"
),
@ApiImplicitParam
(
name
=
"dictId"
,
value
=
"字典"
,
required
=
true
,
paramType
=
"query"
)
})
@GetMapping
(
"/updateTemplate"
)
@ResponseBody
@RequiresPermissions
(
"cms:category:update"
)
public
ResultData
updateTemplate
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
if
(
category
==
null
||
StringUtils
.
isEmpty
(
category
.
getId
()))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.error"
,
this
.
getResString
(
"id"
)));
}
category
=
categoryBiz
.
getById
(
category
.
getId
());
category
.
setCategoryParentIds
(
null
);
List
<
CategoryEntity
>
childs
=
categoryBiz
.
queryChildren
(
category
);
//更新与父节点相同类型的子栏目的模板内容
for
(
int
i
=
0
;
i
<
childs
.
size
();
i
++)
{
if
(
childs
.
get
(
i
).
getCategoryType
().
equals
(
category
.
getCategoryType
()))
{
childs
.
get
(
i
).
setCategoryUrl
(
category
.
getCategoryUrl
());
childs
.
get
(
i
).
setCategoryListUrl
(
category
.
getCategoryListUrl
());
categoryBiz
.
updateEntity
(
childs
.
get
(
i
));
}
}
return
ResultData
.
build
().
success
();
}
/**
* 复制栏目
* @param category 栏目实体
* @return
*/
@ApiOperation
(
value
=
"复制栏目"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"编号"
,
required
=
true
,
paramType
=
"query"
)
})
@GetMapping
(
"/copyCategory"
)
@ResponseBody
@RequiresPermissions
(
"cms:category:save"
)
public
ResultData
copyCategory
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
if
(
category
==
null
||
StringUtils
.
isEmpty
(
category
.
getId
()))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.error"
,
this
.
getResString
(
"id"
)));
}
categoryBiz
.
copyCategory
(
category
);
return
ResultData
.
build
().
success
();
}
/**
* 复制栏目
* @param category 栏目实体
* @return
*/
@ApiOperation
(
value
=
"复制栏目"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"编号"
,
required
=
true
,
paramType
=
"query"
)
})
@GetMapping
(
"/copyCategory"
)
@ResponseBody
@RequiresPermissions
(
"cms:category:save"
)
public
ResultData
copyCategory
(
@ModelAttribute
@ApiIgnore
CategoryEntity
category
)
{
if
(
category
==
null
||
StringUtils
.
isEmpty
(
category
.
getId
()))
{
return
ResultData
.
build
().
error
(
getResString
(
"err.error"
,
this
.
getResString
(
"id"
)));
}
categoryBiz
.
copyCategory
(
category
);
return
ResultData
.
build
().
success
();
}
}
src/main/java/net/mingsoft/cms/bean/CategoryBean.java
View file @
644f0bdc
...
...
@@ -18,33 +18,33 @@
* 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
.
bean
;
import
net.mingsoft.cms.entity.CategoryEntity
;
/**
* 文章实体
* @author 铭飞开发团队
* 创建日期:2019-11-28 15:12:32<br/>
* 历史修订:<br/>
*/
public
class
CategoryBean
extends
CategoryEntity
{
/**
* 文章编号
*/
private
String
articleId
;
public
String
getArticleId
()
{
return
articleId
;
}
public
void
setArticleId
(
String
articleId
)
{
this
.
articleId
=
articleId
;
}
}
package
net
.
mingsoft
.
cms
.
bean
;
import
net.mingsoft.cms.entity.CategoryEntity
;
/**
* 文章实体
* @author 铭飞开发团队
* 创建日期:2019-11-28 15:12:32<br/>
* 历史修订:<br/>
*/
public
class
CategoryBean
extends
CategoryEntity
{
/**
* 文章编号
*/
private
String
articleId
;
public
String
getArticleId
()
{
return
articleId
;
}
public
void
setArticleId
(
String
articleId
)
{
this
.
articleId
=
articleId
;
}
}
src/main/java/net/mingsoft/cms/biz/ICategoryBiz.java
View file @
644f0bdc
...
...
@@ -18,44 +18,44 @@
* 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
.
biz
;
import
net.mingsoft.base.biz.IBaseBiz
;
import
net.mingsoft.cms.entity.CategoryEntity
;
import
java.util.List
;
/**
* 分类业务
* @author 铭飞开发团队
* 创建日期:2019-11-28 15:12:32<br/>
* 历史修订:<br/>
*/
public
interface
ICategoryBiz
extends
IBaseBiz
<
CategoryEntity
>
{
/**
* 查询当前分类下的所有子分类,包含自身
* @param category 通过setId指定栏目id
* @return
*/
List
<
CategoryEntity
>
queryChildren
(
CategoryEntity
category
);
void
saveEntity
(
CategoryEntity
entity
);
/**更新父级及子集
* @param entity
*/
void
updateEntity
(
CategoryEntity
entity
);
/**只更新自身
* @param entity
*/
void
update
(
CategoryEntity
entity
);
void
delete
(
String
categoryId
);
void
copyCategory
(
CategoryEntity
entity
);
}
package
net
.
mingsoft
.
cms
.
biz
;
import
net.mingsoft.base.biz.IBaseBiz
;
import
net.mingsoft.cms.entity.CategoryEntity
;
import
java.util.List
;
/**
* 分类业务
* @author 铭飞开发团队
* 创建日期:2019-11-28 15:12:32<br/>
* 历史修订:<br/>
*/
public
interface
ICategoryBiz
extends
IBaseBiz
<
CategoryEntity
>
{
/**
* 查询当前分类下的所有子分类,包含自身
* @param category 通过setId指定栏目id
* @return
*/
List
<
CategoryEntity
>
queryChildren
(
CategoryEntity
category
);
void
saveEntity
(
CategoryEntity
entity
);
/**更新父级及子集
* @param entity
*/
void
updateEntity
(
CategoryEntity
entity
);
/**只更新自身
* @param entity
*/
void
update
(
CategoryEntity
entity
);
void
delete
(
String
categoryId
);
void
copyCategory
(
CategoryEntity
entity
);
}
src/main/java/net/mingsoft/cms/biz/IHistoryLogBiz.java
View file @
644f0bdc
...
...
@@ -18,19 +18,19 @@
* 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
.
biz
;
import
net.mingsoft.base.biz.IBaseBiz
;
/**
* 文章浏览记录业务
* @author 铭飞开发团队
* 创建日期:2019-12-23 9:24:03<br/>
* 历史修订:<br/>
*/
public
interface
IHistoryLogBiz
extends
IBaseBiz
{
}
package
net
.
mingsoft
.
cms
.
biz
;
import
net.mingsoft.base.biz.IBaseBiz
;
/**
* 文章浏览记录业务
* @author 铭飞开发团队
* 创建日期:2019-12-23 9:24:03<br/>
* 历史修订:<br/>
*/
public
interface
IHistoryLogBiz
extends
IBaseBiz
{
}
src/main/java/net/mingsoft/cms/biz/impl/CategoryBizImpl.java
View file @
644f0bdc
...
...
@@ -18,301 +18,301 @@
* 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
.
biz
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
net.mingsoft.base.biz.impl.BaseBizImpl
;
import
net.mingsoft.base.dao.IBaseDao
;
import
net.mingsoft.basic.util.PinYinUtil
;
import
net.mingsoft.cms.biz.ICategoryBiz
;
import
net.mingsoft.cms.dao.ICategoryDao
;
import
net.mingsoft.cms.dao.IContentDao
;
import
net.mingsoft.cms.entity.CategoryEntity
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 分类管理持久化层
* @author 铭飞开发团队
* 创建日期:2019-11-28 15:12:32<br/>
* 历史修订:<br/>
*/
@Service
(
"cmscategoryBizImpl"
)
@Transactional
(
rollbackFor
=
RuntimeException
.
class
)
public
class
CategoryBizImpl
extends
BaseBizImpl
<
ICategoryDao
,
CategoryEntity
>
implements
ICategoryBiz
{
@Autowired
private
ICategoryDao
categoryDao
;
@Autowired
private
IContentDao
contentDao
;
@Override
protected
IBaseDao
getDao
()
{
// TODO Auto-generated method stub
return
categoryDao
;
}
@Override
public
List
<
CategoryEntity
>
queryChildren
(
CategoryEntity
category
)
{
// TODO Auto-generated method stub
return
categoryDao
.
queryChildren
(
category
);
}
@Override
public
void
saveEntity
(
CategoryEntity
categoryEntity
)
{
// TODO Auto-generated method stub
String
pingYin
=
PinYinUtil
.
getPingYin
(
categoryEntity
.
getCategoryTitle
());
//如果用户自己填入了拼音则使用用户的
if
(
StrUtil
.
isNotBlank
(
categoryEntity
.
getCategoryPinyin
()))
{
pingYin
=
categoryEntity
.
getCategoryPinyin
();
}
CategoryEntity
category
=
new
CategoryEntity
();
category
.
setCategoryPinyin
(
pingYin
);
Object
categoryBizEntity
=
getEntity
(
category
);
setParentId
(
categoryEntity
);
categoryEntity
.
setCategoryPinyin
(
pingYin
);
//更新新的父级
if
(
StrUtil
.
isNotBlank
(
categoryEntity
.
getCategoryId
())
&&
!
"0"
.
equals
(
categoryEntity
.
getCategoryId
()))
{
CategoryEntity
parent
=
getById
(
categoryEntity
.
getCategoryId
());
//如果之前是叶子节点就更新
if
(
parent
.
getLeaf
())
{
parent
.
setLeaf
(
false
);
updateById
(
parent
);
}
}
categoryEntity
.
setLeaf
(
false
);
//如果是新增栏目一定是叶子节点
if
(
StrUtil
.
isEmpty
(
categoryEntity
.
getId
()))
{
categoryEntity
.
setLeaf
(
true
);
}
super
.
save
(
categoryEntity
);
//拼音存在则拼接id
if
(
categoryBizEntity
!=
null
)
{
categoryEntity
.
setCategoryPinyin
(
pingYin
+
categoryEntity
.
getId
());
}
CategoryEntity
parentCategory
=
null
;
if
(
StringUtils
.
isNotBlank
(
categoryEntity
.
getCategoryId
()))
{
parentCategory
=
(
CategoryEntity
)
getById
(
categoryEntity
.
getCategoryId
());
}
//保存链接地址
String
path
=
ObjectUtil
.
isNotNull
(
parentCategory
)
?
parentCategory
.
getCategoryPath
()
:
""
;
categoryEntity
.
setCategoryPath
(
path
+
"/"
+
categoryEntity
.
getCategoryPinyin
());
setTopId
(
categoryEntity
);
super
.
updateById
(
categoryEntity
);
}
private
void
setParentId
(
CategoryEntity
categoryEntity
)
{
String
path
=
""
;
if
(
StringUtils
.
isNotEmpty
(
categoryEntity
.
getCategoryId
())
&&
Long
.
parseLong
(
categoryEntity
.
getCategoryId
())
>
0
)
{
CategoryEntity
category
=
(
CategoryEntity
)
getById
(
categoryEntity
.
getCategoryId
());
path
=
category
.
getCategoryPath
();
if
(
StringUtils
.
isEmpty
(
category
.
getCategoryParentIds
()))
{
categoryEntity
.
setCategoryParentIds
(
category
.
getId
());
}
else
{
categoryEntity
.
setCategoryParentIds
(
category
.
getCategoryParentIds
()
+
","
+
category
.
getId
());
}
}
else
{
categoryEntity
.
setCategoryParentIds
(
null
);
}
//保存时先保存再修改链接地址,修改时直接修改
if
(
StringUtils
.
isNotBlank
(
categoryEntity
.
getId
()))
{
categoryEntity
.
setCategoryPath
(
path
+
"/"
+
categoryEntity
.
getCategoryPinyin
());
}
}
private
void
setChildParentId
(
CategoryEntity
categoryEntity
,
String
topId
)
{
CategoryEntity
category
=
new
CategoryEntity
();
category
.
setCategoryId
(
categoryEntity
.
getId
());
List
<
CategoryEntity
>
list
=
categoryDao
.
query
(
category
);
list
.
forEach
(
x
->
{
if
(
StringUtils
.
isEmpty
(
categoryEntity
.
getCategoryParentIds
()))
{
x
.
setCategoryParentIds
(
categoryEntity
.
getId
());
}
else
{
x
.
setCategoryParentIds
(
categoryEntity
.
getCategoryParentIds
()
+
","
+
categoryEntity
.
getId
());
}
//更新topid
x
.
setTopId
(
topId
);
String
path
=
categoryEntity
.
getCategoryPath
();
//判断是否有parentIds
x
.
setCategoryPath
(
path
+
"/"
+
x
.
getCategoryPinyin
());
//去除多余的/符号
super
.
updateEntity
(
x
);
setChildParentId
(
x
,
topId
);
});
}
@Override
public
void
updateEntity
(
CategoryEntity
entity
)
{
setParentId
(
entity
);
String
pingYin
=
entity
.
getCategoryPinyin
();
if
(
StrUtil
.
isNotBlank
(
pingYin
))
{
CategoryEntity
category
=
new
CategoryEntity
();
category
.
setCategoryPinyin
(
pingYin
);
CategoryEntity
categoryBizEntity
=
(
CategoryEntity
)
getEntity
(
category
);
//拼音存在则拼接id
if
(
categoryBizEntity
!=
null
&&
!
categoryBizEntity
.
getId
().
equals
(
entity
.
getId
()))
{
entity
.
setCategoryPinyin
(
pingYin
+
entity
.
getId
());
}
}
setParentLeaf
(
entity
);
setTopId
(
entity
);
//如果父级栏目和父级id为空字符串则转化成null
if
(
StringUtils
.
isEmpty
(
entity
.
getCategoryId
()))
{
entity
.
setCategoryId
(
null
);
}
if
(
StringUtils
.
isEmpty
(
entity
.
getCategoryParentIds
()))
{
entity
.
setCategoryParentIds
(
null
);
}
categoryDao
.
updateEntity
(
entity
);
//更新子节点所有父节点id和topid
//如果本节点的topid为0(顶级栏目),则把自身的id作为子栏目的topid,非0所有的子栏目和本栏目使用同一个topid
String
topId
=
entity
.
getTopId
();
if
(
topId
.
equals
(
"0"
))
{
topId
=
entity
.
getId
();
}
setChildParentId
(
entity
,
topId
);
}
@Override
public
void
update
(
CategoryEntity
entity
)
{
super
.
updateEntity
(
entity
);
}
@Override
public
void
delete
(
String
categoryId
)
{
// TODO Auto-generated method stub
CategoryEntity
category
=
(
CategoryEntity
)
categoryDao
.
selectById
(
categoryId
);
//删除父类
if
(
category
!=
null
)
{
List
<
CategoryEntity
>
childrenList
=
categoryDao
.
queryChildren
(
category
);
List
<
String
>
ids
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
childrenList
.
size
();
i
++)
{
//删除子类
ids
.
add
(
childrenList
.
get
(
i
).
getId
());
}
categoryDao
.
deleteBatchIds
(
ids
);
// 删除文章
contentDao
.
deleteEntityByCategoryIds
(
ids
.
toArray
(
new
String
[
ids
.
size
()]));
//获取被删节点的父节点
CategoryEntity
parentNode
=
categoryDao
.
selectById
(
category
.
getCategoryId
());
//获取被删节点的所属栏目的其他节点
List
<
CategoryEntity
>
childNode
=
categoryDao
.
queryChildren
(
parentNode
);
//判断删除的是否为主节点
if
(
parentNode
!=
null
)
{
UpdateWrapper
<
CategoryEntity
>
updateWrapper
=
new
UpdateWrapper
<>();
//如果没有子节点进行更新代码
if
(
childNode
.
size
()
==
1
)
{
updateWrapper
.
eq
(
"id"
,
parentNode
.
getId
()).
set
(
"leaf"
,
1
);
categoryDao
.
update
(
null
,
updateWrapper
);
}
}
}
}
/**
* 设置父级叶子节点
* @param entity
*/
private
void
setParentLeaf
(
CategoryEntity
entity
)
{
CategoryEntity
categoryEntity
=
getById
(
entity
.
getId
());
//如果父级不为空并且修改了父级则需要更新父级
if
(
entity
.
getCategoryId
()
!=
null
&&
!
entity
.
getCategoryId
().
equals
(
categoryEntity
.
getCategoryId
()))
{
//更新旧的父级
if
(
StrUtil
.
isNotBlank
(
categoryEntity
.
getCategoryId
())
&&
!
"0"
.
equals
(
categoryEntity
.
getCategoryId
()))
{
CategoryEntity
parent
=
getById
(
categoryEntity
.
getCategoryId
());
//如果修改了父级则需要判断父级是否还有子节点
boolean
leaf
=
parent
.
getLeaf
();
//查找不等于当前更新的分类子集,有则不是叶子节点
QueryWrapper
<
CategoryEntity
>
queryWrapper
=
new
QueryWrapper
<>();
parent
.
setLeaf
(
count
(
queryWrapper
.
eq
(
"category_id"
,
parent
.
getId
()).
ne
(
"id"
,
entity
.
getId
()))
==
0
);
if
(
leaf
!=
parent
.
getLeaf
())
{
updateById
(
parent
);
}
}
//更新新的父级
if
(
StrUtil
.
isNotBlank
(
entity
.
getCategoryId
())
&&
!
"0"
.
equals
(
entity
.
getCategoryId
()))
{
CategoryEntity
parent
=
getById
(
entity
.
getCategoryId
());
//如果之前是叶子节点就更新
if
(
parent
.
getLeaf
())
{
parent
.
setLeaf
(
false
);
updateById
(
parent
);
}
}
}
}
/**
* 设置顶级id
* @param entity
*/
private
void
setTopId
(
CategoryEntity
entity
)
{
String
categoryParentId
=
entity
.
getCategoryParentIds
();
if
(
StrUtil
.
isNotBlank
(
categoryParentId
))
{
String
[]
ids
=
categoryParentId
.
split
(
","
);
//如果有ParentId就取第一个
if
(
ids
.
length
>
0
)
{
entity
.
setTopId
(
ids
[
0
]);
return
;
}
}
entity
.
setTopId
(
"0"
);
}
@Override
public
void
copyCategory
(
CategoryEntity
category
)
{
String
oldId
=
category
.
getId
();
//先保存被复制第一层栏目,因为第一层栏目不需要变更父级栏目
category
=
getById
(
oldId
);
//id、拼音和路径按照原来的业务逻辑生成
category
.
setId
(
null
);
category
.
setCategoryPinyin
(
null
);
category
.
setCategoryPath
(
null
);
saveEntity
(
category
);
//传入简要被复制子栏目的id和复制后的生成的id,复制的子栏目全部使用
recursionCopyChilds
(
oldId
,
category
.
getId
());
}
/*
* 递归复制子栏目
* @param oldParentId:被复制的父级栏目id(需要数据库原来存在该数据)
* @param newParentId:复制栏目后新父级的id(新插入数据的id)
* */
private
void
recursionCopyChilds
(
String
oldParentId
,
String
newParentId
)
{
CategoryEntity
_category
=
new
CategoryEntity
();
_category
.
setCategoryId
(
oldParentId
);
List
<
CategoryEntity
>
childs
=
query
(
_category
);
for
(
CategoryEntity
child
:
childs
)
{
String
childId
=
child
.
getId
();
//id、拼音和路径按照原来的业务逻辑生成
child
.
setId
(
null
);
child
.
setCategoryPinyin
(
null
);
child
.
setCategoryPath
(
null
);
child
.
setCategoryId
(
newParentId
);
saveEntity
(
child
);
//如果该栏目下还有子栏目则继续复制该栏目里的子栏目
recursionCopyChilds
(
childId
,
child
.
getId
());
}
}
}
package
net
.
mingsoft
.
cms
.
biz
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
net.mingsoft.base.biz.impl.BaseBizImpl
;
import
net.mingsoft.base.dao.IBaseDao
;
import
net.mingsoft.basic.util.PinYinUtil
;
import
net.mingsoft.cms.biz.ICategoryBiz
;
import
net.mingsoft.cms.dao.ICategoryDao
;
import
net.mingsoft.cms.dao.IContentDao
;
import
net.mingsoft.cms.entity.CategoryEntity
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 分类管理持久化层
* @author 铭飞开发团队
* 创建日期:2019-11-28 15:12:32<br/>
* 历史修订:<br/>
*/
@Service
(
"cmscategoryBizImpl"
)
@Transactional
(
rollbackFor
=
RuntimeException
.
class
)
public
class
CategoryBizImpl
extends
BaseBizImpl
<
ICategoryDao
,
CategoryEntity
>
implements
ICategoryBiz
{
@Autowired
private
ICategoryDao
categoryDao
;
@Autowired
private
IContentDao
contentDao
;
@Override
protected
IBaseDao
getDao
()
{
// TODO Auto-generated method stub
return
categoryDao
;
}
@Override
public
List
<
CategoryEntity
>
queryChildren
(
CategoryEntity
category
)
{
// TODO Auto-generated method stub
return
categoryDao
.
queryChildren
(
category
);
}
@Override
public
void
saveEntity
(
CategoryEntity
categoryEntity
)
{
// TODO Auto-generated method stub
String
pingYin
=
PinYinUtil
.
getPingYin
(
categoryEntity
.
getCategoryTitle
());
//如果用户自己填入了拼音则使用用户的
if
(
StrUtil
.
isNotBlank
(
categoryEntity
.
getCategoryPinyin
()))
{
pingYin
=
categoryEntity
.
getCategoryPinyin
();
}
CategoryEntity
category
=
new
CategoryEntity
();
category
.
setCategoryPinyin
(
pingYin
);
Object
categoryBizEntity
=
getEntity
(
category
);
setParentId
(
categoryEntity
);
categoryEntity
.
setCategoryPinyin
(
pingYin
);
//更新新的父级
if
(
StrUtil
.
isNotBlank
(
categoryEntity
.
getCategoryId
())
&&
!
"0"
.
equals
(
categoryEntity
.
getCategoryId
()))
{
CategoryEntity
parent
=
getById
(
categoryEntity
.
getCategoryId
());
//如果之前是叶子节点就更新
if
(
parent
.
getLeaf
())
{
parent
.
setLeaf
(
false
);
updateById
(
parent
);
}
}
categoryEntity
.
setLeaf
(
false
);
//如果是新增栏目一定是叶子节点
if
(
StrUtil
.
isEmpty
(
categoryEntity
.
getId
()))
{
categoryEntity
.
setLeaf
(
true
);
}
super
.
save
(
categoryEntity
);
//拼音存在则拼接id
if
(
categoryBizEntity
!=
null
)
{
categoryEntity
.
setCategoryPinyin
(
pingYin
+
categoryEntity
.
getId
());
}
CategoryEntity
parentCategory
=
null
;
if
(
StringUtils
.
isNotBlank
(
categoryEntity
.
getCategoryId
()))
{
parentCategory
=
(
CategoryEntity
)
getById
(
categoryEntity
.
getCategoryId
());
}
//保存链接地址
String
path
=
ObjectUtil
.
isNotNull
(
parentCategory
)
?
parentCategory
.
getCategoryPath
()
:
""
;
categoryEntity
.
setCategoryPath
(
path
+
"/"
+
categoryEntity
.
getCategoryPinyin
());
setTopId
(
categoryEntity
);
super
.
updateById
(
categoryEntity
);
}
private
void
setParentId
(
CategoryEntity
categoryEntity
)
{
String
path
=
""
;
if
(
StringUtils
.
isNotEmpty
(
categoryEntity
.
getCategoryId
())
&&
Long
.
parseLong
(
categoryEntity
.
getCategoryId
())
>
0
)
{
CategoryEntity
category
=
(
CategoryEntity
)
getById
(
categoryEntity
.
getCategoryId
());
path
=
category
.
getCategoryPath
();
if
(
StringUtils
.
isEmpty
(
category
.
getCategoryParentIds
()))
{
categoryEntity
.
setCategoryParentIds
(
category
.
getId
());
}
else
{
categoryEntity
.
setCategoryParentIds
(
category
.
getCategoryParentIds
()
+
","
+
category
.
getId
());
}
}
else
{
categoryEntity
.
setCategoryParentIds
(
null
);
}
//保存时先保存再修改链接地址,修改时直接修改
if
(
StringUtils
.
isNotBlank
(
categoryEntity
.
getId
()))
{
categoryEntity
.
setCategoryPath
(
path
+
"/"
+
categoryEntity
.
getCategoryPinyin
());
}
}
private
void
setChildParentId
(
CategoryEntity
categoryEntity
,
String
topId
)
{
CategoryEntity
category
=
new
CategoryEntity
();
category
.
setCategoryId
(
categoryEntity
.
getId
());
List
<
CategoryEntity
>
list
=
categoryDao
.
query
(
category
);
list
.
forEach
(
x
->
{
if
(
StringUtils
.
isEmpty
(
categoryEntity
.
getCategoryParentIds
()))
{
x
.
setCategoryParentIds
(
categoryEntity
.
getId
());
}
else
{
x
.
setCategoryParentIds
(
categoryEntity
.
getCategoryParentIds
()
+
","
+
categoryEntity
.
getId
());
}
//更新topid
x
.
setTopId
(
topId
);
String
path
=
categoryEntity
.
getCategoryPath
();
//判断是否有parentIds
x
.
setCategoryPath
(
path
+
"/"
+
x
.
getCategoryPinyin
());
//去除多余的/符号
super
.
updateEntity
(
x
);
setChildParentId
(
x
,
topId
);
});
}
@Override
public
void
updateEntity
(
CategoryEntity
entity
)
{
setParentId
(
entity
);
String
pingYin
=
entity
.
getCategoryPinyin
();
if
(
StrUtil
.
isNotBlank
(
pingYin
))
{
CategoryEntity
category
=
new
CategoryEntity
();
category
.
setCategoryPinyin
(
pingYin
);
CategoryEntity
categoryBizEntity
=
(
CategoryEntity
)
getEntity
(
category
);
//拼音存在则拼接id
if
(
categoryBizEntity
!=
null
&&
!
categoryBizEntity
.
getId
().
equals
(
entity
.
getId
()))
{
entity
.
setCategoryPinyin
(
pingYin
+
entity
.
getId
());
}
}
setParentLeaf
(
entity
);
setTopId
(
entity
);
//如果父级栏目和父级id为空字符串则转化成null
if
(
StringUtils
.
isEmpty
(
entity
.
getCategoryId
()))
{
entity
.
setCategoryId
(
null
);
}
if
(
StringUtils
.
isEmpty
(
entity
.
getCategoryParentIds
()))
{
entity
.
setCategoryParentIds
(
null
);
}
categoryDao
.
updateEntity
(
entity
);
//更新子节点所有父节点id和topid
//如果本节点的topid为0(顶级栏目),则把自身的id作为子栏目的topid,非0所有的子栏目和本栏目使用同一个topid
String
topId
=
entity
.
getTopId
();
if
(
topId
.
equals
(
"0"
))
{
topId
=
entity
.
getId
();
}
setChildParentId
(
entity
,
topId
);
}
@Override
public
void
update
(
CategoryEntity
entity
)
{
super
.
updateEntity
(
entity
);
}
@Override
public
void
delete
(
String
categoryId
)
{
// TODO Auto-generated method stub
CategoryEntity
category
=
(
CategoryEntity
)
categoryDao
.
selectById
(
categoryId
);
//删除父类
if
(
category
!=
null
)
{
List
<
CategoryEntity
>
childrenList
=
categoryDao
.
queryChildren
(
category
);
List
<
String
>
ids
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
childrenList
.
size
();
i
++)
{
//删除子类
ids
.
add
(
childrenList
.
get
(
i
).
getId
());
}
categoryDao
.
deleteBatchIds
(
ids
);
// 删除文章
contentDao
.
deleteEntityByCategoryIds
(
ids
.
toArray
(
new
String
[
ids
.
size
()]));
//获取被删节点的父节点
CategoryEntity
parentNode
=
categoryDao
.
selectById
(
category
.
getCategoryId
());
//获取被删节点的所属栏目的其他节点
List
<
CategoryEntity
>
childNode
=
categoryDao
.
queryChildren
(
parentNode
);
//判断删除的是否为主节点
if
(
parentNode
!=
null
)
{
UpdateWrapper
<
CategoryEntity
>
updateWrapper
=
new
UpdateWrapper
<>();
//如果没有子节点进行更新代码
if
(
childNode
.
size
()
==
1
)
{
updateWrapper
.
eq
(
"id"
,
parentNode
.
getId
()).
set
(
"leaf"
,
1
);
categoryDao
.
update
(
null
,
updateWrapper
);
}
}
}
}
/**
* 设置父级叶子节点
* @param entity
*/
private
void
setParentLeaf
(
CategoryEntity
entity
)
{
CategoryEntity
categoryEntity
=
getById
(
entity
.
getId
());
//如果父级不为空并且修改了父级则需要更新父级
if
(
entity
.
getCategoryId
()
!=
null
&&
!
entity
.
getCategoryId
().
equals
(
categoryEntity
.
getCategoryId
()))
{
//更新旧的父级
if
(
StrUtil
.
isNotBlank
(
categoryEntity
.
getCategoryId
())
&&
!
"0"
.
equals
(
categoryEntity
.
getCategoryId
()))
{
CategoryEntity
parent
=
getById
(
categoryEntity
.
getCategoryId
());
//如果修改了父级则需要判断父级是否还有子节点
boolean
leaf
=
parent
.
getLeaf
();
//查找不等于当前更新的分类子集,有则不是叶子节点
QueryWrapper
<
CategoryEntity
>
queryWrapper
=
new
QueryWrapper
<>();
parent
.
setLeaf
(
count
(
queryWrapper
.
eq
(
"category_id"
,
parent
.
getId
()).
ne
(
"id"
,
entity
.
getId
()))
==
0
);
if
(
leaf
!=
parent
.
getLeaf
())
{
updateById
(
parent
);
}
}
//更新新的父级
if
(
StrUtil
.
isNotBlank
(
entity
.
getCategoryId
())
&&
!
"0"
.
equals
(
entity
.
getCategoryId
()))
{
CategoryEntity
parent
=
getById
(
entity
.
getCategoryId
());
//如果之前是叶子节点就更新
if
(
parent
.
getLeaf
())
{
parent
.
setLeaf
(
false
);
updateById
(
parent
);
}
}
}
}
/**
* 设置顶级id
* @param entity
*/
private
void
setTopId
(
CategoryEntity
entity
)
{
String
categoryParentId
=
entity
.
getCategoryParentIds
();
if
(
StrUtil
.
isNotBlank
(
categoryParentId
))
{
String
[]
ids
=
categoryParentId
.
split
(
","
);
//如果有ParentId就取第一个
if
(
ids
.
length
>
0
)
{
entity
.
setTopId
(
ids
[
0
]);
return
;
}
}
entity
.
setTopId
(
"0"
);
}
@Override
public
void
copyCategory
(
CategoryEntity
category
)
{
String
oldId
=
category
.
getId
();
//先保存被复制第一层栏目,因为第一层栏目不需要变更父级栏目
category
=
getById
(
oldId
);
//id、拼音和路径按照原来的业务逻辑生成
category
.
setId
(
null
);
category
.
setCategoryPinyin
(
null
);
category
.
setCategoryPath
(
null
);
saveEntity
(
category
);
//传入简要被复制子栏目的id和复制后的生成的id,复制的子栏目全部使用
recursionCopyChilds
(
oldId
,
category
.
getId
());
}
/*
* 递归复制子栏目
* @param oldParentId:被复制的父级栏目id(需要数据库原来存在该数据)
* @param newParentId:复制栏目后新父级的id(新插入数据的id)
* */
private
void
recursionCopyChilds
(
String
oldParentId
,
String
newParentId
)
{
CategoryEntity
_category
=
new
CategoryEntity
();
_category
.
setCategoryId
(
oldParentId
);
List
<
CategoryEntity
>
childs
=
query
(
_category
);
for
(
CategoryEntity
child
:
childs
)
{
String
childId
=
child
.
getId
();
//id、拼音和路径按照原来的业务逻辑生成
child
.
setId
(
null
);
child
.
setCategoryPinyin
(
null
);
child
.
setCategoryPath
(
null
);
child
.
setCategoryId
(
newParentId
);
saveEntity
(
child
);
//如果该栏目下还有子栏目则继续复制该栏目里的子栏目
recursionCopyChilds
(
childId
,
child
.
getId
());
}
}
}
src/main/java/net/mingsoft/cms/constant/Const.java
View file @
644f0bdc
...
...
@@ -18,17 +18,17 @@
* 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
.
constant
;
/**
* @Author: 铭飞开源团队--huise
* @Date: 2019/8/9 20:51
*/
public
class
Const
{
/**
* 资源文件
*/
public
final
static
String
RESOURCES
=
"net.mingsoft.cms.resources.resources"
;
}
package
net
.
mingsoft
.
cms
.
constant
;
/**
* @Author: 铭飞开源团队--huise
* @Date: 2019/8/9 20:51
*/
public
class
Const
{
/**
* 资源文件
*/
public
final
static
String
RESOURCES
=
"net.mingsoft.cms.resources.resources"
;
}
src/main/java/net/mingsoft/cms/dao/ICategoryDao.java
View file @
644f0bdc
...
...
@@ -18,30 +18,30 @@
* 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
.
dao
;
import
net.mingsoft.base.dao.IBaseDao
;
import
net.mingsoft.cms.entity.CategoryEntity
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
/**
* 分类持久层
* @author 铭飞开发团队
* 创建日期:2019-11-28 15:12:32<br/>
* 历史修订:<br/>
*/
@Component
(
"cmsCategoryDao"
)
public
interface
ICategoryDao
extends
IBaseDao
<
CategoryEntity
>
{
/**
* 查询当前分类下面的所有子分类
* @param category 必须存在categoryId categoryParentId
* @return
*/
public
List
<
CategoryEntity
>
queryChildren
(
CategoryEntity
category
);
}
package
net
.
mingsoft
.
cms
.
dao
;
import
net.mingsoft.base.dao.IBaseDao
;
import
net.mingsoft.cms.entity.CategoryEntity
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
/**
* 分类持久层
* @author 铭飞开发团队
* 创建日期:2019-11-28 15:12:32<br/>
* 历史修订:<br/>
*/
@Component
(
"cmsCategoryDao"
)
public
interface
ICategoryDao
extends
IBaseDao
<
CategoryEntity
>
{
/**
* 查询当前分类下面的所有子分类
* @param category 必须存在categoryId categoryParentId
* @return
*/
public
List
<
CategoryEntity
>
queryChildren
(
CategoryEntity
category
);
}
src/main/java/net/mingsoft/cms/dao/ICmsHistoryLogDao.java
View file @
644f0bdc
...
...
@@ -18,17 +18,17 @@
* 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
.
dao
;
import
net.mingsoft.base.dao.IBaseDao
;
/**
* 文章浏览记录持久层
* @author 铭飞开发团队
* 创建日期:2019-12-23 9:24:03<br/>
* 历史修订:<br/>
*/
public
interface
ICmsHistoryLogDao
extends
IBaseDao
{
}
package
net
.
mingsoft
.
cms
.
dao
;
import
net.mingsoft.base.dao.IBaseDao
;
/**
* 文章浏览记录持久层
* @author 铭飞开发团队
* 创建日期:2019-12-23 9:24:03<br/>
* 历史修订:<br/>
*/
public
interface
ICmsHistoryLogDao
extends
IBaseDao
{
}
src/main/java/net/mingsoft/cms/entity/CategoryEntity.java
View file @
644f0bdc
...
...
@@ -7,10 +7,10 @@
* 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:
* <p>
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
* <p>
* 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
...
...
@@ -24,6 +24,11 @@ package net.mingsoft.cms.entity;
import
com.baomidou.mybatisplus.annotation.*
;
import
net.mingsoft.base.entity.BaseEntity
;
import
net.mingsoft.basic.util.BasicUtil
;
import
net.mingsoft.config.MSProperties
;
import
net.mingsoft.mdiy.util.ConfigUtil
;
import
java.io.File
;
/**
* 分类实体
...
...
@@ -131,6 +136,21 @@ public class CategoryEntity extends BaseEntity {
*/
private
String
topId
;
/**
* 路径url
*/
@TableField
(
exist
=
false
)
private
String
url
;
/**
* 设置url路径
*
* @param url 路径的字符串
*/
public
void
setUrl
(
String
url
)
{
this
.
url
=
url
;
}
public
Boolean
getLeaf
()
{
return
leaf
;
}
...
...
@@ -419,7 +439,8 @@ public class CategoryEntity extends BaseEntity {
* 获取栏目Id(标签使用)
*/
public
Boolean
getTypeleaf
()
{
return
this
.
leaf
;
}
return
this
.
leaf
;
}
/**
...
...
@@ -431,6 +452,7 @@ public class CategoryEntity extends BaseEntity {
@TableField
(
exist
=
false
)
private
String
typepath
;
/**
* 获取栏目图片 (标签使用)
*/
...
...
@@ -462,4 +484,22 @@ public class CategoryEntity extends BaseEntity {
this
.
childsize
=
childsize
;
}
/**
* 获取url路径
*
* @return url路径的字符串
*/
public
String
getUrl
()
{
String
appDir
=
""
;
String
htmlDir
=
MSProperties
.
diy
.
htmlDir
;
String
categoryPath
=
this
.
getCategoryPath
();
String
categoryPinyin
=
this
.
getCategoryPinyin
();
if
(!(
ConfigUtil
.
getBoolean
(
"短链配置"
,
"shortLinkSwitch"
,
false
)))
{
//未开启短链
appDir
=
"/"
+
BasicUtil
.
getApp
().
getAppDir
();
return
url
=
"/"
+
htmlDir
+
appDir
+
categoryPath
+
"/index.html"
;
}
//开启短链后的url拼接
return
url
=
"/"
+
htmlDir
+
appDir
+
"/"
+
categoryPinyin
+
".html"
;
}
}
src/main/java/net/mingsoft/config/WebConfig.java
View file @
644f0bdc
...
...
@@ -132,7 +132,8 @@ public class WebConfig implements WebMvcConfigurer {
@Bean
public
FilterRegistrationBean
xssFilterRegistration
(
@Value
(
"${ms.xss.enable:true}"
)
boolean
xssEnable
,
@Value
(
"${ms.xss.filter-url}"
)
String
filterUrl
,
@Value
(
"${ms.xss.exclude-url}"
)
String
excludeUrl
)
{
@Value
(
"${ms.xss.exclude-url}"
)
String
excludeUrl
,
@Value
(
"${ms.xss.exclude-filed}"
)
String
excludeFiled
)
{
XSSEscapeFilter
xssFilter
=
new
XSSEscapeFilter
();
Map
<
String
,
String
>
initParameters
=
new
HashMap
();
FilterRegistrationBean
registration
=
new
FilterRegistrationBean
();
...
...
@@ -149,6 +150,9 @@ public class WebConfig implements WebMvcConfigurer {
}
else
{
xssFilter
.
excludes
.
add
(
MSProperties
.
manager
.
path
+
"/**"
);
}
if
(
excludeFiled
!=
null
&&
StrUtil
.
isNotBlank
(
excludeFiled
))
{
xssFilter
.
excludesFiled
.
addAll
(
Arrays
.
asList
(
excludeFiled
.
split
(
","
)));
}
initParameters
.
put
(
"isIncludeRichText"
,
"false"
);
registration
.
setInitParameters
(
initParameters
);
registration
.
setFilter
(
xssFilter
);
...
...
src/main/webapp/template/1/default/news-detail.htm
View file @
644f0bdc
...
...
@@ -92,7 +92,6 @@
},
},
created
()
{
this
.
likeTotal
()
}
})
</script>
...
...
Write
Preview
Markdown
is supported
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