Browse Source

Merge branch 'master' of git.mooctest.net:summer/mooctest-user

zhangxin 7 years ago
parent
commit
0913590aaa

+ 2 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/UserDao.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.user.dao;
 
 import cn.iselab.mooctest.user.model.User;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.CrudRepository;
 
 import javax.transaction.Transactional;
@@ -10,7 +11,7 @@ import javax.transaction.Transactional;
  * @date 2018-03-04.
  */
 @Transactional
-public interface UserDao extends CrudRepository<User, Long>{
+public interface UserDao extends CrudRepository<User, Long> , JpaSpecificationExecutor<User> {
 
     User findByEmail(String email);
 

+ 8 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/rpc/UserRPC.java

@@ -7,6 +7,9 @@ import com.alibaba.dubbo.config.annotation.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author sean
  * @date 2018-03-03.
@@ -48,4 +51,9 @@ public class UserRPC implements UserService {
         return userLogic.updateUser(userDTO);
     }
 
+    @Override
+    public List<UserDTO> findByCondition(Map<String , String> condition) {
+        return  userLogic.findByCondition(condition);
+    }
+
 }

+ 6 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/UserService.java

@@ -1,7 +1,11 @@
 package cn.iselab.mooctest.user.service;
 
+
 import cn.iselab.mooctest.user.model.User;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author sean
  * @date 2018-03-03.
@@ -17,5 +21,7 @@ public interface UserService {
     User findById(Long userId);
 
     User update(User user);
+
+    List<User> findByCondition(Map<String,String> condition);
 }
 

+ 36 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/UserServiceImpl.java

@@ -4,8 +4,18 @@ import cn.iselab.mooctest.user.dao.UserDao;
 import cn.iselab.mooctest.user.model.User;
 import cn.iselab.mooctest.user.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.data.jpa.domain.Specifications;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.lang.reflect.Field;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author sean
  * @date 2018-03-04.
@@ -40,4 +50,30 @@ public class UserServiceImpl implements UserService {
     public User update(User user) {
         return userDao.save(user);
     }
+
+    @Override
+    public List<User> findByCondition(Map<String,String> condition) {
+        Specification<User> where = Specifications.where(getUserWhereClause(condition));
+        return userDao.findAll(where);
+    }
+    private Specification<User> getUserWhereClause(Map<String, String> condition) {
+        return new Specification<User>() {
+            @Override
+            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                Predicate predicate = cb.disjunction();
+
+                Field[] fields = User.class.getDeclaredFields();
+                for (Field field : fields) {
+                    String fieldName = field.getName();
+                    if (condition.containsKey(fieldName)) {
+                        predicate.getExpressions().add(
+                                cb.like(root.get(fieldName), "%" + condition.get(fieldName) + "%")
+                        );
+                    }
+                }
+
+                return predicate;
+            }
+        };
+    }
 }

+ 8 - 4
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/UserController.java

@@ -4,10 +4,7 @@ import cn.iselab.mooctest.rpc.user.data.UserDTO;
 import cn.iselab.mooctest.user.constants.UrlConstants;
 import cn.iselab.mooctest.user.web.logic.UserLogic;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author sean
@@ -28,4 +25,11 @@ public class UserController extends BaseController {
     public UserDTO getUserByEmail(@PathVariable("email") String email) {
         return userLogic.getUserByEmail(email);
     }
+
+    @RequestMapping(value = UrlConstants.API + "user", method = RequestMethod.POST)
+    public UserDTO save(@RequestBody UserDTO userDTO){
+        return userLogic.save(userDTO);
+    }
+
+
 }

+ 5 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/UserLogic.java

@@ -2,6 +2,9 @@ package cn.iselab.mooctest.user.web.logic;
 
 import cn.iselab.mooctest.rpc.user.data.UserDTO;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author sean
  * @date 2018-03-04.
@@ -19,4 +22,6 @@ public interface UserLogic {
     UserDTO save(UserDTO userDTO);
 
     UserDTO updateUser(UserDTO userDTO);
+
+    List<UserDTO> findByCondition(Map<String,String> condition);
 }

+ 15 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/UserLogicImpl.java

@@ -10,6 +10,10 @@ import cn.iselab.mooctest.user.web.wrapper.UserWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author sean
  * @date 2018-03-04.
@@ -83,4 +87,15 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
         User user = userWrapper.unwrap(userDTO);
         return userWrapper.wrap(userService.update(user));
     }
+
+    @Override
+    public List<UserDTO> findByCondition(Map<String , String> condition) {
+        List<User> userList = userService.findByCondition(condition);
+        List<UserDTO> userDTOList = new ArrayList<>();
+        for (User user : userList) {
+            userDTOList.add(Converter.convert(UserDTO.class,user));
+        }
+        return userDTOList;
+
+    }
 }