兴安优化访客人脸机交互

This commit is contained in:
zc
2025-08-07 17:51:51 +08:00
parent 6eb698750e
commit 2b4d54a000
10 changed files with 227 additions and 47 deletions

View File

@@ -1,11 +1,14 @@
package com.dcsoft.system.uniubi.domain;
import com.alibaba.fastjson.JSONObject;
import com.dcsoft.common.core.annotation.Excel;
import com.dcsoft.common.core.web.domain.BaseEntity;
import com.dcsoft.system.domain.SysBranch;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.List;
/**
* 人员管理对象 person
*
@@ -58,6 +61,17 @@ public class Person extends BaseEntity
/** 人员类型 0长期人员默认,1临时员工 2黑名单用户*/
private int role=0;
private List<JSONObject> rule;
public List<JSONObject> getRule() {
return rule;
}
public void setRule(List<JSONObject> rule) {
this.rule = rule;
}
public String getId() {
return id;
}

View File

@@ -9,6 +9,7 @@ import com.dcsoft.system.domain.SysRule;
import com.dcsoft.system.uniubi.domain.Person;
import com.dcsoft.system.visitor.domain.Visitor;
import java.util.Date;
import java.util.List;
/**
@@ -24,6 +25,9 @@ public interface ISysSdkService {
//人员接口-人员删除若删除多个人员id 用英文逗号拼接,传入-1 则删除所有人员)
String personDelete(String id, String ip, String pass);
//创建规则
String ruleCreate(String id, String ip, String pass, Date startDate, Date endDate);
//人员接口-人员更新
String personUpdate(Person person, String ip, String pass);

View File

@@ -1,5 +1,8 @@
package com.dcsoft.system.uniubi.service.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.dcsoft.system.domain.*;
@@ -67,6 +70,28 @@ public class SysSdkServiceImpl implements ISysSdkService {
return response;
}
@Override
public String ruleCreate(String ruleId, String ip, String pass, Date startTime, Date endTime) {
String url = "http://" + ip + ":8090/rule/create";
JSONObject paramMap = new JSONObject();
paramMap.put("pass", pass);
paramMap.put("ruleId", ruleId);
paramMap.put("type", 1);
List<String> segment = Arrays.asList("00:00:00", "23:59:59");
Map<String, Object> dayMap = new HashMap<>();
dayMap.put("segment", segment);
dayMap.put("endAt", endTime.getTime());
dayMap.put("startAt", startTime.getTime());
Map<String, Object> contentMap = new HashMap<>();
List<Map<String, Object>> list = new ArrayList<>();
list.add(dayMap);
contentMap.put("day", list);
contentMap.put("endAt", endTime.getTime());
contentMap.put("startAt", startTime.getTime());
paramMap.put("content", contentMap);
return HttpUtil.postDataJson(url, paramMap);
}
@Override
public String personUpdate(Person person, String ip, String pass) {
String url="http://"+ip+":8090/person/update";
@@ -217,6 +242,7 @@ public class SysSdkServiceImpl implements ISysSdkService {
}
paramMap.put("imgUrl",imgUrl);
String response= HttpUtil.sendxwwwform(url,paramMap);
log.info("imageCreateUrl:{}", response);
return response;
}

View File

@@ -258,6 +258,7 @@ public class VisCarryStuffController extends BaseController {
//查询放行记录,确认保安是否已放行
VisExitOutRecordVo visExitOutRecordVo = new VisExitOutRecordVo();
visExitOutRecordVo.setExitId(id);
List<VisExitOutRecordVo> visExitOutRecordVos = visExitOutRecordService.selectList(visExitOutRecordVo);
if (CollUtil.isNotEmpty(visExitOutRecordVos)) {
stuffVo.setIsRelease(1);

View File

@@ -350,7 +350,7 @@ public class VisitorController extends BaseController {
//审核链接进来
if (StringUtils.isNotBlank(telephone)) {
// if (StringUtils.equals(visitor.getExamineState(), ExamineEnum.IN_REVIEW.getCode())) {
if (StringUtils.equals(visitor.getExamineState(), ExamineEnum.IN_REVIEW.getCode())) {
//查询当前点击审核链接的人员信息
SysPeople sysPeople = sysPeopleService.queryPeopleName(telephone, null);
@@ -364,7 +364,7 @@ public class VisitorController extends BaseController {
visitor.setExamineState(visitor1.getState());
visitor.setRejectReason(visitor1.getRejectReason());
}
// }
}
}
Map<String, String> map = dictDataService.queryDictData("sys_company_type");
@@ -509,18 +509,12 @@ public class VisitorController extends BaseController {
//判断访客和随访人是否存在预约过的信息
List<String> phones = new ArrayList<>();
List<String> idcards = new ArrayList<>();
if (CollUtil.isNotEmpty(visitor.getItemList())) {
phones = visitor.getItemList().stream().map(Visitor::getPhone).collect(Collectors.toList());
idcards = visitor.getItemList().stream().map(Visitor::getIdcard).collect(Collectors.toList());
}
phones.add(visitor.getPhone());
if (visitorService.queryVisitorByIdCount(phones) > 0) {
throw new ServiceException("手机号已存在访客预约信息");
}
idcards.add(visitor.getIdcard());
if (visitorService.queryVisitorByCardCount(idcards) > 0) {
throw new ServiceException("访客中存在已预约访客");
if (visitorService.addVisitorCheck(phones, visitor.getStartTime()) > 0) {
throw new ServiceException("该时间段已有申请,请更换预约时间");
}
LoginUser loginUser = SecurityUtils.getLoginUser();
@@ -571,7 +565,7 @@ public class VisitorController extends BaseController {
//发送企微信息
try {
sendWeCom(sysPeople.getPhone(), url + " --访客姓名:" + visitor.getName());
// sendWeCom(sysPeople.getPhone(), url + " --访客姓名:" + visitor.getName());
} catch (Exception e) {
log.error("访客add-sendWeCom异常", e);
}
@@ -1055,16 +1049,19 @@ public class VisitorController extends BaseController {
visitor2.setReviewer(String.valueOf(sysPeople.getId()));
visitor2.setRejectReason(visitor.getRejectReason());
visitor2.setState(ExamineEnum.PASSED.getCode());
visitor2.setApproveNode(1);
list.add(visitor2);
Visitor visitor3 = new Visitor();
visitor3.setId(visitor.getId());
visitor3.setState(ExamineEnum.IN_REVIEW.getCode());
visitor3.setReviewer(visitor.getReviewer2());
visitor3.setApproveNode(2);
list.add(visitor3);
Visitor visitor4 = new Visitor();
visitor4.setId(visitor.getId());
visitor4.setState(ExamineEnum.IN_REVIEW.getCode());
visitor4.setReviewer(visitor.getReviewer3());
visitor4.setApproveNode(3);
list.add(visitor4);
//保存审核环节表
visitorService.saveVisitorReviewProcessList(list);
@@ -1072,6 +1069,7 @@ public class VisitorController extends BaseController {
//二级审核人审核
else if (visitor1.getCurrentNode() == 2) {
visitor.setNextStepReviewer(visitor.getReviewer3());
visitor.setApproveNode(2);
visitorService.updateVisitorReviewProcess(visitor);
}
//如果有下一级审核人员,发送钉钉,企微审核消息链接
@@ -1086,7 +1084,7 @@ public class VisitorController extends BaseController {
log.info("approve发送审核链接{}", url);
try {
sendWeCom(nextPeople.getPhone(), url + " --访客姓名:" + visitor.getName());
// sendWeCom(nextPeople.getPhone(), url + " --访客姓名:" + visitor.getName());
} catch (Exception e) {
log.error("访客approve-sendWeCom异常", e);
}
@@ -1100,8 +1098,39 @@ public class VisitorController extends BaseController {
visVisitorExamineService.insertVisVisitorExamine(examine);
//修改环节状态
visitor.setApproveNode(3);
visitorService.updateVisitorReviewProcess(visitor);
// 园区人脸下发到设备
if (StringUtils.isEmpty(visitor1.getGuid())) {
List<Visitor> listVisitorId = new ArrayList<>();
Visitor s = deviceDistribute(visitor1, 1);
Visitor visitor3 = new Visitor();
visitor3.setGuid(s.getGuid());
visitor3.setFaceGuid(s.getFaceGuid());
visitor3.setId(visitor1.getId());
//查询随访人员
Visitor visitor11 = new Visitor();
visitor11.setParentId(visitor1.getId());
List<Visitor> visitors = visitorService.selectVisitorItemList(visitor11);
if (!CollectionUtils.isEmpty(visitors)) {
for (Visitor visitor2 : visitors) {
Visitor visitorInfo = new Visitor();
visitor2.setUserId(visitor1.getUserId());
Visitor visitorId = deviceDistribute(visitor2, 2);
visitorInfo.setId(visitor2.getId());
visitorInfo.setGuid(visitorId.getGuid());
visitorInfo.setFaceGuid(visitorId.getFaceGuid());
listVisitorId.add(visitorInfo);
}
}
listVisitorId.add(visitor3);
log.info("更新访客人员信息到设备:{}", listVisitorId);
visitorService.updateVisitorInfoGuid(listVisitorId);
}
// 同意后,给被访人和访客们发送审核结束短信
List<String> phoneList = new ArrayList<>();
phoneList.add(visitor.getPhone());
@@ -1115,7 +1144,7 @@ public class VisitorController extends BaseController {
log.info("approve-发同意短信:{}", JSON.toJSONString(phoneList));
for (String phone : phoneList) {
try {
sendMessage(phone, "1", parkName, smsProperties.getTemplate2());
// sendMessage(phone, "1", parkName, smsProperties.getTemplate2());
} catch (Exception e) {
log.error(e.getMessage());
}
@@ -1133,7 +1162,7 @@ public class VisitorController extends BaseController {
visitorService.updateVisitorReviewProcess(visitor);
try {
sendWeCom(telephone, visitor.getName() + "的访客审核已驳回");
// sendWeCom(telephone, visitor.getName() + "的访客审核已驳回");
} catch (Exception e) {
log.error("访客approve-sendWeCom驳回异常", e);
}
@@ -1141,7 +1170,7 @@ public class VisitorController extends BaseController {
log.info("approve-发拒绝短信:{}", visitor.getPhone());
try {
sendMessage(visitor.getPhone(), "1", parkName, smsProperties.getTemplate3());
// sendMessage(visitor.getPhone(), "1", parkName, smsProperties.getTemplate3());
} catch (Exception e) {
log.error(e.getMessage());
}
@@ -1466,6 +1495,80 @@ public class VisitorController extends BaseController {
}
}
/**
* 园区人脸设备下发
*/
private Visitor deviceDistribute(Visitor visitor,Integer type) {
// 查询被访人授权记录
Visitor s = new Visitor();
SysEquipment equipment = new SysEquipment();
equipment.setFlag("0");
equipment.setIsCj("0");
equipment.setProductId(3L);
List<SysEquipment> equipList = equipmentService.selectSysEquipmentList(equipment);
String guid = IdUtils.simpleUUID();
String faceId = IdUtils.simpleUUID();
s.setGuid(guid);
s.setFaceGuid(faceId);
//通过规则获取绑定设备信息
for (SysEquipment e : equipList) {
//将人员信息下发到设备
Person person = new Person();
person.setName(visitor.getName());
person.setPhone(visitor.getPhone());
person.setId(guid);
//添加人员规则
JSONObject jsonObject = new JSONObject();
jsonObject.put("ruleId", type == 1 ? "vis_" + visitor.getId() : "vis_" + visitor.getParentId());
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("timezoneRule", jsonObject);
List<JSONObject> objects = new ArrayList<>();
objects.add(jsonObject2);
person.setRule(objects);
String ip = e.getIp();
String pass = e.getPassword();
//添加临时规则
if(type == 1) {
String s1 = sdkService.ruleCreate(jsonObject.getString("ruleId"), ip, pass, visitor.getStartTime(), visitor.getEndTime());
JSONObject jsonObject1 = JSONObject.parseObject(s1);
if (!StringUtils.equals("LAN_SUS-0", jsonObject1.getString("code"))) {
log.error("临时访客创建规则下发失败visitorId:{},ip:{}", visitor.getId(), e.getIp());
continue;
}
}
//创建人员
String s2 = sdkService.personCreate(person, ip, pass);
JSONObject jsonObject3 = JSONObject.parseObject(s2);
if (!StringUtils.equals("LAN_SUS-0", jsonObject3.getString("code"))) {
log.error("临时访客创建人员下发失败visitorId:{},ip:{}", visitor.getId(), e.getIp());
continue;
}
//设置人员有效期
String s3 = sdkService.permissionsCreate(guid, DateUtil.format(visitor.getEndTime(), DatePattern.NORM_DATETIME_PATTERN), ip, pass);
JSONObject jsonObject4 = JSONObject.parseObject(s3);
if (!StringUtils.equals("LAN_SUS-0", jsonObject4.getString("code"))) {
log.error("临时访客设置人员有效期下发失败visitorId:{},ip:{}", visitor.getId(), e.getIp());
}
//设置人脸图片
if (StringUtils.isNotEmpty(visitor.getAvatar())) {
String s4 = sdkService.imageCreateUrl(guid, faceId, visitor.getAvatar(), ip, pass);
JSONObject jsonObject5 = JSONObject.parseObject(s4);
if (!StringUtils.equals("LAN_SUS-0", jsonObject5.getString("code"))) {
log.error("临时访客设置人员图片下发失败visitorId:{},ip:{}", visitor.getId(), e.getIp());
}
}
//保存下发记录
SysPeopleEquipment sysPeopleEquipment = new SysPeopleEquipment();
sysPeopleEquipment.setVisitorId(visitor.getId());
sysPeopleEquipment.setEquipmentId(e.getId());
sysPeopleEquipment.setGuid(guid);
sysPeopleEquipment.setFaceGuid(faceId);
peopleEquipmentService.insertSysPeopleEquipment(sysPeopleEquipment);
}
return s;
}
/**
* 园区人脸设备下发
*/
@@ -1476,43 +1579,41 @@ public class VisitorController extends BaseController {
SysRule rule = sysRuleService.selectSysRuleById(sysManageRecord.getRuleId());
String[] pointIds = rule.getPointId().split(",");
List<SysEquipment> equipList = new ArrayList<>();
if (pointIds != null) {
for (String point : pointIds) {
SysEquipment equipment = new SysEquipment();
equipment.setPointId(Long.parseLong(point));
equipment.setFlag("0");
equipment.setIsCj("0");
equipment.setProductId(3L);
List<SysEquipment> equipmentDtoList = equipmentService.selectSysEquipmentList(equipment);
equipList.addAll(equipmentDtoList);
}
for (String point : pointIds) {
SysEquipment equipment = new SysEquipment();
equipment.setPointId(Long.parseLong(point));
equipment.setFlag("0");
equipment.setIsCj("0");
equipment.setProductId(3L);
List<SysEquipment> equipmentDtoList = equipmentService.selectSysEquipmentList(equipment);
equipList.addAll(equipmentDtoList);
}
String guid = IdUtils.simpleUUID();
String faceId = IdUtils.simpleUUID();
s.setGuid(guid);
s.setFaceGuid(faceId);
//通过规则获取绑定设备信息
if (equipList != null) {
for (SysEquipment e : equipList) {
//将人员信息下发到设备
Person person = new Person();
person.setName(visitor.getName());
person.setPhone(visitor.getPhone());
person.setId(guid);
String ip = e.getIp();
String pass = e.getPassword();
sdkService.personCreate(person, ip, pass);
if (StringUtils.isNotEmpty(visitor.getAvatar())) {
sdkService.imageCreateUrl(guid, faceId, visitor.getAvatar(), ip, pass);
}
//保存下发记录
SysPeopleEquipment sysPeopleEquipment = new SysPeopleEquipment();
sysPeopleEquipment.setVisitorId(visitor.getId());
sysPeopleEquipment.setEquipmentId(e.getId());
sysPeopleEquipment.setGuid(guid);
sysPeopleEquipment.setFaceGuid(faceId);
peopleEquipmentService.insertSysPeopleEquipment(sysPeopleEquipment);
for (SysEquipment e : equipList) {
//将人员信息下发到设备
Person person = new Person();
person.setName(visitor.getName());
person.setPhone(visitor.getPhone());
person.setId(guid);
String ip = e.getIp();
String pass = e.getPassword();
sdkService.personCreate(person, ip, pass);
sdkService.permissionsCreate(guid, DateUtil.format(visitor.getEndTime(), DatePattern.NORM_DATETIME_PATTERN), ip, pass);
if (StringUtils.isNotEmpty(visitor.getAvatar())) {
sdkService.imageCreateUrl(guid, faceId, visitor.getAvatar(), ip, pass);
}
//保存下发记录
SysPeopleEquipment sysPeopleEquipment = new SysPeopleEquipment();
sysPeopleEquipment.setVisitorId(visitor.getId());
sysPeopleEquipment.setEquipmentId(e.getId());
sysPeopleEquipment.setGuid(guid);
sysPeopleEquipment.setFaceGuid(faceId);
peopleEquipmentService.insertSysPeopleEquipment(sysPeopleEquipment);
}
}
return s;

View File

@@ -294,4 +294,9 @@ public class Visitor extends BaseEntity {
*/
private List<String> insurancePolicyList;
/**
* vis_visitor_review_process表的审核节点
*/
private Integer approveNode;
}

View File

@@ -1,5 +1,6 @@
package com.dcsoft.system.visitor.mapper;
import java.util.Date;
import java.util.List;
import com.dcsoft.common.core.web.page.TableDataInfoPage;
@@ -253,4 +254,6 @@ public interface VisitorMapper
String queryReviewProcessOld(Visitor visitor);
void deleteVisitorReviewProcess(@Param("id") Long id);
int addVisitorCheck(@Param("phones") List<String> phones,@Param("startTime") Date startTime);
}

View File

@@ -1,5 +1,6 @@
package com.dcsoft.system.visitor.service;
import java.util.Date;
import java.util.List;
import com.dcsoft.common.core.web.page.TableDataInfoPage;
@@ -265,4 +266,6 @@ public interface IVisitorService
String queryReviewProcessOld(Visitor visitor);
void cancel(Visitor visitor);
int addVisitorCheck(List<String> phones, Date startTime);
}

View File

@@ -818,4 +818,10 @@ public class VisitorServiceImpl implements IVisitorService {
//删除流程环节信息
visitorMapper.deleteVisitorReviewProcess(visitor.getId());
}
@Override
public int addVisitorCheck(List<String> phones, Date startTime) {
return visitorMapper.addVisitorCheck(phones, startTime);
}
}

View File

@@ -380,13 +380,25 @@
</if>)
</insert>
<insert id="saveVisitorReviewProcessList">
insert into vis_visitor_review_process (id, visitor_id, reviewer, state, reject_reason)
insert into vis_visitor_review_process (id, visitor_id, reviewer, state, reject_reason, approve_node)
VALUES
<foreach collection="list" item="i" index="index" separator=",">
(REPLACE(uuid(), '-', ''), #{i.id}, #{i.reviewer}, #{i.state}, #{i.rejectReason})
(REPLACE(uuid(), '-', ''), #{i.id}, #{i.reviewer}, #{i.state}, #{i.rejectReason}, #{i.approveNode})
</foreach>
</insert>
<select id="addVisitorCheck" resultType="java.lang.Integer">
select
count(*)
from vis_visitor
where
end_time <![CDATA[ >= ]]> #{startTime}
and phone in
<foreach item="phone" collection="phones" open="(" separator="," close=")">
#{phone}
</foreach>
</select>
<update id="updateVisitor" parameterType="Visitor">
update vis_visitor
<trim prefix="SET" suffixOverrides=",">
@@ -521,6 +533,9 @@
<if test="reviewer != null and reviewer != ''">
and reviewer = #{reviewer}
</if>
<if test="approveNode != null">
and approve_node = #{approveNode}
</if>
</update>
<update id="updateVisitorByParentId">
update vis_visitor
@@ -885,6 +900,8 @@
<if test="reviewer != null and reviewer != ''">
and reviewer = #{reviewer}
</if>
order by approve_node desc
LIMIT 1
</select>
<select id="queryVisitorReviewProcessCount" resultType="java.lang.Integer">
select sum(if(state is null, 1, 0)) state from vis_visitor_review_process where visitor_id = #{id} group by visitor_id