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 cfb4b9c9..89a04573 100755 --- a/src/main/java/net/mingsoft/cms/biz/impl/CategoryBizImpl.java +++ b/src/main/java/net/mingsoft/cms/biz/impl/CategoryBizImpl.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 @@ -48,271 +48,273 @@ import java.util.List; * 创建日期:2019-11-28 15:12:32
* 历史修订:
*/ - @Service("cmscategoryBizImpl") - @Transactional(rollbackFor = RuntimeException.class) +@Service("cmscategoryBizImpl") +@Transactional(rollbackFor = RuntimeException.class) public class CategoryBizImpl extends BaseBizImpl implements ICategoryBiz { - @Autowired - private ICategoryDao categoryDao; + @Autowired + private ICategoryDao categoryDao; + + @Autowired + private IContentDao contentDao; - @Autowired - private IContentDao contentDao; + @Override + protected IBaseDao getDao() { + // TODO Auto-generated method stub + return categoryDao; + } - @Override - protected IBaseDao getDao() { - // TODO Auto-generated method stub - return categoryDao; - } + @Override + public List queryChilds(CategoryEntity category) { + // TODO Auto-generated method stub + return categoryDao.queryChildren(category); + } - @Override - public List queryChilds(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); - } + @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 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); - } + 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){ - category.setCategoryParentIds(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()])); + @Override + public void update(CategoryEntity entity) { + super.updateEntity(entity); + } - //获取被删节点的父节点 - CategoryEntity parentNode = categoryDao.selectById(category.getCategoryId()); - //获取被删节点的所属栏目的其他节点 - List childNode = categoryDao.queryChildren(parentNode); - //判断删除的是否为主节点 - if (parentNode != null) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); + @Override + public void delete(String categoryId) { + // TODO Auto-generated method stub + CategoryEntity category = (CategoryEntity) categoryDao.selectById(categoryId); + //删除父类 + if (category != null) { + category.setCategoryParentIds(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()])); - //是否还有子节点 - if (childNode.size() > 1) - updateWrapper.eq("id", parentNode.getId()).set("leaf", 0); - else - updateWrapper.eq("id", parentNode.getId()).set("leaf", 1); + //获取被删节点的父节点 + CategoryEntity parentNode = categoryDao.selectById(category.getCategoryId()); + //清空CategoryParentIds,避免查找不必要的数据,只需要当前的父级栏目 + parentNode.setCategoryParentIds(null); + //获取被删节点的所属栏目的其他节点 + 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); + } - 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); - } + /** + * 设置父级叶子节点 + * @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); - } - } - } - } + } + //更新新的父级 + 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"); - } + /** + * 设置顶级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()); - } + @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()); - } - } + /* + * 递归复制子栏目 + * @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()); + } + } }