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.

194 lines
8.2 KiB

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