Răsfoiți Sursa

Merge branch 'dev' of feick/diagnosis into master

feick 5 ani în urmă
părinte
comite
f3008d2aa5

+ 6 - 0
src/main/java/com/yaoxiang/diagnosis/config/Constants.java

@@ -128,4 +128,10 @@ public class Constants {
         add(SPECIAL_MASTER_STATUS_USAGE);
     }};
 
+    public static final String LEARN_STATUS_TODO = "待开始";
+    public static final String LEARN_STATUS_DOING = "解决中";
+    public static final String LEARN_STATUS_PAUSE = "暂停中";
+    public static final String LEARN_STATUS_FINISH = "已完成";
+    public static final String LEARN_STATUS_CLOSED = "已关闭";
+
 }

+ 36 - 4
src/main/java/com/yaoxiang/diagnosis/controller/LearnRecordController.java

@@ -1,5 +1,6 @@
 package com.yaoxiang.diagnosis.controller;
 
+import com.yaoxiang.diagnosis.config.Constants;
 import com.yaoxiang.diagnosis.entity.LearnRecord;
 import com.yaoxiang.diagnosis.model.Result;
 import com.yaoxiang.diagnosis.service.LearnRecordService;
@@ -7,6 +8,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.tuple.Pair;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -23,13 +25,26 @@ public class LearnRecordController {
 
     @ApiOperation("增加")
     @PostMapping("add")
-    public Result add(Long uid, String content, String status,
+    public Result add(Long uid, String content, Long subjectId,
                       @RequestParam(required = false) Long beginTime,
                       @RequestParam(required = false) Long endTime) {
         if (beginTime == null) {
             beginTime = System.currentTimeMillis();
         }
-        boolean result = learnRecordService.add(uid, content, status, beginTime, endTime);
+        boolean result = learnRecordService.add(uid, content, subjectId, null, null, beginTime, endTime);
+        return new Result(result);
+    }
+
+    @ApiOperation("学习计划增加记录")
+    @PostMapping("addByPlan")
+    public Result addByPlan(Long uid, String content, Long subjectId,
+                            Long planId, @RequestParam(defaultValue = "0") Integer step,
+                            @RequestParam(required = false) Long beginTime,
+                            @RequestParam(required = false) Long endTime) {
+        if (beginTime == null) {
+            beginTime = System.currentTimeMillis();
+        }
+        boolean result = learnRecordService.add(uid, content, subjectId, planId, step, beginTime, endTime);
         return new Result(result);
     }
 
@@ -50,7 +65,7 @@ public class LearnRecordController {
     @GetMapping("monthStatus")
     @ApiOperation("获取当月的记录情况")
     @ApiImplicitParam(name = "time", value = "月份时间,单位至毫秒", paramType = "query")
-    public Map<String, Long> monthStatus(Long uid, @RequestParam(required = false) Long time) {
+    public Map<String, Pair> monthStatus(Long uid, @RequestParam(required = false) Long time) {
         if (time == null) {
             time = System.currentTimeMillis();
         }
@@ -79,7 +94,7 @@ public class LearnRecordController {
         if (endTime == null) {
             endTime = System.currentTimeMillis();
         }
-        return learnRecordService.list(uid, category, startTime, endTime);
+        return learnRecordService.list(uid, category, null, startTime, endTime);
     }
 
     @ApiOperation("获取time(毫秒)所在周的记录,time为null时,获取本周记录")
@@ -92,4 +107,21 @@ public class LearnRecordController {
         return learnRecordService.listByWeek(uid, time);
     }
 
+    @ApiOperation("获取time(毫秒)所在天的记录,time为null时,获取当天记录")
+    @GetMapping("listByDay")
+    @ApiImplicitParam(name = "time", value = "周时间,单位至毫秒", paramType = "query")
+    public List<LearnRecord> listByDay(Long uid, @RequestParam(required = false) Long time) {
+        if (time == null) {
+            time = System.currentTimeMillis();
+        }
+        return learnRecordService.listByDay(uid, time);
+    }
+
+    @ApiOperation("根据用户Id获取待开始、解决中的学习记录")
+    @GetMapping("groupByStatus")
+    @ApiImplicitParam(name = "uid", value = "用户Id", paramType = "query")
+    public Map<String, List<LearnRecord>> groupByStatus(Long uid) {
+        return learnRecordService.groupByStatus(uid);
+    }
+
 }

+ 4 - 0
src/main/java/com/yaoxiang/diagnosis/dao/LearnRecordRepo.java

@@ -4,5 +4,9 @@ import com.yaoxiang.diagnosis.entity.LearnRecord;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 
+import java.util.List;
+
 public interface LearnRecordRepo extends JpaRepository<LearnRecord, Long>, JpaSpecificationExecutor<LearnRecord> {
+
+    List<LearnRecord> findAllByUidAndStatusIn(Long uid, List<String> list);
 }

+ 2 - 2
src/main/java/com/yaoxiang/diagnosis/entity/LearnPlan.java

@@ -34,9 +34,9 @@ public class LearnPlan {
 
     @UpdateTimestamp
     private Date updateTime;
-    @ApiModelProperty("状态 待开始,进行中,暂停中,已完成,已关闭")
+    @ApiModelProperty("状态 待开始,解决中,暂停中,已完成,已关闭")
     private String status;
-    @ApiModelProperty("关联诊断")
+    @ApiModelProperty("关联诊断试卷Id")
     private Long pid;
     @ApiModelProperty("说明")
     private String remark;

+ 4 - 4
src/main/java/com/yaoxiang/diagnosis/entity/LearnRecord.java

@@ -32,12 +32,12 @@ public class LearnRecord {
     private Double score;
     @ApiModelProperty("自评")
     private Double star;
-    @ApiModelProperty("状态 待解决,解决中 已解决 已关闭")
+    @ApiModelProperty("状态 待开始 解决中 暂停中 已完成 已关闭")
     private String status;
     @ApiModelProperty("学习计划步骤")
     private Integer step;
     @ApiModelProperty("学习计划Id")
-    private String planId;
+    private Long planId;
 
     @CreationTimestamp
     private Date createtime;
@@ -68,11 +68,11 @@ public class LearnRecord {
         this.subjectId = subjectId;
     }
 
-    public String getPlanId() {
+    public Long getPlanId() {
         return planId;
     }
 
-    public void setPlanId(String planId) {
+    public void setPlanId(Long planId) {
         this.planId = planId;
     }
 

+ 49 - 11
src/main/java/com/yaoxiang/diagnosis/service/LearnRecordService.java

@@ -1,13 +1,18 @@
 package com.yaoxiang.diagnosis.service;
 
+import com.yaoxiang.diagnosis.config.Constants;
 import com.yaoxiang.diagnosis.dao.LearnRecordRepo;
 import com.yaoxiang.diagnosis.entity.LearnRecord;
 import com.yaoxiang.diagnosis.util.DateUtil;
+import io.swagger.models.auth.In;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.persistence.criteria.Predicate;
+import javax.transaction.Transactional;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -18,7 +23,7 @@ public class LearnRecordService {
     @Autowired
     private LearnRecordRepo learnRecordRepo;
 
-    public List<LearnRecord> list(Long uid, String category, Long startTime, Long endTime) {
+    public List<LearnRecord> list(Long uid, String category, String status, Long startTime, Long endTime) {
 //        SimpleDateFormat sdfmat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
         return learnRecordRepo.findAll((root, query, builder) -> {
@@ -31,7 +36,9 @@ public class LearnRecordService {
             }
 //            ps.add(builder.between(root.get("createtime"),
 //                    sdfmat.parse()));
-
+            if (StringUtils.isNotBlank(status)) {
+                ps.add(builder.equal(root.get("status"), status));
+            }
             if (startTime != null) {
                 ps.add(builder.greaterThanOrEqualTo(root.get("createtime").as(Date.class), new Date(startTime)));
             }
@@ -44,28 +51,43 @@ public class LearnRecordService {
         });
     }
 
-    public Map<String, Long> monthStatus(Long uid, Long time) {
+    public Map<String, Pair> monthStatus(Long uid, Long time) {
         Date date = new Date(time);
         Date startTime = DateUtil.getFirstDayOfMonth(date);
         Date endTime = DateUtil.getLastDayOfMonth(date);
-        List<LearnRecord> list = list(uid, null, startTime.getTime(), endTime.getTime());
+        List<LearnRecord> list = list(uid, null, null, startTime.getTime(), endTime.getTime());
+        Map<String, List<LearnRecord>> map = groupByDay(list);
+        Map<String, Pair> result = new LinkedHashMap<>();
+        map.keySet().stream().sorted(Comparator.comparingInt(Integer::parseInt))
+                .forEach(k -> {
+                    List<LearnRecord> records = map.get(k);
+                    boolean finished = records.stream().allMatch(r -> Constants.LEARN_STATUS_FINISH.equals(r.getStatus()));
+                    Pair<Integer, Boolean> pair = ImmutablePair.of(records.size(), finished);
+                    result.put(k, pair);
+                });
+        return result;
+    }
+
+    private Map<String, List<LearnRecord>> groupByDay(List<LearnRecord> list) {
         SimpleDateFormat format = new SimpleDateFormat("dd");
-        return list.stream().collect(Collectors.groupingBy(a -> format.format(a.getCreatetime()),
-                Collectors.counting()));
+        return list.stream().collect(Collectors.groupingBy(a -> format.format(a.getCreatetime())));
     }
 
     public List<LearnRecord> listByWeek(Long uid, Long time) {
         Date date = new Date(time);
         Date startTime = DateUtil.getFirstDayOfWeek(date);
         Date endTime = DateUtil.getLastDayOfWeek(date);
-        return list(uid, null, startTime.getTime(), endTime.getTime());
+        return list(uid, null, null, startTime.getTime(), endTime.getTime());
     }
 
-
-    public boolean add(Long uid, String content, String status, Long beginTime, Long endTime) {
+    @Transactional
+    public boolean add(Long uid, String content, Long subjectId, Long planId, Integer step, Long beginTime, Long endTime) {
         LearnRecord record = new LearnRecord();
         record.setUid(uid);
-        record.setStatus(status);
+        record.setSubjectId(subjectId);
+        record.setPlanId(planId);
+        record.setStep(step);
+        record.setStatus(Constants.LEARN_STATUS_TODO);
         record.setContent(content);
         record.setBeginTime(new Date(beginTime));
         if (endTime != null) {
@@ -75,6 +97,7 @@ public class LearnRecordService {
         return true;
     }
 
+    @Transactional
     public boolean update(LearnRecord learnRecord) {
         Optional<LearnRecord> optional = learnRecordRepo.findById(learnRecord.getId());
         if (!optional.isPresent()) {
@@ -84,6 +107,7 @@ public class LearnRecordService {
         return true;
     }
 
+    @Transactional
     public boolean delete(Long id) {
         learnRecordRepo.deleteById(id);
         return true;
@@ -93,6 +117,20 @@ public class LearnRecordService {
         Date date = new Date(time);
         Date startTime = DateUtil.getFirstDayOfMonth(date);
         Date endTime = DateUtil.getLastDayOfMonth(date);
-        return list(uid, null, startTime.getTime(), endTime.getTime());
+        return list(uid, null, null, startTime.getTime(), endTime.getTime());
     }
+
+    public List<LearnRecord> listByDay(Long uid, Long time) {
+        Date date = new Date(time);
+        Date startTime = DateUtil.getFirstTimeOfDay(date);
+        Date endTime = DateUtil.getLastTimeOfDay(date);
+        return list(uid, null, null, startTime.getTime(), endTime.getTime());
+    }
+
+    public Map<String, List<LearnRecord>> groupByStatus(Long uid) {
+        List<String> statuses = Arrays.asList(Constants.LEARN_STATUS_TODO, Constants.LEARN_STATUS_DOING);
+        List<LearnRecord> list = learnRecordRepo.findAllByUidAndStatusIn(uid, statuses);
+        return list.stream().collect(Collectors.groupingBy(LearnRecord::getStatus));
+    }
+
 }