From 1534ede9b68aa2ee6e5195c153a4eb8341b04a13 Mon Sep 17 00:00:00 2001 From: yanglin Date: Wed, 26 Feb 2025 13:46:56 +0800 Subject: [PATCH] =?UTF-8?q?REQ-3581:=20=E8=B0=83=E6=95=B4=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/nanopart/ess/api/EssApi.java | 8 ++-- .../ess/api/domain/EssSealPersonInfo.java | 30 +++++--------- .../ess/api/domain/PersonProfileInfo.java | 27 ++++++++++++ ...Request.java => AddSealPersonRequest.java} | 9 ++-- .../nanopart/ess/server/ess/OrgManager.java | 41 ++++++------------- .../nanopart/ess/server/ess/QueryService.java | 26 ++++++++---- .../server/ess/controller/ApiController.java | 8 ++-- .../impl/ChangeRecordRelationServiceImpl.java | 2 +- 8 files changed, 81 insertions(+), 70 deletions(-) create mode 100644 ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/PersonProfileInfo.java rename ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/{AddSealPersonsRequest.java => AddSealPersonRequest.java} (70%) diff --git a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/EssApi.java b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/EssApi.java index 5cc6277c..02a622cc 100644 --- a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/EssApi.java +++ b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/EssApi.java @@ -4,7 +4,7 @@ import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.nanopart.ess.api.domain.EssOrgAndSealInfo; import cn.axzo.nanopart.ess.api.domain.EssSealPersonInfo; import cn.axzo.nanopart.ess.api.request.AddSealAuthorizationRequest; -import cn.axzo.nanopart.ess.api.request.AddSealPersonsRequest; +import cn.axzo.nanopart.ess.api.request.AddSealPersonRequest; import cn.axzo.nanopart.ess.api.request.CreateConsoleLoginUrlRequest; import cn.axzo.nanopart.ess.api.request.CreateContractByFileRequest; import cn.axzo.nanopart.ess.api.request.DownloadSingedContractPdfRequest; @@ -85,9 +85,9 @@ public interface EssApi { /** * 批量添加印章人员 (批量授权) */ - @PostMapping("api/ess/addSealPersons") - ApiResult addSealPersons( - @RequestBody @Valid AddSealPersonsRequest request); + @PostMapping("api/ess/addSealPerson") + ApiResult addSealPerson( + @RequestBody @Valid AddSealPersonRequest request); /** * 删除印章人员 diff --git a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/EssSealPersonInfo.java b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/EssSealPersonInfo.java index 5b682b55..6a51f025 100644 --- a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/EssSealPersonInfo.java +++ b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/EssSealPersonInfo.java @@ -14,21 +14,21 @@ public class EssSealPersonInfo { */ private Long ouId; + /** + * 印章用户信息 + */ + private PersonProfileInfo sealPerson = new PersonProfileInfo(); + + /** + * 印章授权人信息 + */ + private PersonProfileInfo authorizedByPerson = new PersonProfileInfo(); + /** * 印章id */ private String essSealId; - /** - * 印章人员id - */ - private Long personId; - - /** - * 印章人员名称 - */ - private String personName; - /** * 是否已经激活(实名认证) */ @@ -49,14 +49,4 @@ public class EssSealPersonInfo { */ private boolean isSuperAdmin; - /** - * 授权人员id - */ - private Long authorizedByPersonId; - - /** - * 授权人员姓名 - */ - private String authorizedByPersonName; - } \ No newline at end of file diff --git a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/PersonProfileInfo.java b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/PersonProfileInfo.java new file mode 100644 index 00000000..d39592b5 --- /dev/null +++ b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/PersonProfileInfo.java @@ -0,0 +1,27 @@ +package cn.axzo.nanopart.ess.api.domain; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author yanglin + */ +@Setter @Getter +public class PersonProfileInfo { + + /** + * 自然人id + */ + private Long personId; + + /** + * 姓名 + */ + private String personName; + + /** + * 头像 + */ + private String avatar; + +} \ No newline at end of file diff --git a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/AddSealPersonsRequest.java b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/AddSealPersonRequest.java similarity index 70% rename from ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/AddSealPersonsRequest.java rename to ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/AddSealPersonRequest.java index 4af77286..5e3f2a9d 100644 --- a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/AddSealPersonsRequest.java +++ b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/AddSealPersonRequest.java @@ -5,14 +5,13 @@ import lombok.Getter; import lombok.Setter; import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; -import java.util.Set; +import javax.validation.constraints.NotNull; /** * @author yanglin */ @Setter @Getter -public class AddSealPersonsRequest { +public class AddSealPersonRequest { /** * 印章id @@ -23,8 +22,8 @@ public class AddSealPersonsRequest { /** * 人员id列表 */ - @NotEmpty(message = "personIds不能为空") - private Set personIds; + @NotNull(message = "personId不能为空") + private Long personId; @Override public String toString() { 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 51609292..1e962d72 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 @@ -16,23 +16,15 @@ import cn.axzo.nanopart.ess.server.entity.EssPerson; import cn.axzo.nanopart.ess.server.entity.EssSeal; import cn.axzo.nanopart.ess.server.entity.EssSealPerson; import cn.axzo.nanopart.ess.server.ess.domain.OrgAndPerson; -import cn.axzo.nanopart.ess.server.ess.domain.SealPersons; import cn.axzo.nanopart.ess.server.ess.support.EssSupport; import cn.axzo.nanopart.ess.server.utils.BizAssertions; import cn.axzo.nanopart.ess.server.utils.BizTransactional; -import com.alibaba.fastjson.JSON; -import com.google.common.collect.Sets; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Component; -import java.util.List; import java.util.Optional; -import java.util.Set; - -import static java.util.stream.Collectors.toList; /** * @author yanglin @@ -135,7 +127,7 @@ public class OrgManager { @BizTransactional public void addSealAuthorization(String essSealId, Long personId, Long authorizedByPersonId) { - maybeAddSealPersons(essSealId, Sets.newHashSet(personId)); + maybeAddSealPerson(essSealId, personId); essSealPersonDao.setPersonAuthorized(essSealId, personId, authorizedByPersonId); log.info("add seal authorization: essSealId={}, personId={}, authorizedByPersonId={}", essSealId, personId, authorizedByPersonId); @@ -143,34 +135,27 @@ public class OrgManager { @BizTransactional public void removeSealAuthorization(String essSealId, Long personId) { - maybeAddSealPersons(essSealId, Sets.newHashSet(personId)); + maybeAddSealPerson(essSealId, personId); essSealPersonDao.removeSealAuthorization(essSealId, personId); log.info("add seal authorization: essSealId={}, personId={}", essSealId, personId); } @BizTransactional - public void maybeAddSealPersons(String essSealId, Set personIds) { + public void maybeAddSealPerson(String essSealId, Long personId) { EssSeal seal = essSealDao.findByEssSealId(essSealId).orElse(null); BizAssertions.assertNotNull(seal, "印章不存在: {}", essSealId); - SealPersons sealPersons = SealPersons.wrap( - essSealPersonDao.getBySealAndPersonIds(essSealId, personIds)); - List newPersons = personIds.stream() - .filter(personId -> !sealPersons.containsPerson(personId)) - .map(personId -> { - EssSealPerson sealPerson = new EssSealPerson(); - //noinspection DataFlowIssue - sealPerson.setOuId(seal.getOuId()); - sealPerson.setEssSealId(essSealId); - sealPerson.setPersonId(personId); - sealPerson.setIsAuthorized(YesOrNo.NO); - return sealPerson; - }) - .collect(toList()); - if (CollectionUtils.isEmpty(newPersons)) + EssSealPerson savedSealPerson = essSealPersonDao.find(essSealId, personId, true) + .orElse(null); + if (savedSealPerson != null) return; + EssSealPerson sealPerson = new EssSealPerson(); + //noinspection DataFlowIssue + sealPerson.setOuId(seal.getOuId()); + sealPerson.setEssSealId(essSealId); + sealPerson.setPersonId(personId); + sealPerson.setIsAuthorized(YesOrNo.NO); try { - essSealPersonDao.saveBatch(newPersons); - log.info("add seal persons: {}", JSON.toJSONString(newPersons)); + essSealPersonDao.save(sealPerson); } catch (DuplicateKeyException ignored) { } } diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/QueryService.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/QueryService.java index cee6018f..0801b05b 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/QueryService.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/QueryService.java @@ -6,6 +6,7 @@ import cn.axzo.nanopart.ess.api.domain.EssOrgAndSealInfo; import cn.axzo.nanopart.ess.api.domain.EssOrgInfo; import cn.axzo.nanopart.ess.api.domain.EssSealInfo; import cn.axzo.nanopart.ess.api.domain.EssSealPersonInfo; +import cn.axzo.nanopart.ess.api.domain.PersonProfileInfo; import cn.axzo.nanopart.ess.api.enums.EssPersonState; import cn.axzo.nanopart.ess.api.enums.EssSealState; import cn.axzo.nanopart.ess.api.request.GetOrgAuthStatesRequest; @@ -38,6 +39,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.BiConsumer; import static java.util.stream.Collectors.groupingBy; import static java.util.stream.Collectors.toSet; @@ -127,10 +129,7 @@ public class QueryService { sealPersonInfo.setPersonAuthorized(essPerson.isAuthorized()); sealPersonInfo.setAuthorizeTimeMs(sealPerson.getAuthorizeTime() == null ? null : sealPerson.getAuthorizeTime().getTime()); - PersonProfileDto person = personProfiles.findOrNull(sealPerson.getPersonId()); - sealPersonInfo.setPersonName(person == null ? "" : person.getRealName()); - PersonProfileDto authorizedBy = personProfiles.findOrNull(sealPerson.getAuthorizedByPersonId()); - sealPersonInfo.setAuthorizedByPersonName(authorizedBy == null ? "" : authorizedBy.getRealName()); + populatePersons(sealPerson, sealPersonInfo, personProfiles); sealInfo.addSealPerson(sealPersonInfo); } } @@ -164,13 +163,24 @@ public class QueryService { sealPersonInfo.setPersonAuthorized(essPerson.isAuthorized()); sealPersonInfo.setAuthorizeTimeMs(sealPerson.getAuthorizeTime() == null ? null : sealPerson.getAuthorizeTime().getTime()); - PersonProfileDto person = personProfiles.findOrNull(sealPerson.getPersonId()); - sealPersonInfo.setPersonName(person == null ? "" : person.getRealName()); - PersonProfileDto authorizedBy = personProfiles.findOrNull(sealPerson.getAuthorizedByPersonId()); - sealPersonInfo.setAuthorizedByPersonName(authorizedBy == null ? "" : authorizedBy.getRealName()); + populatePersons(sealPerson, sealPersonInfo, personProfiles); sealPersonsInfo.add(sealPersonInfo); } return sealPersonsInfo; } + private void populatePersons(EssSealPerson sealPerson, + EssSealPersonInfo sealPersonInfo, + PersonProfiles personProfiles) { + BiConsumer builder = (personId, profileInfo) -> { + PersonProfileDto profile = personProfiles.findOrNull(personId); + if (profile == null) return; + profileInfo.setPersonId(personId); + profileInfo.setPersonName(profile.getRealName()); + profileInfo.setAvatar(profile.getAvatarUrl()); + }; + builder.accept(sealPerson.getPersonId(), sealPersonInfo.getSealPerson()); + builder.accept(sealPerson.getAuthorizedByPersonId(), sealPersonInfo.getAuthorizedByPerson()); + } + } \ No newline at end of file diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/ApiController.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/ApiController.java index 5ec3e0cb..8ec53155 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/ApiController.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/ApiController.java @@ -7,7 +7,7 @@ import cn.axzo.nanopart.ess.api.domain.EssOrgAndSealInfo; import cn.axzo.nanopart.ess.api.domain.EssSealPersonInfo; import cn.axzo.nanopart.ess.api.domain.contract.EssContractInfo; import cn.axzo.nanopart.ess.api.request.AddSealAuthorizationRequest; -import cn.axzo.nanopart.ess.api.request.AddSealPersonsRequest; +import cn.axzo.nanopart.ess.api.request.AddSealPersonRequest; import cn.axzo.nanopart.ess.api.request.CreateConsoleLoginUrlRequest; import cn.axzo.nanopart.ess.api.request.CreateContractByFileRequest; import cn.axzo.nanopart.ess.api.request.DownloadSingedContractPdfRequest; @@ -97,9 +97,9 @@ class ApiController implements EssApi { } @Override - public ApiResult addSealPersons(AddSealPersonsRequest request) { - log.info("addSealPersons request={}", request); - orgManager.maybeAddSealPersons(request.getEssSealId(), request.getPersonIds()); + public ApiResult addSealPerson(AddSealPersonRequest request) { + log.info("addSealPerson request={}", request); + orgManager.maybeAddSealPerson(request.getEssSealId(), request.getPersonId()); return ApiResult.ok(); } diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordRelationServiceImpl.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordRelationServiceImpl.java index 6fa58506..c021540e 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordRelationServiceImpl.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordRelationServiceImpl.java @@ -552,7 +552,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl { if (CollectionUtils.isNotEmpty(value)) { result.put(key, value.stream().map(u -> BpmnTaskDelegateAssigner.builder() - .personId(String.valueOf(u.getPersonId())) + .personId(String.valueOf(u.getSealPerson().getPersonId())) .ouId(String.valueOf(u.getOuId())) .tenantId(NO_TENANT_ID) .build()).collect(Collectors.toList()));