Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/DeviceInterfaceDataProcessImpl.java =================================================================== diff -u -r26796 -r29628 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/DeviceInterfaceDataProcessImpl.java (.../DeviceInterfaceDataProcessImpl.java) (revision 26796) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/DeviceInterfaceDataProcessImpl.java (.../DeviceInterfaceDataProcessImpl.java) (revision 29628) @@ -93,6 +93,15 @@ dm = (DeviceDataManager) xinHuaBean; dm.readAndSaveRecord(devInterface,st.getMachineNumber(),DeviceInterface.XINHUA,st.getIsAutoCompleteSterilization()); break; + case DeviceInterface.JOHNSON: + if(DeviceInterface.JOHNSON_MODEL_STERRAD_100S.equals(devInterface.getDeviceModel())){ + Object johnsonBean = SpringBeanManger.getBean("johnsonDataManager"); + dm = (DeviceDataManager) johnsonBean; + dm.readAndSaveRecord(devInterface,st.getMachineNumber(),DeviceInterface.JOHNSON,st.getIsAutoCompleteSterilization()); + }else{ + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, "暂不支持的灭菌炉型号:" + devInterface.getDeviceModel()); + } + 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()+"完毕"); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/LowTempForJohnsonSterilizerRecord.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/LowTempForJohnsonSterilizerRecord.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/LowTempForJohnsonSterilizerRecord.java (revision 29628) @@ -0,0 +1,163 @@ +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; +/** + * 强生低温灭菌炉STERRAD 100S参数记录表 + * @author zc.li + * @date 2020-11-20 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class LowTempForJohnsonSterilizerRecord { + private Long id; + /** + * 设备编号 + */ + private String machineNumber; + /** + * 启动时间 + */ + private Date startDate; + /** + * 结束时间 + */ + private Date endDate; + /** + * 循环次数 + */ + private Long cycleCounter; + /** + * 总循环次数 + */ + private Long totalCycleCounter; + /** + * 对应的灭菌记录 + */ + private SterilizationRecord sterilizationRecord; + /** + * 阶段总耗时(分) 例:19 min 47 sec, stageTotalMin=19 + */ + private Integer stageTotalMin; + /** + * 阶段总耗时(秒) 例:19 min 47 sec, stageTotalSec=47 + */ + private Integer stageTotalSec; + /** + * 程序名称 + */ + private String programName; + /** + * 阶段详情信息 + */ + private List lowTempForJohnsonStageDetailsList = new ArrayList(); + + @OneToMany(fetch = FetchType.LAZY, mappedBy="lowTempForJohnsonSterilizerRecord") + @Cascade(value = { org.hibernate.annotations.CascadeType.SAVE_UPDATE }) + @OrderBy("id asc") + public List getLowTempForJohnsonStageDetailsList() { + return lowTempForJohnsonStageDetailsList; + } + + public void setLowTempForJohnsonStageDetailsList(List lowTempForJohnsonStageDetailsList) { + this.lowTempForJohnsonStageDetailsList = lowTempForJohnsonStageDetailsList; + } + + @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 getCycleCounter() { + return cycleCounter; + } + + public void setCycleCounter(Long cycleCounter) { + this.cycleCounter = cycleCounter; + } + + public Integer getStageTotalMin() { + return stageTotalMin; + } + + public void setStageTotalMin(Integer stageTotalMin) { + this.stageTotalMin = stageTotalMin; + } + + public Integer getStageTotalSec() { + return stageTotalSec; + } + + public void setStageTotalSec(Integer stageTotalSec) { + this.stageTotalSec = stageTotalSec; + } + + public String getProgramName() { + return programName; + } + + public void setProgramName(String programName) { + this.programName = programName; + } + + public Long getTotalCycleCounter() { + return totalCycleCounter; + } + + public void setTotalCycleCounter(Long totalCycleCounter) { + this.totalCycleCounter = totalCycleCounter; + } + +} Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizerrecord/action/SterilizerRecordLineChartAction.java =================================================================== diff -u -r28359 -r29628 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizerrecord/action/SterilizerRecordLineChartAction.java (.../SterilizerRecordLineChartAction.java) (revision 28359) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizerrecord/action/SterilizerRecordLineChartAction.java (.../SterilizerRecordLineChartAction.java) (revision 29628) @@ -18,6 +18,8 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.HighTempStageDetails; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.HighTempSterilizerRecord; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempForJohnsonStageDetails; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempForJohnsonSterilizerRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempStageDetails; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempSterilizerRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerRecord; @@ -291,5 +293,44 @@ String dateStr = DateTools.getFormatDateStr(timeDate,format); return dateStr; } - + /** + * 查询强生低温灭菌数据 + */ + public void selectLowTempForJohnsonSterilizerRecordData(){ + Long sterilizationRecordId = StrutsParamUtils.getPraramLongValue("sterilizationRecordId", 0L); + JSONObject rueslt = new JSONObject(); + try { + SterilizationRecord sterilizationRecord = sterilizationRecordManager.getSterilizationRecordById(sterilizationRecordId); + LowTempForJohnsonSterilizerRecord lowTempForJohnsonRecord = sterilizationRecordManager.getLowTempForJohnsonSterilizerRecord(sterilizationRecord.getSterilizer().getMachineNumber(), sterilizationRecord.getStartDate()); + List lowTempForJohnsonStageDetailsList = null; + if(lowTempForJohnsonRecord != null){ + lowTempForJohnsonStageDetailsList = lowTempForJohnsonRecord.getLowTempForJohnsonStageDetailsList(); + rueslt.put("totalCycleCounter", lowTempForJohnsonRecord.getTotalCycleCounter()); + rueslt.put("endDate", Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS.format(lowTempForJohnsonRecord.getEndDate())); + rueslt.put("cycleCounter", lowTempForJohnsonRecord.getCycleCounter()); + rueslt.put("machineNumber", lowTempForJohnsonRecord.getMachineNumber()); + rueslt.put("programName", lowTempForJohnsonRecord.getProgramName()); + rueslt.put("startDate", Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS.format(lowTempForJohnsonRecord.getStartDate())); + if(lowTempForJohnsonRecord.getStageTotalMin() != null){ + rueslt.put("stageTotalTime", lowTempForJohnsonRecord.getStageTotalMin() + " min " + lowTempForJohnsonRecord.getStageTotalSec() + " sec"); + }else{ + rueslt.put("stageTotalTime", "0 min " + lowTempForJohnsonRecord.getStageTotalSec() + " sec"); + } + rueslt.put("totalCycleCounter", lowTempForJohnsonRecord.getTotalCycleCounter()); + + rueslt.put("sterilizationUser", sterilizationRecord.getSterilizationUser()); + } + if(CollectionUtils.isNotEmpty(lowTempForJohnsonStageDetailsList)) { + for (LowTempForJohnsonStageDetails record : lowTempForJohnsonStageDetailsList) { + rueslt.put(record.getStageName(), "压力"+record.getRelationSymbol()+record.getPress() + " " + record.getPressureUnit()+ " " + (record.getStageMin()==null?0:record.getStageMin()) + "分钟" + record.getStageSec() + "秒"); + } + StrutsResponseUtils.output(true, rueslt); + }else{ + StrutsResponseUtils.output(false, rueslt); + } + }catch (Exception e) { + StrutsResponseUtils.output(false ,e.getMessage()); + e.printStackTrace(); + } + } } \ No newline at end of file Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/deviceinterface/DeviceInterface.java =================================================================== diff -u -r28359 -r29628 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/deviceinterface/DeviceInterface.java (.../DeviceInterface.java) (revision 28359) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/deviceinterface/DeviceInterface.java (.../DeviceInterface.java) (revision 29628) @@ -75,7 +75,14 @@ * 美雅洁干燥柜 */ public static final String MARGE_MODEL_DRYER = "DRYER"; - + /** + * 强生 + */ + public static final String JOHNSON = "Johnson"; + /** + * 强生 型号STERRAD 100S + */ + public static final String JOHNSON_MODEL_STERRAD_100S = "STERRAD 100S"; private Long id; /** Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/LowTempForJohnsonStageDetails.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/LowTempForJohnsonStageDetails.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/LowTempForJohnsonStageDetails.java (revision 29628) @@ -0,0 +1,123 @@ +package com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord; + +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; +/** + * 低温灭菌炉参数的阶段详情表 + * @author zc.li + * @date 2020-06-01 11:14 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class LowTempForJohnsonStageDetails { + private Long id; + /** + * 阶段名称 + */ + private String stageName; + /** + * 压力 + */ + private Double press; + /** + * 阶段耗时(分) 例:19 min 47 sec, stageTotalMin=19 + */ + private Integer stageMin; + /** + * 阶段耗时(秒) 例:19 min 47 sec, stageTotalSec=47 + */ + private Integer stageSec; + /** + * 压力单位 + */ + private String pressureUnit; + /** + * 压力关系符 press>50,则relationSymbol=">" + */ + private String relationSymbol; + /** + * 所属低温灭菌炉记录 + */ + private LowTempForJohnsonSterilizerRecord lowTempForJohnsonSterilizerRecord; + @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 Double getPress() { + return press; + } + + public void setPress(Double press) { + this.press = press; + } + + public Integer getStageMin() { + return stageMin; + } + + public void setStageMin(Integer stageMin) { + this.stageMin = stageMin; + } + + public Integer getStageSec() { + return stageSec; + } + + + public String getPressureUnit() { + return pressureUnit; + } + + public void setPressureUnit(String pressureUnit) { + this.pressureUnit = pressureUnit; + } + + public void setStageSec(Integer stageSec) { + this.stageSec = stageSec; + } + + @ManyToOne + @JoinColumn(name = "lowTempForJohnsonSterilizerRecord_id") + public LowTempForJohnsonSterilizerRecord getLowTempForJohnsonSterilizerRecord() { + return lowTempForJohnsonSterilizerRecord; + } + + public void setLowTempForJohnsonSterilizerRecord( + LowTempForJohnsonSterilizerRecord lowTempForJohnsonSterilizerRecord) { + this.lowTempForJohnsonSterilizerRecord = lowTempForJohnsonSterilizerRecord; + } + + public String getRelationSymbol() { + return relationSymbol; + } + + public void setRelationSymbol(String relationSymbol) { + this.relationSymbol = relationSymbol; + } + +} Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/lowTempForJohnsonSterilizerPara.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/lowTempForJohnsonSterilizerPara.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/lowTempForJohnsonSterilizerPara.js (revision 29628) @@ -0,0 +1,271 @@ +var form = null; +function openLowTempForJohnsonSterilizerPara(data) { + form = new top.Ext.FormPanel({ + id : 'returnGoodsRecordForm', + frame : true, + border : 0, + labelSeparator : ':', + bodyStyle : 'padding:5px 5px 0px 5px', + width : 750, + labelAlign:'right', + autoHeight : true, + autoScroll : true, + items : [{ + xtype:"fieldset", + layout:'column', + title :'强生低温灭菌参数', + autoHeight:true, + items:[{ + layout : 'column', + items : [{ + xtype : 'hidden', + name : 'id', + id : 'id' + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '灭菌炉次', + maxLength : '16', + id : 'cycleCounter', + name : 'cycleCounter', + allowBlank : false, + value : data.cycleCounter, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '灭菌员', + maxLength : '16', + id : 'sterilizationUser', + name : 'sterilizationUser', + allowBlank : false, + value : data.sterilizationUser, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '灭菌总炉次', + maxLength : '16', + id : 'totalCycleCounter', + name : 'totalCycleCounter', + allowBlank : false, + value : data.totalCycleCounter, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '程序名称', + maxLength : '16', + id : 'programName', + name : 'programName', + allowBlank : false, + value : data.programName, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '开始时间', + maxLength : '16', + id : 'startDate', + name : 'startDate', + allowBlank : false, + value : data.startDate, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '真空期', + maxLength : '16', + id : 'Vacuum', + name : 'Vacuum', + allowBlank : false, + value : data.Vacuum, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '注射期1', + maxLength : '16', + id : 'Injection1', + name : 'Injection1', + allowBlank : false, + value : data.Injection1, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '扩散期1', + maxLength : '16', + id : 'Diffusion1', + name : 'Diffusion1', + allowBlank : false, + value : data.Diffusion1, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '等离子期1', + maxLength : '16', + id : 'Plasma1', + name : 'Plasma1', + allowBlank : false, + value : data.Plasma1, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '注射期2', + maxLength : '16', + id : 'Injection2', + name : 'Injection2', + allowBlank : false, + value : data.Injection2, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '扩散期2', + maxLength : '16', + id : 'Diffusion2', + name : 'Diffusion2', + allowBlank : false, + value : data.Diffusion2, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '等离子期2', + maxLength : '16', + id : 'Plasma2', + name : 'Plasma2', + allowBlank : false, + value : data.Plasma2, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '结束时间', + maxLength : '16', + id : 'endDate', + name : 'endDate', + allowBlank : false, + value : data.endDate, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + labelWidth : 80, + items : [{ + xtype : 'textfield', + fieldLabel : '灭菌总时间', + maxLength : '16', + id : 'stageTotalTime', + name : 'stageTotalTime', + allowBlank : false, + value : data.stageTotalTime, + anchor : '80%', + readOnly : true, + cls:'fieldReadOnlyNoRemove' + }] + }] + }] + }], + buttonAlign :'center', + buttons : [{ + text : '取消', + handler : function() { + win.close(); + } + }] + }); + + var win = new top.Ext.Window({ + id : 'lowTempForJohnsonin', + layout : 'fit', + width : 720, + modal : true, + border : false, + height:'auto', + plain : true, + items : [ form ] + }); + win.show(); +} Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.jsp =================================================================== diff -u -r29513 -r29628 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.jsp (.../sterilizationRecordView.jsp) (revision 29513) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.jsp (.../sterilizationRecordView.jsp) (revision 29628) @@ -125,6 +125,7 @@ + Index: ssts-web/src/main/webapp/disinfectsystem/config/szsskrmyy/spring/timer.xml =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/config/szsskrmyy/spring/timer.xml (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/config/szsskrmyy/spring/timer.xml (revision 29628) @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + PROPAGATION_REQUIRED + PROPAGATION_NEVER + + + + + + + + + + + processDeviceInterfaceData + + + + + + + + + + 0 0/5 * * * ? + + + \ No newline at end of file Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecord.java =================================================================== diff -u -r29472 -r29628 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecord.java (.../SterilizationRecord.java) (revision 29472) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecord.java (.../SterilizationRecord.java) (revision 29628) @@ -340,6 +340,7 @@ private String monitorPackageBarcode; public static final Integer STERILIZATIONPARATYPE_LOW = 1;//低温 public static final Integer STERILIZATIONPARATYPE_HIGH = 2;//高温 + public static final Integer STERILIZATIONPARATYPE_LOWOFJOHNSON = 3;//强生低温 /** * 灭菌参数获取类型(不同类型获取的数据不一样,处理方式不一样) */ Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceView.jsp =================================================================== diff -u -r29513 -r29628 --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceView.jsp (.../deviceInterfaceView.jsp) (revision 29513) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceView.jsp (.../deviceInterfaceView.jsp) (revision 29628) @@ -30,6 +30,8 @@ var GETINGE = '<%=DeviceInterface.GETINGE%>'; var STERIS = '<%=DeviceInterface.STERIS%>'; var BELIMED = '<%=DeviceInterface.BELIMED%>'; +var JOHNSON = '<%=DeviceInterface.JOHNSON%>'; +var JOHNSON_MODEL_STERRAD_100S = '<%=DeviceInterface.JOHNSON_MODEL_STERRAD_100S%>'; //远程方式 var SHAREFOLDER = '<%=DeviceInterface.INTERFACETYPE_SHAREFOLDER%>'; var FTP = '<%=DeviceInterface.INTERFACETYPE_FTP%>'; Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.js =================================================================== diff -u -r29518 -r29628 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.js (.../sterilizationRecordView.js) (revision 29518) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.js (.../sterilizationRecordView.js) (revision 29628) @@ -841,6 +841,22 @@ function openHighSterilizerRecordLineChart(id,sterilizationUser){ openModalWindowForExt(WWWROOT+'/disinfectsystem/sterilizationmanager/sterilizerRecord/highSterilizerLineChart.jsp?sterilizationRecordId='+id,'', '灭菌器参数', '1050', '600'); } +function openLowTempForJohnsonSterilizerRecordLineChart(id,sterilizationUser){ + Ext.Ajax.request({ + url :WWWROOT+'/disinfectSystem/sterilization/sterilizerRecordLineChartAction!selectLowTempForJohnsonSterilizerRecordData.do', + params : { + sterilizationRecordId : id + }, + success : function(response, options) { + var result = Ext.decode(response.responseText); + openLowTempForJohnsonSterilizerPara(result.data); + }, + failure : function(response, options) { + var result = Ext.decode(response.responseText); + showResult(result.message); + } + }); +} function renderBiologicalMonitoringStatus(v, p, record) { if (v == '进行中') { return "

" + v + ""; @@ -900,6 +916,8 @@ return ""; }else if(record.data.sterilizationParaType == 2){ return ""; + }else if(record.data.sterilizationParaType == 3){ + return ""; }else{ return null; } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java =================================================================== diff -u -r29561 -r29628 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 29561) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 29628) @@ -14,6 +14,7 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecordPic; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.HighTempSterilizerRecord; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempForJohnsonSterilizerRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempSterilizerRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerRecord; import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.vo.SterilizationRecordPrintTousseItem; @@ -500,5 +501,12 @@ * @return map key为灭菌记录id,value为是否含有植入物 */ public Map getSterilizationRecordIncludeImplantMap(List sterilizationRecordIdList); - + + /** + * 获取机器号相等且灭菌开始时间上下不超过5分钟的强生低温灭菌炉参数记录 + * @param machineNo 机器号(文件的设备编号=灭菌炉机器号) + * @param startDate 灭菌记录的开始日期 + * @return + */ + public LowTempForJohnsonSterilizerRecord getLowTempForJohnsonSterilizerRecord(String machineNo, Date startDate); } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r29605 -r29628 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 29605) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 29628) @@ -76,6 +76,7 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecordPic; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.HighTempSterilizerRecord; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempForJohnsonSterilizerRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempSterilizerRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerRecord; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; @@ -6040,5 +6041,22 @@ } return null; } - + @Override + public LowTempForJohnsonSterilizerRecord getLowTempForJohnsonSterilizerRecord( + String machineNo, Date startDate) { + LowTempForJohnsonSterilizerRecord 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 = (LowTempForJohnsonSterilizerRecord)objectDao.getBySql(LowTempForJohnsonSterilizerRecord.class.getSimpleName(), queryString); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } } Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/JohnsonDataManagerImpl.java =================================================================== diff -u --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/JohnsonDataManagerImpl.java (revision 0) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/JohnsonDataManagerImpl.java (revision 29628) @@ -0,0 +1,463 @@ +package com.forgon.disinfectsystem.maintain.device.service; + +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +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.FTP; +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.NonUniqueResultException; +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.LowTempForJohnsonStageDetails; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.LowTempForJohnsonSterilizerRecord; +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; + +/** + * 强生低温灭菌器数据处理 + @author zc.li 2020.06.29 + */ +@Service("johnsonDataManagerTarget") +public class JohnsonDataManagerImpl 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(JohnsonDataManagerImpl.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, devInterface.getPort(), userName, pwd); + ftp.setFileType(FTP.BINARY_FILE_TYPE); + 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(); + } + } + + } + 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,"ISO-8859-1"); + // 读取直到最后一行 + String line = ""; + boolean startStageDetails = false; + List lowTempForJohnsonSterilizerRecordList = new ArrayList(); + LowTempForJohnsonSterilizerRecord lowTempForJohnsonSterilizerRecord = null; + LowTempForJohnsonStageDetails lowTempForJohnsonStageDetails = null; + SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); + String processCompleteTime = null; + int plasmaAmount = 2; + int diffusionAmount = 2; + int injectionAmount = 2; + boolean startReaded = false; + Set machineNumberCycleCounterSet = new HashSet(); + while ((line = br.readLine()) != null) { + if(line.contains("Validated")){//验证人 读取开始标记 + lowTempForJohnsonSterilizerRecord = new LowTempForJohnsonSterilizerRecord(); + }else if(!startStageDetails && line.contains("sec")){//总耗时 + if(lowTempForJohnsonSterilizerRecord == null){ + continue; + } + setStageTime(line, lowTempForJohnsonSterilizerRecord); + }else if(startStageDetails && line.contains("sec")){//阶段耗时 + if(lowTempForJohnsonSterilizerRecord == null){ + continue; + } + lowTempForJohnsonStageDetails = new LowTempForJohnsonStageDetails(); + setStageTime(line, lowTempForJohnsonStageDetails); + lowTempForJohnsonSterilizerRecord.getLowTempForJohnsonStageDetailsList().add(lowTempForJohnsonStageDetails); + }else if(line.contains("PROCESS")){//灭菌完成时间 + processCompleteTime = line; + }else if(line.contains("STERILIZER")){//机器号 + String machineNumber = line.substring(line.indexOf("#") + 1).trim(); + if(lowTempForJohnsonSterilizerRecord == null){ + continue; + } + Long cycleCounter = lowTempForJohnsonSterilizerRecord.getCycleCounter(); + if(cycleCounter == null){ + continue; + } + if(isExistData(cycleCounter, machineNumber, machineNumberCycleCounterSet)){ + continue; + } + lowTempForJohnsonSterilizerRecord.setMachineNumber(machineNumber); + lowTempForJohnsonSterilizerRecordList.add(lowTempForJohnsonSterilizerRecord); + }else if(line.contains("Vent")){//开始读取阶段信息 + startStageDetails = true; + plasmaAmount = 2;//因为是信息的颠倒的,所以先读到的是2期数据 + diffusionAmount = 2; + injectionAmount = 2; + continue; + }else if(line.contains("Stage")){//阶段信息 + startStageDetails = true; + String torrStr = null; + if(line.contains("mtorr")){ + lowTempForJohnsonStageDetails.setPressureUnit("mtorr"); + }else if(line.contains("torr")){ + lowTempForJohnsonStageDetails.setPressureUnit("torr"); + }else{//未知的压力单位 + lowTempForJohnsonStageDetails.setPressureUnit("未知的单位"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), + Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, + "未知的压力单位"+line); + throw new RuntimeException("未知的压力单位"+line); + } + if(line.contains("Plasma")){//等离子器(1或2期) + lowTempForJohnsonStageDetails.setStageName("Plasma"+plasmaAmount); + plasmaAmount--; + }else if(line.contains("Diffusion")){//扩散期(1或2期) + lowTempForJohnsonStageDetails.setStageName("Diffusion"+diffusionAmount); + diffusionAmount--; + }else if(line.contains("Injection")){//注射期(1或2期) + lowTempForJohnsonStageDetails.setStageName("Injection"+injectionAmount); + injectionAmount--; + }else if(line.contains("Vacuum")){//真空期 + lowTempForJohnsonStageDetails.setStageName("Vacuum"); + } + line = line.substring(line.indexOf("Press")+5).trim(); + String relationSymbol = line.substring(0, 1); + lowTempForJohnsonStageDetails.setRelationSymbol(relationSymbol); + System.out.println("line___"+line+"__"+relationSymbol); + torrStr = line.replaceAll(lowTempForJohnsonStageDetails.getPressureUnit(), "").substring(1).trim(); + System.out.println("torrStr"+torrStr); + lowTempForJohnsonStageDetails.setRelationSymbol(relationSymbol); + lowTempForJohnsonStageDetails.setPress(Double.valueOf(torrStr)); + lowTempForJohnsonStageDetails.setLowTempForJohnsonSterilizerRecord(lowTempForJohnsonSterilizerRecord); + }else if(line.contains("MON")){//灭菌开始时间 + if(lowTempForJohnsonSterilizerRecord == null){ + continue; + } + startReaded = true; + startStageDetails = false;//阶段信息读取完毕 + String startDateStr = line.substring(line.indexOf("MON") + 3).trim(); + String yearMonthDay = startDateStr.substring(0, 6) + "20" + startDateStr.substring(6, 8); + Date startDate = sdf.parse(yearMonthDay + " " +startDateStr.substring(startDateStr.length()-8)); + if(processCompleteTime == null){ + continue; + } + Date endDate = sdf.parse(yearMonthDay + " " + processCompleteTime.substring(processCompleteTime.indexOf("COMPLETE")+ 9).trim()); + lowTempForJohnsonSterilizerRecord.setStartDate(startDate); + lowTempForJohnsonSterilizerRecord.setEndDate(endDate); + }else if(startReaded){//开始时间下一条数据是程序名 + startReaded = false; + System.out.println("programNameLine:"+line); + String programName = line.substring(3); + System.out.println("programName:"+programName); + if(lowTempForJohnsonSterilizerRecord == null){ + continue; + } + lowTempForJohnsonSterilizerRecord.setProgramName(programName); + }else if(line.contains("TOTAL MACHINE CYCLES")){//设备总炉次 + if(lowTempForJohnsonSterilizerRecord == null){ + continue; + } + Long totalCycleCounter = Long.valueOf(line.substring(line.indexOf("CYCLES") + 7).trim()); + lowTempForJohnsonSterilizerRecord.setTotalCycleCounter(totalCycleCounter); + }else if(line.contains("DAILY")){//每天炉次 + if(lowTempForJohnsonSterilizerRecord == null){ + continue; + } + Long cycleCounter = Long.valueOf(line.substring(line.indexOf("#") + 1).trim()); + lowTempForJohnsonSterilizerRecord.setCycleCounter(cycleCounter); + } + } + if(CollectionUtils.isNotEmpty(lowTempForJohnsonSterilizerRecordList)){ + removeIncompleteData(lowTempForJohnsonSterilizerRecordList); + objectDao.batchSaveOrUpdate(lowTempForJohnsonSterilizerRecordList); + } + } catch(Exception e){ + logger.warn(e.getMessage()); + e.printStackTrace(); + }finally{ + FileSystemHelper.closeInputStream(inputStream, br, isr, out); + } + return jsonArray; + } + /** + * 设置阶段耗时 + * @param line + * @param lowTempForJohnsonStageDetails + */ + private void setStageTime(String line, LowTempForJohnsonStageDetails lowTempForJohnsonStageDetails){ + String stageTime = line.substring(8).replaceAll(" ", "").replace("sec", ""); + int stageMin = 0; + int stageSec = 0; + if(stageTime.contains("min")){ + String[] timeArr = stageTime.split("min"); + stageMin = Integer.valueOf(timeArr[0]); + stageSec = Integer.valueOf(timeArr[1]); + + }else{//可能只有秒,没有分 + stageSec = Integer.valueOf(stageTime); + } + lowTempForJohnsonStageDetails.setStageMin(stageMin); + lowTempForJohnsonStageDetails.setStageSec(stageSec); + } + /** + * 设置阶段耗时 + * @param line + * @param lowTempForJohnsonSterilizerRecord + */ + private void setStageTime(String line, LowTempForJohnsonSterilizerRecord lowTempForJohnsonSterilizerRecord){ + System.out.println("stageTimeLine:"+line); + String stageTime = line.substring(8).replaceAll(" ", "").replace("sec", ""); + int stageTotalMin = 0; + int stageTotalSec = 0; + System.out.println("stageTime:"+stageTime); + if(stageTime.contains("min")){ + String[] timeArr = stageTime.split("min"); + stageTotalMin = Integer.valueOf(timeArr[0]); + stageTotalSec = Integer.valueOf(timeArr[1]); + System.out.println("stageTotalMin:"+ stageTotalMin); + System.out.println("stageTotalSec:"+ stageTotalSec); + }else{//可能只有秒,没有分 + stageTotalSec = Integer.valueOf(stageTime); + } + lowTempForJohnsonSterilizerRecord.setStageTotalMin(stageTotalMin); + lowTempForJohnsonSterilizerRecord.setStageTotalSec(stageTotalSec); + } + /** + * 验证数据是否已经存在(包括文件的数据重复验证和数据库数据重复的验证) + * @param cycleCounter 循环次数 + * @param machineNumber 机器号 + * @param machineNumberCycleCounterSet 已读取的循环次数_机器号 + * @return + */ + private boolean isExistData(Long cycleCounter, String machineNumber, Set machineNumberCycleCounterSet){ + if(machineNumberCycleCounterSet.contains(cycleCounter+"_"+machineNumber)){//第一层验证,已读取的数据不再读取 + return true;//文件有数据重复,已读取的炉次,不再读取 + }else if(isExistData(machineNumber, cycleCounter)){//第二层验证,已保存到的数据库的数据不再保存 + return true; + } + machineNumberCycleCounterSet.add(cycleCounter+"_"+machineNumber); + return false; + } + /** + * 移除一些数据(现有移除不完整数据;完整数据有灭菌周期) + * @param lowTempSterilizerRecordList + */ + private void removeIncompleteData(List lowTempForJohnsonSterilizerRecord){ + Iterator it = lowTempForJohnsonSterilizerRecord.iterator(); + while(it.hasNext()){ + LowTempForJohnsonSterilizerRecord item = it.next(); + //要保存的数据 关联灭菌记录 + refreshSterilizaerRecordAmounts(item,it); + } + } + /** + * 验证此机器号此灭菌锅次的数据是否已经保存过,避免重复保存 + * @param machineNumber 机器号 + * @param cycleCounter 循环次数 + * @return + */ + private boolean isExistData(String machineNumber, Long cycleCounter){ + String sql = String.format("select count(*) from %s where machineNumber='%s' and cycleCounter=%s ", + LowTempForJohnsonSterilizerRecord.class.getSimpleName(),machineNumber,cycleCounter); + if(objectDao.countBySql(sql) > 0){ + return true; + } + return false; + } + public boolean refreshSterilizaerRecordAmounts(LowTempForJohnsonSterilizerRecord item, Iterator it) { + boolean result = false; + 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,""); + try { + 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(); + if (DatabaseUtil.isPoIdValid(id)){ + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, String.format("机器号[%s],循环次数[%s],需要更新温度压力数据的灭菌记录id[%s]",machineNo,item.getCycleCounter(),id)); + //灭菌记录的的温度压力数据获取方式 + SterilizationRecord sterilizationRecord = sterilizationRecordManager.get(id); + sterilizationRecord.setSterilizationParaType(SterilizationRecord.STERILIZATIONPARATYPE_LOWOFJOHNSON); + objectDao.saveOrUpdate(sterilizationRecord); + item.setSterilizationRecord(sterilizationRecord); + }else{ + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, String.format("机器号[%s],循环次数[%s],无匹配的灭菌记录",machineNo,item.getCycleCounter())); + it.remove(); + } + } catch(NonUniqueResultException e){ + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, + String.format("机器号[%s],循环次数[%s],%至%s的灭菌记录不止一条!",machineNo,item.getCycleCounter(),beginStartTimeStr,endStartTimeStr)); + e.printStackTrace(); + }catch (Exception e) { + e.printStackTrace(); + } + return result; + } + /** + * 数据处理结束之后的工作,移动文件夹等等 + */ + @Override + public void end() { + + } +} Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceForm.js =================================================================== diff -u -r28777 -r29628 --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceForm.js (.../deviceInterfaceForm.js) (revision 28777) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceForm.js (.../deviceInterfaceForm.js) (revision 29628) @@ -139,7 +139,7 @@ displayField : 'value', store : new Ext.data.SimpleStore({ fields : [ 'value' ], - data : [[BELIMED],[STERIS],[GETINGE],[JIANGHAN],[CHANGLONG],[XINHUA],[MARGE]] + data : [[BELIMED],[STERIS],[GETINGE],[JIANGHAN],[CHANGLONG],[XINHUA],[MARGE],[JOHNSON]] } ), forceSelection : true, @@ -356,7 +356,22 @@ data : [[SHAREFOLDER],[FTP]] }) showCmt('interfaceTypeWrap','interfaceType',true,interfaceTypeComboStore); - }else{ + }else if(deviceBrand == JOHNSON){ + var johnsonModelComboStore = new Ext.data.SimpleStore({ + fields : [ 'value' ], + data : [[JOHNSON_MODEL_STERRAD_100S]] + }) + var interfaceTypeComboStore = new Ext.data.SimpleStore({ + fields : [ 'value' ], + data : [[SHAREFOLDER],[FTP]] + }) + var deviceTypeComboStore = new Ext.data.SimpleStore({ + fields : [ 'value' ], + data : [[DEVICETYPE_LOW]] + }) + showCmt('deviceModelWrap','deviceModel',true,johnsonModelComboStore); + showCmt('interfaceTypeWrap','interfaceType',true,interfaceTypeComboStore); + showCmt('deviceTypeWrap','deviceType',true,deviceTypeComboStore); } }