1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package com.yihu.ehr.service.crawler;
- import com.yihu.ehr.util.db.DBSessionFactory;
- import com.yihu.ehr.util.operator.DateUtil;
- import java.util.Date;
- import java.util.HashMap;
- public class OriginDateTimeManager {
- private static OriginDateTimeManager ourInstance = new OriginDateTimeManager();
- private static Long age = (24 * 60 * 60 * 1000L); //过期时间,按秒,默认1天
- private HashMap<String, Long> originTimeDiff;
- private HashMap<String, Date> lastUpdate;
- private OriginDateTimeManager() {
- originTimeDiff = new HashMap<>();
- lastUpdate = new HashMap<>();
- }
- public static OriginDateTimeManager getInstance() {
- return ourInstance;
- }
- public Date getRealTime(DBOrigin dataOrigin, DBSessionFactory dbSessionFactory, String datasourceId, Date date) throws Exception {
- if (isExpire(datasourceId)) {
- updateDiff(dataOrigin, dbSessionFactory, datasourceId);
- }
- Long diff = originTimeDiff.get(datasourceId);
- if (diff == null) {
- throw new Exception("时间同步计算异常.");
- }
- long realTime = date.getTime() + diff;
- Date realdate = DateUtil.getSysDateTime();
- realdate.setTime(realTime);
- realdate = DateUtil.formatYMDToYMDHMS(realdate.toString());
- return realdate;
- }
- private boolean isExpire(String id) {
- Date now = new Date();
- Date last = lastUpdate.get(id);
- if (last == null) {
- return true;
- }
- Long diff = now.getTime() - last.getTime();
- return diff > age;
- }
- private void updateDiff(DBOrigin dataOrigin, DBSessionFactory dbSessionFactory, String datasourceId) {
- Date selfNow = DateUtil.getSysDateTime();
- Date originNow = dataOrigin.getServerDateTime(dbSessionFactory); //暂时忽略获取时间误差,目前业务逻辑 selfNow < originNow 不会影响采集
- if (originNow == null) {
- return;
- }
- Long diff = selfNow.getTime() - originNow.getTime();
- lastUpdate.put(datasourceId, selfNow);
- originTimeDiff.put(datasourceId, diff);
- }
- }
|