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