wangqifan пре 3 година
родитељ
комит
cdf4628e15

+ 21 - 0
src/main/java/com/izouma/nineth/domain/DailySign.java

@@ -0,0 +1,21 @@
+package com.izouma.nineth.domain;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+import java.time.LocalDate;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("每日签到")
+public class DailySign extends BaseEntity {
+    private Long      userId;
+    private LocalDate date;
+}

+ 19 - 0
src/main/java/com/izouma/nineth/repo/DailySignRepo.java

@@ -0,0 +1,19 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.DailySign;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+
+import javax.transaction.Transactional;
+import java.time.LocalDate;
+
+public interface DailySignRepo extends JpaRepository<DailySign, Long>, JpaSpecificationExecutor<DailySign> {
+    @Query("update DailySign t set t.del = true where t.id = ?1")
+    @Modifying
+    @Transactional
+    void softDelete(Long id);
+
+    DailySign findFirstByUserIdAndDate(Long userId, LocalDate date);
+}

+ 39 - 0
src/main/java/com/izouma/nineth/service/DailySignService.java

@@ -0,0 +1,39 @@
+package com.izouma.nineth.service;
+
+import com.izouma.nineth.domain.DailySign;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.DailySignRepo;
+import com.izouma.nineth.utils.JpaUtils;
+import lombok.AllArgsConstructor;
+import org.redisson.liveobject.resolver.LongGenerator;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+
+@Service
+@AllArgsConstructor
+public class DailySignService {
+
+    private DailySignRepo dailySignRepo;
+
+    public Page<DailySign> all(PageQuery pageQuery) {
+        return dailySignRepo
+                .findAll(JpaUtils.toSpecification(pageQuery, DailySign.class), JpaUtils.toPageRequest(pageQuery));
+    }
+
+    public void sign(Long userId) {
+        LocalDate today = LocalDate.now();
+        DailySign record = dailySignRepo.findFirstByUserIdAndDate(userId, today);
+        if (record != null) {
+            throw new BusinessException("今日已经签到,请明天再来");
+        }
+        DailySign dailySign = new DailySign();
+        dailySign.setUserId(userId);
+        dailySign.setDate(today);
+        dailySignRepo.save(dailySign);
+    }
+
+
+}

+ 66 - 0
src/main/java/com/izouma/nineth/web/DailySignController.java

@@ -0,0 +1,66 @@
+package com.izouma.nineth.web;
+
+import com.izouma.nineth.domain.DailySign;
+import com.izouma.nineth.service.DailySignService;
+import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.DailySignRepo;
+import com.izouma.nineth.utils.ObjUtils;
+import com.izouma.nineth.utils.excel.ExcelUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+@RestController
+@RequestMapping("/dailySign")
+@AllArgsConstructor
+public class DailySignController extends BaseController {
+    private DailySignService dailySignService;
+    private DailySignRepo    dailySignRepo;
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/save")
+    public DailySign save(@RequestBody DailySign record) {
+        if (record.getId() != null) {
+            DailySign orig = dailySignRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            ObjUtils.merge(orig, record);
+            return dailySignRepo.save(orig);
+        }
+        return dailySignRepo.save(record);
+    }
+
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/all")
+    public Page<DailySign> all(@RequestBody PageQuery pageQuery) {
+        return dailySignService.all(pageQuery);
+    }
+
+    @GetMapping("/get/{id}")
+    public DailySign get(@PathVariable Long id) {
+        return dailySignRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+    }
+
+    @PostMapping("/del/{id}")
+    public void del(@PathVariable Long id) {
+        dailySignRepo.softDelete(id);
+    }
+
+    @GetMapping("/excel")
+    @ResponseBody
+    public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
+        List<DailySign> data = all(pageQuery).getContent();
+        ExcelUtils.export(response, data);
+    }
+
+    @PostMapping("/sign")
+    public void sign(Long userId) {
+        dailySignService.sign(userId);
+    }
+}
+