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.

263 lines
11 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. // 获取当前请求对象
  53. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  54. String token = request.getHeader("token");
  55. // 解析 token 获取用户信息
  56. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  57. List<String> userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
  58. List<String> markets = marketService.getMarketIds(userMarkets);
  59. // 校验分页参数
  60. if (ObjectUtils.isEmpty(page.getPageNum())) {
  61. return Result.error("页码数为空!");
  62. }
  63. if (ObjectUtils.isEmpty(page.getPageSize())) {
  64. return Result.error("页大小为空!");
  65. }
  66. // 获取传入的市场列表
  67. List<String> requestedMarkets = page.getGoldDetail() != null ? page.getGoldDetail().getMarkets() : null;
  68. // 权限校验
  69. if (requestedMarkets != null && !requestedMarkets.isEmpty()) {
  70. if (!markets.containsAll(requestedMarkets)) {
  71. // 如果 markets 不包含 requestedMarkets 中的所有元素,则返回无权限
  72. return Result.error("无权限!");
  73. }
  74. } else {
  75. // 如果传入的市场为空,则设置默认市场
  76. if (markets.contains("9") || markets.contains("9999")) {
  77. page.getGoldDetail().setMarkets(null); // 包含 9 或 9999,传 null
  78. } else {
  79. page.getGoldDetail().setMarkets(markets); // 不包含,传原值
  80. }
  81. }
  82. // 返回详情数据
  83. return Result.success(goldDetailService.getGoldDetail(
  84. page.getPageNum(),
  85. page.getPageSize(),
  86. page.getGoldDetail()
  87. ));
  88. }
  89. @PostMapping("/getTotal")
  90. public Result getTotal(@RequestBody Page page) throws Exception {
  91. Integer pageNum = page.getPageNum();
  92. Integer pageSize = page.getPageSize();
  93. GoldDetail goldDetail = page.getGoldDetail();
  94. // 获取当前请求对象
  95. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  96. String token = request.getHeader("token");
  97. // 解析 token 获取用户信息
  98. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  99. List<String> userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
  100. List<String> markets = marketService.getMarketIds(userMarkets);
  101. // 获取传入的市场列表
  102. List<String> requestedMarkets = page.getGoldDetail() != null ? page.getGoldDetail().getMarkets() : null;
  103. // 权限校验
  104. if (requestedMarkets != null && !requestedMarkets.isEmpty()) {
  105. if (!markets.containsAll(requestedMarkets)) {
  106. // 如果 markets 不包含 requestedMarkets 中的所有元素,则返回无权限
  107. return Result.error("无权限!");
  108. }
  109. } else {
  110. // 如果传入的市场为空,则设置默认市场
  111. if (markets.contains("9") || markets.contains("9999")) {
  112. page.getGoldDetail().setMarkets(null); // 包含 9 或 9999,传 null
  113. } else {
  114. page.getGoldDetail().setMarkets(markets); // 不包含,传原值
  115. }
  116. }
  117. return Result.success(goldDetailService.sumGold(pageNum,pageSize,goldDetail));
  118. }
  119. @PostMapping("/goldTotal")
  120. public Result GoldTotal(@RequestBody User user) throws Exception {
  121. // 获取当前请求对象
  122. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  123. String token = request.getHeader("token");
  124. // 解析 token 获取用户信息
  125. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  126. List<String> userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
  127. List<String> markets = marketService.getMarketIds(userMarkets);
  128. // 获取传入的市场列表
  129. List<String> requestedMarkets = user != null ? user.getMarkets() : null;
  130. // 权限校验
  131. if (requestedMarkets != null && !requestedMarkets.isEmpty()) {
  132. if (!markets.containsAll(requestedMarkets)) {
  133. // 如果 markets 不包含 requestedMarkets 中的所有元素,则返回无权限
  134. return Result.error("无权限!");
  135. }
  136. } else {
  137. // 如果传入的市场为空,则设置默认市场
  138. if (markets.contains("9") || markets.contains("9999")) {
  139. user.setMarkets(null); // 包含 9 或 9999,传 null
  140. } else {
  141. user.setMarkets(markets); // 不包含,传原值
  142. }
  143. }
  144. return Result.success(goldDetailService.GoldTotal(user));
  145. }
  146. @PostMapping("/getGold")
  147. public Result getGold(@RequestBody Page page) throws Exception {
  148. // 获取当前请求对象
  149. HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
  150. String token = request.getHeader("token");
  151. // 解析 token 获取用户信息
  152. Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
  153. List<String> userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
  154. List<String> markets = marketService.getMarketIds(userMarkets);
  155. // 校验分页参数
  156. if (ObjectUtils.isEmpty(page.getPageNum())) {
  157. return Result.error("页码数为空!");
  158. }
  159. if (ObjectUtils.isEmpty(page.getPageSize())) {
  160. return Result.error("页大小为空!");
  161. }
  162. // 获取传入的市场列表
  163. List<String> requestedMarkets = page.getUser() != null ? page.getUser().getMarkets() : null;
  164. // 权限校验
  165. if (requestedMarkets != null && !requestedMarkets.isEmpty()) {
  166. if (!markets.containsAll(requestedMarkets)) {
  167. // 如果 markets 不包含 requestedMarkets 中的所有元素,则返回无权限
  168. return Result.error("无权限!");
  169. }
  170. } else {
  171. // 如果传入的市场为空,则设置默认市场
  172. if (markets.contains("9") || markets.contains("9999")) {
  173. page.getUser().setMarkets(null); // 包含 9 或 9999,传 null
  174. } else {
  175. page.getUser().setMarkets(markets); // 不包含,传原值
  176. }
  177. }
  178. return Result.success(goldDetailService.getGold(page.getPageNum(), page.getPageSize(), page.getUser()));
  179. }
  180. @PostMapping("/export")
  181. public Result export(@Valid @RequestBody GoldDetailDTO dto) {
  182. String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分)
  183. String requestId = UUID.randomUUID().toString(); // 请求 ID(防止误删锁)
  184. long expireTime = 5000; // 锁过期时间(5秒)s
  185. try {
  186. // 尝试获取锁
  187. if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
  188. throw new BusinessException("操作太频繁,请稍后重试");
  189. }
  190. // 执行业务逻辑
  191. return goldDetailService.addExportRecord(dto);
  192. } finally {
  193. // 释放锁
  194. redisLockUtil.unlock(lockKey, requestId);
  195. }
  196. }
  197. @PostMapping("/exportGold")
  198. public Result export(@Valid @RequestBody GoldUserDTO dto) {
  199. String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分)
  200. String requestId = UUID.randomUUID().toString(); // 请求 ID(防止误删锁)
  201. long expireTime = 5000; // 锁过期时间(5秒)s
  202. try {
  203. // 尝试获取锁
  204. if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
  205. throw new BusinessException("操作太频繁,请稍后重试");
  206. }
  207. // 执行业务逻辑
  208. return goldDetailService.addExportRecordGold(dto);
  209. } finally {
  210. // 释放锁
  211. redisLockUtil.unlock(lockKey, requestId);
  212. }
  213. }
  214. @PostMapping("/exportqqq")
  215. public Result ExcelGoldDetail(@RequestBody Page page) throws Exception {
  216. if(ObjectUtils.isEmpty(page.getPageNum())){
  217. return Result.error("页码数为空!");
  218. }
  219. if(ObjectUtils.isEmpty(page.getPageSize())){
  220. return Result.error("页大小为空!");
  221. }
  222. else{
  223. return Result.success(goldDetailService.getGoldDetail(page.getPageNum(), page.getPageSize(), page.getGoldDetail()));
  224. }
  225. }
  226. public Result ExcelGold(@RequestBody Page page) throws Exception {
  227. // System.out.println( page);
  228. if(ObjectUtils.isEmpty(page.getPageNum())){
  229. return Result.error("页码数为空!");
  230. }
  231. if(ObjectUtils.isEmpty(page.getPageSize())){
  232. return Result.error("页大小为空!");
  233. }
  234. return Result.success(goldDetailService.getGold(page.getPageNum(), page.getPageSize(), page.getUser()));
  235. }
  236. }