You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
7.8 KiB

3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
  1. package com.example.demo.controller.coin;
  2. import com.example.demo.Util.BusinessException;
  3. import com.example.demo.Util.JWTUtil;
  4. import com.example.demo.Util.RedisLockUtil;
  5. import com.example.demo.domain.DTO.GoldDetailDTO;
  6. import com.example.demo.domain.DTO.GoldUserDTO;
  7. import com.example.demo.domain.entity.Admin;
  8. import com.example.demo.domain.entity.User;
  9. import com.example.demo.domain.vo.coin.GoldDetail;
  10. import com.example.demo.domain.vo.coin.Page;
  11. import com.example.demo.domain.vo.coin.Result;
  12. import com.example.demo.service.coin.GoldDetailService;
  13. import com.example.demo.serviceImpl.coin.AiEmotionServiceImpl;
  14. import jakarta.servlet.http.HttpServletRequest;
  15. import jakarta.validation.Valid;
  16. import lombok.RequiredArgsConstructor;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.apache.commons.lang3.StringUtils;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.util.ObjectUtils;
  21. import org.springframework.web.bind.annotation.*;
  22. import org.springframework.web.context.request.RequestContextHolder;
  23. import org.springframework.web.context.request.ServletRequestAttributes;
  24. import java.util.Arrays;
  25. import java.util.List;
  26. import java.util.UUID;
  27. /**
  28. * @program: GOLD
  29. * @ClassName GoldDetailController
  30. * @description:
  31. * @author: huangqizhen
  32. * @create: 202506-23 14:41
  33. * @Version 1.0
  34. **/
  35. @RestController
  36. @RequestMapping("/goldDetail")
  37. @RequiredArgsConstructor
  38. @Slf4j
  39. @CrossOrigin
  40. public class GoldDetailController {
  41. private final GoldDetailService goldDetailService;
  42. @Autowired
  43. private RedisLockUtil redisLockUtil;
  44. @Autowired
  45. private AiEmotionServiceImpl aiEmotionServiceImpl;
  46. @PostMapping("/getGoldDetail")
  47. public Result getGoldDetail(@RequestBody Page page) throws Exception {
  48. if(ObjectUtils.isEmpty(page.getPageNum())){
  49. return Result.error("页码数为空!");
  50. }
  51. if(ObjectUtils.isEmpty(page.getPageSize())){
  52. return Result.error("页大小为空!");
  53. }
  54. else{
  55. if(page.getGoldDetail().getMarkets()==null||page.getGoldDetail().getMarkets().isEmpty()){
  56. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  57. String token = request.getHeader("token");
  58. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  59. List<String> markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));;
  60. if(!markets.contains("总部")) {
  61. page.getGoldDetail().setMarkets(markets);
  62. }
  63. }
  64. return Result.success(goldDetailService.getGoldDetail(page.getPageNum(), page.getPageSize(), page.getGoldDetail()));
  65. }
  66. }
  67. @PostMapping("/getTotal")
  68. public Result getTotal(@RequestBody Page page) throws Exception {
  69. Integer pageNum = page.getPageNum();
  70. Integer pageSize = page.getPageSize();
  71. GoldDetail goldDetail = page.getGoldDetail();
  72. if(page.getGoldDetail().getMarkets()==null||page.getGoldDetail().getMarkets().isEmpty()){
  73. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  74. String token = request.getHeader("token");
  75. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  76. List<String> markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
  77. if(!markets.contains("总部")) {
  78. page.getGoldDetail().setMarkets(markets);
  79. }
  80. }
  81. return Result.success(goldDetailService.sumGold(pageNum,pageSize,goldDetail));
  82. }
  83. @PostMapping("/goldTotal")
  84. public Result GoldTotal(@RequestBody User user) throws Exception {
  85. if(user.getMarkets()==null||user.getMarkets().isEmpty()) {
  86. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  87. String token = request.getHeader("token");
  88. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  89. List<String> markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
  90. if(!markets.contains("总部")) {
  91. user.setMarkets(markets);
  92. }
  93. }
  94. return Result.success(goldDetailService.GoldTotal(user));
  95. }
  96. @PostMapping("/getGold")
  97. public Result getGold(@RequestBody Page page) throws Exception {
  98. // System.out.println( page);
  99. if(ObjectUtils.isEmpty(page.getPageNum())){
  100. return Result.error("页码数为空!");
  101. }
  102. if(ObjectUtils.isEmpty(page.getPageSize())){
  103. return Result.error("页大小为空!");
  104. }
  105. if(page.getUser().getMarkets()==null||page.getUser().getMarkets().isEmpty()) {
  106. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  107. String token = request.getHeader("token");
  108. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  109. List<String> markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
  110. if(!markets.contains("总部")) {
  111. page.getUser().setMarkets(markets);
  112. }
  113. }
  114. return Result.success(goldDetailService.getGold(page.getPageNum(), page.getPageSize(), page.getUser()));
  115. }
  116. @PostMapping("/export")
  117. public Result export(@Valid @RequestBody GoldDetailDTO dto) {
  118. String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分)
  119. String requestId = UUID.randomUUID().toString(); // 请求 ID(防止误删锁)
  120. long expireTime = 5000; // 锁过期时间(5秒)s
  121. try {
  122. // 尝试获取锁
  123. if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
  124. throw new BusinessException("操作太频繁,请稍后重试");
  125. }
  126. // 执行业务逻辑
  127. return goldDetailService.addExportRecord(dto);
  128. } finally {
  129. // 释放锁
  130. redisLockUtil.unlock(lockKey, requestId);
  131. }
  132. }
  133. @PostMapping("/exportGold")
  134. public Result export(@Valid @RequestBody GoldUserDTO dto) {
  135. String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分)
  136. String requestId = UUID.randomUUID().toString(); // 请求 ID(防止误删锁)
  137. long expireTime = 5000; // 锁过期时间(5秒)s
  138. try {
  139. // 尝试获取锁
  140. if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
  141. throw new BusinessException("操作太频繁,请稍后重试");
  142. }
  143. // 执行业务逻辑
  144. return goldDetailService.addExportRecordGold(dto);
  145. } finally {
  146. // 释放锁
  147. redisLockUtil.unlock(lockKey, requestId);
  148. }
  149. }
  150. @PostMapping("/exportqqq")
  151. public Result ExcelGoldDetail(@RequestBody Page page) throws Exception {
  152. if(ObjectUtils.isEmpty(page.getPageNum())){
  153. return Result.error("页码数为空!");
  154. }
  155. if(ObjectUtils.isEmpty(page.getPageSize())){
  156. return Result.error("页大小为空!");
  157. }
  158. else{
  159. return Result.success(goldDetailService.getGoldDetail(page.getPageNum(), page.getPageSize(), page.getGoldDetail()));
  160. }
  161. }
  162. public Result ExcelGold(@RequestBody Page page) throws Exception {
  163. // System.out.println( page);
  164. if(ObjectUtils.isEmpty(page.getPageNum())){
  165. return Result.error("页码数为空!");
  166. }
  167. if(ObjectUtils.isEmpty(page.getPageSize())){
  168. return Result.error("页大小为空!");
  169. }
  170. return Result.success(goldDetailService.getGold(page.getPageNum(), page.getPageSize(), page.getUser()));
  171. }
  172. }