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.
104 lines
4.0 KiB
104 lines
4.0 KiB
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);
|
|
}
|
|
}
|
|
}
|