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.
|
|
package com.example.demo.controller;
import com.example.demo.Util.BusinessException; import com.example.demo.Util.JWTUtil; import com.example.demo.Util.RedisLockUtil; import com.example.demo.domain.DTO.ConsumeDTO; import com.example.demo.domain.DTO.RechargeDTO; import com.example.demo.domain.DTO.RefundDTO; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.Export; import com.example.demo.domain.vo.Result; import com.example.demo.service.ExportExcelService; import com.example.demo.service.GoldDetailService; import com.example.demo.Export.ExportService; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.UUID;
/** * @program: GOLD * @ClassName ExportController * @description: * @author: huangqizhen * @create: 2025−06-28 15:22 * @Version 1.0 **/ @RestController @RequestMapping("/export") @RequiredArgsConstructor @Slf4j @CrossOrigin public class ExportController { @Autowired private ExportExcelService exportExcelService; @Autowired private RedisLockUtil redisLockUtil; @Autowired private GoldDetailService goldDetailService; @Autowired private ExportService exportService; @PostMapping("/export") public Result export(@Valid @RequestBody Export export, @RequestHeader("token") String token) throws Exception { try { UserDetails token1= JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); export.setAccount(Integer.valueOf(token1.getUsername())); return Result.success(exportExcelService.getExcel(export)); } catch (Exception e) { log.error("导出失败", e.getMessage()); return Result.error("导出失败" + e.getMessage()); } } @PostMapping("/exportRecharge") public Result export(@Valid @RequestBody RechargeDTO dto) { String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分)
String requestId = UUID.randomUUID().toString(); // 请求 ID(防止误删锁)
long expireTime = 5000; // 锁过期时间(5秒)s
try { // 尝试获取锁
if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑
return exportService.addExportRecharge(dto); } finally { // 释放锁
redisLockUtil.unlock(lockKey, requestId); } } @PostMapping("/exportRefund") public Result export(@Valid @RequestBody RefundDTO dto) { String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分)
String requestId = UUID.randomUUID().toString(); // 请求 ID(防止误删锁)
long expireTime = 5000; // 锁过期时间(5秒)s
try { // 尝试获取锁
if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { throw new BusinessException("操作太频繁,请稍后重试"); } // 执行业务逻辑
return exportService.addExportRefund(dto); } finally { // 释放锁
redisLockUtil.unlock(lockKey, requestId); } } @PostMapping("/exportConsume") public Result export(@Valid @RequestBody ConsumeDTO dto) { String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分)
String requestId = UUID.randomUUID().toString(); // 请求 ID(防止误删锁)
long expireTime = 5000; // 锁过期时间(5秒)s
try { return exportService.addExportConsume(dto); } finally { // 释放锁
redisLockUtil.unlock(lockKey, requestId); } } }
|