Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.js =================================================================== diff -u -r27736 -r28044 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.js (.../sterilizationRecordView.js) (revision 27736) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.js (.../sterilizationRecordView.js) (revision 28044) @@ -759,6 +759,9 @@ function openSterilizerRecordLineChart(id){ openModalWindowForExt(WWWROOT+'/disinfectsystem/sterilizationmanager/sterilizerRecord/sterilizerLineChart.jsp?sterilizationRecordId='+id,'', '灭菌器参数', '1050', '550'); } +function openLowSterilizerRecordLineChart(id,sterilizationUser){ + openModalWindowForExt(WWWROOT+'/disinfectsystem/sterilizationmanager/sterilizerRecord/lowSterilizerLineChart.jsp?sterilizationRecordId='+id,'', '灭菌器参数', '1050', '550'); +} function renderBiologicalMonitoringStatus(v, p, record) { if (v == '进行中') { return "

" + v + ""; @@ -811,9 +814,11 @@ {header : "灭菌总数量",width : 70,dataIndex : 'amount'}, {header : "灭菌器参数",width : 70,dataIndex : 'sterilizerRecordAmount',sortable :false,renderer: function(v,p,record){ if(record.data.sterilizerRecordAmount > 0){ - return ""; - }else{ - return null; + return ""; + }else if(record.data.sterilizationParaType == 1){ + return ""; + }else{ + return null; } }}, {header : "打印状态",width : 70,dataIndex : 'printStatus',hidden : !printConfig.sterilizationRecordDetail}, @@ -839,7 +844,8 @@ {type : 'date',dataIndex : 'endDate'}, {type : 'string',dataIndex : 'sterilizationPurpose'}, {type : 'string',dataIndex : 'sterilizationType'}, - {type : 'string',dataIndex : 'sterilizer.name'}, + {type : 'string',dataIndex : 'sterilizer.name'}, + {type : 'numeric',dataIndex : 'sterilizationParaType'}, {type : 'numeric',dataIndex : 'frequency'}, {type : 'string',dataIndex : 'biologicalMonitoringStatus'}, {type : 'string',dataIndex : 'physicsResult'}, @@ -861,6 +867,7 @@ {name : 'sterilizationPurpose'}, {name : 'sterilizationType'}, {name : 'sterilizer.name'}, + {name : 'sterilizationParaType'}, {name : 'status'}, {name : 'endDate'}, {name : 'packageSterilizationCount'}, Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/LowTempStageDetails.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/LowTempStageDetails.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/LowTempStageDetails.java (revision 28044) @@ -0,0 +1,94 @@ +package com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord; + +import java.util.Date; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class LowTempStageDetails { + private Long id; + /** + * 阶段名称 + */ + private String stageName; + /** + * 时间 + */ + private Date time; + /** + * 温度 + */ + private Double temperature; + /** + * 压力 + */ + private Double pressure; + /** + * 所属低温灭菌炉记录 + */ + private LowTempSterilizerRecord lowTempSterilizerRecord; + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getStageName() { + return stageName; + } + + public void setStageName(String stageName) { + this.stageName = stageName; + } + + public Date getTime() { + return time; + } + + public void setTime(Date time) { + this.time = time; + } + + public Double getTemperature() { + return temperature; + } + + public void setTemperature(Double temperature) { + this.temperature = temperature; + } + + public Double getPressure() { + return pressure; + } + + public void setPressure(Double pressure) { + this.pressure = pressure; + } + @ManyToOne + @JoinColumn(name = "lowTempSterilizerRecord_id") + public LowTempSterilizerRecord getLowTempSterilizerRecord() { + return lowTempSterilizerRecord; + } + + public void setLowTempSterilizerRecord( + LowTempSterilizerRecord lowTempSterilizerRecord) { + this.lowTempSterilizerRecord = lowTempSterilizerRecord; + } + +} Index: ssts-web/src/main/webapp/disinfectsystem/config/fjsssyy/menu/menuconfigure.js =================================================================== diff -u -r27976 -r28044 --- ssts-web/src/main/webapp/disinfectsystem/config/fjsssyy/menu/menuconfigure.js (.../menuconfigure.js) (revision 27976) +++ ssts-web/src/main/webapp/disinfectsystem/config/fjsssyy/menu/menuconfigure.js (.../menuconfigure.js) (revision 28044) @@ -721,7 +721,7 @@ //{hidden :SSTS_SterilizationMode_manager,text:"灭菌方式设置",href:WWWROOT+'/systemmanage/httpOption.mhtml?listId=sterilizationMode',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_Sterilisation,text:"灭菌程序管理",href:WWWROOT+'/disinfectsystem/basedatamanager/sterilisation/sterilisationView.jsp?editMode=true',hrefTarget:linkTarget,leaf:true}, //{hidden :SSTS_Bioreader,text:"生物阅读器管理",href:WWWROOT+'/disinfectsystem/basedatamanager/bioreader/bioreaderView.jsp?editMode=true',hrefTarget:linkTarget,leaf:true}, - //{hidden :(!sstsConfig.hasOwnProperty('disableDeviceInterface')) || sstsConfig.disableDeviceInterface,text:"设备接口管理",href:WWWROOT+'/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceView.jsp?editMode=true',hrefTarget:linkTarget,leaf:true}, + {hidden :(!sstsConfig.hasOwnProperty('disableDeviceInterface')) || sstsConfig.disableDeviceInterface,text:"设备接口管理",href:WWWROOT+'/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceView.jsp?editMode=true',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_Expiration,text:"物品失效期管理",href:WWWROOT+'/disinfectsystem/basedatamanager/expirationDateInfo/expirationDateInfoView.jsp?editMode=true',hrefTarget:linkTarget,leaf:true}, //{hidden :SSTS_SupplyRoomType_manager,text:"PDA参数设置",href:WWWROOT+'/personalSetting/modifyExitLoginTime.jsp',hrefTarget:linkTarget,leaf:true}, //{hidden :SSTS_SupplyRoomType_manager,text:"仓库管理",href:WWWROOT+'/disinfectsystem/basedatamanager/warehouse/wareHouseView.jsp?editMode=true',hrefTarget:linkTarget,leaf:true}, Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizerrecord/action/SterilizerRecordLineChartAction.java =================================================================== diff -u -r27116 -r28044 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizerrecord/action/SterilizerRecordLineChartAction.java (.../SterilizerRecordLineChartAction.java) (revision 27116) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizerrecord/action/SterilizerRecordLineChartAction.java (.../SterilizerRecordLineChartAction.java) (revision 28044) @@ -16,6 +16,8 @@ import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.disinfectsystem.entity.basedatamanager.deviceinterface.DeviceInterface; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempStageDetails; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempSterilizerRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerRecord; import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service.SterilizationRecordManager; import com.forgon.tools.StrutsParamUtils; @@ -110,9 +112,47 @@ e.printStackTrace(); } } - - /** + * 返回低温灭菌echart曲线数据 + */ + public void createLowTemperatureEChartData() { + Long sterilizationRecordId = StrutsParamUtils.getPraramLongValue("sterilizationRecordId", 0L); + JSONObject rueslt = new JSONObject(); + try { + SterilizationRecord sterilizationRecord = sterilizationRecordManager.getSterilizationRecordById(sterilizationRecordId); + LowTempSterilizerRecord lowTempRecord = sterilizationRecordManager.getLowTempSterilizerRecord(sterilizationRecord.getSterilizer().getMachineNumber(), sterilizationRecord.getStartDate()); + List lowTempStageDetailsList = null; + if(lowTempRecord != null){ + lowTempStageDetailsList = lowTempRecord.getLowTempStageDetailsList(); + rueslt.put("potTimes", lowTempRecord.getPotTimes()); + rueslt.put("sterilizationUser", sterilizationRecord.getSterilizationUser()); + rueslt.put("programName", lowTempRecord.getProgramName()); + rueslt.put("sterilizationCycle", lowTempRecord.getSterilizationCycle()); + rueslt.put("startDate", Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM.format(lowTempRecord.getStartDate())); + rueslt.put("endDate", Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM.format(lowTempRecord.getEndDate())); + } + if(CollectionUtils.isNotEmpty(lowTempStageDetailsList)) { + JSONArray timeArray = new JSONArray(); + JSONArray t1TempArray = new JSONArray(); + JSONArray p1MbarArray = new JSONArray(); + for (LowTempStageDetails record : lowTempStageDetailsList) { + timeArray.add(Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM.format(record.getTime())); + t1TempArray.add(record.getTemperature());//温度1 + p1MbarArray.add(record.getPressure());//压力1 + } + rueslt.put("timeData", timeArray); + rueslt.put("t1TempData", t1TempArray); + rueslt.put("p1MbarData", p1MbarArray); + StrutsResponseUtils.output(true, rueslt); + }else{ + StrutsResponseUtils.output(false, rueslt); + } + }catch (Exception e) { + StrutsResponseUtils.output(false ,e.getMessage()); + e.printStackTrace(); + } + } + /** * 根据灭菌记录id打印温度压力数据 */ public void getChartDataBySterilizationRecordId(){ Index: ssts-web/src/main/webapp/disinfectsystem/config/fjsssyy/config.js =================================================================== diff -u -r28028 -r28044 --- ssts-web/src/main/webapp/disinfectsystem/config/fjsssyy/config.js (.../config.js) (revision 28028) +++ ssts-web/src/main/webapp/disinfectsystem/config/fjsssyy/config.js (.../config.js) (revision 28044) @@ -91,6 +91,7 @@ useRecordConvertRecyclingApplicationMergeRegular:"depart", //fjsssyy清洗机设备数据显示控制 washDataLineChartType:1, + disableDeviceInterface:false, //回收一键入筐 recycleAllTousseIntoBasket:true, //科室申领模块的填写申请单界面是否隐藏器械包价格 @@ -100,5 +101,7 @@ //添加回收申请单是否加载申领模板 isLoadApplyTemplateForAddRecycleRecord:true, //是否启用各部门器械包申请汇总报表 - enableTousseApplySummary:true + enableTousseApplySummary:true, + //开启设备接口菜单 + disableDeviceInterface : false } \ No newline at end of file Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/DeviceInterfaceDataProcessImplForFJSSSYY.java =================================================================== diff -u -r28005 -r28044 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/DeviceInterfaceDataProcessImplForFJSSSYY.java (.../DeviceInterfaceDataProcessImplForFJSSSYY.java) (revision 28005) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/DeviceInterfaceDataProcessImplForFJSSSYY.java (.../DeviceInterfaceDataProcessImplForFJSSSYY.java) (revision 28044) @@ -61,7 +61,7 @@ /** * 遍历灭菌炉 */ - /*List sterilizes = sterilizerManager.getAllSterilizer(); + List sterilizes = sterilizerManager.getAllSterilizer(); for(Sterilizer st : sterilizes) { DeviceDataManager dm; @@ -73,16 +73,21 @@ //一个灭菌炉和接口对接异常没必要影响其他灭菌炉和清洗机 try { appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, "开始遍历"+st.getName()+",设备接口:"+devInterface.getName()); - switch(devInterface.getDeviceBrand()) - { - + switch(devInterface.getDeviceBrand()){ + case DeviceInterface.XINHUA: + Object belimedBean = SpringBeanManger.getBean("lowTemperatureManagerTarget"); + dm = (DeviceDataManager) belimedBean; + dm.readAndSaveRecord(devInterface,st.getMachineNumber(),DeviceInterface.XINHUA,st.getIsAutoCompleteSterilization()); + break; + default:appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, "暂不支持的灭菌炉品牌:" + devInterface.getDeviceBrand()); + break; } appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, "遍历"+st.getName()+"完毕"); } catch (Exception e) { e.printStackTrace(); appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, "遍历"+st.getName()+"异常,设备接口:"+devInterface.getName()); } - }*/ + } // 遍历清洗机 List rinsers = rinserManager.getAll(); for(Rinser rs : rinsers) Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java =================================================================== diff -u -r27683 -r28044 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 27683) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 28044) @@ -13,6 +13,8 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationInterruptRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecordPic; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempStageDetails; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempSterilizerRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerRecord; import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.vo.SterilizationRecordPrintTousseItem; import com.forgon.disinfectsystem.vo.SimpleInfoVo; @@ -114,7 +116,13 @@ * 获取所有的温度和压力的灭菌记录. */ public List getSterilizaerRecordsById(Long id); - + /** + * 获取机器号相等且灭菌开始时间上下不超过5分钟的低温灭菌炉参数记录 + * @param machineNo 机器号(文件的设备编号=灭菌炉机器号) + * @param startDate 灭菌记录的开始日期 + * @return + */ + public LowTempSterilizerRecord getLowTempSterilizerRecord(String machineNo, Date startDate); public void deleteSterilizationRecordPicById(String picId); /** Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/LowTemperatureManagerImpl.java =================================================================== diff -u --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/LowTemperatureManagerImpl.java (revision 0) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/LowTemperatureManagerImpl.java (revision 28044) @@ -0,0 +1,377 @@ +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.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import jcifs.smb.SmbFile; +import net.sf.json.JSONArray; +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; +import org.springframework.integration.smb.session.SmbSession; +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.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempStageDetails; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempSterilizerRecord; +import com.forgon.disinfectsystem.filemanager.CommonFileManager; +import com.forgon.disinfectsystem.filemanager.FtpFileManager; +import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service.SterilizationRecordManager; +import com.forgon.log.model.Log; +import com.forgon.log.service.LogManager; +import com.forgon.tools.FileSystemHelper; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.ForgonDateUtils; + +/** + * 低温灭菌器数据处理 + */ +@Service("lowTemperatureManagerTarget") +public class LowTemperatureManagerImpl implements DeviceDataManager { + + private ObjectDao objectDao; + private LogManager appLogManager; + private SterilizationRecordManager sterilizationRecordManager; + private FtpFileManager ftpFileManager; + private CommonFileManager commonFileManager; + private DateQueryAdapter dateQueryAdapter; + private static final Logger logger = Logger + .getLogger(LowTemperatureManagerImpl.class); + public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { + this.dateQueryAdapter = dateQueryAdapter; + } + public void setFtpFileManager(FtpFileManager ftpFileManager) { + this.ftpFileManager = ftpFileManager; + } + public void setCommonFileManager(CommonFileManager commonFileManager) { + this.commonFileManager = commonFileManager; + } + public void setSterilizationRecordManager( + SterilizationRecordManager sterilizationRecordManager) { + this.sterilizationRecordManager = sterilizationRecordManager; + } + + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + + public void setAppLogManager(LogManager appLogManager) { + this.appLogManager = appLogManager; + } + + /** + * 从接口读取数据和存入数据库 + */ + @Override + public void readAndSaveRecord(DeviceInterface devInterface, + String machineNo, String brand, String isAutoCompleteSterilization) { + if (devInterface == null || StringUtils.isBlank(machineNo)) { + return; + } + SmbSession session = null; + String ip = devInterface.getIP(); + String directory = devInterface.getFolderPath(); + if(!directory.startsWith("/")){ + directory = "/" + directory; + } + String userName = devInterface.getUserName(); + String pwd = devInterface.getPassword(); + String remoteType = devInterface.getInterfaceType(); + FTPClient ftp = null; + try { + String rootPath = 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); + FTPFileFilter filterXML = new FTPFileFilter() { + @Override + public boolean accept(FTPFile file) { + if(file.isDirectory()){ + return false; + }else if(file.getName().endsWith("log") && file.getName().startsWith("data")){ + return true; + } + logger.debug("只处理data***.log文件"); + return false; + } + }; + files = ftpFileManager.getListFiles(ftp, "", filterXML); + length = files.length; + }else{ + rootPath = "//"+ ip + directory; + String smbPath = String.format("smb://%s:%s@%s/%s/", userName, pwd, ip, directory); + SmbShare share = new SmbShare(smbPath); + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, "共享文件夹目录位置:"+smbPath); + session = new SmbSession(share); + shareList = share.list(); + length = shareList.length; + } + String backUpPath = rootPath + "/backUp"; + commonFileManager.makeDirectory(remoteType, ftp, backUpPath, session); + SimpleDateFormat sdfToday = new SimpleDateFormat("yyyyMMdd"); + 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]; + if(!(name.endsWith("log") && name.startsWith("data"))){ + continue; + } + smbForm = session.createSmbFileObject(rootPath + File.separator + name); + if(smbForm == null || smbForm.isDirectory()){ + continue; + } + } + if(sdfToday.parse(name.substring(4, 12)).before(sdfToday.parse(sdfToday.format(new Date())))){ + commonFileManager.moveFile(remoteType, name, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbForm); + continue; + } + sterilizerDataReadAndSave(smbForm,devInterface, remoteType, ftp, ftpFile); + } + } catch (Exception e) { + logger.warn(e.getMessage()); + appLogManager.saveLog(AcegiHelper.getLoginUser(), + Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, + devInterface.getName() + "设备接口连接异常," + e.getMessage()); + } finally { + ftpFileManager.closeFTP(ftp); + if(session != null){ + session.close(); + } + } + + } + + /** + * 灭菌炉数据处理, backUpPath, session, smbForm + */ + public JSONArray sterilizerDataReadAndSave(SmbFile remoteFile, + DeviceInterface devInterface, String remoteType, FTPClient ftp, FTPFile ftpFile) { + InputStream inputStream = null; + ByteArrayOutputStream out = null; + InputStreamReader isr = null; + BufferedReader br = null; + JSONArray jsonArray = null; + String fileName = null; + try { + Date da = null; + if(DeviceInterface.INTERFACETYPE_FTP.equals(remoteType)){ + da = ftpFile.getTimestamp().getTime(); + fileName = ftpFile.getName(); + }else{ + da = new Date(); + da.setTime(remoteFile.getDate()); + fileName = remoteFile.getName(); + } + inputStream = commonFileManager.getInputStream(remoteType, ftp, fileName, remoteFile, out); + br = commonFileManager.getBufferedReader(isr, inputStream,"GBK"); + // 读取直到最后一行 + String line = ""; + boolean startStageDetails = false; + List lowTempSterilizerRecordList = new ArrayList(); + LowTempSterilizerRecord lowTempSterilizerRecord = null; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm"); + String yearToDay = null; + String stageName = null; + boolean skipCycle = false; + while ((line = br.readLine()) != null) { + if(skipCycle && !line.contains("设备编号")){//如果本次循环已经保存过,就到下次设备编号行时再读取 + continue; + } + if(!line.contains("@") || line.contains("阶段名称")){ + continue; + } + if(line.contains("设备编号")){ + skipCycle = false; + lowTempSterilizerRecord = new LowTempSterilizerRecord(); + String lowMachineNumber = line.substring(line.indexOf(":") + 1).trim(); + lowTempSterilizerRecord.setMachineNumber(lowMachineNumber); + }else if(line.contains("启动时间")){ + String lowStartDateStr = line.substring(line.indexOf(":") + 1).trim(); + int index = lowStartDateStr.indexOf("日"); + String hhAndMM = lowStartDateStr.substring(index + 1).trim(); + String lowStartDateHH = hhAndMM.substring(0, 2); + String lowStartDateMM = hhAndMM.substring(hhAndMM.length()-2, hhAndMM.length()); + + yearToDay = "20" + lowStartDateStr.substring(0,lowStartDateStr.indexOf("日")+1); + lowStartDateStr = yearToDay + " " + lowStartDateHH + ":"+lowStartDateMM; + Date lowStartDate = sdf.parse(lowStartDateStr); + lowTempSterilizerRecord.setStartDate(lowStartDate); + }else if(line.contains("灭菌锅次")){ + String potTimesStr = line.substring(line.indexOf(":") + 1).replace("次", "").trim(); + Long potTimes = Long.valueOf(potTimesStr); + if(isExistData(lowTempSterilizerRecord.getMachineNumber(), potTimes)){//如果已经存在,就到下次设备编号行再读取 + skipCycle = true; + continue; + } + lowTempSterilizerRecordList.add(lowTempSterilizerRecord); + lowTempSterilizerRecord.setPotTimes(potTimes); + }else if(line.contains("程序名称")){ + String programName = line.substring(line.indexOf(":") + 1).trim(); + lowTempSterilizerRecord.setProgramName(programName); + }else if(line.contains("结束时间")){ + String lowendDateStr = line.substring(line.indexOf(":") + 1).trim().replace(" ", ""); + Date endDate = sdf.parse(yearToDay + " " + lowendDateStr); + lowTempSterilizerRecord.setEndDate(endDate); + }else if(line.contains("灭菌周期")){ + String sterilizationCycle = line.substring(line.indexOf(":") + 1).trim(); + lowTempSterilizerRecord.setSterilizationCycle(sterilizationCycle); + }else if(line.contains("--------------")){ + if(startStageDetails){//做标记 读到阶段信息开头 + startStageDetails = false; + }else{//做标记 读到阶段信息结尾 + startStageDetails = true; + } + }else if(startStageDetails){//遍历阶段详情 + line = line.substring(line.indexOf("@") + 1 ).replace(" :", ":").trim(); + int index = line.indexOf(":"); + int lastIndex = line.lastIndexOf(" "); + LowTempStageDetails lowItem = new LowTempStageDetails(); + Double pressure = null; + Date time = null; + Double temperature = null; + String hh = null; + if(index == 2 || index == 3){ + hh = line.substring(0, 2); + }else{ + int firstSpace = line.indexOf(" "); + stageName = line.substring(0,firstSpace); + hh = line.substring(firstSpace).trim().substring(0, 2); + } + String pressureStr = line.substring(lastIndex+1); + pressure = Double.valueOf(pressureStr); + lowItem.setPressure(pressure); + String temperatureStr = line.substring(index + 3, lastIndex).trim(); + temperature = Double.valueOf(temperatureStr); + lowItem.setTemperature(temperature); + lowItem.setStageName(stageName); + String timeStr = yearToDay + " " + hh + line.substring(index, index + 3); + time = sdf.parse(timeStr); + lowItem.setTime(time); + lowItem.setLowTempSterilizerRecord(lowTempSterilizerRecord); + lowTempSterilizerRecord.getLowTempStageDetailsList().add(lowItem); + } + } + if(CollectionUtils.isNotEmpty(lowTempSterilizerRecordList)){ + removeIncompleteData(lowTempSterilizerRecordList); + objectDao.batchSaveOrUpdate(lowTempSterilizerRecordList); + } + } catch (FileNotFoundException e) { + logger.warn(e.getMessage()); + e.printStackTrace(); + } catch (IOException e) { + logger.warn(e.getMessage()); + e.printStackTrace(); + appLogManager.saveLog(AcegiHelper.getLoginUser(), + Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, + devInterface.getName() + "设备接口连接异常," + e.getMessage()); + } catch(Exception e){ + logger.warn(e.getMessage()); + e.printStackTrace(); + }finally{ + FileSystemHelper.closeInputStream(inputStream, br, isr, out); + } + return jsonArray; + } + /** + * 移除一些数据(现有移除不完整数据;完整数据有灭菌周期) + * @param lowTempSterilizerRecordList + */ + private void removeIncompleteData(List lowTempSterilizerRecordList){ + Iterator it = lowTempSterilizerRecordList.iterator(); + while(it.hasNext()){ + LowTempSterilizerRecord item = it.next(); + if(StringUtils.isBlank(item.getSterilizationCycle())){//没有灭菌周期的数据 都是不完整的数据,可能是正在写入,然后被我们系统读取到了 + it.remove(); + }else{//要保存的数据 刷新灭菌记录条数 + boolean result = refreshSterilizaerRecordAmounts(item); + if(!result){//刷新失败的话也移除掉 不保存 + it.remove(); + } + } + } + } + /** + * 验证此机器号此灭菌锅次的数据是否已经保存过,避免重复保存 + * @param machineNumber + * @param potTimes + * @return + */ + private boolean isExistData(String machineNumber, Long potTimes){ + String sql = String.format("select count(*) from %s where machineNumber='%s' and potTimes=%s ", + LowTempSterilizerRecord.class.getSimpleName(),machineNumber,potTimes); + if(objectDao.countBySql(sql) > 0){ + return true; + } + return false; + } + /** + * 更新灭菌记录的温度压力数据获取方式 + */ + public boolean refreshSterilizaerRecordAmounts(LowTempSterilizerRecord item) { + boolean result = false; + try { + Date startDate = item.getStartDate(); + String machineNo = item.getMachineNumber(); + Date beginStartTime = new Date(startDate.getTime() - 5*60*1000); + Date endStartTime = new Date(startDate.getTime() + 5*60*1000); + String beginStartTimeStr = ForgonDateUtils.safelyFormatDate(beginStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + String endStartTimeStr = ForgonDateUtils.safelyFormatDate(endStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + String queryString = "select sr.id from SterilizationRecord sr" + + " where sr.sterilizer.machineNumber = :machineNumber" + + " and sr.status = :status" + + " and " + dateQueryAdapter.dateAreaSql("sr.startDate", beginStartTimeStr, endStartTimeStr, false); + Session session = objectDao.getHibernateSession(); + Query query = session.createQuery(queryString); + query.setParameter("machineNumber", machineNo); + query.setParameter("status",SterilizationRecord.STERILIZATION_STATUS_END); + Long id = (Long) query.uniqueResult(); + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, String.format("机器号[%s],需要更新温度压力数据的灭菌记录id[%s]",machineNo,id)); + if (DatabaseUtil.isPoIdValid(id)){ + //灭菌记录的的温度压力数据获取方式 + SterilizationRecord sterilizationRecord = sterilizationRecordManager.get(id); + sterilizationRecord.setSterilizationParaType(1); + objectDao.saveOrUpdate(sterilizationRecord); + item.setSterilizationRecord(sterilizationRecord); + result = true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + /** + * 数据处理结束之后的工作,移动文件夹等等 + */ + @Override + public void end() { + + } +} Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r27932 -r28044 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 27932) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 28044) @@ -4,7 +4,6 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.sql.Statement; import java.text.Collator; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -75,6 +74,7 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationInterruptRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecordPic; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempSterilizerRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerRecord; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; import com.forgon.disinfectsystem.expirationdateinfo.service.ExpirationDateInfoManager; @@ -1149,7 +1149,24 @@ } return null; } - + @Override + public LowTempSterilizerRecord getLowTempSterilizerRecord(String machineNo, + Date startDate) { + LowTempSterilizerRecord result = null; + try { + Date beginStartTime = new Date(startDate.getTime() - 5*60*1000); + Date endStartTime = new Date(startDate.getTime() + 5*60*1000); + String beginStartTimeStr = ForgonDateUtils.safelyFormatDate(beginStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + String endStartTimeStr = ForgonDateUtils.safelyFormatDate(endStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + String queryString = " where po.machineNumber ='" + + machineNo + + "' and " + dateQueryAdapter.dateAreaSql("po.startDate", beginStartTimeStr, endStartTimeStr, false); + result = (LowTempSterilizerRecord)objectDao.getBySql(LowTempSterilizerRecord.class.getSimpleName(), queryString); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } public void setSupplyRoomConfigManager( SupplyRoomConfigManager supplyRoomConfigManager) { this.supplyRoomConfigManager = supplyRoomConfigManager; Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizerRecord/lowSterilizerLineChart.jsp =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizerRecord/lowSterilizerLineChart.jsp (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizerRecord/lowSterilizerLineChart.jsp (revision 28044) @@ -0,0 +1,250 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ page import="com.forgon.tools.SpringBeanManger,org.jfree.data.general.DefaultPieDataset,org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.servlet.*,com.forgon.disinfectsystem.sterilizationmanager.sterilizerrecord.action.SterilizerRecordLineChartAction" %> +<%@ page import="com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + + + + + 低温灭菌炉温度、压力曲线图 + + + + <%-- --%> + + + + + + + + + + + + + + + + + + + +

+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + + + +
+ + \ No newline at end of file Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecord.java =================================================================== diff -u -r27683 -r28044 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecord.java (.../SterilizationRecord.java) (revision 27683) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecord.java (.../SterilizationRecord.java) (revision 28044) @@ -326,7 +326,11 @@ * 生物监测包条码(ZSYY-261灭菌记录增加扫描监测包功能) */ private String monitorPackageBarcode; - + public static final Integer STERILIZATIONPARATYPE_LOW = 1;//低温 + /** + * 灭菌参数获取类型(不同类型获取的数据不一样,处理方式不一样) + */ + private Integer sterilizationParaType; @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { @@ -919,4 +923,12 @@ this.monitorPackageBarcode = monitorPackageBarcode; } + public Integer getSterilizationParaType() { + return sterilizationParaType; + } + + public void setSterilizationParaType(Integer sterilizationParaType) { + this.sterilizationParaType = sterilizationParaType; + } + } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/LowTempSterilizerRecord.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/LowTempSterilizerRecord.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/LowTempSterilizerRecord.java (revision 28044) @@ -0,0 +1,129 @@ +package com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; +import javax.persistence.OrderBy; +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.Cascade; +import org.hibernate.annotations.CascadeType; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; + +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class LowTempSterilizerRecord { + private Long id; + /** + * 设备编号 + */ + private String machineNumber; + /** + * 启动时间 + */ + private Date startDate; + /** + * 结束时间 + */ + private Date endDate; + /** + * 灭菌锅次(不是时间,不一定和灭菌记录的循环次数相等) + */ + private Long potTimes; + /** + * 程序名称 + */ + private String programName; + /** + * 灭菌周期 + */ + private String sterilizationCycle; + /** + * 对应的灭菌记录 + */ + private SterilizationRecord sterilizationRecord; + /** + * 阶段详情信息 + */ + private List lowTempStageDetailsList = new ArrayList(); + + @OneToMany(fetch = FetchType.LAZY, mappedBy="lowTempSterilizerRecord") + @Cascade(value = { org.hibernate.annotations.CascadeType.SAVE_UPDATE }) + @OrderBy("id asc") + public List getLowTempStageDetailsList() { + return lowTempStageDetailsList; + } + + public void setLowTempStageDetailsList(List lowTempStageDetailsList) { + this.lowTempStageDetailsList = lowTempStageDetailsList; + } + + @OneToOne + @Cascade(value = { CascadeType.SAVE_UPDATE }) + @JoinColumn(name = "SterilizationRecordId", referencedColumnName = "id") + public SterilizationRecord getSterilizationRecord() { + return sterilizationRecord; + } + + public void setSterilizationRecord(SterilizationRecord sterilizationRecord) { + this.sterilizationRecord = sterilizationRecord; + } + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + public String getMachineNumber() { + return machineNumber; + } + public void setMachineNumber(String machineNumber) { + this.machineNumber = machineNumber; + } + public Date getStartDate() { + return startDate; + } + public void setStartDate(Date startDate) { + this.startDate = startDate; + } + public Date getEndDate() { + return endDate; + } + public void setEndDate(Date endDate) { + this.endDate = endDate; + } + public Long getPotTimes() { + return potTimes; + } + public void setPotTimes(Long potTimes) { + this.potTimes = potTimes; + } + public String getProgramName() { + return programName; + } + public void setProgramName(String programName) { + this.programName = programName; + } + public String getSterilizationCycle() { + return sterilizationCycle; + } + public void setSterilizationCycle(String sterilizationCycle) { + this.sterilizationCycle = sterilizationCycle; + } + +} Index: ssts-web/src/main/webapp/disinfectsystem/config/fjsssyy/spring/HIS.xml =================================================================== diff -u -r28005 -r28044 --- ssts-web/src/main/webapp/disinfectsystem/config/fjsssyy/spring/HIS.xml (.../HIS.xml) (revision 28005) +++ ssts-web/src/main/webapp/disinfectsystem/config/fjsssyy/spring/HIS.xml (.../HIS.xml) (revision 28044) @@ -125,5 +125,15 @@ - + + + + + + + + + + \ No newline at end of file