Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImpl.java =================================================================== diff -u -r35603 -r35639 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImpl.java (.../XinHuaDataManagerImpl.java) (revision 35603) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImpl.java (.../XinHuaDataManagerImpl.java) (revision 35639) @@ -8,7 +8,9 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.text.DateFormat; import java.text.DecimalFormat; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -52,6 +54,7 @@ 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.exception.SystemException; @@ -81,7 +84,10 @@ private InitDbConnection dbConnection; private DateQueryAdapter dateQueryAdapter; private CommonFileManager commonFileManager; - + private SmbFileManager smbFileManager; + public void setSmbFileManager(SmbFileManager smbFileManager) { + this.smbFileManager = smbFileManager; + } public void setCommonFileManager(CommonFileManager commonFileManager) { this.commonFileManager = commonFileManager; } @@ -481,6 +487,12 @@ String cacheDirURL = rootURL + "cache/"; //用于保存已读取的文件 String readedFileDirURL = rootURL + "readedFile/"; + //用于保存异常文件 + String errFilesDirURL = rootURL + "errFiles/"; + if(!session.exists(errFilesDirURL)){ + logger.debug("创建文件夹..."); + session.mkdir(errFilesDirURL); + } if(!session.exists(backUpDirURL)){ logger.debug("创建文件夹..."); session.mkdir(backUpDirURL); @@ -497,6 +509,10 @@ int readedFileAmount = 0; //决定灭菌炉数据,采用哪种匹配模式 ,默认为循环次数,针对中六增加了开始时间 boolean sterilizaMatchPatternForDate = CssdUtils.getSystemSetConfigByNameBool("sterilizaMatchPatternForDate", false); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -3); + Date endStartTime = calendar.getTime(); + DateFormat ymdFormat = DateTools.YMDFORMAT.get(); for (String fileName : share.list()){ if(readedFileAmount == 5){ break; @@ -583,24 +599,28 @@ } else { //灭菌炉数据处理 logger.debug(String.format("开始处理灭菌炉数据:品牌【%s】,机器号【%s】,循环次数【%s】", brand,machineNumber,cycleCounter)); - JSONObject jsObject = sterilizerDataReadAndSave(cacheFile,devInterface,null,null, enableDetailedDeviceInformation, loginUserData, isAutoCompleteSterilization, sterilizaMatchPatternForDate); - if( jsObject != null){ - boolean isEnd = jsObject.getBoolean("isEnd");//灭菌阶段是否为已结束 - //若灭菌炉的灭菌阶段为:已结束,则把该文件放进backUp文件夹中 - if(isEnd){ - SmbFile desFile = session.createSmbFileObject(backUpDirURL + fileName); - SmbFile readedFile = session.createSmbFileObject(readedFileDirURL + fileName); - try{ - file.copyTo(desFile); - file.copyTo(readedFile); - file.delete(); - }catch(Exception e){ - e.printStackTrace(); - logger.debug(fileName+"文件在移动和删除过程中发生错误"); - throw new IOException(fileName + "文件在移动和删除过程中发生错误"); - } - } - } + JSONObject jsObject = sterilizerDataReadAndSave(cacheFile,devInterface,null,null, enableDetailedDeviceInformation, loginUserData, isAutoCompleteSterilization, sterilizaMatchPatternForDate, ymdFormat); + boolean isEnd = jsObject.optBoolean("isEnd", false);//灭菌阶段是否为已结束 + //若灭菌炉的灭菌阶段为:已结束,则把该文件放进backUp文件夹中 + if(isEnd){ + SmbFile desFile = session.createSmbFileObject(backUpDirURL + fileName); + SmbFile readedFile = session.createSmbFileObject(readedFileDirURL + fileName); + try{ + file.copyTo(desFile); + file.copyTo(readedFile); + file.delete(); + }catch(Exception e){ + e.printStackTrace(); + logger.debug(fileName+"文件在移动和删除过程中发生错误"); + throw new IOException(fileName + "文件在移动和删除过程中发生错误"); + } + }else{//如果没结束 或者没有开始时间 或者 最后修改时间超过3天 移动到errFiles中 + String startDateYMD = jsObject.optString("startDateYMD"); + if(StringUtils.isBlank(startDateYMD) || ymdFormat.parse(startDateYMD).before(ymdFormat.parse(ymdFormat.format(endStartTime)))){ + appLogManager.saveLog(loginUserData, Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, "如预期方式被移动"); + smbFileManager.moveSmbFile(session, file, errFilesDirURL); + } + } } } } catch (IOException e) { @@ -611,8 +631,13 @@ appLogManager.saveLog(loginUserData, Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, "rootURL:" + rootURL +",userName:"+ userName +",设备接口连接异常," + e.getMessage()); } throw new RuntimeException(e.getMessage()); + } catch (ParseException e) { + e.printStackTrace(); + throw new RuntimeException(e.getMessage()); } finally{ - session.close(); + if(session != null){ + session.close(); + } } } @@ -692,6 +717,7 @@ int readedFileAmount = 0; //决定灭菌炉数据,采用哪种匹配模式 ,默认为循环次数,针对中六增加了开始时间 boolean sterilizaMatchPatternForDate = CssdUtils.getSystemSetConfigByNameBool("sterilizaMatchPatternForDate", false); + DateFormat ymdFormat = DateTools.YMDFORMAT.get(); for (int i = 0; i < files.length && readedFileAmount < 5; i++) { FTPFile directoryFile = files[i]; String fileName = directoryFile.getName(); @@ -731,7 +757,7 @@ if(fileName.toUpperCase().contains("ST")){ //灭菌炉数据处理 logger.debug(String.format("开始处理灭菌炉数据:品牌【%s】,机器号【%s】,循环次数【%s】", brand,machineNumber,cycleCounter)); - JSONObject jsObject = sterilizerDataReadAndSave(null, devInterface, cacheFile, ftp, enableDetailedDeviceInformation, loginUserData, isAutoCompleteSterilization,sterilizaMatchPatternForDate); + JSONObject jsObject = sterilizerDataReadAndSave(null, devInterface, cacheFile, ftp, enableDetailedDeviceInformation, loginUserData, isAutoCompleteSterilization,sterilizaMatchPatternForDate, ymdFormat); changeResult = ftpFileManager.changeWorkingDirectory(ftp, directoryIso); if(!changeResult){ throw new RuntimeException("切换目录[" + directory + "]失败"); @@ -874,7 +900,7 @@ * @return */ private JSONObject sterilizerDataReadAndSave(SmbFile remoteFile,DeviceInterface devInterface, FTPFile ftpFile, FTPClient ftp, boolean enableDetailedDeviceInformation, LoginUserData loginUserData, String isAutoCompleteSterilization - , boolean sterilizaMatchPatternForDate){ + , boolean sterilizaMatchPatternForDate, DateFormat ymdFormat){ //文件名称 String fileName = null; if(remoteFile != null){ @@ -887,6 +913,7 @@ InputStreamReader isr = null; BufferedReader br = null; + JSONObject reusltJson = new JSONObject(); try{ //2、根据文件名称获取信息 JSONObject machineData = getMachineNo(fileName); @@ -933,35 +960,37 @@ }; //防止读取后有换行符 line = line.replaceAll("\r|\n|\rn", ""); - //若长度为40 且 阶段编号为"100"则:表明为结束阶段 - if("100".equals(line.substring(14,17)) && 40 == line.length()){ + //若长度为40 且 阶段编号为"100" 或者 长度为39 阶段编号问00 则:表明为结束阶段 + if("100".equals(line.substring(14,17)) && 40 == line.length() || "00".equals(line.substring(14,16)) && 39 == line.length()){ isEnd =true; + int subNum = line.length() == 40?0:1;//长度为39的一些下标要减一 CommonStageDetails detail = new CommonStageDetails(); - String timeStr = line.substring(17,29); + String timeStr = line.substring(17 - subNum,29 - subNum); Date startDate = gedDate(timeStr); if(procStartTime == null){ procStartTime = startDate; } detail.setTime(startDate); record.setEndDate(startDate); - String piMbar = line.substring(29,34); - String t1Temp = line.substring(34,39); + String piMbar = line.substring(29 - subNum,34 - subNum); + String t1Temp = line.substring(34 - subNum,39 - subNum); detail.setP1Mbar(StringTools.romoveUselessZeroToNumberStr(piMbar));//室内压力(去掉前面无用的0) detail.setT1Temp(StringTools.romoveUselessZeroToNumberStr(t1Temp));//室内温度(去掉前面无用的0) - String phase_source = line.substring(14,17);//程序阶段号 + String phase_source = line.substring(14,17 - subNum);//程序阶段号 String phase = SterilizerRecord.STERILIZERRECORD_PHASE_XINHUA.get(phase_source);//阶段号对应的阶段 detail.setStageName(phase);//阶段 detail.setStageNo(phase_source); detail.setCommonSterilizerRecord(record); details.add(detail); record.getCommonStageDetailsList().addAll(details); break; - }; + } //保存灭菌参数 CommonStageDetails detail = new CommonStageDetails(); String timeStr = line.substring(16,28); Date startDate = gedDate(timeStr); if(procStartTime == null){ + reusltJson.put("startDateYMD", ymdFormat.format(startDate)); procStartTime = startDate; } if(lineNum == 0){//第一行 @@ -1012,11 +1041,8 @@ } } //返回数据 - JSONObject reusltJson = new JSONObject(); reusltJson.put("isEnd", isEnd); - return reusltJson; } - return null; } catch (IOException e) { logger.warn(e.getMessage()); String inputStreamStr = ""; @@ -1026,16 +1052,15 @@ if(enableDetailedDeviceInformation){ appLogManager.saveLog(loginUserData, Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, fileName +"处理时设备接口连接异常,"+ inputStreamStr + "," + e.getMessage()); } - return null; } catch (Exception e) { logger.warn(e.getMessage()); if(enableDetailedDeviceInformation){ appLogManager.saveLog(loginUserData, Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, fileName + "处理时设备接口运行异常," + e.getMessage()); } - return null; }finally{ - FileSystemHelper.closeInputStream(inputStream, null, null, out); + FileSystemHelper.closeInputStream(inputStream, br, isr, out); } + return reusltJson; }