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 dc26cfbd..5cc6277c 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 @@ -2,6 +2,7 @@ package cn.axzo.nanopart.ess.api; 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.CreateConsoleLoginUrlRequest; @@ -11,6 +12,7 @@ import cn.axzo.nanopart.ess.api.request.GetContractDetailByContractIdRequest; import cn.axzo.nanopart.ess.api.request.GetEmbedWebUrlRequest; import cn.axzo.nanopart.ess.api.request.GetOrgAuthStatesRequest; import cn.axzo.nanopart.ess.api.request.GetPersonAuthStateRequest; +import cn.axzo.nanopart.ess.api.request.GetSealPersonRequest; import cn.axzo.nanopart.ess.api.request.GetSealsRequest; import cn.axzo.nanopart.ess.api.request.GetSignUrlRequest; import cn.axzo.nanopart.ess.api.request.RemoveSealAuthorizationRequest; @@ -73,6 +75,13 @@ public interface EssApi { ApiResult> getOrgEnabledSeals( @RequestBody @Valid GetSealsRequest request); + /** + * 查询印章管理员 + */ + @PostMapping("api/ess/getSealPersons") + ApiResult> getSealPersons( + @RequestBody @Valid GetSealPersonRequest request); + /** * 批量添加印章人员 (批量授权) */ diff --git a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/EssSealInfo.java b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/EssSealInfo.java index 5fd32596..aebf16bc 100644 --- a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/EssSealInfo.java +++ b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/EssSealInfo.java @@ -32,10 +32,10 @@ public class EssSealInfo { /** * 授权人员列表 */ - private List authorizedPersons = new ArrayList<>(); + private List sealPersons = new ArrayList<>(); - public void addAuthorizedPerson(EssSealPersonInfo person) { - authorizedPersons.add(person); + public void addSealPerson(EssSealPersonInfo person) { + sealPersons.add(person); } } \ No newline at end of file diff --git a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/GetSealPersonRequest.java b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/GetSealPersonRequest.java new file mode 100644 index 00000000..003bdf75 --- /dev/null +++ b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/request/GetSealPersonRequest.java @@ -0,0 +1,20 @@ +package cn.axzo.nanopart.ess.api.request; + +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +/** + * @author yanglin + */ +@Setter @Getter +public class GetSealPersonRequest { + + /** + * 印章在腾讯的id + */ + @NotBlank(message = "essSealId不能为空") + private String essSealId; + +} diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssSealPersonDao.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssSealPersonDao.java index 27c20f11..c2a7a110 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssSealPersonDao.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/dao/EssSealPersonDao.java @@ -65,4 +65,10 @@ public class EssSealPersonDao extends ServiceImpl get(String essSealId) { + return lambdaQuery() + .eq(EssSealPerson::getEssSealId, essSealId) + .list(); + } + } \ No newline at end of file diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/domain/OuAndPersonId.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/domain/OuAndPersonId.java index a4158607..f96bfc05 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/domain/OuAndPersonId.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/entity/domain/OuAndPersonId.java @@ -20,6 +20,10 @@ public class OuAndPersonId { return new OuAndPersonId(ouId, personId); } + public boolean is(Long ouId, Long personId) { + return this.ouId.equals(ouId) && this.personId.equals(personId); + } + @Override public boolean equals(Object o) { if (!(o instanceof OuAndPersonId)) return false; 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 167294bf..1f0b8f9b 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 @@ -10,6 +10,7 @@ import cn.axzo.nanopart.ess.api.enums.EssPersonState; import cn.axzo.nanopart.ess.api.enums.EssSealState; import cn.axzo.nanopart.ess.api.request.GetOrgAuthStatesRequest; import cn.axzo.nanopart.ess.api.request.GetPersonAuthStateRequest; +import cn.axzo.nanopart.ess.api.request.GetSealPersonRequest; import cn.axzo.nanopart.ess.api.request.GetSealsRequest; import cn.axzo.nanopart.ess.api.response.GetOrgAuthStatesResponse; import cn.axzo.nanopart.ess.api.response.GetPersonAuthStateResponse; @@ -22,8 +23,10 @@ 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.entity.domain.OuAndPersonId; +import cn.axzo.nanopart.ess.server.ess.domain.EssPersons; import cn.axzo.nanopart.ess.server.ess.support.EssSupport; import cn.axzo.nanopart.ess.server.ess.support.PersonProfiles; +import cn.axzo.nanopart.ess.server.utils.BizAssertions; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -36,10 +39,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import static java.util.Collections.emptyList; -import static java.util.function.Function.identity; import static java.util.stream.Collectors.groupingBy; -import static java.util.stream.Collectors.toMap; import static java.util.stream.Collectors.toSet; /** @@ -102,8 +102,7 @@ public class QueryService { personIds.add(sealPerson.getAuthorizedByPersonId()); }); // ess person - Map sealPersons = essPersonDao.getByPersonIds(personIds).stream() - .collect(toMap(p -> OuAndPersonId.create(p.getOuId(), p.getPersonId()), identity())); + EssPersons essPersons = EssPersons.wrap(essPersonDao.getByPersonIds(personIds)); // person profile PersonProfiles personProfiles = PersonProfiles.wrap( essSupport.getPersonProfiles(Lists.newArrayList(personIds))); @@ -113,17 +112,16 @@ public class QueryService { essOrgAndSeals.add(orgAndSeal); orgAndSeal.setOrg(BeanMapper.copyBean(org, EssOrgInfo.class)); orgAndSeal.getOrg().setOrgAuthorized(org.isAuthorized()); - List seals = ouId2Seals.getOrDefault(org.getOuId(), emptyList()); + List seals = ouId2Seals.getOrDefault(org.getOuId(), Collections.emptyList()); orgAndSeal.setSeals(BeanMapper.copyList(seals, EssSealInfo.class)); for (EssSealInfo sealInfo : orgAndSeal.getSeals()) { - List persons = essSealId2Persons.getOrDefault(sealInfo.getEssSealId(), emptyList()); + List persons = essSealId2Persons.getOrDefault(sealInfo.getEssSealId(), Collections.emptyList()); for (EssSealPerson sealPerson : persons) { - EssPerson essPerson = sealPersons.get(OuAndPersonId.create( + EssPerson essPerson = essPersons.getOrThrow(OuAndPersonId.create( sealPerson.getOuId(), sealPerson.getPersonId())); if (essPerson.getState() == EssPersonState.RESIGNED) continue; EssSealPersonInfo sealPersonInfo = BeanMapper.copyBean(sealPerson, EssSealPersonInfo.class); - sealInfo.addAuthorizedPerson(sealPersonInfo); sealPersonInfo.setSuperAdmin(org.isSuperAdmin(sealPerson.getPersonId())); sealPersonInfo.setSealAuthorized(sealPerson.getIsAuthorized().isYes()); sealPersonInfo.setPersonAuthorized(essPerson.isAuthorized()); @@ -133,10 +131,46 @@ public class QueryService { sealPersonInfo.setPersonName(person == null ? "" : person.getRealName()); PersonProfileDto authorizedBy = personProfiles.findOrNull(sealPerson.getPersonId()); sealPersonInfo.setAuthorizedByPersonName(authorizedBy == null ? "" : authorizedBy.getRealName()); + sealInfo.addSealPerson(sealPersonInfo); } } } return essOrgAndSeals; } + public List getSealPersons(GetSealPersonRequest request) { + List sealPersons = essSealPersonDao.get(request.getEssSealId()); + if (sealPersons.isEmpty()) + return Collections.emptyList(); + HashSet personIds = new HashSet<>(); + sealPersons.forEach(sealPerson -> { + personIds.add(sealPerson.getPersonId()); + personIds.add(sealPerson.getAuthorizedByPersonId()); + }); + EssPersons essPersons = EssPersons.wrap(essPersonDao.getByPersonIds(personIds)); + PersonProfiles personProfiles = PersonProfiles.wrap( + essSupport.getPersonProfiles(Lists.newArrayList(personIds))); + EssOrg org = essOrgDao.findOrNull(sealPersons.get(0).getOuId()); + BizAssertions.assertNotNull(org, "org not found, ouId={}", sealPersons.get(0).getOuId()); + ArrayList sealPersonsInfo = new ArrayList<>(); + for (EssSealPerson sealPerson : sealPersons) { + EssPerson essPerson = essPersons.getOrThrow(OuAndPersonId.create( + sealPerson.getOuId(), sealPerson.getPersonId())); + if (essPerson.getState() == EssPersonState.RESIGNED) + continue; + EssSealPersonInfo sealPersonInfo = BeanMapper.copyBean(sealPerson, EssSealPersonInfo.class); + sealPersonInfo.setSuperAdmin(org.isSuperAdmin(sealPerson.getPersonId())); + sealPersonInfo.setSealAuthorized(sealPerson.getIsAuthorized().isYes()); + 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.getPersonId()); + sealPersonInfo.setAuthorizedByPersonName(authorizedBy == null ? "" : authorizedBy.getRealName()); + sealPersonsInfo.add(sealPersonInfo); + } + return sealPersonsInfo; + } + } \ 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 72d417cc..5ec3e0cb 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 @@ -4,6 +4,7 @@ import cn.axzo.basics.common.BeanMapper; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.nanopart.ess.api.EssApi; 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; @@ -14,6 +15,7 @@ import cn.axzo.nanopart.ess.api.request.GetContractDetailByContractIdRequest; import cn.axzo.nanopart.ess.api.request.GetEmbedWebUrlRequest; import cn.axzo.nanopart.ess.api.request.GetOrgAuthStatesRequest; import cn.axzo.nanopart.ess.api.request.GetPersonAuthStateRequest; +import cn.axzo.nanopart.ess.api.request.GetSealPersonRequest; import cn.axzo.nanopart.ess.api.request.GetSealsRequest; import cn.axzo.nanopart.ess.api.request.GetSignUrlRequest; import cn.axzo.nanopart.ess.api.request.RemoveSealAuthorizationRequest; @@ -88,6 +90,12 @@ class ApiController implements EssApi { return ApiResult.ok(queryService.getOrgEnabledSeals(request)); } + @Override + public ApiResult> getSealPersons(GetSealPersonRequest request) { + log.info("getSealPersons request={}", request); + return ApiResult.ok(queryService.getSealPersons(request)); + } + @Override public ApiResult addSealPersons(AddSealPersonsRequest request) { log.info("addSealPersons request={}", request); diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/domain/EssPersons.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/domain/EssPersons.java new file mode 100644 index 00000000..db14e87f --- /dev/null +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/domain/EssPersons.java @@ -0,0 +1,49 @@ +package cn.axzo.nanopart.ess.server.ess.domain; + +import cn.axzo.nanopart.ess.server.entity.EssPerson; +import cn.axzo.nanopart.ess.server.entity.domain.OuAndPersonId; +import cn.axzo.nanopart.ess.server.utils.BizAssertions; +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; + +import java.util.List; +import java.util.Optional; + +/** + * @author yanglin + */ +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +public class EssPersons { + + private final List persons; + + public static EssPersons wrap(List persons) { + return new EssPersons(persons); + } + + public EssPerson getOrThrow(Long personId) { + EssPerson person = find(personId).orElse(null); + BizAssertions.assertNotNull(person, "person not found, personId={}", personId); + return person; + } + + public Optional find(Long personId) { + return persons.stream() + .filter(p -> p.getId().equals(personId)) + .findFirst(); + } + + public EssPerson getOrThrow(OuAndPersonId ouAndPersonId) { + EssPerson person = find(ouAndPersonId).orElse(null); + BizAssertions.assertNotNull(person, "person not found, ouId={}, personId={}", + ouAndPersonId.getOuId(), ouAndPersonId.getPersonId()); + return person; + } + + public Optional find(OuAndPersonId ouAndPersonId) { + return persons.stream() + .filter(p -> ouAndPersonId.is(p.getOuId(), p.getPersonId())) + .findFirst(); + } + +} \ No newline at end of file