Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/ChangLongDataManagerImplFJSSSYY.java =================================================================== diff -u -r28005 -r28055 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/ChangLongDataManagerImplFJSSSYY.java (.../ChangLongDataManagerImplFJSSSYY.java) (revision 28005) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/ChangLongDataManagerImplFJSSSYY.java (.../ChangLongDataManagerImplFJSSSYY.java) (revision 28055) @@ -17,6 +17,7 @@ import org.springframework.integration.smb.session.SmbShare; import org.springframework.stereotype.Service; +import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.disinfectsystem.entity.basedatamanager.deviceinterface.DeviceInterface; import com.forgon.disinfectsystem.entity.basedatamanager.rinser.Rinser; @@ -27,8 +28,13 @@ import com.forgon.log.service.LogManager; import com.forgon.tools.date.DateTools; import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.ForgonDateUtils; - +/** + * 新华长隆多舱清洗机数据处理(FJSSSYY-1) + * @author ZhouPeiMian + * @since 2020-05-22 + */ @Service("changLongDataManagerTargetFJSSSYY") public class ChangLongDataManagerImplFJSSSYY implements DeviceDataManager{ @@ -37,6 +43,8 @@ private ObjectDao objectDao; + private DateQueryAdapter dateQueryAdapter; + private static final Logger logger = Logger .getLogger(ChangLongDataManagerImplFJSSSYY.class); @@ -48,6 +56,10 @@ this.appLogManager = appLogManager; } + public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { + this.dateQueryAdapter = dateQueryAdapter; + } + /** * 从接口读取数据和存入数据库 */ @@ -83,13 +95,14 @@ List washDatas = washDataReadAndSave(smbForm,devInterface.getId(), machineNo); if(CollectionUtils.isNotEmpty(washDatas)){ refreshWashRecordAmounts(devInterface.getId().toString(), machineNo, washDatas); + // 顺利读取到清洗机数据才把文件移动到backUp文件夹 + SmbFile desFile = session.createSmbFileObject(backUp+name); + smbForm.copyTo(desFile); + smbForm.delete(); } else{ logger.warn(name); } - SmbFile desFile = session.createSmbFileObject(backUp+name); - smbForm.copyTo(desFile); - smbForm.delete(); } } catch (IOException e){ @@ -155,6 +168,12 @@ } if(CollectionUtils.isNotEmpty(washDataList)){ for (WashDataOfChangLong data : washDataList) { + if(data.getTotalCycleTime() == null && data.getAO() == null && data.getEstimation() == null){ + // 读取到不完整的数据,可能清洗机正在写入数据,则不保存这个文件的数据,也不移动文件 + appLogManager.saveLog(AcegiHelper.getLoginUser(), + Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, "清洗机数据文件存在不完整数据,文件名称:" + remoteFile.getName()); + return null; + } data.setMachineNo(machineNo); data.setDeviceInterfaceID(devInterfaceId); List itemList = data.getWashDataItems(); @@ -192,13 +211,12 @@ // 根据清洗机数据的开始和结束时间,匹配清洗记录 for (Rinser rinser : rinsers) { for(WashDataOfChangLong washData : washDatas) { - String startTimeStr = washData.getStartedTime(); - String endTimeStr = washData.getCompletedTime(); - /*Date startTime = DateTools.coverStrToDate(startTimeStr, DateTools.COMMON_DATE_HMS); - Date endTime = DateTools.coverStrToDate(endTimeStr, DateTools.COMMON_DATE_HMS);*/ - String hql = String.format(" where po.startDate <= '%s'" - + " and po.endDate >= '%s'" - + " and po.rinserId = %s", startTimeStr, endTimeStr, rinser.getId().toString()); + Date startTime = washData.getStartedDateTime(); + Date beginStartTime = new Date(startTime.getTime() - 5*60*1000); + Date endStartTime = new Date(startTime.getTime() + 5*60*1000); + String beginStartTimeStr = ForgonDateUtils.safelyFormatDate(beginStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + String endStartTimeStr = ForgonDateUtils.safelyFormatDate(endStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + String hql = String.format(" where po.rinserId = %s and %s ", rinser.getId().toString(), dateQueryAdapter.dateAreaSql("po.startDate", beginStartTimeStr, endStartTimeStr, false)); WashAndDisinfectRecord wd = (WashAndDisinfectRecord) objectDao.getBySql(WashAndDisinfectRecord.class.getSimpleName(), hql); if(wd != null) { Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImplForFJSSSYY.java =================================================================== diff -u -r28005 -r28055 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImplForFJSSSYY.java (.../XinHuaDataManagerImplForFJSSSYY.java) (revision 28005) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImplForFJSSSYY.java (.../XinHuaDataManagerImplForFJSSSYY.java) (revision 28055) @@ -4,6 +4,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; +import java.util.Date; import java.util.List; import jcifs.smb.SmbFile; @@ -15,6 +16,7 @@ import org.springframework.integration.smb.session.SmbSession; import org.springframework.integration.smb.session.SmbShare; +import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.disinfectsystem.entity.basedatamanager.deviceinterface.DeviceInterface; import com.forgon.disinfectsystem.entity.basedatamanager.rinser.Rinser; @@ -25,14 +27,21 @@ import com.forgon.log.service.LogManager; import com.forgon.tools.date.DateTools; import com.forgon.tools.hibernate.ObjectDao; - +import com.forgon.tools.util.ForgonDateUtils; +/** + * 新华自动清洗机数据处理(FJSSSYY-1) + * @author ZhouPeiMian + * @since 2020-05-22 + */ public class XinHuaDataManagerImplForFJSSSYY implements DeviceDataManager{ private static final Logger logger = Logger.getLogger(XinHuaDataManagerImplForFJSSSYY.class); private ObjectDao objectDao; private LogManager appLogManager; + + private DateQueryAdapter dateQueryAdapter; public void setAppLogManager(LogManager appLogManager) { this.appLogManager = appLogManager; @@ -42,6 +51,10 @@ this.objectDao = objectDao; } + public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { + this.dateQueryAdapter = dateQueryAdapter; + } + @Override public void readAndSaveRecord(DeviceInterface devInterface, String machineNo, String brand, String isAutoCompleteSterilization) { @@ -74,13 +87,14 @@ List washDatas = washDataReadAndSave(smbForm,devInterface.getId(), machineNo); if(CollectionUtils.isNotEmpty(washDatas)){ refreshWashRecordAmounts(devInterface.getId().toString(), machineNo, washDatas); + // 成功读取到 + SmbFile desFile = session.createSmbFileObject(backUp+name); + smbForm.copyTo(desFile); + smbForm.delete(); } else{ logger.warn(name); } - SmbFile desFile = session.createSmbFileObject(backUp+name); - smbForm.copyTo(desFile); - smbForm.delete(); } } catch (IOException e){ @@ -102,11 +116,12 @@ // 根据清洗机数据的开始和结束时间,匹配清洗记录 for (Rinser rinser : rinsers) { for(WashDataOfChangLong washData : washDatas) { - String startTimeStr = washData.getStartedTime(); - String endTimeStr = washData.getCompletedTime(); - String hql = String.format(" where po.startDate <= '%s'" - + " and po.endDate >= '%s'" - + " and po.rinserId = %s", startTimeStr, endTimeStr, rinser.getId().toString()); + Date startTime = washData.getStartedDateTime(); + Date beginStartTime = new Date(startTime.getTime() - 5*60*1000); + Date endStartTime = new Date(startTime.getTime() + 5*60*1000); + String beginStartTimeStr = ForgonDateUtils.safelyFormatDate(beginStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + String endStartTimeStr = ForgonDateUtils.safelyFormatDate(endStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + String hql = String.format(" where po.rinserId = %s and %s ", rinser.getId().toString(), dateQueryAdapter.dateAreaSql("po.startDate", beginStartTimeStr, endStartTimeStr, false)); WashAndDisinfectRecord wd = (WashAndDisinfectRecord) objectDao.getBySql(WashAndDisinfectRecord.class.getSimpleName(), hql); if(wd != null) { @@ -226,6 +241,16 @@ //System.out.println("T1/T2/T3 : " + T1 + "/" + T2 + "/" + T3); } } + if(CollectionUtils.isNotEmpty(washDataList)){ + for (WashDataOfChangLong data : washDataList) { + if(data.getTotalCycleTime() == null && data.getCompletedTime() == null && data.getEndStatus() == null){ + // 读取到不完整的数据,可能清洗机正在写入数据,则不保存这个文件的数据,也不移动文件 + appLogManager.saveLog(AcegiHelper.getLoginUser(), + Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, "清洗机数据文件存在不完整数据,文件名称:" + smbForm.getName()); + return null; + } + } + } objectDao.batchSaveOrUpdate(washDataList); return washDataList; } catch (Exception e) {