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: oauth:
#测试环境 #测试环境
#host: 123.183.159.35 # host: 123.183.159.35
#client-id: 123.183.159.35 # client-id: 123.183.159.35
# client-secret: 4edfdcd2-67e6-41db-a1ae-b98d47a70266 # client-secret: 4edfdcd2-67e6-41db-a1ae-b98d47a70266
# username: system # username: system
# password: zcloud88888 # password: zcloud88888
# http: false # http: false
# port: 4443 # port: 4443
#生产环境 #生产环境
host: 192.168.42.194 host: 192.168.42.194

View File

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

View File

@ -83,3 +83,6 @@ message:
closedAreaApplyReceiveCarAuditReject: MS000159 closedAreaApplyReceiveCarAuditReject: MS000159
closedAreaPersonReceiveAudit: MS000160 closedAreaPersonReceiveAudit: MS000160
closedAreaPersonReceiveAuditReject: MS000161 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.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -36,9 +37,10 @@ public class DashboardController {
return dashboardService.mkmjRecord(cmd); return dashboardService.mkmjRecord(cmd);
} }
@ApiOperation("可视化大屏-口门进出记录") @ApiOperation("可视化大屏-一级口门进出记录")
@PostMapping("/accessRecord") @PostMapping("/accessRecord")
public PageResponse<DashboardAccessRecordCO> accessRecord(@RequestBody DashboardAccessRecordPageQry qry) { public PageResponse<DashboardAccessRecordCO> accessRecord(
@Validated @RequestBody DashboardAccessRecordPageQry qry) {
return dashboardService.accessRecord(qry); return dashboardService.accessRecord(qry);
} }

View File

@ -33,7 +33,7 @@ public class DaHuaPersonSyncExe {
private final DaHuaGateway daHuaGateway; private final DaHuaGateway daHuaGateway;
private final PersonApplyGateway personApplyGateway; private final PersonApplyGateway personApplyGateway;
@Value("${file.url:}") @Value("${file.upload.url:}")
private String fileUrl; private String fileUrl;
/** /**
@ -185,4 +185,4 @@ public class DaHuaPersonSyncExe {
throw new BizException(message + (errorMessage == null ? "" : ": " + errorMessage)); 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.ClosedAreaCarApplyRepository;
import com.zcloud.primeport.persistence.repository.ClosedAreaPersonApplyRepository; import com.zcloud.primeport.persistence.repository.ClosedAreaPersonApplyRepository;
import com.zcloud.primeport.persistence.repository.DaHuaAccessRecordRepository; 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.MkmjRepository;
import com.zcloud.primeport.persistence.repository.PersonApplyRepository; import com.zcloud.primeport.persistence.repository.PersonApplyRepository;
import com.zcloud.primeport.persistence.repository.VehicleApplyRepository; import com.zcloud.primeport.persistence.repository.VehicleApplyRepository;
@ -37,6 +38,7 @@ public class DashboardQueryExe {
private final ClosedAreaCarApplyRepository closedAreaCarApplyRepository; private final ClosedAreaCarApplyRepository closedAreaCarApplyRepository;
private final MkmjRepository mkmjRepository; private final MkmjRepository mkmjRepository;
private final DaHuaAccessRecordRepository daHuaAccessRecordRepository; private final DaHuaAccessRecordRepository daHuaAccessRecordRepository;
private final DaHuaVehicleAccessRecordRepository daHuaVehicleAccessRecordRepository;
public SingleResponse<DashboardRecordStatCO> recordStat(DashboardRecordStatCmd cmd) { public SingleResponse<DashboardRecordStatCO> recordStat(DashboardRecordStatCmd cmd) {
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
@ -75,7 +77,14 @@ public class DashboardQueryExe {
public PageResponse<DashboardAccessRecordCO> accessRecord(DashboardAccessRecordPageQry qry) { public PageResponse<DashboardAccessRecordCO> accessRecord(DashboardAccessRecordPageQry qry) {
Map<String, Object> params = PageQueryHelper.toHashMap(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<>(); List<DashboardAccessRecordCO> result = new ArrayList<>();
for (DashboardAccessRecordDO data : page.getData()) { for (DashboardAccessRecordDO data : page.getData()) {
DashboardAccessRecordCO co = new DashboardAccessRecordCO(); DashboardAccessRecordCO co = new DashboardAccessRecordCO();

View File

@ -5,9 +5,22 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class DashboardAccessRecordPageQry extends PageQuery { public class DashboardAccessRecordPageQry extends PageQuery {
@ApiModelProperty(value = "企业id", name = "corpinfoId") @ApiModelProperty(value = "企业id", name = "corpinfoId")
private Long 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") @ApiModelProperty(value = "主键id")
private Long id; private Long id;
@ApiModelProperty(value = "记录类型1-人员2-车辆")
private Integer recordType;
@ApiModelProperty(value = "大华通行记录id") @ApiModelProperty(value = "大华通行记录id")
private String dahuaRecordId; private String dahuaRecordId;
@ApiModelProperty(value = "通行人员所属企业id") @ApiModelProperty(value = "通行主体所属企业id")
private Long corpId; private Long corpId;
@ApiModelProperty(value = "通行人员所属企业名称") @ApiModelProperty(value = "通行主体所属企业名称")
private String corpName; private String corpName;
@ApiModelProperty(value = "通行人员所属企业港区") @ApiModelProperty(value = "通行主体所属企业港区")
private Integer portArea; private Integer portArea;
@ApiModelProperty(value = "门禁设备所属企业id") @ApiModelProperty(value = "门禁设备所属企业id")
@ -86,6 +89,21 @@ public class DashboardAccessRecordCO extends ClientObject {
@ApiModelProperty(value = "人员姓名") @ApiModelProperty(value = "人员姓名")
private String personName; 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 = "证件号码") @ApiModelProperty(value = "证件号码")
private String paperNumber; private String paperNumber;

View File

@ -6,9 +6,15 @@ import lombok.EqualsAndHashCode;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class DashboardAccessRecordDO extends DaHuaAccessRecordDO { public class DashboardAccessRecordDO extends DaHuaAccessRecordDO {
private Integer recordType;
private String mkmjName; private String mkmjName;
private String passageName; private String passageName;
private String passageType; private String passageType;
private String passageTypeName; private String passageTypeName;
private String gateName; 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); DashboardAccessStatDO countDashboardRecord(@Param("params") Map<String, Object> params);
IPage<DashboardAccessRecordDO> pageDashboardRecord(Page<Map<String, Object>> page, IPage<DashboardAccessRecordDO> pageDashboardRecords(
@Param("params") Map<String, Object> params); Page<Map<String, Object>> page, @Param("params") Map<String, Object> params);
} }

View File

@ -1,11 +1,15 @@
package com.zcloud.primeport.persistence.mapper; package com.zcloud.primeport.persistence.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; 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.DaHuaVehicleAccessRecordDO;
import com.zcloud.primeport.persistence.dataobject.DashboardAccessRecordDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Map;
@Mapper @Mapper
public interface DaHuaVehicleAccessRecordMapper extends BaseMapper<DaHuaVehicleAccessRecordDO> { public interface DaHuaVehicleAccessRecordMapper extends BaseMapper<DaHuaVehicleAccessRecordDO> {
@ -15,4 +19,7 @@ public interface DaHuaVehicleAccessRecordMapper extends BaseMapper<DaHuaVehicleA
int upsertSyncCheckpoint(@Param("checkpointTime") LocalDateTime checkpointTime); int upsertSyncCheckpoint(@Param("checkpointTime") LocalDateTime checkpointTime);
int upsert(@Param("record") DaHuaVehicleAccessRecordDO record); 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); 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; package com.zcloud.primeport.persistence.repository;
import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository; import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.primeport.persistence.dataobject.DaHuaVehicleAccessRecordDO; import com.zcloud.primeport.persistence.dataobject.DaHuaVehicleAccessRecordDO;
import com.zcloud.primeport.persistence.dataobject.DashboardAccessRecordDO;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Map;
public interface DaHuaVehicleAccessRecordRepository extends BaseRepository<DaHuaVehicleAccessRecordDO> { public interface DaHuaVehicleAccessRecordRepository extends BaseRepository<DaHuaVehicleAccessRecordDO> {
@ -12,4 +15,6 @@ public interface DaHuaVehicleAccessRecordRepository extends BaseRepository<DaHua
void saveSyncCheckpoint(LocalDateTime checkpointTime); void saveSyncCheckpoint(LocalDateTime checkpointTime);
void upsert(DaHuaVehicleAccessRecordDO record); void upsert(DaHuaVehicleAccessRecordDO record);
PageResponse<DashboardAccessRecordDO> pageDashboardRecords(Map<String, Object> params);
} }

View File

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

View File

@ -1,12 +1,18 @@
package com.zcloud.primeport.persistence.repository.impl; 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.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import com.zcloud.primeport.persistence.dataobject.DaHuaVehicleAccessRecordDO; 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.mapper.DaHuaVehicleAccessRecordMapper;
import com.zcloud.primeport.persistence.repository.DaHuaVehicleAccessRecordRepository; import com.zcloud.primeport.persistence.repository.DaHuaVehicleAccessRecordRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Map;
@Repository @Repository
public class DaHuaVehicleAccessRecordRepositoryImpl public class DaHuaVehicleAccessRecordRepositoryImpl
@ -27,4 +33,15 @@ public class DaHuaVehicleAccessRecordRepositoryImpl
public void upsert(DaHuaVehicleAccessRecordDO record) { public void upsert(DaHuaVehicleAccessRecordDO record) {
baseMapper.upsert(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> </if>
</select> </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"> resultType="com.zcloud.primeport.persistence.dataobject.DashboardAccessRecordDO">
SELECT r.id, SELECT r.id,
1 AS record_type,
r.dahua_record_id, r.dahua_record_id,
r.corp_id, r.corp_id,
r.corp_name, r.corp_name,
r.port_area, COALESCE(r.port_area, ci.port_area) AS port_area,
r.device_corp_id, r.device_corp_id,
r.device_corp_name, r.device_corp_name,
r.device_port_area, r.device_port_area,
@ -89,15 +106,7 @@
r.current_temperature, r.current_temperature,
r.source_type, r.source_type,
r.remark r.remark
FROM dahua_access_record r <include refid="dashboardPersonRecordFilter"/>
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>
ORDER BY r.swing_time DESC, r.id DESC ORDER BY r.swing_time DESC, r.id DESC
</select> </select>

View File

@ -72,4 +72,66 @@
update_time = VALUES(update_time) update_time = VALUES(update_time)
</insert> </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> </mapper>