OriginDateTimeManager.java 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package com.yihu.ehr.service.crawler;
  2. import com.yihu.ehr.util.db.DBSessionFactory;
  3. import com.yihu.ehr.util.operator.DateUtil;
  4. import java.util.Date;
  5. import java.util.HashMap;
  6. public class OriginDateTimeManager {
  7. private static OriginDateTimeManager ourInstance = new OriginDateTimeManager();
  8. private static Long age = (24 * 60 * 60 * 1000L); //过期时间,按秒,默认1天
  9. private HashMap<String, Long> originTimeDiff;
  10. private HashMap<String, Date> lastUpdate;
  11. private OriginDateTimeManager() {
  12. originTimeDiff = new HashMap<>();
  13. lastUpdate = new HashMap<>();
  14. }
  15. public static OriginDateTimeManager getInstance() {
  16. return ourInstance;
  17. }
  18. public Date getRealTime(DBOrigin dataOrigin, DBSessionFactory dbSessionFactory, String datasourceId, Date date) throws Exception {
  19. if (isExpire(datasourceId)) {
  20. updateDiff(dataOrigin, dbSessionFactory, datasourceId);
  21. }
  22. Long diff = originTimeDiff.get(datasourceId);
  23. if (diff == null) {
  24. throw new Exception("时间同步计算异常.");
  25. }
  26. long realTime = date.getTime() + diff;
  27. Date realdate = DateUtil.getSysDateTime();
  28. realdate.setTime(realTime);
  29. realdate = DateUtil.formatYMDToYMDHMS(realdate.toString());
  30. return realdate;
  31. }
  32. private boolean isExpire(String id) {
  33. Date now = new Date();
  34. Date last = lastUpdate.get(id);
  35. if (last == null) {
  36. return true;
  37. }
  38. Long diff = now.getTime() - last.getTime();
  39. return diff > age;
  40. }
  41. private void updateDiff(DBOrigin dataOrigin, DBSessionFactory dbSessionFactory, String datasourceId) {
  42. Date selfNow = DateUtil.getSysDateTime();
  43. Date originNow = dataOrigin.getServerDateTime(dbSessionFactory); //暂时忽略获取时间误差,目前业务逻辑 selfNow < originNow 不会影响采集
  44. if (originNow == null) {
  45. return;
  46. }
  47. Long diff = selfNow.getTime() - originNow.getTime();
  48. lastUpdate.put(datasourceId, selfNow);
  49. originTimeDiff.put(datasourceId, diff);
  50. }
  51. }