refactor(dashboard): 重构大屏访问记录功能支持人员车辆数据

dev_km_logs
zhaokai 2026-08-10 16:47:56 +08:00
parent 34124fbb9a
commit b32269b651
17 changed files with 187 additions and 32 deletions

View File

@ -20,13 +20,13 @@ dahua:
oauth:
#测试环境
#host: 123.183.159.35
#client-id: 123.183.159.35
# client-secret: 4edfdcd2-67e6-41db-a1ae-b98d47a70266
# username: system
# password: zcloud88888
# http: false
# port: 4443
# host: 123.183.159.35
# client-id: 123.183.159.35
# client-secret: 4edfdcd2-67e6-41db-a1ae-b98d47a70266
# username: system
# password: zcloud88888
# http: false
# port: 4443
#生产环境
host: 192.168.42.194

View File

@ -82,3 +82,6 @@ message:
closedAreaApplyReceiveCarAuditReject: MS000159
closedAreaPersonReceiveAudit: MS000160
closedAreaPersonReceiveAuditReject: MS000161
file:
upload:
url: http://192.168.192.201:8992/file/uploadFiles2/

View File

@ -83,3 +83,6 @@ message:
closedAreaApplyReceiveCarAuditReject: MS000159
closedAreaPersonReceiveAudit: MS000160
closedAreaPersonReceiveAuditReject: MS000161
file:
upload:
url: https://jpfz.qhdsafety.com/gbsFileTest/file/uploadFiles2/

View File

@ -13,6 +13,7 @@ import com.zcloud.primeport.dto.clientobject.DashboardRecordStatCO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@ -36,9 +37,10 @@ public class DashboardController {
return dashboardService.mkmjRecord(cmd);
}
@ApiOperation("可视化大屏-口门进出记录")
@ApiOperation("可视化大屏-一级口门进出记录")
@PostMapping("/accessRecord")
public PageResponse<DashboardAccessRecordCO> accessRecord(@RequestBody DashboardAccessRecordPageQry qry) {
public PageResponse<DashboardAccessRecordCO> accessRecord(
@Validated @RequestBody DashboardAccessRecordPageQry qry) {
return dashboardService.accessRecord(qry);
}

View File

@ -33,7 +33,7 @@ public class DaHuaPersonSyncExe {
private final DaHuaGateway daHuaGateway;
private final PersonApplyGateway personApplyGateway;
@Value("${file.url:}")
@Value("${file.upload.url:}")
private String fileUrl;
/**
@ -185,4 +185,4 @@ public class DaHuaPersonSyncExe {
throw new BizException(message + (errorMessage == null ? "" : ": " + errorMessage));
}
}
}
}

View File

@ -16,6 +16,7 @@ import com.zcloud.primeport.persistence.dataobject.DashboardMkmjRecordDO;
import com.zcloud.primeport.persistence.repository.ClosedAreaCarApplyRepository;
import com.zcloud.primeport.persistence.repository.ClosedAreaPersonApplyRepository;
import com.zcloud.primeport.persistence.repository.DaHuaAccessRecordRepository;
import com.zcloud.primeport.persistence.repository.DaHuaVehicleAccessRecordRepository;
import com.zcloud.primeport.persistence.repository.MkmjRepository;
import com.zcloud.primeport.persistence.repository.PersonApplyRepository;
import com.zcloud.primeport.persistence.repository.VehicleApplyRepository;
@ -37,6 +38,7 @@ public class DashboardQueryExe {
private final ClosedAreaCarApplyRepository closedAreaCarApplyRepository;
private final MkmjRepository mkmjRepository;
private final DaHuaAccessRecordRepository daHuaAccessRecordRepository;
private final DaHuaVehicleAccessRecordRepository daHuaVehicleAccessRecordRepository;
public SingleResponse<DashboardRecordStatCO> recordStat(DashboardRecordStatCmd cmd) {
Map<String, Object> params = new HashMap<>();
@ -75,7 +77,14 @@ public class DashboardQueryExe {
public PageResponse<DashboardAccessRecordCO> accessRecord(DashboardAccessRecordPageQry qry) {
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
PageResponse<DashboardAccessRecordDO> page = daHuaAccessRecordRepository.pageDashboardRecord(params);
PageResponse<DashboardAccessRecordDO> page;
if (Integer.valueOf(1).equals(qry.getRecordType())) {
page = daHuaAccessRecordRepository.pageDashboardRecords(params);
} else if (Integer.valueOf(2).equals(qry.getRecordType())) {
page = daHuaVehicleAccessRecordRepository.pageDashboardRecords(params);
} else {
throw new IllegalArgumentException("记录类型只能为1或2");
}
List<DashboardAccessRecordCO> result = new ArrayList<>();
for (DashboardAccessRecordDO data : page.getData()) {
DashboardAccessRecordCO co = new DashboardAccessRecordCO();

View File

@ -5,9 +5,22 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
@Data
@EqualsAndHashCode(callSuper = false)
public class DashboardAccessRecordPageQry extends PageQuery {
@ApiModelProperty(value = "企业id", name = "corpinfoId")
private Long corpinfoId;
@ApiModelProperty(value = "港区1:秦皇岛港区,2:秦皇岛东,3:秦皇岛西", name = "portArea")
private Integer portArea;
@NotNull(message = "记录类型不能为空")
@Min(value = 1, message = "记录类型只能为1或2")
@Max(value = 2, message = "记录类型只能为1或2")
@ApiModelProperty(value = "记录类型1:人员2:车辆", name = "recordType", required = true)
private Integer recordType;
}

View File

@ -14,16 +14,19 @@ public class DashboardAccessRecordCO extends ClientObject {
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "记录类型1-人员2-车辆")
private Integer recordType;
@ApiModelProperty(value = "大华通行记录id")
private String dahuaRecordId;
@ApiModelProperty(value = "通行人员所属企业id")
@ApiModelProperty(value = "通行主体所属企业id")
private Long corpId;
@ApiModelProperty(value = "通行人员所属企业名称")
@ApiModelProperty(value = "通行主体所属企业名称")
private String corpName;
@ApiModelProperty(value = "通行人员所属企业港区")
@ApiModelProperty(value = "通行主体所属企业港区")
private Integer portArea;
@ApiModelProperty(value = "门禁设备所属企业id")
@ -86,6 +89,21 @@ public class DashboardAccessRecordCO extends ClientObject {
@ApiModelProperty(value = "人员姓名")
private String personName;
@ApiModelProperty(value = "停车场编码")
private String parkingLotCode;
@ApiModelProperty(value = "停车场名称")
private String parkingLotName;
@ApiModelProperty(value = "车辆类型编码")
private Integer carType;
@ApiModelProperty(value = "车辆类型名称")
private String carTypeName;
@ApiModelProperty(value = "车牌号")
private String carNum;
@ApiModelProperty(value = "证件号码")
private String paperNumber;

View File

@ -6,9 +6,15 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class DashboardAccessRecordDO extends DaHuaAccessRecordDO {
private Integer recordType;
private String mkmjName;
private String passageName;
private String passageType;
private String passageTypeName;
private String gateName;
private String parkingLotCode;
private String parkingLotName;
private Integer carType;
private String carTypeName;
private String carNum;
}

View File

@ -19,6 +19,6 @@ public interface DaHuaAccessRecordMapper extends BaseMapper<DaHuaAccessRecordDO>
DashboardAccessStatDO countDashboardRecord(@Param("params") Map<String, Object> params);
IPage<DashboardAccessRecordDO> pageDashboardRecord(Page<Map<String, Object>> page,
@Param("params") Map<String, Object> params);
IPage<DashboardAccessRecordDO> pageDashboardRecords(
Page<Map<String, Object>> page, @Param("params") Map<String, Object> params);
}

View File

@ -1,11 +1,15 @@
package com.zcloud.primeport.persistence.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zcloud.primeport.persistence.dataobject.DaHuaVehicleAccessRecordDO;
import com.zcloud.primeport.persistence.dataobject.DashboardAccessRecordDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.Map;
@Mapper
public interface DaHuaVehicleAccessRecordMapper extends BaseMapper<DaHuaVehicleAccessRecordDO> {
@ -15,4 +19,7 @@ public interface DaHuaVehicleAccessRecordMapper extends BaseMapper<DaHuaVehicleA
int upsertSyncCheckpoint(@Param("checkpointTime") LocalDateTime checkpointTime);
int upsert(@Param("record") DaHuaVehicleAccessRecordDO record);
IPage<DashboardAccessRecordDO> pageDashboardRecords(
Page<Map<String, Object>> page, @Param("params") Map<String, Object> params);
}

View File

@ -15,5 +15,5 @@ public interface DaHuaAccessRecordRepository extends BaseRepository<DaHuaAccessR
DashboardAccessStatDO countDashboardRecord(Map<String, Object> params);
PageResponse<DashboardAccessRecordDO> pageDashboardRecord(Map<String, Object> params);
PageResponse<DashboardAccessRecordDO> pageDashboardRecords(Map<String, Object> params);
}

View File

@ -1,9 +1,12 @@
package com.zcloud.primeport.persistence.repository;
import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.primeport.persistence.dataobject.DaHuaVehicleAccessRecordDO;
import com.zcloud.primeport.persistence.dataobject.DashboardAccessRecordDO;
import java.time.LocalDateTime;
import java.util.Map;
public interface DaHuaVehicleAccessRecordRepository extends BaseRepository<DaHuaVehicleAccessRecordDO> {
@ -12,4 +15,6 @@ public interface DaHuaVehicleAccessRecordRepository extends BaseRepository<DaHua
void saveSyncCheckpoint(LocalDateTime checkpointTime);
void upsert(DaHuaVehicleAccessRecordDO record);
PageResponse<DashboardAccessRecordDO> pageDashboardRecords(Map<String, Object> params);
}

View File

@ -32,11 +32,12 @@ public class DaHuaAccessRecordRepositoryImpl
@Override
@SuppressWarnings("unchecked")
public PageResponse<DashboardAccessRecordDO> pageDashboardRecord(Map<String, Object> params) {
Page<Map<String, Object>> page = new Page<>(Integer.parseInt(params.get("pageIndex").toString()),
public PageResponse<DashboardAccessRecordDO> pageDashboardRecords(Map<String, Object> params) {
Page<Map<String, Object>> page = new Page<>(
Integer.parseInt(params.get("pageIndex").toString()),
Integer.parseInt(params.get("pageSize").toString()));
page.setOptimizeJoinOfCountSql(false);
IPage<DashboardAccessRecordDO> result = baseMapper.pageDashboardRecord(page, params);
IPage<DashboardAccessRecordDO> result = baseMapper.pageDashboardRecords(page, params);
return PageHelper.pageToResponse(result, result.getRecords());
}
}

View File

@ -1,12 +1,18 @@
package com.zcloud.primeport.persistence.repository.impl;
import com.alibaba.cola.dto.PageResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jjb.saas.framework.repository.common.PageHelper;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import com.zcloud.primeport.persistence.dataobject.DaHuaVehicleAccessRecordDO;
import com.zcloud.primeport.persistence.dataobject.DashboardAccessRecordDO;
import com.zcloud.primeport.persistence.mapper.DaHuaVehicleAccessRecordMapper;
import com.zcloud.primeport.persistence.repository.DaHuaVehicleAccessRecordRepository;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.Map;
@Repository
public class DaHuaVehicleAccessRecordRepositoryImpl
@ -27,4 +33,15 @@ public class DaHuaVehicleAccessRecordRepositoryImpl
public void upsert(DaHuaVehicleAccessRecordDO record) {
baseMapper.upsert(record);
}
@Override
@SuppressWarnings("unchecked")
public PageResponse<DashboardAccessRecordDO> pageDashboardRecords(Map<String, Object> params) {
Page<Map<String, Object>> page = new Page<>(
Integer.parseInt(params.get("pageIndex").toString()),
Integer.parseInt(params.get("pageSize").toString()));
page.setOptimizeJoinOfCountSql(false);
IPage<DashboardAccessRecordDO> result = baseMapper.pageDashboardRecords(page, params);
return PageHelper.pageToResponse(result, result.getRecords());
}
}

View File

@ -46,13 +46,30 @@
</if>
</select>
<select id="pageDashboardRecord"
<sql id="dashboardPersonRecordFilter">
FROM dahua_access_record r
INNER JOIN mkmj m ON r.mkmj_id = m.id AND m.delete_enum = 'FALSE'
LEFT JOIN mkmj_passage p ON r.passage_id = p.id AND p.delete_enum = 'FALSE'
LEFT JOIN mkmj_gate g ON r.gate_id = g.id AND g.delete_enum = 'FALSE'
LEFT JOIN corp_info ci ON r.corp_id = ci.id AND ci.delete_enum = 'FALSE'
WHERE r.delete_enum = 'FALSE'
AND m.mkmj_level = 1
<if test="params.corpinfoId != null">
AND r.corp_id = #{params.corpinfoId}
</if>
<if test="params.portArea != null">
AND ci.port_area = #{params.portArea}
</if>
</sql>
<select id="pageDashboardRecords"
resultType="com.zcloud.primeport.persistence.dataobject.DashboardAccessRecordDO">
SELECT r.id,
1 AS record_type,
r.dahua_record_id,
r.corp_id,
r.corp_name,
r.port_area,
COALESCE(r.port_area, ci.port_area) AS port_area,
r.device_corp_id,
r.device_corp_name,
r.device_port_area,
@ -89,15 +106,7 @@
r.current_temperature,
r.source_type,
r.remark
FROM dahua_access_record r
INNER JOIN mkmj m ON r.mkmj_id = m.id AND m.delete_enum = 'FALSE'
INNER JOIN mkmj_passage p ON r.passage_id = p.id AND p.delete_enum = 'FALSE'
LEFT JOIN mkmj_gate g ON r.gate_id = g.id AND g.delete_enum = 'FALSE'
WHERE r.delete_enum = 'FALSE'
AND p.passage_type IN ('HGKM_MKMJ_PASSAGE_TYPE_CAR_R', 'HGKM_MKMJ_PASSAGE_TYPE_CAR')
<if test="params.corpinfoId != null">
AND m.mkmj_area_jurisdictional_corp_id = #{params.corpinfoId}
</if>
<include refid="dashboardPersonRecordFilter"/>
ORDER BY r.swing_time DESC, r.id DESC
</select>

View File

@ -72,4 +72,66 @@
update_time = VALUES(update_time)
</insert>
<sql id="dashboardVehicleRecordFilter">
FROM dahua_vehicle_access_record r
LEFT JOIN corp_info ci ON r.corp_id = ci.id AND ci.delete_enum = 'FALSE'
WHERE r.delete_enum = 'FALSE'
<if test="params.corpinfoId != null">
AND r.corp_id = #{params.corpinfoId}
</if>
<if test="params.portArea != null">
AND ci.port_area = #{params.portArea}
</if>
</sql>
<select id="pageDashboardRecords"
resultType="com.zcloud.primeport.persistence.dataobject.DashboardAccessRecordDO">
SELECT r.id,
2 AS record_type,
r.dahua_access_id AS dahua_record_id,
r.corp_id,
r.corp_name,
COALESCE(r.port_area, ci.port_area) AS port_area,
r.dahua_department_id,
r.dahua_department_name,
r.parking_lot_code,
r.parking_lot_name,
r.car_type,
r.car_type_name,
r.car_num,
1 AS enter_or_exit,
r.enter_sluice_channel_code AS channel_code,
r.enter_sluice_channel_name AS channel_name,
r.enter_sluice_channel_name AS gate_name,
r.enter_time AS swing_time,
r.enter_image_url AS record_image_url,
r.source_type
<include refid="dashboardVehicleRecordFilter"/>
AND r.enter_time IS NOT NULL
UNION ALL
SELECT r.id,
2 AS record_type,
r.dahua_access_id AS dahua_record_id,
r.corp_id,
r.corp_name,
COALESCE(r.port_area, ci.port_area) AS port_area,
r.dahua_department_id,
r.dahua_department_name,
r.parking_lot_code,
r.parking_lot_name,
r.car_type,
r.car_type_name,
COALESCE(NULLIF(r.exit_car_num, ''), r.car_num) AS car_num,
2 AS enter_or_exit,
r.exit_sluice_channel_code AS channel_code,
r.exit_sluice_channel_name AS channel_name,
r.exit_sluice_channel_name AS gate_name,
r.exit_time AS swing_time,
r.exit_image_url AS record_image_url,
r.source_type
<include refid="dashboardVehicleRecordFilter"/>
AND r.exit_time IS NOT NULL
ORDER BY swing_time DESC, id DESC, enter_or_exit ASC
</select>
</mapper>