package foundation.icall.stamp; import java.util.Date; import foundation.dao.Filter; import foundation.data.entity.Entity; import foundation.data.object.DataObject; import foundation.data.object.EntitySaver; import foundation.icall.ICall; import foundation.persist.NamedSQL; import foundation.persist.SQLRunner; import foundation.persist.source.NamedDataSource; import foundation.util.Util; public class Stamp { private ICall iCall; private NamedDataSource remoteSource; private Date localValue; private Date remoteValue; private boolean active; private boolean needClearHistory; public Stamp() { needClearHistory = false; } public void init(ICall iCall, NamedDataSource remoteSource) { this.iCall = iCall; this.remoteSource = remoteSource; active = false; localValue = null; remoteValue = null; } public void load() throws Exception { //1. 如果没有配置时间戳字段,不需要加载 String stampField = iCall.getStampField(); if (Util.isEmpty(stampField)) { active = false; needClearHistory = true; return; } //2. 加载本地时间戳 loadLocal(); //3. 加载远程时间戳 loadRemote(); //4. active = (localValue != null) && (remoteValue != null); } public void loadLocal() throws Exception { String callId = iCall.getId(); DataObject dataObject = DataObject.getInstance("sys_interface_stamp"); Entity entity = dataObject.getTableEntity(new Filter("interface_id", callId)); if (iCall.isPermitEmptyStamp() && entity == null) { return; } Date value = new Date(0); if (entity == null) { EntitySaver saver = dataObject.createEntitySaver(); saver.set("id", callId); saver.set("interface_id", callId); saver.set("stamp_time", value); saver.insert(); needClearHistory = true; } else { value = entity.getDate("stamp_time", null); if (value == null) { value = new Date(0); needClearHistory = true; } } localValue = value; } public void saveLocal() throws Exception { if (!active) { return; } DataObject dataObject = DataObject.getInstance("sys_interface_stamp"); EntitySaver saver = dataObject.createEntitySaver(); String iCallId = iCall.getId(); saver.set("id", iCallId); saver.set("interface_id", iCallId); saver.set("stamp_time", remoteValue); saver.update(); } public void loadRemote() throws Exception { NamedSQL namedSQL = NamedSQL.getInstance(remoteSource.getDBaseType(), "getMaxRemoteStamp"); namedSQL.setParam("tableName", iCall.getURL()); namedSQL.setParam("fieldName", iCall.getStampField()); remoteValue = SQLRunner.getDate(remoteSource, namedSQL); } public boolean isNeedClearHistory() { return needClearHistory; } public boolean isActive() { return active; } public Date getLocalValue() { return localValue; } public String getLocalValueString() { return Util.DataTimeToString(localValue); } public Date getRemoteValue() { return remoteValue; } }