海康数据同步
This commit is contained in:
commit
d567d9ea0b
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,12 @@
|
|||
# 平台的ip端口
|
||||
HOST=10.57.0.57:443
|
||||
# 密钥appkey
|
||||
APP_KEY=27970694
|
||||
# 秘钥appSecret
|
||||
APP_SECRET=8BZkFgxTwLzh0KoLz7VC
|
||||
# 获取指定门禁设备数据,门禁点唯一标识,为空表示全部,多个以英文逗号分隔
|
||||
DOOR_INDEX_CODES=
|
||||
# 考勤打卡记录建模ID
|
||||
kqdkjl_modeId=207
|
||||
# 考勤打卡记录查询台账ID
|
||||
kqdkjl_cusId=1254
|
||||
|
|
@ -0,0 +1,264 @@
|
|||
package weaver.interfaces.jthr.cron.door;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.huawei.shade.org.joda.time.DateTime;
|
||||
import com.huawei.shade.org.joda.time.format.DateTimeFormat;
|
||||
import com.huawei.shade.org.joda.time.format.DateTimeFormatter;
|
||||
import com.weaver.general.Util;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.hsqldb.lib.StringUtil;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.formmode.setup.ModeRightInfo;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.interfaces.jthr.cron.utils.HikVisionApiUtil;
|
||||
import weaver.interfaces.schedule.BaseCronJob;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class SyncDoorDataJob extends BaseCronJob {
|
||||
|
||||
private String ksrqParam;
|
||||
|
||||
private String jsrqParam;
|
||||
|
||||
private String ts;
|
||||
|
||||
BaseBean baseBean = new BaseBean();
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
baseBean.writeLog("begin do SyncDoorDataJob invoke ...");
|
||||
baseBean.writeLog("param:" + ksrqParam + "、" + jsrqParam + "、" + ts);
|
||||
RecordSet rs = new RecordSet();
|
||||
Date date = new Date();
|
||||
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||
String format = dateFormat.format(date);
|
||||
LocalDate currentDate = LocalDate.now();
|
||||
try {
|
||||
int jgts = 7;
|
||||
if (StringUtils.isNotEmpty(ts)) {
|
||||
jgts = Integer.parseInt(ts);
|
||||
}
|
||||
// 获取前七天的日期
|
||||
LocalDate previousDate = currentDate.minusDays(jgts);
|
||||
java.time.format.DateTimeFormatter formatter = java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
String formattedDate = previousDate.format(formatter);
|
||||
|
||||
if (StringUtils.isNotEmpty(jsrqParam) && StringUtils.isNotEmpty(ksrqParam)) {
|
||||
format = jsrqParam;
|
||||
formattedDate = ksrqParam;
|
||||
}
|
||||
baseBean.writeLog("SyncDoorDataJob formattedDate is:" + formattedDate + "、" + format);
|
||||
String endTime = format + "T23:59:59+08:00";
|
||||
String startTime = formattedDate + "T00:00:01+08:00";
|
||||
|
||||
SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");
|
||||
SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm:ss");
|
||||
String modeId = baseBean.getPropValue("hikvision_zm_prop", "kqdkjl_modeId");
|
||||
String cusId = baseBean.getPropValue("hikvision_zm_prop", "kqdkjl_cusId");
|
||||
|
||||
String sql = "select * from uf_kqdkjl where dkrq >= '" + formattedDate + "' and dkrq <= '" + format + "'";
|
||||
baseBean.writeLog("SyncDoorDataJob sql is:" + sql);
|
||||
rs.execute(sql);
|
||||
Set<String> keySet = new HashSet<>();
|
||||
while (rs.next()) {
|
||||
String xmTemp = rs.getString("xm");
|
||||
String zjhmTemp = rs.getString("zjhm");
|
||||
String dkrgTemp = rs.getString("dkrq");
|
||||
String dksjTemp = rs.getString("dksj");
|
||||
keySet.add(xmTemp + "_" + zjhmTemp + "_" + dkrgTemp + "_" + dksjTemp);
|
||||
}
|
||||
|
||||
// 获取身份证与手机号对应关系
|
||||
Map<String, String> sfzAndSjhMap = new HashMap<>();
|
||||
rs.execute("select certificatenum, mobile from hrmresource where certificatenum is not null and certificatenum != '' ORDER BY created ASC");
|
||||
while (rs.next()) {
|
||||
String certificatenum = rs.getString("certificatenum");
|
||||
String mobile = rs.getString("mobile");
|
||||
if (org.apache.commons.lang3.StringUtils.isEmpty(certificatenum) || org.apache.commons.lang3.StringUtils.isEmpty(mobile)) {
|
||||
continue;
|
||||
}
|
||||
sfzAndSjhMap.put(certificatenum, mobile);
|
||||
}
|
||||
String doorIndexCodeStr = baseBean.getPropValue("hikvision_zm_prop", "DOOR_INDEX_CODES");
|
||||
String HOST = baseBean.getPropValue("hikvision_zm_prop", "HOST");
|
||||
String APP_KEY = baseBean.getPropValue("hikvision_zm_prop", "APP_KEY");
|
||||
String APP_SECRET = baseBean.getPropValue("hikvision_zm_prop", "APP_SECRET");
|
||||
String[] doorIndexCodes = null;
|
||||
|
||||
Map<String, Object> map = new HashMap<String, Object>();
|
||||
map.put("startTime", startTime);
|
||||
map.put("endTime", endTime);
|
||||
map.put("pageSize", "1000");
|
||||
|
||||
if (StringUtils.isNotEmpty(doorIndexCodeStr)) {
|
||||
doorIndexCodes = doorIndexCodeStr.split(",");
|
||||
for (String s : doorIndexCodes) {
|
||||
int pageNo = 1;
|
||||
boolean isGoing = true;
|
||||
List<String> tempIndexCodes = new ArrayList<>();
|
||||
tempIndexCodes.add(s);
|
||||
map.put("doorIndexCodes", tempIndexCodes.toArray());
|
||||
while (isGoing) {
|
||||
try {
|
||||
map.put("pageNo", String.valueOf(pageNo));
|
||||
baseBean.writeLog("SyncDoorDataJob map:" + map);
|
||||
String result = HikVisionApiUtil.callPostApiList("/api/acs/v2/door/events", map, HOST, APP_KEY, APP_SECRET);
|
||||
JSONObject obj = JSON.parseObject(result);
|
||||
JSONObject dataObj = obj.getJSONObject("data");
|
||||
JSONArray jsonList = dataObj.getJSONArray("list");
|
||||
if (dataObj.getInteger("totalPage") > pageNo) {
|
||||
pageNo += 1;
|
||||
} else {
|
||||
isGoing = false;
|
||||
}
|
||||
baseBean.writeLog("jsonList size:" + jsonList.size());
|
||||
List<List> insertParams = new ArrayList<>();
|
||||
for (int i = 0; i < jsonList.size(); i++) {
|
||||
JSONObject jsonObject = jsonList.getJSONObject(i);
|
||||
String certNo = Util.null2String(jsonObject.getString("certNo"));
|
||||
if (StringUtil.isEmpty(certNo)) {
|
||||
continue;
|
||||
}
|
||||
String personName = jsonObject.getString("personName");
|
||||
String eventTime = jsonObject.getString("eventTime");
|
||||
String[] arr = getDateStrFromIso8601(eventTime).split("\\s+");
|
||||
String signDate = arr[0];
|
||||
String signTime = arr[1];
|
||||
String signTimeNew = signTime;
|
||||
if (org.apache.commons.lang3.StringUtils.isNotEmpty(signTime)) {
|
||||
signTime = signTime.substring(0, signTime.length() - 3);
|
||||
}
|
||||
String keyTemp = personName + "_" + certNo + "_" + signDate + "_" + signTime;
|
||||
if ((!org.apache.commons.collections.CollectionUtils.isEmpty(keySet)) && keySet.contains(keyTemp)) {
|
||||
continue;
|
||||
}
|
||||
String sjh = sfzAndSjhMap.get(certNo);
|
||||
List insertParam = new ArrayList<String>();
|
||||
insertParam.add(personName);
|
||||
insertParam.add(certNo);
|
||||
insertParam.add(signDate);
|
||||
insertParam.add(signTime);
|
||||
insertParam.add(signTimeNew);
|
||||
insertParam.add(sjh);
|
||||
insertParam.add(modeId);
|
||||
insertParam.add(UUID.randomUUID().toString());
|
||||
insertParam.add("1");
|
||||
insertParam.add("0");
|
||||
insertParam.add(sdfDate.format(new Date()));
|
||||
insertParam.add(sdfTime.format(new Date()));
|
||||
insertParams.add(insertParam);
|
||||
}
|
||||
if (!org.apache.commons.collections.CollectionUtils.isEmpty(insertParams)) {
|
||||
baseBean.writeLog("insertParams result:" + insertParams.size());
|
||||
String insertSql = "INSERT INTO uf_kqdkjl(xm, zjhm, dkrq, dksj, dksjwb, sjh, formmodeid, MODEUUID, modedatacreater, " +
|
||||
"modedatacreatertype, modedatacreatedate, modedatacreatetime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
rs.executeBatchSql(insertSql, insertParams);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
isGoing = false;
|
||||
baseBean.writeLog("SyncDoorDataJob dt error:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//权限重构
|
||||
ModeRightInfo modeRightInfo = new ModeRightInfo();
|
||||
modeRightInfo.setNewRight(true);
|
||||
modeRightInfo.editModeDataShare(1, Integer.parseInt(modeId), Integer.parseInt(cusId));
|
||||
} else {
|
||||
int pageNo = 1;
|
||||
boolean isGoing = true;
|
||||
while (isGoing) {
|
||||
try {
|
||||
map.put("pageNo", String.valueOf(pageNo));
|
||||
baseBean.writeLog("SyncDoorDataJob map:" + map);
|
||||
String result = HikVisionApiUtil.callPostApiList("/api/acs/v2/door/events", map, HOST, APP_KEY, APP_SECRET);
|
||||
JSONObject obj = JSON.parseObject(result);
|
||||
JSONObject dataObj = obj.getJSONObject("data");
|
||||
JSONArray jsonList = dataObj.getJSONArray("list");
|
||||
if (dataObj.getInteger("totalPage") > pageNo) {
|
||||
pageNo += 1;
|
||||
} else {
|
||||
isGoing = false;
|
||||
}
|
||||
baseBean.writeLog("jsonList size:" + jsonList.size());
|
||||
List<List> insertParams = new ArrayList<>();
|
||||
for (int i = 0; i < jsonList.size(); i++) {
|
||||
JSONObject jsonObject = jsonList.getJSONObject(i);
|
||||
if (i == 0) {
|
||||
baseBean.writeLog("jsonObject:" + jsonObject);
|
||||
}
|
||||
String certNo = Util.null2String(jsonObject.getString("certNo"));
|
||||
if (i == 0) {
|
||||
baseBean.writeLog("certNo:" + certNo);
|
||||
}
|
||||
if (StringUtil.isEmpty(certNo)) {
|
||||
continue;
|
||||
}
|
||||
String personName = jsonObject.getString("personName");
|
||||
String eventTime = jsonObject.getString("eventTime");
|
||||
String[] arr = getDateStrFromIso8601(eventTime).split("\\s+");
|
||||
String signDate = arr[0];
|
||||
String signTime = arr[1];
|
||||
String signTimeNew = signTime;
|
||||
if (org.apache.commons.lang3.StringUtils.isNotEmpty(signTime)) {
|
||||
signTime = signTime.substring(0, signTime.length() - 3);
|
||||
}
|
||||
String keyTemp = personName + "_" + certNo + "_" + signDate + "_" + signTime;
|
||||
if ((!org.apache.commons.collections.CollectionUtils.isEmpty(keySet)) && keySet.contains(keyTemp)) {
|
||||
continue;
|
||||
}
|
||||
String sjh = sfzAndSjhMap.get(certNo);
|
||||
List insertParam = new ArrayList<String>();
|
||||
insertParam.add(personName);
|
||||
insertParam.add(certNo);
|
||||
insertParam.add(signDate);
|
||||
insertParam.add(signTime);
|
||||
insertParam.add(signTimeNew);
|
||||
insertParam.add(sjh);
|
||||
insertParam.add(modeId);
|
||||
insertParam.add(UUID.randomUUID().toString());
|
||||
insertParam.add("1");
|
||||
insertParam.add("0");
|
||||
insertParam.add(sdfDate.format(new Date()));
|
||||
insertParam.add(sdfTime.format(new Date()));
|
||||
insertParams.add(insertParam);
|
||||
}
|
||||
if (!org.apache.commons.collections.CollectionUtils.isEmpty(insertParams)) {
|
||||
baseBean.writeLog("insertParams result:" + insertParams.size());
|
||||
String insertSql = "INSERT INTO uf_kqdkjl(xm, zjhm, dkrq, dksj, dksjwb, sjh, formmodeid, MODEUUID, modedatacreater, " +
|
||||
"modedatacreatertype, modedatacreatedate, modedatacreatetime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
rs.executeBatchSql(insertSql, insertParams);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
isGoing = false;
|
||||
baseBean.writeLog("SyncDoorDataJob dt error:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
baseBean.writeLog("SyncDoorDataJob error:" + e);
|
||||
}
|
||||
baseBean.writeLog("end do SyncDoorDataJob invoke ...");
|
||||
}
|
||||
|
||||
public String getDateStrFromIso8601(String dateStr){
|
||||
DateTimeFormatter dtf1 = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZZ");
|
||||
DateTime dt= dtf1.parseDateTime(dateStr);
|
||||
DateTimeFormatter dtf2= DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
|
||||
return dt.toString(dtf2);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
package weaver.interfaces.jthr.cron.utils;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
|
||||
import com.hikvision.artemis.sdk.config.ArtemisConfig;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.general.BaseBean;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class HikVisionApiUtil{
|
||||
|
||||
static BaseBean baseBean = new BaseBean();
|
||||
|
||||
private static int BUFFER = 1024;
|
||||
|
||||
private static final String ARTEMIS_PATH = "/artemis";
|
||||
|
||||
|
||||
public static String callPostApiList(String url, Map<String, Object> map, String HOST, String APP_KEY, String APP_SECRET) throws Exception {
|
||||
ArtemisConfig config = new ArtemisConfig();
|
||||
config.setHost(HOST);
|
||||
config.setAppKey(APP_KEY);
|
||||
config.setAppSecret(APP_SECRET);
|
||||
final String getCamsApi = ARTEMIS_PATH + url;
|
||||
String httpType = "https://";
|
||||
if (StringUtils.isNotEmpty(HOST)) {
|
||||
String[] split = HOST.split(":");
|
||||
if (split.length == 2 && !StringUtils.equals(split[1], "443")) {
|
||||
httpType = "http://";
|
||||
}
|
||||
}
|
||||
String finalHttpType = httpType;
|
||||
Map<String, String> path = new HashMap<String, String>(2) {
|
||||
{
|
||||
put(finalHttpType, getCamsApi);
|
||||
}
|
||||
};
|
||||
baseBean.writeLog("callPostApiList:" + HOST + "、" + JSONObject.toJSONString(path));
|
||||
return ArtemisHttpUtil.doPostStringArtemis(config, path, JSON.toJSON(map).toString(),
|
||||
null, null, "application/json");
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue