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); } } // 自动完成灭菌