|
|
package com.yau.digitalrmb.shared.wallet;
|
|
|
|
|
|
import com.yau.digitalrmb.identity.domain.UserRole;
|
|
|
import com.yau.digitalrmb.institutionidentity.application.InstitutionKeySubject;
|
|
|
import com.yau.digitalrmb.security.context.AuthContextHolder;
|
|
|
import com.yau.digitalrmb.security.context.JwtUser;
|
|
|
import com.yau.digitalrmb.shared.api.ErrorCode;
|
|
|
import com.yau.digitalrmb.shared.exception.BusinessException;
|
|
|
import com.yau.digitalrmb.shared.api.ApiResponse;
|
|
|
import com.yau.digitalrmb.shared.web.TraceIdFilter;
|
|
|
import io.swagger.v3.oas.annotations.Operation;
|
|
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
|
import org.slf4j.MDC;
|
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
|
@RestController
|
|
|
@RequestMapping("/api/v1/wallet-runtime")
|
|
|
@Tag(name = "钱包运行数据-彻底重开", description = "清空兑换/支付历史并重建模块三投影(教师/管理员专用)")
|
|
|
public class WalletRuntimeResetController {
|
|
|
|
|
|
@Resource
|
|
|
private WalletRuntimeResetService resetService;
|
|
|
|
|
|
@PostMapping("/reset")
|
|
|
@Operation(summary = "彻底重开兑换与支付实验",
|
|
|
description = "删除当前用户的全部兑换/支付订单与流水(含已确权完成的),把涉及币串回退到商业银行库," +
|
|
|
"并清空模块三投影出的共享钱包/银行账户/证书/合约/绑定与实验attempt," +
|
|
|
"随后立即按最新模块三结果重新投影,模块四/五可直接重新开始。仅教师和管理员可调用。")
|
|
|
public ApiResponse<WalletRuntimeResetResult> reset() {
|
|
|
JwtUser jwtUser = AuthContextHolder.get();
|
|
|
Integer roleId = jwtUser.getRoleId();
|
|
|
if (roleId == null || (roleId != UserRole.ADMIN.getId() && roleId != UserRole.TEACHER.getId())) {
|
|
|
throw new BusinessException(ErrorCode.FORBIDDEN, "仅教师或管理员可以彻底重开兑换与支付实验");
|
|
|
}
|
|
|
return ApiResponse.success(resetService.reset(InstitutionKeySubject.from(jwtUser)), traceId());
|
|
|
}
|
|
|
|
|
|
private String traceId() {
|
|
|
return MDC.get(TraceIdFilter.MDC_KEY);
|
|
|
}
|
|
|
}
|