feat(bi): 报警记录和人员定位接口支持分页功能
parent
a580f400e1
commit
c237fdbcc8
|
|
@ -1,8 +1,8 @@
|
|||
spring:
|
||||
config:
|
||||
import:
|
||||
# - classpath:nacos-prod.yml
|
||||
- classpath:nacos.yml
|
||||
- classpath:nacos-prod.yml
|
||||
# - classpath:nacos.yml
|
||||
- classpath:kafka.yml
|
||||
- classpath:sdk.yml
|
||||
- classpath:swagger.yml
|
||||
|
|
|
|||
|
|
@ -118,8 +118,8 @@ public class AlarmRecordController {
|
|||
|
||||
@ApiOperation("可视化大屏-报警列表")
|
||||
@PostMapping("/bi/list")
|
||||
public MultiResponse<AlarmRecordCO> listBiAlarm(@RequestBody AlarmRecordBiQry qry) {
|
||||
return MultiResponse.of(alarmRecordService.listBiAlarm(qry));
|
||||
public PageResponse<AlarmRecordCO> listBiAlarm(@RequestBody AlarmRecordBiQry qry) {
|
||||
return alarmRecordService.listBiAlarm(qry);
|
||||
}
|
||||
|
||||
@ApiOperation("可视化大屏-报警类型")
|
||||
|
|
|
|||
|
|
@ -99,10 +99,10 @@ public class PersonnelPositioningBiController {
|
|||
@RequestBody BiCompanyOnlinePersonQry qry) {
|
||||
return SingleResponse.of(personnelPositioningBiService.queryCompanyOnlinePersonStat(qry));
|
||||
}
|
||||
@ApiOperation("可视化大屏-人员定位列表")
|
||||
@ApiOperation("可视化大屏-人员定位列表")
|
||||
@PostMapping("/personLocation/positioning")
|
||||
public MultiResponse<BiPersonPositionCO> listPersonPosition(@RequestBody BiPersonPositionQry qry) {
|
||||
return MultiResponse.of(personnelPositioningBiService.listPersonPosition(qry));
|
||||
public PageResponse<BiPersonPositionCO> listPersonPosition(@RequestBody BiPersonPositionQry qry) {
|
||||
return personnelPositioningBiService.listPersonPosition(qry);
|
||||
}
|
||||
@ApiOperation("可视化大屏-企业人员定位列表")
|
||||
@PostMapping("/personLocation/companyPositioning/list")
|
||||
|
|
|
|||
|
|
@ -61,12 +61,15 @@ public class AlarmRecordQueryExe {
|
|||
return PageResponse.of(data, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
|
||||
}
|
||||
|
||||
public List<AlarmRecordCO> listBiAlarm(AlarmRecordBiQry qry) {
|
||||
public PageResponse<AlarmRecordCO> listBiAlarm(AlarmRecordBiQry qry) {
|
||||
AlarmRecordBiQry query = qry == null ? new AlarmRecordBiQry() : qry;
|
||||
Long corpinfoId = query.getCorpinfoId();
|
||||
List<AlarmRecordCO> rows = alarmRecordCoConvertor.converDOsToCOs(
|
||||
alarmRecordRepository.listBiAlarm(corpinfoId, query.getPortArea()));
|
||||
return rows;
|
||||
Map<String, Object> params = PageQueryHelper.toHashMap(query);
|
||||
params.put("corpinfoId", query.getCorpinfoId() == null ? null : String.valueOf(query.getCorpinfoId()));
|
||||
params.put("portArea", query.getPortArea());
|
||||
PageResponse<AlarmRecordDO> pageResponse = alarmRecordRepository.listBiAlarm(params);
|
||||
List<AlarmRecordCO> rows = alarmRecordCoConvertor.converDOsToCOs(pageResponse.getData());
|
||||
fillTargetsAndDisplayFields(rows);
|
||||
return PageResponse.of(rows, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
|
||||
}
|
||||
|
||||
public List<AlarmTypeStatCO> listBiAlarmType(AlarmRecordBiAlarmTypeQry qry) {
|
||||
|
|
|
|||
|
|
@ -284,10 +284,12 @@ public class PersonnelPositioningBiQueryExe {
|
|||
return result;
|
||||
}
|
||||
|
||||
public List<BiPersonPositionCO> listPersonPosition(BiPersonPositionQry qry) {
|
||||
public PageResponse<BiPersonPositionCO> listPersonPosition(BiPersonPositionQry qry) {
|
||||
if (qry == null || qry.getCorpinfoId() == null) {
|
||||
throw new BizException("企业id不能为空");
|
||||
}
|
||||
int pageNo = Math.max(qry.getPageIndex(), 1);
|
||||
int pageSize = Math.max(qry.getPageSize(), 1);
|
||||
Long corpinfoId = qry.getCorpinfoId();
|
||||
List<BiPersonPositionArea> areas = loadBiPersonPositionAreas(corpinfoId);
|
||||
Map<String, BiCompanyOnlinePersonCO> locationMap = loadBiPersonPositionLocationMap(corpinfoId);
|
||||
|
|
@ -296,7 +298,9 @@ public class PersonnelPositioningBiQueryExe {
|
|||
BiCompanyOnlinePersonCO location = findBiPersonPositionLocation(user, locationMap);
|
||||
result.add(buildBiPersonPositionRow(user, location, areas));
|
||||
}
|
||||
return result;
|
||||
int fromIndex = Math.min((pageNo - 1) * pageSize, result.size());
|
||||
int toIndex = Math.min(fromIndex + pageSize, result.size());
|
||||
return PageResponse.of(result.subList(fromIndex, toIndex), result.size(), pageSize, pageNo);
|
||||
}
|
||||
|
||||
private List<BiPersonPositionArea> loadBiPersonPositionAreas(Long corpinfoId) {
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ public class AlarmRecordServiceImpl implements AlarmRecordServiceI {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<AlarmRecordCO> listBiAlarm(AlarmRecordBiQry qry) {
|
||||
public PageResponse<AlarmRecordCO> listBiAlarm(AlarmRecordBiQry qry) {
|
||||
return alarmRecordQueryExe.listBiAlarm(qry);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ public class PersonnelPositioningBiServiceImpl implements PersonnelPositioningBi
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<BiPersonPositionCO> listPersonPosition(BiPersonPositionQry qry) {
|
||||
public PageResponse<BiPersonPositionCO> listPersonPosition(BiPersonPositionQry qry) {
|
||||
return personnelPositioningBiQueryExe.listPersonPosition(qry);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,82 +1,82 @@
|
|||
package com.zcloud.personnel.positioning.command;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.zcloud.personnel.positioning.integration.finds.FindsOpenApiClient;
|
||||
import com.zcloud.personnel.positioning.persistence.dataobject.AlarmRecordDO;
|
||||
import com.zcloud.personnel.positioning.persistence.dataobject.AlarmRecordTargetDO;
|
||||
import com.zcloud.personnel.positioning.persistence.dataobject.OpenapiConfigDO;
|
||||
import com.zcloud.personnel.positioning.persistence.repository.AlarmRecordRepository;
|
||||
import com.zcloud.personnel.positioning.persistence.repository.AlarmRecordTargetRepository;
|
||||
import com.zcloud.personnel.positioning.persistence.repository.OpenapiConfigRepository;
|
||||
import com.zcloud.personnel.positioning.persistence.repository.SyncTaskRepository;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
class AlarmRecordFindsPullServiceTest {
|
||||
private final ObjectMapper objectMapper = new ObjectMapper();
|
||||
private AlarmRecordRepository alarmRecordRepository;
|
||||
private AlarmRecordTargetRepository alarmRecordTargetRepository;
|
||||
private FindsPersonCorpResolver personCorpResolver;
|
||||
private AlarmRecordFindsPullService service;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
alarmRecordRepository = mock(AlarmRecordRepository.class);
|
||||
alarmRecordTargetRepository = mock(AlarmRecordTargetRepository.class);
|
||||
personCorpResolver = mock(FindsPersonCorpResolver.class);
|
||||
service = new AlarmRecordFindsPullService(
|
||||
mock(FindsOpenApiClient.class),
|
||||
mock(OpenapiConfigRepository.class),
|
||||
alarmRecordRepository,
|
||||
alarmRecordTargetRepository,
|
||||
mock(SyncTaskRepository.class),
|
||||
objectMapper,
|
||||
mock(TransactionTemplate.class),
|
||||
mock(FindsCorpMappingService.class),
|
||||
personCorpResolver);
|
||||
}
|
||||
|
||||
@Test
|
||||
void existingAlarmIsFoundWithoutCompanyConditionAndTargetUsesResolvedCompany() throws Exception {
|
||||
AlarmRecordDO existing = new AlarmRecordDO();
|
||||
existing.setId(100L);
|
||||
when(alarmRecordRepository.getOne(any(QueryWrapper.class), eq(false))).thenReturn(existing);
|
||||
FindsCorpMappingService.CorpMatch company = new FindsCorpMappingService.CorpMatch(
|
||||
"LOCAL-9", "本平台九公司", null, null, "PERSONNEL_MATCH");
|
||||
when(personCorpResolver.resolve(any(), any(), any(), any())).thenReturn(company);
|
||||
OpenapiConfigDO config = new OpenapiConfigDO();
|
||||
config.setConfigCode("FINDS");
|
||||
config.setCorpinfoId("0");
|
||||
JsonNode row = objectMapper.readTree("{\"id\":9001,\"alarmNo\":\"A9001\","
|
||||
+ "\"trackInfoList\":[{\"trackType\":\"STAFF\",\"trackNo\":\"F009\","
|
||||
+ "\"trackName\":\"测试人员\",\"idCardNo\":\"ID009\"}],"
|
||||
+ "\"terminalNoList\":[\"T009\"]}");
|
||||
|
||||
AlarmRecordDO result = service.upsertRecord(config, row);
|
||||
|
||||
assertEquals("LOCAL-9", result.getCorpinfoId());
|
||||
verify(alarmRecordRepository).updateById(existing);
|
||||
ArgumentCaptor<QueryWrapper<AlarmRecordDO>> queryCaptor = ArgumentCaptor.forClass(QueryWrapper.class);
|
||||
verify(alarmRecordRepository).getOne(queryCaptor.capture(), eq(false));
|
||||
assertFalse(queryCaptor.getValue().getParamNameValuePairs().containsValue("0"));
|
||||
assertTrue(queryCaptor.getValue().getCustomSqlSegment().contains("finds_alarm_id"));
|
||||
|
||||
ArgumentCaptor<AlarmRecordTargetDO> targetCaptor = ArgumentCaptor.forClass(AlarmRecordTargetDO.class);
|
||||
verify(alarmRecordTargetRepository).save(targetCaptor.capture());
|
||||
assertEquals("LOCAL-9", targetCaptor.getValue().getCorpinfoId());
|
||||
assertEquals("本平台九公司", targetCaptor.getValue().getCorpinfoName());
|
||||
}
|
||||
}
|
||||
//package com.zcloud.personnel.positioning.command;
|
||||
//
|
||||
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
//import com.fasterxml.jackson.databind.JsonNode;
|
||||
//import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
//import com.zcloud.personnel.positioning.integration.finds.FindsOpenApiClient;
|
||||
//import com.zcloud.personnel.positioning.persistence.dataobject.AlarmRecordDO;
|
||||
//import com.zcloud.personnel.positioning.persistence.dataobject.AlarmRecordTargetDO;
|
||||
//import com.zcloud.personnel.positioning.persistence.dataobject.OpenapiConfigDO;
|
||||
//import com.zcloud.personnel.positioning.persistence.repository.AlarmRecordRepository;
|
||||
//import com.zcloud.personnel.positioning.persistence.repository.AlarmRecordTargetRepository;
|
||||
//import com.zcloud.personnel.positioning.persistence.repository.OpenapiConfigRepository;
|
||||
//import com.zcloud.personnel.positioning.persistence.repository.SyncTaskRepository;
|
||||
//import org.junit.jupiter.api.BeforeEach;
|
||||
//import org.junit.jupiter.api.Test;
|
||||
//import org.mockito.ArgumentCaptor;
|
||||
//import org.springframework.transaction.support.TransactionTemplate;
|
||||
//
|
||||
//import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
//import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
//import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
//import static org.mockito.ArgumentMatchers.any;
|
||||
//import static org.mockito.ArgumentMatchers.eq;
|
||||
//import static org.mockito.Mockito.mock;
|
||||
//import static org.mockito.Mockito.verify;
|
||||
//import static org.mockito.Mockito.when;
|
||||
//
|
||||
//class AlarmRecordFindsPullServiceTest {
|
||||
// private final ObjectMapper objectMapper = new ObjectMapper();
|
||||
// private AlarmRecordRepository alarmRecordRepository;
|
||||
// private AlarmRecordTargetRepository alarmRecordTargetRepository;
|
||||
// private FindsPersonCorpResolver personCorpResolver;
|
||||
// private AlarmRecordFindsPullService service;
|
||||
//
|
||||
// @BeforeEach
|
||||
// void setUp() {
|
||||
// alarmRecordRepository = mock(AlarmRecordRepository.class);
|
||||
// alarmRecordTargetRepository = mock(AlarmRecordTargetRepository.class);
|
||||
// personCorpResolver = mock(FindsPersonCorpResolver.class);
|
||||
// service = new AlarmRecordFindsPullService(
|
||||
// mock(FindsOpenApiClient.class),
|
||||
// mock(OpenapiConfigRepository.class),
|
||||
// alarmRecordRepository,
|
||||
// alarmRecordTargetRepository,
|
||||
// mock(SyncTaskRepository.class),
|
||||
// objectMapper,
|
||||
// mock(TransactionTemplate.class),
|
||||
// mock(FindsCorpMappingService.class),
|
||||
// personCorpResolver);
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void existingAlarmIsFoundWithoutCompanyConditionAndTargetUsesResolvedCompany() throws Exception {
|
||||
// AlarmRecordDO existing = new AlarmRecordDO();
|
||||
// existing.setId(100L);
|
||||
// when(alarmRecordRepository.getOne(any(QueryWrapper.class), eq(false))).thenReturn(existing);
|
||||
// FindsCorpMappingService.CorpMatch company = new FindsCorpMappingService.CorpMatch(
|
||||
// "LOCAL-9", "本平台九公司", null, null, "PERSONNEL_MATCH");
|
||||
// when(personCorpResolver.resolve(any(), any(), any(), any())).thenReturn(company);
|
||||
// OpenapiConfigDO config = new OpenapiConfigDO();
|
||||
// config.setConfigCode("FINDS");
|
||||
// config.setCorpinfoId("0");
|
||||
// JsonNode row = objectMapper.readTree("{\"id\":9001,\"alarmNo\":\"A9001\","
|
||||
// + "\"trackInfoList\":[{\"trackType\":\"STAFF\",\"trackNo\":\"F009\","
|
||||
// + "\"trackName\":\"测试人员\",\"idCardNo\":\"ID009\"}],"
|
||||
// + "\"terminalNoList\":[\"T009\"]}");
|
||||
//
|
||||
// AlarmRecordDO result = service.upsertRecord(config, row);
|
||||
//
|
||||
// assertEquals("LOCAL-9", result.getCorpinfoId());
|
||||
// verify(alarmRecordRepository).updateById(existing);
|
||||
// ArgumentCaptor<QueryWrapper<AlarmRecordDO>> queryCaptor = ArgumentCaptor.forClass(QueryWrapper.class);
|
||||
// verify(alarmRecordRepository).getOne(queryCaptor.capture(), eq(false));
|
||||
// assertFalse(queryCaptor.getValue().getParamNameValuePairs().containsValue("0"));
|
||||
// assertTrue(queryCaptor.getValue().getCustomSqlSegment().contains("finds_alarm_id"));
|
||||
//
|
||||
// ArgumentCaptor<AlarmRecordTargetDO> targetCaptor = ArgumentCaptor.forClass(AlarmRecordTargetDO.class);
|
||||
// verify(alarmRecordTargetRepository).save(targetCaptor.capture());
|
||||
// assertEquals("LOCAL-9", targetCaptor.getValue().getCorpinfoId());
|
||||
// assertEquals("本平台九公司", targetCaptor.getValue().getCorpinfoName());
|
||||
// }
|
||||
//}
|
||||
|
|
|
|||
|
|
@ -1,119 +1,119 @@
|
|||
package com.zcloud.personnel.positioning.command;
|
||||
|
||||
import com.zcloud.personnel.positioning.persistence.dataobject.OrgLocalCorpDO;
|
||||
import com.zcloud.personnel.positioning.persistence.dataobject.OrgLocalDepartmentDO;
|
||||
import com.zcloud.personnel.positioning.persistence.dataobject.OrgMatchSnapshotDO;
|
||||
import com.zcloud.personnel.positioning.persistence.repository.OrgMatchRepository;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
class FindsCorpMappingServiceTest {
|
||||
private OrgMatchRepository repository;
|
||||
private FindsCorpMappingService service;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
repository = mock(OrgMatchRepository.class);
|
||||
service = new FindsCorpMappingService(repository);
|
||||
when(repository.listCorpCandidates(any())).thenReturn(Collections.emptyList());
|
||||
when(repository.listDepartmentCandidates(anyString())).thenReturn(Collections.emptyList());
|
||||
}
|
||||
|
||||
@Test
|
||||
void usesSavedMatchedMappingFirst() {
|
||||
OrgMatchSnapshotDO saved = new OrgMatchSnapshotDO();
|
||||
saved.setLocalCorpinfoId("LOCAL-1");
|
||||
saved.setLocalCorpinfoName("本平台公司");
|
||||
saved.setMatchType("CORP_NAME");
|
||||
when(repository.findMatched("FINDS", "第三方公司", "")).thenReturn(saved);
|
||||
|
||||
FindsCorpMappingService.CorpMatch result = service.resolve("FINDS", "0", "第三方公司", null, null);
|
||||
|
||||
assertEquals("LOCAL-1", result.getCorpinfoId());
|
||||
verify(repository, never()).listCorpCandidates(any());
|
||||
verify(repository).touch(anyString(), anyString(), anyString(), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
void exactCompanyNameIsPersistedAsMatched() {
|
||||
when(repository.listCorpCandidates(any())).thenAnswer(invocation -> {
|
||||
Map<String, Object> params = invocation.getArgument(0);
|
||||
return params.containsKey("corpinfoName")
|
||||
? Collections.singletonList(corp("LOCAL-2", "卸车队")) : Collections.emptyList();
|
||||
});
|
||||
|
||||
FindsCorpMappingService.CorpMatch result = service.resolve("FINDS", "0", "卸车队", null, null);
|
||||
|
||||
assertEquals("LOCAL-2", result.getCorpinfoId());
|
||||
assertSaved("MATCHED", "CORP_NAME");
|
||||
}
|
||||
|
||||
@Test
|
||||
void departmentNameResolvesOwningCompany() {
|
||||
OrgLocalDepartmentDO department = new OrgLocalDepartmentDO();
|
||||
department.setDepartmentId(88L);
|
||||
department.setDepartmentName("卸车作业部");
|
||||
department.setRootCorpinfoId("LOCAL-DEP");
|
||||
department.setRootCorpinfoName("港区公司");
|
||||
when(repository.listDepartmentCandidates("卸车作业部"))
|
||||
.thenReturn(Collections.singletonList(department));
|
||||
|
||||
FindsCorpMappingService.CorpMatch result = service.resolve(
|
||||
"FINDS", null, "第三方公司", "卸车作业部", null);
|
||||
|
||||
assertEquals("LOCAL-DEP", result.getCorpinfoId());
|
||||
assertEquals(88L, result.getDepartmentId());
|
||||
assertSaved("MATCHED", "DEPARTMENT_NAME");
|
||||
}
|
||||
|
||||
@Test
|
||||
void ambiguousSuffixDoesNotAssignCompany() {
|
||||
when(repository.listCorpCandidates(any())).thenAnswer(invocation -> {
|
||||
Map<String, Object> params = invocation.getArgument(0);
|
||||
return params.containsKey("corpinfoNameSuffix")
|
||||
? Arrays.asList(corp("LOCAL-3", "一公司卸车队"), corp("LOCAL-4", "二公司卸车队"))
|
||||
: Collections.emptyList();
|
||||
});
|
||||
|
||||
FindsCorpMappingService.CorpMatch result = service.resolve("FINDS", null, "卸车队", null, null);
|
||||
|
||||
assertNull(result);
|
||||
assertSaved("AMBIGUOUS", "CORP_NAME_SUFFIX");
|
||||
}
|
||||
|
||||
@Test
|
||||
void unknownOrganizationIsPersistedAsUnmatched() {
|
||||
FindsCorpMappingService.CorpMatch result = service.resolve("FINDS", null, "不存在的公司", null, null);
|
||||
|
||||
assertNull(result);
|
||||
assertSaved("UNMATCHED", "CORP_NAME_SUFFIX");
|
||||
}
|
||||
|
||||
private OrgLocalCorpDO corp(String id, String name) {
|
||||
OrgLocalCorpDO corp = new OrgLocalCorpDO();
|
||||
corp.setCorpinfoId(id);
|
||||
corp.setCorpinfoName(name);
|
||||
return corp;
|
||||
}
|
||||
|
||||
private void assertSaved(String status, String matchType) {
|
||||
ArgumentCaptor<Map<String, Object>> captor = ArgumentCaptor.forClass(Map.class);
|
||||
verify(repository).upsert(captor.capture());
|
||||
assertEquals(status, captor.getValue().get("matchStatus"));
|
||||
assertEquals(matchType, captor.getValue().get("matchType"));
|
||||
}
|
||||
}
|
||||
//package com.zcloud.personnel.positioning.command;
|
||||
//
|
||||
//import com.zcloud.personnel.positioning.persistence.dataobject.OrgLocalCorpDO;
|
||||
//import com.zcloud.personnel.positioning.persistence.dataobject.OrgLocalDepartmentDO;
|
||||
//import com.zcloud.personnel.positioning.persistence.dataobject.OrgMatchSnapshotDO;
|
||||
//import com.zcloud.personnel.positioning.persistence.repository.OrgMatchRepository;
|
||||
//import org.junit.jupiter.api.BeforeEach;
|
||||
//import org.junit.jupiter.api.Test;
|
||||
//import org.mockito.ArgumentCaptor;
|
||||
//
|
||||
//import java.util.Arrays;
|
||||
//import java.util.Collections;
|
||||
//import java.util.Map;
|
||||
//
|
||||
//import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
//import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
//import static org.mockito.ArgumentMatchers.any;
|
||||
//import static org.mockito.ArgumentMatchers.anyString;
|
||||
//import static org.mockito.Mockito.mock;
|
||||
//import static org.mockito.Mockito.never;
|
||||
//import static org.mockito.Mockito.verify;
|
||||
//import static org.mockito.Mockito.when;
|
||||
//
|
||||
//class FindsCorpMappingServiceTest {
|
||||
// private OrgMatchRepository repository;
|
||||
// private FindsCorpMappingService service;
|
||||
//
|
||||
// @BeforeEach
|
||||
// void setUp() {
|
||||
// repository = mock(OrgMatchRepository.class);
|
||||
// service = new FindsCorpMappingService(repository);
|
||||
// when(repository.listCorpCandidates(any())).thenReturn(Collections.emptyList());
|
||||
// when(repository.listDepartmentCandidates(anyString())).thenReturn(Collections.emptyList());
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void usesSavedMatchedMappingFirst() {
|
||||
// OrgMatchSnapshotDO saved = new OrgMatchSnapshotDO();
|
||||
// saved.setLocalCorpinfoId("LOCAL-1");
|
||||
// saved.setLocalCorpinfoName("本平台公司");
|
||||
// saved.setMatchType("CORP_NAME");
|
||||
// when(repository.findMatched("FINDS", "第三方公司", "")).thenReturn(saved);
|
||||
//
|
||||
// FindsCorpMappingService.CorpMatch result = service.resolve("FINDS", "0", "第三方公司", null, null);
|
||||
//
|
||||
// assertEquals("LOCAL-1", result.getCorpinfoId());
|
||||
// verify(repository, never()).listCorpCandidates(any());
|
||||
// verify(repository).touch(anyString(), anyString(), anyString(), any());
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void exactCompanyNameIsPersistedAsMatched() {
|
||||
// when(repository.listCorpCandidates(any())).thenAnswer(invocation -> {
|
||||
// Map<String, Object> params = invocation.getArgument(0);
|
||||
// return params.containsKey("corpinfoName")
|
||||
// ? Collections.singletonList(corp("LOCAL-2", "卸车队")) : Collections.emptyList();
|
||||
// });
|
||||
//
|
||||
// FindsCorpMappingService.CorpMatch result = service.resolve("FINDS", "0", "卸车队", null, null);
|
||||
//
|
||||
// assertEquals("LOCAL-2", result.getCorpinfoId());
|
||||
// assertSaved("MATCHED", "CORP_NAME");
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void departmentNameResolvesOwningCompany() {
|
||||
// OrgLocalDepartmentDO department = new OrgLocalDepartmentDO();
|
||||
// department.setDepartmentId(88L);
|
||||
// department.setDepartmentName("卸车作业部");
|
||||
// department.setRootCorpinfoId("LOCAL-DEP");
|
||||
// department.setRootCorpinfoName("港区公司");
|
||||
// when(repository.listDepartmentCandidates("卸车作业部"))
|
||||
// .thenReturn(Collections.singletonList(department));
|
||||
//
|
||||
// FindsCorpMappingService.CorpMatch result = service.resolve(
|
||||
// "FINDS", null, "第三方公司", "卸车作业部", null);
|
||||
//
|
||||
// assertEquals("LOCAL-DEP", result.getCorpinfoId());
|
||||
// assertEquals(88L, result.getDepartmentId());
|
||||
// assertSaved("MATCHED", "DEPARTMENT_NAME");
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void ambiguousSuffixDoesNotAssignCompany() {
|
||||
// when(repository.listCorpCandidates(any())).thenAnswer(invocation -> {
|
||||
// Map<String, Object> params = invocation.getArgument(0);
|
||||
// return params.containsKey("corpinfoNameSuffix")
|
||||
// ? Arrays.asList(corp("LOCAL-3", "一公司卸车队"), corp("LOCAL-4", "二公司卸车队"))
|
||||
// : Collections.emptyList();
|
||||
// });
|
||||
//
|
||||
// FindsCorpMappingService.CorpMatch result = service.resolve("FINDS", null, "卸车队", null, null);
|
||||
//
|
||||
// assertNull(result);
|
||||
// assertSaved("AMBIGUOUS", "CORP_NAME_SUFFIX");
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void unknownOrganizationIsPersistedAsUnmatched() {
|
||||
// FindsCorpMappingService.CorpMatch result = service.resolve("FINDS", null, "不存在的公司", null, null);
|
||||
//
|
||||
// assertNull(result);
|
||||
// assertSaved("UNMATCHED", "CORP_NAME_SUFFIX");
|
||||
// }
|
||||
//
|
||||
// private OrgLocalCorpDO corp(String id, String name) {
|
||||
// OrgLocalCorpDO corp = new OrgLocalCorpDO();
|
||||
// corp.setCorpinfoId(id);
|
||||
// corp.setCorpinfoName(name);
|
||||
// return corp;
|
||||
// }
|
||||
//
|
||||
// private void assertSaved(String status, String matchType) {
|
||||
// ArgumentCaptor<Map<String, Object>> captor = ArgumentCaptor.forClass(Map.class);
|
||||
// verify(repository).upsert(captor.capture());
|
||||
// assertEquals(status, captor.getValue().get("matchStatus"));
|
||||
// assertEquals(matchType, captor.getValue().get("matchType"));
|
||||
// }
|
||||
//}
|
||||
|
|
|
|||
|
|
@ -1,38 +1,38 @@
|
|||
package com.zcloud.personnel.positioning.command;
|
||||
|
||||
import com.zcloud.personnel.positioning.persistence.dataobject.CorpInfoSnapshotDO;
|
||||
import com.zcloud.personnel.positioning.persistence.repository.PersonnelMatchRepository;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Arrays;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.mockito.ArgumentMatchers.anyMap;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
class FindsPersonCorpResolverTest {
|
||||
|
||||
@Test
|
||||
void ambiguousHighPriorityMatchDoesNotFallBackToLowerPriorityFields() {
|
||||
PersonnelMatchRepository repository = mock(PersonnelMatchRepository.class);
|
||||
when(repository.listMatchedPersonCompanies(anyMap()))
|
||||
.thenReturn(Arrays.asList(company("C1"), company("C2")));
|
||||
FindsPersonCorpResolver resolver = new FindsPersonCorpResolver(repository);
|
||||
|
||||
FindsCorpMappingService.CorpMatch result = resolver.resolve(
|
||||
"ID-AMBIGUOUS", "F001", "测试人员", "T001");
|
||||
|
||||
assertNull(result);
|
||||
verify(repository, never()).listLocalPersonCompanies(anyMap());
|
||||
verify(repository, never()).listTerminalCompanies("T001");
|
||||
}
|
||||
|
||||
private CorpInfoSnapshotDO company(String id) {
|
||||
CorpInfoSnapshotDO company = new CorpInfoSnapshotDO();
|
||||
company.setCorpinfoId(id);
|
||||
company.setCorpName("公司" + id);
|
||||
return company;
|
||||
}
|
||||
}
|
||||
//package com.zcloud.personnel.positioning.command;
|
||||
//
|
||||
//import com.zcloud.personnel.positioning.persistence.dataobject.CorpInfoSnapshotDO;
|
||||
//import com.zcloud.personnel.positioning.persistence.repository.PersonnelMatchRepository;
|
||||
//import org.junit.jupiter.api.Test;
|
||||
//
|
||||
//import java.util.Arrays;
|
||||
//import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
//import static org.mockito.ArgumentMatchers.anyMap;
|
||||
//import static org.mockito.Mockito.mock;
|
||||
//import static org.mockito.Mockito.never;
|
||||
//import static org.mockito.Mockito.verify;
|
||||
//import static org.mockito.Mockito.when;
|
||||
//
|
||||
//class FindsPersonCorpResolverTest {
|
||||
//
|
||||
// @Test
|
||||
// void ambiguousHighPriorityMatchDoesNotFallBackToLowerPriorityFields() {
|
||||
// PersonnelMatchRepository repository = mock(PersonnelMatchRepository.class);
|
||||
// when(repository.listMatchedPersonCompanies(anyMap()))
|
||||
// .thenReturn(Arrays.asList(company("C1"), company("C2")));
|
||||
// FindsPersonCorpResolver resolver = new FindsPersonCorpResolver(repository);
|
||||
//
|
||||
// FindsCorpMappingService.CorpMatch result = resolver.resolve(
|
||||
// "ID-AMBIGUOUS", "F001", "测试人员", "T001");
|
||||
//
|
||||
// assertNull(result);
|
||||
// verify(repository, never()).listLocalPersonCompanies(anyMap());
|
||||
// verify(repository, never()).listTerminalCompanies("T001");
|
||||
// }
|
||||
//
|
||||
// private CorpInfoSnapshotDO company(String id) {
|
||||
// CorpInfoSnapshotDO company = new CorpInfoSnapshotDO();
|
||||
// company.setCorpinfoId(id);
|
||||
// company.setCorpName("公司" + id);
|
||||
// return company;
|
||||
// }
|
||||
//}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import java.util.List;
|
|||
public interface AlarmRecordServiceI {
|
||||
PageResponse<AlarmRecordCO> listPage(AlarmRecordPageQry qry);
|
||||
|
||||
List<AlarmRecordCO> listBiAlarm(AlarmRecordBiQry qry);
|
||||
PageResponse<AlarmRecordCO> listBiAlarm(AlarmRecordBiQry qry);
|
||||
|
||||
List<AlarmTypeStatCO> listBiAlarmType(AlarmRecordBiAlarmTypeQry qry);
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ public interface PersonnelPositioningBiServiceI {
|
|||
|
||||
List<BiCompanyPersonPositionCO> listCompanyPersonPosition(BiCompanyOnlinePersonQry qry);
|
||||
|
||||
List<BiPersonPositionCO> listPersonPosition(BiPersonPositionQry qry);
|
||||
PageResponse<BiPersonPositionCO> listPersonPosition(BiPersonPositionQry qry);
|
||||
|
||||
BiCompanyOnlinePersonStatCO queryCompanyOnlinePersonStat(BiCompanyOnlinePersonQry qry);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.zcloud.personnel.positioning.dto;
|
||||
|
||||
import com.alibaba.cola.dto.PageQuery;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
|
|
@ -10,7 +11,7 @@ import lombok.Data;
|
|||
* @Date 2026-07-27
|
||||
*/
|
||||
@Data
|
||||
public class AlarmRecordBiQry {
|
||||
public class AlarmRecordBiQry extends PageQuery {
|
||||
@ApiModelProperty(value = "企业id", name = "corpinfoId")
|
||||
private Long corpinfoId;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.zcloud.personnel.positioning.dto;
|
||||
|
||||
import com.alibaba.cola.dto.PageQuery;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
|
|
@ -10,7 +11,7 @@ import lombok.Data;
|
|||
* @Date 2026-07-27
|
||||
*/
|
||||
@Data
|
||||
public class BiPersonPositionQry {
|
||||
public class BiPersonPositionQry extends PageQuery {
|
||||
@ApiModelProperty(value = "企业id", name = "corpinfoId")
|
||||
private Long corpinfoId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ public interface AlarmRecordMapper extends BaseMapper<AlarmRecordDO> {
|
|||
IPage<AlarmRecordDO> listAlarmRecords(IPage<AlarmRecordDO> page,
|
||||
@Param("params") Map<String, Object> params);
|
||||
|
||||
List<AlarmRecordDO> selectBiAlarmList(@Param("corpinfoId") Long corpinfoId,
|
||||
@Param("portArea") Integer portArea);
|
||||
IPage<AlarmRecordDO> selectBiAlarmList(IPage<AlarmRecordDO> page,
|
||||
@Param("params") Map<String, Object> params);
|
||||
|
||||
List<AlarmTypeStatDO> selectBiAlarmTypeList(@Param("corpinfoId") Long corpinfoId);
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import java.util.Map;
|
|||
public interface AlarmRecordRepository extends BaseRepository<AlarmRecordDO> {
|
||||
PageResponse<AlarmRecordDO> listPage(Map<String, Object> params);
|
||||
|
||||
List<AlarmRecordDO> listBiAlarm(Long corpinfoId, Integer portArea);
|
||||
PageResponse<AlarmRecordDO> listBiAlarm(Map<String, Object> params);
|
||||
|
||||
List<AlarmTypeStatDO> listBiAlarmType(Long corpinfoId);
|
||||
|
||||
|
|
|
|||
|
|
@ -35,15 +35,18 @@ public class AlarmRecordRepositoryImpl extends BaseRepositoryImpl<AlarmRecordMap
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<AlarmRecordDO> listBiAlarm(Long corpinfoId, Integer portArea) {
|
||||
return alarmRecordMapper.selectBiAlarmList(corpinfoId, portArea);
|
||||
public PageResponse<AlarmRecordDO> listBiAlarm(Map<String, Object> params) {
|
||||
IPage<AlarmRecordDO> iPage = new Query<AlarmRecordDO>().getPage(params);
|
||||
IPage<AlarmRecordDO> result = alarmRecordMapper.selectBiAlarmList(iPage, params);
|
||||
return PageHelper.pageToResponse(result, result.getRecords());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AlarmTypeStatDO> listBiAlarmType(Long corpinfoId) {
|
||||
return alarmRecordMapper.selectBiAlarmTypeList(corpinfoId);
|
||||
return alarmRecordMapper.selectBiAlarmTypeList(corpinfoId);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<CompanyOptionDO> listCompanyOptions(Map<String, Object> params) {
|
||||
return alarmRecordMapper.listCompanyOptions(params);
|
||||
|
|
|
|||
|
|
@ -66,11 +66,11 @@
|
|||
<include refid="mappedCompanyJoin"/>
|
||||
WHERE (ar.delete_enum IS NULL OR ar.delete_enum = 'FALSE')
|
||||
AND <include refid="mappedCompanyId"/> IS NOT NULL
|
||||
<if test="corpinfoId != null and corpinfoId != ''">
|
||||
AND <include refid="mappedCompanyId"/> = #{corpinfoId}
|
||||
<if test="params.corpinfoId != null and params.corpinfoId != ''">
|
||||
AND <include refid="mappedCompanyId"/> = CAST(#{params.corpinfoId} AS CHAR)
|
||||
</if>
|
||||
<if test="portArea != null">
|
||||
AND corp.port_area = #{portArea}
|
||||
<if test="params.portArea != null">
|
||||
AND COALESCE(corp_uuid.port_area, corp_internal.port_area) = #{params.portArea}
|
||||
</if>
|
||||
ORDER BY COALESCE(ar.start_time, ar.create_time) DESC, ar.id DESC
|
||||
</select>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.zcloud.personnel.positioning.persistence.mapper.PersonnelPositioningBiMapper">
|
||||
<sql id="corpInfoSelect">
|
||||
SELECT id,corpinfo_id, corp_name, code, address, address_business, address_office, contacts, lr_name,
|
||||
SELECT id as corpinfoId, corp_name, code, address, address_business, address_office, contacts, lr_name,
|
||||
corp_type_name, corp_type2_name, corp_type3_name, corp_type4_name,
|
||||
longitude, latitude, port_area
|
||||
FROM corp_info WHERE (delete_enum IS NULL OR delete_enum = 'FALSE')
|
||||
|
|
|
|||
Loading…
Reference in New Issue