|
0.1交换authorizationID
|
Request:
|
{
|
authorizationID: "aaaaa"
|
}
|
Response:
|
{
|
registerCompanyID : 1,
|
placeID : 1
|
companyName : "aaa",
|
placeLabel: "aaaaa"
|
}
|
|
select b.CompanyID as registerCompanyID, b.ID as placeID, a.name as companyName, b.label as placeLabel from Company a, Place b
|
where a.ID = b.CompanyID and authorizationID = "$authorizationID"
|
|
|
1. 实时监控
|
1.1. 人员分类分类列表(VisitorType)
|
Request:
|
{
|
companyID : 1
|
}
|
Response:
|
[
|
{
|
ID : "label"
|
}
|
]
|
|
enum StatusID
|
{
|
普通访客
|
黑名单
|
教师
|
学生
|
领导干部
|
}
|
select ID, distinct label from VisitorType where RegisterCompanyID = 0 or RegisterCompanyID = "$companyID"
|
|
1.2. ImageTypeID
|
Request:
|
{
|
}
|
Response:
|
[
|
{
|
ID : "label"
|
}
|
]
|
|
enum ImageTypeID
|
{
|
Face1 = 1, // 正面照片1(交给人脸识别服务)
|
Face2 = 2, // 正面照片2(存放到FaceImage表)
|
FaceLSide, // (主体视角,<=45度)左侧脸照片(存放到FaceImage表)
|
FaceRSide, // (主体视角,<=45度)右侧脸照片(存放到FaceImage表)
|
FaceTSide, // (主体视角,<=45度)顶侧脸照片(存放到FaceImage表)
|
FaceBSide, // (主体视角,<=45度)底侧脸照片(存放到FaceImage表)
|
FaceUploaded, // 上传照片(存放到FaceImage表)
|
Icon, // 图标(存放到Image表)
|
IdentificationCard, // 身份证照片(存放到Image表)
|
BusinessCard, // 名片照片(存放到Image表)
|
OtherCard, // 其他证件(存放到Image表)
|
}
|
|
1.2. StatusID
|
Request:
|
{
|
}
|
Response:
|
[
|
{
|
ID : "label"
|
}
|
]
|
|
enum StatusID
|
{
|
未注册
|
已注册(访客)
|
来访登记(访客)
|
签离(访客)
|
签到(员工)
|
签退(员工)
|
}
|
|
|
1.3. 人脸识别
|
通过图像获得faceID
|
Request:
|
{
|
registerCompanyID : 123, // 若为-1则只搜索VisitFaceDB
|
imgs : [ "image base64" ] // 对应多个人的人脸图像 # 使用http form post
|
}
|
Response:
|
[
|
{
|
registerCompanyID : 123, //找不到返回VisitDBFaceID,此项为-1
|
faceID : 1,
|
isVisitDBFaceID : false, // <dbid=-1, faceid!=-1> : true, <dbid!=-1, faceid!=-1> : false
|
imgUrl : "",
|
imgType : ""
|
},
|
{
|
faceID : -1, // 搜索无结果 <dbid=-1, faceid=-1>
|
}
|
]
|
|
a)接收imgs二进制数据
|
b)转发到人脸识别服务(registerCompanyID, imgs)
|
c)接收识别结果:<dbid, faceid>,其中<(<0),0>表示未找到结果,<(<0),N>表示在访客数据库中找到人脸,<N,M>表示在N公司中匹配人脸M
|
d) 对于单个人脸结果:
|
if <0,0>
|
{
|
// 搜索无结果
|
}
|
else if (dbid < 0 && faceid != 0)
|
{ // 访客
|
// select PersonID from FaceImage where RegisterCompanyID="$dbid" and faceid="$faceid";
|
// select * from Person where PersonID="$PersonID"
|
}
|
else if (dbid > 0 && faceid != 0)
|
{ // 员工
|
// select * from FaceImage where RegisterCompanyID="$dbid" and faceid="$faceid";
|
// select * from Person where PersonID="$PersonID"
|
}
|
|
|
1.4. 人脸总体信息查询
|
通过faceID获得Person简要信息
|
需要支持批量查询
|
Request:
|
{
|
companyID : 123,
|
faceID : 123,
|
isVisitDBFaceID : false // 如果为true则忽略companyID,faceID认为是visitDBFaceID
|
}
|
Response:
|
{
|
personID : 123, // 无效值表示没有对应的人ID
|
personTypeID : 1, // 人员分类列表
|
visitStatusID : 1, // 访问状态
|
name : "name",
|
checkingCompany : [123, 456], // 考勤公司ID列表
|
warning : false // 是否为警告
|
}
|
|
1.5. 访客注册(见2 人员注册)
|
|
1.6. 更改人员考勤状态(签到、签退、签离)
|
需要支持批量查询
|
Request:
|
{
|
placeID : 123,
|
personID : 123,
|
visitStatusID : 1 // 设置访问状态
|
}
|
Response:
|
成功/错误结果
|
|
1.6.1. 人脸识别及状态修改
|
整合:通过人脸图像,完成状态修改,返回当前状态
|
(整合1.3. 1.4. 1.6.)
|
Request:
|
{
|
placeID : 123, // 若为-1则只搜索VisitFaceDB
|
enterOrExit : 1 // 签到、签退/签离
|
imgs : [ "image base64" ] // 对应多个人的人脸图像
|
}
|
Response:
|
[
|
{
|
personID : 123,
|
visitStatusID : 1 // 更新之后的访问状态
|
},
|
{
|
faceID : -1, // 人脸搜索无结果
|
},
|
{
|
//业务错误: 9.1. 通用成功/错误结果
|
}
|
]
|
|
|
参考1.3. a)b)c)d)
|
e) 对于单个人脸结果:
|
// "$person.id"
|
select CompanyID from Place where placeID="$placeID"
|
isChecking = select * CheckingCompany where CompanyID = "$CompanyID" and PersonID="$PersonID"
|
if (enterOrExit == 签到) // 入口摄像头
|
{
|
if (isChecking)
|
checking(PersonID, placeID);
|
return person current status
|
else
|
return person status not changed;
|
}
|
else if (enterOrExit == 签退/签离) // 出口摄像头
|
{
|
if (isChecking)
|
unchecking(PersonID, placeID);
|
return person current status
|
else
|
unvisit(PersonID, placeID);
|
return person current status
|
}
|
|
checking:
|
noNeedInsertNewRecord = select * from Checking where StatusID = "$NewStatusID" and statusDt + 5second > now() and PersonID = "$PersonID" and PlaceID="$PlaceID"
|
if (!noNeedInsertNewRecord)
|
{
|
insert into Checking(...);
|
}
|
|
unvisit
|
noNeedInsertNewRecord = ...
|
if (!noNeedInsertNewRecord)
|
{
|
// get last visit event
|
select * from Visit where VisitorPersonID="$PersonID" and CompanyID="$CompanyID" order by startTime desc limit 1
|
|
insert into Visiting
|
update Visit LastStatusID, lastTime
|
}
|
|
|
1.7. 查询人员来访/签到状态
|
需要支持批量查询
|
Request:
|
{
|
companyID : 1,
|
personID : 123,
|
}
|
Response:
|
{
|
visitStatusID : 1 // 访问状态
|
}
|
|
1.8. 更改人员来访状态(来访登记)
|
见3 添加来访记录
|
|
2. 人员注册
|
2.1. 国籍列表
|
2.2. 证件类型
|
2.3. 注册人员
|
Request:
|
{
|
registerCompanyID : 123,
|
name : "",
|
companyName : "",
|
// ...
|
}
|
Response:
|
{
|
companyID : 123,
|
personID : 123
|
}
|
|
a) find by name, (IdentityTypeID, identity), phone ... from Person
|
b) if Person exists return error
|
c) else insert into Person
|
d) companyID = (select * from or insert Company where name = "$companyName")
|
e) department_id , Post_id
|
f)
|
|
2.4. 注册访客人脸(visit face register)
|
Request:
|
{
|
registerCompanyID : 123,
|
personID : 123,
|
imgs : { ImageTypeID : "image base64" } // 对应一个人的若干个人脸图像
|
}
|
Response:
|
{
|
faceIDs : [ 123 ]
|
}
|
|
a)select exists(*) from person where id="$personID"
|
b)if not exists return error
|
c)根据image type保存图片
|
d)调用人脸识别服务[faceids]=(registerCompanyID, dbid=-1, img)
|
e)对于每一个faceid,insert into VisitFace ("$FaceID", $PersonID, "$VisitFace.imagePath")
|
|
3. 来访登记
|
3.1. 获得来访人员列表
|
返回按姓名缩写升序的结果
|
Request:
|
{
|
companyID : 123, // 设备所在学校ID,0表示所有公司,仅供管理接口使用
|
beginPage : 0,
|
endPage : 0
|
}
|
Response:
|
[
|
{
|
personID : 123,
|
RegisterCompanyID : 123,
|
name : "aaa",
|
img : "image url" // 非字符串表示使用默认图标
|
}
|
]
|
|
set @companyID =1;
|
select vs.person_id, vs.register_company_id, pe.name, img.image_type, img.image_path
|
from visit_stat vs join person pe
|
on (@companyID=0 or vs.register_company_id = @companyID) and (vs.person_id = pe.id)
|
left outer join Image img
|
on (pe.id = img.person_id and img.image_type=8) -- icon
|
limit ...
|
|
3.2. 获得被访人员列表
|
返回按姓名缩写升序的结果
|
Request:
|
{
|
companyID : 123,
|
beginPage : 0,
|
endPage : 0
|
}
|
Response:
|
[
|
{
|
personID : 123,
|
name : "aaa",
|
department : "aaa",
|
img : "image url" // 非字符串表示使用默认图标
|
}
|
]
|
|
set @companyID =1;
|
select * from person pe where pe.company_id = @companyID
|
|
3.2. 搜索
|
(3. 4. 5. 6.)
|
来访人员,如果没有给出搜索字段时,显示本校曾经来访人员列表VisitStat;如果给出关键字,则搜索全部人员
|
被访人员,本公司员工列表
|
Request:
|
{
|
registerCompanyID : 123,
|
isVisitor : true
|
beginPage : 0,
|
endPage : 0,
|
nameSpell : ""
|
}
|
Response:
|
{
|
}
|
|
#todo 被访考虑和人员列表合并
|
|
if isVisitor
|
select *
|
from visit_stat vs left outer join person pe
|
on vs.person_id = person.id
|
where vs.register_company_id = "$registerCompanyID" and pe.name_spell like "$nameSpell%"
|
else
|
select * from person
|
where CompanyID = "$registerCompanyID" and name_spell like "$nameSpell%"
|
|
3.3. 获得来访/被访人员详细信息(visitor/visitee)
|
Request:
|
{
|
personID : 123,
|
isVisitor : true
|
}
|
Response:
|
{
|
companyID : 123,
|
name : "aaa",
|
companyName : "",
|
department : "aaa",
|
img : "image url" // 非字符串表示使用默认图标
|
// ...
|
}
|
|
3.4. 添加来访记录
|
Request:
|
{
|
placeID : 123,
|
visitorPersonID : 123,
|
visiteePersonID : 123,
|
matter : "aaa", // 数字表示使用预定义标签ID
|
remark : ""
|
}
|
Response:
|
成功/错误结果
|
|
insert or update VisitStat
|
|
3.5. 获得拜访事由选项列表
|
Request:
|
{
|
}
|
Response:
|
[
|
{
|
ID : "label"
|
}
|
]
|
|
4. 电话呼叫
|
4.1. 获得人员列表(同被访人员列表)
|
|
4.2. 添加呼叫记录
|
|
5. 访客管理
|
5.1. 获得来访列表
|
Request:
|
{
|
companyID : 123,
|
beginDt : "",
|
endDt : ""
|
}
|
Response:
|
[
|
{
|
visitID : 1,
|
visitorPersonID : 123,
|
visitorName : "",
|
lastStatusID : 1,
|
dt : ""
|
}
|
]
|
|
5.2. 访客信息
|
|
|
5.2. 获得来访详细信息
|
Request:
|
{
|
visitID : 1
|
}
|
Response:
|
{
|
visitorPersonID
|
visitorName : "",
|
// ...
|
visiteePersonID : 123,
|
// ...
|
imgChar : "image url",
|
imgIdentity : "image url"
|
}
|
|
6. 考勤记录
|
6.1. 获得考勤列表
|
根据日期、personID聚类
|
Request:
|
{
|
companyID : 123,
|
beginDt : "",
|
endDt : ""
|
}
|
Response:
|
[
|
{
|
personID : 123,
|
name : "",
|
lastStatusID : 1,
|
dt : ""
|
}
|
]
|
|
6.2. 获得考勤详细信息
|
Request:
|
{
|
personID : 123
|
beginDt : "",
|
endDt : ""
|
}
|
Response:
|
{
|
{
|
id : 123,
|
place : "",
|
// ...
|
}
|
}
|
|
6.2. 返回人员详细信息API
|
见 3.3.
|
|
|
7. 配置
|
|
8. 其他实体操作
|
|
|
9. 总体接口
|
9.1. 通用成功/错误结果
|
Response:
|
{
|
errcode : 0, // 0表示执行成功,否则为失败错误代码
|
msg:"aaaaa" // 执行结果附加消息
|
}
|