Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/GetingeDataManagerImpl.java
===================================================================
diff -u -r25399 -r26628
--- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/GetingeDataManagerImpl.java (.../GetingeDataManagerImpl.java) (revision 25399)
+++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/GetingeDataManagerImpl.java (.../GetingeDataManagerImpl.java) (revision 26628)
@@ -1,8 +1,10 @@
package com.forgon.disinfectsystem.maintain.device.service;
import java.io.BufferedReader;
+import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
@@ -12,9 +14,14 @@
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.net.ftp.FTPClient;
+import org.apache.commons.net.ftp.FTPFile;
+import org.apache.commons.net.ftp.FTPFileFilter;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.Session;
@@ -31,11 +38,14 @@
import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerRecord;
import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washData.WashData;
import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord;
+import com.forgon.disinfectsystem.filemanager.CommonFileManager;
+import com.forgon.disinfectsystem.filemanager.FtpFileManager;
+import com.forgon.disinfectsystem.filemanager.SmbFileManager;
import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service.SterilizationRecordManager;
import com.forgon.disinfectsystem.washanddisinfectmanager.washanddisinfectrecord.service.WashAndDisinfectRecordManager;
import com.forgon.log.model.Log;
import com.forgon.log.service.LogManager;
-import com.forgon.tools.db.InitDbConnection;
+import com.forgon.tools.FileSystemHelper;
import com.forgon.tools.hibernate.ObjectDao;
import com.forgon.tools.util.ForgonDateUtils;
/**
@@ -49,12 +59,18 @@
private SterilizationRecordManager sterilizationRecordManager;
private WashAndDisinfectRecordManager washAndDisinfectRecordManager;
private DateQueryAdapter dateQueryAdapter;
- private InitDbConnection dbConnection;
-
-
- public void setDbConnection(InitDbConnection dbConnection) {
- this.dbConnection = dbConnection;
- }
+ private SmbFileManager smbFileManager;
+ private FtpFileManager ftpFileManager;
+ private CommonFileManager commonFileManager;
+ public void setCommonFileManager(CommonFileManager commonFileManager) {
+ this.commonFileManager = commonFileManager;
+ }
+ public void setSmbFileManager(SmbFileManager smbFileManager) {
+ this.smbFileManager = smbFileManager;
+ }
+ public void setFtpFileManager(FtpFileManager ftpFileManager) {
+ this.ftpFileManager = ftpFileManager;
+ }
public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) {
this.dateQueryAdapter = dateQueryAdapter;
@@ -93,6 +109,112 @@
logger.debug(".......devInterface或机器号是空的");
return ;
}
+ readAndSaveRecordCommon(devInterface, machineNo, brand, isAutoCompleteSterilization);
+ /*if(DeviceInterface.INTERFACETYPE_FTP.equals(devInterface.getInterfaceType())){//ftp方式
+ readAndSaveRecordByFtp(devInterface, machineNo, brand, isAutoCompleteSterilization);
+ }else{//共享文件夹方式
+ readAndSaveRecordByShareFolder(devInterface, machineNo, brand, isAutoCompleteSterilization);
+ }*/
+ //readAndSaveRecordByShareFolder(devInterface, machineNo, brand, isAutoCompleteSterilization);
+ }
+
+ /**
+ * 数据处理结束之后的工作,移动文件夹等等
+ */
+ @Override
+ public void end()
+ {
+
+ }
+ /**
+ * 查找文件的机器号和是否清洗机记录,否则就是灭菌记录
+ * @param remoteType
+ * @param ftp
+ * @param ftpFile
+ * @param smbFile
+ * @return
+ */
+ public JSONObject getMachineNoAndIsWashingMachine(String remoteType ,FTPClient ftp, String fileName, SmbFile smbFile){
+ JSONObject obj = new JSONObject();
+ String machineNo = null;
+ boolean IsWashingMachine = true;
+ BufferedReader br = null;
+ InputStreamReader isr = null;
+ InputStream inputStream = null;
+ ByteArrayOutputStream out = null;
+ try {
+ out = new ByteArrayOutputStream();
+ inputStream = commonFileManager.getInputStream(remoteType, ftp, fileName, smbFile, out);
+ //FTP协议规定文件编码格式为ISO-8859-1
+ //读取文件,使用下载文件的方法把文件写入内存,绑定到out流上
+ isr = new InputStreamReader(inputStream);
+ br = new BufferedReader(isr);
+ String line;
+ boolean readedMachineNo = false;
+ boolean readedCP = false;
+ while((line = br.readLine()) != null){
+ if(readedMachineNo && readedCP){
+ break;
+ }
+ line = br.readLine();
+ if(StringUtils.isBlank(line)){
+ continue;
+ }
+ if(line.contains("") && line.contains("")){
+ //是设备号的行
+ machineNo = line.replace("", "").replace("", "").trim();
+ obj.put("machineNo", machineNo);
+ readedMachineNo = true;
+ }
+ if(line.contains("") && line.contains("")){
+ //是设备号的行
+ line = line.replace("", "");
+ line = line.replace("", "");
+ if(StringUtils.isNotBlank(line.trim())){
+ // 有压力数据,不是清洗机
+ IsWashingMachine = false;
+ readedCP = true;
+ }
+ }
+ }
+ obj.put("isWashingMachine", IsWashingMachine);
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("获取机器号和验证是否清洗机异常");
+ }finally{
+ FileSystemHelper.closeInputStream(inputStream, br, isr, out);
+ }
+ return obj;
+ }
+ public String getMachineNo(SmbFile file)
+ {
+ try{
+ BufferedReader br = new BufferedReader(new InputStreamReader(
+ new SmbFileInputStream(file)));
+ String line;
+ while ((line = br.readLine()) != null) {
+ if(line.contains("") && line.contains("")){
+ //是设备号的行
+ line = line.replace("", "");
+ line = line.replace("", "");
+ return line.trim();
+ }
+ }
+ return "";
+ }catch (FileNotFoundException e) {
+ // 捕获File对象生成时的异常
+ e.printStackTrace();
+ return null;
+ } catch (IOException e) {
+ // 捕获BufferedReader对象关闭时的异常
+// e.printStackTrace();
+ logger.warn(e.getMessage());
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, "设备接口连接异常," + e.getMessage());
+ return null;
+ }
+
+ }
+ public void readAndSaveRecordByShareFolder(DeviceInterface devInterface,String machineNo,String brand,String isAutoCompleteSterilization){
SmbSession session=null;
String ip = devInterface.getIP();
String directory = devInterface.getFolderPath();
@@ -109,10 +231,7 @@
SmbShare share = new SmbShare("smb://" + userName +":"+ pwd +"@"+ ip +"/"+ directory +"/");
session = new SmbSession(share);
String backUp = rootURL +"backUp/";
- if(!session.exists(backUp)){
- logger.debug("创建文件夹...");
- session.mkdir(backUp);
- }
+ smbFileManager.makeDirectory(session, backUp);
for (String name : share.list()){
SmbFile smbForm=session.createSmbFileObject(rootURL + name);
if(smbForm.isDirectory()){
@@ -132,27 +251,26 @@
logger.debug("品牌不对->continue="+brand);
continue;
}
- String machineNumber = getMachineNo(smbForm);
+ JSONObject machineNumAndIsWashingMachine = getMachineNoAndIsWashingMachine(DeviceInterface.INTERFACETYPE_SHAREFOLDER, null, null, smbForm);
+ String machineNumber = machineNumAndIsWashingMachine.optString("machineNo");
if( !machineNo.equals(machineNumber) ){
logger.debug("机器号不对->continue="+machineNo);
continue ;
}
String cycleCounter = null;
- if( isWashingMachine(smbForm)){
+ if(machineNumAndIsWashingMachine.optBoolean("isWashingMachine")){
// 清洗机数据的处理
- JSONArray jsArray = washDataReadAndSave(smbForm,devInterface);
+ JSONArray jsArray = washDataReadAndSave(smbForm, devInterface, DeviceInterface.INTERFACETYPE_SHAREFOLDER, null, null, machineNumber);
if( jsArray != null){
- machineNumber = (String)jsArray.get(0);
- cycleCounter = (String)jsArray.get(1);
+ cycleCounter = (String)jsArray.get(0);
refreshWashRecordAmounts(devInterface.getId().toString(),Long.parseLong(cycleCounter),machineNumber);
}
}else{
// 灭菌炉数据处理
- JSONArray jsArray = sterilizerDataReadAndSave(smbForm,devInterface);
+ JSONArray jsArray = sterilizerDataReadAndSave(smbForm, devInterface, DeviceInterface.INTERFACETYPE_SHAREFOLDER, null, null, machineNumber);
if( jsArray != null){
- machineNumber = (String)jsArray.get(0);
- cycleCounter = (String)jsArray.get(1);
- String procStartTimeStr = (String)jsArray.get(2);
+ cycleCounter = (String)jsArray.get(0);
+ String procStartTimeStr = (String)jsArray.get(1);
//决定灭菌炉数据,采用哪种匹配模式 ,默认为循环次数,针对中六增加了开始时间
boolean sterilizaMatchPatternForDate = CssdUtils.getSystemSetConfigByNameBool("sterilizaMatchPatternForDate", false);
@@ -169,20 +287,19 @@
}else{
refreshSterilizaerRecordAmounts(devInterface.getId().toString(),Long.parseLong(cycleCounter),machineNumber);
}
-
}
- }
+ }
SmbFile desFile = session.createSmbFileObject(backUp + name);
try{
smbForm.copyTo(desFile);
- smbForm.delete();
+ smbForm.delete();
}catch(Exception e){
e.printStackTrace();
SterilizerFileName sf = new SterilizerFileName();
sf.setFileName(name);
objectDao.save(sf);
logger.debug(name+"文件在移动和删除过程中发生错误");
- }
+ }
}
} catch (IOException e) {
// 捕获BufferedReader对象关闭时的异常
@@ -192,47 +309,137 @@
}finally{
session.close();
}
-
}
-
- /**
- * 数据处理结束之后的工作,移动文件夹等等
- */
- @Override
- public void end()
- {
-
- }
-
- public String getMachineNo(SmbFile file)
- {
- try{
- BufferedReader br = new BufferedReader(new InputStreamReader(
- new SmbFileInputStream(file)));
- String line;
- while ((line = br.readLine()) != null) {
- if(line.contains("") && line.contains("")){
- //是设备号的行
- line = line.replace("", "");
- line = line.replace("", "");
- return line.trim();
+ public void readAndSaveRecordCommon(DeviceInterface devInterface,String machineNo,String brand,String isAutoCompleteSterilization){
+ FTPClient ftp = null;
+ SmbSession session = null;
+ try {
+ String ip = devInterface.getIP();
+ String directory = devInterface.getFolderPath();
+ if(!directory.startsWith("/")){
+ directory = "/" + directory;
+ }
+ String userName=devInterface.getUserName();
+ String remoteType = devInterface.getInterfaceType();
+ String pwd = devInterface.getPassword();
+ String rootPath = null;
+ FTPFileFilter filterXML = null;
+ FTPFile[] files = null;
+ String[] shareList = null;
+ Integer length = 0;
+ if(DeviceInterface.INTERFACETYPE_FTP.equals(remoteType)){
+ ftp = ftpFileManager.getFTPClient(ip, 21, userName, pwd);
+ rootPath = ftpFileManager.getCurrentPath(ftp) + directory;//根目录
+ ftpFileManager.changeWorkingDirectory(ftp, rootPath);
+ filterXML = new FTPFileFilter() {// 只处理.XML文件
+ @Override
+ public boolean accept(FTPFile file) {
+ if(file.isDirectory()){
+ return false;
+ }else if(file.getName().endsWith("XML") || file.getName().endsWith("xml")){
+ return true;
+ }
+ logger.debug("只处理.XML文件->continue");
+ return false;
+ }
+ };
+ files = ftpFileManager.getListFiles(ftp, "", filterXML);
+ length = files.length;
+ }else{
+ rootPath = "//"+ ip + directory;
+ SmbShare share = new SmbShare("smb://" + userName +":"+ pwd +"@"+ ip +"/"+ directory +"/");
+ session = new SmbSession(share);
+ shareList = share.list();
+ length = shareList.length;
+ }
+ String backUpPath = rootPath + "/backUp";
+ commonFileManager.makeDirectory(remoteType, ftp, backUpPath, session);
+ for (int i = 0; i < length; i++) {
+ FTPFile ftpFile = null;
+ SmbFile smbForm = null;
+ String name = null;
+ if(DeviceInterface.INTERFACETYPE_FTP.equals(remoteType)){
+ ftpFile = files[i];
+ name = ftpFile.getName();
+ }else{
+ name = shareList[i];
+ smbForm = session.createSmbFileObject(rootPath + File.separator + name);
+ if(smbForm == null || smbForm.isDirectory()){
+ continue;
+ }
}
+ // 机器号和品牌都要匹配,才处理
+ if( brand != devInterface.GETINGE){
+ logger.debug("品牌不对->continue="+brand);
+ continue;
+ }
+ JSONObject machineNumAndIsWashingMachine = getMachineNoAndIsWashingMachine(remoteType, ftp, name, smbForm);
+ String machineNumber = machineNumAndIsWashingMachine.optString("machineNo");
+ if( !machineNo.equals(machineNumber) ){
+ logger.debug("机器号不对->continue="+machineNo);
+ continue ;
+ }
+ if(objectDao.getByProperty(SterilizerFileName.class.getSimpleName(), "fileName", name)!=null){
+ logger.debug(name+"该文件已经解析过");
+ continue;
+ }
+ String cycleCounter = null;
+
+ if(machineNumAndIsWashingMachine.optBoolean("isWashingMachine")){
+ // 清洗机数据的处理
+ JSONArray jsArray = washDataReadAndSave(smbForm, devInterface, remoteType, ftp, name, machineNumber);
+ if( jsArray != null){
+ cycleCounter = (String)jsArray.get(0);
+ refreshWashRecordAmounts(devInterface.getId().toString(),Long.parseLong(cycleCounter),machineNumber);
+ }
+ }else{
+ // 灭菌炉数据处理
+ JSONArray jsArray = sterilizerDataReadAndSave(smbForm, devInterface, remoteType, ftp, name, machineNumber);
+ if( jsArray != null){
+ cycleCounter = (String)jsArray.get(0);
+ String procStartTimeStr = (String)jsArray.get(1);
+
+ //决定灭菌炉数据,采用哪种匹配模式 ,默认为循环次数,针对中六增加了开始时间
+ boolean sterilizaMatchPatternForDate = CssdUtils.getSystemSetConfigByNameBool("sterilizaMatchPatternForDate", false);
+ // 灭菌炉自动完成灭菌
+ if( !StringUtils.isNotBlank(isAutoCompleteSterilization) || isAutoCompleteSterilization.equals("是")){
+ if(sterilizaMatchPatternForDate){
+ autoFinishSterilizerRecord(devInterface.getId().toString(),machineNumber,procStartTimeStr);
+ }else{
+ autoFinishSterilizerRecord(devInterface.getId().toString(),Long.parseLong(cycleCounter),machineNumber);
+ }
+ }
+ if(sterilizaMatchPatternForDate){
+ refreshSterilizaerRecordAmounts(devInterface.getId().toString(),procStartTimeStr,machineNumber);
+ }else{
+ refreshSterilizaerRecordAmounts(devInterface.getId().toString(),Long.parseLong(cycleCounter),machineNumber);
+ }
+
+ }
+ }
+ try{
+ commonFileManager.moveFile(remoteType, name, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbForm);
+ }catch(Exception e){
+ e.printStackTrace();
+ SterilizerFileName sf = new SterilizerFileName();
+ sf.setFileName(name);
+ objectDao.save(sf);
+ logger.debug(name+"文件在移动和删除过程中发生错误");
+ }
}
- return "";
- }catch (FileNotFoundException e) {
- // 捕获File对象生成时的异常
+ } catch (Exception e) {
e.printStackTrace();
- return null;
- } catch (IOException e) {
- // 捕获BufferedReader对象关闭时的异常
-// e.printStackTrace();
logger.warn(e.getMessage());
- appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, "设备接口连接异常," + e.getMessage());
- return null;
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, e.getMessage());
+ }finally{
+ if(ftp != null){
+ ftpFileManager.closeFTP(ftp);
+ }
+ if(session != null){
+ session.close();
+ }
}
-
}
-
/**
* 洁定 判断是否是清洗机
*/
@@ -271,74 +478,74 @@
/**
* 洁定灭菌炉数据处理
*/
- public JSONArray sterilizerDataReadAndSave(SmbFile remoteFile,DeviceInterface devInterface)
+ public JSONArray sterilizerDataReadAndSave(SmbFile remoteFile,DeviceInterface devInterface, String remoteType, FTPClient ftp, String fileName, String machineNumber)
{
+ InputStream inputStream = null;
+ ByteArrayOutputStream fos = null;
try{
- BufferedReader br = new BufferedReader(new InputStreamReader(
- new SmbFileInputStream(remoteFile)));
-
- String machineNumber = getMachineNo(remoteFile);
+ fos = new ByteArrayOutputStream();
+ inputStream = commonFileManager.getInputStream(remoteType, ftp, fileName, remoteFile, fos);
String cycleCounter = null;
String spaceTime = null;
Date startDate = null;
// 读取直到最后一行
- String line = "";
// 温度
String tTemperature = null;
- while ((line = br.readLine()) != null) {
- boolean isValid = false;
- SterilizerRecord record = new SterilizerRecord();
- // PROCCYCLE 循环次数
- if( line.contains("") && line.contains(""))
- {
- cycleCounter = getValueByKey(line,"PROCCYCLE");
- }else if( line.contains("") && line.contains(""))
- {
- String timeStr = getValueByKey(line,"PROCSTARTTIME");
- startDate = gedDate(timeStr);
- }else if( line.contains("") && line.contains("") )
- {
- tTemperature = getValueByKey(line,"CT");
- }else if(line.contains("") && line.contains("")){
- String p1Bar = getValueByKey(line,"CP");
- record.setCycleCounter(Long.valueOf(cycleCounter));
- record.setMachineNo(machineNumber);
- record.setDeviceInterfaceID(devInterface.getId().toString());
- // 时间格式 2016/4/15 16:32:49
- String timeStr = getGetingeTime(startDate,spaceTime);
- record.setTime(timeStr);
- record.setT1Temp(tTemperature);
- record.setP1Mbar(p1Bar);
- isValid = true;
- }else if(line.contains("")){
- spaceTime = getValueByKey(line,"TIME");
- }else{
- isValid = false;
- }
-
- if(isValid){
- record.setProcStartTime(startDate);
- objectDao.saveOrUpdate(record);
- }
+ // 读取直到最后一行
+ List records = new FileOfDatReader().getAllLine(inputStream);
+ for(String line : records){
+ if(StringUtils.isBlank(line)){
+ continue;
+ }
+ boolean isValid = false;
+ SterilizerRecord record = new SterilizerRecord();
+ // PROCCYCLE 循环次数
+ if( line.contains("") && line.contains(""))
+ {
+ cycleCounter = getValueByKey(line,"PROCCYCLE");
+ }else if( line.contains("") && line.contains(""))
+ {
+ String timeStr = getValueByKey(line,"PROCSTARTTIME");
+ startDate = gedDate(timeStr);
+ }else if( line.contains("") && line.contains("") )
+ {
+ tTemperature = getValueByKey(line,"CT");
+ }else if(line.contains("") && line.contains("")){
+ String p1Bar = getValueByKey(line,"CP");
+ record.setCycleCounter(Long.valueOf(cycleCounter));
+ record.setMachineNo(machineNumber);
+ record.setDeviceInterfaceID(devInterface.getId().toString());
+ // 时间格式 2016/4/15 16:32:49
+ String timeStr = getGetingeTime(startDate,spaceTime);
+ record.setTime(timeStr);
+ record.setT1Temp(tTemperature);
+ record.setP1Mbar(p1Bar);
+ isValid = true;
+ }else if(line.contains("")){
+ spaceTime = getValueByKey(line,"TIME");
+ }else{
+ isValid = false;
+ }
+ if(isValid){
+ record.setProcStartTime(startDate);
+ objectDao.saveOrUpdate(record);
+ }
}
- br.close();
if(StringUtils.isBlank(cycleCounter))
{
// // 没有读到循环次数,是无效数据
return null;
}
JSONArray jsonArray = new JSONArray();
- jsonArray.add(0, machineNumber);
- jsonArray.add(1, cycleCounter);
- jsonArray.add(2, ForgonDateUtils.safelyFormatDate(startDate, ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, ""));
+ jsonArray.add(0, cycleCounter);
+ jsonArray.add(1, ForgonDateUtils.safelyFormatDate(startDate, ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, ""));
return jsonArray;
- }catch (FileNotFoundException e) {
+ } catch (Exception e) {
logger.warn(e.getMessage());
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, devInterface.getName() + "设备接口连接异常," + e.getMessage());
return null;
- } catch (IOException e) {
- logger.warn(e.getMessage());
- appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, "设备接口连接异常," + e.getMessage());
- return null;
+ }finally{
+ FileSystemHelper.closeInputStream(inputStream, null, null, fos);
}
}
// 自动完成灭菌
@@ -531,81 +738,68 @@
/**
* 洁定清洗机数据处理
*/
- public JSONArray washDataReadAndSave(SmbFile remoteFile,DeviceInterface devInterface)
+ public JSONArray washDataReadAndSave(SmbFile remoteFile,DeviceInterface devInterface, String remoteType, FTPClient ftp, String fileName, String machineNumber)
{
+ InputStream inputStream = null;
+ ByteArrayOutputStream fos = null;
try{
- BufferedReader br = new BufferedReader(new InputStreamReader(
- new SmbFileInputStream(remoteFile)));
-
- String machineNumber = getMachineNo(remoteFile);
+ fos = new ByteArrayOutputStream();
+ inputStream = commonFileManager.getInputStream(remoteType, ftp, fileName, remoteFile, fos);
String cycleCounter = null;
String spaceTime = null;
Date startDate = null;
// 读取直到最后一行
- String line = "";
- int lineNo = 0;
-// List records = new ArrayList();
- while ((line = br.readLine()) != null) {
- boolean isValid = false;
- WashData record = new WashData();
- // PROCCYCLE 循环次数
- if( line.contains("") && line.contains(""))
- {
- cycleCounter = getValueByKey(line,"PROCCYCLE");
- }else if( line.contains("") && line.contains("") && spaceTime != null )
- {
- line = getValueByKey(line,"CT");
- record.setCycleCounter(Long.valueOf(cycleCounter));
- record.setMachineNo(machineNumber);
- record.setDeviceInterfaceID(devInterface.getId().toString());
- // 时间格式 2016/4/15 16:32:49
- String timeStr = getGetingeTime(startDate,spaceTime);
- record.setTime(timeStr);
- record.setT1Temp(getTemp(line));
- isValid = true;
- }else
- {
- isValid = false;
- }
- if( line.contains("") && line.contains(""))
- {
- String timeStr = getValueByKey(line,"PROCSTARTTIME");
- startDate = gedDate(timeStr);
- }
-
- if(line.contains("")){
- spaceTime = getValueByKey(line,"TIME");
- }else{
- spaceTime = null;
- }
- if(isValid)
- {
- objectDao.saveOrUpdate(record);
- }
+ List records = new FileOfDatReader().getAllLine(inputStream);
+ for(String line : records){
+ if(StringUtils.isBlank(line)){
+ continue;
+ }
+ boolean isValid = false;
+ WashData record = new WashData();
+ // PROCCYCLE 循环次数
+ if( line.contains("") && line.contains("")){
+ cycleCounter = getValueByKey(line,"PROCCYCLE");
+ }else if( line.contains("") && line.contains("") && spaceTime != null ){
+ line = getValueByKey(line,"CT");
+ record.setCycleCounter(Long.valueOf(cycleCounter));
+ record.setMachineNo(machineNumber);
+ record.setDeviceInterfaceID(devInterface.getId().toString());
+ // 时间格式 2016/4/15 16:32:49
+ String timeStr = getGetingeTime(startDate,spaceTime);
+ record.setTime(timeStr);
+ record.setT1Temp(getTemp(line));
+ isValid = true;
+ }else{
+ isValid = false;
+ }
+ if( line.contains("") && line.contains("")){
+ String timeStr = getValueByKey(line,"PROCSTARTTIME");
+ startDate = gedDate(timeStr);
+ }
+ if(line.contains("")){
+ spaceTime = getValueByKey(line,"TIME");
+ }else{
+ spaceTime = null;
+ }
+ if(isValid){
+ objectDao.saveOrUpdate(record);
+ }
}
- br.close();
- if(StringUtils.isBlank(cycleCounter))
- {
+ if(StringUtils.isBlank(cycleCounter)){
// // 没有读到循环次数,是无效数据
return null;
}
JSONArray jsonArray = new JSONArray();
- jsonArray.add(0, machineNumber);
- jsonArray.add(1, cycleCounter);
+ jsonArray.add(0, cycleCounter);
return jsonArray;
- }catch (FileNotFoundException e) {
- // 捕获File对象生成时的异常
-// e.printStackTrace();
- logger.warn(e.getMessage());
- return null;
- } catch (IOException e) {
- // 捕获BufferedReader对象关闭时的异常
-// e.printStackTrace();
- logger.warn(e.getMessage());
- appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, "设备接口连接异常," + e.getMessage());
- return null;
- }
+ } catch (Exception e) {
+ logger.warn(e.getMessage());
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, "设备接口连接异常," + e.getMessage());
+ return null;
+ }finally{
+ FileSystemHelper.closeInputStream(inputStream, null, null, fos);
}
+}
// 返回时间格式 2016/4/15 16:32:49
private String getGetingeTime(Date startDate,String spaceTime){
Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImpl.java
===================================================================
diff -u -r26556 -r26628
--- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImpl.java (.../XinHuaDataManagerImpl.java) (revision 26556)
+++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImpl.java (.../XinHuaDataManagerImpl.java) (revision 26628)
@@ -18,7 +18,6 @@
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPFileFilter;
-import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.Session;
@@ -33,6 +32,7 @@
import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerFileName;
import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerRecord;
import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord;
+import com.forgon.disinfectsystem.filemanager.FtpFileManager;
import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service.SterilizationRecordManager;
import com.forgon.disinfectsystem.washanddisinfectmanager.washanddisinfectrecord.service.WashAndDisinfectRecordManager;
import com.forgon.log.model.Log;
@@ -52,11 +52,13 @@
private ObjectDao objectDao;
private SterilizationRecordManager sterilizationRecordManager;
private WashAndDisinfectRecordManager washAndDisinfectRecordManager;
-
+ private FtpFileManager ftpFileManager;
private static final Logger logger = Logger
.getLogger(XinHuaDataManagerImpl.class);
-
+ public void setFtpFileManager(FtpFileManager ftpFileManager) {
+ this.ftpFileManager = ftpFileManager;
+ }
public void setWashAndDisinfectRecordManager(
WashAndDisinfectRecordManager washAndDisinfectRecordManager) {
this.washAndDisinfectRecordManager = washAndDisinfectRecordManager;
@@ -232,7 +234,7 @@
logger.debug("设备IP===="+ip);
logger.debug("用户名===="+userName);
logger.debug("密码===="+pwd);
- FTPClient ftp = new FTPClient();
+ FTPClient ftp = null;
if(!directory.startsWith("/")){
directory = "/" + directory;
}
@@ -243,50 +245,22 @@
//用于保存已经读取的文件
String readedDirURL = "readedFile";
try {
- try {
- ftp.connect(ip, 21);
- } catch (Exception e) {
- throw new RuntimeException("连接失败,ip:" + ip + ",端口:" + 21);
- }
- int reply = ftp.getReplyCode();
- if (!FTPReply.isPositiveCompletion(reply)) {
- ftp.disconnect();
- ftp = null;
- throw new RuntimeException("连接失败,ReplyCode无效值:" + reply);
- }
- boolean loginSuccess = false;
- try {
- loginSuccess = ftp.login(userName, pwd);
- } catch (IOException e1) {
- throw new RuntimeException("登录异常,用户名:"+ userName +"和密码是否正确");
- }
- if(!loginSuccess){
- throw new RuntimeException("登录失败,请检查用户名:"+ userName +"密码是否正确");
- }
- String rootPath = FileSystemHelper.getCurrentPath(ftp);
- ftp.setControlEncoding("UTF-8");
- ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
- ftp.enterLocalPassiveMode();
- ftp.setBufferSize(1024);
- ftp.setAutodetectUTF8(true);
+ ftp = ftpFileManager.getFTPClient(ip, 21, userName, pwd);
+ String rootPath = ftpFileManager.getCurrentPath(ftp);
//切换目录
String directoryIso = rootPath + new String(directory.getBytes("UTF-8"),"iso-8859-1");
- Boolean changeResult = ftp.changeWorkingDirectory(directoryIso);
+ Boolean changeResult = ftpFileManager.changeWorkingDirectory(ftp, directoryIso);
if(!changeResult){
throw new RuntimeException("切换目录[" + rootPath + directory + "]失败");
}
//绝对路径
String backUpAbsolutePath = directoryIso + "/" + backUpDirURL;
String cacheAbsolutePath = directoryIso + "/" + cacheDirURL;
String readedAbsolutePath = directoryIso + "/" + readedDirURL;
- try {
- ftp.makeDirectory(backUpDirURL);
- ftp.makeDirectory(cacheDirURL);
- ftp.makeDirectory(readedDirURL);
- } catch (IOException e) {
- e.printStackTrace();
- throw new RuntimeException("创建文件夹失败");
- }
+ ftpFileManager.makeDirectory(ftp, backUpDirURL);
+ ftpFileManager.makeDirectory(ftp, cacheDirURL);
+ ftpFileManager.makeDirectory(ftp, readedDirURL);
+
FTPFile[] files = null;
FTPFileFilter filterTxt = new FTPFileFilter() {
@Override
@@ -333,16 +307,11 @@
}
//2、处理文件数据
//避免读取时源文件有写入,所以先把源文件复制到cache文件夹里,再读取复制的文件
- FTPFile cacheFile = null;
- try {
- cacheFile = FileSystemHelper.copyFile(fileName, fileName, ftp, FileSystemHelper.getCurrentPath(ftp), cacheAbsolutePath, true , true);
- } catch (Exception e) {
- throw new RuntimeException(e.getMessage());
- }
+ FTPFile cacheFile = ftpFileManager.copyFile(fileName, ftp, ftpFileManager.getCurrentPath(ftp), cacheAbsolutePath, true);
//灭菌炉数据处理
logger.debug(String.format("开始处理灭菌炉数据:品牌【%s】,机器号【%s】,循环次数【%s】", brand,machineNumber,cycleCounter));
JSONObject jsObject = sterilizerDataReadAndSave(null, devInterface, cacheFile, ftp);
- changeResult = ftp.changeWorkingDirectory(directoryIso);
+ changeResult = ftpFileManager.changeWorkingDirectory(ftp, directoryIso);
if(!changeResult){
throw new RuntimeException("切换目录[" + directory + "]失败");
}
@@ -359,12 +328,8 @@
//若灭菌炉的灭菌阶段为:已结束,则把该文件放进backUp文件夹中
if(isEnd){
try{
- FileSystemHelper.copyFile(fileName, fileName, ftp, FileSystemHelper.getCurrentPath(ftp), backUpAbsolutePath, false, false);
- FileSystemHelper.copyFile(fileName, fileName, ftp, FileSystemHelper.getCurrentPath(ftp), readedAbsolutePath, false, false);
- boolean delResult = ftp.deleteFile(fileName);
- if(!delResult){
- throw new RuntimeException("删除文件"+ fileName +"失败");
- }
+ ftpFileManager.copyFile(fileName, ftp, ftpFileManager.getCurrentPath(ftp), backUpAbsolutePath, false);
+ ftpFileManager.moveFile(fileName, ftp, ftpFileManager.getCurrentPath(ftp), readedAbsolutePath);
}catch(Exception e){
e.printStackTrace();
logger.debug(e.getMessage());
@@ -377,12 +342,7 @@
logger.warn(e.getMessage());
appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, e.getMessage());
}finally{
- try {
- ftp.disconnect();
- } catch (IOException e) {
- logger.warn(e.getMessage());
- appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, "关闭连接失败");
- }
+ ftpFileManager.closeFTP(ftp);
}
}
@@ -436,6 +396,7 @@
}else{
fileName = ftpFile.getName();
}
+ ByteArrayOutputStream out = null;
InputStream inputStream = null;
try{
//1、获取文件输入流(有可能不是第一次读取该文件)
@@ -445,9 +406,9 @@
inputStream = remoteFile.getInputStream();
remoteFileLength = remoteFile.length();
}else{
- ByteArrayOutputStream fos = new ByteArrayOutputStream();
- ftp.retrieveFile(fileName, fos);
- inputStream = new ByteArrayInputStream(fos.toByteArray());
+ out = new ByteArrayOutputStream();
+ ftp.retrieveFile(fileName, out);
+ inputStream = new ByteArrayInputStream(out.toByteArray());
remoteFileLength = ftpFile.getSize();
}
//要跳过的字节数
@@ -565,12 +526,7 @@
appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, fileName + "处理时设备接口运行异常," + e.getMessage());
return null;
}finally{
- try {
- inputStream.close();
- } catch (IOException e) {
- appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, fileName + "处理时设备接口运行异常," + e.getMessage());
- e.printStackTrace();
- }
+ FileSystemHelper.closeInputStream(inputStream, null, null, out);
}
}
// 自动完成灭菌