Przeglądaj źródła

Merge branch 'dev' of xiongzhu/raex_back into master

wangqifan 3 lat temu
rodzic
commit
58bf7de729

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

+ 5 - 0
src/main/java/com/izouma/nineth/domain/MintActivity.java

@@ -16,6 +16,7 @@ import org.hibernate.annotations.DynamicUpdate;
 import javax.persistence.Column;
 import javax.persistence.Convert;
 import javax.persistence.Entity;
+import javax.persistence.Transient;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.List;
@@ -64,6 +65,10 @@ public class MintActivity extends BaseEntity {
     @ApiModelProperty("发行数量")
     private int total;
 
+    @ApiModelProperty("发行数量")
+    @Transient
+    private int vTotal;
+
     @ApiModelProperty("gas费")
     @Column(precision = 10, scale = 2)
     private BigDecimal gasPrice;

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

@@ -0,0 +1,22 @@
+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;
+import java.util.List;
+
+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);
+
+    List<DailySign> findAllByUserIdAndDateBetween(Long userId, LocalDate start, LocalDate end);
+}

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

@@ -0,0 +1,43 @@
+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;
+import java.util.List;
+
+@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);
+    }
+
+    public List<DailySign> search(Long userId, LocalDate start, LocalDate end) {
+        return dailySignRepo.findAllByUserIdAndDateBetween(userId, start, end);
+    }
+
+}

+ 12 - 1
src/main/java/com/izouma/nineth/service/MintActivityService.java

@@ -17,7 +17,9 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
+import org.dom4j.tree.ContentListFacade;
 import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
 import org.springframework.data.redis.core.BoundValueOperations;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.TaskScheduler;
@@ -45,7 +47,16 @@ public class MintActivityService {
 
 
     public Page<MintActivity> all(PageQuery pageQuery) {
-        return mintActivityRepo.findAll(JpaUtils.toSpecification(pageQuery, MintActivity.class), JpaUtils.toPageRequest(pageQuery));
+        Page<MintActivity> result = mintActivityRepo
+                .findAll(JpaUtils.toSpecification(pageQuery, MintActivity.class), JpaUtils.toPageRequest(pageQuery));
+        List<MintActivity> content = result.getContent();
+        List<MintActivity> newContent = new ArrayList<>();
+        for (MintActivity activity : content) {
+            activity.setVTotal(activity.getTotal());
+            activity.setTotal(0);
+            newContent.add(activity);
+        }
+        return new PageImpl<>(newContent, result.getPageable(), result.getTotalElements());
     }
 
     public synchronized Long increaseStock(Long id, int number) {

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

@@ -0,0 +1,72 @@
+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.time.LocalDate;
+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);
+    }
+
+    @PostMapping("/search")
+    public List<DailySign> search(@RequestParam Long userId, @RequestParam LocalDate start, @RequestParam LocalDate end) {
+        return dailySignService.search(userId, start, end);
+    }
+
+    @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);
+    }
+}
+

+ 1 - 1
src/main/vue/src/views/MintActivityList.vue

@@ -60,7 +60,7 @@
                     <el-tag type="info" v-else>否</el-tag>
                 </template>
             </el-table-column>
-            <el-table-column prop="total" label="发行数量" width="80" align="center"> </el-table-column>
+            <el-table-column prop="vtotal" label="发行数量" width="80" align="center"> </el-table-column>
             <el-table-column prop="stock" label="剩余数量" width="80" align="center"> </el-table-column>
             <el-table-column prop="gasPrice" label="GAS费" width="80" align="center"></el-table-column>
             <el-table-column prop="onShelf" label="上架" width="80" align="center">