Browse Source

add dubbo service

chenxz 7 years ago
parent
commit
2d863f0eab
26 changed files with 753 additions and 23 deletions
  1. 29 0
      mooctest-user-server/pom.xml
  2. 1 1
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/Application.java
  3. 14 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/constants/DeleteStatus.java
  4. 14 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/constants/UrlConstants.java
  5. 2 1
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/MedalDao.java
  6. 60 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/rpc/IntegralRPC.java
  7. 85 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/rpc/MedalRPC.java
  8. 2 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/MedalService.java
  9. 0 1
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/IntegralServiceImpl.java
  10. 21 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/MedalServiceImpl.java
  11. 46 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/IntegralController.java
  12. 0 13
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/data/IntegralVO.java
  13. 17 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/BaseLogic.java
  14. 13 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/IntegralLogic.java
  15. 17 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/MedalLogic.java
  16. 49 1
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/IntegralLogicImpl.java
  17. 86 1
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/MedalLogicImpl.java
  18. 38 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/BaseWrapper.java
  19. 36 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/IntegralCaughtWrapper.java
  20. 33 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/MedalCaughtWrapper.java
  21. 36 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/Medalwrapper.java
  22. 32 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/UserIntegralWrapper.java
  23. 33 1
      mooctest-user-server/src/main/resources/application.yaml
  24. 15 0
      mooctest-user-server/src/test/java/cn/iselab/mooctest/user/service/impl/IntegralServiceImplTest.java
  25. 0 4
      pom.xml
  26. 74 0
      tool/mooctest_user.sql

+ 29 - 0
mooctest-user-server/pom.xml

@@ -23,6 +23,11 @@
     <dependencies>
         <dependency>
             <groupId>cn.iselab.mooctest</groupId>
+            <artifactId>user-dubbo-api</artifactId>
+            <version>1.0.6</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.iselab.mooctest</groupId>
             <artifactId>mooctest-user-common</artifactId>
             <version>0.0.1</version>
         </dependency>
@@ -87,6 +92,18 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <version>${spring.boot.version}</version>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.jboss.spec.javax.servlet</groupId>
+            <artifactId>jboss-servlet-api_3.1_spec</artifactId>
+            <version>1.0.0.Final</version>
+        </dependency>
 
         <dependency>
             <groupId>io.dubbo.springboot</groupId>
@@ -105,6 +122,18 @@
         </dependency>
 
         <dependency>
+            <groupId>com.101tec</groupId>
+            <artifactId>zkclient</artifactId>
+            <version>0.10</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-log4j12</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>5.1.38</version>

+ 1 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/Application.java

@@ -93,7 +93,7 @@ import org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfigurati
         TwitterAutoConfiguration.class,
         VelocityAutoConfiguration.class,
         WebSocketAutoConfiguration.class,
-        XADataSourceAutoConfiguration.class
+        XADataSourceAutoConfiguration.class,
 })
 public class Application {
 

+ 14 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/constants/DeleteStatus.java

@@ -0,0 +1,14 @@
+package cn.iselab.mooctest.user.constants;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午1:40 2018/2/14
+ * @Modified By:
+ */
+public class DeleteStatus {
+
+    public static final boolean IS_DELETED=true;
+
+    public static final boolean IS_NOT_DELETED=false;
+}

+ 14 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/constants/UrlConstants.java

@@ -0,0 +1,14 @@
+package cn.iselab.mooctest.user.constants;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午2:45 2018/2/14
+ * @Modified By:
+ */
+public class UrlConstants {
+
+    public static final String API_INTEGRAL="/api/integral";
+
+    public static final String API_MEDAL="/api/medal";
+}

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

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.user.dao;
 
 import cn.iselab.mooctest.user.model.Medal;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.CrudRepository;
 
 /**
@@ -9,7 +10,7 @@ import org.springframework.data.repository.CrudRepository;
  * @Date: Created in 下午9:22 2018/2/12
  * @Modified By:
  */
-public interface MedalDao extends CrudRepository<Medal, Long>{
+public interface MedalDao extends CrudRepository<Medal, Long>, JpaSpecificationExecutor<Medal>{
 
     Medal findById(long id);
 }

+ 60 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/rpc/IntegralRPC.java

@@ -0,0 +1,60 @@
+package cn.iselab.mooctest.user.rpc;
+
+import cn.iselab.mooctest.rpc.user.api.IntegralService;
+import cn.iselab.mooctest.rpc.user.data.IntegralCaughtDTO;
+import cn.iselab.mooctest.rpc.user.data.UserIntegralDTO;
+import cn.iselab.mooctest.user.web.logic.IntegralLogic;
+import com.alibaba.dubbo.config.annotation.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午12:09 2018/2/14
+ * @Modified By:
+ */
+@Service(version = "1.0.0")
+@Component
+public class IntegralRPC implements IntegralService {
+
+    @Autowired
+    IntegralLogic integralLogic;
+
+    /**
+     * save user caught integral
+     * @param dto
+     * @return medalTO
+     */
+    @Override
+    public IntegralCaughtDTO saveIntegralCaught(IntegralCaughtDTO dto){
+        return integralLogic.saveIntegralCaught(dto);
+    }
+
+    /**
+     * get user's integral by time
+     * @param userId user's id
+     * @param startTime
+     * @param endTime
+     * @return medalTO
+     */
+    @Override
+    public List<IntegralCaughtDTO> getIntegralCaughts(long userId, long startTime, long endTime){
+        return integralLogic.getIntegralCaughts(userId,startTime,endTime);
+    }
+
+    /**
+     * get user's integral ranking list
+     * @param keyword search for single task
+     * @param pageable
+     * @return medalTO
+     */
+    @Override
+    public Page<UserIntegralDTO> getUserIntegrals(String keyword, Pageable pageable){
+        return integralLogic.getUserIntegrals(keyword,pageable);
+    }
+}

+ 85 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/rpc/MedalRPC.java

@@ -0,0 +1,85 @@
+package cn.iselab.mooctest.user.rpc;
+
+import cn.iselab.mooctest.rpc.user.api.MedalService;
+import cn.iselab.mooctest.rpc.user.data.MedalCaughtDTO;
+import cn.iselab.mooctest.rpc.user.data.MedalDTO;
+import cn.iselab.mooctest.user.web.logic.MedalLogic;
+import com.alibaba.dubbo.config.annotation.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午12:02 2018/2/14
+ * @Modified By:
+ */
+@Service(version = "1.0.0")
+@Component
+public class MedalRPC implements MedalService{
+
+    @Autowired
+    MedalLogic medalLogic;
+
+    /**
+     * save single medal
+     * @param dto
+     * @return medalTO
+     */
+    @Override
+    public MedalDTO saveMedal(MedalDTO dto){
+        return medalLogic.saveMedal(dto);
+    }
+
+    /**
+     * update single medal
+     * @param dto
+     * @return medalCaughtDTO
+     */
+    @Override
+    public MedalDTO updateMedal(MedalDTO dto){
+        return medalLogic.updateMedal(dto);
+    }
+
+    /**
+     * delete single medal
+     * @param medalId medal's id
+     * @return
+     */
+    @Override
+    public void deleteMedal(long medalId){
+        medalLogic.deleteMedal(medalId);
+    }
+
+    /**
+     * save medal list
+     * @param keyword
+     * @return medalTO
+     */
+    @Override
+    public Page<MedalDTO> getMedals(String keyword, Pageable pageable){
+        return medalLogic.getMedals(keyword,pageable);
+    }
+
+    /**
+     * save user caught medal
+     * @param dto
+     * @return medalCaughtDTO
+     */
+    @Override
+    public MedalCaughtDTO saveMedalCaughtDTO(MedalCaughtDTO dto){
+        return medalLogic.saveMedalCaughtDTO(dto);
+    }
+
+    /**
+     * get user's medals
+     * @param userId user's id
+     * @return medalCaughtDTO
+     */
+    @Override
+    public Page<MedalCaughtDTO> getMedalList(long userId, Pageable pageable){
+        return medalLogic.getMedalList(userId,pageable);
+    }
+}

+ 2 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/MedalService.java

@@ -20,4 +20,6 @@ public interface MedalService {
     User2Medal saveUser2Medal(User2Medal medal);
 
     Page<User2Medal> findByPage(long userId, Pageable pageable);
+
+    Page<Medal> findByPage2(String word, Pageable pageable);
 }

+ 0 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/IntegralServiceImpl.java

@@ -87,7 +87,6 @@ public class IntegralServiceImpl implements IntegralService {
             public Predicate toPredicate(Root<UserIntegral> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                 Predicate p=criteriaBuilder.conjunction();
                 if(keyword!=null){
-                    p.getExpressions().add(criteriaBuilder.like(root.get("source"), "%"+ StringUtils.trim(keyword) +"%"));
                 }
                 return p;
             }

+ 21 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/MedalServiceImpl.java

@@ -5,6 +5,7 @@ import cn.iselab.mooctest.user.dao.User2MedalDao;
 import cn.iselab.mooctest.user.model.Medal;
 import cn.iselab.mooctest.user.model.User2Medal;
 import cn.iselab.mooctest.user.service.MedalService;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -53,6 +54,12 @@ public class MedalServiceImpl implements MedalService {
         return user2MedalDao.findAll(where, pageable);
     }
 
+    @Override
+    public Page<Medal> findByPage2(String word, Pageable pageable){
+        Specifications<Medal> where=Specifications.where(getMedal(word));
+        return medalDao.findAll(where, pageable);
+    }
+
     private Specification<User2Medal> getUser2Medal(long userId){
         return new Specification<User2Medal>() {
             @Override
@@ -65,4 +72,18 @@ public class MedalServiceImpl implements MedalService {
         };
     }
 
+    private Specification<Medal> getMedal(String keyword){
+        return new Specification<Medal>() {
+            @Override
+            public Predicate toPredicate(Root<Medal> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+                Predicate p=criteriaBuilder.conjunction();
+                if (keyword != null) {
+                    p.getExpressions()
+                            .add(criteriaBuilder.like(root.get("name"),"%"+ StringUtils.trim(keyword) +"%"));
+                }
+                return p;
+            }
+        };
+    }
+
 }

+ 46 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/IntegralController.java

@@ -1,7 +1,25 @@
 package cn.iselab.mooctest.user.web.ctrl;
 
+import cn.iselab.mooctest.rpc.user.data.IntegralCaughtDTO;
+import cn.iselab.mooctest.rpc.user.data.MedalDTO;
+import cn.iselab.mooctest.rpc.user.data.UserIntegralDTO;
+import cn.iselab.mooctest.user.constants.UrlConstants;
+import cn.iselab.mooctest.user.web.logic.IntegralLogic;
+import cn.iselab.mooctest.user.web.logic.MedalLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+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.RestController;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @Author ROKG
  * @Description
@@ -10,4 +28,32 @@ import org.springframework.web.bind.annotation.RestController;
  */
 @RestController
 public class IntegralController extends BaseController{
+
+    @Autowired
+    IntegralLogic integralLogic;
+
+    @Autowired
+    MedalLogic medalLogic;
+
+    @RequestMapping(value = UrlConstants.API_INTEGRAL,method = RequestMethod.GET)
+    public List<IntegralCaughtDTO> getIntegrals(@RequestParam(value = "userId")Long userId,
+                                                @RequestParam(value = "startTime")Long startTime,
+                                                @RequestParam(value = "endTime")Long endTime,
+                                                HttpServletRequest request){
+        Integer activePage = Integer.parseInt(request.getHeader("activePage"));
+        Integer rowsOnPage = Integer.parseInt(request.getHeader("rowsOnPage"));
+        Sort sort=new Sort(Sort.Direction.DESC,"total");
+        Pageable pageable=new PageRequest(activePage-1, rowsOnPage,sort);
+        return integralLogic.getIntegralCaughts(userId,startTime,endTime);
+    }
+
+    @RequestMapping(value = UrlConstants.API_MEDAL,method = RequestMethod.GET)
+    public Page<MedalDTO> getIntegrals(@RequestParam(value = "userId")String userId,
+                                       HttpServletRequest request){
+        Integer activePage = Integer.parseInt(request.getHeader("activePage"));
+        Integer rowsOnPage = Integer.parseInt(request.getHeader("rowsOnPage"));
+        Sort sort=new Sort(Sort.Direction.DESC,"createTime");
+        Pageable pageable=new PageRequest(activePage-1, rowsOnPage,sort);
+        return medalLogic.getMedals(userId,pageable);
+    }
 }

+ 0 - 13
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/data/IntegralVO.java

@@ -1,13 +0,0 @@
-package cn.iselab.mooctest.user.web.data;
-
-import lombok.Data;
-
-/**
- * @Author ROKG
- * @Description
- * @Date: Created in 下午7:29 2018/2/12
- * @Modified By:
- */
-@Data
-public class IntegralVO {
-}

+ 17 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/BaseLogic.java

@@ -0,0 +1,17 @@
+package cn.iselab.mooctest.user.web.logic;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午11:05 2018/2/13
+ * @Modified By:
+ */
+public class BaseLogic {
+
+    protected final Logger LOG = LoggerFactory.getLogger(getClass());
+
+}

+ 13 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/IntegralLogic.java

@@ -1,5 +1,12 @@
 package cn.iselab.mooctest.user.web.logic;
 
+import cn.iselab.mooctest.rpc.user.data.IntegralCaughtDTO;
+import cn.iselab.mooctest.rpc.user.data.UserIntegralDTO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+
 /**
  * @Author ROKG
  * @Description
@@ -7,4 +14,10 @@ package cn.iselab.mooctest.user.web.logic;
  * @Modified By:
  */
 public interface IntegralLogic {
+
+    IntegralCaughtDTO saveIntegralCaught(IntegralCaughtDTO dto);
+
+    List<IntegralCaughtDTO> getIntegralCaughts(long userId, long startTime, long endTime);
+
+    Page<UserIntegralDTO> getUserIntegrals(String keyword, Pageable pageable);
 }

+ 17 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/MedalLogic.java

@@ -1,5 +1,10 @@
 package cn.iselab.mooctest.user.web.logic;
 
+import cn.iselab.mooctest.rpc.user.data.MedalCaughtDTO;
+import cn.iselab.mooctest.rpc.user.data.MedalDTO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
 /**
  * @Author ROKG
  * @Description
@@ -7,4 +12,16 @@ package cn.iselab.mooctest.user.web.logic;
  * @Modified By:
  */
 public interface MedalLogic {
+
+    MedalDTO saveMedal(MedalDTO dto);
+
+    MedalDTO updateMedal(MedalDTO dto);
+
+    void deleteMedal(long medalId);
+
+    Page<MedalDTO> getMedals(String keyword, Pageable pageable);
+
+    MedalCaughtDTO saveMedalCaughtDTO(MedalCaughtDTO dto);
+
+    Page<MedalCaughtDTO> getMedalList(long userId, Pageable pageable);
 }

+ 49 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/IntegralLogicImpl.java

@@ -1,10 +1,24 @@
 package cn.iselab.mooctest.user.web.logic.impl;
 
+import cn.iselab.mooctest.rpc.user.data.IntegralCaughtDTO;
+import cn.iselab.mooctest.rpc.user.data.UserIntegralDTO;
+import cn.iselab.mooctest.user.model.User2Integral;
+import cn.iselab.mooctest.user.model.UserIntegral;
 import cn.iselab.mooctest.user.service.IntegralService;
+import cn.iselab.mooctest.user.web.logic.BaseLogic;
 import cn.iselab.mooctest.user.web.logic.IntegralLogic;
+import cn.iselab.mooctest.user.web.wrapper.IntegralCaughtWrapper;
+import cn.iselab.mooctest.user.web.wrapper.UserIntegralWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
+import java.sql.Timestamp;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * @Author ROKG
  * @Description
@@ -12,8 +26,42 @@ import org.springframework.stereotype.Service;
  * @Modified By:
  */
 @Service
-public class IntegralLogicImpl implements IntegralLogic {
+public class IntegralLogicImpl extends BaseLogic implements IntegralLogic {
 
     @Autowired
     IntegralService integralService;
+
+    @Autowired
+    IntegralCaughtWrapper integralCaughtWrapper;
+
+    @Autowired
+    UserIntegralWrapper userIntegralWrapper;
+
+    @Override
+    public IntegralCaughtDTO saveIntegralCaught(IntegralCaughtDTO dto){
+        User2Integral integral= integralCaughtWrapper.unwrap(dto);
+        integral.setCreateTime(new Timestamp(System.currentTimeMillis()));
+        integral=integralService.saveUser2Integral(integral);
+        return integralCaughtWrapper.wrap(integral);
+    }
+
+    @Override
+    public List<IntegralCaughtDTO> getIntegralCaughts(long userId, long startTime, long endTime){
+        List<User2Integral> integrals=integralService.findByTime(userId,startTime,endTime);
+        return integrals.parallelStream().map(user2Integral -> {
+            IntegralCaughtDTO dto=integralCaughtWrapper.wrap(user2Integral);
+            return dto;
+        }).collect(Collectors.toList());
+    }
+
+    @Override
+    public Page<UserIntegralDTO> getUserIntegrals(String keyword, Pageable pageable){
+        Page<UserIntegral> integrals=integralService.findPage(keyword, pageable);
+        return integrals.map(new Converter<UserIntegral, UserIntegralDTO>() {
+            @Override
+            public UserIntegralDTO convert(UserIntegral userIntegral) {
+                return userIntegralWrapper.wrap(userIntegral);
+            }
+        });
+    }
 }

+ 86 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/MedalLogicImpl.java

@@ -1,10 +1,24 @@
 package cn.iselab.mooctest.user.web.logic.impl;
 
+import cn.iselab.mooctest.rpc.user.data.MedalCaughtDTO;
+import cn.iselab.mooctest.rpc.user.data.MedalDTO;
+import cn.iselab.mooctest.user.constants.DeleteStatus;
+import cn.iselab.mooctest.user.model.Medal;
+import cn.iselab.mooctest.user.model.User2Medal;
 import cn.iselab.mooctest.user.service.MedalService;
+import cn.iselab.mooctest.user.web.exception.HttpBadRequestException;
+import cn.iselab.mooctest.user.web.logic.BaseLogic;
 import cn.iselab.mooctest.user.web.logic.MedalLogic;
+import cn.iselab.mooctest.user.web.wrapper.MedalCaughtWrapper;
+import cn.iselab.mooctest.user.web.wrapper.Medalwrapper;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
+import java.sql.Timestamp;
+
 /**
  * @Author ROKG
  * @Description
@@ -12,8 +26,79 @@ import org.springframework.stereotype.Service;
  * @Modified By:
  */
 @Service
-public class MedalLogicImpl implements MedalLogic {
+public class MedalLogicImpl extends BaseLogic implements MedalLogic {
 
     @Autowired
     MedalService medalService;
+
+    @Autowired
+    Medalwrapper medalwrapper;
+
+    @Autowired
+    MedalCaughtWrapper medalCaughtWrapper;
+
+    @Override
+    public MedalDTO saveMedal(MedalDTO dto){
+        Medal medal=medalwrapper.unwrap(dto);
+        medal.setCreateTime(new Timestamp(System.currentTimeMillis()));
+        medal.setDeleted(DeleteStatus.IS_NOT_DELETED);
+        medal=medalService.saveMedal(medal);
+        return medalwrapper.wrap(medal);
+    }
+
+    @Override
+    public MedalDTO updateMedal(MedalDTO dto){
+        Medal medal=medalService.findById(dto.getId());
+        if (medal == null) {
+            throw new HttpBadRequestException("medal not exists");
+        }
+        medal.setName(dto.getName());
+        medal.setDescription(dto.getDescription());
+        medal.setImgUrl(dto.getImgUrl());
+        medalService.saveMedal(medal);
+        return dto;
+    }
+
+    @Override
+    public void deleteMedal(long medalId){
+        Medal medal=medalService.findById(medalId);
+        if (medal == null) {
+            throw new HttpBadRequestException("medal not exists");
+        }
+        medal.setDeleted(DeleteStatus.IS_DELETED);
+        medalService.saveMedal(medal);
+    }
+
+    @Override
+    public Page<MedalDTO> getMedals(String keyword, Pageable pageable){
+        Page<Medal> medals=medalService.findByPage2(keyword, pageable);
+        return medals.map(new Converter<Medal, MedalDTO>() {
+            @Override
+            public MedalDTO convert(Medal medal) {
+                return medalwrapper.wrap(medal);
+            }
+        });
+    }
+
+    @Override
+    public MedalCaughtDTO saveMedalCaughtDTO(MedalCaughtDTO dto){
+        User2Medal user2Medal=medalCaughtWrapper.unwrap(dto);
+        user2Medal.setCreateTime(new Timestamp(System.currentTimeMillis()));
+        user2Medal=medalService.saveUser2Medal(user2Medal);
+        return medalCaughtWrapper.wrap(user2Medal);
+    }
+
+    @Override
+    public Page<MedalCaughtDTO> getMedalList(long userId, Pageable pageable){
+        Page<User2Medal> user2Medals=medalService.findByPage(userId,pageable);
+        return user2Medals.map(new Converter<User2Medal, MedalCaughtDTO>() {
+            @Override
+            public MedalCaughtDTO convert(User2Medal user2Medal) {
+                MedalCaughtDTO dto=medalCaughtWrapper.wrap(user2Medal);
+                Medal medal =medalService.findById(user2Medal.getMedalId());
+                dto.setMedalDTO(medalwrapper.wrap(medal));
+                return dto;
+            }
+        });
+    }
 }

+ 38 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/BaseWrapper.java

@@ -0,0 +1,38 @@
+package cn.iselab.mooctest.user.web.wrapper;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author sean
+ * @date 17/3/5.
+ */
+public abstract class BaseWrapper<VO, DATA> {
+
+    protected final Logger LOG = LoggerFactory.getLogger(getClass());
+
+    public abstract VO wrap(DATA data);
+
+    public abstract DATA unwrap(VO data);
+
+    public List<VO> wrap(List<DATA> data) {
+        return data.stream().map(this::wrap).collect(Collectors.toList());
+    }
+
+    public Page<VO> wrap(Page<DATA> data) {
+        Page<VO> page = new PageImpl<VO>(wrap(data.getContent()),
+                new PageRequest(data.getNumber(), data.getSize()), data.getTotalElements());
+        return page;
+    }
+
+    public List<DATA> unwrap(List<VO> vos) {
+        return vos.stream().map(this::unwrap).collect(Collectors.toList());
+    }
+
+}

+ 36 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/IntegralCaughtWrapper.java

@@ -0,0 +1,36 @@
+package cn.iselab.mooctest.user.web.wrapper;
+
+import cn.iselab.mooctest.rpc.user.data.IntegralCaughtDTO;
+import cn.iselab.mooctest.user.model.User2Integral;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午1:19 2018/2/14
+ * @Modified By:
+ */
+@Service
+public class IntegralCaughtWrapper extends BaseWrapper<IntegralCaughtDTO,User2Integral>{
+
+    @Override
+    public IntegralCaughtDTO wrap(User2Integral user2Integral){
+        IntegralCaughtDTO dto=new IntegralCaughtDTO();
+        dto.setCreateTime(user2Integral.getCreateTime().getTime());
+        dto.setId(user2Integral.getId());
+        dto.setPoints(user2Integral.getPoints());
+        dto.setSource(user2Integral.getSource());
+        dto.setType(user2Integral.getType());
+        dto.setUserId(user2Integral.getUserId());
+        return dto;
+    }
+
+    @Override
+    public User2Integral unwrap(IntegralCaughtDTO dto){
+        User2Integral integral=new User2Integral();
+        integral.setPoints(dto.getPoints());
+        integral.setSource(dto.getSource());
+        integral.setType(dto.getType());
+        return integral;
+    }
+}

+ 33 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/MedalCaughtWrapper.java

@@ -0,0 +1,33 @@
+package cn.iselab.mooctest.user.web.wrapper;
+
+import cn.iselab.mooctest.rpc.user.data.MedalCaughtDTO;
+import cn.iselab.mooctest.user.model.User2Medal;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午1:38 2018/2/14
+ * @Modified By:
+ */
+@Service
+public class MedalCaughtWrapper extends BaseWrapper<MedalCaughtDTO, User2Medal>{
+
+    @Override
+    public MedalCaughtDTO wrap(User2Medal user2Medal){
+        MedalCaughtDTO dto=new MedalCaughtDTO();
+        dto.setCreateTime(user2Medal.getCreateTime().getTime());
+        dto.setId(user2Medal.getId());
+        dto.setMedalId(user2Medal.getMedalId());
+        dto.setUserId(user2Medal.getUserId());
+        return dto;
+    }
+
+    @Override
+    public User2Medal unwrap(MedalCaughtDTO dto){
+        User2Medal user2Medal=new User2Medal();
+        user2Medal.setMedalId(dto.getMedalId());
+        user2Medal.setUserId(dto.getUserId());
+        return user2Medal;
+    }
+}

+ 36 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/Medalwrapper.java

@@ -0,0 +1,36 @@
+package cn.iselab.mooctest.user.web.wrapper;
+
+import cn.iselab.mooctest.rpc.user.data.MedalDTO;
+import cn.iselab.mooctest.user.model.Medal;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午1:38 2018/2/14
+ * @Modified By:
+ */
+@Service
+public class Medalwrapper extends BaseWrapper<MedalDTO, Medal> {
+
+    @Override
+    public MedalDTO wrap(Medal medal){
+        MedalDTO dto=new MedalDTO();
+        dto.setDescription(medal.getDescription());
+        dto.setImgUrl(medal.getImgUrl());
+        dto.setName(medal.getName());
+        dto.setType(medal.getType());
+        dto.setCreateTime(medal.getCreateTime().getTime());
+        dto.setId(medal.getId());
+        return dto;
+    }
+
+    @Override
+    public Medal unwrap(MedalDTO dto){
+        Medal medal=new Medal();
+        medal.setImgUrl(dto.getImgUrl());
+        medal.setDescription(dto.getDescription());
+        medal.setName(dto.getName());
+        return medal;
+    }
+}

+ 32 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/UserIntegralWrapper.java

@@ -0,0 +1,32 @@
+package cn.iselab.mooctest.user.web.wrapper;
+
+import cn.iselab.mooctest.rpc.user.data.UserIntegralDTO;
+import cn.iselab.mooctest.user.model.UserIntegral;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午1:32 2018/2/14
+ * @Modified By:
+ */
+@Service
+public class UserIntegralWrapper extends BaseWrapper<UserIntegralDTO, UserIntegral> {
+
+    @Override
+    public UserIntegralDTO wrap(UserIntegral integral){
+        UserIntegralDTO dto=new UserIntegralDTO();
+        dto.setId(integral.getId());
+        dto.setUserId(integral.getUserId());
+        dto.setTotal(integral.getTotal());
+        dto.setEnabled(integral.isEnabled());
+        return dto;
+    }
+
+    @Override
+    public UserIntegral unwrap(UserIntegralDTO dto){
+        UserIntegral integral=new UserIntegral();
+        integral.setTotal(dto.getTotal());
+        return integral;
+    }
+}

+ 33 - 1
mooctest-user-server/src/main/resources/application.yaml

@@ -29,6 +29,16 @@ spring:
         url: jdbc:mysql://127.0.0.1:3306/mooctest_user?useUnicode=yes&characterEncoding=UTF-8
         username: root
         password: cxz6518
+    dubbo:
+        application.name: user-service-provider
+        registry.address: zookeeper://118.178.131.206:2181
+        protocol.name: dubbo
+        protocol.port: 20900
+        protocol.host: 127.0.0.1
+        scan: cn.iselab.mooctest.user.rpc
+        monitor.protocal: registry
+        provider.timeout: 120000
+        provider.retries: 0
 
 server:
     port: 8080
@@ -44,6 +54,17 @@ spring:
         username: test-username # please modify manually
         password: test-password # please modify manually
 
+    dubbo:
+        application.name: user-service-provider
+        registry.address: zookeeper://127.0.0.1:2181
+        protocol.name: dubbo
+        protocol.port: 20878
+        protocol.host: 127.0.0.1
+        scan: cn.iselab.mooctest.user.rpc
+        monitor.protocal: registry
+        provider.timeout: 120000
+        provider.retries: 0
+
 logging.config: classpath:log4j2.test.yaml
 logging.access.directory: /home/share/log
 
@@ -58,8 +79,19 @@ spring:
         username: mooctest
         password: secr3t!
 
+    dubbo:
+        application.name: user-service-provider
+        registry.address: zookeeper://118.178.131.206:2181
+        protocol.name: dubbo
+        protocol.port: 20890
+        protocol.host:
+        scan: cn.iselab.mooctest.user.rpc
+        monitor.protocal: registry
+        provider.timeout: 120000
+        provider.retries: 0
+
 server:
-    port: 8090
+    port: 8088
 
 logging.config: classpath:log4j2.online.yaml
 logging.access.directory: /home/share/log

+ 15 - 0
mooctest-user-server/src/test/java/cn/iselab/mooctest/user/service/impl/IntegralServiceImplTest.java

@@ -1,7 +1,12 @@
 package cn.iselab.mooctest.user.service.impl;
 
+import cn.iselab.mooctest.user.dao.User2IntegralDao;
+import cn.iselab.mooctest.user.dao.UserIntegralDao;
+import cn.iselab.mooctest.user.service.IntegralService;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
 
 import static org.junit.Assert.*;
 
@@ -12,6 +17,16 @@ import static org.junit.Assert.*;
  * @Modified By:
  */
 public class IntegralServiceImplTest {
+
+    @InjectMocks
+    IntegralService integralService=new IntegralServiceImpl();
+
+    @Mock
+    User2IntegralDao user2IntegralDao;
+
+    @Mock
+    UserIntegralDao userIntegralDao;
+
     @Before
     public void setUp() throws Exception {
     }

+ 0 - 4
pom.xml

@@ -54,9 +54,5 @@
         <module>mooctest-user-client</module>
         <module>mooctest-user-server</module>
         <module>mooctest-user-job</module>
-        <module>mooctest-user-common</module>
-        <module>mooctest-user-server</module>
-        <module>mooctest-user-job</module>
-        <module>mooctest-user-client</module>
     </modules>
 </project>

+ 74 - 0
tool/mooctest_user.sql

@@ -0,0 +1,74 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : cxz
+ Source Server Type    : MySQL
+ Source Server Version : 50720
+ Source Host           : localhost
+ Source Database       : mooctest_user
+
+ Target Server Type    : MySQL
+ Target Server Version : 50720
+ File Encoding         : utf-8
+
+ Date: 02/13/2018 23:10:51 PM
+*/
+
+SET NAMES utf8;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+--  Table structure for `medal`
+-- ----------------------------
+DROP TABLE IF EXISTS `medal`;
+CREATE TABLE `medal` (
+  `id` bigint(20) NOT NULL,
+  `name` varchar(255) DEFAULT NULL,
+  `description` varchar(255) DEFAULT NULL,
+  `img_url` varchar(255) DEFAULT NULL,
+  `type` bigint(20) NOT NULL,
+  `is_deleted` bit(1) NOT NULL,
+  `create_time` datetime DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+--  Table structure for `user_2_integral`
+-- ----------------------------
+DROP TABLE IF EXISTS `user_2_integral`;
+CREATE TABLE `user_2_integral` (
+  `id` bigint(20) NOT NULL,
+  `user_id` bigint(20) NOT NULL,
+  `points` bigint(20) DEFAULT NULL,
+  `type` bigint(20) DEFAULT NULL,
+  `source` varchar(255) DEFAULT NULL,
+  `create_time` datetime DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+--  Table structure for `user_2_medal`
+-- ----------------------------
+DROP TABLE IF EXISTS `user_2_medal`;
+CREATE TABLE `user_2_medal` (
+  `id` bigint(20) NOT NULL,
+  `user_id` bigint(20) NOT NULL,
+  `medal_id` bigint(20) NOT NULL,
+  `create_time` datetime DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+--  Table structure for `user_integral`
+-- ----------------------------
+DROP TABLE IF EXISTS `user_integral`;
+CREATE TABLE `user_integral` (
+  `id` bigint(20) NOT NULL,
+  `user_id` bigint(20) NOT NULL,
+  `total` bigint(20) DEFAULT NULL,
+  `enabled` bit(1) NOT NULL,
+  `create_time` datetime NOT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+SET FOREIGN_KEY_CHECKS = 1;