feat(): 新增车辆归属查询功能,修改封闭区域人员进出记录统计逻辑

master
lishiwei 2026-08-28 13:35:58 +08:00
parent 1cca784a2a
commit 00279cd6dc
16 changed files with 341 additions and 69 deletions

View File

@ -46,6 +46,12 @@ public class ClosedAreaCarApplyController {
return closedAreaCarApplyService.listPage(qry); return closedAreaCarApplyService.listPage(qry);
} }
@ApiOperation("根据车辆归属查询封闭区域现有车辆")
@GetMapping("/getCarByCarBelongType")
public PageResponse<ClosedAreaCarApplyCO> getCarByCarBelongType(ClosedAreaCarApplyPageQry qry) {
return closedAreaCarApplyService.getCarByCarBelongType(qry);
}
@ApiOperation("详情") @ApiOperation("详情")
@GetMapping("/{id}") @GetMapping("/{id}")
public SingleResponse<ClosedAreaCarApplyCO> getInfoById(@PathVariable("id") Long id) { public SingleResponse<ClosedAreaCarApplyCO> getInfoById(@PathVariable("id") Long id) {

View File

@ -113,14 +113,18 @@ public class ClosedAreaPersonApplyUpdateExe {
areaFgsPersonAreaGateway.removeByFgspersonAuthId(cmd.getUserId()); areaFgsPersonAreaGateway.removeByFgspersonAuthId(cmd.getUserId());
ArrayList<ClosedAreaFgsPersonAreaE> objects = new ArrayList<>(); ArrayList<ClosedAreaFgsPersonAreaE> objects = new ArrayList<>();
List<ClosedAreaPersonApplyAuthCmd.FgsPersonArea> areaList = cmd.getAreaList(); List<ClosedAreaPersonApplyAuthCmd.FgsPersonArea> areaList = cmd.getAreaList();
if (areaList != null) {
for (ClosedAreaPersonApplyAuthCmd.FgsPersonArea fgsPersonArea : areaList) { for (ClosedAreaPersonApplyAuthCmd.FgsPersonArea fgsPersonArea : areaList) {
ClosedAreaFgsPersonAreaE closedAreaFgsPersonAreaE = new ClosedAreaFgsPersonAreaE(); ClosedAreaFgsPersonAreaE closedAreaFgsPersonAreaE = new ClosedAreaFgsPersonAreaE();
closedAreaFgsPersonAreaE.setClosedAreaId(fgsPersonArea.getClosedAreaId()); closedAreaFgsPersonAreaE.setClosedAreaId(fgsPersonArea.getClosedAreaId());
closedAreaFgsPersonAreaE.setClosedAreaName(fgsPersonArea.getClosedAreaName()); closedAreaFgsPersonAreaE.setClosedAreaName(fgsPersonArea.getClosedAreaName());
closedAreaFgsPersonAreaE.setFgsPersonAuthId(fgsPersonArea.getFgsPersonAuthId()); closedAreaFgsPersonAreaE.setFgsPersonAuthId(cmd.getUserId());
objects.add(closedAreaFgsPersonAreaE); objects.add(closedAreaFgsPersonAreaE);
} }
}
if (!objects.isEmpty()) {
areaFgsPersonAreaGateway.saveBatch(objects); areaFgsPersonAreaGateway.saveBatch(objects);
}
// 开启门禁权限时,查一级大华是否有已有权限,不覆盖 // 开启门禁权限时,查一级大华是否有已有权限,不覆盖
if (cmd.getMkmjPermission() != null && cmd.getMkmjPermission().equals(1)) { if (cmd.getMkmjPermission() != null && cmd.getMkmjPermission().equals(1)) {
// 获取人员身份证号 // 获取人员身份证号

View File

@ -62,5 +62,12 @@ public class ClosedAreaCarApplyQueryExe {
} }
return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex()); return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
} }
public PageResponse<ClosedAreaCarApplyCO> getCarByCarBelongType(ClosedAreaCarApplyPageQry qry) {
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
PageResponse<ClosedAreaCarApplyDO> pageResponse = closedAreaCarApplyRepository.getCarByCarBelongType(params);
List<ClosedAreaCarApplyCO> result = closedAreaCarApplyCoConvertor.converDOsToCOs(pageResponse.getData());
return PageResponse.of(result, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
}
} }

View File

@ -108,6 +108,7 @@ public class ClosedAreaPersonApplyQueryExe {
ClosedAreaFgsPersonAuthDO closedAreaFgsPersonAuthDO = closedAreaFgsPersonAuthRepository.getAuthorizationPersonInfo(id); ClosedAreaFgsPersonAuthDO closedAreaFgsPersonAuthDO = closedAreaFgsPersonAuthRepository.getAuthorizationPersonInfo(id);
QueryWrapper<ClosedAreaFgsPersonAreaDO> closedAreaFgsPersonAreaDOQueryWrapper = new QueryWrapper<>(); QueryWrapper<ClosedAreaFgsPersonAreaDO> closedAreaFgsPersonAreaDOQueryWrapper = new QueryWrapper<>();
closedAreaFgsPersonAreaDOQueryWrapper.eq("fgs_person_auth_id",id); closedAreaFgsPersonAreaDOQueryWrapper.eq("fgs_person_auth_id",id);
closedAreaFgsPersonAreaDOQueryWrapper.eq("delete_enum","FALSE");
List<ClosedAreaFgsPersonAreaDO> list = closedAreaFgsPersonAreaRepository.list(closedAreaFgsPersonAreaDOQueryWrapper); List<ClosedAreaFgsPersonAreaDO> list = closedAreaFgsPersonAreaRepository.list(closedAreaFgsPersonAreaDOQueryWrapper);
ClosedAreaPersonApplyCO closedAreaPersonApplyCO = new ClosedAreaPersonApplyCO(); ClosedAreaPersonApplyCO closedAreaPersonApplyCO = new ClosedAreaPersonApplyCO();
closedAreaPersonApplyCO.setApplyPersonUserId(id); closedAreaPersonApplyCO.setApplyPersonUserId(id);

View File

@ -44,6 +44,11 @@ public class ClosedAreaCarApplyServiceImpl implements ClosedAreaCarApplyServiceI
return closedAreaCarApplyQueryExe.execute(qry); return closedAreaCarApplyQueryExe.execute(qry);
} }
@Override
public PageResponse<ClosedAreaCarApplyCO> getCarByCarBelongType(ClosedAreaCarApplyPageQry qry) {
return closedAreaCarApplyQueryExe.getCarByCarBelongType(qry);
}
@Override @Override
public SingleResponse add(ClosedAreaCarApplyAddCmd cmd) { public SingleResponse add(ClosedAreaCarApplyAddCmd cmd) {

View File

@ -149,10 +149,14 @@ public class ClosedAreaServiceImpl implements ClosedAreaServiceI {
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
params.put("closedAreaId", qry.getClosedAreaId()); params.put("closedAreaId", qry.getClosedAreaId());
params.put("personName", qry.getPersonName()); params.put("personName", qry.getPersonName());
if (qry.getStartTime() != null) { params.put("deptId", qry.getDeptId());
params.put("startTime", qry.getStartTime()); params.put("personPhone", qry.getPersonPhone());
params.put("endTime", qry.getEndTime()); params.put("personIdCard", qry.getPersonIdCard());
if (qry.getTimeRange() != null && qry.getTimeRange().size() == 2) {
params.put("startTime", qry.getTimeRange().get(0));
params.put("endTime", qry.getTimeRange().get(1));
} }
params.put("doorName", qry.getDoorName());
params.put("pageIndex", qry.getPageIndex()); params.put("pageIndex", qry.getPageIndex());
params.put("pageSize", qry.getPageSize()); params.put("pageSize", qry.getPageSize());
params.put("offset", (qry.getPageIndex() - 1) * qry.getPageSize()); params.put("offset", (qry.getPageIndex() - 1) * qry.getPageSize());

View File

@ -18,6 +18,8 @@ public interface ClosedAreaCarApplyServiceI {
PageResponse<ClosedAreaCarApplyCO> listPage(ClosedAreaCarApplyPageQry qry); PageResponse<ClosedAreaCarApplyCO> listPage(ClosedAreaCarApplyPageQry qry);
PageResponse<ClosedAreaCarApplyCO> getCarByCarBelongType(ClosedAreaCarApplyPageQry qry);
SingleResponse<ClosedAreaCarApplyCO> add(ClosedAreaCarApplyAddCmd cmd); SingleResponse<ClosedAreaCarApplyCO> add(ClosedAreaCarApplyAddCmd cmd);
void edit(ClosedAreaCarApplyUpdateCmd cmd); void edit(ClosedAreaCarApplyUpdateCmd cmd);

View File

@ -24,8 +24,8 @@ public class ClosedAreaCarApplyPageQry extends PageQuery {
* - `le`: * - `le`:
* - `ne`: SQL!= * - `ne`: SQL!=
*/ */
@ApiModelProperty(value = "车牌号", name = "licenceLo") @ApiModelProperty(value = "车牌号", name = "licenceNo")
private String licenceLo; private String licenceNo;
@ApiModelProperty(value = "申请人姓名", name = "applyPersonUserName") @ApiModelProperty(value = "申请人姓名", name = "applyPersonUserName")
private String applyPersonUserName; private String applyPersonUserName;
@ApiModelProperty(value = "审核状态(1:审核中;2审核通过; 3审核驳回)", name = "auditFlag") @ApiModelProperty(value = "审核状态(1:审核中;2审核通过; 3审核驳回)", name = "auditFlag")

View File

@ -1,6 +1,7 @@
package com.zcloud.primeport.dto; package com.zcloud.primeport.dto;
import com.alibaba.cola.dto.PageQuery; import com.alibaba.cola.dto.PageQuery;
import com.fasterxml.jackson.annotation.JsonAlias;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -23,11 +24,23 @@ public class PersonInOutRecordQry extends PageQuery {
private Long closedAreaId; private Long closedAreaId;
@ApiModelProperty(value = "人员姓名(模糊查询)", name = "personName") @ApiModelProperty(value = "人员姓名(模糊查询)", name = "personName")
@JsonAlias("name")
private String personName; private String personName;
@ApiModelProperty(value = "开始时间格式yyyy-MM-dd", name = "startTime") @ApiModelProperty(value = "部门ID全局人员记录查询时由页面传入", name = "deptId")
private String startTime; private Long deptId;
@ApiModelProperty(value = "结束时间格式yyyy-MM-dd", name = "endTime") @ApiModelProperty(value = "人员手机号(可选,用于平台人员辅助校验;海康进出事件不提供该字段)", name = "personPhone")
private String endTime; @JsonAlias("phone")
private String personPhone;
@ApiModelProperty(value = "人员身份证号Base64可选与海康事件 certNo 关联,建议页面可传时一并传入)", name = "personIdCard")
@JsonAlias("userCard")
private String personIdCard;
@ApiModelProperty(value = "时间范围格式yyyy-MM-dd", name = "timeRange")
private List<String> timeRange;
@ApiModelProperty(value = "口门名称", name = "doorName")
private String doorName;
} }

View File

@ -52,7 +52,7 @@ public class HkAccessRecordDO extends BaseDO {
@ApiModelProperty(value = "门禁点所属区域编码", name = "doorRegionIndexCode") @ApiModelProperty(value = "门禁点所属区域编码", name = "doorRegionIndexCode")
private String doorRegionIndexCode; private String doorRegionIndexCode;
@ApiModelProperty(value = "进出方向1-进,0-出,-1-未知)", name = "enterOrExit", allowableValues = "1,0,-1") @ApiModelProperty(value = "进出方向1-进,2-出,-1-未知)", name = "enterOrExit", allowableValues = "1,2,-1")
private Integer enterOrExit; private Integer enterOrExit;
@ApiModelProperty(value = "开门结果1-成功0-失败)", name = "openResult", allowableValues = "0,1") @ApiModelProperty(value = "开门结果1-成功0-失败)", name = "openResult", allowableValues = "0,1")

View File

@ -28,14 +28,16 @@ public interface ClosedAreaCarApplyMapper extends BaseMapper<ClosedAreaCarApplyD
IPage<ClosedAreaCarApplyDO> listPage(Page<Map<String, Object>> page, @Param("params") Map<String, Object> params, String menuPerms); IPage<ClosedAreaCarApplyDO> listPage(Page<Map<String, Object>> page, @Param("params") Map<String, Object> params, String menuPerms);
IPage<ClosedAreaCarApplyDO> getCarByCarBelongType(Page<Map<String, Object>> page, @Param("params") Map<String, Object> params);
Integer countDashboardApproval(@Param("params") Map<String, Object> params); Integer countDashboardApproval(@Param("params") Map<String, Object> params);
IPage<ClosedAreaCarApplyDO> screenList(Page<Map<String, Object>> page, @Param("params") Map<String, Object> params); IPage<ClosedAreaCarApplyDO> screenList(Page<Map<String, Object>> page, @Param("params") Map<String, Object> params);
@InterceptorIgnore(tenantLine = "true") @InterceptorIgnore(tenantLine = "true")
List<TwoLevelCar> getFgsCarToDay(@Param("licenceNo") String licenceNo); List<TwoLevelCar> getFgsCarToDay(@Param("licenceNo") String licenceNo, @Param("applyId") Long applyId);
@InterceptorIgnore(tenantLine = "true") @InterceptorIgnore(tenantLine = "true")
List<TwoLevelCar> dockTmpCarLevelTwo(@Param("licenceNo") String licenceNo); List<TwoLevelCar> dockTmpCarLevelTwo(@Param("licenceNo") String licenceNo, @Param("applyId") Long applyId);
} }

View File

@ -17,12 +17,14 @@ import java.util.Map;
public interface ClosedAreaCarApplyRepository extends BaseRepository<ClosedAreaCarApplyDO> { public interface ClosedAreaCarApplyRepository extends BaseRepository<ClosedAreaCarApplyDO> {
PageResponse<ClosedAreaCarApplyDO> listPage(Map<String, Object> params); PageResponse<ClosedAreaCarApplyDO> listPage(Map<String, Object> params);
PageResponse<ClosedAreaCarApplyDO> getCarByCarBelongType(Map<String, Object> params);
Integer countDashboardApproval(Map<String, Object> params); Integer countDashboardApproval(Map<String, Object> params);
PageResponse<ClosedAreaCarApplyDO> screenList(Map<String, Object> params); PageResponse<ClosedAreaCarApplyDO> screenList(Map<String, Object> params);
List<TwoLevelCar> getFgsCarToDay(String licenceNo); List<TwoLevelCar> getFgsCarToDay(String licenceNo, Long applyId);
List<TwoLevelCar> dockTmpCarLevelTwo(String licenceNo); List<TwoLevelCar> dockTmpCarLevelTwo(String licenceNo, Long applyId);
} }

View File

@ -41,6 +41,15 @@ public class ClosedAreaCarApplyRepositoryImpl extends BaseRepositoryImpl<ClosedA
return PageHelper.pageToResponse(result, result.getRecords()); return PageHelper.pageToResponse(result, result.getRecords());
} }
@Override
public PageResponse<ClosedAreaCarApplyDO> getCarByCarBelongType(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<ClosedAreaCarApplyDO> result = closedAreaCarApplyMapper.getCarByCarBelongType(page, params);
return PageHelper.pageToResponse(result, result.getRecords());
}
@Override @Override
public Integer countDashboardApproval(Map<String, Object> params) { public Integer countDashboardApproval(Map<String, Object> params) {
return closedAreaCarApplyMapper.countDashboardApproval(params); return closedAreaCarApplyMapper.countDashboardApproval(params);
@ -56,13 +65,13 @@ public class ClosedAreaCarApplyRepositoryImpl extends BaseRepositoryImpl<ClosedA
} }
@Override @Override
public List<TwoLevelCar> getFgsCarToDay(String licenceNo) { public List<TwoLevelCar> getFgsCarToDay(String licenceNo, Long applyId) {
return closedAreaCarApplyMapper.getFgsCarToDay(licenceNo); return closedAreaCarApplyMapper.getFgsCarToDay(licenceNo, applyId);
} }
@Override @Override
public List<TwoLevelCar> dockTmpCarLevelTwo(String licenceNo) { public List<TwoLevelCar> dockTmpCarLevelTwo(String licenceNo, Long applyId) {
return closedAreaCarApplyMapper.dockTmpCarLevelTwo(licenceNo); return closedAreaCarApplyMapper.dockTmpCarLevelTwo(licenceNo, applyId);
} }
} }

View File

@ -50,6 +50,34 @@
</if> </if>
order by c.id desc order by c.id desc
</select> </select>
<select id="getCarByCarBelongType" resultType="com.zcloud.primeport.persistence.dataobject.ClosedAreaCarApplyDO">
SELECT
c.*
FROM
closed_area_car_apply c
INNER JOIN (
SELECT
licence_no,
MAX(id) id
FROM
closed_area_car_apply
WHERE
delete_enum = 'FALSE'
AND audit_flag = 2
<if test="params.carBelongType != null">
AND car_belong_type = #{params.carBelongType}
</if>
<if test="params.licenceNo != null and params.licenceNo != ''">
AND licence_no LIKE CONCAT('%', #{params.licenceNo}, '%')
</if>
GROUP BY
licence_no
) latest ON c.id = latest.id
WHERE
c.delete_enum = 'FALSE'
ORDER BY
c.id DESC
</select>
<select id="screenList" resultType="com.zcloud.primeport.persistence.dataobject.ClosedAreaCarApplyDO"> <select id="screenList" resultType="com.zcloud.primeport.persistence.dataobject.ClosedAreaCarApplyDO">
select c.*, c.apply_person_user_name apply_user_name select c.*, c.apply_person_user_name apply_user_name
from closed_area_car_apply c from closed_area_car_apply c
@ -79,10 +107,13 @@
</select> </select>
<select id="getFgsCarToDay" resultType="com.zcloud.primeport.plan.mjDevice.dto.TwoLevelCar"> <select id="getFgsCarToDay" resultType="com.zcloud.primeport.plan.mjDevice.dto.TwoLevelCar">
SELECT SELECT
caca.id,
caca.licence_no, caca.licence_no,
GROUP_CONCAT( DISTINCT caca.licence_type ) licence_type, GROUP_CONCAT( DISTINCT caca.licence_type ) licence_type,
GROUP_CONCAT( DISTINCT mg.hk_index_code ) hk_index_code, GROUP_CONCAT( DISTINCT mg.hk_index_code ) hk_index_code,
mg.kh_park_sys_code mg.kh_park_sys_code,
caca.visit_start_time,
caca.visit_end_time
FROM FROM
closed_area_car_apply caca closed_area_car_apply caca
INNER JOIN mkmj m ON caca.closed_area_id = m.closed_area_id INNER JOIN mkmj m ON caca.closed_area_id = m.closed_area_id
@ -90,8 +121,9 @@
WHERE WHERE
caca.delete_enum = 'FALSE' caca.delete_enum = 'FALSE'
AND caca.car_belong_type IN ( 1, 2, 3, 5 ) AND caca.car_belong_type IN ( 1, 2, 3, 5 )
AND caca.visit_end_time &gt;= DATE_FORMAT( now(), '%Y-%m-%d' ) AND caca.expired_expiration = '2'
AND caca.visit_start_time &lt;= DATE_FORMAT( now(), '%Y-%m-%d' ) AND DATE(caca.visit_end_time) &gt;= DATE(UTC_TIMESTAMP() + INTERVAL 8 HOUR)
AND DATE(caca.visit_start_time) &lt;= DATE(UTC_TIMESTAMP() + INTERVAL 8 HOUR)
AND caca.audit_flag = 2 AND caca.audit_flag = 2
AND m.delete_enum = 'FALSE' AND m.delete_enum = 'FALSE'
AND m.mkmj_status = 2 AND m.mkmj_status = 2
@ -105,25 +137,35 @@
<if test="licenceNo != null and licenceNo != ''"> <if test="licenceNo != null and licenceNo != ''">
AND caca.licence_no = #{licenceNo} AND caca.licence_no = #{licenceNo}
</if> </if>
<if test="applyId != null">
AND caca.id = #{applyId}
</if>
GROUP BY GROUP BY
caca.id,
caca.licence_no, caca.licence_no,
mg.kh_park_sys_code mg.kh_park_sys_code,
caca.visit_start_time,
caca.visit_end_time
</select> </select>
<select id="dockTmpCarLevelTwo" resultType="com.zcloud.primeport.plan.mjDevice.dto.TwoLevelCar"> <select id="dockTmpCarLevelTwo" resultType="com.zcloud.primeport.plan.mjDevice.dto.TwoLevelCar">
SELECT SELECT
caca.id,
caca.licence_no, caca.licence_no,
GROUP_CONCAT( DISTINCT caca.licence_type ) licence_type, GROUP_CONCAT( DISTINCT caca.licence_type ) licence_type,
caca.level_two_mkmj_id, caca.level_two_mkmj_id,
GROUP_CONCAT( DISTINCT mg.hk_index_code ) hk_index_code, GROUP_CONCAT( DISTINCT mg.hk_index_code ) hk_index_code,
mg.kh_park_sys_code mg.kh_park_sys_code,
caca.visit_start_time,
caca.visit_end_time
FROM FROM
closed_area_car_apply caca closed_area_car_apply caca
INNER JOIN mkmj_gate mg ON caca.level_two_mkmj_id = mg.mkmj_id INNER JOIN mkmj_gate mg ON caca.level_two_mkmj_id = mg.mkmj_id
WHERE WHERE
caca.delete_enum = 'FALSE' caca.delete_enum = 'FALSE'
AND caca.car_belong_type = 4 AND caca.car_belong_type = 4
AND caca.visit_end_time &gt;= DATE_FORMAT( now(), '%Y-%m-%d' ) AND caca.expired_expiration = '2'
AND caca.visit_start_time &lt;= DATE_FORMAT( now(), '%Y-%m-%d' ) AND DATE(caca.visit_end_time) &gt;= CURDATE()
AND DATE(caca.visit_start_time) &lt;= CURDATE()
AND caca.audit_flag = 2 AND caca.audit_flag = 2
AND mg.gate_type = 'HGKM_MKMJ_GATE_TYPE_CAR' AND mg.gate_type = 'HGKM_MKMJ_GATE_TYPE_CAR'
AND mg.gate_status = 2 AND mg.gate_status = 2
@ -133,11 +175,16 @@
<if test="licenceNo != null and licenceNo != ''"> <if test="licenceNo != null and licenceNo != ''">
AND caca.licence_no = #{licenceNo} AND caca.licence_no = #{licenceNo}
</if> </if>
<if test="applyId != null">
AND caca.id = #{applyId}
</if>
GROUP BY GROUP BY
caca.id,
caca.licence_no, caca.licence_no,
caca.level_two_mkmj_id, caca.level_two_mkmj_id,
mg.kh_park_sys_code mg.kh_park_sys_code,
caca.visit_start_time,
caca.visit_end_time
</select> </select>
</mapper> </mapper>

View File

@ -108,22 +108,144 @@
c.id c.id
</select> </select>
<!-- 近七天封闭区域现存人员、车辆:按同一区域同一身份最后一条进出记录判断,最后为进才计入 -->
<select id="listPositionCount" resultType="com.zcloud.primeport.persistence.dataobject.ClosedAreaCountDO"> <select id="listPositionCount" resultType="com.zcloud.primeport.persistence.dataobject.ClosedAreaCountDO">
WITH RECURSIVE area_tree AS (
SELECT id AS ancestor_area_id, id AS area_id
FROM closed_area
WHERE delete_enum = 'FALSE'
UNION ALL
SELECT area_tree.ancestor_area_id, child.id AS area_id
FROM area_tree
INNER JOIN closed_area child ON child.parent_id = area_tree.area_id
AND child.delete_enum = 'FALSE'
),
person_event_area AS (
SELECT DISTINCT
m.closed_area_id,
har.id,
har.person_id,
har.enter_or_exit,
har.event_time
FROM hk_access_record har
INNER JOIN mkmj_gate mg ON har.door_index_code = mg.hk_index_code
AND mg.delete_enum = 'FALSE'
INNER JOIN mkmj m ON mg.mkmj_id = m.id
AND m.delete_enum = 'FALSE'
WHERE har.delete_enum = 'FALSE'
AND har.person_id IS NOT NULL
AND har.person_id != ''
AND har.enter_or_exit IN (1, 2)
AND har.event_time &gt;= DATE_SUB(UTC_TIMESTAMP() + INTERVAL 8 HOUR, INTERVAL 7 DAY)
),
person_last_record AS (
SELECT
person_event_area.closed_area_id,
person_event_area.person_id,
person_event_area.enter_or_exit,
ROW_NUMBER() OVER (
PARTITION BY person_event_area.person_id
ORDER BY person_event_area.event_time DESC, person_event_area.id DESC
) AS row_num
FROM person_event_area
),
unique_park_area AS (
SELECT
mg.kh_park_sys_code,
MAX(m.closed_area_id) AS closed_area_id
FROM mkmj_gate mg
INNER JOIN mkmj m ON mg.mkmj_id = m.id
AND m.delete_enum = 'FALSE'
WHERE mg.delete_enum = 'FALSE'
AND mg.kh_park_sys_code IS NOT NULL
AND mg.kh_park_sys_code != ''
GROUP BY mg.kh_park_sys_code
HAVING COUNT(DISTINCT m.closed_area_id) = 1
),
vehicle_event_area AS (
SELECT DISTINCT
m.closed_area_id,
hvar.id,
hvar.plate_no,
hvar.enter_or_exit,
hvar.event_time
FROM hk_vehicle_access_record hvar
INNER JOIN mkmj_gate mg ON hvar.lane_index_code = mg.hk_index_code
AND mg.delete_enum = 'FALSE'
INNER JOIN mkmj m ON mg.mkmj_id = m.id
AND m.delete_enum = 'FALSE'
WHERE hvar.delete_enum = 'FALSE'
AND hvar.plate_no IS NOT NULL
AND hvar.plate_no != ''
AND hvar.enter_or_exit IN (0, 1)
AND hvar.event_time &gt;= DATE_SUB(UTC_TIMESTAMP() + INTERVAL 8 HOUR, INTERVAL 7 DAY)
UNION ALL
SELECT
unique_park_area.closed_area_id,
hvar.id,
hvar.plate_no,
hvar.enter_or_exit,
hvar.event_time
FROM hk_vehicle_access_record hvar
INNER JOIN unique_park_area ON hvar.park_syscode = unique_park_area.kh_park_sys_code
WHERE hvar.delete_enum = 'FALSE'
AND hvar.plate_no IS NOT NULL
AND hvar.plate_no != ''
AND hvar.enter_or_exit IN (0, 1)
AND hvar.event_time &gt;= DATE_SUB(UTC_TIMESTAMP() + INTERVAL 8 HOUR, INTERVAL 7 DAY)
AND NOT EXISTS (
SELECT 1
FROM mkmj_gate lane_gate
WHERE lane_gate.hk_index_code = hvar.lane_index_code
AND lane_gate.delete_enum = 'FALSE'
)
),
vehicle_last_record AS (
SELECT
vehicle_event_area.closed_area_id,
vehicle_event_area.plate_no,
vehicle_event_area.enter_or_exit,
ROW_NUMBER() OVER (
PARTITION BY vehicle_event_area.plate_no
ORDER BY vehicle_event_area.event_time DESC, vehicle_event_area.id DESC
) AS row_num
FROM vehicle_event_area
),
person_current_count AS (
SELECT
area_tree.ancestor_area_id AS closed_area_id,
COUNT(*) AS person_count
FROM person_last_record
INNER JOIN area_tree ON area_tree.area_id = person_last_record.closed_area_id
WHERE person_last_record.row_num = 1
AND person_last_record.enter_or_exit = 1
GROUP BY area_tree.ancestor_area_id
),
vehicle_current_count AS (
SELECT
area_tree.ancestor_area_id AS closed_area_id,
COUNT(*) AS car_count
FROM vehicle_last_record
INNER JOIN area_tree ON area_tree.area_id = vehicle_last_record.closed_area_id
WHERE vehicle_last_record.row_num = 1
AND vehicle_last_record.enter_or_exit = 0
GROUP BY area_tree.ancestor_area_id
)
SELECT SELECT
c.*, c.*,
CASE WHEN child_cnt > 0 THEN 1 ELSE 2 END AS has_child, CASE WHEN child_cnt &gt; 0 THEN 1 ELSE 2 END AS has_child,
0 AS person_count, COALESCE(person_current_count.person_count, 0) AS person_count,
0 AS car_count COALESCE(vehicle_current_count.car_count, 0) AS car_count
FROM FROM closed_area c
closed_area c
LEFT JOIN ( LEFT JOIN (
SELECT parent_id, COUNT(id) child_cnt SELECT parent_id, COUNT(id) child_cnt
FROM closed_area FROM closed_area
WHERE delete_enum = 'FALSE' WHERE delete_enum = 'FALSE'
GROUP BY parent_id GROUP BY parent_id
) child ON c.id = child.parent_id ) child ON c.id = child.parent_id
WHERE LEFT JOIN person_current_count ON c.id = person_current_count.closed_area_id
c.delete_enum = 'FALSE' LEFT JOIN vehicle_current_count ON c.id = vehicle_current_count.closed_area_id
WHERE c.delete_enum = 'FALSE'
<if test="params.corpId != null"> <if test="params.corpId != null">
AND c.jurisdictional_corp_id = #{params.corpId} AND c.jurisdictional_corp_id = #{params.corpId}
</if> </if>
@ -131,12 +253,9 @@
AND c.parent_id = #{params.parentId} AND c.parent_id = #{params.parentId}
</if> </if>
<if test="params.closedAreaName != null and params.closedAreaName != ''"> <if test="params.closedAreaName != null and params.closedAreaName != ''">
AND C.closed_area_name LIKE CONCAT('%', #{params.closedAreaName}, '%') AND c.closed_area_name LIKE CONCAT('%', #{params.closedAreaName}, '%')
</if> </if>
GROUP BY ORDER BY c.id
c.id
ORDER BY
c.id
</select> </select>
<select id="corpStat" resultType="com.zcloud.primeport.persistence.dataobject.ClosedAreaCorpStatDO"> <select id="corpStat" resultType="com.zcloud.primeport.persistence.dataobject.ClosedAreaCorpStatDO">
@ -154,7 +273,19 @@
</select> </select>
<!-- 封闭区域人员进出记录(含子区域递归查询) --> <!-- 封闭区域人员进出记录(含子区域递归查询) -->
<sql id="personInOutTimeFilters">
<if test="params.startTime != null and params.startTime != ''">
AND har.event_time &gt;= CONCAT(#{params.startTime}, ' 00:00:00')
</if>
<if test="params.endTime != null and params.endTime != ''">
AND har.event_time &lt;= CONCAT(#{params.endTime}, ' 23:59:59')
</if>
</sql>
<!-- 全部封闭区域人员进出记录:通过平台人员身份证与海康事件证件号关联 -->
<sql id="personInOutBaseQuery"> <sql id="personInOutBaseQuery">
<choose>
<when test="params.closedAreaId != null">
WITH RECURSIVE area_tree AS ( WITH RECURSIVE area_tree AS (
SELECT id FROM closed_area WHERE id = #{params.closedAreaId} AND delete_enum = 'FALSE' SELECT id FROM closed_area WHERE id = #{params.closedAreaId} AND delete_enum = 'FALSE'
UNION ALL UNION ALL
@ -169,14 +300,46 @@
<if test="params.personName != null and params.personName != ''"> <if test="params.personName != null and params.personName != ''">
AND har.person_name LIKE CONCAT('%', #{params.personName}, '%') AND har.person_name LIKE CONCAT('%', #{params.personName}, '%')
</if> </if>
<include refid="personInOutTimeFilters"/>
</when>
<otherwise>
SELECT har.*
FROM hk_access_record har
INNER JOIN `user` u ON u.user_id_card = har.certificate_no AND u.delete_enum = 'FALSE'
WHERE har.delete_enum = 'FALSE'
<choose>
<when test="params.deptId != null and ((params.personName != null and params.personName != '') or (params.personPhone != null and params.personPhone != '') or (params.personIdCard != null and params.personIdCard != ''))">
AND u.department_id = #{params.deptId}
</when>
<when test="params.personIdCard != null and params.personIdCard != ''">
AND u.user_id_card = #{params.personIdCard}
</when>
<otherwise>
AND 1 = 0
</otherwise>
</choose>
<if test="params.personName != null and params.personName != ''">
AND u.`name` LIKE CONCAT('%', #{params.personName}, '%')
</if>
<if test="params.personPhone != null and params.personPhone != ''">
AND u.phone = #{params.personPhone}
</if>
<if test="params.personIdCard != null and params.personIdCard != ''">
AND u.user_id_card = #{params.personIdCard}
</if>
<if test="params.startTime != null and params.startTime != ''"> <if test="params.startTime != null and params.startTime != ''">
AND har.event_time &gt;= CONCAT(#{params.startTime}, ' 00:00:00') AND har.event_time &gt;= CONCAT(#{params.startTime}, ' 00:00:00')
</if> </if>
<if test="params.endTime != null and params.endTime != ''"> <if test="params.endTime != null and params.endTime != ''">
AND har.event_time &lt;= CONCAT(#{params.endTime}, ' 23:59:59') AND har.event_time &lt;= CONCAT(#{params.endTime}, ' 23:59:59')
</if> </if>
<if test="params.doorName != null and params.doorName != ''">
AND har.door_name LIKE CONCAT('%', #{params.doorName}, '%')
</if>
<include refid="personInOutTimeFilters"/>
</otherwise>
</choose>
</sql> </sql>
<select id="listPersonInOutRecord" resultType="com.zcloud.primeport.persistence.dataobject.HkAccessRecordDO"> <select id="listPersonInOutRecord" resultType="com.zcloud.primeport.persistence.dataobject.HkAccessRecordDO">
<include refid="personInOutBaseQuery"/> <include refid="personInOutBaseQuery"/>
ORDER BY har.event_time DESC ORDER BY har.event_time DESC

View File

@ -155,6 +155,8 @@
SELECT SELECT
capa.id, capa.id,
capa.closed_area_id, capa.closed_area_id,
ca.jurisdictional_corp_id,
ca.jurisdictional_corp_name,
GROUP_CONCAT( DISTINCT mg.hk_index_code ) hk_index_code, GROUP_CONCAT( DISTINCT mg.hk_index_code ) hk_index_code,
capa.visit_start_time, capa.visit_start_time,
capa.visit_end_time, capa.visit_end_time,
@ -165,14 +167,15 @@
capa.entourage capa.entourage
FROM FROM
closed_area_person_apply capa closed_area_person_apply capa
INNER JOIN closed_area ca ON capa.closed_area_id = ca.id AND ca.delete_enum = 'FALSE'
INNER JOIN mkmj m ON capa.closed_area_id = m.closed_area_id INNER JOIN mkmj m ON capa.closed_area_id = m.closed_area_id
INNER JOIN mkmj_gate mg ON m.id = mg.mkmj_id INNER JOIN mkmj_gate mg ON m.id = mg.mkmj_id
WHERE WHERE
capa.delete_enum = 'FALSE' capa.delete_enum = 'FALSE'
AND capa.audit_flag = 2 AND capa.audit_flag = 2
AND capa.person_belong_type IN ( 1, 2, 3 ) AND capa.person_belong_type IN ( 1, 2, 3 )
AND capa.visit_end_time &gt;= DATE_FORMAT( now(), '%Y-%m-%d' ) AND DATE(capa.visit_end_time) &gt;= DATE(UTC_TIMESTAMP() + INTERVAL 8 HOUR)
AND capa.visit_start_time &lt;= DATE_FORMAT( now(), '%Y-%m-%d' ) AND DATE(capa.visit_start_time) &lt;= DATE(UTC_TIMESTAMP() + INTERVAL 8 HOUR)
AND m.delete_enum = 'FALSE' AND m.delete_enum = 'FALSE'
AND m.mkmj_status = 2 AND m.mkmj_status = 2
AND m.mkmj_level = 2 AND m.mkmj_level = 2
@ -189,6 +192,8 @@
<select id="getDockAuthTmpInfoById" resultType="com.zcloud.primeport.plan.mjDevice.dto.TwoLevelUser"> <select id="getDockAuthTmpInfoById" resultType="com.zcloud.primeport.plan.mjDevice.dto.TwoLevelUser">
SELECT SELECT
capa.id, capa.id,
ca.jurisdictional_corp_id,
ca.jurisdictional_corp_name,
GROUP_CONCAT( DISTINCT mg.hk_index_code ) hk_index_code, GROUP_CONCAT( DISTINCT mg.hk_index_code ) hk_index_code,
capa.visit_start_time, capa.visit_start_time,
capa.visit_end_time, capa.visit_end_time,
@ -198,6 +203,8 @@
capa.apply_person_user_name user_name capa.apply_person_user_name user_name
FROM FROM
closed_area_person_apply capa closed_area_person_apply capa
INNER JOIN closed_area ca ON capa.closed_area_id = ca.id AND ca.delete_enum = 'FALSE'
LEFT JOIN mkmj_gate mg ON capa.level_two_mkmj_id = mg.mkmj_id LEFT JOIN mkmj_gate mg ON capa.level_two_mkmj_id = mg.mkmj_id
AND mg.delete_enum = 'FALSE' AND mg.delete_enum = 'FALSE'
AND mg.gate_type = 'HGKM_MKMJ_GATE_TYPE_PERSON' AND mg.gate_type = 'HGKM_MKMJ_GATE_TYPE_PERSON'
@ -206,8 +213,8 @@
capa.delete_enum = 'FALSE' capa.delete_enum = 'FALSE'
AND capa.person_belong_type = 4 AND capa.person_belong_type = 4
AND capa.audit_flag = 2 AND capa.audit_flag = 2
AND capa.visit_end_time &gt;= DATE_FORMAT( now(), '%Y-%m-%d' ) AND DATE(capa.visit_end_time) &gt;= DATE(UTC_TIMESTAMP() + INTERVAL 8 HOUR)
AND capa.visit_start_time &lt;= DATE_FORMAT( now(), '%Y-%m-%d' ) AND DATE(capa.visit_start_time) &lt;= DATE(UTC_TIMESTAMP() + INTERVAL 8 HOUR)
<if test="applyId != null"> <if test="applyId != null">
and capa.id = #{applyId} and capa.id = #{applyId}
</if> </if>