bug修复
This commit is contained in:
parent
3d03055709
commit
fe62c751cb
@ -11,11 +11,11 @@ import lombok.NoArgsConstructor;
|
||||
@NoArgsConstructor
|
||||
public class HikvisionEventsPictureRq {
|
||||
/**
|
||||
* 图片存储服务器唯一标识,提供picUri处会提供此字段
|
||||
* 图片存储服务器唯一标识,提供picUri处会提供此字段,如49a6fec4-e368-428d-baff-4189a1383829
|
||||
*/
|
||||
private String svrIndexCode;
|
||||
/**
|
||||
* 图片的相对地址
|
||||
* 图片的相对地址,如/pic?bd00=c002l7f-do061b*91ee599f-2857f96b7*571==sp**117==t1*7117827221l6*2111=5o9*41b-=37be87pi11do=0-f90040
|
||||
*/
|
||||
private String picUri;
|
||||
/**
|
||||
|
||||
@ -31,12 +31,12 @@ import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper;
|
||||
import com.zhgd.xmgl.modules.worker.service.IWorkerAttendanceService;
|
||||
import com.zhgd.xmgl.modules.worker.service.impl.WorkerAttendanceServiceImpl;
|
||||
import com.zhgd.xmgl.security.util.SecurityUtils;
|
||||
import com.zhgd.xmgl.util.Base64Util;
|
||||
import com.zhgd.xmgl.util.HikvisionUtil;
|
||||
import com.zhgd.xmgl.util.PathUtil;
|
||||
import com.zhgd.xmgl.util.X509TrustManagerUtil;
|
||||
import com.zhgd.xmgl.util.*;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
@ -260,6 +260,86 @@ public class HikvisionCall {
|
||||
return Result.ok();
|
||||
}
|
||||
|
||||
@ApiOperation(value = "服务挂了主动获取门禁点事件的人员通行记录", notes = "服务挂了主动获取门禁点事件的人员通行记录", httpMethod = "POST")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = false, dataType = "String"),
|
||||
@ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "body", required = true, dataType = "String"),
|
||||
@ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "body", required = true, dataType = "String"),
|
||||
})
|
||||
@PostMapping(value = "/getDoorEvents")
|
||||
public Result getDoorEvents(@ApiIgnore @RequestBody HashMap<String, Object> paramMap) {
|
||||
String startTime = MapUtils.getString(paramMap, "startTime");
|
||||
String endTime = MapUtils.getString(paramMap, "endTime");
|
||||
DateUtils.checkLegalDate19(startTime);
|
||||
DateUtils.checkLegalDate19(endTime);
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("startTime", DateUtils.getISO8601Str(DateUtil.parse(startTime)));
|
||||
param.put("endTime", DateUtils.getISO8601Str(DateUtil.parse(endTime)));
|
||||
String projectSn = MapUtils.getString(paramMap, "projectSn");
|
||||
LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<Project>()
|
||||
.eq(Project::getSyncHikvision, 1);
|
||||
if (StringUtils.isNotBlank(projectSn)) {
|
||||
queryWrapper.eq(Project::getProjectSn, projectSn);
|
||||
}
|
||||
List<Project> projects = projectMapper.selectList(queryWrapper);
|
||||
for (Project project : projects) {
|
||||
List<UfaceDev> ufaceDevs = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>()
|
||||
.eq(UfaceDev::getProjectSn, project.getProjectSn()));
|
||||
for (UfaceDev ufaceDev : ufaceDevs) {
|
||||
param.put("doorIndexCode", ufaceDev.getDevSn());
|
||||
param.put("pageNo", 1);
|
||||
Integer total = 0;
|
||||
do {
|
||||
String rs = getDoorEventsForHttp(project, param);
|
||||
JSONObject joData = HikvisionUtil.getJSONObjectData(rs);
|
||||
if (joData != null) {
|
||||
total = joData.getInteger("total");
|
||||
if (!Objects.equals(total, 0)) {
|
||||
JSONArray listJa = joData.getJSONArray("list");
|
||||
for (int i = 0; i < listJa.size(); i++) {
|
||||
JSONObject listJo = listJa.getJSONObject(i);
|
||||
String eventTime = listJo.getString("eventTime");
|
||||
String personId = listJo.getString("personId");
|
||||
String personName = listJo.getString("personName");
|
||||
String doorIndexCode = listJo.getString("doorIndexCode");
|
||||
String picUri = listJo.getString("picUri");
|
||||
String svrIndexCode = listJo.getString("svrIndexCode");
|
||||
WorkerInfo workerInfo = workerInfoMapper.selectById(personId);
|
||||
if (workerInfo == null) {
|
||||
log.error("未找到该人员信息,personName:{}", personName);
|
||||
continue;
|
||||
}
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
String time = DateUtil.formatDateTime(DateUtil.parse(eventTime));
|
||||
map.put("passTime", time);
|
||||
map.put("idCard", workerInfo.getIdCard());
|
||||
map.put("attendanceNumber", workerInfo.getAttendanceNumber());
|
||||
int passType = workerAttendanceServiceImpl.getPassType(ufaceDev, time);
|
||||
map.put("direction", passType);
|
||||
map.put("passType", 2);
|
||||
map.put("projectCode", workerInfo.getProjectSn());
|
||||
map.put("devCode", doorIndexCode);
|
||||
|
||||
try {
|
||||
HikvisionEventsPictureRq rq = new HikvisionEventsPictureRq();
|
||||
rq.setPicUri(picUri);
|
||||
rq.setSvrIndexCode(svrIndexCode);
|
||||
map.put("faceUrl", saveToLocal(getHikvisionEventsPicture(rq, project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
workerAttendanceService.saveExternalPassRecord(map);
|
||||
}
|
||||
param.put("pageNo", param.getIntValue("pageNo") + 1);
|
||||
}
|
||||
}
|
||||
} while (total > 0);
|
||||
}
|
||||
}
|
||||
return Result.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试查询组织
|
||||
*
|
||||
@ -1049,6 +1129,9 @@ public class HikvisionCall {
|
||||
String host = "https://" + artemisConfigHost;
|
||||
String body = JSONObject.toJSONString(rq);
|
||||
String rs = HikvisionUtil.doPost(host, path, body, null, artemisConfigAppKey, artemisConfigAppSecret);
|
||||
if (rs == null) {
|
||||
return null;
|
||||
}
|
||||
JSONObject rsJo = JSONObject.parseObject(rs);
|
||||
String code = rsJo.getString("code");
|
||||
if (Objects.equals(code, "0")) {
|
||||
@ -1517,5 +1600,27 @@ public class HikvisionCall {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询门禁点事件v2
|
||||
*
|
||||
* @param project
|
||||
* @param param
|
||||
*/
|
||||
public String getDoorEventsForHttp(Project project, JSONObject param) {
|
||||
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
|
||||
return null;
|
||||
}
|
||||
final String ARTEMIS_PATH = "/artemis";
|
||||
final String path = ARTEMIS_PATH + "/api/acs/v2/door/events";
|
||||
String host = "https://" + project.getArtemisConfigHost();
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("pageNo", param.getIntValue("pageNo"));
|
||||
jo.put("pageSize", 500);
|
||||
//ISO8601时间格式
|
||||
jo.put("startTime", param.getString("startTime"));
|
||||
jo.put("endTime", param.getString("endTime"));
|
||||
jo.put("doorIndexCode", param.getString("doorIndexCode"));
|
||||
return HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@ import com.zhgd.xmgl.modules.worker.mapper.*;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.time.DateFormatUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -381,4 +382,5 @@ public class HousingDataCall {
|
||||
}
|
||||
uploadExecuteRecordMapper.insert(uploadExecuteRecord);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,6 +4,8 @@ package com.zhgd.xmgl.util;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.zhgd.jeecg.common.execption.OpenAlertException;
|
||||
import org.apache.commons.lang3.time.DateFormatUtils;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
@ -559,11 +561,6 @@ public class DateUtils {
|
||||
return DateUtil.parse(str);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println(getNowWeekAllDayList());
|
||||
System.out.println(getDateTimeStrList(100, "HH:mm"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否正确的日期格式:1:yyyy-MM-dd
|
||||
*
|
||||
@ -587,4 +584,57 @@ public class DateUtils {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取ISO8601时间,秒级,如2024-04-10T09:57:41+08:00
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static String getISO8601Str(Date date) {
|
||||
String pattern = "YYYY-MM-dd'T'HH:mm:ssZZ";
|
||||
return DateFormatUtils.format(date, pattern);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 判断时间格式 格式必须为“yyyy-MM-dd HH:mm:ss”
|
||||
*
|
||||
* @param sDate
|
||||
* @return
|
||||
*/
|
||||
public static void checkLegalDate19(String sDate) {
|
||||
int legalLen = 19;
|
||||
if ((sDate == null) || (sDate.length() != legalLen)) {
|
||||
throw new OpenAlertException("时间格式格式必须为yyyy-MM-dd HH:mm:ss");
|
||||
}
|
||||
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
try {
|
||||
Date date = formatter.parse(sDate);
|
||||
boolean equals = sDate.equals(formatter.format(date));
|
||||
if (!equals) {
|
||||
throw new OpenAlertException("时间格式格式必须为yyyy-MM-dd HH:mm:ss");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new OpenAlertException("时间格式格式必须为yyyy-MM-dd HH:mm:ss");
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
checkLegalDate19("2024-04-10");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
try {
|
||||
checkLegalDate19("2024-04-10 00-00:00");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
try {
|
||||
checkLegalDate19("2024-04-10 00:00:00");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.zhgd.xmgl.util;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@ -101,6 +102,9 @@ public class HikvisionUtil {
|
||||
* @return
|
||||
*/
|
||||
public static JSONObject getJSONObjectData(String rs) {
|
||||
if (StrUtil.isBlank(rs)) {
|
||||
return null;
|
||||
}
|
||||
JSONObject rsJo = JSONObject.parseObject(rs);
|
||||
String code = rsJo.getString("code");
|
||||
if (Objects.equals(code, "0")) {
|
||||
@ -112,6 +116,9 @@ public class HikvisionUtil {
|
||||
}
|
||||
|
||||
public static JSONArray getJSONArrayData(String rs) {
|
||||
if (StrUtil.isBlank(rs)) {
|
||||
return null;
|
||||
}
|
||||
JSONObject rsJo = JSONArray.parseObject(rs);
|
||||
String code = rsJo.getString("code");
|
||||
if (Objects.equals(code, "0")) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user