feat(area): 添加闭合区域功能并重构区域查询逻辑

master
zhaokai 2026-08-13 17:23:34 +08:00
parent afcfbe45f3
commit dcb6111780
8 changed files with 108 additions and 103 deletions

View File

@ -8,26 +8,23 @@ import com.zcloud.personnel.positioning.dto.clientobject.AreaPersonStatCO;
import com.zcloud.personnel.positioning.dto.clientobject.BiCompanyOnlinePersonCO; import com.zcloud.personnel.positioning.dto.clientobject.BiCompanyOnlinePersonCO;
import com.zcloud.personnel.positioning.dto.clientobject.OptionCO; import com.zcloud.personnel.positioning.dto.clientobject.OptionCO;
import com.zcloud.personnel.positioning.persistence.dataobject.AreaDO; import com.zcloud.personnel.positioning.persistence.dataobject.AreaDO;
import com.zcloud.personnel.positioning.persistence.dataobject.ClosedAreaDO;
import com.zcloud.personnel.positioning.persistence.repository.AreaRepository; import com.zcloud.personnel.positioning.persistence.repository.AreaRepository;
import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.exception.BizException; import com.alibaba.cola.exception.BizException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jjb.saas.framework.auth.model.SSOUser; import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext; import com.jjb.saas.framework.auth.utils.AuthContext;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
* web-app *
* *
* @Author fangjiakai * @Author fangjiakai
* @Date 2026-07-07 * @Date 2026-07-07
@ -38,7 +35,7 @@ public class AreaQueryExe {
private final AreaRepository areaRepository; private final AreaRepository areaRepository;
private final AreaCoConvertor areaCoConvertor; private final AreaCoConvertor areaCoConvertor;
private final BiPersonLocationProvider biPersonLocationProvider; private final BiPersonLocationProvider biPersonLocationProvider;
private final ObjectMapper objectMapper; private final ClosedAreaMatcher closedAreaMatcher;
public PageResponse<AreaCO> execute(AreaPageQry qry) { public PageResponse<AreaCO> execute(AreaPageQry qry) {
AreaPageQry query = qry == null ? new AreaPageQry() : qry; AreaPageQry query = qry == null ? new AreaPageQry() : qry;
@ -80,7 +77,7 @@ public class AreaQueryExe {
throw new BizException("企业id不能为空"); throw new BizException("企业id不能为空");
} }
Long companyId = corpinfoId; Long companyId = corpinfoId;
List<AreaStatAccumulator> areas = listCompanyAreas(companyId); List<AreaStatAccumulator> areas = listCompanyClosedAreas(companyId);
List<BiCompanyOnlinePersonCO> personList = List<BiCompanyOnlinePersonCO> personList =
biPersonLocationProvider.listCompanyOnlinePersons(companyId, null, null); biPersonLocationProvider.listCompanyOnlinePersons(companyId, null, null);
for (BiCompanyOnlinePersonCO person : personList) { for (BiCompanyOnlinePersonCO person : personList) {
@ -101,16 +98,12 @@ public class AreaQueryExe {
return areaCoConvertor.converDOToCO(dataObject); return areaCoConvertor.converDOToCO(dataObject);
} }
private List<AreaStatAccumulator> listCompanyAreas(Long corpinfoId) { private List<AreaStatAccumulator> listCompanyClosedAreas(Long corpinfoId) {
QueryWrapper<AreaDO> queryWrapper = new QueryWrapper<>(); List<ClosedAreaDO> rows = areaRepository.listClosedAreas(corpinfoId);
queryWrapper.and(wrapper -> wrapper.isNull("delete_enum").or().eq("delete_enum", "FALSE")); List<ClosedAreaMatcher.AreaPolygon> polygons = closedAreaMatcher.prepare(rows);
queryWrapper.and(wrapper -> wrapper.isNull("status").or().eq("status", "ENABLED")); List<AreaStatAccumulator> result = new ArrayList<>(polygons.size());
queryWrapper.eq("corpinfo_id", corpinfoId); for (ClosedAreaMatcher.AreaPolygon polygon : polygons) {
queryWrapper.orderByAsc("sort_no").orderByAsc("area_name").orderByDesc("create_time"); result.add(new AreaStatAccumulator(polygon));
List<AreaDO> rows = areaRepository.list(queryWrapper);
List<AreaStatAccumulator> result = new ArrayList<>(rows.size());
for (AreaDO row : rows) {
result.add(new AreaStatAccumulator(row, parsePolygon(row.getPolygonJson())));
} }
return result; return result;
} }
@ -120,66 +113,13 @@ public class AreaQueryExe {
return; return;
} }
for (AreaStatAccumulator area : areas) { for (AreaStatAccumulator area : areas) {
if (pointInPolygon(person.getLon(), person.getLat(), area.points)) { if (closedAreaMatcher.contains(person.getLon(), person.getLat(), area.polygon)) {
area.add(person); area.add(person);
return; return;
} }
} }
} }
private List<BigDecimal[]> parsePolygon(String polygonJson) {
List<BigDecimal[]> points = new ArrayList<>();
if (!StringUtils.hasText(polygonJson)) {
return points;
}
try {
collectPoints(objectMapper.readTree(polygonJson), points);
} catch (IOException e) {
throw new BizException("区域边界坐标JSON格式错误");
}
return points;
}
private void collectPoints(JsonNode node, List<BigDecimal[]> points) {
if (node == null || node.isNull() || node.isMissingNode()) {
return;
}
if (node.isObject()) {
node.elements().forEachRemaining(child -> collectPoints(child, points));
return;
}
if (!node.isArray()) {
return;
}
if (node.size() >= 2 && node.get(0).isNumber() && node.get(1).isNumber()) {
points.add(new BigDecimal[]{node.get(0).decimalValue(), node.get(1).decimalValue()});
return;
}
for (JsonNode child : node) {
collectPoints(child, points);
}
}
private boolean pointInPolygon(BigDecimal lon, BigDecimal lat, List<BigDecimal[]> points) {
if (lon == null || lat == null || points == null || points.size() < 3) {
return false;
}
boolean inside = false;
double x = lon.doubleValue();
double y = lat.doubleValue();
for (int i = 0, j = points.size() - 1; i < points.size(); j = i++) {
double xi = points.get(i)[0].doubleValue();
double yi = points.get(i)[1].doubleValue();
double xj = points.get(j)[0].doubleValue();
double yj = points.get(j)[1].doubleValue();
if ((yi > y) != (yj > y)
&& x < (xj - xi) * (y - yi) / (yj - yi) + xi) {
inside = !inside;
}
}
return inside;
}
private void fillCorpinfo(Map<String, Object> params) { private void fillCorpinfo(Map<String, Object> params) {
if (params.get("eqCorpinfoId") != null || StringUtils.hasText((String) params.get("likeCorpinfoName"))) { if (params.get("eqCorpinfoId") != null || StringUtils.hasText((String) params.get("likeCorpinfoName"))) {
return; return;
@ -202,14 +142,12 @@ public class AreaQueryExe {
} }
private static class AreaStatAccumulator { private static class AreaStatAccumulator {
private final AreaDO area; private final ClosedAreaMatcher.AreaPolygon polygon;
private final List<BigDecimal[]> points;
private int unitCount; private int unitCount;
private int relatedCount; private int relatedCount;
private AreaStatAccumulator(AreaDO area, List<BigDecimal[]> points) { private AreaStatAccumulator(ClosedAreaMatcher.AreaPolygon polygon) {
this.area = area; this.polygon = polygon;
this.points = points;
} }
private void add(BiCompanyOnlinePersonCO person) { private void add(BiCompanyOnlinePersonCO person) {
@ -221,16 +159,16 @@ public class AreaQueryExe {
} }
private AreaPersonStatCO toCO() { private AreaPersonStatCO toCO() {
ClosedAreaDO area = polygon.getArea();
AreaPersonStatCO co = new AreaPersonStatCO(); AreaPersonStatCO co = new AreaPersonStatCO();
co.setAreaId(area.getId()); co.setAreaId(area.getId());
co.setAreaCode(area.getAreaCode()); co.setAreaName(area.getClosedAreaName());
co.setAreaName(area.getAreaName()); co.setAreaType(area.getClosedAreaType());
co.setAreaType(area.getAreaType()); co.setCorpinfoId(area.getJurisdictionalCorpId());
co.setCorpinfoId(area.getCorpinfoId()); co.setCorpinfoName(area.getJurisdictionalCorpName());
co.setCorpinfoName(area.getCorpinfoName()); co.setCenterLon(polygon.center(0));
co.setCenterLon(area.getCenterLon()); co.setCenterLat(polygon.center(1));
co.setCenterLat(area.getCenterLat()); co.setPolygonJson(area.getLocation());
co.setPolygonJson(area.getPolygonJson());
co.setUnitCount(unitCount); co.setUnitCount(unitCount);
co.setRelatedCount(relatedCount); co.setRelatedCount(relatedCount);
co.setTotalCount(unitCount + relatedCount); co.setTotalCount(unitCount + relatedCount);

View File

@ -35,24 +35,37 @@ public class BiPersonLocationProvider {
public List<BiCompanyOnlinePersonCO> listCompanyOnlinePersons(Long corpinfoId, public List<BiCompanyOnlinePersonCO> listCompanyOnlinePersons(Long corpinfoId,
String corpinfoName, String corpinfoName,
String corpCode) { String corpCode) {
return listCompanyOnlinePersons(corpinfoId, corpinfoName, true);
}
List<BiCompanyOnlinePersonCO> listCompanyOnlinePersonsWithoutArea(Long corpinfoId,
String corpinfoName) {
return listCompanyOnlinePersons(corpinfoId, corpinfoName, false);
}
private List<BiCompanyOnlinePersonCO> listCompanyOnlinePersons(Long corpinfoId,
String corpinfoName,
boolean includeArea) {
if (corpinfoId == null) { if (corpinfoId == null) {
return Collections.emptyList(); return Collections.emptyList();
} }
Map<Long, String> companies = new LinkedHashMap<>(); Map<Long, String> companies = new LinkedHashMap<>();
companies.put(corpinfoId, corpinfoName); companies.put(corpinfoId, corpinfoName);
return listCompanyPersons(companies, true).getOrDefault(corpinfoId, Collections.emptyList()); return listCompanyPersons(companies, true, includeArea)
.getOrDefault(corpinfoId, Collections.emptyList());
} }
Map<Long, List<BiCompanyOnlinePersonCO>> listCompanyPersonStatuses(Map<Long, String> companies) { Map<Long, List<BiCompanyOnlinePersonCO>> listCompanyPersonStatuses(Map<Long, String> companies) {
return listCompanyPersons(companies, false); return listCompanyPersons(companies, false, false);
} }
Map<Long, List<BiCompanyOnlinePersonCO>> listCompanyOnlinePersons(Map<Long, String> companies) { Map<Long, List<BiCompanyOnlinePersonCO>> listCompanyOnlinePersons(Map<Long, String> companies) {
return listCompanyPersons(companies, true); return listCompanyPersons(companies, true, true);
} }
private Map<Long, List<BiCompanyOnlinePersonCO>> listCompanyPersons(Map<Long, String> companies, private Map<Long, List<BiCompanyOnlinePersonCO>> listCompanyPersons(Map<Long, String> companies,
boolean includePosition) { boolean includePosition,
boolean includeArea) {
Map<Long, List<BiCompanyOnlinePersonCO>> result = emptyCompanyPersonMap(companies); Map<Long, List<BiCompanyOnlinePersonCO>> result = emptyCompanyPersonMap(companies);
if (result.isEmpty()) { if (result.isEmpty()) {
return result; return result;
@ -67,7 +80,7 @@ public class BiPersonLocationProvider {
return result; return result;
} }
Map<Long, PositionPersonCO> positionMap = includePosition Map<Long, PositionPersonCO> positionMap = includePosition
? loadPositionMap(mappings) : Collections.emptyMap(); ? loadPositionMap(mappings, includeArea) : Collections.emptyMap();
Map<Long, Map<Long, BiCompanyOnlinePersonCO>> personMaps = new LinkedHashMap<>(); Map<Long, Map<Long, BiCompanyOnlinePersonCO>> personMaps = new LinkedHashMap<>();
for (Long corpinfoId : corpinfoIds) { for (Long corpinfoId : corpinfoIds) {
personMaps.put(corpinfoId, new LinkedHashMap<>()); personMaps.put(corpinfoId, new LinkedHashMap<>());
@ -122,10 +135,14 @@ public class BiPersonLocationProvider {
} }
private Map<Long, PositionPersonCO> loadPositionMap( private Map<Long, PositionPersonCO> loadPositionMap(
List<PositionPersonLocalLookupService.PersonMapping> mappings) { List<PositionPersonLocalLookupService.PersonMapping> mappings,
boolean includeArea) {
Map<Long, PositionPersonCO> result = new LinkedHashMap<>(); Map<Long, PositionPersonCO> result = new LinkedHashMap<>();
try { try {
for (PositionPersonCO row : positionPersonQueryExe.listByMappings(mappings)) { List<PositionPersonCO> rows = includeArea
? positionPersonQueryExe.listByMappings(mappings)
: positionPersonQueryExe.listByMappingsWithoutArea(mappings);
for (PositionPersonCO row : rows) {
if (row.getUserId() != null) { if (row.getUserId() != null) {
result.putIfAbsent(row.getUserId(), row); result.putIfAbsent(row.getUserId(), row);
} }

View File

@ -32,6 +32,7 @@ import com.zcloud.personnel.positioning.persistence.dataobject.BiAreaSnapshotDO;
import com.zcloud.personnel.positioning.persistence.dataobject.BiCompanyAlarmCountDO; import com.zcloud.personnel.positioning.persistence.dataobject.BiCompanyAlarmCountDO;
import com.zcloud.personnel.positioning.persistence.dataobject.BiCorpInfoDO; import com.zcloud.personnel.positioning.persistence.dataobject.BiCorpInfoDO;
import com.zcloud.personnel.positioning.persistence.dataobject.BiPersonPositionUserDO; import com.zcloud.personnel.positioning.persistence.dataobject.BiPersonPositionUserDO;
import com.zcloud.personnel.positioning.persistence.dataobject.ClosedAreaDO;
import com.zcloud.personnel.positioning.persistence.dataobject.FenceDO; import com.zcloud.personnel.positioning.persistence.dataobject.FenceDO;
import com.zcloud.personnel.positioning.persistence.repository.AreaRepository; import com.zcloud.personnel.positioning.persistence.repository.AreaRepository;
import com.zcloud.personnel.positioning.persistence.repository.FenceRepository; import com.zcloud.personnel.positioning.persistence.repository.FenceRepository;
@ -57,7 +58,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
/** /**
* BI large-screen query executor. *
* *
* @Author fangjiakai * @Author fangjiakai
* @Date 2026-07-07 * @Date 2026-07-07
@ -86,6 +87,7 @@ public class PersonnelPositioningBiQueryExe {
private final BiPersonLocationProvider biPersonLocationProvider; private final BiPersonLocationProvider biPersonLocationProvider;
private final BiOverviewCache biOverviewCache; private final BiOverviewCache biOverviewCache;
private final PositionPersonLocalLookupService localLookupService; private final PositionPersonLocalLookupService localLookupService;
private final ClosedAreaMatcher closedAreaMatcher;
public BiOverviewCO queryOverview() { public BiOverviewCO queryOverview() {
String cacheKey = overviewCacheKey(); String cacheKey = overviewCacheKey();
@ -301,19 +303,26 @@ public class PersonnelPositioningBiQueryExe {
int pageSize = Math.max(qry.getPageSize(), 1); int pageSize = Math.max(qry.getPageSize(), 1);
Long corpinfoId = qry.getCorpinfoId(); Long corpinfoId = qry.getCorpinfoId();
Map<Long, BiCompanyOnlinePersonCO> locationMap = loadBiPersonPositionLocationMap(corpinfoId); Map<Long, BiCompanyOnlinePersonCO> locationMap = loadBiPersonPositionLocationMap(corpinfoId);
List<ClosedAreaMatcher.AreaPolygon> closedAreas = closedAreaMatcher.prepare(
areaRepository.listClosedAreas(qry.getCorpinfoId()));
List<BiPersonPositionCO> result = new ArrayList<>(); List<BiPersonPositionCO> result = new ArrayList<>();
for (BiPersonPositionUserDO user : userRepository.listBiPersonPositionUsers(corpinfoId)) { for (BiPersonPositionUserDO user : userRepository.listBiPersonPositionUsers(corpinfoId)) {
BiCompanyOnlinePersonCO location = findBiPersonPositionLocation(user, locationMap); BiCompanyOnlinePersonCO location = findBiPersonPositionLocation(user, locationMap);
result.add(buildBiPersonPositionRow(user, location)); result.add(buildBiPersonPositionRow(user, location, closedAreas));
} }
result.sort((left, right) -> Integer.compare(onlineOrder(left), onlineOrder(right)));
int fromIndex = Math.min((pageNo - 1) * pageSize, result.size()); int fromIndex = Math.min((pageNo - 1) * pageSize, result.size());
int toIndex = Math.min(fromIndex + pageSize, result.size()); int toIndex = Math.min(fromIndex + pageSize, result.size());
return PageResponse.of(result.subList(fromIndex, toIndex), result.size(), pageSize, pageNo); return PageResponse.of(result.subList(fromIndex, toIndex), result.size(), pageSize, pageNo);
} }
private int onlineOrder(BiPersonPositionCO person) {
return person != null && "ONLINE".equalsIgnoreCase(person.getOnlineStatus()) ? 0 : 1;
}
private Map<Long, BiCompanyOnlinePersonCO> loadBiPersonPositionLocationMap(Long corpinfoId) { private Map<Long, BiCompanyOnlinePersonCO> loadBiPersonPositionLocationMap(Long corpinfoId) {
List<BiCompanyOnlinePersonCO> locations = List<BiCompanyOnlinePersonCO> locations =
biPersonLocationProvider.listCompanyOnlinePersons(corpinfoId, null, null); biPersonLocationProvider.listCompanyOnlinePersonsWithoutArea(corpinfoId, null);
Map<Long, BiCompanyOnlinePersonCO> result = new LinkedHashMap<>(); Map<Long, BiCompanyOnlinePersonCO> result = new LinkedHashMap<>();
for (BiCompanyOnlinePersonCO location : locations) { for (BiCompanyOnlinePersonCO location : locations) {
if (location.getUserId() != null) { if (location.getUserId() != null) {
@ -332,7 +341,8 @@ public class PersonnelPositioningBiQueryExe {
} }
private BiPersonPositionCO buildBiPersonPositionRow(BiPersonPositionUserDO user, private BiPersonPositionCO buildBiPersonPositionRow(BiPersonPositionUserDO user,
BiCompanyOnlinePersonCO location) { BiCompanyOnlinePersonCO location,
List<ClosedAreaMatcher.AreaPolygon> closedAreas) {
BiPersonPositionCO co = new BiPersonPositionCO(); BiPersonPositionCO co = new BiPersonPositionCO();
co.setUserId(user.getUserId()); co.setUserId(user.getUserId());
co.setPersonName(user.getPersonName()); co.setPersonName(user.getPersonName());
@ -348,9 +358,13 @@ public class PersonnelPositioningBiQueryExe {
co.setLon(location.getLon()); co.setLon(location.getLon());
co.setLat(location.getLat()); co.setLat(location.getLat());
co.setLastLocationTime(location.getLastLocationTime()); co.setLastLocationTime(location.getLastLocationTime());
// 区域已在统一人员定位查询中按实时坐标匹配,这里直接透传以避免重复计算。 ClosedAreaMatcher.AreaPolygon area = closedAreaMatcher.match(
co.setAreaId(location.getLocationAreaId()); location.getLon(), location.getLat(), closedAreas);
co.setAreaName(location.getLocationAreaName()); if (area != null) {
ClosedAreaDO closedArea = area.getArea();
co.setAreaId(closedArea.getId());
co.setAreaName(closedArea.getClosedAreaName());
}
return co; return co;
} }
@ -752,7 +766,7 @@ public class PersonnelPositioningBiQueryExe {
return area; return area;
} }
} catch (IOException ignored) { } catch (IOException ignored) {
// Invalid port polygon data is ignored; the port remains unassigned. // 港区多边形数据无效时忽略,人员不归属任何港区。
} }
} }
return null; return null;

View File

@ -57,18 +57,24 @@ public class PositionPersonQueryExe {
List<PositionPersonCO> listByMappings( List<PositionPersonCO> listByMappings(
List<PositionPersonLocalLookupService.PersonMapping> mappings) { List<PositionPersonLocalLookupService.PersonMapping> mappings) {
return buildRows(new PositionPersonPageQry(), true, loadPersistedMatches(mappings)); return buildRows(new PositionPersonPageQry(), true, loadPersistedMatches(mappings), true);
}
List<PositionPersonCO> listByMappingsWithoutArea(
List<PositionPersonLocalLookupService.PersonMapping> mappings) {
return buildRows(new PositionPersonPageQry(), true, loadPersistedMatches(mappings), false);
} }
private List<PositionPersonCO> listRows(PositionPersonPageQry query) { private List<PositionPersonCO> listRows(PositionPersonPageQry query) {
boolean persistedMappings = localLookupService.hasPersonnelMappings(); boolean persistedMappings = localLookupService.hasPersonnelMappings();
List<MatchedPerson> matched = loadMatchedPeople(query, persistedMappings); List<MatchedPerson> matched = loadMatchedPeople(query, persistedMappings);
return buildRows(query, persistedMappings, matched); return buildRows(query, persistedMappings, matched, true);
} }
private List<PositionPersonCO> buildRows(PositionPersonPageQry query, private List<PositionPersonCO> buildRows(PositionPersonPageQry query,
boolean persistedMappings, boolean persistedMappings,
List<MatchedPerson> matched) { List<MatchedPerson> matched,
boolean includeArea) {
Set<String> idCardNos = new LinkedHashSet<>(); Set<String> idCardNos = new LinkedHashSet<>();
for (MatchedPerson person : matched) { for (MatchedPerson person : matched) {
if (!StringUtils.hasText(person.finds.terminalNo) if (!StringUtils.hasText(person.finds.terminalNo)
@ -124,7 +130,7 @@ public class PositionPersonQueryExe {
person, terminal, currentLocation, online, locationStatus, positionSource); person, terminal, currentLocation, online, locationStatus, positionSource);
boolean locationQueried = StringUtils.hasText(person.finds.terminalNo) boolean locationQueried = StringUtils.hasText(person.finds.terminalNo)
&& terminalNosToLocate.contains(person.finds.terminalNo); && terminalNosToLocate.contains(person.finds.terminalNo);
if (online && locationQueried) { if (includeArea && online && locationQueried) {
AreaDO area = matchLocationArea(row, areasByCorpinfoId); AreaDO area = matchLocationArea(row, areasByCorpinfoId);
if (area != null) { if (area != null) {
row.setLocationAreaId(area.getId()); row.setLocationAreaId(area.getId());

View File

@ -1,6 +1,7 @@
package com.zcloud.personnel.positioning.persistence.mapper; package com.zcloud.personnel.positioning.persistence.mapper;
import com.zcloud.personnel.positioning.persistence.dataobject.AreaDO; import com.zcloud.personnel.positioning.persistence.dataobject.AreaDO;
import com.zcloud.personnel.positioning.persistence.dataobject.ClosedAreaDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -16,4 +17,6 @@ import java.util.List;
@Mapper @Mapper
public interface AreaMapper extends BaseMapper<AreaDO> { public interface AreaMapper extends BaseMapper<AreaDO> {
List<AreaDO> selectBiPersonPositionAreas(@Param("corpinfoId") Long corpinfoId); List<AreaDO> selectBiPersonPositionAreas(@Param("corpinfoId") Long corpinfoId);
List<ClosedAreaDO> selectClosedAreas(@Param("corpinfoId") Long corpinfoId);
} }

View File

@ -1,6 +1,7 @@
package com.zcloud.personnel.positioning.persistence.repository; package com.zcloud.personnel.positioning.persistence.repository;
import com.zcloud.personnel.positioning.persistence.dataobject.AreaDO; import com.zcloud.personnel.positioning.persistence.dataobject.AreaDO;
import com.zcloud.personnel.positioning.persistence.dataobject.ClosedAreaDO;
import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository; import com.jjb.saas.framework.repository.repo.BaseRepository;
@ -17,4 +18,6 @@ public interface AreaRepository extends BaseRepository<AreaDO> {
PageResponse<AreaDO> listPage(Map<String, Object> params); PageResponse<AreaDO> listPage(Map<String, Object> params);
List<AreaDO> listBiPersonPositionAreas(Long corpinfoId); List<AreaDO> listBiPersonPositionAreas(Long corpinfoId);
List<ClosedAreaDO> listClosedAreas(Long corpinfoId);
} }

View File

@ -1,6 +1,7 @@
package com.zcloud.personnel.positioning.persistence.repository.impl; package com.zcloud.personnel.positioning.persistence.repository.impl;
import com.zcloud.personnel.positioning.persistence.dataobject.AreaDO; import com.zcloud.personnel.positioning.persistence.dataobject.AreaDO;
import com.zcloud.personnel.positioning.persistence.dataobject.ClosedAreaDO;
import com.zcloud.personnel.positioning.persistence.mapper.AreaMapper; import com.zcloud.personnel.positioning.persistence.mapper.AreaMapper;
import com.zcloud.personnel.positioning.persistence.repository.AreaRepository; import com.zcloud.personnel.positioning.persistence.repository.AreaRepository;
import com.zcloud.gbscommon.utils.PageQueryHelper; import com.zcloud.gbscommon.utils.PageQueryHelper;
@ -41,4 +42,9 @@ public class AreaRepositoryImpl extends BaseRepositoryImpl<AreaMapper, AreaDO> i
public List<AreaDO> listBiPersonPositionAreas(Long corpinfoId) { public List<AreaDO> listBiPersonPositionAreas(Long corpinfoId) {
return areaMapper.selectBiPersonPositionAreas(corpinfoId); return areaMapper.selectBiPersonPositionAreas(corpinfoId);
} }
@Override
public List<ClosedAreaDO> listClosedAreas(Long corpinfoId) {
return areaMapper.selectClosedAreas(corpinfoId);
}
} }

View File

@ -44,4 +44,22 @@
AND corpinfo_id = #{corpinfoId} AND corpinfo_id = #{corpinfoId}
ORDER BY sort_no ASC, area_name ASC, create_time DESC ORDER BY sort_no ASC, area_name ASC, create_time DESC
</select> </select>
<select id="selectClosedAreas"
resultType="com.zcloud.personnel.positioning.persistence.dataobject.ClosedAreaDO">
SELECT id,
closed_area_name AS closedAreaName,
closed_area_type AS closedAreaType,
jurisdictional_corp_id AS jurisdictionalCorpId,
jurisdictional_corp_name AS jurisdictionalCorpName,
location
FROM closed_area
WHERE (delete_enum IS NULL OR delete_enum = 'FALSE')
<if test="corpinfoId != null">
AND jurisdictional_corp_id = #{corpinfoId}
</if>
AND location IS NOT NULL
AND TRIM(location) != ''
ORDER BY id ASC
</select>
</mapper> </mapper>