diff --git a/src/main/java/com/hxtec/polaris/commons/thread/BuildPathRunable.java b/src/main/java/com/hxtec/polaris/commons/thread/BuildPathRunable.java index f357a1799333d3b2f2cd13fe4f8d39ba7b2fd143..9d4a514f4113098ded061d02e4e293113ccfbd6a 100644 --- a/src/main/java/com/hxtec/polaris/commons/thread/BuildPathRunable.java +++ b/src/main/java/com/hxtec/polaris/commons/thread/BuildPathRunable.java @@ -61,7 +61,12 @@ public class BuildPathRunable implements Runnable{ getPath(shopCategory,path,new Date()); path.append("-"); shopCategory.setComment1(String.valueOf(path)); - shopCategoryMapper.updateCategoryPath(String.valueOf(shopCategory.getId()),String.valueOf(path)); + int count = shopCategoryMapper.selectChildCountById(shopCategory.getId()); + if(count>0){ + shopCategoryMapper.updateCategoryPath(String.valueOf(shopCategory.getId()),String.valueOf(path),"Y"); + }else if(count == 0){ + shopCategoryMapper.updateCategoryPath(String.valueOf(shopCategory.getId()),String.valueOf(path),"N"); + } } } diff --git a/src/main/java/com/hxtec/polaris/controller/CategoryController.java b/src/main/java/com/hxtec/polaris/controller/CategoryController.java index 2ad649ea1285dfc1dd0630b2117c0e4e526e289e..1fa9fd18195bb9d4e0cccd94317d29e43f900573 100644 --- a/src/main/java/com/hxtec/polaris/controller/CategoryController.java +++ b/src/main/java/com/hxtec/polaris/controller/CategoryController.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; import java.util.List; /** @@ -46,8 +47,8 @@ public class CategoryController { @ApiImplicitParam(name = "name", value = "添加的节点名", required = false, dataType = "String") }) @PostMapping("add") - public Object addCategory(String pid,String name){ - return categoryService.addCategory(pid,name); + public Object addCategory(HttpServletRequest request,String pid,String name,String img){ + return categoryService.addCategory(request,pid,name,img); } /** @@ -59,8 +60,9 @@ public class CategoryController { @ApiImplicitParam(name = "ids[]", value = "删除的节点集合", required = false,allowMultiple=true, dataType = "String") }) @DeleteMapping("delete") - public Object deleteCategory(@RequestParam("ids[]") List ids){ - return categoryService.deleteCategory(ids); + public Object deleteCategory(HttpServletRequest request,String[] ids){ + List list = Arrays.asList(ids); + return categoryService.deleteCategory(request,list); } /** @@ -74,8 +76,8 @@ public class CategoryController { @ApiImplicitParam(name = "name", value = "当前节点编辑后的节点名", required = false, dataType = "String"), }) @PutMapping("update") - public Object updateCategory(HttpServletRequest request,String id, String pid, String name,String img){ - return categoryService.updateCategory(request,pid,id,name,img); + public Object updateCategory(String id, String name,String img){ + return categoryService.updateCategory(id,name,img); } /** diff --git a/src/main/java/com/hxtec/polaris/mapper/ShopCategoryMapper.java b/src/main/java/com/hxtec/polaris/mapper/ShopCategoryMapper.java index d18fbcaa4c24e231674b9950568b439a7300bd82..57f2b2a401c37b51c49418f6d7073d3a3f70224e 100644 --- a/src/main/java/com/hxtec/polaris/mapper/ShopCategoryMapper.java +++ b/src/main/java/com/hxtec/polaris/mapper/ShopCategoryMapper.java @@ -4,6 +4,7 @@ import com.hxtec.polaris.entity.ShopCategory; import org.apache.ibatis.annotations.Param; import tk.mybatis.mapper.MyMapper; +import java.util.Date; import java.util.List; import java.util.Map; @@ -42,9 +43,10 @@ public interface ShopCategoryMapper extends MyMapper { /** * 删除分类 * @param id + * @param date * @return */ - Integer deleteCategory(@Param("id") String id); + Integer deleteCategory(@Param("id") String id ,@Param("date") Date date); /** * 更新父id @@ -83,9 +85,10 @@ public interface ShopCategoryMapper extends MyMapper { * 更新父id * @param id * @param path + * @param isParent * @return */ - Integer updateCategoryPath(@Param("id") String id,@Param("path") String path); + Integer updateCategoryPath(@Param("id") String id,@Param("path") String path,@Param("isParent")String isParent); /** * 初始化tree @@ -106,4 +109,27 @@ public interface ShopCategoryMapper extends MyMapper { * @return */ List> selectTree(@Param("condition") String condition); + + /** + * 添加分类 如果父节点为空,则添加的节点为一级节点,走一级节点添加方法 + * @param shopCategory + * @return + */ + void inserRootCategory(ShopCategory shopCategory); + + /** + * 查看当前id的节点的子节点数量 + * @param id + * @return + */ + int selectChildCountById(@Param("id") Integer id); + + /** + * 编辑商品 提交更新 + * @param id + * @param name + * @param img + * @param date + */ + void doUpdateShopCategory(@Param("id") String id,@Param("name") String name, @Param("img")String img, @Param("date")Date date); } \ No newline at end of file diff --git a/src/main/java/com/hxtec/polaris/service/CategoryService.java b/src/main/java/com/hxtec/polaris/service/CategoryService.java index d766e5fbb2bb4100c47e9b0765d7caf4f1332c6d..1770ec2d79d1864921285d51049b039be0f6ae77 100644 --- a/src/main/java/com/hxtec/polaris/service/CategoryService.java +++ b/src/main/java/com/hxtec/polaris/service/CategoryService.java @@ -14,28 +14,29 @@ public interface CategoryService { /** * 分类相关 添加分类节点 + * @param request * @param pid * @param name + * @param img * @return */ - Object addCategory(String pid, String name); + Object addCategory(HttpServletRequest request,String pid, String name,String img); /** * 分类相关 删除分类节点 * @param ids * @return */ - Object deleteCategory(List ids); + Object deleteCategory(HttpServletRequest request,List ids); /** * 分类相关 更新分类节点 - * @param pid * @param id * @param name * @param img * @return */ - Object updateCategory(HttpServletRequest request, String pid, String id, String name,String img); + Object updateCategory( String id, String name,String img); /** * 构建分类tree diff --git a/src/main/java/com/hxtec/polaris/service/impl/CategoryServiceImpl.java b/src/main/java/com/hxtec/polaris/service/impl/CategoryServiceImpl.java index 381ec6020ff36d43d73c16c4a9a31c02dba5009f..872e28eef3ce20eaf0b01f106a1aae87440e5249 100644 --- a/src/main/java/com/hxtec/polaris/service/impl/CategoryServiceImpl.java +++ b/src/main/java/com/hxtec/polaris/service/impl/CategoryServiceImpl.java @@ -57,10 +57,20 @@ public class CategoryServiceImpl implements CategoryService { } @Override - public Object addCategory(String pid, String name) { + public Object addCategory(HttpServletRequest request,String pid, String name,String img) { String params = "pid="+pid+",name="+name; String LOG_MSG = MessageFormat.format(Log.PATTERN_LOG,Log.INSERT,LOG_CLASS_NAME,LOG_METHOD_ADD_CATORY,params); + //如果父节点为空,则添加的节点为一级节点,走一级节点添加方法 + if(StringUtils.isBlank(pid)){ + try { + doAddRootCategory(request,name,img); + return Result.ok(Msg.CATEGORY_INSERT_OK); + }catch (Exception e){ + throw new MyException(Result.error(Code.FAIL_4101,Msg.CATEGORY_INSERT_EXCEPTION),LOG_MSG); + } + } + //请求参数不合法 if (!StringUtils.isNumeric(pid)){ throw new MyException(Result.error(Code.FAIL_4101,Msg.PARAM_INVALID),LOG_MSG); @@ -72,9 +82,10 @@ public class CategoryServiceImpl implements CategoryService { } //实例赋值 ShopCategory shopCategory = setParam(pid,name); + shopCategory.setImage(img); //数据新增入库 try { - doAddCategory(shopCategory,parentObject); + doAddCategory(request,shopCategory,parentObject); }catch (Exception e){ throw new MyException(Result.error(Code.FAIL_4101,Msg.CATEGORY_INSERT_EXCEPTION),LOG_MSG); } @@ -82,8 +93,26 @@ public class CategoryServiceImpl implements CategoryService { return Result.ok(Msg.CATEGORY_INSERT_OK); } + /** + * 添加分类 如果父节点为空,则添加的节点为一级节点,走一级节点添加方法 + * @param request + * @param name + * @param img + */ + private void doAddRootCategory(HttpServletRequest request, String name, String img) { + ShopCategory shopCategory = new ShopCategory(); + shopCategory.setName(name); + shopCategory.setImage(img); + shopCategory.setIsParent("N"); + shopCategory.setIsDelete("N"); + shopCategory.setUpdateTime(new Date()); + shopCategory.setCreateTime(new Date()); + shopCategoryMapper.inserRootCategory(shopCategory); + callBuildPath(request); + } + @Override - public Object deleteCategory(List ids) { + public Object deleteCategory(HttpServletRequest request,List ids) { String params = "ids="+ids; String LOG_MSG = MessageFormat.format(Log.PATTERN_LOG,Log.DELETE,LOG_CLASS_NAME, LOG_METHOD_DEL_CATORY,params); @@ -99,7 +128,7 @@ public class CategoryServiceImpl implements CategoryService { //更新shop_category表 int deletCategoryResult = 0; try{ - deletCategoryResult = shopCategoryMapper.deleteCategory(id); + deletCategoryResult = shopCategoryMapper.deleteCategory(id,new Date()); }catch (Exception e){ throw new MyException(Result.error(Code.FAIL_4101,Msg.CATEGORY_DELETE_EXCEPTION),LOG_MSG); } @@ -108,39 +137,21 @@ public class CategoryServiceImpl implements CategoryService { } } + callBuildPath(request); logger.info(LOG_MSG); return Result.ok(Msg.CATEGORY_DELETE_OK); } @Override - public Object updateCategory(HttpServletRequest request,String pid, String id, String name,String img) { - String params = "pid="+pid+",id="+id+",name="+name; + public Object updateCategory( String id, String name,String img) { + String params = "id="+id+",name="+name; String LOG_MSG = MessageFormat.format(Log.PATTERN_LOG,Log.UPDATE,LOG_CLASS_NAME,LOG_METHOD_UPDATE_CATORY,params); if (!StringUtils.isNumeric(id) || StringUtils.isBlank(name)){ throw new MyException(Result.error(Code.FAIL_4101,Msg.PARAM_INVALID),LOG_MSG); } - - //判断更新的节点是否为根节点,如果为根节点走单独的根节点方法 - List ifRootList = shopCategoryMapper.getCategoryById(id); - if(null != ifRootList && ifRootList.size()>0){ - if(!StringUtils.equals(ifRootList.get(0).getIsDelete(),"Y") && StringUtils.isBlank(ifRootList.get(0).getParentId())){ - try { - doUpdateRootCategory(id,name,img); - }catch (Exception e){ - throw new MyException(Result.error(Code.FAIL_4101,Msg.COMMON_FAIL),LOG_MSG); - } - return Result.ok(); - } - } - - List tempList = shopCategoryMapper.getCategoryById(pid); - if (null == tempList || tempList.size() ==0 || StringUtils.isBlank(tempList.get(0).getIsDelete()) || !GlobalVar.NO.equals(tempList.get(0).getIsDelete())){ - //如果该父节点对应的分类在数据库中没有记录或者删除状态是空或者已删除,则为故障节点,不能进行更新 - throw new MyException(Result.error(Code.FAIL_4101,Msg.CATEGORY_PID_EXCEPTION),LOG_MSG); - } //执行更新操作 try { - doUpdateShopCategory(request,pid,id,name,img); + doUpdateShopCategory(id,name,img); }catch (Exception e){ throw new MyException(Result.error(Code.FAIL_4101,Msg.CATEGORY_UPDATE_FAIL),LOG_MSG); } @@ -148,10 +159,6 @@ public class CategoryServiceImpl implements CategoryService { return Result.ok(Msg.CATEGORY_UPDATE_OK); } - private void doUpdateRootCategory(String id, String name, String img) { - shopCategoryMapper.updateRootCategory(id,null,name,img); - } - @Override public Object buildTree(Integer id) { if (null == id){ @@ -180,7 +187,6 @@ public class CategoryServiceImpl implements CategoryService { private ShopCategory setParam(String pid, String name){ ShopCategory shopCategory = new ShopCategory(); //生成id -// shopCategory.setId(GenerateSequenceUtil.generateSequenceNo()); shopCategory.setParentId(pid); shopCategory.setIsParent(GlobalVar.NO); shopCategory.setName(name); @@ -192,39 +198,12 @@ public class CategoryServiceImpl implements CategoryService { /** * 执行db层面的分类更新,返回t - * @param pid * @param id * @param name * @return */ - private void doUpdateShopCategory(HttpServletRequest request,String pid, String id, String name,String img){ - //编辑的节点原来的父节点 - List shopCategorys = shopCategoryMapper.getCategoryById(id); - String oldParentId = shopCategorys.get(0).getParentId(); - - //step1 将当前节点的父节点和名字更新为修改后的值 - shopCategoryMapper.updateCategoryParentId(id,pid,name,img); - - //如果上级节点没有变动,则不需要变更子节点,业务结束 - if (equalsIgnoreCase(pid,oldParentId)){ - return; - } - - //step2 将节点更新前的下级节点指向的parentId,修改为更新的节点原来指向的parentId,相当于往前移了一位 - if (StringUtils.isBlank(oldParentId)){ - shopCategoryMapper.updateCategoryChildNullParentId(oldParentId); - }else { - shopCategoryMapper.updateCategoryChildParentId(id,oldParentId); - } - - //调用线程,更新path - //把当前编辑的节点及其所有子节点挂到新的节点下面,更新路径 - // 创建线程池 - ThreadFactory pool = new ThreadFactoryBuilder().setNameFormat(GlobalVar.THREAD_CATEGORY_BUILD_PATH).build(); - ServletContext context = request.getServletContext(); - // 计数器 - CountDownLatch doneSignal = new CountDownLatch(1); - pool.newThread(new BuildPathRunable(context,doneSignal)).start(); + private void doUpdateShopCategory(String id, String name,String img){ + shopCategoryMapper.doUpdateShopCategory(id,name,img,new Date()); } /** @@ -234,14 +213,10 @@ public class CategoryServiceImpl implements CategoryService { * @Param * @return **/ - private void doAddCategory(ShopCategory shopCategory,ShopCategory parentObject){ + private void doAddCategory(HttpServletRequest request,ShopCategory shopCategory,ShopCategory parentObject){ shopCategoryMapper.insertCategory(shopCategory); //构建分类路径 - StringBuilder path = new StringBuilder(GlobalVar.SEPARATOR + shopCategory.getId()); - path.append(parentObject.getComment1()); - shopCategory.setComment1(String.valueOf(path)); - //更新路径 - shopCategoryMapper.updateCategoryDynamic(shopCategory); + callBuildPath(request); } /** @@ -255,4 +230,19 @@ public class CategoryServiceImpl implements CategoryService { str2 = StringUtils.isBlank(str2)? "":str2; return StringUtils.equals(str1, str2); } + + /** + * 更新分类路径 + * @param request + */ + private void callBuildPath(HttpServletRequest request){ + //调用线程,更新path + //把当前编辑的节点及其所有子节点挂到新的节点下面,更新路径 + // 创建线程池 + ThreadFactory pool = new ThreadFactoryBuilder().setNameFormat(GlobalVar.THREAD_CATEGORY_BUILD_PATH).build(); + ServletContext context = request.getServletContext(); + // 计数器 + CountDownLatch doneSignal = new CountDownLatch(1); + pool.newThread(new BuildPathRunable(context,doneSignal)).start(); + } } diff --git a/src/main/resources/mapper/ShopCategoryMapper.xml b/src/main/resources/mapper/ShopCategoryMapper.xml index 5bb2663d7fb32281d70d899f6f4fa0ff9f7ba6b4..545a21e484dd7afb4dc690824e0f248d610c64da 100644 --- a/src/main/resources/mapper/ShopCategoryMapper.xml +++ b/src/main/resources/mapper/ShopCategoryMapper.xml @@ -62,6 +62,11 @@ and (id like '%${condition}%' or name like '%${condition}%' or comment1 like '%${condition}%' or image like '%${condition}%') + + insert into shop_category (parent_id, is_parent, name, decriptsion, image, @@ -77,6 +82,11 @@ ) + + insert into shop_category (name,is_parent,is_delete,image,create_time,update_time) + VALUES (#{name,jdbcType=VARCHAR},'N','N',#{image,jdbcType=VARCHAR},#{createTime,jdbcType=TIMESTAMP},#{updateTime,jdbcType=TIMESTAMP}) + + update shop_category @@ -128,7 +138,7 @@ update shop_category - set is_delete = 'Y' + set is_delete = 'Y',update_time = #{date,jdbcType=TIMESTAMP} where comment1 like '%-${id}%-' and is_delete = 'N' @@ -158,7 +168,13 @@ update shop_category - set comment1 = #{path} + set comment1 = #{path},is_parent=#{isParent} + where id = #{id} and is_delete = 'N' + + + + update shop_category + set name = #{name},image=#{img},update_time=#{date} where id = #{id} and is_delete = 'N'