feat: 同步门禁权限到一级系统

koumen
lishiwei 2026-05-11 14:10:56 +08:00
parent b3dffc6577
commit 74a55d82b2
4 changed files with 129 additions and 25 deletions

View File

@ -8,6 +8,7 @@ import com.zcloud.primeport.domain.gateway.ClosedAreaCarApplyGateway;
import com.zcloud.primeport.domain.model.ClosedAreaCarApplyE;
import com.zcloud.primeport.dto.ClosedAreaCarApplyAuditCmd;
import com.zcloud.primeport.dto.ClosedAreaCarApplyUpdateCmd;
import com.zcloud.primeport.plan.mjDevice.TwoCarUtil;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
@ -27,6 +28,7 @@ import java.util.Date;
public class ClosedAreaCarApplyUpdateExe {
private final ClosedAreaCarApplyGateway closedAreaCarApplyGateway;
private final TodoListEventPusherUtil todoListEventPusherUtil;
private final TwoCarUtil twoCarUtil;
@Transactional(rollbackFor = Exception.class)
public void execute(ClosedAreaCarApplyUpdateCmd closedAreaCarApplyUpdateCmd) {
@ -50,6 +52,11 @@ public class ClosedAreaCarApplyUpdateExe {
TodoListCompleteEvent todoListCompleteEvent = new TodoListCompleteEvent();
todoListCompleteEvent.setForeignSubsidiaryKey(auditCmd.getId());
todoListEventPusherUtil.sendMessageCompleteEvent(todoListCompleteEvent);
// 审批通过 → 同步门禁权限(二级海康 + 一级车行)
// 根据carBelongType判断车辆类型内部车不走临时接口不覆盖一级原有权限
if (auditCmd.getAuditFlag().equals(2)) {
twoCarUtil.levelTwoCarCompanyByApplyId(auditCmd.getId());
}
}
}

View File

@ -1,9 +1,13 @@
package com.zcloud.primeport.command;
import com.alibaba.cola.dto.SingleResponse;
import com.alibaba.cola.exception.BizException;
import com.zcloud.gbscommon.todolistmq.TodoListEventPusherUtil;
import com.zcloud.gbscommon.todolistmq.event.TodoListCompleteEvent;
import com.zcloud.gbscommon.utils.DateUtil;
import com.zcloud.gbscommon.utils.Tools;
import com.zcloud.gbscommon.zclouduser.facade.ZcloudUserFacade;
import com.zcloud.gbscommon.zclouduser.response.ZcloudUserCo;
import com.zcloud.primeport.domain.gateway.ClosedAreaFgsPersonAreaGateway;
import com.zcloud.primeport.domain.gateway.ClosedAreaFgsPersonAuthGateway;
import com.zcloud.primeport.domain.gateway.ClosedAreaPersonApplyGateway;
@ -13,12 +17,16 @@ import com.zcloud.primeport.domain.model.ClosedAreaPersonApplyE;
import com.zcloud.primeport.dto.ClosedAreaPersonApplyAuditCmd;
import com.zcloud.primeport.dto.ClosedAreaPersonApplyAuthCmd;
import com.zcloud.primeport.dto.ClosedAreaPersonApplyUpdateCmd;
import com.zcloud.primeport.plan.mjDevice.OnePersonUtil;
import com.zcloud.primeport.plan.mjDevice.TwoPersonUtil;
import lombok.AllArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
@ -36,6 +44,11 @@ public class ClosedAreaPersonApplyUpdateExe {
private final ClosedAreaFgsPersonAuthGateway areaFgsPersonAuthGateway;
private final ClosedAreaFgsPersonAreaGateway areaFgsPersonAreaGateway;
private final TodoListEventPusherUtil todoListEventPusherUtil;
private final TwoPersonUtil twoPersonUtil;
private final OnePersonUtil onePersonUtil;
@DubboReference
private ZcloudUserFacade zcloudUserFacade;
@Transactional(rollbackFor = Exception.class)
public void execute(ClosedAreaPersonApplyUpdateCmd closedAreaPersonApplyUpdateCmd) {
@ -58,9 +71,10 @@ public class ClosedAreaPersonApplyUpdateExe {
TodoListCompleteEvent todoListCompleteEvent = new TodoListCompleteEvent();
todoListCompleteEvent.setForeignSubsidiaryKey(auditCmd.getId());
todoListEventPusherUtil.sendMessageCompleteEvent(todoListCompleteEvent);
// 审批通过赋予权限
// 审批通过 → 同步门禁权限(二级海康 + 一级大华)
// 内部会先查大华系统判断是否已有权限,不覆盖原有权限
if (auditCmd.getAuditFlag().equals(2)) {
twoPersonUtil.levelTwoPeopleCompanyByApplyId(auditCmd.getId());
}
@ -86,6 +100,36 @@ public class ClosedAreaPersonApplyUpdateExe {
objects.add(closedAreaFgsPersonAreaE);
}
areaFgsPersonAreaGateway.saveBatch(objects);
// 开启门禁权限时,查一级大华是否有已有权限,不覆盖
if (cmd.getMkmjPermission() != null && cmd.getMkmjPermission().equals(1)) {
// 获取人员身份证号
SingleResponse<ZcloudUserCo> userInfo = zcloudUserFacade.getInfoByUserId(cmd.getUserId());
if (userInfo != null && userInfo.getData() != null) {
String userCard = userInfo.getData().getUserIdCard();
String userName = userInfo.getData().getName();
String userFaceUrl = userInfo.getData().getUserAvatarUrl();
if (Tools.notEmpty(userCard)) {
// 查询一级门禁(大华)是否已有权限
try {
cn.hutool.json.JSONArray dahuaUsers = onePersonUtil.getMkmjUserInfoByUserCard(Collections.singletonList(userCard));
if (dahuaUsers == null || dahuaUsers.isEmpty()) {
// 大华没有该用户 → 新增(有效期按每日任务刷新)
onePersonUtil.dockLongTermUserByUserCardAndFaceImg(
userCard,
"hbqa" + userCard,
userName,
userFaceUrl,
DateUtil.date2Str(new Date(), "yyyy-MM-dd") + " 00:00:00",
DateUtil.date2Str(new Date(), "yyyy-MM-dd") + " 23:59:59"
);
}
// 已有大华权限 → 保留,不覆盖
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
}
}

View File

@ -46,30 +46,36 @@ public class TwoCarUtil {
/**
* id
*
*
* () + ()
* /
*/
public void levelTwoCarCompanyByApplyId(Long applyId) {
if (!dockFlag.equals(1)) return;
ClosedAreaCarApplyDO byId = closedAreaCarApplyRepository.getById(applyId);
if (byId.getCarBelongType().equals(4)) {
Integer carBelongType = byId.getCarBelongType();
// 二级门禁(海康)同步 — 所有类型都需要
if (carBelongType.equals(4)) {
dockTmpCarLevelTwo(byId.getLicenceNo());
}else {
} else {
dockFgsCarLevelTwo(byId.getLicenceNo());
}
OneLevelCarSaveDto oneLevelCarSaveDto = new OneLevelCarSaveDto();
oneLevelCarSaveDto.setTruckNo(byId.getLicenceNo());
oneLevelCarSaveDto.setTruckCardColor(byId.getLicenceType());
oneLevelCarSaveDto.setTruckTypCod(CarEnum.getMenuKeyByPath(byId.getVehicleType()));
// todo 待确定到底是东港还是西港
oneLevelCarSaveDto.setPortId("0");
oneLevelCarSaveDto.setDriverNam(byId.getDrivingUserName());
oneLevelCarSaveDto.setLinkTel(byId.getUserPhone());
oneLevelCarSaveDto.setValidDte(DateUtil.date2Str(new Date(),"yyyy-MM-dd"));
oneLevelCarSaveDto.setRecTim(DateUtil.date2Str(new Date()));
oneLevelCarSaveDto.setYqlCheckFlag("1");
oneLevelCarSaveDto.setIsNeedCheck("0");
tmpVehicleSave(oneLevelCarSaveDto);
// 一级门禁(车行系统)同步 — 仅临时/相关方车需要开通一级临时权限
// 内部车(1股份/2分公司/5分公司内部)已有独立的一级权限管理,不操作避免覆盖
if (carBelongType.equals(3) || carBelongType.equals(4)) {
OneLevelCarSaveDto oneLevelCarSaveDto = new OneLevelCarSaveDto();
oneLevelCarSaveDto.setTruckNo(byId.getLicenceNo());
oneLevelCarSaveDto.setTruckCardColor(byId.getLicenceType());
oneLevelCarSaveDto.setTruckTypCod(CarEnum.getMenuKeyByPath(byId.getVehicleType()));
// todo 待确定到底是东港还是西港
oneLevelCarSaveDto.setPortId("0");
oneLevelCarSaveDto.setDriverNam(byId.getDrivingUserName());
oneLevelCarSaveDto.setLinkTel(byId.getUserPhone());
oneLevelCarSaveDto.setValidDte(DateUtil.date2Str(new Date(),"yyyy-MM-dd"));
oneLevelCarSaveDto.setRecTim(DateUtil.date2Str(new Date()));
oneLevelCarSaveDto.setYqlCheckFlag("1");
oneLevelCarSaveDto.setIsNeedCheck("0");
tmpVehicleSave(oneLevelCarSaveDto);
}
}
// 对接一级口门车辆

File diff suppressed because one or more lines are too long