Index: ssts-web/src/main/webapp/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/washAndDisinfectView.js =================================================================== diff -u -r30382 -r30398 --- ssts-web/src/main/webapp/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/washAndDisinfectView.js (.../washAndDisinfectView.js) (revision 30382) +++ ssts-web/src/main/webapp/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/washAndDisinfectView.js (.../washAndDisinfectView.js) (revision 30398) @@ -109,7 +109,7 @@ }else if(data.deviceBrand == GETINGE){ if(data.deviceModel == GETING_86_SERIES){ // KLMY洁定清洗机接口 - openModalWindowForExt(WWWROOT+'/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/washDataChart/washDataChartOfGetingOf86Series.jsp?washAndDisinfectRecordId='+id,'', '清洗参数', '800', '600'); + openModalWindowForExt(WWWROOT+'/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/washDataChart/washDataChartOfGeting86Series.jsp?washAndDisinfectRecordId='+id,'', '清洗参数', '800', '600'); } else { openModalWindowForExt(WWWROOT+'/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/washDataLineChart.jsp?washAndDisinfectRecordId='+id,'', '清洗参数', '800', '600'); } Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java =================================================================== diff -u -r30382 -r30398 --- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 30382) +++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 30398) @@ -3267,7 +3267,7 @@ reusltJSON = getWashDataAndLineEchartDateOfBelimed(wdr,dif.getId(),rs.getMachineNumber()); return reusltJSON; } else if(DeviceInterface.GETINGE.equals(deviceBrand)){ - // 倍力曼清洗机(KLMYSRMYY-8) + // 洁定86-series清洗机(KLMYSRMYY-8) reusltJSON = getWashDataAndLineEchartDateOfGeting(wdr,dif.getId(),rs.getMachineNumber()); return reusltJSON; } @@ -3278,59 +3278,66 @@ private JSONObject getWashDataAndLineEchartDateOfGeting(WashAndDisinfectRecord wdr, Long deviceInterfaceId, String machineNumber) { JSONObject resultData = new JSONObject(); WashDataOfGeting washDataOfGeting = null; - Long cycleCounter = wdr.getCycleCounter(); - //获取新华清洗机的详细参数 - String whereSql = String.format( - " where po.deviceInterfaceID = %s and po.machineNo = '%s' and po.cycleCounter = %s order by po.startTime ", - deviceInterfaceId,machineNumber,cycleCounter); - List washDataOfGetingList = objectDao.findBySql(WashDataOfGeting.class.getSimpleName(), whereSql); - if(CollectionUtils.isEmpty(washDataOfGetingList)){ - return resultData; - } - washDataOfGeting = washDataOfGetingList.get(0); - - if(washDataOfGeting != null && CollectionUtils.isNotEmpty(washDataOfGeting.getWashDataItems())){ - List washDataItemList = washDataOfGeting.getWashDataItems(); - //折线图需要的参数明细 - JSONObject lineChartData = new JSONObject(); - JSONArray timeArray = new JSONArray(); - JSONArray t1TempArray = new JSONArray(); - JSONArray processArray = new JSONArray(); - //程序名称(取值追溯系统) - resultData.put("program", washDataOfGeting.getProgram()); - //周期开始 - String startedDateTimeStr = ""; - if(washDataOfGeting.getStartTime() != null){ - startedDateTimeStr = DateTools.getFormatDateStr(washDataOfGeting.getStartTime(), DateTools.COMMON_DATE_HMS); - } - resultData.put("startedTime", startedDateTimeStr); - //周期结束 - String endDateTimeStr = ""; - if(washDataOfGeting.getEndTime() != null){ - endDateTimeStr = DateTools.getFormatDateStr(washDataOfGeting.getEndTime(), DateTools.COMMON_DATE_HMS); - } - resultData.put("endTime", endDateTimeStr); - - //机器名称(MACHINE NAME 设置为清洗机的机器号) - resultData.put("machineName", washDataOfGeting.getMachineNo() == null ? "" : washDataOfGeting.getMachineNo()); - //MACHINE ID - resultData.put("machineID", washDataOfGeting.getMachineID() == null ? "" : washDataOfGeting.getMachineID()); - //周期数(循环次数)(从K文件读取) - resultData.put("cycleCounter", washDataOfGeting.getCycleCounter() == null ? "" : washDataOfGeting.getCycleCounter()); - //清洗参数 - resultData.put("parameters", washDataOfGeting.getParameters() == null ? "" : washDataOfGeting.getParameters()); - for(WashDataItemOfGeting washDataItem : washDataItemList){ - //鼠标放在曲线图的线条上时,需要显示出对应的时间、步骤、TS1℃、TI1℃、TS2℃、TI2℃、区号 - timeArray.add(washDataItem.getProcessTime() + "/" + washDataItem.getProcess()); - t1TempArray.add(washDataItem.getTemp()); - processArray.add(washDataItem.getProcess()); - } - lineChartData.put("time", timeArray); - lineChartData.put("t1Temp", t1TempArray); - lineChartData.put("process", processArray); - resultData.put("washDataItemLineChart", lineChartData); - } - return resultData; + // 清洗开始时间和结束时间允许前后10分钟误差 + Date startTime = wdr.getStartDate(); + Date endTime = wdr.getEndDate(); + Date beginStartTime = new Date(startTime.getTime() - 10*60*1000); + Date endStartTime = new Date(endTime.getTime() + 10*60*1000); + String beginStartTimeStr = DateTools.getFormatDateStr(beginStartTime, "yyyy/M/dd HH:mm:ss"); + String endStartTimeStr = DateTools.getFormatDateStr(endStartTime, "yyyy/M/dd HH:mm:ss"); + + String whereSql = String.format( + " where po.deviceInterfaceID = %s and po.machineNo = '%s' and %s order by po.startTime desc ", + deviceInterfaceId, machineNumber, dateQueryAdapter.dateAreaSql("po.startTime", beginStartTimeStr, endStartTimeStr)); + List washDataOfGetingList = objectDao.findBySql(WashDataOfGeting.class.getSimpleName(), whereSql); + + if(CollectionUtils.isEmpty(washDataOfGetingList)){ + return resultData; + } + washDataOfGeting = washDataOfGetingList.get(0); + + if(washDataOfGeting != null && CollectionUtils.isNotEmpty(washDataOfGeting.getWashDataItems())){ + List washDataItemList = washDataOfGeting.getWashDataItems(); + //折线图需要的参数明细 + JSONObject lineChartData = new JSONObject(); + JSONArray timeArray = new JSONArray(); + JSONArray t1TempArray = new JSONArray(); + JSONArray processArray = new JSONArray(); + //程序名称(取值追溯系统) + resultData.put("program", washDataOfGeting.getProgram()); + //周期开始 + String startedDateTimeStr = ""; + if(washDataOfGeting.getStartTime() != null){ + startedDateTimeStr = DateTools.getFormatDateStr(washDataOfGeting.getStartTime(), DateTools.COMMON_DATE_HMS); + } + resultData.put("startedTime", startedDateTimeStr); + //周期结束 + String endDateTimeStr = ""; + if(washDataOfGeting.getEndTime() != null){ + endDateTimeStr = DateTools.getFormatDateStr(washDataOfGeting.getEndTime(), DateTools.COMMON_DATE_HMS); + } + resultData.put("endTime", endDateTimeStr); + + //机器名称(MACHINE NAME 设置为清洗机的机器号) + resultData.put("machineName", washDataOfGeting.getMachineNo() == null ? "" : washDataOfGeting.getMachineNo()); + //MACHINE ID + resultData.put("machineID", washDataOfGeting.getMachineID() == null ? "" : washDataOfGeting.getMachineID()); + //周期数(循环次数)(从K文件读取) + resultData.put("cycleCounter", washDataOfGeting.getCycleCounter() == null ? "" : washDataOfGeting.getCycleCounter()); + //清洗参数 + resultData.put("parameters", washDataOfGeting.getParameters() == null ? "" : washDataOfGeting.getParameters()); + for(WashDataItemOfGeting washDataItem : washDataItemList){ + //鼠标放在曲线图的线条上时,需要显示出对应的时间、步骤、TS1℃、TI1℃、TS2℃、TI2℃、区号 + timeArray.add(washDataItem.getProcessTime() + "/" + washDataItem.getProcess()); + t1TempArray.add(washDataItem.getTemp()); + processArray.add(washDataItem.getProcess()); + } + lineChartData.put("time", timeArray); + lineChartData.put("t1Temp", t1TempArray); + lineChartData.put("process", processArray); + resultData.put("washDataItemLineChart", lineChartData); + } + return resultData; } /** Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/Getinge86SeriesDataManagerImpl.java =================================================================== diff -u -r30382 -r30398 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/Getinge86SeriesDataManagerImpl.java (.../Getinge86SeriesDataManagerImpl.java) (revision 30382) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/Getinge86SeriesDataManagerImpl.java (.../Getinge86SeriesDataManagerImpl.java) (revision 30398) @@ -2,10 +2,11 @@ import java.io.BufferedReader; import java.io.File; -import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -27,8 +28,9 @@ import org.springframework.integration.smb.session.SmbSession; import org.springframework.integration.smb.session.SmbShare; -import com.forgon.Constants; +import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.vo.LoginUserData; +import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.entity.basedatamanager.deviceinterface.DeviceInterface; import com.forgon.disinfectsystem.entity.basedatamanager.rinser.Rinser; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerFileName; @@ -45,6 +47,7 @@ import com.forgon.tools.date.DateTools; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.ForgonDateUtils; /** * 洁定灭菌炉、清洗机数据处理 * @author zhouPeiMian 2021-01-22 @@ -57,6 +60,10 @@ private SmbFileManager smbFileManager; private FtpFileManager ftpFileManager; private CommonFileManager commonFileManager; + private DateQueryAdapter dateQueryAdapter; + public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { + this.dateQueryAdapter = dateQueryAdapter; + } public void setCommonFileManager(CommonFileManager commonFileManager) { this.commonFileManager = commonFileManager; } @@ -169,6 +176,18 @@ session = new SmbSession(share); String backUp = rootURL +"backUp/"; smbFileManager.makeDirectory(session, backUp); + SimpleDateFormat sdfToday = new SimpleDateFormat("yyyyMMdd"); + //限制读取的天数,默认只读当天(默认会把非读取日期的数据移走,避免文件堆积) + int interfaceReadLimitDays = CssdUtils.getSystemSetConfigByNameInt("interfaceReadLimitDays", 0); + interfaceReadLimitDays = 30; + Date endStartTime = null; + if(interfaceReadLimitDays > 1){ + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -interfaceReadLimitDays); + endStartTime = calendar.getTime(); + }else{ + endStartTime = new Date(); + } for (String name : share.list()){ SmbFile smbForm=session.createSmbFileObject(rootURL + name); if(smbForm.isDirectory()){ @@ -183,6 +202,19 @@ logger.debug("只处理.log文件->continue"); continue; } + + if(sdfToday.parse(name.substring(4, 12)).before(sdfToday.parse(sdfToday.format(endStartTime)))){ + try{ + SmbFile desFile = session.createSmbFileObject(backUp + name); + smbForm.copyTo(desFile); + smbForm.delete(); + }catch(Exception e){ + e.printStackTrace(); + logger.debug(name+"文件在移动和删除过程中发生错误"); + } + continue; + } + // 机器号和品牌都要匹配,才处理 if(!StringUtils.equals(brand, DeviceInterface.GETINGE)){ logger.debug("品牌不对-机器品牌号:"+ brand +",接口品牌:" + DeviceInterface.GETINGE+ ">continue="+brand); @@ -194,25 +226,15 @@ logger.debug("机器号不对-机器号:"+machineNo+",文件机器号:"+machineNumber + "->continue="+machineNo); continue; } - String cycleCounter = null; if(machineNumAndIsWashingMachine.optBoolean("isWashingMachine")){ // 清洗机数据的处理 - JSONArray jsArray = washDataReadAndSave(smbForm, devInterface, DeviceInterface.INTERFACETYPE_SHAREFOLDER, null, null, machineNumber, enableDetailedDeviceInformation, loginUserData); - if( jsArray != null){ - cycleCounter = (String)jsArray.get(0); - refreshWashRecordAmounts(devInterface.getId().toString(),Long.parseLong(cycleCounter),machineNumber); - SmbFile desFile = session.createSmbFileObject(backUp + name); - try{ - smbForm.copyTo(desFile); - smbForm.delete(); - }catch(Exception e){ - e.printStackTrace(); - logger.debug(name+"文件在移动和删除过程中发生错误"); - } + List washDataOfGetingList = washDataReadAndSave(smbForm, devInterface, DeviceInterface.INTERFACETYPE_SHAREFOLDER, null, null, machineNumber, enableDetailedDeviceInformation, loginUserData); + if(CollectionUtils.isNotEmpty(washDataOfGetingList)){ + refreshWashRecordAmounts(devInterface.getId().toString(), washDataOfGetingList, machineNumber); } } } - } catch (IOException e) { + } catch (Exception e) { // 捕获BufferedReader对象关闭时的异常 logger.warn(e.getMessage()); e.printStackTrace(); @@ -277,6 +299,18 @@ appLogManager.saveLog(loginUserData, Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, "文件数量:"+ length+",backUp位置:" + backUpPath); } commonFileManager.makeDirectory(remoteType, ftp, backUpPath, session, enableDetailedDeviceInformation, loginUserData); + SimpleDateFormat sdfToday = new SimpleDateFormat("yyyyMMdd"); + //限制读取的天数,默认只读当天(默认会把非读取日期的数据移走,避免文件堆积) + int interfaceReadLimitDays = CssdUtils.getSystemSetConfigByNameInt("interfaceReadLimitDays", 0); + interfaceReadLimitDays = 30; + Date endStartTime = null; + if(interfaceReadLimitDays > 1){ + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -interfaceReadLimitDays); + endStartTime = calendar.getTime(); + }else{ + endStartTime = new Date(); + } for (int i = 0; i < length; i++) { FTPFile ftpFile = null; SmbFile smbForm = null; @@ -296,6 +330,15 @@ continue; } } + if(sdfToday.parse(name.substring(4, 12)).before(sdfToday.parse(sdfToday.format(endStartTime)))){ + try{ + commonFileManager.moveFile(remoteType, name, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbForm); + }catch(Exception e){ + e.printStackTrace(); + logger.debug(name+"文件在移动和删除过程中发生错误"); + } + continue; + } // 机器号和品牌都要匹配,才处理 if(!StringUtils.equals(brand, DeviceInterface.GETINGE)){ continue; @@ -313,22 +356,14 @@ } continue ; } - String cycleCounter = null; if(machineNumAndIsWashingMachine.optBoolean("isWashingMachine")){ // 清洗机数据的处理 - JSONArray jsArray = washDataReadAndSave(smbForm, devInterface, remoteType, ftp, name, machineNumber, enableDetailedDeviceInformation, loginUserData); - if(jsArray != null){ - cycleCounter = (String)jsArray.get(0); - refreshWashRecordAmounts(devInterface.getId().toString(),Long.parseLong(cycleCounter),machineNumber); + List washDataOfGetingList = washDataReadAndSave(smbForm, devInterface, remoteType, ftp, name, machineNumber, enableDetailedDeviceInformation, loginUserData); + if(CollectionUtils.isNotEmpty(washDataOfGetingList)){ + refreshWashRecordAmounts(devInterface.getId().toString(), washDataOfGetingList, machineNumber); } } - try{ - commonFileManager.moveFile(remoteType, name, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbForm); - }catch(Exception e){ - e.printStackTrace(); - logger.debug(name+"文件在移动和删除过程中发生错误"); - } } } catch (Exception e) { e.printStackTrace(); @@ -348,11 +383,12 @@ /** * 洁定清洗机数据处理 */ - public JSONArray washDataReadAndSave(SmbFile remoteFile,DeviceInterface devInterface, String remoteType, FTPClient ftp, String fileName, String machineNumber, boolean enableDetailedDeviceInformation, LoginUserData loginUserData){ + public List washDataReadAndSave(SmbFile remoteFile,DeviceInterface devInterface, String remoteType, FTPClient ftp, String fileName, String machineNumber, boolean enableDetailedDeviceInformation, LoginUserData loginUserData){ InputStream inputStream = null; ByteArrayOutputStream fos = null; InputStreamReader isr = null; BufferedReader br = null; + List washDataOfGetingList = new ArrayList(); boolean isSave = false;//是否已经解析保存 try{ inputStream = commonFileManager.getInputStream(remoteType, ftp, fileName, remoteFile, fos); @@ -416,12 +452,14 @@ Date endTime = new Date(); endTime.setTime(record.getStartTime().getTime() + time); record.setEndTime(endTime); - objectDao.saveOrUpdate(record); - objectDao.batchSaveOrUpdate(washDataOfGetingItems); - record.setWashDataItems(washDataOfGetingItems); - if(!isSave){ - isSave = true; + if(!isSaved(record)){ + objectDao.saveOrUpdate(record); + objectDao.batchSaveOrUpdate(washDataOfGetingItems); + record.setWashDataItems(washDataOfGetingItems); + washDataOfGetingList.add(record); } + record = new WashDataOfGeting(); + record.setDeviceInterfaceID(devInterface.getId().toString()); }else if(isTemp){ if(line.length() >= 8){ String timeStr = line.substring(0,8).trim(); @@ -433,7 +471,6 @@ item.setTemp(line.replace(timeStr, "").trim()); item.setProcess(processOfTemp); processOfTemp = null; - objectDao.saveOrUpdate(item); item.setWashDataOfGeting(record); washDataOfGetingItems.add(item); item = new WashDataItemOfGeting(); @@ -453,9 +490,7 @@ // 没有读到循环次数,是无效数据 return null; } - JSONArray jsonArray = new JSONArray(); - jsonArray.add(0, cycleCounter); - return jsonArray; + return washDataOfGetingList; } catch (Exception e) { e.printStackTrace(); logger.warn(e.getMessage()); @@ -464,17 +499,24 @@ } return null; }finally{ - if(isSave){ - SterilizerFileName sf = new SterilizerFileName(); - sf.setFileName(fileName); - sf.setIsEnd(Constants.STR_YES); - objectDao.save(sf); - } FileSystemHelper.closeInputStream(inputStream, null, null, fos); } } /** + * 判断文件是否已经保存 + * @param record + * @return + */ + private boolean isSaved(WashDataOfGeting record) { + String countSql = String.format("select count(id) from %s po where po.deviceInterfaceID = '%s' and po.machineNo = '%s' and po.cycleCounter = %s", + WashDataOfGeting.class.getSimpleName(), record.getDeviceInterfaceID(), record.getMachineNo(), record.getCycleCounter()); + if(objectDao.countBySql(countSql)>0){ + return true; + } + return false; + } + /** * 中英文对照说明 * @param key * @return @@ -519,7 +561,7 @@ * 更新清洗机的温度压力数据 */ @SuppressWarnings("unchecked") - public void refreshWashRecordAmounts(String devInterfaceId,Long cycleCounter,String machineNo){ + public void refreshWashRecordAmounts(String devInterfaceId, List washDataOfGetingList,String machineNo){ // 根据接口和机器号找到清洗机 Session session = objectDao.getHibernateSession(); String queryString = "select r from Rinser r" @@ -531,17 +573,19 @@ List rinsers = query.list(); for(Rinser rs : rinsers) { - queryString = "select wd from WashAndDisinfectRecord wd" - + " where wd.disinfectIdentification = :rinserName" - + " and wd.cycleCounter = :cycleCounter"; - query = session.createQuery(queryString); - query.setParameter("rinserName", rs.getName()); - query.setParameter("cycleCounter", cycleCounter); - WashAndDisinfectRecord wd = (WashAndDisinfectRecord)query.uniqueResult(); - if(wd != null) { - int amounts = washAndDisinfectRecordManager.getWashAndDisinfectRecordsCount(devInterfaceId,machineNo,cycleCounter); - wd.setWashDataAmount(Long.valueOf(amounts)+1); - washAndDisinfectRecordManager.save(wd); + for (WashDataOfGeting washDataOfGeting : washDataOfGetingList) { + Date startTime = washDataOfGeting.getStartTime(); + Date beginStartTime = new Date(startTime.getTime() - 10*60*1000); + Date endStartTime = new Date(startTime.getTime() + 10*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 ", rs.getId().toString(), dateQueryAdapter.dateAreaSql("po.startDate", beginStartTimeStr, endStartTimeStr, false)); + WashAndDisinfectRecord wd = (WashAndDisinfectRecord) objectDao.getBySql(WashAndDisinfectRecord.class.getSimpleName(), hql); + if(wd != null) { + Long amounts = wd.getWashDataAmount(); + amounts = amounts == null ? 0L : amounts; + wd.setWashDataAmount(amounts + 1l); + } } } }