diff --git a/src/main/java/net/mingsoft/cms/action/BaseAction.java b/src/main/java/net/mingsoft/cms/action/BaseAction.java index 51c6905b..0d1cbbe0 100755 --- a/src/main/java/net/mingsoft/cms/action/BaseAction.java +++ b/src/main/java/net/mingsoft/cms/action/BaseAction.java @@ -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; + } +} diff --git a/src/main/java/net/mingsoft/cms/action/CategoryAction.java b/src/main/java/net/mingsoft/cms/action/CategoryAction.java index 7de2a89b..1ed3fee1 100755 --- a/src/main/java/net/mingsoft/cms/action/CategoryAction.java +++ b/src/main/java/net/mingsoft/cms/action/CategoryAction.java @@ -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: - + *

* The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - + *

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR @@ -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
* 历史修订:
*/ -@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())); - } + @RequestMapping(value = "/list", method = {RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public ResultData list(@ModelAttribute @ApiIgnore CategoryEntity category) { + BasicUtil.startPage(); + List categoryList = categoryBiz.list(new LambdaQueryWrapper(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"; - } + /** + * 返回编辑界面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 = "获取分类列表接口") + @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())) { + 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 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())) { - CategoryEntity _category = new CategoryEntity(); - _category.setCategoryPinyin(category.getCategoryPinyin()); - List 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 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 categorys) { - for(int i = 0;i 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 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())) { - CategoryEntity _category = new CategoryEntity(); - _category.setCategoryPinyin(category.getCategoryPinyin()); - List 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 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.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.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 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 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(); + } } diff --git a/src/main/java/net/mingsoft/cms/bean/CategoryBean.java b/src/main/java/net/mingsoft/cms/bean/CategoryBean.java index bf45e17a..de8ac7ab 100755 --- a/src/main/java/net/mingsoft/cms/bean/CategoryBean.java +++ b/src/main/java/net/mingsoft/cms/bean/CategoryBean.java @@ -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
-* 历史修订:
-*/ -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
+* 历史修订:
+*/ +public class CategoryBean extends CategoryEntity { + + /** + * 文章编号 + */ + private String articleId; + + + + + public String getArticleId() { + return articleId; + } + + public void setArticleId(String articleId) { + this.articleId = articleId; + } +} diff --git a/src/main/java/net/mingsoft/cms/biz/ICategoryBiz.java b/src/main/java/net/mingsoft/cms/biz/ICategoryBiz.java index cac88c95..2fde76c9 100755 --- a/src/main/java/net/mingsoft/cms/biz/ICategoryBiz.java +++ b/src/main/java/net/mingsoft/cms/biz/ICategoryBiz.java @@ -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
- * 历史修订:
- */ -public interface ICategoryBiz extends IBaseBiz { - - /** - * 查询当前分类下的所有子分类,包含自身 - * @param category 通过setId指定栏目id - * @return - */ - List 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
+ * 历史修订:
+ */ +public interface ICategoryBiz extends IBaseBiz { + + /** + * 查询当前分类下的所有子分类,包含自身 + * @param category 通过setId指定栏目id + * @return + */ + List 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); +} diff --git a/src/main/java/net/mingsoft/cms/biz/IHistoryLogBiz.java b/src/main/java/net/mingsoft/cms/biz/IHistoryLogBiz.java index 46e9ba1c..2c91048c 100755 --- a/src/main/java/net/mingsoft/cms/biz/IHistoryLogBiz.java +++ b/src/main/java/net/mingsoft/cms/biz/IHistoryLogBiz.java @@ -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
- * 历史修订:
- */ -public interface IHistoryLogBiz extends IBaseBiz { - -} + + +package net.mingsoft.cms.biz; + +import net.mingsoft.base.biz.IBaseBiz; + + +/** + * 文章浏览记录业务 + * @author 铭飞开发团队 + * 创建日期:2019-12-23 9:24:03
+ * 历史修订:
+ */ +public interface IHistoryLogBiz extends IBaseBiz { + +} diff --git a/src/main/java/net/mingsoft/cms/biz/impl/CategoryBizImpl.java b/src/main/java/net/mingsoft/cms/biz/impl/CategoryBizImpl.java index 7419beb7..1fdcfcd7 100755 --- a/src/main/java/net/mingsoft/cms/biz/impl/CategoryBizImpl.java +++ b/src/main/java/net/mingsoft/cms/biz/impl/CategoryBizImpl.java @@ -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
- * 历史修订:
- */ -@Service("cmscategoryBizImpl") -@Transactional(rollbackFor = RuntimeException.class) -public class CategoryBizImpl extends BaseBizImpl implements ICategoryBiz { - - - @Autowired - private ICategoryDao categoryDao; - - @Autowired - private IContentDao contentDao; - - - @Override - protected IBaseDao getDao() { - // TODO Auto-generated method stub - return categoryDao; - } - - @Override - public List 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 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 childrenList = categoryDao.queryChildren(category); - List 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 childNode = categoryDao.queryChildren(parentNode); - //判断删除的是否为主节点 - if (parentNode != null) { - UpdateWrapper 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 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 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
+ * 历史修订:
+ */ +@Service("cmscategoryBizImpl") +@Transactional(rollbackFor = RuntimeException.class) +public class CategoryBizImpl extends BaseBizImpl implements ICategoryBiz { + + + @Autowired + private ICategoryDao categoryDao; + + @Autowired + private IContentDao contentDao; + + + @Override + protected IBaseDao getDao() { + // TODO Auto-generated method stub + return categoryDao; + } + + @Override + public List 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 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 childrenList = categoryDao.queryChildren(category); + List 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 childNode = categoryDao.queryChildren(parentNode); + //判断删除的是否为主节点 + if (parentNode != null) { + UpdateWrapper 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 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 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()); + } + } + +} diff --git a/src/main/java/net/mingsoft/cms/constant/Const.java b/src/main/java/net/mingsoft/cms/constant/Const.java index e2ac0e78..1d93ed23 100755 --- a/src/main/java/net/mingsoft/cms/constant/Const.java +++ b/src/main/java/net/mingsoft/cms/constant/Const.java @@ -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"; +} diff --git a/src/main/java/net/mingsoft/cms/dao/ICategoryDao.java b/src/main/java/net/mingsoft/cms/dao/ICategoryDao.java index f8224fa5..1b975f33 100755 --- a/src/main/java/net/mingsoft/cms/dao/ICategoryDao.java +++ b/src/main/java/net/mingsoft/cms/dao/ICategoryDao.java @@ -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
- * 历史修订:
- */ -@Component("cmsCategoryDao") -public interface ICategoryDao extends IBaseDao { - - /** - * 查询当前分类下面的所有子分类 - * @param category 必须存在categoryId categoryParentId - * @return - */ - public List 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
+ * 历史修订:
+ */ +@Component("cmsCategoryDao") +public interface ICategoryDao extends IBaseDao { + + /** + * 查询当前分类下面的所有子分类 + * @param category 必须存在categoryId categoryParentId + * @return + */ + public List queryChildren(CategoryEntity category); + +} diff --git a/src/main/java/net/mingsoft/cms/dao/ICmsHistoryLogDao.java b/src/main/java/net/mingsoft/cms/dao/ICmsHistoryLogDao.java index ae3e8dc1..233009c9 100755 --- a/src/main/java/net/mingsoft/cms/dao/ICmsHistoryLogDao.java +++ b/src/main/java/net/mingsoft/cms/dao/ICmsHistoryLogDao.java @@ -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
- * 历史修订:
- */ -public interface ICmsHistoryLogDao extends IBaseDao { -} + + +package net.mingsoft.cms.dao; + +import net.mingsoft.base.dao.IBaseDao; + +/** + * 文章浏览记录持久层 + * @author 铭飞开发团队 + * 创建日期:2019-12-23 9:24:03
+ * 历史修订:
+ */ +public interface ICmsHistoryLogDao extends IBaseDao { +} diff --git a/src/main/java/net/mingsoft/cms/entity/CategoryEntity.java b/src/main/java/net/mingsoft/cms/entity/CategoryEntity.java index bc15fd1f..d0ea82bd 100755 --- a/src/main/java/net/mingsoft/cms/entity/CategoryEntity.java +++ b/src/main/java/net/mingsoft/cms/entity/CategoryEntity.java @@ -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: - + *

* The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - + *

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR @@ -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"; + } } diff --git a/src/main/java/net/mingsoft/config/WebConfig.java b/src/main/java/net/mingsoft/config/WebConfig.java index ea5d1a8b..0653a11d 100644 --- a/src/main/java/net/mingsoft/config/WebConfig.java +++ b/src/main/java/net/mingsoft/config/WebConfig.java @@ -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 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); diff --git a/src/main/webapp/template/1/default/news-detail.htm b/src/main/webapp/template/1/default/news-detail.htm index 910979f4..61286fb5 100755 --- a/src/main/webapp/template/1/default/news-detail.htm +++ b/src/main/webapp/template/1/default/news-detail.htm @@ -92,7 +92,6 @@ }, }, created() { - this.likeTotal() } })