REQ-3581: 保留超级管理员列表

This commit is contained in:
yanglin 2025-02-21 18:05:32 +08:00
parent 936e01f387
commit a49b69f6cb
7 changed files with 57 additions and 10 deletions

View File

@ -12,8 +12,6 @@ public class GetSignUrlResponse {
/** /**
* 有效期为5分钟. * 有效期为5分钟.
* pc: 二维码地址
* app: 微信小程序地址
*/ */
private String url; private String url;

View File

@ -3,6 +3,7 @@ package cn.axzo.nanopart.ess.server.dao;
import cn.axzo.nanopart.ess.api.utils.YesOrNo; import cn.axzo.nanopart.ess.api.utils.YesOrNo;
import cn.axzo.nanopart.ess.server.entity.EssOrg; import cn.axzo.nanopart.ess.server.entity.EssOrg;
import cn.axzo.nanopart.ess.server.mapper.EssOrgMapper; import cn.axzo.nanopart.ess.server.mapper.EssOrgMapper;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@ -54,4 +55,13 @@ public class EssOrgDao extends ServiceImpl<EssOrgMapper, EssOrg> {
.update(); .update();
} }
public void updateExt(EssOrg org) {
if (org.getRecordExt() == null)
return;
lambdaUpdate()
.eq(EssOrg::getId, org.getId())
.set(EssOrg::getRecordExt, JSON.toJSONString(org.getRecordExt()))
.update();
}
} }

View File

@ -9,6 +9,9 @@ import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.HashSet;
import java.util.Set;
/** /**
* @author yanglin * @author yanglin
*/ */
@ -48,6 +51,16 @@ public class EssOrg extends BaseEntity<EssOrg> {
@TableField(typeHandler = FastjsonTypeHandler.class) @TableField(typeHandler = FastjsonTypeHandler.class)
private RecordExt recordExt; private RecordExt recordExt;
public RecordExt getOrCreateExt() {
if (recordExt == null)
recordExt = new RecordExt();
return recordExt;
}
public boolean isPotentialSuperAdmin(Long personId) {
return getOrCreateExt().isPotentialSuperAdmin(personId);
}
public boolean isAuthorized() { public boolean isAuthorized() {
return isAuthorized.isYes(); return isAuthorized.isYes();
} }
@ -63,6 +76,18 @@ public class EssOrg extends BaseEntity<EssOrg> {
@Setter @Getter @Setter @Getter
public static class RecordExt { public static class RecordExt {
private Set<Long> historySuperAdmins;
public void addHistorySuperAdmin(Long personId) {
if (historySuperAdmins == null)
historySuperAdmins = new HashSet<>();
historySuperAdmins.add(personId);
}
public boolean isPotentialSuperAdmin(Long personId) {
return historySuperAdmins != null && historySuperAdmins.contains(personId);
}
} }
} }

View File

@ -210,8 +210,8 @@ public class EssService {
} }
private String getContractPDFUrlFromEss(EssContract contract) { private String getContractPDFUrlFromEss(EssContract contract) {
EssPerson creator = orgManager.getSuperAdminOrThrow(contract.getCreatorOuId()); EssPerson superAdmin = orgManager.getSuperAdminOrThrow(contract.getCreatorOuId());
return essClient.getContractPDFUrl(creator, contract.getEssContractId()); return essClient.getContractPDFUrl(superAdmin, contract.getEssContractId());
} }
} }

View File

@ -80,12 +80,24 @@ public class OrgManager {
return essPerson; return essPerson;
} }
public void setOrgAuthorized(Long ouId, Long superAdminPersonId) { @Transactional
essOrgDao.setOrgAuthorized(ouId, superAdminPersonId); public void setOrgAuthorized(Long ouId, Long superAdmin) {
essOrgDao.setOrgAuthorized(ouId, superAdmin);
addSuperAdmin(ouId, superAdmin);
} }
public void changeSuperAdmin(Long ouId, Long personId) { @Transactional
essOrgDao.changeSuperAdmin(ouId, personId); public void changeSuperAdmin(Long ouId, Long superAdmin) {
essOrgDao.changeSuperAdmin(ouId, superAdmin);
addSuperAdmin(ouId, superAdmin);
}
@Transactional
public void addSuperAdmin(Long ouId, Long superAdmin) {
EssOrg org = essOrgDao.findForUpdateOrNull(ouId);
if (org == null) return;
org.getOrCreateExt().addHistorySuperAdmin(superAdmin);
essOrgDao.updateExt(org);
} }
public EssPerson getSuperAdminOrThrow(Long ouId) { public EssPerson getSuperAdminOrThrow(Long ouId) {

View File

@ -77,8 +77,8 @@ public class PersonResignListener extends BaseListener
return; return;
} }
EssPerson superAdmin = orgManager.getSuperAdminOrThrow(event.getOuId()); EssPerson superAdmin = orgManager.getSuperAdminOrThrow(event.getOuId());
boolean isSuperAdmin = superAdmin.getPersonId().equals(event.getPersonId()); boolean isSuperAdmin = org.isPotentialSuperAdmin(event.getPersonId());
essLogDao.log("personResigned", subject, "event", event, "isSuperAdmin", isSuperAdmin); essLogDao.log("personResigned", subject, "event", event, "isPotentialSuperAdmin", isSuperAdmin);
if (isSuperAdmin) { if (isSuperAdmin) {
log.info("ignore super admin resigned: {}", JSON.toJSONString(person)); log.info("ignore super admin resigned: {}", JSON.toJSONString(person));
return; return;

View File

@ -45,6 +45,8 @@ import static cn.axzo.nanopart.ess.api.request.CallbackRequest.SealOperate;
import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toList;
/** /**
* @see <a href="https://qian.tencent.com/developers/partner/callback_types_staffs">腾讯回调</a>
*
* @author yanglin * @author yanglin
*/ */
@Slf4j @Slf4j