Просмотр исходного кода

增加LearnTag和LearnRecord实体及相关接口,已完成状态记录接口

feick 5 лет назад
Родитель
Сommit
383bdfab4b

+ 75 - 0
src/main/java/com/yaoxiang/diagnosis/controller/LearnRecordController.java

@@ -0,0 +1,75 @@
+package com.yaoxiang.diagnosis.controller;
+
+import com.yaoxiang.diagnosis.entity.LearnRecord;
+import com.yaoxiang.diagnosis.model.Result;
+import com.yaoxiang.diagnosis.service.LearnRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@Api(tags = "学习")
+@RestController
+@RequestMapping("learn")
+public class LearnRecordController {
+
+    @Autowired
+    private LearnRecordService learnRecordService;
+
+    @ApiOperation("增加")
+    @PostMapping("add")
+    public Result add(Long uid, String content, Long beginTime, Long endTime) {
+        if (beginTime == null) {
+            beginTime = System.currentTimeMillis();
+        }
+        boolean result = learnRecordService.add(uid, content, beginTime, endTime);
+        return Result.ok(result);
+    }
+
+    @ApiOperation("更新")
+    @PostMapping("update")
+    public Result update(@RequestBody LearnRecord record) {
+        boolean result = learnRecordService.update(record);
+        return Result.ok(result);
+    }
+
+    @ApiOperation("删除")
+    @PostMapping("delete")
+    public Result delete(Long id) {
+        boolean result = learnRecordService.delete(id);
+        return Result.ok(result);
+    }
+
+    @ApiOperation("获取当月的记录情况")
+    @ApiImplicitParam(name = "time", value = "月份时间,毫秒", paramType = "query")
+    public Map<Integer, Long> monthStatus(Long uid, Long time) {
+        if (time == null) {
+            time = System.currentTimeMillis();
+        }
+        return learnRecordService.monthStatus(uid, time);
+    }
+
+    @ApiOperation("获取列表")
+    @GetMapping("list")
+    public List<LearnRecord> list(Long uid, String category,
+                                  @RequestParam(defaultValue = "0") Long startTime, Long endTime) {
+        if (endTime == null) {
+            endTime = System.currentTimeMillis();
+        }
+        return learnRecordService.list(uid, category, startTime, endTime);
+    }
+
+    @ApiOperation("获取本周的记录")
+    @GetMapping("listByWeek")
+    public List<LearnRecord> listByWeek(Long uid, Long time) {
+        if (time == null) {
+            time = System.currentTimeMillis();
+        }
+        return learnRecordService.listByWeek(uid, time);
+    }
+
+}

+ 53 - 0
src/main/java/com/yaoxiang/diagnosis/controller/LearnTagController.java

@@ -0,0 +1,53 @@
+package com.yaoxiang.diagnosis.controller;
+
+import com.yaoxiang.diagnosis.entity.LearnTag;
+import com.yaoxiang.diagnosis.model.Result;
+import com.yaoxiang.diagnosis.service.LearnTagService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Api(tags = "学习标签")
+@RestController
+@RequestMapping("learnTag")
+public class LearnTagController {
+
+    @Autowired
+    private LearnTagService learnTagService;
+
+    @GetMapping("list")
+    public List<LearnTag> list(Long uid, String category) {
+        return learnTagService.list(uid, category);
+    }
+
+    @GetMapping("exists")
+    @ApiOperation("检测是否已存在标签")
+    public Result exists(Long uid, String content) {
+        boolean result = learnTagService.exists(uid, content);
+        return Result.ok(result);
+    }
+
+    @PostMapping("add")
+    public Result add(@RequestBody LearnTag learnTag) {
+        if (learnTagService.exists(learnTag.getUid(), learnTag.getContent())) {
+            return Result.fail("该标签已存在");
+        }
+        boolean result = learnTagService.add(learnTag);
+        return Result.ok(result);
+    }
+
+    @PostMapping("update")
+    public Result update(@RequestBody LearnTag learnTag) {
+        boolean result = learnTagService.update(learnTag);
+        return Result.ok(result);
+    }
+
+    @PostMapping("delete")
+    public Result delete(Long id) {
+        boolean result = learnTagService.delete(id);
+        return Result.ok(result);
+    }
+}

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

@@ -0,0 +1,8 @@
+package com.yaoxiang.diagnosis.dao;
+
+import com.yaoxiang.diagnosis.entity.LearnRecord;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface LearnRecordRepo extends JpaRepository<LearnRecord, Long>, JpaSpecificationExecutor<LearnRecord> {
+}

+ 10 - 0
src/main/java/com/yaoxiang/diagnosis/dao/LearnTagRepo.java

@@ -0,0 +1,10 @@
+package com.yaoxiang.diagnosis.dao;
+
+import com.yaoxiang.diagnosis.entity.LearnTag;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+public interface LearnTagRepo extends JpaRepository<LearnTag, Long>, JpaSpecificationExecutor<LearnTag> {
+
+
+}

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

@@ -0,0 +1,122 @@
+package com.yaoxiang.diagnosis.entity;
+
+
+import io.swagger.annotations.ApiModel;
+import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.UpdateTimestamp;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@Entity
+@ApiModel("学习标签")
+public class LearnRecord {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+    @Column(nullable = false)
+    private Long uid;
+    @Column(nullable = false)
+    private String content;
+    private Integer learnTime;
+    private Date beginTime;
+    private Date endTime;
+
+    private Double score;
+    private Double star;
+    private String status;
+
+    @CreationTimestamp
+    private Date createtime;
+    @UpdateTimestamp
+    private Date updatetime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getUid() {
+        return uid;
+    }
+
+    public void setUid(Long uid) {
+        this.uid = uid;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getLearnTime() {
+        return learnTime;
+    }
+
+    public void setLearnTime(Integer learnTime) {
+        this.learnTime = learnTime;
+    }
+
+    public Date getBeginTime() {
+        return beginTime;
+    }
+
+    public void setBeginTime(Date beginTime) {
+        this.beginTime = beginTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+    public Double getStar() {
+        return star;
+    }
+
+    public void setStar(Double star) {
+        this.star = star;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+}

+ 74 - 0
src/main/java/com/yaoxiang/diagnosis/entity/LearnTag.java

@@ -0,0 +1,74 @@
+package com.yaoxiang.diagnosis.entity;
+
+import io.swagger.annotations.ApiModel;
+import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.UpdateTimestamp;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@Entity
+@ApiModel("学习标签")
+public class LearnTag {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    private String category;
+    private Long uid;
+    @Column(nullable = false)
+    private String content;
+    @CreationTimestamp
+    private Date createtime;
+    @UpdateTimestamp
+    private Date updatetime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCategory() {
+        return category;
+    }
+
+    public void setCategory(String category) {
+        this.category = category;
+    }
+
+    public Long getUid() {
+        return uid;
+    }
+
+    public void setUid(Long uid) {
+        this.uid = uid;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+}

+ 82 - 0
src/main/java/com/yaoxiang/diagnosis/service/LearnRecordService.java

@@ -0,0 +1,82 @@
+package com.yaoxiang.diagnosis.service;
+
+import com.yaoxiang.diagnosis.dao.LearnRecordRepo;
+import com.yaoxiang.diagnosis.entity.LearnRecord;
+import com.yaoxiang.diagnosis.util.DateUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.Predicate;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class LearnRecordService {
+
+    @Autowired
+    private LearnRecordRepo learnRecordRepo;
+
+    public List<LearnRecord> list(Long uid, String category, Long startTime, Long endTime) {
+        return learnRecordRepo.findAll((root, query, builder) -> {
+            List<Predicate> ps = new ArrayList<>();
+            if (uid != null) {
+                ps.add(builder.equal(root.get("uid"), uid));
+            }
+            if (StringUtils.isNotBlank(category)) {
+                ps.add(builder.like(root.get("category"), "%" + category + "%"));
+            }
+            if (startTime != null) {
+                ps.add(builder.greaterThan(root.get("createtime"), startTime));
+            }
+            if (endTime != null) {
+                ps.add(builder.lessThan(root.get("createtime"), endTime));
+            }
+            Predicate[] p = new Predicate[ps.size()];
+            return builder.and(ps.toArray(p));
+        });
+    }
+
+    public Map<Integer, Long> 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());
+        return list.stream().collect(Collectors.groupingBy(a -> DateUtil.getDay(a.getCreatetime()),
+                Collectors.counting()));
+    }
+
+    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());
+    }
+
+
+    public boolean add(Long uid, String content, Long beginTime, Long endTime) {
+        LearnRecord record = new LearnRecord();
+        record.setUid(uid);
+        record.setContent(content);
+        record.setBeginTime(new Date(beginTime));
+        if (endTime != null) {
+            record.setEndTime(new Date(endTime));
+        }
+        learnRecordRepo.save(record);
+        return true;
+    }
+
+    public boolean update(LearnRecord learnRecord) {
+        Optional<LearnRecord> optional = learnRecordRepo.findById(learnRecord.getId());
+        if (!optional.isPresent()) {
+            return false;
+        }
+        learnRecordRepo.save(learnRecord);
+        return true;
+    }
+
+    public boolean delete(Long id) {
+        learnRecordRepo.deleteById(id);
+        return true;
+    }
+}

+ 95 - 0
src/main/java/com/yaoxiang/diagnosis/service/LearnTagService.java

@@ -0,0 +1,95 @@
+package com.yaoxiang.diagnosis.service;
+
+import com.yaoxiang.diagnosis.dao.LearnTagRepo;
+import com.yaoxiang.diagnosis.entity.LearnTag;
+import com.yaoxiang.diagnosis.util.CommonUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.data.jpa.domain.Specification;
+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.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+@Service
+public class LearnTagService {
+
+    @Autowired
+    private LearnTagRepo learnTagRepo;
+
+    public boolean add(LearnTag learnTag) {
+        learnTagRepo.save(learnTag);
+        return true;
+    }
+
+    public boolean exists(Long uid, String content) {
+        LearnTag tag = new LearnTag();
+        tag.setContent(content);
+        Example<LearnTag> example = Example.of(tag);
+        if (exists(example)) {
+            return false;
+        }
+        if (uid == null) {
+            return true;
+        }
+        tag.setUid(uid);
+        return exists(example);
+    }
+
+    private boolean exists(Example<LearnTag> example) {
+        List<LearnTag> list = learnTagRepo.findAll(example);
+        return CommonUtil.notEmpty(list);
+    }
+
+    public boolean update(LearnTag learnTag) {
+        Optional<LearnTag> tagOptional = learnTagRepo.findById(learnTag.getId());
+        if (!tagOptional.isPresent()) {
+            return false;
+        }
+        LearnTag tag = tagOptional.get();
+        tag.setContent(learnTag.getContent());
+        tag.setCategory(learnTag.getCategory());
+        learnTagRepo.save(tag);
+        return true;
+    }
+
+    public boolean delete(Long id) {
+        learnTagRepo.deleteById(id);
+        return true;
+    }
+
+    public List<LearnTag> list(Long uid, String category) {
+        return learnTagRepo.findAll((root, query, builder) -> {
+            List<Predicate> ps = new ArrayList<>();
+            if (uid != null) {
+                ps.add(builder.or(builder.equal(root.get("uid"), uid),
+                        builder.equal(root.get("uid"), null)));
+            } else {
+                ps.add(builder.equal(root.get("uid"), null));
+            }
+            if (StringUtils.isNotBlank(category)) {
+                ps.add(builder.like(root.get("category"), "%" + category + "%"));
+            }
+            Predicate[] p = new Predicate[ps.size()];
+            return builder.and(ps.toArray(p));
+        });
+    }
+
+    public Map<String, List<LearnTag>> group(Long uid, String category) {
+        List<LearnTag> list = list(uid, category);
+        return group(list);
+    }
+
+    private Map<String, List<LearnTag>> group(List<LearnTag> list) {
+        return list.stream().collect(Collectors.groupingBy(LearnTag::getCategory));
+    }
+}

+ 24 - 0
src/main/java/com/yaoxiang/diagnosis/util/DateUtil.java

@@ -177,5 +177,29 @@ public class DateUtil {
         calendar.setTime(date);
         return calendar.get(Calendar.MINUTE);
     }
+
+    public static Date getFirstDayOfWeek(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.setFirstDayOfWeek(Calendar.SUNDAY);
+        int dayofweek = calendar.get(Calendar.DAY_OF_WEEK);
+        calendar.add(Calendar.DATE, dayofweek - 1);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 1);
+        return calendar.getTime();
+    }
+
+    public static Date getLastDayOfWeek(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.setFirstDayOfWeek(Calendar.SUNDAY);
+        int dayofweek = calendar.get(Calendar.DAY_OF_WEEK);
+        calendar.add(Calendar.DATE, 7 - dayofweek);
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        return calendar.getTime();
+    }
 }
 

+ 14 - 0
src/main/resources/static/main.css

@@ -0,0 +1,14 @@
+body {
+    background-color: #f5f5f5;
+}
+
+#main-content {
+    max-width: 940px;
+    padding: 2em 3em;
+    margin: 0 auto 20px;
+    background-color: #fff;
+    border: 1px solid #e5e5e5;
+    -webkit-border-radius: 5px;
+    -moz-border-radius: 5px;
+    border-radius: 5px;
+}

+ 4 - 0
src/test/java/com/yaoxiang/diagnosis/service/GroupByTest.java

@@ -0,0 +1,4 @@
+package com.yaoxiang.diagnosis.service;
+
+public class GroupByTest {
+}

+ 10 - 1
src/test/java/com/yaoxiang/diagnosis/service/StringTest.java

@@ -1,10 +1,12 @@
 package com.yaoxiang.diagnosis.service;
 
+import com.yaoxiang.diagnosis.util.DateUtil;
 import io.swagger.models.auth.In;
 import org.junit.Test;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -16,7 +18,7 @@ public class StringTest {
         String text = "ABCD";
         String[] a = text.split("");
         System.out.println(a.length);
-        System.out.println(a);
+        System.out.println(Arrays.toString(a));
     }
 
     @Test
@@ -74,4 +76,11 @@ public class StringTest {
         System.out.println(matcher.group());
 
     }
+
+    @Test
+    public void test() {
+        Date date = new Date();
+        System.out.println(DateUtil.getFirstDayOfWeek(date));
+        System.out.println(DateUtil.getLastDayOfWeek(date));
+    }
 }