|
|
@@ -9,12 +9,16 @@ import com.usky.sas.domain.SasFollowPerson;
|
|
|
import com.usky.sas.domain.SasPerson;
|
|
|
import com.usky.sas.domain.SasCredentialTypeCode;
|
|
|
import com.usky.sas.domain.SasPeopleTypeCode;
|
|
|
+import com.usky.sas.domain.SasPersonTypeCode;
|
|
|
import com.usky.sas.mapper.SasFollowPersonMapper;
|
|
|
import com.usky.sas.mapper.SasPersonMapper;
|
|
|
import com.usky.sas.mapper.SasCredentialTypeCodeMapper;
|
|
|
import com.usky.sas.mapper.SasPeopleTypeCodeMapper;
|
|
|
+import com.usky.sas.mapper.SasPersonTypeCodeMapper;
|
|
|
+import com.usky.sas.mapper.SasSystemConfigMapper;
|
|
|
import com.usky.sas.mapper.SasVillageMapper;
|
|
|
import com.usky.sas.domain.SasVillage;
|
|
|
+import com.usky.sas.domain.SasSystemConfig;
|
|
|
import com.usky.sas.service.SasPersonnelService;
|
|
|
import com.usky.sas.service.SasConfigService;
|
|
|
import com.usky.sas.service.dto.agbox.JsonRpcRequest;
|
|
|
@@ -25,6 +29,8 @@ import com.usky.sas.service.vo.PersonnelListItem;
|
|
|
import com.usky.sas.service.vo.PersonnelPageRequest;
|
|
|
import cn.hutool.http.HttpRequest;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.hutool.core.util.IdcardUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -66,6 +72,12 @@ public class SasPersonnelServiceImpl implements SasPersonnelService {
|
|
|
@Autowired
|
|
|
private SasVillageMapper sasVillageMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private SasPersonTypeCodeMapper sasPersonTypeCodeMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SasSystemConfigMapper sasSystemConfigMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public CommonPage<PersonnelListItem> whitelistPage(PersonnelPageRequest request) {
|
|
|
// 目前按人员表简单分页,后续可根据白名单标识补充筛选条件
|
|
|
@@ -102,8 +114,99 @@ public class SasPersonnelServiceImpl implements SasPersonnelService {
|
|
|
|
|
|
@Override
|
|
|
public CommonPage<PersonnelListItem> registeredPage(PersonnelPageRequest request) {
|
|
|
- // 在册人员同样基于人员表,后续可根据在册标识补充筛选条件
|
|
|
- return buildPersonPage(request);
|
|
|
+ com.usky.sas.domain.SasConfig config = sasConfigService.getConfig();
|
|
|
+ if (config == null || config.getKeyds() == null || config.getHost() == null) {
|
|
|
+ log.debug("在册人员分页:未配置 AG,走本地人员表分页");
|
|
|
+ return buildPersonPage(request);
|
|
|
+ }
|
|
|
+ String villageCode = request.getVillageCode();
|
|
|
+ if (villageCode == null || villageCode.isEmpty()) {
|
|
|
+ villageCode = getVillageCodeForSync();
|
|
|
+ }
|
|
|
+ if (villageCode == null || villageCode.isEmpty()) {
|
|
|
+ log.debug("在册人员分页:无地块编码,走本地人员表分页");
|
|
|
+ return buildPersonPage(request);
|
|
|
+ }
|
|
|
+ int page = request.getCurrent() != null ? request.getCurrent() : 1;
|
|
|
+ int pageSize = request.getSize() != null ? request.getSize() : 10;
|
|
|
+ try {
|
|
|
+ String baseUrl = buildAgboxBaseUrl(config.getHost(), config.getPort());
|
|
|
+ String villageUrl = baseUrl + AGBOX_VILLAGE_PATH;
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ params.put("page", page);
|
|
|
+ params.put("pageSize", pageSize);
|
|
|
+ params.put("villageCode", villageCode);
|
|
|
+ JsonRpcRequest getPersonJson = new JsonRpcRequest("getPerson", params, null);
|
|
|
+ Map<String, Object> requestBody = new HashMap<>();
|
|
|
+ requestBody.put("key", config.getKeyds());
|
|
|
+ requestBody.put("json", JSONUtil.toJsonStr(getPersonJson));
|
|
|
+ log.info("请求AG在册人员分页:page={}, pageSize={}, villageCode={}", page, pageSize, villageCode);
|
|
|
+
|
|
|
+ String resultStr = postWithRetry(villageUrl, requestBody);
|
|
|
+ PersonVo personVo = new ObjectMapper().readValue(resultStr, PersonVo.class);
|
|
|
+ PersonVo.PersonResult result = personVo != null ? personVo.getResult() : null;
|
|
|
+ List<PersonVo.PersonMsg> personList = (result != null && result.getPerson() != null) ? result.getPerson() : Collections.emptyList();
|
|
|
+
|
|
|
+ SasSystemConfig systemConfig = sasSystemConfigMapper.selectOne(new LambdaQueryWrapper<SasSystemConfig>().last("limit 1"));
|
|
|
+ boolean maskIdCard = systemConfig != null && Boolean.TRUE.equals(systemConfig.getMaskIdCardNo());
|
|
|
+
|
|
|
+ List<PersonnelListItem> list = personList.stream()
|
|
|
+ .map(msg -> personMsgToListItem(msg, maskIdCard))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ long total = (result != null && result.getCount() != null) ? result.getCount() : 0;
|
|
|
+ return new CommonPage<>(list, total, (long) page, (long) pageSize);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("在册人员分页请求 AG 失败,回退本地人员表:{}", e.getMessage());
|
|
|
+ return buildPersonPage(request);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private PersonnelListItem personMsgToListItem(PersonVo.PersonMsg msg, boolean maskIdCard) {
|
|
|
+ PersonnelListItem item = new PersonnelListItem();
|
|
|
+ item.setPersonCode(msg.getPersonCode());
|
|
|
+ item.setName(msg.getName());
|
|
|
+ item.setCredentialType(msg.getCredentialType());
|
|
|
+ if (msg.getCredentialNo() != null) {
|
|
|
+ if (maskIdCard && msg.getCredentialNo().length() > 8) {
|
|
|
+ item.setCredentialNo(IdcardUtil.hide(msg.getCredentialNo(), 4, msg.getCredentialNo().length() - 4));
|
|
|
+ } else {
|
|
|
+ item.setCredentialNo(msg.getCredentialNo());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ item.setPeopleTypeCode(msg.getPersonTypeCode());
|
|
|
+ if (msg.getFacePicUrl() != null && StrUtil.isNotBlank(msg.getFacePicUrl().getUrl()) && StrUtil.isNotBlank(msg.getFacePicUrl().getPath())) {
|
|
|
+ item.setPicUrl(msg.getFacePicUrl().getUrl() + msg.getFacePicUrl().getPath());
|
|
|
+ }
|
|
|
+ if (msg.getPicId() != null && !msg.getPicId().isEmpty()) {
|
|
|
+ item.setPicId(msg.getPicId());
|
|
|
+ }
|
|
|
+ if (msg.getUpdateTime() != null && !msg.getUpdateTime().isEmpty()) {
|
|
|
+ try {
|
|
|
+ item.setUpdateTime(LocalDateTime.parse(msg.getUpdateTime().replace(' ', 'T').substring(0, Math.min(19, msg.getUpdateTime().length())), DateTimeFormatter.ISO_LOCAL_DATE_TIME));
|
|
|
+ } catch (Exception ignored) {
|
|
|
+ item.setUpdateTime(null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (msg.getPersonEntranceTypeCode() != null) {
|
|
|
+ SasPersonTypeCode pt = sasPersonTypeCodeMapper.selectById(msg.getPersonEntranceTypeCode());
|
|
|
+ if (pt != null) {
|
|
|
+ item.setPersonTypeName(pt.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (msg.getPersonTypeCode() != null) {
|
|
|
+ SasPeopleTypeCode pc = sasPeopleTypeCodeMapper.selectById(String.valueOf(msg.getPersonTypeCode()));
|
|
|
+ if (pc != null) {
|
|
|
+ item.setPeopleTypeName(pc.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (msg.getCredentialType() != null) {
|
|
|
+ SasCredentialTypeCode ct = sasCredentialTypeCodeMapper.selectById(msg.getCredentialType());
|
|
|
+ if (ct != null) {
|
|
|
+ item.setCredentialTypeName(ct.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return item;
|
|
|
}
|
|
|
|
|
|
@Override
|