海康数据同步
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