瀏覽代碼

Merge branch 'add-integral' into 'master'

Add integral



See merge request !1

chenxz 7 年之前
父節點
當前提交
affb5bcaa4
共有 38 個文件被更改,包括 1396 次插入6 次删除
  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. 16 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/MedalDao.java
  6. 20 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/User2IntegralDao.java
  7. 20 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/User2MedalDao.java
  8. 21 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/UserIntegralDao.java
  9. 40 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/Medal.java
  10. 37 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/User2Integral.java
  11. 33 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/User2Medal.java
  12. 34 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/UserIntegral.java
  13. 60 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/rpc/IntegralRPC.java
  14. 85 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/rpc/MedalRPC.java
  15. 27 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/IntegralService.java
  16. 25 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/MedalService.java
  17. 95 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/IntegralServiceImpl.java
  18. 89 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/MedalServiceImpl.java
  19. 16 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/BaseController.java
  20. 59 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/IntegralController.java
  21. 16 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/exception/HttpBadRequestException.java
  22. 17 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/BaseLogic.java
  23. 23 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/IntegralLogic.java
  24. 27 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/MedalLogic.java
  25. 67 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/IntegralLogicImpl.java
  26. 104 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/MedalLogicImpl.java
  27. 38 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/BaseWrapper.java
  28. 36 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/IntegralCaughtWrapper.java
  29. 33 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/MedalCaughtWrapper.java
  30. 36 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/Medalwrapper.java
  31. 32 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/wrapper/UserIntegralWrapper.java
  32. 33 1
      mooctest-user-server/src/main/resources/application.yaml
  33. 54 0
      mooctest-user-server/src/test/java/cn/iselab/mooctest/user/service/impl/IntegralServiceImplTest.java
  34. 35 0
      mooctest-user-server/src/test/java/cn/iselab/mooctest/user/service/impl/MedalServiceImplTest.java
  35. 18 0
      mooctest-user-server/src/test/java/cn/iselab/mooctest/user/web/ctrl/IntegralControllerTest.java
  36. 18 0
      mooctest-user-server/src/test/java/cn/iselab/mooctest/user/web/logic/impl/IntegralLogicImplTest.java
  37. 0 4
      pom.xml
  38. 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";
+}

+ 16 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/MedalDao.java

@@ -0,0 +1,16 @@
+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;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午9:22 2018/2/12
+ * @Modified By:
+ */
+public interface MedalDao extends CrudRepository<Medal, Long>, JpaSpecificationExecutor<Medal>{
+
+    Medal findById(long id);
+}

+ 20 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/User2IntegralDao.java

@@ -0,0 +1,20 @@
+package cn.iselab.mooctest.user.dao;
+
+import cn.iselab.mooctest.user.model.User2Integral;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午7:25 2018/2/12
+ * @Modified By:
+ */
+@Transactional
+public interface User2IntegralDao extends CrudRepository<User2Integral, Long> ,JpaSpecificationExecutor<User2Integral> {
+
+    List<User2Integral> findByUserId(long userId);
+}

+ 20 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/User2MedalDao.java

@@ -0,0 +1,20 @@
+package cn.iselab.mooctest.user.dao;
+
+import cn.iselab.mooctest.user.model.User2Medal;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午11:34 2018/2/13
+ * @Modified By:
+ */
+@Transactional
+public interface User2MedalDao extends CrudRepository<User2Medal, Long> ,JpaSpecificationExecutor<User2Medal>{
+
+    List<User2Medal> findByUserId(long userId);
+}

+ 21 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/dao/UserIntegralDao.java

@@ -0,0 +1,21 @@
+package cn.iselab.mooctest.user.dao;
+
+import cn.iselab.mooctest.user.model.UserIntegral;
+import org.springframework.data.jpa.domain.Specifications;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午11:40 2018/2/13
+ * @Modified By:
+ */
+@Transactional
+public interface UserIntegralDao extends CrudRepository<UserIntegral, Long> ,JpaSpecificationExecutor<UserIntegral>{
+
+    List<UserIntegral> findByUserId(long userId);
+}

+ 40 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/Medal.java

@@ -0,0 +1,40 @@
+package cn.iselab.mooctest.user.model;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+
+/**
+ * @Author ROKG
+ * @Description 勋章表
+ * @Date: Created in 下午7:34 2018/2/12
+ * @Modified By:
+ */
+@Data
+@Entity
+@Table(name = "medal")
+public class Medal {
+
+    @Id
+    @GeneratedValue
+    private long id;
+
+    @Column(name = "name")
+    private String name;
+
+    @Column(name = "description")
+    private String description;
+
+    @Column(name = "img_url")
+    private String imgUrl;
+
+    @Column(name = "type")
+    private long type;
+
+    @Column(name = "create_time")
+    private Timestamp createTime;
+
+    @Column(name = "is_deleted")
+    private boolean isDeleted;
+}

+ 37 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/User2Integral.java

@@ -0,0 +1,37 @@
+package cn.iselab.mooctest.user.model;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+
+/**
+ * @Author ROKG
+ * @Description 用户获取积分记录表
+ * @Date: Created in 下午7:24 2018/2/12
+ * @Modified By:
+ */
+@Data
+@Entity
+@Table(name = "user_2_integral")
+public class User2Integral {
+
+    @Id
+    @GeneratedValue
+    private long id;
+
+    @Column(name = "user_id")
+    private long userId;
+
+    @Column(name = "points")
+    private long points;
+
+    @Column(name = "type")
+    private long type;
+
+    @Column(name = "source")
+    private String source;
+
+    @Column(name = "create_time")
+    private Timestamp createTime;
+}

+ 33 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/User2Medal.java

@@ -0,0 +1,33 @@
+package cn.iselab.mooctest.user.model;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+
+/**
+ * @Author ROKG
+ * @Description 用户获取勋章记录表
+ * @Date: Created in 上午11:30 2018/2/13
+ * @Modified By:
+ */
+@Data
+@Entity
+@Table(name = "user_2_medal")
+public class User2Medal {
+
+    @Id
+    @GeneratedValue
+    private long id;
+
+    @Column(name = "user_id")
+    private long userId;
+
+    @Column(name = "medal_id")
+    private long medalId;
+
+    @Column(name = "create_time")
+    private Timestamp createTime;
+
+
+}

+ 34 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/UserIntegral.java

@@ -0,0 +1,34 @@
+package cn.iselab.mooctest.user.model;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+
+/**
+ * @Author ROKG
+ * @Description 用户积分总和表
+ * @Date: Created in 上午11:36 2018/2/13
+ * @Modified By:
+ */
+@Data
+@Entity
+@Table(name = "user_integral")
+public class UserIntegral {
+
+    @Id
+    @GeneratedValue
+    private long id;
+
+    @Column(name = "user_id")
+    private long userId;
+
+    @Column(name = "total")
+    private long total;
+
+    @Column(name = "enabled")
+    private boolean enabled;
+
+    @Column(name = "create_time")
+    private Timestamp createTime;
+}

+ 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);
+    }
+}

+ 27 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/IntegralService.java

@@ -0,0 +1,27 @@
+package cn.iselab.mooctest.user.service;
+
+import cn.iselab.mooctest.user.model.User2Integral;
+import cn.iselab.mooctest.user.model.UserIntegral;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午11:42 2018/2/13
+ * @Modified By:
+ */
+public interface IntegralService {
+
+    UserIntegral findByUserId(long userId);
+
+    UserIntegral saveIntegral(UserIntegral userIntegral);
+
+    Page<UserIntegral> findPage(String keyword, Pageable pageable);
+
+    List<User2Integral> findByTime(long userId, long startTime, long endTime);
+
+    User2Integral saveUser2Integral(User2Integral user2Integral);
+}

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

@@ -0,0 +1,25 @@
+package cn.iselab.mooctest.user.service;
+
+import cn.iselab.mooctest.user.model.Medal;
+import cn.iselab.mooctest.user.model.User2Medal;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午11:42 2018/2/13
+ * @Modified By:
+ */
+public interface MedalService {
+
+    Medal saveMedal(Medal medal);
+
+    Medal findById(long id);
+
+    User2Medal saveUser2Medal(User2Medal medal);
+
+    Page<User2Medal> findByPage(long userId, Pageable pageable);
+
+    Page<Medal> findByPage2(String word, Pageable pageable);
+}

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

@@ -0,0 +1,95 @@
+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.model.User2Integral;
+import cn.iselab.mooctest.user.model.UserIntegral;
+import cn.iselab.mooctest.user.service.IntegralService;
+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;
+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.sql.Timestamp;
+import java.util.List;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午6:36 2018/2/13
+ * @Modified By:
+ */
+@Service
+public class IntegralServiceImpl implements IntegralService {
+
+    @Autowired
+    UserIntegralDao userIntegralDao;
+
+    @Autowired
+    User2IntegralDao user2IntegralDao;
+
+    @Override
+    public UserIntegral findByUserId(long userId){
+        List<UserIntegral> userIntegrals=userIntegralDao.findByUserId(userId);
+        if(userIntegrals!=null && userIntegrals.size()>0){
+            return userIntegrals.get(0);
+        }else {
+            return null;
+        }
+    }
+
+    @Override
+    public UserIntegral saveIntegral(UserIntegral userIntegral){
+        return userIntegralDao.save(userIntegral);
+    }
+
+    @Override
+    public Page<UserIntegral> findPage(String keyword, Pageable pageable){
+        Specifications<UserIntegral> where=Specifications.where(getUserIntegral(keyword));
+        return userIntegralDao.findAll(where,pageable);
+    }
+
+    @Override
+    public List<User2Integral> findByTime(long userId, long startTime, long endTime){
+        Specifications<User2Integral> where=Specifications.where(getUser2Integral(new Timestamp(startTime),new Timestamp(endTime)));
+        return user2IntegralDao.findAll(where);
+    }
+
+    @Override
+    public User2Integral saveUser2Integral(User2Integral user2Integral){
+        return user2IntegralDao.save(user2Integral);
+    }
+
+    private Specification<User2Integral> getUser2Integral(Timestamp startTime, Timestamp endTime){
+        return new Specification<User2Integral>() {
+            @Override
+            public Predicate toPredicate(Root<User2Integral> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+                Predicate p=criteriaBuilder.conjunction();
+                p.getExpressions()
+                        .add(criteriaBuilder.lessThan(root.get("createTime"),endTime));
+                p.getExpressions()
+                        .add(criteriaBuilder.greaterThan(root.get("createTime"),startTime));
+                return p;
+            }
+        };
+    }
+
+    private Specification<UserIntegral> getUserIntegral(String keyword){
+        return new Specification<UserIntegral>() {
+            @Override
+            public Predicate toPredicate(Root<UserIntegral> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+                Predicate p=criteriaBuilder.conjunction();
+                if(keyword!=null){
+                }
+                return p;
+            }
+        };
+    }
+}

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

@@ -0,0 +1,89 @@
+package cn.iselab.mooctest.user.service.impl;
+
+import cn.iselab.mooctest.user.dao.MedalDao;
+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;
+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;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午6:52 2018/2/13
+ * @Modified By:
+ */
+@Service
+public class MedalServiceImpl implements MedalService {
+
+    @Autowired
+    MedalDao medalDao;
+
+    @Autowired
+    User2MedalDao user2MedalDao;
+
+    @Override
+    public Medal saveMedal(Medal medal){
+        return medalDao.save(medal);
+    }
+
+    @Override
+    public Medal findById(long id){
+        return medalDao.findById(id);
+    }
+
+    @Override
+    public User2Medal saveUser2Medal(User2Medal medal){
+        return user2MedalDao.save(medal);
+    }
+
+    @Override
+    public Page<User2Medal> findByPage(long userId, Pageable pageable){
+        Specifications<User2Medal> where=Specifications.where(getUser2Medal(userId));
+        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
+            public Predicate toPredicate(Root<User2Medal> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+                Predicate p=criteriaBuilder.conjunction();
+                p.getExpressions()
+                        .add(criteriaBuilder.equal(root.get("userId"),userId));
+                return p;
+            }
+        };
+    }
+
+    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;
+            }
+        };
+    }
+
+}

+ 16 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/BaseController.java

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

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

@@ -0,0 +1,59 @@
+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
+ * @Date: Created in 下午7:28 2018/2/12
+ * @Modified By:
+ */
+@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);
+    }
+}

+ 16 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/exception/HttpBadRequestException.java

@@ -0,0 +1,16 @@
+package cn.iselab.mooctest.user.web.exception;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+/**
+ * @author sean
+ * @date 2017-03-19.
+ */
+@ResponseStatus(code = HttpStatus.BAD_REQUEST)
+public class HttpBadRequestException extends RuntimeException {
+
+    public HttpBadRequestException(String message) {
+        super(message);
+    }
+}

+ 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());
+
+}

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

@@ -0,0 +1,23 @@
+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
+ * @Date: Created in 下午11:05 2018/2/13
+ * @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);
+}

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

@@ -0,0 +1,27 @@
+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
+ * @Date: Created in 下午11:05 2018/2/13
+ * @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);
+}

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

@@ -0,0 +1,67 @@
+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
+ * @Date: Created in 下午11:05 2018/2/13
+ * @Modified By:
+ */
+@Service
+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);
+            }
+        });
+    }
+}

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

@@ -0,0 +1,104 @@
+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
+ * @Date: Created in 下午11:05 2018/2/13
+ * @Modified By:
+ */
+@Service
+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

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

@@ -0,0 +1,54 @@
+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.*;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午11:03 2018/2/13
+ * @Modified By:
+ */
+public class IntegralServiceImplTest {
+
+    @InjectMocks
+    IntegralService integralService=new IntegralServiceImpl();
+
+    @Mock
+    User2IntegralDao user2IntegralDao;
+
+    @Mock
+    UserIntegralDao userIntegralDao;
+
+    @Before
+    public void setUp() throws Exception {
+    }
+
+    @Test
+    public void findByUserId() throws Exception {
+    }
+
+    @Test
+    public void saveIntegral() throws Exception {
+    }
+
+    @Test
+    public void findPage() throws Exception {
+    }
+
+    @Test
+    public void findByTime() throws Exception {
+    }
+
+    @Test
+    public void saveUser2Integral() throws Exception {
+    }
+
+}

+ 35 - 0
mooctest-user-server/src/test/java/cn/iselab/mooctest/user/service/impl/MedalServiceImplTest.java

@@ -0,0 +1,35 @@
+package cn.iselab.mooctest.user.service.impl;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午11:04 2018/2/13
+ * @Modified By:
+ */
+public class MedalServiceImplTest {
+    @Before
+    public void setUp() throws Exception {
+    }
+
+    @Test
+    public void saveMedal() throws Exception {
+    }
+
+    @Test
+    public void findById() throws Exception {
+    }
+
+    @Test
+    public void saveUser2Medal() throws Exception {
+    }
+
+    @Test
+    public void findByPage() throws Exception {
+    }
+
+}

+ 18 - 0
mooctest-user-server/src/test/java/cn/iselab/mooctest/user/web/ctrl/IntegralControllerTest.java

@@ -0,0 +1,18 @@
+package cn.iselab.mooctest.user.web.ctrl;
+
+import org.junit.Before;
+
+import static org.junit.Assert.*;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午11:04 2018/2/13
+ * @Modified By:
+ */
+public class IntegralControllerTest {
+    @Before
+    public void setUp() throws Exception {
+    }
+
+}

+ 18 - 0
mooctest-user-server/src/test/java/cn/iselab/mooctest/user/web/logic/impl/IntegralLogicImplTest.java

@@ -0,0 +1,18 @@
+package cn.iselab.mooctest.user.web.logic.impl;
+
+import org.junit.Before;
+
+import static org.junit.Assert.*;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午11:07 2018/2/13
+ * @Modified By:
+ */
+public class IntegralLogicImplTest {
+    @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/14/2018 16:04:18 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 AUTO_INCREMENT,
+  `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 AUTO_INCREMENT,
+  `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 AUTO_INCREMENT=2 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 AUTO_INCREMENT,
+  `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 AUTO_INCREMENT,
+  `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;