feat:临时访客一级口门申请

koumen
dearLin 2026-04-20 14:34:37 +08:00
parent 6e331ede6f
commit 94dffef375
11 changed files with 234 additions and 26 deletions

View File

@ -31,7 +31,6 @@ import java.util.Date;
public class PersonApplyUpdateExe {
private final PersonApplyGateway personApplyGateway;
private final XgfApplyPersonGateway xgfApplyPersonGateway;
private final MkmjGateGateway mkmjGateGateway;
@Transactional(rollbackFor = Exception.class)
public void execute(PersonApplyUpdateCmd personApplyUpdateCmd) {

View File

@ -15,6 +15,7 @@ import com.zcloud.primeport.dto.clientobject.PersonCountCO;
import com.zcloud.primeport.dto.clientobject.XgfPersonApplyCO;
import com.zcloud.primeport.dto.clientobject.XgfPersonCountCO;
import com.zcloud.primeport.plan.mjDevice.OnePersonUtil;
import jodd.util.Base64;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@ -101,16 +102,16 @@ public class PersonApplyServiceImpl implements PersonApplyServiceI {
// 开启门禁
if (co != null) {
personApplyUpdateExe.authorization(co.getId(), co.getXgfApplyPersonId(), cmd.getMkmjPermission(), cmd.getGateLevelAuthArea());
onePersonUtil.expirationDateRefreshedUserCard(co.getUserCard(), DateUtil.date2Str(new Date()), "2030-12-31 23:59:59");
onePersonUtil.expirationDateRefreshedUserCard(Base64.decodeToString(co.getUserCard()), DateUtil.date2Str(new Date()), "2030-12-31 23:59:59");
} else {
personApplyAddExe.authorization(cmd);
onePersonUtil.dockLongTermUserByUserCardAndFaceImg(co.getUserCard(), co.getUserUid(), co.getEmployeePersonUserName(), co.getUserFaceUrl(), DateUtil.date2Str(new Date()), "2030-12-31 23:59:59");
onePersonUtil.dockLongTermUserByUserCardAndFaceImg(Base64.decodeToString(co.getUserCard()), "hbqa"+Base64.decodeToString(co.getUserCard()), co.getEmployeePersonUserName(), co.getUserFaceUrl(), DateUtil.date2Str(new Date()), "2030-12-31 23:59:59");
}
} else {
// 关闭门禁,这个人都没有授权过的话,什么都不管。
if (co != null) {
personApplyUpdateExe.authorization(co.getId(), co.getXgfApplyPersonId(), cmd.getMkmjPermission(), cmd.getGateLevelAuthArea());
onePersonUtil.freezeByUserCard(co.getUserCard(), cmd.getMkmjPermission());
onePersonUtil.freezeByUserCard(Base64.decodeToString(co.getUserCard()), cmd.getMkmjPermission());
}
}
}

View File

@ -33,7 +33,7 @@ public interface PersonApplyGateway {
void saveBatch(ArrayList<PersonApplyE> personApplyES);
void xgfPersonAudit(XgfApplyPersonE build);
void xgfPersonAudit(XgfApplyPersonE build) throws Exception;
List<PersonApplyE> personListByxgfApplyPersonId(Long id);
}

View File

@ -1,10 +1,13 @@
package com.zcloud.primeport.gatewayimpl;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.zcloud.gbscommon.todolistmq.TodoListEventPusherUtil;
import com.zcloud.gbscommon.todolistmq.event.TodoListAddEvent;
import com.zcloud.gbscommon.todolistmq.event.TodoListCompleteEvent;
import com.zcloud.gbscommon.utils.DateUtil;
import com.zcloud.primeport.domain.gateway.PersonApplyGateway;
import com.zcloud.primeport.domain.model.PersonApplyE;
import com.zcloud.primeport.domain.model.XgfApplyPersonE;
@ -14,13 +17,14 @@ import com.zcloud.primeport.persistence.dataobject.XgfApplyPersonDO;
import com.zcloud.primeport.persistence.repository.PersonApplyRepository;
import com.zcloud.primeport.persistence.repository.PersonMessageRepository;
import com.zcloud.primeport.persistence.repository.XgfApplyPersonRepository;
import com.zcloud.primeport.plan.mjDevice.OnePersonUtil;
import jodd.util.Base64;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* web-infrastructure
@ -35,6 +39,7 @@ public class PersonApplyGatewayImpl implements PersonApplyGateway {
private final XgfApplyPersonRepository xgfApplyPersonRepository;
private final PersonMessageRepository personMessageRepository;
private final TodoListEventPusherUtil todoListEventPusherUtil;
private final OnePersonUtil onePersonUtil;
@Override
public Boolean add(PersonApplyE personApplyE) {
@ -74,7 +79,7 @@ public class PersonApplyGatewayImpl implements PersonApplyGateway {
}
@Override
public void xgfPersonAudit(XgfApplyPersonE build) {
public void xgfPersonAudit(XgfApplyPersonE build) throws Exception {
XgfApplyPersonDO d = new XgfApplyPersonDO();
BeanUtils.copyProperties(build, d);
xgfApplyPersonRepository.updateById(d);
@ -92,6 +97,8 @@ public class PersonApplyGatewayImpl implements PersonApplyGateway {
personApplyDOUpdateWrapper.set("mkmj_permission", 1);
personApplyDOUpdateWrapper.eq("xgf_apply_person_id", d.getId());
ArrayList<PersonMessageDO> personMessageDOS = new ArrayList<>();
HashSet<String> userCardHashSet = new HashSet<>();
HashMap<String, JSONObject> stringJSONObjectHashMap = new HashMap<>();
list.forEach(item -> {
PersonMessageDO messageDO = new PersonMessageDO();
messageDO.setPersonBelongType(byId.getPersonBelongType());
@ -103,14 +110,72 @@ public class PersonApplyGatewayImpl implements PersonApplyGateway {
messageDO.setVisitStartTime(byId.getVisitStartTime());
messageDO.setVisitEndTime(byId.getVisitEndTime());
personMessageDOS.add(messageDO);
userCardHashSet.add(Base64.decodeToString(item.getUserCard()));
JSONObject entries = new JSONObject();
entries.set("name", item.getEmployeePersonUserName());
entries.set("code", "hbqa"+Base64.decodeToString(item.getUserCard()));
entries.set("validStartTime", byId.getVisitStartTime() + " 00:00:00");
entries.set("validEndTime", byId.getVisitEndTime() + " 23:59:59");
entries.set("paperType", 111);
entries.set("paperNumber", Base64.decodeToString(item.getUserCard()));
entries.set("departmentId", 1);
JSONObject fileInfo = new JSONObject();
List<JSONObject> dataList = new ArrayList();
fileInfo.set("type", 3);
fileInfo.set("index", 1);
fileInfo.set("path", item.getUserFaceUrl());
dataList.add(fileInfo);
entries.set("personBiosignatures", dataList);
stringJSONObjectHashMap.put(Base64.decodeToString(item.getUserCard()), entries);
// byId.getPersonBelongType()
// onePersonUtil.dockLongTermUserByUserCardAndFaceImg()
});
personMessageRepository.saveBatch(personMessageDOS);
dcokDoorEquipment(userCardHashSet, stringJSONObjectHashMap);
}
TodoListCompleteEvent todoListCompleteEvent = new TodoListCompleteEvent();
todoListCompleteEvent.setForeignSubsidiaryKey(build.getId());
todoListEventPusherUtil.sendMessageCompleteEvent(todoListCompleteEvent);
}
// 对接口门设备
public void dcokDoorEquipment(HashSet<String> userCardHashSet, HashMap<String, JSONObject> userHashMap) throws Exception {
// 对接过的用户信息
ArrayList<JSONObject> waitSaveUser = new ArrayList<>();
ArrayList<JSONObject> waitEditUser = new ArrayList<>();
ArrayList<String> dockEdUserCards = new ArrayList<>();
JSONArray mkmjUserInfoByUserCard = onePersonUtil.getMkmjUserInfoByUserCard(new ArrayList<>(userCardHashSet));
for (int i = 0; i < mkmjUserInfoByUserCard.size(); i++) {
JSONObject o = mkmjUserInfoByUserCard.getJSONObject(i);
String str = o.getStr("paperNumber");
JSONObject entries = userHashMap.get(str);
if (userCardHashSet.add(str)) {
// 要新增的
waitSaveUser.add(entries);
} else {
// 已存在 看下今天是不是在 申请的时间里
long validStartTime = DateUtil.fomatDate(entries.getStr("validStartTime")+ "00:00:00","yyyy-MM-dd HH:mm:ss").getTime();
long validEndTime = DateUtil.fomatDate(entries.getStr("validEndTime")+ "23:59:59","yyyy-MM-dd HH:mm:ss").getTime();
long time = new Date().getTime();
if (time >= validStartTime && time <= validEndTime) {
// 今天在申请的时间里 需要修改
JSONObject entries1 = new JSONObject();
entries1.set("personId", o.getLong("id"));
entries1.set("validStartTime", DateUtil.date2Str(new Date(),"yyyy-MM-dd")+ "00:00:00");
entries1.set("validEndTime", DateUtil.date2Str(new Date(),"yyyy-MM-dd")+ "23:59:59");
waitEditUser.add(entries1);
}
}
dockEdUserCards.add(str);
}
if (!waitSaveUser.isEmpty()) {
onePersonUtil.batchSaveUser(waitSaveUser);
}
if (!waitEditUser.isEmpty()) {
onePersonUtil.expirationDateRefreshedUserCard(waitEditUser);
}
}
@Override
public List<PersonApplyE> personListByxgfApplyPersonId(Long id) {
QueryWrapper<PersonApplyDO> xgfApplyPersonDOQueryWrapper = new QueryWrapper<>();
@ -124,5 +189,13 @@ public class PersonApplyGatewayImpl implements PersonApplyGateway {
});
return xgfApplyPersonES;
}
public static void main(String[] args) {
HashSet<String> strings = new HashSet<>();
System.out.println(strings.add("1"));
System.out.println(strings.add("2"));
System.out.println(strings.add("3"));
System.out.println(strings.add("1"));
}
}

View File

@ -17,6 +17,7 @@ import lombok.EqualsAndHashCode;
@TableName("xgf_apply_person")
@EqualsAndHashCode(callSuper = true)
public class XgfApplyPersonDO extends BaseDO {
// 申请归属1股份2分公司3相关方4临时人员
private Integer personBelongType;
//授权范围港区与区域
@ApiModelProperty(value = "授权范围港区与区域")

View File

@ -10,6 +10,7 @@ import com.zcloud.primeport.persistence.dataobject.VehicleApplyDO;
import com.zcloud.primeport.persistence.dataobject.XgfApplyPersonDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
@ -33,5 +34,6 @@ public interface XgfApplyPersonMapper extends BaseMapper<XgfApplyPersonDO> {
IPage<PersonCountDto> personnelVehicleManagementList(Page<Map<String, Object>> page, @Param("params") Map<String, Object> params, String menuPerms);
List<XgfApplyPersonDO> listTodayHasPort();
}

View File

@ -6,6 +6,7 @@ import com.zcloud.primeport.persistence.dataobject.PersonApplyDO;
import com.zcloud.primeport.persistence.dataobject.PersonCountDto;
import com.zcloud.primeport.persistence.dataobject.XgfApplyPersonDO;
import java.util.List;
import java.util.Map;
/**
@ -20,5 +21,7 @@ public interface XgfApplyPersonRepository extends BaseRepository<XgfApplyPersonD
PageResponse<PersonCountDto> personnelVehicleManagementList(Map<String, Object> params);
PageResponse<XgfApplyPersonDO> listPage(Map<String, Object> params);
List<XgfApplyPersonDO> listTodayHasPort();
}

View File

@ -22,6 +22,7 @@ import com.zcloud.primeport.persistence.repository.XgfApplyPersonRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@ -72,6 +73,11 @@ public class XgfApplyPersonRepositoryImpl extends BaseRepositoryImpl<XgfApplyPer
return PageHelper.pageToResponse(result, result.getRecords());
}
@Override
public List<XgfApplyPersonDO> listTodayHasPort() {
return xgfApplyPersonMapper.listTodayHasPort();
}
}

View File

@ -0,0 +1,27 @@
package com.zcloud.primeport.plan;
import com.jjb.saas.framework.job.Job;
import com.jjb.saas.framework.job.annotation.JobRegister;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zcloud.primeport.persistence.repository.XgfApplyPersonRepository;
import com.zcloud.primeport.plan.mjDevice.OnePersonUtil;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class OneLevelUserXxlJon implements Job {
@Resource
private OnePersonUtil onePersonUtil;
@Override
@JobRegister(cron = "0 14 0 * * ?", jobDesc = "口门定时任务每日12点14进行当日可进门人员推送", triggerStatus = 1)
@XxlJob("com.zcloud.plan.VehicleExpiredExpirationXxlJob")
public ReturnT<String> execute(String param) {
// 相关方、临时访客 每日授权 门禁
onePersonUtil.execute();
return ReturnT.SUCCESS;
}
}

View File

@ -9,11 +9,16 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.zcloud.gbscommon.dahuaDevice.DaHuaDeviceCommon;
import com.zcloud.gbscommon.dahuaDevice.DhuaConfig;
import com.zcloud.gbscommon.utils.DateUtil;
import com.zcloud.primeport.persistence.dataobject.VehicleDockLogDO;
import com.zcloud.primeport.persistence.dataobject.XgfApplyPersonDO;
import com.zcloud.primeport.persistence.repository.VehicleApplyRepository;
import com.zcloud.primeport.persistence.repository.VehicleDockLogRepository;
import com.zcloud.primeport.persistence.repository.XgfApplyPersonRepository;
import com.zcloud.primeport.plan.mjDevice.dto.OneLevelCarBlackDto;
import com.zcloud.primeport.plan.mjDevice.dto.OneLevelCarRemoveDto;
import com.zcloud.primeport.plan.mjDevice.dto.OneLevelCarSaveDto;
import jodd.util.Base64;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
@ -32,24 +37,33 @@ import java.util.stream.Collectors;
*/
@Component
public class OnePersonUtil {
@Value("${kmmj.dockflag}")
private Integer dockFlag;
@Value("${oneLevelPerson.prefix}")
private String prefix;
private static String prefix2 = "https://skqhdg.porthebei.com:9008/yjkmRy/";
@Resource
private XgfApplyPersonRepository xgfApplyPersonRepository;
// @Value("${kmmj.dockflag}")
// private Integer dockFlag;
// @Value("${oneLevelPerson.prefix}")
// private String prefix;
private static Integer dockFlag = 1;
private static String prefix = "https://skqhdg.porthebei.com:9008/yjkmRy/";
private static String username = "shuangkong";
private static String password = "qinan@202604";
private static String clientId = "mkmj_management";
private static String clientSecret = "5ef82f7c-9926-46a3-8d07-136fd054849c";
/*
*
* */
/**
*
*
*/
public void dockLongTermUserByUserCardAndFaceImg(String userCard, String userUid, String username, String userFaceImages, String visitStartTime, String visitEndTime) throws Exception {
if (!dockFlag.equals(1)) return ;
DaHuaDeviceCommon daHuaDeviceCommon = getDaHuaDeviceCommon();
JSONObject userByUserCard = daHuaDeviceCommon.getUserByUserCard(userCard).getJSONObject("data");
if (userByUserCard.isEmpty()) {
// 这个人不存在进行保存用户
// 这个人不存在 保存用户
Long generateId = daHuaDeviceCommon.getGenerateId();
JSONObject userInfo = new JSONObject();
JSONObject fileInfo = new JSONObject();
@ -59,7 +73,7 @@ public class OnePersonUtil {
fileInfo.set("path", userFaceImages);
dataList.add(fileInfo);
userInfo.set("id", generateId);
userInfo.set("personBiosignatures", generateId);
userInfo.set("personBiosignatures", dataList);
userInfo.set("validStartTime", visitStartTime);
userInfo.set("validEndTime", visitEndTime);
userInfo.set("code", userUid);
@ -69,13 +83,31 @@ public class OnePersonUtil {
userInfo.set("departmentId", 1L);
userInfo.set("personType", 0);
daHuaDeviceCommon.saveUser(userInfo);
}else {
// 这个人存在 更新用户
expirationDateRefreshedUserCard(userCard, visitStartTime, visitEndTime);
}
}
/**
*
*/
public void batchSaveUser(List<JSONObject> userList) throws Exception {
if (!dockFlag.equals(1)) return ;
DaHuaDeviceCommon daHuaDeviceCommon = getDaHuaDeviceCommon();
JSONArray batchGenerateId = daHuaDeviceCommon.getBatchGenerateId(userList.size());
for (int i = 0; i < batchGenerateId.size(); i++) {
JSONObject entries = userList.get(i);
entries.set("id", batchGenerateId.getInt(i));
}
daHuaDeviceCommon.batchSaveUser(userList);
}
/**
*
*/
public void expirationDateRefreshedUserCard(String userCard, String visitStartTime, String visitEndTime) throws Exception {
if (!dockFlag.equals(1)) return ;
JSONObject entries = new JSONObject();
entries.set("userCard", userCard);
entries.set("visitStartTime", visitStartTime);
@ -88,6 +120,7 @@ public class OnePersonUtil {
*
*/
public void expirationDateRefreshedUserCard(List<JSONObject> userList) throws Exception {
if (!dockFlag.equals(1)) return ;
DaHuaDeviceCommon daHuaDeviceCommon = getDaHuaDeviceCommon();
List<String> userCard = userList.stream().map(item -> item.getStr("userCard")).collect(Collectors.toList());
Map<String, JSONObject> userCardMap = userList.stream().collect(Collectors.toMap(item -> item.getStr("userCard"), item -> item, (existing, replacement) -> replacement));
@ -111,6 +144,7 @@ public class OnePersonUtil {
*
*/
private void expirationDateBatchRefreshedUserCardList(List<JSONObject> dataList) throws Exception {
if (!dockFlag.equals(1)) return ;
DaHuaDeviceCommon daHuaDeviceCommon = getDaHuaDeviceCommon();
daHuaDeviceCommon.updatePersonValidity(dataList);
}
@ -121,24 +155,64 @@ public class OnePersonUtil {
* (1: 2)
*/
public void freezeByUserCard(String userCard, Integer mkmjPermission) throws Exception {
if (!dockFlag.equals(1)) return ;
DaHuaDeviceCommon daHuaDeviceCommon = getDaHuaDeviceCommon();
JSONObject userByUserCard = daHuaDeviceCommon.getUserByUserCard(userCard).getJSONObject("data");
daHuaDeviceCommon.updatePersonStatus(userByUserCard.getLong("id"), mkmjPermission);
}
/**
*
*/
public JSONArray getMkmjUserInfoByUserCard(List<String> userCards) throws Exception {
if (!dockFlag.equals(1)) return new JSONArray();
DaHuaDeviceCommon daHuaDeviceCommon = getDaHuaDeviceCommon();
return daHuaDeviceCommon.getUserListByUserCard(userCards).getJSONObject("data").getJSONArray("pageData");
}
public DaHuaDeviceCommon getDaHuaDeviceCommon() {
DhuaConfig dhuaConfig = new DhuaConfig();
dhuaConfig.setPrefix(prefix2);
dhuaConfig.setClientId(clientId);
dhuaConfig.setClientSecret(clientSecret);
dhuaConfig.setUsername(username);
dhuaConfig.setPassword(password);
return new DaHuaDeviceCommon(dhuaConfig);
protected DaHuaDeviceCommon getDaHuaDeviceCommon() {
return new DaHuaDeviceCommon(new DhuaConfig(dockFlag, prefix, username, password, clientId, clientSecret));
}
public static void main(String[] args) throws Exception {
OnePersonUtil onePersonUtil = new OnePersonUtil();
onePersonUtil.freezeByUserCard("360425198208131948", "1");
// JSONArray mkmjUserInfoByUserCard = onePersonUtil.getMkmjUserInfoByUserCard(Arrays.asList("360425198208131948"));
// JSONArray mkmjUserInfoByUserCard2 = onePersonUtil.getMkmjUserInfoByUserCard(Arrays.asList("160425198208131948"));
//// onePersonUtil.freezeByUserCard("360425198208131948", "1");
// System.out.println(mkmjUserInfoByUserCard);
// System.out.println(mkmjUserInfoByUserCard2);
//
// JSONArray batchGenerateId = onePersonUtil.getDaHuaDeviceCommon().getBatchGenerateId(10);
}
public void execute() {
if (!dockFlag.equals(1)) return;
List<XgfApplyPersonDO> dataList = xgfApplyPersonRepository.listTodayHasPort();
if (!dataList.isEmpty()) {
HashMap<String,JSONObject> userCardHashSet = new HashMap<>();
ArrayList<JSONObject> jsonObjects = new ArrayList<>();
dataList.forEach(item -> {
JSONObject entries = new JSONObject();
entries.set("userCard", Base64.decodeToString(item.getUserCard()));
entries.set("validStartTime", DateUtil.date2Str(new Date(),"yyyy-MM-dd") + " 00:00:00");
entries.set("validEndTime", DateUtil.date2Str(new Date(),"yyyy-MM-dd") + " 23:59:59");
userCardHashSet.put(Base64.decodeToString(item.getUserCard()), entries);
jsonObjects.add(entries);
});
JSONArray mkmjUserInfoByUserCard = null;
try {
mkmjUserInfoByUserCard = getMkmjUserInfoByUserCard(new ArrayList<>(userCardHashSet.keySet()));
for (int i = 0; i < mkmjUserInfoByUserCard.size(); i++) {
JSONObject jsonObject = mkmjUserInfoByUserCard.getJSONObject(i);
userCardHashSet.get(jsonObject.getStr("paperNumber")).set("id", jsonObject.getLong("id"));
}
expirationDateBatchRefreshedUserCardList(new ArrayList<>(userCardHashSet.values()));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}

View File

@ -163,5 +163,27 @@
ORDER BY
u.department_id
</select>
<select id="listTodayHasPort" resultType="com.zcloud.primeport.persistence.dataobject.XgfApplyPersonDO">
SELECT
pa.employee_person_user_name,
pa.user_card,
pa.user_face_url,
xap.gate_level_auth_area,
xap.audit_flag,
xap.person_belong_type,
xap.visit_start_time,
xap.visit_end_time
FROM
person_apply pa
LEFT JOIN xgf_apply_person xap ON pa.xgf_apply_person_id = xap.id
WHERE
pa.delete_enum = "FALSE"
AND xap.delete_enum = 'FALSE'
AND xap.audit_flag = 2
AND xap.person_belong_type IN ( 3, 4 )
AND xap.visit_start_time &lt;= DATE_FORMAT( now(), '%y-%m-%d' ) AND xap.visit_end_time &gt;= DATE_FORMAT( now(), '%y-%m-%d' )
GROUP BY
pa.user_card
</select>
</mapper>