package jnpf.base.controller;
|
|
import cn.dev33.satoken.same.SaSameUtil;
|
import cn.dev33.satoken.stp.StpUtil;
|
import jnpf.base.ActionResult;
|
import jnpf.base.UserInfo;
|
import jnpf.base.model.uploadedit.UploadEditLease;
|
import jnpf.base.model.uploadedit.UploadEditSaveCommand;
|
import jnpf.base.service.UploadEditDraftService;
|
import jnpf.database.util.TenantDataSourceUtil;
|
import jnpf.exception.DataException;
|
import jnpf.onlinedev.UploadEditApi;
|
import jnpf.util.NoDataSourceBind;
|
import jnpf.util.UserProvider;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.web.bind.annotation.*;
|
import java.util.function.Supplier;
|
|
@RestController
|
@RequestMapping("/Internal/visualdev/upload-edit")
|
@RequiredArgsConstructor
|
public class UploadEditInternalController implements UploadEditApi {
|
private final UploadEditDraftService service;
|
@Override @PostMapping("/status-access") @NoDataSourceBind
|
public ActionResult<Boolean> canReadStatus(@RequestParam("tenantId") String tenantId,
|
@RequestParam("ownerId") String ownerId, @RequestParam("leaseId") String leaseId) {
|
return asOwner(tenantId, ownerId, () -> ActionResult.success(service.canReadStatus(tenantId, ownerId, leaseId)));
|
}
|
|
@Override @PostMapping("/lease") @NoDataSourceBind
|
public ActionResult<UploadEditLease> lease(@RequestParam("tenantId") String tenantId,
|
@RequestParam("ownerId") String ownerId, @RequestParam("leaseId") String leaseId) {
|
return asOwner(tenantId, ownerId, () -> ActionResult.success(service.lease(tenantId, ownerId, leaseId)));
|
}
|
@Override @PostMapping("/save") @NoDataSourceBind
|
public ActionResult<Boolean> save(@RequestBody UploadEditSaveCommand command) {
|
return asOwner(command.getTenantId(), command.getOwnerId(), () -> ActionResult.success(service.save(command)));
|
}
|
|
private <T> T asOwner(String tenantId, String ownerId, Supplier<T> work) {
|
SaSameUtil.checkCurrentRequestToken();
|
if (tenantId == null || tenantId.isBlank() || ownerId == null || ownerId.isBlank()) throw new DataException("缺少编辑租约归属");
|
UserInfo previous = UserProvider.getLocalLoginUser();
|
boolean switched = false;
|
try {
|
TenantDataSourceUtil.switchTenant(tenantId);
|
UserInfo owner = new UserInfo();
|
owner.setUserId(ownerId);
|
owner.setTenantId(tenantId);
|
UserProvider.setLocalLoginUser(owner);
|
StpUtil.switchTo(UserProvider.splicingLoginId(ownerId));
|
switched = true;
|
return work.get();
|
} finally {
|
if (switched) StpUtil.endSwitch();
|
UserProvider.clearLocalUser();
|
if (previous != null) UserProvider.setLocalLoginUser(previous);
|
TenantDataSourceUtil.clearLocalTenantInfo();
|
}
|
}
|
}
|