bug修复

This commit is contained in:
guo 2024-04-10 13:36:06 +08:00
parent 3d03055709
commit fe62c751cb
5 changed files with 175 additions and 11 deletions

View File

@ -11,11 +11,11 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
public class HikvisionEventsPictureRq { public class HikvisionEventsPictureRq {
/** /**
* 图片存储服务器唯一标识提供picUri处会提供此字段 * 图片存储服务器唯一标识提供picUri处会提供此字段如49a6fec4-e368-428d-baff-4189a1383829
*/ */
private String svrIndexCode; private String svrIndexCode;
/** /**
* 图片的相对地址 * 图片的相对地址/pic?bd00=c002l7f-do061b*91ee599f-2857f96b7*571==sp**117==t1*7117827221l6*2111=5o9*41b-=37be87pi11do=0-f90040
*/ */
private String picUri; private String picUri;
/** /**

View File

@ -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.IWorkerAttendanceService;
import com.zhgd.xmgl.modules.worker.service.impl.WorkerAttendanceServiceImpl; import com.zhgd.xmgl.modules.worker.service.impl.WorkerAttendanceServiceImpl;
import com.zhgd.xmgl.security.util.SecurityUtils; import com.zhgd.xmgl.security.util.SecurityUtils;
import com.zhgd.xmgl.util.Base64Util; import com.zhgd.xmgl.util.*;
import com.zhgd.xmgl.util.HikvisionUtil; import io.swagger.annotations.ApiImplicitParam;
import com.zhgd.xmgl.util.PathUtil; import io.swagger.annotations.ApiImplicitParams;
import com.zhgd.xmgl.util.X509TrustManagerUtil;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@ -260,6 +260,86 @@ public class HikvisionCall {
return Result.ok(); 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 host = "https://" + artemisConfigHost;
String body = JSONObject.toJSONString(rq); String body = JSONObject.toJSONString(rq);
String rs = HikvisionUtil.doPost(host, path, body, null, artemisConfigAppKey, artemisConfigAppSecret); String rs = HikvisionUtil.doPost(host, path, body, null, artemisConfigAppKey, artemisConfigAppSecret);
if (rs == null) {
return null;
}
JSONObject rsJo = JSONObject.parseObject(rs); JSONObject rsJo = JSONObject.parseObject(rs);
String code = rsJo.getString("code"); String code = rsJo.getString("code");
if (Objects.equals(code, "0")) { if (Objects.equals(code, "0")) {
@ -1517,5 +1600,27 @@ public class HikvisionCall {
return null; 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());
}
} }

View File

@ -17,6 +17,7 @@ import com.zhgd.xmgl.modules.worker.mapper.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils; 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.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -381,4 +382,5 @@ public class HousingDataCall {
} }
uploadExecuteRecordMapper.insert(uploadExecuteRecord); uploadExecuteRecordMapper.insert(uploadExecuteRecord);
} }
} }

View File

@ -4,6 +4,8 @@ package com.zhgd.xmgl.util;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil; 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.DateFormat;
import java.text.ParseException; import java.text.ParseException;
@ -559,11 +561,6 @@ public class DateUtils {
return DateUtil.parse(str); 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 * 是否正确的日期格式1:yyyy-MM-dd
* *
@ -587,4 +584,57 @@ public class DateUtils {
} }
return false; 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();
}
}
} }

View File

@ -1,5 +1,6 @@
package com.zhgd.xmgl.util; package com.zhgd.xmgl.util;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@ -101,6 +102,9 @@ public class HikvisionUtil {
* @return * @return
*/ */
public static JSONObject getJSONObjectData(String rs) { public static JSONObject getJSONObjectData(String rs) {
if (StrUtil.isBlank(rs)) {
return null;
}
JSONObject rsJo = JSONObject.parseObject(rs); JSONObject rsJo = JSONObject.parseObject(rs);
String code = rsJo.getString("code"); String code = rsJo.getString("code");
if (Objects.equals(code, "0")) { if (Objects.equals(code, "0")) {
@ -112,6 +116,9 @@ public class HikvisionUtil {
} }
public static JSONArray getJSONArrayData(String rs) { public static JSONArray getJSONArrayData(String rs) {
if (StrUtil.isBlank(rs)) {
return null;
}
JSONObject rsJo = JSONArray.parseObject(rs); JSONObject rsJo = JSONArray.parseObject(rs);
String code = rsJo.getString("code"); String code = rsJo.getString("code");
if (Objects.equals(code, "0")) { if (Objects.equals(code, "0")) {