REQ-3581: 接口

This commit is contained in:
yanglin 2025-02-25 10:38:58 +08:00
parent b22255a078
commit ad22696413
8 changed files with 142 additions and 12 deletions

View File

@ -2,6 +2,7 @@ package cn.axzo.nanopart.ess.api;
import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.ess.api.domain.EssOrgAndSealInfo; 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.AddSealAuthorizationRequest;
import cn.axzo.nanopart.ess.api.request.AddSealPersonsRequest; import cn.axzo.nanopart.ess.api.request.AddSealPersonsRequest;
import cn.axzo.nanopart.ess.api.request.CreateConsoleLoginUrlRequest; 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.GetEmbedWebUrlRequest;
import cn.axzo.nanopart.ess.api.request.GetOrgAuthStatesRequest; import cn.axzo.nanopart.ess.api.request.GetOrgAuthStatesRequest;
import cn.axzo.nanopart.ess.api.request.GetPersonAuthStateRequest; 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.GetSealsRequest;
import cn.axzo.nanopart.ess.api.request.GetSignUrlRequest; import cn.axzo.nanopart.ess.api.request.GetSignUrlRequest;
import cn.axzo.nanopart.ess.api.request.RemoveSealAuthorizationRequest; import cn.axzo.nanopart.ess.api.request.RemoveSealAuthorizationRequest;
@ -73,6 +75,13 @@ public interface EssApi {
ApiResult<List<EssOrgAndSealInfo>> getOrgEnabledSeals( ApiResult<List<EssOrgAndSealInfo>> getOrgEnabledSeals(
@RequestBody @Valid GetSealsRequest request); @RequestBody @Valid GetSealsRequest request);
/**
* 查询印章管理员
*/
@PostMapping("api/ess/getSealPersons")
ApiResult<List<EssSealPersonInfo>> getSealPersons(
@RequestBody @Valid GetSealPersonRequest request);
/** /**
* 批量添加印章人员 (批量授权) * 批量添加印章人员 (批量授权)
*/ */

View File

@ -32,10 +32,10 @@ public class EssSealInfo {
/** /**
* 授权人员列表 * 授权人员列表
*/ */
private List<EssSealPersonInfo> authorizedPersons = new ArrayList<>(); private List<EssSealPersonInfo> sealPersons = new ArrayList<>();
public void addAuthorizedPerson(EssSealPersonInfo person) { public void addSealPerson(EssSealPersonInfo person) {
authorizedPersons.add(person); sealPersons.add(person);
} }
} }

View File

@ -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;
}

View File

@ -65,4 +65,10 @@ public class EssSealPersonDao extends ServiceImpl<EssSealPersonMapper, EssSealPe
.list(); .list();
} }
public List<EssSealPerson> get(String essSealId) {
return lambdaQuery()
.eq(EssSealPerson::getEssSealId, essSealId)
.list();
}
} }

View File

@ -20,6 +20,10 @@ public class OuAndPersonId {
return new OuAndPersonId(ouId, personId); return new OuAndPersonId(ouId, personId);
} }
public boolean is(Long ouId, Long personId) {
return this.ouId.equals(ouId) && this.personId.equals(personId);
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (!(o instanceof OuAndPersonId)) return false; if (!(o instanceof OuAndPersonId)) return false;

View File

@ -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.enums.EssSealState;
import cn.axzo.nanopart.ess.api.request.GetOrgAuthStatesRequest; import cn.axzo.nanopart.ess.api.request.GetOrgAuthStatesRequest;
import cn.axzo.nanopart.ess.api.request.GetPersonAuthStateRequest; 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.GetSealsRequest;
import cn.axzo.nanopart.ess.api.response.GetOrgAuthStatesResponse; import cn.axzo.nanopart.ess.api.response.GetOrgAuthStatesResponse;
import cn.axzo.nanopart.ess.api.response.GetPersonAuthStateResponse; 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.EssSeal;
import cn.axzo.nanopart.ess.server.entity.EssSealPerson; import cn.axzo.nanopart.ess.server.entity.EssSealPerson;
import cn.axzo.nanopart.ess.server.entity.domain.OuAndPersonId; 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.EssSupport;
import cn.axzo.nanopart.ess.server.ess.support.PersonProfiles; import cn.axzo.nanopart.ess.server.ess.support.PersonProfiles;
import cn.axzo.nanopart.ess.server.utils.BizAssertions;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -36,10 +39,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; 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.groupingBy;
import static java.util.stream.Collectors.toMap;
import static java.util.stream.Collectors.toSet; import static java.util.stream.Collectors.toSet;
/** /**
@ -102,8 +102,7 @@ public class QueryService {
personIds.add(sealPerson.getAuthorizedByPersonId()); personIds.add(sealPerson.getAuthorizedByPersonId());
}); });
// ess person // ess person
Map<OuAndPersonId, EssPerson> sealPersons = essPersonDao.getByPersonIds(personIds).stream() EssPersons essPersons = EssPersons.wrap(essPersonDao.getByPersonIds(personIds));
.collect(toMap(p -> OuAndPersonId.create(p.getOuId(), p.getPersonId()), identity()));
// person profile // person profile
PersonProfiles personProfiles = PersonProfiles.wrap( PersonProfiles personProfiles = PersonProfiles.wrap(
essSupport.getPersonProfiles(Lists.newArrayList(personIds))); essSupport.getPersonProfiles(Lists.newArrayList(personIds)));
@ -113,17 +112,16 @@ public class QueryService {
essOrgAndSeals.add(orgAndSeal); essOrgAndSeals.add(orgAndSeal);
orgAndSeal.setOrg(BeanMapper.copyBean(org, EssOrgInfo.class)); orgAndSeal.setOrg(BeanMapper.copyBean(org, EssOrgInfo.class));
orgAndSeal.getOrg().setOrgAuthorized(org.isAuthorized()); orgAndSeal.getOrg().setOrgAuthorized(org.isAuthorized());
List<EssSeal> seals = ouId2Seals.getOrDefault(org.getOuId(), emptyList()); List<EssSeal> seals = ouId2Seals.getOrDefault(org.getOuId(), Collections.emptyList());
orgAndSeal.setSeals(BeanMapper.copyList(seals, EssSealInfo.class)); orgAndSeal.setSeals(BeanMapper.copyList(seals, EssSealInfo.class));
for (EssSealInfo sealInfo : orgAndSeal.getSeals()) { for (EssSealInfo sealInfo : orgAndSeal.getSeals()) {
List<EssSealPerson> persons = essSealId2Persons.getOrDefault(sealInfo.getEssSealId(), emptyList()); List<EssSealPerson> persons = essSealId2Persons.getOrDefault(sealInfo.getEssSealId(), Collections.emptyList());
for (EssSealPerson sealPerson : persons) { for (EssSealPerson sealPerson : persons) {
EssPerson essPerson = sealPersons.get(OuAndPersonId.create( EssPerson essPerson = essPersons.getOrThrow(OuAndPersonId.create(
sealPerson.getOuId(), sealPerson.getPersonId())); sealPerson.getOuId(), sealPerson.getPersonId()));
if (essPerson.getState() == EssPersonState.RESIGNED) if (essPerson.getState() == EssPersonState.RESIGNED)
continue; continue;
EssSealPersonInfo sealPersonInfo = BeanMapper.copyBean(sealPerson, EssSealPersonInfo.class); EssSealPersonInfo sealPersonInfo = BeanMapper.copyBean(sealPerson, EssSealPersonInfo.class);
sealInfo.addAuthorizedPerson(sealPersonInfo);
sealPersonInfo.setSuperAdmin(org.isSuperAdmin(sealPerson.getPersonId())); sealPersonInfo.setSuperAdmin(org.isSuperAdmin(sealPerson.getPersonId()));
sealPersonInfo.setSealAuthorized(sealPerson.getIsAuthorized().isYes()); sealPersonInfo.setSealAuthorized(sealPerson.getIsAuthorized().isYes());
sealPersonInfo.setPersonAuthorized(essPerson.isAuthorized()); sealPersonInfo.setPersonAuthorized(essPerson.isAuthorized());
@ -133,10 +131,46 @@ public class QueryService {
sealPersonInfo.setPersonName(person == null ? "" : person.getRealName()); sealPersonInfo.setPersonName(person == null ? "" : person.getRealName());
PersonProfileDto authorizedBy = personProfiles.findOrNull(sealPerson.getPersonId()); PersonProfileDto authorizedBy = personProfiles.findOrNull(sealPerson.getPersonId());
sealPersonInfo.setAuthorizedByPersonName(authorizedBy == null ? "" : authorizedBy.getRealName()); sealPersonInfo.setAuthorizedByPersonName(authorizedBy == null ? "" : authorizedBy.getRealName());
sealInfo.addSealPerson(sealPersonInfo);
} }
} }
} }
return essOrgAndSeals; return essOrgAndSeals;
} }
public List<EssSealPersonInfo> getSealPersons(GetSealPersonRequest request) {
List<EssSealPerson> sealPersons = essSealPersonDao.get(request.getEssSealId());
if (sealPersons.isEmpty())
return Collections.emptyList();
HashSet<Long> 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<EssSealPersonInfo> 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;
}
} }

View File

@ -4,6 +4,7 @@ import cn.axzo.basics.common.BeanMapper;
import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.ess.api.EssApi; import cn.axzo.nanopart.ess.api.EssApi;
import cn.axzo.nanopart.ess.api.domain.EssOrgAndSealInfo; 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.domain.contract.EssContractInfo;
import cn.axzo.nanopart.ess.api.request.AddSealAuthorizationRequest; import cn.axzo.nanopart.ess.api.request.AddSealAuthorizationRequest;
import cn.axzo.nanopart.ess.api.request.AddSealPersonsRequest; 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.GetEmbedWebUrlRequest;
import cn.axzo.nanopart.ess.api.request.GetOrgAuthStatesRequest; import cn.axzo.nanopart.ess.api.request.GetOrgAuthStatesRequest;
import cn.axzo.nanopart.ess.api.request.GetPersonAuthStateRequest; 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.GetSealsRequest;
import cn.axzo.nanopart.ess.api.request.GetSignUrlRequest; import cn.axzo.nanopart.ess.api.request.GetSignUrlRequest;
import cn.axzo.nanopart.ess.api.request.RemoveSealAuthorizationRequest; import cn.axzo.nanopart.ess.api.request.RemoveSealAuthorizationRequest;
@ -88,6 +90,12 @@ class ApiController implements EssApi {
return ApiResult.ok(queryService.getOrgEnabledSeals(request)); return ApiResult.ok(queryService.getOrgEnabledSeals(request));
} }
@Override
public ApiResult<List<EssSealPersonInfo>> getSealPersons(GetSealPersonRequest request) {
log.info("getSealPersons request={}", request);
return ApiResult.ok(queryService.getSealPersons(request));
}
@Override @Override
public ApiResult<Void> addSealPersons(AddSealPersonsRequest request) { public ApiResult<Void> addSealPersons(AddSealPersonsRequest request) {
log.info("addSealPersons request={}", request); log.info("addSealPersons request={}", request);

View File

@ -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<EssPerson> persons;
public static EssPersons wrap(List<EssPerson> 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<EssPerson> 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<EssPerson> find(OuAndPersonId ouAndPersonId) {
return persons.stream()
.filter(p -> ouAndPersonId.is(p.getOuId(), p.getPersonId()))
.findFirst();
}
}