Merge remote-tracking branch 'origin/master'

This commit is contained in:
不期而遇 2021-05-22 11:11:52 +08:00
commit 3865ba6cfb
8 changed files with 267 additions and 278 deletions

View File

@ -25,7 +25,7 @@
<p align="center"> <p align="center">
<a href="https://www.mingsoft.net" target="_blank">铭飞平台</a> <a href="https://www.mingsoft.net" target="_blank">铭飞平台</a>
<a href="http://cms.demo.mingsoft.net/ms/login.do" target="_blank">在线演示</a> <a href="http://cms.demo.mingsoft.net/ms/login.do" target="_blank">在线演示</a>
<a href="http://doc.mingsoft.net/plugs-cms/" target="_blank">在线使用手册</a> <a href="http://doc.mingsoft.net/mcms/" target="_blank">在线使用手册</a>
<a href="https://mingsoft.ke.qq.com/?tuin=383187f3#tab=1&category=-1" target="_blank">腾讯课堂在线视频</a><br/> <a href="https://mingsoft.ke.qq.com/?tuin=383187f3#tab=1&category=-1" target="_blank">腾讯课堂在线视频</a><br/>
<a href="https://ke.qq.com/course/3026403" target="_blank">代码生成器视频教程</a><br/> <a href="https://ke.qq.com/course/3026403" target="_blank">代码生成器视频教程</a><br/>
<a href="https://cloud.189.cn/t/I3maM3uURjmm" target="_blank">Windows一键运行版本\Linux一键运行版本</a> <a href="https://cloud.189.cn/t/I3maM3uURjmm" target="_blank">Windows一键运行版本\Linux一键运行版本</a>
@ -90,7 +90,7 @@ git clone https://gitee.com/mingSoft/MCMS.git<br/>
5、创建数据库db-mcms-open数据库使用utf-8编码导入doc/mcms-版本号.sql如果升级现有系统请使用-up-*.sql升级如果导入了系统对应的完整版SQLsql升级补丁不需要重复导入<br/> 5、创建数据库db-mcms-open数据库使用utf-8编码导入doc/mcms-版本号.sql如果升级现有系统请使用-up-*.sql升级如果导入了系统对应的完整版SQLsql升级补丁不需要重复导入<br/>
6、修改src\main\resources\application-dev.yml文件中的数据库设置参数<br/> 6、修改src\main\resources\application-dev.yml文件中的数据库设置参数<br/>
7、运行MSApplication.java main方法<br/> 7、运行MSApplication.java main方法<br/>
8、首先先访问后台地址http://ip|域名/项目发布名/ms/login.do管理员账号用户名msopen 密码msopen进入后台点击内容管理->静态化菜单,进行"生成主页""生成栏目","生成文章"操作一遍 (注意!!!是后台登录界面,不是会员中心登录界面) 8、首先先访问后台地址http://localhost:8080/ms/login.do管理员账号用户名msopen 密码msopen进入后台点击内容管理->静态化菜单,进行"生成主页""生成栏目","生成文章"操作一遍 (注意!!!是后台登录界面,不是会员中心登录界面)
# 技术选型 # 技术选型
@ -152,7 +152,7 @@ git clone https://gitee.com/mingSoft/MCMS.git<br/>
# 文档 # 文档
* 使用手册 http://doc.mingsoft.net/plugs-cms/ * 使用手册 http://doc.mingsoft.net/mcms/
# 软件截图 # 软件截图

View File

@ -33,3 +33,5 @@ UPDATE `mdiy_tag_sql` SET `tag_id` = 7, `tag_sql` = 'SELECT\ncms_content.id as i
UPDATE `mdiy_tag_sql` SET `tag_id` = 8, `tag_sql` = '<#assign select=\"(SELECT \'\')\"/>\n<#if orderby?? >\n <#if orderby==\"date\">\n <#assign _orderby=\"content_datetime\">\n <#elseif orderby==\"updatedate\">\n <#assign _orderby=\"content_updatetime\">\n <#elseif orderby==\"hit\">\n <#assign _orderby=\"content_hit\">\n <#elseif orderby==\"sort\">\n <#assign _orderby=\"content_sort\">\n <#else><#assign _orderby=\"cms_content.id\"></#if>\n <#else>\n <#assign _orderby=\"cms_content.id\">\n </#if>\n<#if pageTag.preId??>\nSELECT\ncms_content.id as id,\nleft(content_title,${titlelen?default(40)}) as title,\ncontent_title as fulltitle,\ncontent_author as author, \ncontent_source as source, \ncontent_details as content,\ncategory.category_title as typename,\ncategory.category_id as typeid,\n(SELECT \'index.html\') as typelink,\ncontent_img as litpic,\n<#--内容页动态链接-->\n <#if isDo?? && isDo>\n CONCAT(\'/${modelName}/view.do?id=\', cms_content.id,\'&orderby=${_orderby}\',\'&order=${order!\'ASC\'}\',\'&typeid=${typeid}\') as \"link\",\n <#else>\n CONCAT(category_path,\'/\',cms_content.id,\'.html\') AS \"link\",\n </#if>\ncontent_datetime as \"date\",\ncontent_description as descrip,\ncontent_hit as hit,\ncontent_type as flag,\ncontent_keyword as keyword \nFROM cms_content\nLEFT JOIN cms_category as category ON cms_content.category_id=category.id\nWHERE cms_content.id=${pageTag.preId}\n<#else>\nSELECT\n${select} as id,\n${select} as title,\n${select} as fulltitle,\n${select} as author, \n${select} as source, \n${select} as content,\n${select} as typename,\n${select} as typeid,\n${select} as typelink,\n${select} as litpic,\n${select} as \"link\",\n${select} as \"date\",\n${select} as descrip,\n${select} as hit,\n${select} as flag,\n${select} as keyword FROM cms_content\n</#if>', `sort` = NULL, `UPDATE_BY` = NULL, `UPDATE_DATE` = NULL, `CREATE_BY` = NULL, `CREATE_DATE` = NULL, `DEL` = 0 WHERE `id` = 9; UPDATE `mdiy_tag_sql` SET `tag_id` = 8, `tag_sql` = '<#assign select=\"(SELECT \'\')\"/>\n<#if orderby?? >\n <#if orderby==\"date\">\n <#assign _orderby=\"content_datetime\">\n <#elseif orderby==\"updatedate\">\n <#assign _orderby=\"content_updatetime\">\n <#elseif orderby==\"hit\">\n <#assign _orderby=\"content_hit\">\n <#elseif orderby==\"sort\">\n <#assign _orderby=\"content_sort\">\n <#else><#assign _orderby=\"cms_content.id\"></#if>\n <#else>\n <#assign _orderby=\"cms_content.id\">\n </#if>\n<#if pageTag.preId??>\nSELECT\ncms_content.id as id,\nleft(content_title,${titlelen?default(40)}) as title,\ncontent_title as fulltitle,\ncontent_author as author, \ncontent_source as source, \ncontent_details as content,\ncategory.category_title as typename,\ncategory.category_id as typeid,\n(SELECT \'index.html\') as typelink,\ncontent_img as litpic,\n<#--内容页动态链接-->\n <#if isDo?? && isDo>\n CONCAT(\'/${modelName}/view.do?id=\', cms_content.id,\'&orderby=${_orderby}\',\'&order=${order!\'ASC\'}\',\'&typeid=${typeid}\') as \"link\",\n <#else>\n CONCAT(category_path,\'/\',cms_content.id,\'.html\') AS \"link\",\n </#if>\ncontent_datetime as \"date\",\ncontent_description as descrip,\ncontent_hit as hit,\ncontent_type as flag,\ncontent_keyword as keyword \nFROM cms_content\nLEFT JOIN cms_category as category ON cms_content.category_id=category.id\nWHERE cms_content.id=${pageTag.preId}\n<#else>\nSELECT\n${select} as id,\n${select} as title,\n${select} as fulltitle,\n${select} as author, \n${select} as source, \n${select} as content,\n${select} as typename,\n${select} as typeid,\n${select} as typelink,\n${select} as litpic,\n${select} as \"link\",\n${select} as \"date\",\n${select} as descrip,\n${select} as hit,\n${select} as flag,\n${select} as keyword FROM cms_content\n</#if>', `sort` = NULL, `UPDATE_BY` = NULL, `UPDATE_DATE` = NULL, `CREATE_BY` = NULL, `CREATE_DATE` = NULL, `DEL` = 0 WHERE `id` = 9;
UPDATE `mdiy_tag_sql` SET `tag_id` = 9, `tag_sql` = 'select\n<#if !(pageTag.indexUrl??)>\n <#--判断是否有栏目对象,用于搜索不传栏目-->\n <#if column??>\n <#assign path=column.categoryPath/>\n <#else>\n <#assign path=\"\"/>\n </#if>\n <#--总记录数、总页数-->\n (SELECT ${pageTag.total}) as \"total\",\n (SELECT ${pageTag.size}) as \"size\",\n\n <#--记录总数-->\n (SELECT ${pageTag.rcount}) as \"rcount\",\n <#--当前页码-->\n (SELECT ${pageTag.pageNo}) as \"cur\",\n <#--首页-->\n CONCAT(\'${path}\', \'/index.html\') as \"index\",\n <#--上一页-->\n <#if (pageTag.pageNo?eval-1) gt 1>\n CONCAT(\'${path}\',\'/list-${pageTag.pageNo?eval-1}.html\') as \"pre\",\n <#else>\n CONCAT(\'${path}\',\'/index.html\') as \"pre\",\n </#if>\n\n <#--下一页-->\n <#if pageTag.total==1>\n CONCAT(\'${path}\', \'/index.html\') as \"next\",\n CONCAT(\'${path}\', \'/index.html\') as \"last\"\n <#else>\n <#if pageTag.pageNo?eval gte pageTag.total>\n CONCAT(\'${path}\',\'/list-${pageTag.total}.html\') as \"next\",\n <#else>\n CONCAT(\'${path}\',\'/list-${pageTag.pageNo?eval+1}.html\') as \"next\",\n </#if>\n <#--最后一页-->\n CONCAT(\'${path}\',\'/list-${pageTag.total}.html\') as \"last\"\n </#if>\n\n<#else>\n <#--判断是否是搜索页面-->\n \'${pageTag.indexUrl}\' as \"index\",\n \'${pageTag.lastUrl}\' as \"last\",\n \'${pageTag.preUrl}\' as \"pre\",\n \'${pageTag.nextUrl}\' as \"next\",\n \'${pageTag.total}\' as \"total\",\n \'${pageTag.size}\' as \"size\",\n \'${pageTag.rcount}\' as \"rcount\",\n \'${pageTag.pageNo}\' as \"cur\"\n</#if>', `sort` = NULL, `UPDATE_BY` = NULL, `UPDATE_DATE` = NULL, `CREATE_BY` = NULL, `CREATE_DATE` = NULL, `DEL` = 0 WHERE `id` = 10; UPDATE `mdiy_tag_sql` SET `tag_id` = 9, `tag_sql` = 'select\n<#if !(pageTag.indexUrl??)>\n <#--判断是否有栏目对象,用于搜索不传栏目-->\n <#if column??>\n <#assign path=column.categoryPath/>\n <#else>\n <#assign path=\"\"/>\n </#if>\n <#--总记录数、总页数-->\n (SELECT ${pageTag.total}) as \"total\",\n (SELECT ${pageTag.size}) as \"size\",\n\n <#--记录总数-->\n (SELECT ${pageTag.rcount}) as \"rcount\",\n <#--当前页码-->\n (SELECT ${pageTag.pageNo}) as \"cur\",\n <#--首页-->\n CONCAT(\'${path}\', \'/index.html\') as \"index\",\n <#--上一页-->\n <#if (pageTag.pageNo?eval-1) gt 1>\n CONCAT(\'${path}\',\'/list-${pageTag.pageNo?eval-1}.html\') as \"pre\",\n <#else>\n CONCAT(\'${path}\',\'/index.html\') as \"pre\",\n </#if>\n\n <#--下一页-->\n <#if pageTag.total==1>\n CONCAT(\'${path}\', \'/index.html\') as \"next\",\n CONCAT(\'${path}\', \'/index.html\') as \"last\"\n <#else>\n <#if pageTag.pageNo?eval gte pageTag.total>\n CONCAT(\'${path}\',\'/list-${pageTag.total}.html\') as \"next\",\n <#else>\n CONCAT(\'${path}\',\'/list-${pageTag.pageNo?eval+1}.html\') as \"next\",\n </#if>\n <#--最后一页-->\n CONCAT(\'${path}\',\'/list-${pageTag.total}.html\') as \"last\"\n </#if>\n\n<#else>\n <#--判断是否是搜索页面-->\n \'${pageTag.indexUrl}\' as \"index\",\n \'${pageTag.lastUrl}\' as \"last\",\n \'${pageTag.preUrl}\' as \"pre\",\n \'${pageTag.nextUrl}\' as \"next\",\n \'${pageTag.total}\' as \"total\",\n \'${pageTag.size}\' as \"size\",\n \'${pageTag.rcount}\' as \"rcount\",\n \'${pageTag.pageNo}\' as \"cur\"\n</#if>', `sort` = NULL, `UPDATE_BY` = NULL, `UPDATE_DATE` = NULL, `CREATE_BY` = NULL, `CREATE_DATE` = NULL, `DEL` = 0 WHERE `id` = 10;
UPDATE `mdiy_tag_sql` SET `tag_id` = 10, `tag_sql` = '<#assign select=\"(SELECT \'\')\"/>\n<#if orderby?? >\n <#if orderby==\"date\">\n <#assign _orderby=\"content_datetime\">\n <#elseif orderby==\"updatedate\">\n <#assign _orderby=\"content_updatetime\">\n <#elseif orderby==\"hit\">\n <#assign _orderby=\"content_hit\">\n <#elseif orderby==\"sort\">\n <#assign _orderby=\"content_sort\">\n <#else><#assign _orderby=\"cms_content.id\"></#if>\n <#else>\n <#assign _orderby=\"cms_content.id\">\n </#if>\n<#if pageTag.nextId??>\nSELECT\ncms_content.id as id,\nleft(content_title,${titlelen?default(40)}) as title,\ncontent_title as fulltitle,\ncontent_author as author, \ncontent_source as source, \ncontent_details as content,\ncategory.category_title as typename,\ncategory.category_id as typeid,\n(SELECT \'index.html\') as typelink,\ncontent_img as litpic,\n<#--内容页动态链接-->\n <#if isDo?? && isDo>\n CONCAT(\'/${modelName}/view.do?id=\', cms_content.id,\'&orderby=${_orderby}\',\'&order=${order!\'ASC\'}\',\'&typeid=${typeid}\') as \"link\",\n <#else>\n CONCAT(category_path,\'/\',cms_content.id,\'.html\') AS \"link\",\n </#if>\ncontent_datetime as \"date\",\ncontent_description as descrip,\ncontent_hit as hit,\ncontent_type as flag,\ncontent_keyword as keyword \nFROM cms_content\nLEFT JOIN cms_category as category ON cms_content.category_id=category.id\nWHERE cms_content.id=${pageTag.nextId}\n<#else>\nSELECT\n${select} as id,\n${select} as title,\n${select} as fulltitle,\n${select} as author, \n${select} as source, \n${select} as content,\n${select} as typename,\n${select} as typeid,\n${select} as typelink,\n${select} as litpic,\n${select} as \"link\",\n${select} as \"date\",\n${select} as descrip,\n${select} as hit,\n${select} as flag,\n${select} as keyword FROM cms_content\n</#if>', `sort` = NULL, `UPDATE_BY` = NULL, `UPDATE_DATE` = NULL, `CREATE_BY` = NULL, `CREATE_DATE` = NULL, `DEL` = 0 WHERE `id` = 11; UPDATE `mdiy_tag_sql` SET `tag_id` = 10, `tag_sql` = '<#assign select=\"(SELECT \'\')\"/>\n<#if orderby?? >\n <#if orderby==\"date\">\n <#assign _orderby=\"content_datetime\">\n <#elseif orderby==\"updatedate\">\n <#assign _orderby=\"content_updatetime\">\n <#elseif orderby==\"hit\">\n <#assign _orderby=\"content_hit\">\n <#elseif orderby==\"sort\">\n <#assign _orderby=\"content_sort\">\n <#else><#assign _orderby=\"cms_content.id\"></#if>\n <#else>\n <#assign _orderby=\"cms_content.id\">\n </#if>\n<#if pageTag.nextId??>\nSELECT\ncms_content.id as id,\nleft(content_title,${titlelen?default(40)}) as title,\ncontent_title as fulltitle,\ncontent_author as author, \ncontent_source as source, \ncontent_details as content,\ncategory.category_title as typename,\ncategory.category_id as typeid,\n(SELECT \'index.html\') as typelink,\ncontent_img as litpic,\n<#--内容页动态链接-->\n <#if isDo?? && isDo>\n CONCAT(\'/${modelName}/view.do?id=\', cms_content.id,\'&orderby=${_orderby}\',\'&order=${order!\'ASC\'}\',\'&typeid=${typeid}\') as \"link\",\n <#else>\n CONCAT(category_path,\'/\',cms_content.id,\'.html\') AS \"link\",\n </#if>\ncontent_datetime as \"date\",\ncontent_description as descrip,\ncontent_hit as hit,\ncontent_type as flag,\ncontent_keyword as keyword \nFROM cms_content\nLEFT JOIN cms_category as category ON cms_content.category_id=category.id\nWHERE cms_content.id=${pageTag.nextId}\n<#else>\nSELECT\n${select} as id,\n${select} as title,\n${select} as fulltitle,\n${select} as author, \n${select} as source, \n${select} as content,\n${select} as typename,\n${select} as typeid,\n${select} as typelink,\n${select} as litpic,\n${select} as \"link\",\n${select} as \"date\",\n${select} as descrip,\n${select} as hit,\n${select} as flag,\n${select} as keyword FROM cms_content\n</#if>', `sort` = NULL, `UPDATE_BY` = NULL, `UPDATE_DATE` = NULL, `CREATE_BY` = NULL, `CREATE_DATE` = NULL, `DEL` = 0 WHERE `id` = 11;
ALTER TABLE `cms_content` MODIFY COLUMN `content_display` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '是否显示0显示 1不显示';

File diff suppressed because one or more lines are too long

View File

@ -44,7 +44,6 @@
<groupId>net.mingsoft</groupId> <groupId>net.mingsoft</groupId>
<artifactId>ms-base</artifactId> <artifactId>ms-base</artifactId>
<version>2.1.0</version> <version>2.1.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.mingsoft</groupId> <groupId>net.mingsoft</groupId>
@ -60,6 +59,7 @@
<groupId>net.mingsoft</groupId> <groupId>net.mingsoft</groupId>
<artifactId>store-client</artifactId> <artifactId>store-client</artifactId>
<version>2.1.0</version> <version>2.1.0</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -1,22 +0,0 @@
package net.mingsoft.cms.action.web;
import net.mingsoft.base.action.BaseAction;
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.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller()
@RequestMapping("/")
public class ServerAction extends BaseAction {
@ResponseBody
@GetMapping("/server.do")
public String list(HttpServletRequest req, HttpServletResponse resp) {
LOG.debug("心跳");
return "";
}
}

View File

@ -7,10 +7,10 @@
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * 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, * the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions: * subject to the following conditions:
* <p>
* The above copyright notice and this permission notice shall be included in all * The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software. * copies or substantial portions of the Software.
* <p>
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
@ -48,271 +48,273 @@ import java.util.List;
* 创建日期2019-11-28 15:12:32<br/> * 创建日期2019-11-28 15:12:32<br/>
* 历史修订<br/> * 历史修订<br/>
*/ */
@Service("cmscategoryBizImpl") @Service("cmscategoryBizImpl")
@Transactional(rollbackFor = RuntimeException.class) @Transactional(rollbackFor = RuntimeException.class)
public class CategoryBizImpl extends BaseBizImpl<ICategoryDao, CategoryEntity> implements ICategoryBiz { public class CategoryBizImpl extends BaseBizImpl<ICategoryDao, CategoryEntity> implements ICategoryBiz {
@Autowired @Autowired
private ICategoryDao categoryDao; private ICategoryDao categoryDao;
@Autowired @Autowired
private IContentDao contentDao; private IContentDao contentDao;
@Override @Override
protected IBaseDao getDao() { protected IBaseDao getDao() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return categoryDao; return categoryDao;
} }
@Override @Override
public List<CategoryEntity> queryChilds(CategoryEntity category) { public List<CategoryEntity> queryChilds(CategoryEntity category) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return categoryDao.queryChildren(category); 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) { @Override
String path = ""; public void saveEntity(CategoryEntity categoryEntity) {
if(StringUtils.isNotEmpty(categoryEntity.getCategoryId())&&Long.parseLong(categoryEntity.getCategoryId())>0) { // TODO Auto-generated method stub
CategoryEntity category = (CategoryEntity)getById(categoryEntity.getCategoryId()); String pingYin = PinYinUtil.getPingYin(categoryEntity.getCategoryTitle());
path = category.getCategoryPath(); //如果用户自己填入了拼音则使用用户的
if(StringUtils.isEmpty(category.getCategoryParentIds())) { if (StrUtil.isNotBlank(categoryEntity.getCategoryPinyin())) {
categoryEntity.setCategoryParentIds(category.getId()); pingYin = categoryEntity.getCategoryPinyin();
} else { }
categoryEntity.setCategoryParentIds(category.getCategoryParentIds()+","+category.getId()); CategoryEntity category = new CategoryEntity();
} category.setCategoryPinyin(pingYin);
}else { Object categoryBizEntity = getEntity(category);
categoryEntity.setCategoryParentIds(null); setParentId(categoryEntity);
} categoryEntity.setCategoryPinyin(pingYin);
//保存时先保存再修改链接地址修改时直接修改 //更新新的父级
if(StringUtils.isNotBlank(categoryEntity.getId())) { if (StrUtil.isNotBlank(categoryEntity.getCategoryId()) && !"0".equals(categoryEntity.getCategoryId())) {
categoryEntity.setCategoryPath(path+ "/" + categoryEntity.getCategoryPinyin()); 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) {
private void setChildParentId(CategoryEntity categoryEntity, String topId) { String path = "";
CategoryEntity category=new CategoryEntity(); if (StringUtils.isNotEmpty(categoryEntity.getCategoryId()) && Long.parseLong(categoryEntity.getCategoryId()) > 0) {
category.setCategoryId(categoryEntity.getId()); CategoryEntity category = (CategoryEntity) getById(categoryEntity.getCategoryId());
List<CategoryEntity> list = categoryDao.query(category); path = category.getCategoryPath();
list.forEach(x->{ if (StringUtils.isEmpty(category.getCategoryParentIds())) {
if(StringUtils.isEmpty(categoryEntity.getCategoryParentIds())) { categoryEntity.setCategoryParentIds(category.getId());
x.setCategoryParentIds(categoryEntity.getId()); } else {
} else { categoryEntity.setCategoryParentIds(category.getCategoryParentIds() + "," + category.getId());
x.setCategoryParentIds(categoryEntity.getCategoryParentIds()+","+categoryEntity.getId()); }
} } else {
//更新topid categoryEntity.setCategoryParentIds(null);
x.setTopId(topId); }
String path=categoryEntity.getCategoryPath(); //保存时先保存再修改链接地址修改时直接修改
//判断是否有parentIds if (StringUtils.isNotBlank(categoryEntity.getId())) {
x.setCategoryPath(path+"/"+x.getCategoryPinyin()); categoryEntity.setCategoryPath(path + "/" + categoryEntity.getCategoryPinyin());
//去除多余的/符号 }
super.updateEntity(x);
setChildParentId(x, topId);
});
}
@Override }
public void updateEntity(CategoryEntity entity) {
setParentId(entity); private void setChildParentId(CategoryEntity categoryEntity, String topId) {
String pingYin =entity.getCategoryPinyin(); CategoryEntity category = new CategoryEntity();
if(StrUtil.isNotBlank(pingYin)){ category.setCategoryId(categoryEntity.getId());
CategoryEntity category=new CategoryEntity(); List<CategoryEntity> list = categoryDao.query(category);
category.setCategoryPinyin(pingYin); list.forEach(x -> {
CategoryEntity categoryBizEntity = (CategoryEntity)getEntity(category); if (StringUtils.isEmpty(categoryEntity.getCategoryParentIds())) {
//拼音存在则拼接id x.setCategoryParentIds(categoryEntity.getId());
if(categoryBizEntity!=null&&!categoryBizEntity.getId().equals(entity.getId())){ } else {
entity.setCategoryPinyin(pingYin+entity.getId()); x.setCategoryParentIds(categoryEntity.getCategoryParentIds() + "," + categoryEntity.getId());
} }
} //更新topid
setParentLeaf(entity); x.setTopId(topId);
setTopId(entity); String path = categoryEntity.getCategoryPath();
//如果父级栏目和父级id为空字符串则转化成null //判断是否有parentIds
if (StringUtils.isEmpty(entity.getCategoryId())) { x.setCategoryPath(path + "/" + x.getCategoryPinyin());
entity.setCategoryId(null); //去除多余的/符号
} super.updateEntity(x);
if (StringUtils.isEmpty(entity.getCategoryParentIds())) { setChildParentId(x, topId);
entity.setCategoryParentIds(null); });
} }
categoryDao.updateEntity(entity);
//更新子节点所有父节点id和topid @Override
//如果本节点的topid为0顶级栏目,则把自身的id作为子栏目的topid非0所有的子栏目和本栏目使用同一个topid public void updateEntity(CategoryEntity entity) {
String topId = entity.getTopId(); setParentId(entity);
if (topId.equals("0")) { String pingYin = entity.getCategoryPinyin();
topId = entity.getId(); if (StrUtil.isNotBlank(pingYin)) {
} CategoryEntity category = new CategoryEntity();
setChildParentId(entity, topId); 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 @Override
public void update(CategoryEntity entity) { public void update(CategoryEntity entity) {
super.updateEntity(entity); super.updateEntity(entity);
} }
@Override @Override
public void delete(String categoryId) { public void delete(String categoryId) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
CategoryEntity category = (CategoryEntity) categoryDao.selectById(categoryId); CategoryEntity category = (CategoryEntity) categoryDao.selectById(categoryId);
//删除父类 //删除父类
if(category != null){ if (category != null) {
category.setCategoryParentIds(null); category.setCategoryParentIds(null);
List<CategoryEntity> childrenList = categoryDao.queryChildren(category); List<CategoryEntity> childrenList = categoryDao.queryChildren(category);
List<String> ids = new ArrayList<>(); List<String> ids = new ArrayList<>();
for(int i = 0; i < childrenList.size(); i++){ for (int i = 0; i < childrenList.size(); i++) {
//删除子类 //删除子类
ids.add(childrenList.get(i).getId()); ids.add(childrenList.get(i).getId());
} }
categoryDao.deleteBatchIds(ids); categoryDao.deleteBatchIds(ids);
// 删除文章 // 删除文章
contentDao.deleteEntityByCategoryIds(ids.toArray(new String[ids.size()])); contentDao.deleteEntityByCategoryIds(ids.toArray(new String[ids.size()]));
//获取被删节点的父节点 //获取被删节点的父节点
CategoryEntity parentNode = categoryDao.selectById(category.getCategoryId()); CategoryEntity parentNode = categoryDao.selectById(category.getCategoryId());
//获取被删节点的所属栏目的其他节点 //获取被删节点的所属栏目的其他节点
List<CategoryEntity> childNode = categoryDao.queryChildren(parentNode); List<CategoryEntity> childNode = categoryDao.queryChildren(parentNode);
//判断删除的是否为主节点 //判断删除的是否为主节点
if (parentNode != null) { if (parentNode != null) {
UpdateWrapper<CategoryEntity> updateWrapper = new UpdateWrapper<>(); //清空CategoryParentIds,避免查找不必要的数据只需要当前的父级栏目
parentNode.setCategoryParentIds(null);
UpdateWrapper<CategoryEntity> updateWrapper = new UpdateWrapper<>();
//如果没有子节点进行更新代码
if (childNode.size() == 1) {
updateWrapper.eq("id", parentNode.getId()).set("leaf", 1);
categoryDao.update(null, updateWrapper);
}
//是否还有子节点 }
if (childNode.size() > 1)
updateWrapper.eq("id", parentNode.getId()).set("leaf", 0);
else
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);
}
/** }
* 设置父级叶子节点 //更新新的父级
* @param entity if (StrUtil.isNotBlank(entity.getCategoryId()) && !"0".equals(entity.getCategoryId())) {
*/ CategoryEntity parent = getById(entity.getCategoryId());
private void setParentLeaf(CategoryEntity entity){ //如果之前是叶子节点就更新
CategoryEntity categoryEntity = getById(entity.getId()); if (parent.getLeaf()) {
//如果父级不为空并且修改了父级则需要更新父级 parent.setLeaf(false);
if(entity.getCategoryId() != null && !entity.getCategoryId().equals(categoryEntity.getCategoryId())){ updateById(parent);
//更新旧的父级 }
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);
}
} /**
//更新新的父级 * 设置顶级id
if(StrUtil.isNotBlank(entity.getCategoryId())&&!"0".equals(entity.getCategoryId())){ * @param entity
CategoryEntity parent = getById(entity.getCategoryId()); */
//如果之前是叶子节点就更新 private void setTopId(CategoryEntity entity) {
if(parent.getLeaf()){ String categoryParentId = entity.getCategoryParentIds();
parent.setLeaf(false); if (StrUtil.isNotBlank(categoryParentId)) {
updateById(parent); String[] ids = categoryParentId.split(",");
} //如果有ParentId就取第一个
} if (ids.length > 0) {
} entity.setTopId(ids[0]);
} return;
}
}
entity.setTopId("0");
}
/** @Override
* 设置顶级id public void copyCategory(CategoryEntity category) {
* @param entity String oldId = category.getId();
*/ //先保存被复制第一层栏目因为第一层栏目不需要变更父级栏目
private void setTopId(CategoryEntity entity){ category = getById(oldId);
String categoryParentId = entity.getCategoryParentIds(); //id拼音和路径按照原来的业务逻辑生成
if(StrUtil.isNotBlank(categoryParentId)){ category.setId(null);
String[] ids = categoryParentId.split(","); category.setCategoryPinyin(null);
//如果有ParentId就取第一个 category.setCategoryPath(null);
if(ids.length>0){ saveEntity(category);
entity.setTopId(ids[0]); //传入简要被复制子栏目的id和复制后的生成的id复制的子栏目全部使用
return; recursionCopyChilds(oldId, category.getId());
} }
}
entity.setTopId("0");
}
@Override /*
public void copyCategory(CategoryEntity category) { * 递归复制子栏目
String oldId = category.getId(); * @param oldParentId被复制的父级栏目id需要数据库原来存在该数据
//先保存被复制第一层栏目因为第一层栏目不需要变更父级栏目 * @param newParentId复制栏目后新父级的id新插入数据的id
category = getById(oldId); * */
//id拼音和路径按照原来的业务逻辑生成 private void recursionCopyChilds(String oldParentId, String newParentId) {
category.setId(null); CategoryEntity _category = new CategoryEntity();
category.setCategoryPinyin(null); _category.setCategoryId(oldParentId);
category.setCategoryPath(null); List<CategoryEntity> childs = query(_category);
saveEntity(category); for (CategoryEntity child : childs) {
//传入简要被复制子栏目的id和复制后的生成的id复制的子栏目全部使用 String childId = child.getId();
recursionCopyChilds(oldId, category.getId()); //id拼音和路径按照原来的业务逻辑生成
} child.setId(null);
child.setCategoryPinyin(null);
/* child.setCategoryPath(null);
* 递归复制子栏目 child.setCategoryId(newParentId);
* @param oldParentId被复制的父级栏目id需要数据库原来存在该数据 saveEntity(child);
* @param newParentId复制栏目后新父级的id新插入数据的id //如果该栏目下还有子栏目则继续复制该栏目里的子栏目
* */ recursionCopyChilds(childId, child.getId());
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());
}
}
} }

View File

@ -98,6 +98,8 @@ public class CategoryEntity extends BaseEntity {
* 缩略图 * 缩略图
*/ */
private String categoryImg; private String categoryImg;
/** /**
* 自定义链接 * 自定义链接
*/ */
@ -452,4 +454,5 @@ public class CategoryEntity extends BaseEntity {
public String getTypelitpic() { public String getTypelitpic() {
return categoryImg; return categoryImg;
} }
} }

View File

@ -12,6 +12,8 @@ logging:
name: mcms.log #会在项目的根目录下生成对应的mcms.log文件也可以根据实际情况写绝对路径例如d:/mcms.log name: mcms.log #会在项目的根目录下生成对应的mcms.log文件也可以根据实际情况写绝对路径例如d:/mcms.log
path: log #会在项目的根目录下生成log目录里面会生成对应的日期目录日期目录下面生成日志压缩包备份文件,默认按每10M分割一个日志文件例如log/2020-01/app-2020-01-03-18.1.log.gz表示2020年1月3号下午六点的第一个备份也可以根据实际情况写绝对路径例如d:/log path: log #会在项目的根目录下生成log目录里面会生成对应的日期目录日期目录下面生成日志压缩包备份文件,默认按每10M分割一个日志文件例如log/2020-01/app-2020-01-03-18.1.log.gz表示2020年1月3号下午六点的第一个备份也可以根据实际情况写绝对路径例如d:/log
ms: ms:
mstore-url: http://store.i.mingsoft.net
mstore-host: store.i.mingsoft.net
diy: diy:
html-dir: html html-dir: html
# scheme: https #解决使用代理服务器代理应用时标签解析域名依旧为http的问题 # scheme: https #解决使用代理服务器代理应用时标签解析域名依旧为http的问题