From a49b69f6cb17668d847234b70fa2e634fdcfd0f6 Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Feb 2025 18:05:32 +0800 Subject: [PATCH] =?UTF-8?q?REQ-3581:=20=E4=BF=9D=E7=95=99=E8=B6=85?= =?UTF-8?q?=E7=BA=A7=E7=AE=A1=E7=90=86=E5=91=98=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ess/api/response/GetSignUrlResponse.java | 2 -- .../nanopart/ess/server/dao/EssOrgDao.java | 10 ++++++++ .../nanopart/ess/server/entity/EssOrg.java | 25 +++++++++++++++++++ .../nanopart/ess/server/ess/EssService.java | 4 +-- .../nanopart/ess/server/ess/OrgManager.java | 20 ++++++++++++--- .../ess/server/ess/PersonResignListener.java | 4 +-- .../ess/controller/CallbackController.java | 2 ++ 7 files changed, 57 insertions(+), 10 deletions(-) diff --git a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/response/GetSignUrlResponse.java b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/response/GetSignUrlResponse.java index 304398d6..5716dde8 100644 --- a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/response/GetSignUrlResponse.java +++ b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/response/GetSignUrlResponse.java @@ -12,8 +12,6 @@ public class GetSignUrlResponse { /** * 有效期为5分钟. - * pc: 二维码地址 - * app: 微信小程序地址 */ private String url; diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssOrgDao.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssOrgDao.java index 626bf1ee..3d374e9a 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssOrgDao.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssOrgDao.java @@ -3,6 +3,7 @@ package cn.axzo.nanopart.ess.server.dao; import cn.axzo.nanopart.ess.api.utils.YesOrNo; import cn.axzo.nanopart.ess.server.entity.EssOrg; import cn.axzo.nanopart.ess.server.mapper.EssOrgMapper; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Repository; @@ -54,4 +55,13 @@ public class EssOrgDao extends ServiceImpl { .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(); + } + } \ No newline at end of file diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/EssOrg.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/EssOrg.java index e2ebf534..9a7bd7dc 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/EssOrg.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/EssOrg.java @@ -9,6 +9,9 @@ import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; import lombok.Getter; import lombok.Setter; +import java.util.HashSet; +import java.util.Set; + /** * @author yanglin */ @@ -48,6 +51,16 @@ public class EssOrg extends BaseEntity { @TableField(typeHandler = FastjsonTypeHandler.class) 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() { return isAuthorized.isYes(); } @@ -63,6 +76,18 @@ public class EssOrg extends BaseEntity { @Setter @Getter public static class RecordExt { + + private Set 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); + } } } \ No newline at end of file diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/EssService.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/EssService.java index d49db8e4..ce462318 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/EssService.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/EssService.java @@ -210,8 +210,8 @@ public class EssService { } private String getContractPDFUrlFromEss(EssContract contract) { - EssPerson creator = orgManager.getSuperAdminOrThrow(contract.getCreatorOuId()); - return essClient.getContractPDFUrl(creator, contract.getEssContractId()); + EssPerson superAdmin = orgManager.getSuperAdminOrThrow(contract.getCreatorOuId()); + return essClient.getContractPDFUrl(superAdmin, contract.getEssContractId()); } } \ No newline at end of file diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/OrgManager.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/OrgManager.java index cc6b3806..397d52f2 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/OrgManager.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/OrgManager.java @@ -80,12 +80,24 @@ public class OrgManager { return essPerson; } - public void setOrgAuthorized(Long ouId, Long superAdminPersonId) { - essOrgDao.setOrgAuthorized(ouId, superAdminPersonId); + @Transactional + public void setOrgAuthorized(Long ouId, Long superAdmin) { + essOrgDao.setOrgAuthorized(ouId, superAdmin); + addSuperAdmin(ouId, superAdmin); } - public void changeSuperAdmin(Long ouId, Long personId) { - essOrgDao.changeSuperAdmin(ouId, personId); + @Transactional + 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) { diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/PersonResignListener.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/PersonResignListener.java index 44984a0c..ea330386 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/PersonResignListener.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/PersonResignListener.java @@ -77,8 +77,8 @@ public class PersonResignListener extends BaseListener return; } EssPerson superAdmin = orgManager.getSuperAdminOrThrow(event.getOuId()); - boolean isSuperAdmin = superAdmin.getPersonId().equals(event.getPersonId()); - essLogDao.log("personResigned", subject, "event", event, "isSuperAdmin", isSuperAdmin); + boolean isSuperAdmin = org.isPotentialSuperAdmin(event.getPersonId()); + essLogDao.log("personResigned", subject, "event", event, "isPotentialSuperAdmin", isSuperAdmin); if (isSuperAdmin) { log.info("ignore super admin resigned: {}", JSON.toJSONString(person)); return; diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/CallbackController.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/CallbackController.java index 74fa099d..89f75acb 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/CallbackController.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/CallbackController.java @@ -45,6 +45,8 @@ import static cn.axzo.nanopart.ess.api.request.CallbackRequest.SealOperate; import static java.util.stream.Collectors.toList; /** + * @see 腾讯回调 + * * @author yanglin */ @Slf4j