Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/BelimedSterilizerRecord.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/BelimedSterilizerRecord.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/BelimedSterilizerRecord.java (revision 35442) @@ -0,0 +1,125 @@ +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 javax.persistence.Transient; + +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; + +/** + * Belimed通用型参数记录表 + * @author zc.li + * @date 2023-03-15 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class BelimedSterilizerRecord { + private Long id; + /** + * 机器号 + */ + private String machineNumber; + /** + * 启动时间 + */ + private Date startDate; + /** + * 结束时间 + */ + private Date endDate; + /** + * 运行次数 + */ + private Long cycles; + + /** + * 对应的灭菌记录 + */ + private SterilizationRecord sterilizationRecord; + /** + * 阶段详情信息 + */ + private List belimedStageDetailsList = new ArrayList(); + @OneToMany(fetch = FetchType.LAZY, mappedBy="belimedSterilizerRecord") + @Cascade(value = { org.hibernate.annotations.CascadeType.SAVE_UPDATE }) + @OrderBy("id asc") + public List getBelimedStageDetailsList() { + return belimedStageDetailsList; + } + + public void setBelimedStageDetailsList(List belimedStageDetailsList) { + this.belimedStageDetailsList = belimedStageDetailsList; + } + + @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 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 getCycles() { + return cycles; + } + + public void setCycles(Long cycles) { + this.cycles = cycles; + } + + public String getMachineNumber() { + return machineNumber; + } + + public void setMachineNumber(String machineNumber) { + this.machineNumber = machineNumber; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecord.java =================================================================== diff -u -r35131 -r35442 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecord.java (.../SterilizationRecord.java) (revision 35131) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecord.java (.../SterilizationRecord.java) (revision 35442) @@ -358,14 +358,17 @@ */ private String chemistryPackageBarcode; - public static final Integer STERILIZATIONPARATYPE_LOW = 1;//低温 - public static final Integer STERILIZATIONPARATYPE_HIGH = 2;//高温 + public static final Integer STERILIZATIONPARATYPE_LOW = 1;//新华低温 + public static final Integer STERILIZATIONPARATYPE_HIGH = 2;//新华高温 public static final Integer STERILIZATIONPARATYPE_LOWOFJOHNSON = 3;//强生低温 public static final Integer STERILIZATIONPARATYPE_HSONE = 4;//阶段灭菌HS6620 public static final Integer STERILIZATIONPARATYPE_CASP120 = 5;//casp-120 public static final Integer STERILIZATIONPARATYPE_SENOH = 6;//千樱脉动真空灭菌器(PLC型号S7-1200) public static final Integer STERILIZATIONPARATYPE_XINHUATYPE_PS100GXP = 7;//新华的一种灭菌炉型号 PS-100GXP - public static final Integer STERILIZATIONPARATYPE_TYPE_COMMON = 8;//通用型 + public static final Integer STERILIZATIONPARATYPE_TYPE_COMMON = 8;//新华通用型 + public static final Integer STERILIZATIONPARATYPE_TYPE_GETINGE_COMMON = 9;//洁定通用型 + public static final Integer STERILIZATIONPARATYPE_BELIMED = 10;//倍力曼 + /** * 灭菌参数获取类型(不同类型获取的数据不一样,处理方式不一样) */ Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/GtCommonSterilizerRecord.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/GtCommonSterilizerRecord.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/GtCommonSterilizerRecord.java (revision 35442) @@ -0,0 +1,137 @@ +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 javax.persistence.Transient; + +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; + +/** + * 洁定通用型参数记录表 + * @author zc.li + * @date 2023-03-15 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class GtCommonSterilizerRecord { + private Long id; + /** + * 机器号 + */ + private String machineNumber; + /** + * 启动时间 + */ + private Date startDate; + /** + * 结束时间 + */ + private Date endDate; + /** + * 运行次数 + */ + private Long cycles; + + /** + * 对应的灭菌记录 + */ + private SterilizationRecord sterilizationRecord; + /** + * 阶段详情信息 + */ + private List gtCommonStageDetailsList = new ArrayList(); + /** + * 结束 + */ + private boolean end; + @OneToMany(fetch = FetchType.LAZY, mappedBy="gtCommonSterilizerRecord") + @Cascade(value = { org.hibernate.annotations.CascadeType.SAVE_UPDATE }) + @OrderBy("id asc") + public List getGtCommonStageDetailsList() { + return gtCommonStageDetailsList; + } + + public void setGtCommonStageDetailsList(List gtCommonStageDetailsList) { + this.gtCommonStageDetailsList = gtCommonStageDetailsList; + } + + @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 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 getCycles() { + return cycles; + } + + public void setCycles(Long cycles) { + this.cycles = cycles; + } + + public String getMachineNumber() { + return machineNumber; + } + + public void setMachineNumber(String machineNumber) { + this.machineNumber = machineNumber; + } + @Transient + public boolean getEnd() { + return end; + } + + public void setEnd(boolean end) { + this.end = end; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/CommonFileManager.java =================================================================== diff -u -r29962 -r35442 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/CommonFileManager.java (.../CommonFileManager.java) (revision 29962) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/CommonFileManager.java (.../CommonFileManager.java) (revision 35442) @@ -3,6 +3,8 @@ import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; +import java.util.Calendar; +import java.util.Date; import jcifs.smb.SmbFile; @@ -47,4 +49,12 @@ * @return */ public BufferedReader getBufferedReader(InputStreamReader isr, InputStream inputStream,String charset); + /** + * 获取指定时间增加时分秒后的时间 + * @param startDate 开始时间 + * @param spaceTime 时分秒 + * @param calendar + * @return + */ + public Date getTimeAfterAddingTime(Date startDate,String spaceTime, Calendar calendar); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/CommonFileManagerImpl.java =================================================================== diff -u -r29962 -r35442 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/CommonFileManagerImpl.java (.../CommonFileManagerImpl.java) (revision 29962) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/filemanager/CommonFileManagerImpl.java (.../CommonFileManagerImpl.java) (revision 35442) @@ -3,6 +3,8 @@ import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; +import java.util.Calendar; +import java.util.Date; import jcifs.smb.SmbFile; @@ -80,4 +82,19 @@ } return br; } + @Override + public Date getTimeAfterAddingTime(Date startDate,String spaceTime, Calendar calendar){ + if(startDate == null || StringUtils.isBlank(spaceTime)){ + return null; + } + String[] arr = spaceTime.split(":"); + if(arr.length != 3){ + return null; + } + calendar.setTime(startDate); + calendar.add(Calendar.HOUR,Integer.valueOf(arr[0])); + calendar.add(Calendar.MINUTE,Integer.valueOf(arr[1])); + calendar.add(Calendar.SECOND,Integer.valueOf(arr[2])); + return calendar.getTime(); + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/GtCommonStageDetails.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/GtCommonStageDetails.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/GtCommonStageDetails.java (revision 35442) @@ -0,0 +1,91 @@ +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; + +/** + * 洁定通用型参数的阶段详情表 + * @author zc.li + * @date 2023-03-15 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class GtCommonStageDetails { + private Long id; + /** + * 阶段时间 + */ + private Date time; + /** + * 程序阶段号 + */ + private String stageNo; + /** + * 内室温度 + */ + private Double t1Temp; + /** + * 内室压力 + */ + private Double p1Mbar; + /** + * 所属洁定通用型灭菌炉记录 + */ + private GtCommonSterilizerRecord gtCommonSterilizerRecord; + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + public Date getTime() { + return time; + } + public void setTime(Date stageDate) { + this.time = stageDate; + } + public String getStageNo() { + return stageNo; + } + public void setStageNo(String stageNo) { + this.stageNo = stageNo; + } + @ManyToOne + @JoinColumn(name = "gtCommonSR_id") + public GtCommonSterilizerRecord getGtCommonSterilizerRecord() { + return gtCommonSterilizerRecord; + } + + public void setGtCommonSterilizerRecord( + GtCommonSterilizerRecord gtCommonSterilizerRecord) { + this.gtCommonSterilizerRecord = gtCommonSterilizerRecord; + } + public Double getT1Temp() { + return t1Temp; + } + public void setT1Temp(Double t1Temp) { + this.t1Temp = t1Temp; + } + public Double getP1Mbar() { + return p1Mbar; + } + public void setP1Mbar(Double p1Mbar) { + this.p1Mbar = p1Mbar; + } + +} Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImpl.java =================================================================== diff -u -r35379 -r35442 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImpl.java (.../XinHuaDataManagerImpl.java) (revision 35379) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImpl.java (.../XinHuaDataManagerImpl.java) (revision 35442) @@ -20,7 +20,6 @@ import java.util.UUID; import jcifs.smb.SmbFile; -import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.collections.CollectionUtils; @@ -582,15 +581,11 @@ } else { //灭菌炉数据处理 logger.debug(String.format("开始处理灭菌炉数据:品牌【%s】,机器号【%s】,循环次数【%s】", brand,machineNumber,cycleCounter)); - JSONObject jsObject = sterilizerDataReadAndSave(cacheFile,devInterface,null,null, enableDetailedDeviceInformation, loginUserData); + JSONObject jsObject = sterilizerDataReadAndSave(cacheFile,devInterface,null,null, enableDetailedDeviceInformation, loginUserData, isAutoCompleteSterilization); if( jsObject != null){ machineNumber = jsObject.getString("machineNumber");//机器号 cycleCounter = jsObject.getString("cycleCounter");//循环次数 boolean isEnd = jsObject.getBoolean("isEnd");//灭菌阶段是否为已结束 - // 灭菌炉是否自动完成灭菌 - if( !StringUtils.isNotBlank(isAutoCompleteSterilization) || isAutoCompleteSterilization.equals(Constants.STR_YES)){ - autoFinishSterilizerRecord(devInterface.getId().toString(),Long.parseLong(cycleCounter),machineNumber); - } //若灭菌炉的灭菌阶段为:已结束,则把该文件放进backUp文件夹中 if(isEnd){ SmbFile desFile = session.createSmbFileObject(backUpDirURL + fileName); @@ -734,19 +729,13 @@ if(fileName.toUpperCase().contains("ST")){ //灭菌炉数据处理 logger.debug(String.format("开始处理灭菌炉数据:品牌【%s】,机器号【%s】,循环次数【%s】", brand,machineNumber,cycleCounter)); - JSONObject jsObject = sterilizerDataReadAndSave(null, devInterface, cacheFile, ftp, enableDetailedDeviceInformation, loginUserData); + JSONObject jsObject = sterilizerDataReadAndSave(null, devInterface, cacheFile, ftp, enableDetailedDeviceInformation, loginUserData, isAutoCompleteSterilization); changeResult = ftpFileManager.changeWorkingDirectory(ftp, directoryIso); if(!changeResult){ throw new RuntimeException("切换目录[" + directory + "]失败"); } if( jsObject != null){ - machineNumber = jsObject.getString("machineNumber");//机器号 - cycleCounter = jsObject.getString("cycleCounter");//循环次数 boolean isEnd = jsObject.getBoolean("isEnd");//灭菌阶段是否为已结束 - // 灭菌炉是否自动完成灭菌 - if( !StringUtils.isNotBlank(isAutoCompleteSterilization) || isAutoCompleteSterilization.equals(Constants.STR_YES)){ - autoFinishSterilizerRecord(devInterface.getId().toString(),Long.parseLong(cycleCounter),machineNumber); - } //若灭菌炉的灭菌阶段为:已结束,则把该文件放进backUp文件夹中 if(isEnd){ try{ @@ -870,7 +859,7 @@ * @param ftp fTPclient对象 * @return */ - private JSONObject sterilizerDataReadAndSave(SmbFile remoteFile,DeviceInterface devInterface, FTPFile ftpFile, FTPClient ftp, boolean enableDetailedDeviceInformation, LoginUserData loginUserData){ + private JSONObject sterilizerDataReadAndSave(SmbFile remoteFile,DeviceInterface devInterface, FTPFile ftpFile, FTPClient ftp, boolean enableDetailedDeviceInformation, LoginUserData loginUserData, String isAutoCompleteSterilization){ //文件名称 String fileName = null; if(remoteFile != null){ @@ -999,13 +988,14 @@ if(DatabaseUtil.isPoIdValid(sterilizationRecordId)){ refreshSterilizationParaType(record, sterilizationRecordId); objectDao.save(record); + // 灭菌炉是否自动完成灭菌 + if(DatabaseUtil.isPoIdValid(sterilizationRecordId) && !StringUtils.isNotBlank(isAutoCompleteSterilization) || isAutoCompleteSterilization.equals(Constants.STR_YES)){ + sterilizationRecordManager.autoFinishSterilizerRecord(sterilizationRecordId, devInterface.getId(), machineNumber); + } } //返回数据 JSONObject reusltJson = new JSONObject(); - reusltJson.put("machineNumber", machineNumber); - reusltJson.put("cycleCounter", cycleCounter); reusltJson.put("isEnd", isEnd); - reusltJson.put("procStartTime", procStartTime.getTime()); return reusltJson; } return null; @@ -1029,56 +1019,6 @@ FileSystemHelper.closeInputStream(inputStream, null, null, out); } } - // 自动完成灭菌 - public void autoFinishSterilizerRecord(String devInterfaceId,Long cycleCounter,String machineNo) - { - String queryString = "select sr.id from SterilizationRecord sr" - + " where sr.sterilizer.deviceInterface.id = :devInterfaceId" - + " and sr.sterilizer.machineNumber = :machineNumber" - + " and sr.cycleCounter = :cycleCounter" - + " and sr.status = :status"; - - Session session = objectDao.getHibernateSession(); - Query query = session.createQuery(queryString); - query.setParameter("devInterfaceId", Long.valueOf(devInterfaceId)); - query.setParameter("machineNumber", machineNo); - query.setParameter("cycleCounter", cycleCounter); - query.setParameter("status", SterilizationRecord.STERILIZATION_STATUS_BEGIN); - List ids = query.list(); - - if(CollectionUtils.isNotEmpty(ids)) - { - queryString = "select s.orgUnitCoding from Sterilizer s" - + " where s.deviceInterface.id = :devInterfaceId" - + " and s.machineNumber = :machineNumber"; - query = session.createQuery(queryString); - query.setParameter("devInterfaceId", Long.valueOf(devInterfaceId)); - query.setParameter("machineNumber", machineNo); - List orgUnitCodes = query.list(); - if(CollectionUtils.isNotEmpty(orgUnitCodes)) - { - sterilizationRecordManager.completeSterilization(ids, orgUnitCodes.get(0),"自动完成"); - -// // 刷新灭菌记录列表页面 -// Util util = ScriptSessionUtil.getDWRUtil("/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.jsp"); -// if (util != null) { -// util.addFunctionCall("alert"); -// util.addFunctionCall("grid.dwrReload()"); -// } -// util = ScriptSessionUtil.getDWRUtil("/homepage/portalPage.jsp"); -// if (util != null) { -// util.addFunctionCall("alert"); -// } -// - - -// queryString = "update SterilizationRecord set finishOperater = '自动完成' where id = :sterilizationId"; -// query = session.createQuery(queryString); -// query.setParameter("sterilizationId", ids.get(0)); -// query.executeUpdate(); - } - } - } /** Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/BelimedStageDetails.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/BelimedStageDetails.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/BelimedStageDetails.java (revision 35442) @@ -0,0 +1,92 @@ +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; + +/** + * Belimed通用型参数的阶段详情表 + * @author zc.li + * @date 2023-03-15 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class BelimedStageDetails { + private Long id; + /** + * 阶段时间 + */ + private Date time; + /** + * 程序阶段名称 + */ + private String stageName; + /** + * 内室温度 + */ + private Double t1Temp; + /** + * 内室压力 + */ + private Double p1Mbar; + /** + * 所属洁定通用型灭菌炉记录 + */ + private BelimedSterilizerRecord belimedSterilizerRecord; + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + public Date getTime() { + return time; + } + public void setTime(Date stageDate) { + this.time = stageDate; + } + + public String getStageName() { + return stageName; + } + public void setStageName(String stageName) { + this.stageName = stageName; + } + @ManyToOne + @JoinColumn(name = "belimedSR_id") + public BelimedSterilizerRecord getBelimedSterilizerRecord() { + return belimedSterilizerRecord; + } + + public void setBelimedSterilizerRecord( + BelimedSterilizerRecord belimedSterilizerRecord) { + this.belimedSterilizerRecord = belimedSterilizerRecord; + } + public Double getT1Temp() { + return t1Temp; + } + public void setT1Temp(Double t1Temp) { + this.t1Temp = t1Temp; + } + public Double getP1Mbar() { + return p1Mbar; + } + public void setP1Mbar(Double p1Mbar) { + this.p1Mbar = p1Mbar; + } + +} Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/GetingeDataManagerImpl.java =================================================================== diff -u -r35419 -r35442 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/GetingeDataManagerImpl.java (.../GetingeDataManagerImpl.java) (revision 35419) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/GetingeDataManagerImpl.java (.../GetingeDataManagerImpl.java) (revision 35442) @@ -41,10 +41,11 @@ import com.forgon.disinfectsystem.entity.basedatamanager.deviceinterface.DeviceInterface; import com.forgon.disinfectsystem.entity.basedatamanager.rinser.Rinser; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.GtCommonStageDetails; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.GtCommonSterilizerRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.OneOfGetingeStageDetails; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.OneOfGetingeSterilizerRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerFileName; -import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerRecord; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washData.WashData; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; import com.forgon.disinfectsystem.filemanager.CommonFileManager; @@ -398,7 +399,8 @@ appLogManager.saveLog(loginUserData, Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, "文件数量:"+ length+",backUp位置:" + backUpPath); } commonFileManager.makeDirectory(remoteType, ftp, backUpPath, session, enableDetailedDeviceInformation, loginUserData); - for (int i = 0; i < length; i++) { + int readedFileAmount = 0; + for (int i = 0; i < length && readedFileAmount < 5; i++) { FTPFile ftpFile = null; SmbFile smbForm = null; String name = null; @@ -456,28 +458,8 @@ } }else{ // 灭菌炉数据处理 - JSONArray jsArray = sterilizerDataReadAndSave(smbForm, devInterface, remoteType, ftp, name, machineNumber, enableDetailedDeviceInformation, loginUserData); - if( jsArray != null){ - cycleCounter = (String)jsArray.get(0); - String procStartTimeStr = (String)jsArray.get(1); - - //决定灭菌炉数据,采用哪种匹配模式 ,默认为循环次数,针对中六增加了开始时间 - boolean sterilizaMatchPatternForDate = CssdUtils.getSystemSetConfigByNameBool("sterilizaMatchPatternForDate", false); - // 灭菌炉自动完成灭菌 - if( !StringUtils.isNotBlank(isAutoCompleteSterilization) || isAutoCompleteSterilization.equals("是")){ - if(sterilizaMatchPatternForDate){ - autoFinishSterilizerRecord(devInterface.getId().toString(),machineNumber,procStartTimeStr); - }else{ - autoFinishSterilizerRecord(devInterface.getId().toString(),Long.parseLong(cycleCounter),machineNumber); - } - } - if(sterilizaMatchPatternForDate){ - refreshSterilizaerRecordAmounts(devInterface.getId().toString(),procStartTimeStr,machineNumber, enableDetailedDeviceInformation, loginUserData); - }else{ - refreshSterilizaerRecordAmounts(devInterface.getId().toString(),Long.parseLong(cycleCounter),machineNumber,enableDetailedDeviceInformation, loginUserData); - } - - } + sterilizerDataReadAndSave(smbForm, devInterface, remoteType, ftp, name, machineNumber, enableDetailedDeviceInformation, loginUserData, isAutoCompleteSterilization); + readedFileAmount++; } try{ commonFileManager.moveFile(remoteType, name, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbForm); @@ -540,264 +522,110 @@ /** * 洁定灭菌炉数据处理 */ - public JSONArray sterilizerDataReadAndSave(SmbFile remoteFile,DeviceInterface devInterface, String remoteType, FTPClient ftp, String fileName, String machineNumber, boolean enableDetailedDeviceInformation, LoginUserData loginUserData) + public void sterilizerDataReadAndSave(SmbFile remoteFile,DeviceInterface devInterface, String remoteType, FTPClient ftp, String fileName, String machineNumber, boolean enableDetailedDeviceInformation, LoginUserData loginUserData, String isAutoCompleteSterilization) { InputStream inputStream = null; - ByteArrayOutputStream fos = null; - boolean isSave = false;//是否已经解析保存 + ByteArrayOutputStream out = null; + + InputStreamReader isr = null; + BufferedReader br = null; try{ - inputStream = commonFileManager.getInputStream(remoteType, ftp, fileName, remoteFile, fos); + //决定灭菌炉数据,采用哪种匹配模式 ,默认为循环次数,针对中六增加了开始时间 + boolean sterilizaMatchPatternForDate = CssdUtils.getSystemSetConfigByNameBool("sterilizaMatchPatternForDate", false); + inputStream = commonFileManager.getInputStream(remoteType, ftp, fileName, remoteFile, out); + br = commonFileManager.getBufferedReader(isr, inputStream,"GBK"); String cycleCounter = null; String phase = null; String spaceTime = null; Date startDate = null; + Date endDate = null; // 读取直到最后一行 // 温度 - String tTemperature = null; - // 读取直到最后一行 - List records = new FileOfDatReader().getAllLine(inputStream, "UTF-8"); - for(String line : records){ + Double tTemperature = null; + Calendar calendar = Calendar.getInstance(); + Long sterilizationRecordId = null; + GtCommonSterilizerRecord gtRecord = new GtCommonSterilizerRecord(); + gtRecord.setMachineNumber(machineNumber); + + List details = new ArrayList(); + String line = null; + while((line = br.readLine()) != null){ if(StringUtils.isBlank(line)){ continue; } - boolean isValid = false; - SterilizerRecord record = new SterilizerRecord(); // PROCCYCLE 循环次数 if( line.contains("") && line.contains("")) { cycleCounter = getValueByKey(line,"PROCCYCLE"); + if(isExistDataForGetingeCommon(cycleCounter, machineNumber)){ + break; + } + gtRecord.setCycles(Long.valueOf(cycleCounter)); }else if(line.contains("") && line.contains("")){ phase = getValueByKey(line,"PHASE"); }else if( line.contains("") && line.contains("")) { String timeStr = getValueByKey(line,"PROCSTARTTIME"); startDate = gedDate(timeStr); + String beginStartTimeStr = null; + String endStartTimeStr = null; + if(sterilizaMatchPatternForDate){ + Date beginStartTime = new Date(startDate.getTime() - 10*60*1000); + Date endStartTime = new Date(startDate.getTime() + 10*60*1000); + beginStartTimeStr = ForgonDateUtils.safelyFormatDate(beginStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + endStartTimeStr = ForgonDateUtils.safelyFormatDate(endStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + } + sterilizationRecordId = sterilizationRecordManager.findMatchingSterilizationRecordId(beginStartTimeStr, endStartTimeStr, devInterface.getId(), cycleCounter, machineNumber); + if(enableDetailedDeviceInformation){ + appLogManager.saveLog(loginUserData, Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, String.format("开始时间[%s],机器号[%s],循环次数 [%s],需要更新温度压力数据的灭菌记录id[%s]",beginStartTimeStr,machineNumber,cycleCounter,sterilizationRecordId)); + } + if(!DatabaseUtil.isPoIdValid(sterilizationRecordId)){ + return; + } + gtRecord.setStartDate(startDate); }else if( line.contains("") && line.contains("") ) { - tTemperature = getValueByKey(line,"CT"); + tTemperature = Double.valueOf(getValueByKey(line,"CT")); }else if(line.contains("") && line.contains("")){ - String p1Bar = getValueByKey(line,"CP"); - record.setCycleCounter(Long.valueOf(cycleCounter)); - record.setPhase(phase); - record.setMachineNo(machineNumber); - record.setDeviceInterfaceID(devInterface.getId().toString()); - // 时间格式 2016/4/15 16:32:49 - String timeStr = getGetingeTime(startDate,spaceTime); - record.setTime(timeStr); - record.setT1Temp(tTemperature); - record.setP1Mbar(p1Bar); - isValid = true; + Double p1Bar = Double.valueOf(getValueByKey(line,"CP")); + GtCommonStageDetails detail = new GtCommonStageDetails(); + detail.setStageNo(phase); + endDate = commonFileManager.getTimeAfterAddingTime(startDate, spaceTime, calendar); + detail.setTime(endDate); + detail.setT1Temp(tTemperature); + detail.setP1Mbar(p1Bar); + detail.setGtCommonSterilizerRecord(gtRecord); + details.add(detail); }else if(line.contains("")){ spaceTime = getValueByKey(line,"TIME"); - }else{ - isValid = false; } - if(isValid){ - record.setProcStartTime(startDate); - objectDao.saveOrUpdate(record); - if(!isSave){ - isSave = true; - } - } } - if(StringUtils.isBlank(cycleCounter)) + if(StringUtils.isBlank(cycleCounter) || details.size() == 0 || !DatabaseUtil.isPoIdValid(sterilizationRecordId)) { - // // 没有读到循环次数,是无效数据 - return null; + // // 没有读到循环次数 没有阶段信息 没有匹配的灭菌记录,是无效数据 + return; } - JSONArray jsonArray = new JSONArray(); - jsonArray.add(0, cycleCounter); - jsonArray.add(1, ForgonDateUtils.safelyFormatDate(startDate, ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "")); - return jsonArray; - } catch (Exception e) { - logger.warn(e.getMessage()); - if(enableDetailedDeviceInformation){ - appLogManager.saveLog(loginUserData, Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, devInterface.getName() + "设备接口连接异常," + e.getMessage()); - } - return null; - }finally{ - if(isSave){ - SterilizerFileName sf = new SterilizerFileName(); - sf.setFileName(fileName); - objectDao.save(sf); - } - FileSystemHelper.closeInputStream(inputStream, null, null, fos); + gtRecord.setGtCommonStageDetailsList(details); + gtRecord.setEndDate(endDate); + SterilizationRecord record = sterilizationRecordManager.getSterilizationRecordById(sterilizationRecordId); + record.setSterilizationParaType(SterilizationRecord.STERILIZATIONPARATYPE_TYPE_GETINGE_COMMON); + gtRecord.setSterilizationRecord(record); + sterilizationRecordManager.saveOrUpdate(record); + objectDao.save(gtRecord); + // 灭菌炉自动完成灭菌 + if(!StringUtils.isNotBlank(isAutoCompleteSterilization) || isAutoCompleteSterilization.equals("是")){ + sterilizationRecordManager.autoFinishSterilizerRecord(sterilizationRecordId, devInterface.getId(), machineNumber); + } + } catch (Exception e) { + logger.warn(e.getMessage()); + if(enableDetailedDeviceInformation){ + appLogManager.saveLog(loginUserData, Log.MODEL_DEVICE_INTERFACE, Log.TYPE_ADD, devInterface.getName() + "设备接口连接异常," + e.getMessage()); } - } - // 自动完成灭菌 - public void autoFinishSterilizerRecord(String devInterfaceId,Long cycleCounter,String machineNo) - { - String queryString = "select sr.id from SterilizationRecord sr" - + " where sr.sterilizer.deviceInterface.id = :devInterfaceId" - + " and sr.sterilizer.machineNumber = :machineNumber" - + " and sr.cycleCounter = :cycleCounter" - + " and sr.status = :status"; - - Session session = objectDao.getHibernateSession(); - Query query = session.createQuery(queryString); - query.setParameter("devInterfaceId", Long.valueOf(devInterfaceId)); - query.setParameter("machineNumber", machineNo); - query.setParameter("cycleCounter", cycleCounter); - query.setParameter("status", SterilizationRecord.STERILIZATION_STATUS_BEGIN); - List ids = query.list(); - - if(CollectionUtils.isNotEmpty(ids)) - { - queryString = "select s.orgUnitCoding from Sterilizer s" - + " where s.deviceInterface.id = :devInterfaceId" - + " and s.machineNumber = :machineNumber"; - query = session.createQuery(queryString); - query.setParameter("devInterfaceId", Long.valueOf(devInterfaceId)); - query.setParameter("machineNumber", machineNo); - List orgUnitCodes = query.list(); - if(CollectionUtils.isNotEmpty(orgUnitCodes)) - { - sterilizationRecordManager.completeSterilization(ids, orgUnitCodes.get(0),"自动完成"); - -// // 刷新灭菌记录列表页面 -// Util util = ScriptSessionUtil.getDWRUtil("/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.jsp"); -// if (util != null) { -// util.addFunctionCall("alert"); -// util.addFunctionCall("grid.dwrReload()"); -// } -// util = ScriptSessionUtil.getDWRUtil("/homepage/portalPage.jsp"); -// if (util != null) { -// util.addFunctionCall("alert"); -// } -// - - -// queryString = "update SterilizationRecord set finishOperater = '自动完成' where id = :sterilizationId"; -// query = session.createQuery(queryString); -// query.setParameter("sterilizationId", ids.get(0)); -// query.executeUpdate(); - } + }finally{ + FileSystemHelper.closeInputStream(inputStream, null, null, out); } } - // 自动完成灭菌 (针对中六重写) - public void autoFinishSterilizerRecord(String devInterfaceId,String machineNo,String startDateStr){ - Date procStartTimeDate = ForgonDateUtils.safelyParseDate(startDateStr,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS); - Date beginProcStartTime = new Date(procStartTimeDate.getTime() - 10*60*1000); - Date endProcStartTime = new Date(procStartTimeDate.getTime() + 10*60*1000); - - String beginProcStartTimeStr = ForgonDateUtils.safelyFormatDate(beginProcStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); - String endProcStartTimeStr =ForgonDateUtils.safelyFormatDate(endProcStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); - String queryString = "select sr.id from SterilizationRecord sr" - + " where sr.sterilizer.deviceInterface.id = :devInterfaceId" - + " and sr.sterilizer.machineNumber = :machineNumber" - + " and sr.status = :status and " - + dateQueryAdapter.dateAreaSql("sr.startDate", beginProcStartTimeStr, endProcStartTimeStr, false); - - Session session = objectDao.getHibernateSession(); - Query query = session.createQuery(queryString); - query.setParameter("devInterfaceId", Long.valueOf(devInterfaceId)); - query.setParameter("machineNumber", machineNo); - query.setParameter("status", SterilizationRecord.STERILIZATION_STATUS_BEGIN); - List ids = query.list(); - if(CollectionUtils.isNotEmpty(ids)){ - queryString = "select s.orgUnitCoding from Sterilizer s" - + " where s.deviceInterface.id = :devInterfaceId" - + " and s.machineNumber = :machineNumber"; - query = session.createQuery(queryString); - query.setParameter("devInterfaceId", Long.valueOf(devInterfaceId)); - query.setParameter("machineNumber", machineNo); - List orgUnitCodes = query.list(); - if(CollectionUtils.isNotEmpty(orgUnitCodes)){ - sterilizationRecordManager.completeSterilization(ids, orgUnitCodes.get(0),"自动完成"); - } - } - } - - /** - * 更新灭菌记录的温度压力数据 - */ - public void refreshSterilizaerRecordAmounts(String devInterfaceId,Long cycleCounter,String machineNo, boolean enableDetailedDeviceInformation, LoginUserData loginUserData) - { - String queryString = "select sr.id from SterilizationRecord sr" - + " where sr.sterilizer.deviceInterface.id = :devInterfaceId" - + " and sr.sterilizer.machineNumber = :machineNumber" - + " and sr.cycleCounter = :cycleCounter"; -// String queryString = "select sr.id from SterilizationRecord sr"; - - Session session = objectDao.getHibernateSession(); - Query query = session.createQuery(queryString); - query.setParameter("devInterfaceId", Long.valueOf(devInterfaceId)); - query.setParameter("machineNumber", machineNo); - query.setParameter("cycleCounter", cycleCounter); - Long id = (Long)query.uniqueResult(); -// List srs = sterilizationRecordManager.getSterilizaerRecordsById(Long.valueOf(30)); - if(enableDetailedDeviceInformation){ - appLogManager.saveLog(loginUserData, Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, String.format("机器号[%s],循环次数 [%s],需要更新温度压力数据的灭菌记录id[%s]",machineNo,cycleCounter,id)); - } - if(id != null && id > 0) - { - SterilizationRecord record = sterilizationRecordManager.getSterilizationRecordById(id); - // 灭菌记录的的温度压力数据条数 - Long count = (long)sterilizationRecordManager.getSterilerRecordsCount(record.getSterilizer().getDeviceInterfaceId(),record.getSterilizer().getMachineNumber(),record.getCycleCounter()); - record.setSterilizerRecordAmount(count); - sterilizationRecordManager.saveOrUpdate(record); - } - } - - /** - * 更新灭菌记录的温度压力数据(中六) - */ - public void refreshSterilizaerRecordAmounts(String devInterfaceId,String procStartTimeStr,String machineNo, boolean enableDetailedDeviceInformation, LoginUserData loginUserData){ - Date procStartTimeDate = ForgonDateUtils.safelyParseDate(procStartTimeStr,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS); - Date beginProcStartTime = new Date(procStartTimeDate.getTime() - 10*60*1000); - Date endProcStartTime = new Date(procStartTimeDate.getTime() + 10*60*1000); - - String beginProcStartTimeStr = ForgonDateUtils.safelyFormatDate(beginProcStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); - String endProcStartTimeStr =ForgonDateUtils.safelyFormatDate(endProcStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); -// String top = ""; -// String rownum = ""; -// if (dbConnection.isSqlServer()) { -// top = " top 1 "; -// }else if(dbConnection.isOracle()){ -// rownum = " and rownum < 1 "; -// } - String sql = " select sr.id from "+SterilizationRecord.class.getSimpleName()+" sr " - + " where sr.sterilizer.deviceInterface.id = "+devInterfaceId+" " - + " and sr.sterilizer.machineNumber = "+machineNo+" and " - + dateQueryAdapter.dateAreaSql("sr.startDate", beginProcStartTimeStr, endProcStartTimeStr, false); - - - Session session = objectDao.getHibernateSession(); - Query query = session.createQuery(sql); - List ids = query.list(); - if(ids.size()==0 || ids==null ){ - logger.debug("匹配失败脚本:============="+sql); - return; - } - Long id = (Long) ids.get(0); - if(enableDetailedDeviceInformation){ - appLogManager.saveLog(loginUserData, Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, String.format("开始时间[%s],机器号[%s],需要更新温度压力数据的灭菌记录id[%s]",procStartTimeStr,machineNo,id)); - } -// Long id = (Long)query.uniqueResult(); - if(id != null && id > 0){ - SterilizationRecord record = sterilizationRecordManager.getSterilizationRecordById(id); - // 灭菌记录的的温度压力数据条数 - Long count = (long)sterilizationRecordManager.getSterilerRecordsCount(record.getSterilizer().getDeviceInterfaceId(),record.getSterilizer().getMachineNumber(),procStartTimeStr); - record.setSterilizerRecordAmount(count); - sterilizationRecordManager.saveOrUpdate(record); - } - -// if(query.list().size()>1){ -// logger.debug("检测到"+"【" +beginProcStartTimeStr+"至"+ endProcStartTimeStr+"】时间段内有"+query.list().size()+"条数据,机器号为+"+machineNo+"的匹配失败"); -// logger.debug("匹配失败脚本:============="+sql); -// }else { -// Long id = (Long)query.uniqueResult(); -// if(id != null && id > 0){ -// SterilizationRecord record = sterilizationRecordManager.getSterilizationRecordById(id); -// // 灭菌记录的的温度压力数据条数 -// Long count = (long)sterilizationRecordManager.getSterilerRecordsCount(record.getSterilizer().getDeviceInterfaceId(),record.getSterilizer().getMachineNumber(),procStartTimeStr); -// record.setSterilizerRecordAmount(count); -// sterilizationRecordManager.saveOrUpdate(record); -// } -// } - } - public boolean isTemperatureAndPressureData(String line) { boolean ret = false; @@ -1316,7 +1144,7 @@ String endStartTimeStr = ForgonDateUtils.safelyFormatDate(endStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); String sql = String.format("select count(*) from %s where machineNumber='%s' " + " and " + dateQueryAdapter.dateAreaSql("startDate", beginStartTimeStr, endStartTimeStr, false), - OneOfGetingeSterilizerRecord.class.getSimpleName(),machineNumber,thisStartDate); + OneOfGetingeSterilizerRecord.class.getSimpleName(),machineNumber); if(objectDao.countBySql(sql) > 0){ return true; } @@ -1371,4 +1199,21 @@ } return result; } + /** + * 验证此机器号此灭菌锅次的数据是否已经保存过,避免重复保存 + * @param machineNumber 机器号 + * @param operationTimes 运转次数 + * @return + */ + private boolean isExistDataForGetingeCommon(String cycleCounter, String machineNumber){ + String sql = "select count(*) from " + + GtCommonSterilizerRecord.class.getSimpleName() + + " where machineNumber='" + + machineNumber + +"' and cycles=" + cycleCounter; + if(objectDao.countBySql(sql) > 0){ + return true; + } + return false; + } } Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/BelimedDataManagerImpl.java =================================================================== diff -u -r35056 -r35442 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/BelimedDataManagerImpl.java (.../BelimedDataManagerImpl.java) (revision 35056) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/BelimedDataManagerImpl.java (.../BelimedDataManagerImpl.java) (revision 35442) @@ -37,8 +37,9 @@ import com.forgon.disinfectsystem.entity.basedatamanager.deviceinterface.DeviceInterface; import com.forgon.disinfectsystem.entity.basedatamanager.rinser.Rinser; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.BelimedStageDetails; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.BelimedSterilizerRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerFileName; -import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.SterilizerRecord; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washData.WashData; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washData.WashDataOfBelimed; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; @@ -49,6 +50,7 @@ import com.forgon.log.service.LogManager; import com.forgon.tools.FileSystemHelper; import com.forgon.tools.date.DateTools; +import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.util.ForgonDateUtils; @@ -143,7 +145,8 @@ } String backUpPath = rootPath + "/backUp"; commonFileManager.makeDirectory(remoteType, ftp, backUpPath, session, enableDetailedDeviceInformation, loginUserData); - for (int i = 0; i < length; i++) { + int readedFileAmount = 0; + for (int i = 0; i < length && readedFileAmount < 5; i++) { FTPFile ftpFile = null; SmbFile smbForm = null; String name = null; @@ -202,18 +205,8 @@ refreshWashRecordAmounts(devInterface, machineNumber, startTimeStr, recordAmount, cycleCounter); } }else{ // 灭菌炉数据处理 - JSONArray jsArray = sterilizerDataReadAndSave(smbForm,devInterface, remoteType, ftp, ftpFile, enableDetailedDeviceInformation, loginUserData); - if( jsArray != null){ - machineNumber = (String)jsArray.get(0); - cycleCounter = (String)jsArray.get(1); - Long procStartTime = (Long)jsArray.get(2); // 灭菌炉自动完成灭菌 - String beginStartTimeStr = ForgonDateUtils.safelyFormatDate(new Date(procStartTime - 10*60*1000),ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); - String endStartTimeStr = ForgonDateUtils.safelyFormatDate(new Date(procStartTime + 10*60*1000),ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); - if(!StringUtils.isNotBlank(isAutoCompleteSterilization) || isAutoCompleteSterilization.equals("是")){ - autoFinishSterilizerRecord(beginStartTimeStr, endStartTimeStr, devInterface,machineNumber,cycleCounter); - } - refreshSterilizaerRecordAmounts(beginStartTimeStr,endStartTimeStr,devInterface,Long.parseLong(cycleCounter),machineNumber,enableDetailedDeviceInformation,loginUserData); - } + sterilizerDataReadAndSave(smbForm,devInterface, remoteType, ftp, ftpFile, enableDetailedDeviceInformation, loginUserData, isAutoCompleteSterilization); + readedFileAmount++; } boolean isMove = commonFileManager.moveFile(remoteType, name, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbForm); if(!isMove){ @@ -349,19 +342,16 @@ } return washDataOfBelimed; } - /** * 灭菌炉数据处理 */ - public JSONArray sterilizerDataReadAndSave(SmbFile remoteFile, - DeviceInterface devInterface, String remoteType, FTPClient ftp, FTPFile ftpFile, boolean enableDetailedDeviceInformation, LoginUserData loginUserData) { + public void sterilizerDataReadAndSave(SmbFile remoteFile, + DeviceInterface devInterface, String remoteType, FTPClient ftp, FTPFile ftpFile, boolean enableDetailedDeviceInformation, LoginUserData loginUserData, String isAutoCompleteSterilization) { InputStream inputStream = null; ByteArrayOutputStream out = null; InputStreamReader isr = null; BufferedReader br = null; - JSONArray jsonArray = null; String fileName = null; - boolean isSave = false; try { Date da = null; if(DeviceInterface.INTERFACETYPE_FTP.equals(remoteType)){ @@ -377,107 +367,98 @@ String yymmdd = df1.format(da).replace("-", "/") + " "; inputStream = commonFileManager.getInputStream(remoteType, ftp, fileName, remoteFile, out); br = commonFileManager.getBufferedReader(isr, inputStream,"GBK"); - /*br = new BufferedReader(new InputStreamReader( - new SmbFileInputStream(remoteFile)));*/ String machineNumber = null; - String cycleCounter = null; + Long cycleCounter = null; // 读取直到最后一行 String line = ""; int lineNo = 0; Date procStartTime = null; - // List records = new - // ArrayList(); + Date endDate = null; String lastTime = null; - boolean crossDay = false; + boolean crossDay = false;//是否跨天 + BelimedSterilizerRecord belimedSterilizerRecord = new BelimedSterilizerRecord(); + List detailsList = new ArrayList(); + Long sterilizationRecordId = null; while ((line = br.readLine()) != null) { lineNo++; + if(lineNo == 1){ + continue; + } String[] split = line.split(";"); - if (split.length == 15 && lineNo != 1) { - SterilizerRecord record = new SterilizerRecord(); - record.setMachineNo(split[0].replaceAll("\"", "")); - record.setCycleCounter(Long.parseLong(split[1])); - String thisTime = getTime(split[2].replaceAll("\"", "")); - if(!crossDay && StringUtils.isNotBlank(thisTime)){ - if(StringUtils.isNotBlank(lastTime) && lastTime.compareTo(thisTime) > 0 && (thisTime.startsWith("0:") || thisTime.startsWith("00:"))){ - crossDay = true; - Calendar c = Calendar.getInstance(); - c.setTime(da); - c.add(Calendar.DAY_OF_MONTH, 1); - da = c.getTime(); - yymmdd = df1.format(da).replace("-", "/") + " "; - } - lastTime = thisTime; + BelimedStageDetails detail = new BelimedStageDetails(); + machineNumber = split[0].replaceAll("\"", ""); + cycleCounter = Long.parseLong(split[1]); + if(isExistData(cycleCounter, machineNumber)){ + break; + } + belimedSterilizerRecord.setMachineNumber(machineNumber); + belimedSterilizerRecord.setCycles(cycleCounter); + if(isExistData(cycleCounter, machineNumber)){ + break; + } + String thisTime = getTime(split[2].replaceAll("\"", "")); + if(!crossDay && StringUtils.isNotBlank(thisTime)){ + if(StringUtils.isNotBlank(lastTime) && lastTime.compareTo(thisTime) > 0 && (thisTime.startsWith("0:") || thisTime.startsWith("00:"))){ + crossDay = true; + Calendar c = Calendar.getInstance(); + c.setTime(da); + c.add(Calendar.DAY_OF_MONTH, 1); + da = c.getTime(); + yymmdd = df1.format(da).replace("-", "/") + " "; } - String time = yymmdd + thisTime; - if(procStartTime == null){ - procStartTime = sdf.parse(time); + lastTime = thisTime; + } + String time = yymmdd + thisTime; + if(procStartTime == null){ + procStartTime = sdf.parse(time); + String beginStartTimeStr = ForgonDateUtils.safelyFormatDate(new Date(procStartTime.getTime() - 10*60*1000),ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + String endStartTimeStr = ForgonDateUtils.safelyFormatDate(new Date(procStartTime.getTime() + 10*60*1000),ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + sterilizationRecordId = sterilizationRecordManager.findMatchingSterilizationRecordId(beginStartTimeStr, endStartTimeStr, devInterface.getId(), cycleCounter + "", machineNumber); + if(enableDetailedDeviceInformation){ + appLogManager.saveLog(loginUserData, Log.MODEL_DEVICE_INTERFACE, Log.TYPE_QUERY, String.format("机器号[%s],文件中的循环次数 [%s],需要更新温度压力数据的灭菌记录id[%s]",machineNumber,cycleCounter,sterilizationRecordId)); } - record.setProcStartTime(procStartTime); - record.setTime(time); - record.setStep(split[3]); - record.setPhase(split[4]); - record.setMessageNo(split[5]); - record.setMessage(split[6]); - record.setT1Temp(split[7]); - record.setT2Temp(split[8]); - record.setT3Temp(split[9]); - record.setP1Mbar(split[10]); - record.setP2Mbar(split[11]); - record.setP3Mbar(split[12]); - record.setP4Mbar(split[13]); - record.setF01Min(split[14]); - record.setDeviceInterfaceID(devInterface.getId().toString()); - objectDao.saveOrUpdate(record); - machineNumber = record.getMachineNo(); - cycleCounter = record.getCycleCounter().toString(); - } else if (split.length == 14 && lineNo != 1) { - SterilizerRecord record = new SterilizerRecord(); - record.setMachineNo(split[0].replaceAll("\"", "")); - record.setCycleCounter(Long.parseLong(split[1])); - String thisTime = getTime(split[2].replaceAll("\"", "")); - if(!crossDay && StringUtils.isNotBlank(thisTime)){ - if(StringUtils.isNotBlank(lastTime) && lastTime.compareTo(thisTime) > 0 && (thisTime.startsWith("0:") || thisTime.startsWith("00:"))){ - crossDay = true; - Calendar c = Calendar.getInstance(); - c.setTime(da); - c.add(Calendar.DAY_OF_MONTH, 1); - da = c.getTime(); - yymmdd = df1.format(da).replace("-", "/") + " "; - } - lastTime = thisTime; - } - String time = yymmdd + thisTime; - record.setTime(time); - if(procStartTime == null){ - procStartTime = sdf.parse(time); - } - record.setProcStartTime(procStartTime); - record.setStep(split[3]); - record.setPhase(split[4]); - record.setMessageNo(split[5]); - record.setMessage(split[6]); - record.setT1Temp(split[7]); - record.setT2Temp(split[8]); - record.setP1Mbar(split[9]); - record.setP2Mbar(split[10]); - record.setP3Mbar(split[11]); - record.setP4Mbar(split[12]); - record.setF01Min(split[13]); - record.setDeviceInterfaceID(devInterface.getId().toString()); - objectDao.saveOrUpdate(record); - if(!isSave){ - isSave = true; - } - // records.add(record); - machineNumber = record.getMachineNo(); - cycleCounter = record.getCycleCounter().toString(); + if(!DatabaseUtil.isPoIdValid(sterilizationRecordId)){ + break; + } + belimedSterilizerRecord.setStartDate(procStartTime); } + endDate = sdf.parse(time); + detail.setTime(endDate); + detail.setStageName(split[4].replaceAll("\"", "")); + detail.setT1Temp(Double.valueOf(split[7])); + //detail.setT2Temp(split[8]); + if(split.length == 15){ + //detail.setT3Temp(split[9]); + detail.setP1Mbar(Double.valueOf(split[10])); + //detail.setP2Mbar(split[11]); + ///detail.setP3Mbar(split[12]); + //detail.setP4Mbar(split[13]); + }else if(split.length == 14){ + detail.setP1Mbar(Double.valueOf(split[9])); + //未使用的数据 由于一条灭菌记录有很多灭菌炉记录 所以不存这种不使用的数据 + //detail.setP2Mbar(split[10]); + //detail.setP3Mbar(split[11]); + //detail.setP4Mbar(split[12]); + } + detail.setBelimedSterilizerRecord(belimedSterilizerRecord); + detailsList.add(detail); } - jsonArray = new JSONArray(); - jsonArray.add(0, machineNumber); - jsonArray.add(1, cycleCounter); - jsonArray.add(2, procStartTime.getTime()); + if(!DatabaseUtil.isPoIdValid(sterilizationRecordId)){ + return; + } + + SterilizationRecord sterilizationRecord = sterilizationRecordManager.getSterilizationRecordById(sterilizationRecordId); + sterilizationRecord.setSterilizationParaType(SterilizationRecord.STERILIZATIONPARATYPE_BELIMED); + belimedSterilizerRecord.setSterilizationRecord(sterilizationRecord); + sterilizationRecordManager.saveOrUpdate(sterilizationRecord); + if(!StringUtils.isNotBlank(isAutoCompleteSterilization) || isAutoCompleteSterilization.equals("是")){ + sterilizationRecordManager.autoFinishSterilizerRecord(sterilizationRecordId, devInterface.getId(), machineNumber); + } + + belimedSterilizerRecord.setEndDate(endDate); + belimedSterilizerRecord.setBelimedStageDetailsList(detailsList); + objectDao.saveOrUpdate(belimedSterilizerRecord); } catch (FileNotFoundException e) { // 捕获File对象生成时的异常 logger.warn(e.getMessage()); @@ -490,66 +471,28 @@ devInterface.getName() + "设备接口连接异常," + e.getMessage()); } } catch(Exception e){ + e.printStackTrace(); logger.warn(e.getMessage()); }finally{ - if(isSave){ - SterilizerFileName sf = new SterilizerFileName(); - sf.setFileName(fileName); - objectDao.save(sf); - } FileSystemHelper.closeInputStream(inputStream, br, isr, out); } - return jsonArray; } - /** - * 自动完成灭菌 + * 验证此机器号此灭菌锅次的数据是否已经保存过,避免重复保存 + * @param machineNumber 机器号 + * @param operationTimes 运转次数 + * @return */ - public void autoFinishSterilizerRecord(String beginStartTimeStr, String endStartTimeStr, DeviceInterface deviceInterface, String machineNo, String cycleCounter) { - String queryString = "select sr.id from SterilizationRecord sr" - + " where sr.sterilizer.deviceInterface.id = :devInterfaceId" - + " and sr.sterilizer.machineNumber = :machineNumber" - + " and sr.status = :status and "; - if(DeviceInterface.PARAMATCHINGMETHOD_CYCLECOUNTER.equals(deviceInterface.getParaMatchingMethod())){ - queryString += "sr.cycleCounter=" + cycleCounter; - }else{ - queryString += dateQueryAdapter.dateAreaSql("sr.startDate", beginStartTimeStr, endStartTimeStr, false); + private boolean isExistData(Long cycleCounter, String machineNumber){ + String sql = "select count(*) from " + + BelimedSterilizerRecord.class.getSimpleName() + + " where machineNumber='" + + machineNumber + +"' and cycles=" + cycleCounter; + if(objectDao.countBySql(sql) > 0){ + return true; } - Session session = objectDao.getHibernateSession(); - Query query = session.createQuery(queryString); - query.setParameter("devInterfaceId", deviceInterface.getId()); - query.setParameter("machineNumber", machineNo); - query.setParameter("status", - SterilizationRecord.STERILIZATION_STATUS_BEGIN); - List ids = query.list(); - - if (CollectionUtils.isNotEmpty(ids)) { - queryString = "select s.orgUnitCoding from Sterilizer s" - + " where s.deviceInterface.id = :devInterfaceId" - + " and s.machineNumber = :machineNumber"; - query = session.createQuery(queryString); - query.setParameter("devInterfaceId", deviceInterface.getId()); - query.setParameter("machineNumber", machineNo); - List orgUnitCodes = query.list(); - if (CollectionUtils.isNotEmpty(orgUnitCodes)) { - sterilizationRecordManager.completeSterilization(ids, - orgUnitCodes.get(0), "自动完成"); - - // // 刷新灭菌记录列表页面 - // Util util = - // ScriptSessionUtil.getDWRUtil("/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordView.jsp"); - // if (util != null) { - // util.addFunctionCall("alert","abc"); - // util.addFunctionCall("grid.dwrReload()"); - // } - - // queryString = - // "updata SterilizationRecord set finishOperater = '自动完成' where id = :sterilizationId"; - // query = session.createQuery(queryString); - // query.setParameter("sterilizationId", ids.get(0)); - // query.executeUpdate(); - } - } + return false; } /** @@ -672,46 +615,7 @@ return time.trim(); } - // Monday 14:36:54 /** - * - * @param time - * 格式如 Monday 14:36:54 - * @return 格式 14:36:54 - */ - private String getTime1(String time) { - String retTime = ""; - if (StringUtils.isNotBlank(time)) { - retTime = time.trim(); - if (retTime.startsWith("Monday")) { - retTime = retTime.replace("Monday", ""); - retTime = retTime.trim(); - } else if (retTime.startsWith("Tuesday")) { - retTime = retTime.replace("Tuesday", ""); - retTime = retTime.trim(); - } else if (retTime.startsWith("Wednesday")) { - retTime = retTime.replace("Wednesday", ""); - retTime = retTime.trim(); - } else if (retTime.startsWith("Thursday")) { - retTime = retTime.replace("Thursday", ""); - retTime = retTime.trim(); - } else if (retTime.startsWith("Friday")) { - retTime = retTime.replace("Friday", ""); - retTime = retTime.trim(); - } else if (retTime.startsWith("Saturday")) { - retTime = retTime.replace("Saturday", ""); - retTime = retTime.trim(); - } else if (retTime.startsWith("Sunday")) { - retTime = retTime.replace("Sunday", ""); - retTime = retTime.trim(); - } else { - retTime = ""; - } - } - return retTime; - } - - /** * 倍力曼清洗机数据处理 */ public JSONArray washDataReadAndSave(SmbFile remoteFile,