UserBalanceController.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package com.izouma.nineth.web;
  2. import com.izouma.nineth.domain.BalanceRecord;
  3. import com.izouma.nineth.domain.ExportWithdraw;
  4. import com.izouma.nineth.domain.UserBalance;
  5. import com.izouma.nineth.dto.PageQuery;
  6. import com.izouma.nineth.exception.BusinessException;
  7. import com.izouma.nineth.repo.AutoWithdrawRecordRepo;
  8. import com.izouma.nineth.repo.BalanceRecordRepo;
  9. import com.izouma.nineth.repo.ExportWithdrawRepo;
  10. import com.izouma.nineth.repo.UserBalanceRepo;
  11. import com.izouma.nineth.service.UserBalanceService;
  12. import com.izouma.nineth.utils.DateTimeUtils;
  13. import com.izouma.nineth.utils.JpaUtils;
  14. import com.izouma.nineth.utils.SecurityUtils;
  15. import lombok.AllArgsConstructor;
  16. import org.apache.commons.io.IOUtils;
  17. import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
  18. import org.springframework.core.io.InputStreamResource;
  19. import org.springframework.data.domain.Page;
  20. import org.springframework.data.domain.Pageable;
  21. import org.springframework.data.redis.core.RedisTemplate;
  22. import org.springframework.http.MediaType;
  23. import org.springframework.http.ResponseEntity;
  24. import org.springframework.security.access.prepost.PreAuthorize;
  25. import org.springframework.web.bind.annotation.*;
  26. import org.springframework.web.multipart.MultipartFile;
  27. import java.io.File;
  28. import java.io.FileInputStream;
  29. import java.io.IOException;
  30. import java.time.Duration;
  31. import java.time.LocalDate;
  32. import java.util.concurrent.ExecutionException;
  33. @RestController
  34. @RequestMapping("/userBalance")
  35. @AllArgsConstructor
  36. public class UserBalanceController extends BaseController {
  37. private final UserBalanceRepo userBalanceRepo;
  38. private final BalanceRecordRepo balanceRecordRepo;
  39. private final UserBalanceService userBalanceService;
  40. private final ExportWithdrawRepo exportWithdrawRepo;
  41. private final RedisTemplate<String, Object> redisTemplate;
  42. private final AutoWithdrawRecordRepo autoWithdrawRecordRepo;
  43. @PostMapping("/all")
  44. @PreAuthorize("hasRole('ADMIN')")
  45. public Page<UserBalance> all(@RequestBody PageQuery pageQuery) {
  46. return userBalanceRepo.findAll(JpaUtils.toSpecification(pageQuery, UserBalance.class), JpaUtils.toPageRequest(pageQuery));
  47. }
  48. @PostMapping("/records")
  49. @PreAuthorize("hasRole('ADMIN')")
  50. public Page<BalanceRecord> records(@RequestBody PageQuery pageQuery) {
  51. return balanceRecordRepo.findAll(JpaUtils.toSpecification(pageQuery, BalanceRecord.class), JpaUtils.toPageRequest(pageQuery));
  52. }
  53. @PostMapping("/settle")
  54. @PreAuthorize("hasRole('ADMIN')")
  55. public void settle(@RequestParam LocalDate start, @RequestParam LocalDate end) {
  56. userBalanceService.settle(start, end);
  57. }
  58. @PostMapping(value = "/exportWithdraw")
  59. @PreAuthorize("hasRole('ADMIN')")
  60. public void exportWithdraw(String remark) throws IOException, InvalidFormatException {
  61. userBalanceService.exportWithdrawAsync(remark);
  62. }
  63. @PostMapping(value = "/exportHistory")
  64. @PreAuthorize("hasRole('ADMIN')")
  65. public Page<ExportWithdraw> exportHistory(Pageable pageable) {
  66. return exportWithdrawRepo.findAll(pageable);
  67. }
  68. @PostMapping("/importFail")
  69. @PreAuthorize("hasRole('ADMIN')")
  70. public void importFail(@RequestPart("withdrawList") MultipartFile withdrawFile,
  71. @RequestPart("failList") MultipartFile failFile) throws IOException {
  72. userBalanceService.importFail(withdrawFile, failFile);
  73. }
  74. @PostMapping("/autoWithdraw")
  75. @PreAuthorize("hasRole('ADMIN')")
  76. public void autoWithdraw() throws ExecutionException, InterruptedException {
  77. LocalDate date = LocalDate.now();
  78. autoWithdrawRecordRepo.findByDate(date).ifPresent(a -> {
  79. throw new BusinessException("今日已经提现过");
  80. });
  81. userBalanceService.autoWithdraw(date);
  82. }
  83. @GetMapping("/my")
  84. public UserBalance my() {
  85. return userBalanceRepo.findById(SecurityUtils.getAuthenticatedUser().getId()).orElse(new UserBalance());
  86. }
  87. @GetMapping("/my/record")
  88. public Page<BalanceRecord> myRecord(Pageable pageable) {
  89. return balanceRecordRepo.findByUserId(SecurityUtils.getAuthenticatedUser().getId(), pageable);
  90. }
  91. // @PostMapping("/withdraw")
  92. // public void withdraw() {
  93. // userBalanceService.withdraw(SecurityUtils.getAuthenticatedUser().getId());
  94. // }
  95. }