diff --git a/README.md b/README.md
index 243ae54f63955f97c7c3ab0be347f5b5a3c253d0..1173b25da295bcccc1920d6de0c773fa24a22383 100644
--- a/README.md
+++ b/README.md
@@ -12,3 +12,15 @@ spring初始化时候的动作
5、在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation")
来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。
得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。
+2018/8/24
+ 1、遇见一个奇怪的问题 controller里面如果接口没有配置respnseBody这个注解的话 那么下发的请求地址将于实际的不一致,
+ 造成访问404的问题出现
+ 2、springMvc支持PUT参数的解决方案
+
+ HttpMethodFilter
+ org.springframework.web.filter.HttpPutFormContentFilter
+
+
+ HttpMethodFilter
+ /*
+
diff --git a/src/main/java/com/mmall/common/CheckAuth.java b/src/main/java/com/mmall/common/CheckAuth.java
new file mode 100644
index 0000000000000000000000000000000000000000..b008ad7ad83be8dff3e335333727150a9f4d1a1b
--- /dev/null
+++ b/src/main/java/com/mmall/common/CheckAuth.java
@@ -0,0 +1,18 @@
+package com.mmall.common;
+
+import com.mmall.pojo.User;
+
+import javax.servlet.http.HttpSession;
+
+/**
+ * Created by Administrator on 2018/8/22 0022.
+ */
+public class CheckAuth {
+ public static ServerResponse isLogin(HttpSession session) {
+ User user = (User) session.getAttribute(Const.CURRENT_USER);
+ if (user == null) {
+ return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "用户未登录");
+ }
+ return ServerResponse.createBySuccess(user);
+ }
+}
diff --git a/src/main/java/com/mmall/controller/portal/backend/CategoryManageController.java b/src/main/java/com/mmall/controller/portal/backend/CategoryManageController.java
new file mode 100644
index 0000000000000000000000000000000000000000..823cf26623200559c30caec3810ce6fd9fc00155
--- /dev/null
+++ b/src/main/java/com/mmall/controller/portal/backend/CategoryManageController.java
@@ -0,0 +1,90 @@
+package com.mmall.controller.portal.backend;
+
+import com.mmall.common.CheckAuth;
+import com.mmall.common.ServerResponse;
+import com.mmall.pojo.Category;
+import com.mmall.pojo.User;
+import com.mmall.service.ICategoryService;
+import com.mmall.service.IUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpSession;
+import java.util.List;
+
+/**
+ * Created by Administrator on 2018/8/21 0021.
+ */
+@Controller
+@RequestMapping("/manage/category/")
+public class CategoryManageController {
+ @Autowired
+ private IUserService iUserService;
+
+ @Autowired
+ private ICategoryService iCategoryService;
+
+ @RequestMapping(value = "add_category.do", method = RequestMethod.POST)
+ @ResponseBody
+ public ServerResponse addCategory(HttpSession session, String categoryName, @RequestParam(value = "parentId", defaultValue = "0") int parentId) {
+ ServerResponse loginFlag = CheckAuth.isLogin(session);
+ if(!loginFlag.isSuccess()){
+ return loginFlag;
+ }
+
+ //校验一下是否是管理员
+ ServerResponse checkResult = iUserService.checkAdminRole((User)loginFlag.getData());
+ if (checkResult.isSuccess()) {
+ return iCategoryService.addCategory(categoryName, parentId);
+ }
+ return ServerResponse.createByErrorMessage("无权限操作,需要管理员权限");
+ }
+
+ @RequestMapping(value = "set_category_name.do", method = RequestMethod.PUT)
+ @ResponseBody
+ public ServerResponse setCategoryNameById(HttpSession session, String categoryName, @RequestParam(value = "categoryId",defaultValue = "0") int categoryId) {
+ ServerResponse loginFlag = CheckAuth.isLogin(session);
+ if(!loginFlag.isSuccess()){
+ return loginFlag;
+ }
+ //校验一下是否是管理员
+ ServerResponse checkResult = iUserService.checkAdminRole((User)loginFlag.getData());
+ if (checkResult.isSuccess()) {
+ return iCategoryService.setCategoryNameById(categoryName, categoryId);
+ }
+ return ServerResponse.createByErrorMessage("无权限操作,需要管理员权限");
+ }
+
+ @RequestMapping(value = "get_category.do", method = RequestMethod.GET)
+ @ResponseBody
+ public ServerResponse> getCategoryByParentId(HttpSession session, @RequestParam(value = "categoryId" ,defaultValue = "0") int categoryId) {
+ ServerResponse loginFlag = CheckAuth.isLogin(session);
+ if(!loginFlag.isSuccess()){
+ return loginFlag;
+ }
+ ServerResponse checkResult = iUserService.checkAdminRole((User)loginFlag.getData());
+ if (checkResult.isSuccess()) {
+ return iCategoryService.getCategoryByParentId(categoryId);
+ }
+ return ServerResponse.createByErrorMessage("无权限操作,需要管理员权限");
+ }
+
+ @RequestMapping(value = "get_deep_category.do", method = RequestMethod.GET)
+ @ResponseBody
+ public ServerResponse getCategoryAndDeepChildrenCategory(HttpSession session, @RequestParam(value = "categoryId", defaultValue = "0") Integer categoryId) {
+ ServerResponse loginFlag = CheckAuth.isLogin(session);
+ if(!loginFlag.isSuccess()){
+ return loginFlag;
+ }
+ ServerResponse checkResult = iUserService.checkAdminRole((User)loginFlag.getData());
+ if (checkResult.isSuccess()) {
+ return iCategoryService.selectCategoryAndChildrenById(categoryId);
+ }
+ return ServerResponse.createByErrorMessage("无权限操作,需要管理员权限");
+ }
+
+}
diff --git a/src/main/java/com/mmall/dao/CategoryMapper.java b/src/main/java/com/mmall/dao/CategoryMapper.java
index b69921a18c5350d7a6a8c5c695eb6c66c626eb93..e7380a3a643686cc4fa0b8648575350dc31fbcf0 100644
--- a/src/main/java/com/mmall/dao/CategoryMapper.java
+++ b/src/main/java/com/mmall/dao/CategoryMapper.java
@@ -1,6 +1,9 @@
package com.mmall.dao;
import com.mmall.pojo.Category;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
public interface CategoryMapper {
int deleteByPrimaryKey(Integer id);
@@ -14,4 +17,6 @@ public interface CategoryMapper {
int updateByPrimaryKeySelective(Category record);
int updateByPrimaryKey(Category record);
+
+ List getCategoryByParentId(@Param("parentId") int parentId);
}
\ No newline at end of file
diff --git a/src/main/java/com/mmall/pojo/Category.java b/src/main/java/com/mmall/pojo/Category.java
index 2b636da3cc9ea75416676ccdb9e0d5b3b94f9a3e..5924d992a2a47aed3393c01f0061d64daf8b44eb 100644
--- a/src/main/java/com/mmall/pojo/Category.java
+++ b/src/main/java/com/mmall/pojo/Category.java
@@ -17,6 +17,11 @@ public class Category {
private Date updateTime;
+ public Category(Integer id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
public Category(Integer id, Integer parentId, String name, Boolean status, Integer sortOrder, Date createTime, Date updateTime) {
this.id = id;
this.parentId = parentId;
diff --git a/src/main/java/com/mmall/pojo/User.java b/src/main/java/com/mmall/pojo/User.java
index df77265f930930cc1fb130b2762dc2f07e0ab6c2..dbfdf7b5886d80c6e7d52b624ee821e496750fca 100644
--- a/src/main/java/com/mmall/pojo/User.java
+++ b/src/main/java/com/mmall/pojo/User.java
@@ -36,6 +36,8 @@ public class User {
this.updateTime = updateTime;
}
+
+
public User() {
super();
}
diff --git a/src/main/java/com/mmall/service/ICategoryService.java b/src/main/java/com/mmall/service/ICategoryService.java
new file mode 100644
index 0000000000000000000000000000000000000000..34e48ea688fea6d646e15015c862aedfd07a9969
--- /dev/null
+++ b/src/main/java/com/mmall/service/ICategoryService.java
@@ -0,0 +1,21 @@
+package com.mmall.service;
+
+import com.mmall.common.ServerResponse;
+import com.mmall.pojo.Category;
+
+import java.util.List;
+
+/**
+ * Created by Administrator on 2018/8/21 0021.
+ */
+public interface ICategoryService {
+ ServerResponse addCategory(String categoryname, Integer parentId);
+
+ ServerResponse setCategoryNameById(String categoryName, Integer categoryId);
+
+ ServerResponse getCategoryByParentId(Integer categoryId);
+
+ ServerResponse> selectCategoryAndChildrenById(Integer categoryId);
+
+
+}
diff --git a/src/main/java/com/mmall/service/IUserService.java b/src/main/java/com/mmall/service/IUserService.java
index 8d7be56fd3d0af32e4def2c9742f9ec0675e6f63..41c024038cbc0de82296c7377576c32f2beace2e 100644
--- a/src/main/java/com/mmall/service/IUserService.java
+++ b/src/main/java/com/mmall/service/IUserService.java
@@ -27,4 +27,6 @@ public interface IUserService {
ServerResponse updateInformation(User user);
ServerResponse getInformation(Integer userId);
+
+ ServerResponse checkAdminRole(User user);
}
diff --git a/src/main/java/com/mmall/service/impl/CategoryServiceImpl.java b/src/main/java/com/mmall/service/impl/CategoryServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b4dff2749800461675da13f5631836e7318a76b
--- /dev/null
+++ b/src/main/java/com/mmall/service/impl/CategoryServiceImpl.java
@@ -0,0 +1,110 @@
+package com.mmall.service.impl;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import com.mmall.common.ServerResponse;
+import com.mmall.dao.CategoryMapper;
+import com.mmall.pojo.Category;
+import com.mmall.service.ICategoryService;
+import com.mmall.util.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Created by Administrator on 2018/8/21 0021.
+ */
+@Service("iCategoryService")
+public class CategoryServiceImpl implements ICategoryService {
+ private static Logger logger = LoggerFactory.getLogger(CategoryServiceImpl.class);
+ private static Integer ZERO = 0;
+
+
+ @Autowired
+ private CategoryMapper categoryMapper;
+
+ @Override
+ public ServerResponse addCategory(String categoryname, Integer parentId) {
+ logger.info("function=addCategory add categoryname={}", categoryname);
+ if (StringUtils.isEmpty(categoryname)||StringUtils.checkId(parentId)) {
+ return ServerResponse.createByErrorMessage("添加品类参数错误");
+ }
+ Category category = new Category();
+ category.setName(categoryname);
+ category.setParentId(parentId);
+ //true为可用 false为不可用
+ category.setStatus(true);
+ int rowResult = categoryMapper.insert(category);
+ if (rowResult > ZERO) {
+ return ServerResponse.createBySuccessMessage("添加品类成功");
+ }
+ return ServerResponse.createByErrorMessage("添加品类失败");
+ }
+
+ @Override
+ public ServerResponse setCategoryNameById(String categoryName, Integer categoryId) {
+ logger.info("function=setCategoryNameById categoryId={}", categoryId);
+ if (StringUtils.isEmpty(categoryName) || StringUtils.checkId(categoryId)) {
+ return ServerResponse.createByErrorMessage("添加品类参数错误");
+ }
+ Category category = new Category(categoryId, categoryName);
+
+ int resultCount = categoryMapper.updateByPrimaryKeySelective(category);
+ if (resultCount > ZERO) {
+ return ServerResponse.createBySuccessMessage("修改品类名称成功");
+ }
+ return ServerResponse.createByErrorMessage("修改品类名称失败");
+ }
+
+ /**
+ * 获取该父类节点下的所有子节点的品类信息(不递归)
+ * @param categoryId(parentid)
+ * @return
+ */
+ @Override
+ public ServerResponse> getCategoryByParentId(Integer categoryId) {
+ logger.info("function=getCategoryByParentId categoryId={}", categoryId);
+ if(StringUtils.checkId(categoryId))
+ {
+ return ServerResponse.createByErrorMessage("添加品类参数错误");
+ }
+ List categoryList = categoryMapper.getCategoryByParentId(categoryId);
+ if(CollectionUtils.isEmpty(categoryList)){
+ logger.info("function=getCategoryById fing not category parentId={}", categoryId);
+ }
+ return ServerResponse.createBySuccess(categoryList);
+ }
+
+ @Override
+ public ServerResponse> selectCategoryAndChildrenById(Integer categoryId) {
+ Set categorySet = Sets.newHashSet();
+ findChildCategory(categorySet, categoryId);
+ List categoryIdList = Lists.newArrayList();
+ if (categoryId != null) {
+ for (Category categoryItem : categorySet) {
+ categoryIdList.add(categoryItem);
+ }
+ }
+ return ServerResponse.createBySuccess(categoryIdList);
+ }
+
+ //递归算法,算出子节点
+ private Set findChildCategory(Set categorySet, Integer categoryId) {
+ Category category = categoryMapper.selectByPrimaryKey(categoryId);
+ if (category != null) {
+ categorySet.add(category);
+ }
+ //查找子节点,递归算法一定要有一个退出的条件
+ List categoryList = categoryMapper.getCategoryByParentId(categoryId);
+ for (Category categoryItem : categoryList) {
+ findChildCategory(categorySet, categoryItem.getId());
+ }
+ return categorySet;
+ }
+}
diff --git a/src/main/java/com/mmall/service/impl/UserServiceImpl.java b/src/main/java/com/mmall/service/impl/UserServiceImpl.java
index 7ff2210c0a1c9ec7df9c207a56707f2930c7a628..42188c096a25a09bbb587d688c79f3bd8d05a9d7 100644
--- a/src/main/java/com/mmall/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/mmall/service/impl/UserServiceImpl.java
@@ -186,4 +186,17 @@ public class UserServiceImpl implements IUserService {
user.setPassword(org.apache.commons.lang3.StringUtils.EMPTY);
return ServerResponse.createBySuccess(user);
}
+
+ /**
+ * 校验用户是否是管理员
+ * @param user
+ * @return
+ */
+ @Override
+ public ServerResponse checkAdminRole(User user) {
+ if (user != null && user.getRole() == Const.Role.ROLE_ADMIN) {
+ return ServerResponse.createBySuccess();
+ }
+ return ServerResponse.createByError();
+ }
}
diff --git a/src/main/java/com/mmall/util/StringUtils.java b/src/main/java/com/mmall/util/StringUtils.java
index c3b5ed08cd98a8f7097dd1de4df65f94b8b48da4..daf960730f54ef37d690ea5aca48d0df7679b8eb 100644
--- a/src/main/java/com/mmall/util/StringUtils.java
+++ b/src/main/java/com/mmall/util/StringUtils.java
@@ -17,4 +17,16 @@ public class StringUtils {
}
return false;
}
+
+ /**
+ * j校验id是否为空
+ * @param str
+ * @return
+ */
+ public static boolean checkId(Integer id) {
+ if (id == null) {
+ return true;
+ }
+ return false;
+ }
}
diff --git a/src/main/resources/mappers/CategoryMapper.xml b/src/main/resources/mappers/CategoryMapper.xml
index 7b2718e107821921ad922ca9c33357a85fe123b0..4d8d3c4c0a044b40a1c302f6e4085b18df50a8e6 100644
--- a/src/main/resources/mappers/CategoryMapper.xml
+++ b/src/main/resources/mappers/CategoryMapper.xml
@@ -100,7 +100,7 @@
create_time = #{createTime,jdbcType=TIMESTAMP},
-
+
update_time = now(),
@@ -116,4 +116,10 @@
update_time = now()
where id = #{id,jdbcType=INTEGER}
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 2ae4bf83d1fb1eac25300193c46ae643923b2c05..715bf9d4a5ebde1b344e932ddf73d31af5c5d62a 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -23,6 +23,16 @@
/*
+
+
+ HttpMethodFilter
+ org.springframework.web.filter.HttpPutFormContentFilter
+
+
+ HttpMethodFilter
+ /*
+
+
org.springframework.web.context.request.RequestContextListener