Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceView.jsp =================================================================== diff -u -r31518 -r32077 --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceView.jsp (.../deviceInterfaceView.jsp) (revision 31518) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceView.jsp (.../deviceInterfaceView.jsp) (revision 32077) @@ -71,6 +71,18 @@ * 洁定清洗机型号:苏州洁定46-5(DGSDBZXYY-158) */ var GETING_SUZHOUJIEDING_46_5 = '<%=DeviceInterface.GETING_SUZHOUJIEDING_46_5%>'; +/** + * 洁定清洗机型号:CM320 + */ +var GETING_CM320 = '<%=DeviceInterface.GETING_CM320%>'; +/** + * 洁定清洗机型号:9125E + */ +var GETING_9125E = '<%=DeviceInterface.GETING_9125E%>'; +/** + * 洁定清洗机型号:S_8668 + */ +var GETING_S_8668 = '<%=DeviceInterface.GETING_S_8668%>'; /** * 《供应商包添加》权限 Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceForm.js =================================================================== diff -u -r31541 -r32077 --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceForm.js (.../deviceInterfaceForm.js) (revision 31541) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/deviceInterface/deviceInterfaceForm.js (.../deviceInterfaceForm.js) (revision 32077) @@ -399,7 +399,7 @@ if(deviceBrand == GETINGE){ getingModelComboStore = new Ext.data.SimpleStore({ fields : [ 'value' ], - data : [[' '],[GETING_86_SERIES],[GETINGETYPE_HS_ONE],[GETINGETYPE_HS6620_TDOC],[GETING_SUZHOUJIEDING_46_5]] + data : [[' '],[GETING_86_SERIES],[GETINGETYPE_HS_ONE],[GETINGETYPE_HS6620_TDOC],[GETING_SUZHOUJIEDING_46_5],[GETING_CM320],[GETING_9125E],[GETING_S_8668]] }) showCmt('deviceModelWrap','deviceModel',true,getingModelComboStore); }else if(deviceBrand == STERIS){ Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/deviceinterface/DeviceInterface.java =================================================================== diff -u -r31518 -r32077 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/deviceinterface/DeviceInterface.java (.../DeviceInterface.java) (revision 31518) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/deviceinterface/DeviceInterface.java (.../DeviceInterface.java) (revision 32077) @@ -119,6 +119,24 @@ public static final String GETING_SUZHOUJIEDING_46_5 = "苏州洁定46-5"; /** + * 洁定清洗机型号:CM320(ZSWY-150),CM320、9125E、S-8668三个型号数据格式和洁定清洗机(无型号)默认数据格式一样, + * 现场的洁定清洗机和灭菌炉的机器号(MACHREFNO)唯一,可以判断是清洗机或者灭菌炉的数据 + */ + public static final String GETING_CM320 = "CM320"; + + /** + * 洁定清洗机型号:9125E(ZSWY-150),CM320、9125E、S-8668三个型号数据格式和洁定清洗机(无型号)默认数据格式一样, + * 现场的洁定清洗机和灭菌炉的机器号(MACHREFNO)唯一,可以判断是清洗机或者灭菌炉的数据 + */ + public static final String GETING_9125E = "9125E"; + + /** + * 洁定清洗机型号:S-8668(ZSWY-150),CM320、9125E、S-8668三个型号数据格式和洁定清洗机(无型号)默认数据格式一样, + * 现场的洁定清洗机和灭菌炉的机器号(MACHREFNO)唯一,可以判断是清洗机或者灭菌炉的数据 + */ + public static final String GETING_S_8668 = "S-8668"; + + /** * 连云港佑源清洗机 */ public static final String YOUYUAN = "连云港佑源"; Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/GetingeDataManagerImpl.java =================================================================== diff -u -r31859 -r32077 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/GetingeDataManagerImpl.java (.../GetingeDataManagerImpl.java) (revision 31859) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/GetingeDataManagerImpl.java (.../GetingeDataManagerImpl.java) (revision 32077) @@ -138,7 +138,7 @@ * @param smbFile * @return */ - public JSONObject getMachineNoAndIsWashingMachine(String remoteType ,FTPClient ftp, String fileName, SmbFile smbFile){ + public JSONObject getMachineNoAndIsWashingMachine(String remoteType ,FTPClient ftp, String fileName, SmbFile smbFile, DeviceInterface deviceInterface, String machineNumber){ JSONObject obj = new JSONObject(); String machineNo = null; boolean IsWashingMachine = true; @@ -158,7 +158,6 @@ if(readedMachineNo && readedCP){ break; } - line = br.readLine(); if(StringUtils.isBlank(line)){ continue; } @@ -179,6 +178,14 @@ } } } + String deviceModel = deviceInterface.getDeviceModel(); + if(StringUtils.equals(deviceModel, DeviceInterface.GETING_9125E) + || StringUtils.equals(deviceModel, DeviceInterface.GETING_CM320) + || StringUtils.equals(deviceModel, DeviceInterface.GETING_S_8668)){ + //现场清洗机和灭菌炉的机器号是不重复的 + //根据接口文件中的机器号(MACHREFNO),来判断是清洗机还是灭菌器的数据。ZSWY-150 + IsWashingMachine = isWashMachineNo(machineNumber, deviceInterface); + } obj.put("isWashingMachine", IsWashingMachine); } catch (Exception e) { e.printStackTrace(); @@ -188,6 +195,19 @@ } return obj; } + + /** + * 判断当前设备机器号是否为清洗机器号 + * @param machineNumber + * @return + */ + private boolean isWashMachineNo(String machineNumber, DeviceInterface deviceInterface) { + String sql = String.format("select count(*) from %s po where po.machineNumber = '%s' and po.deviceInterface_id = %s", + Rinser.class.getSimpleName(), machineNumber, deviceInterface.getId()); + int count = objectDao.countBySql(sql); + return count > 0; + } + public String getMachineNo(SmbFile file, boolean enableDetailedDeviceInformation, LoginUserData loginUserData) { try{ @@ -255,7 +275,7 @@ logger.debug("品牌不对-机器品牌号:"+ brand +",接口品牌:" + devInterface.GETINGE+ ">continue="+brand); continue; } - JSONObject machineNumAndIsWashingMachine = getMachineNoAndIsWashingMachine(DeviceInterface.INTERFACETYPE_SHAREFOLDER, null, null, smbForm); + JSONObject machineNumAndIsWashingMachine = getMachineNoAndIsWashingMachine(DeviceInterface.INTERFACETYPE_SHAREFOLDER, null, null, smbForm, devInterface, machineNo); String machineNumber = machineNumAndIsWashingMachine.optString("machineNo"); if( !machineNo.equals(machineNumber) ){ logger.debug("机器号不对-机器号:"+machineNo+",文件机器号:"+machineNumber + "->continue="+machineNo); @@ -502,7 +522,7 @@ commonFileManager.moveFile(remoteType, name, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbForm); continue; } - JSONObject machineNumAndIsWashingMachine = getMachineNoAndIsWashingMachine(remoteType, ftp, name, smbForm); + JSONObject machineNumAndIsWashingMachine = getMachineNoAndIsWashingMachine(remoteType, ftp, name, smbForm, devInterface, machineNo); String machineNumber = machineNumAndIsWashingMachine.optString("machineNo"); if( !machineNo.equals(machineNumber) ){ if(enableDetailedDeviceInformation){ @@ -516,8 +536,15 @@ // 清洗机数据的处理 JSONArray jsArray = washDataReadAndSave(smbForm, devInterface, remoteType, ftp, name, machineNumber, enableDetailedDeviceInformation, loginUserData); if( jsArray != null){ - cycleCounter = (String)jsArray.get(0); - refreshWashRecordAmounts(devInterface.getId().toString(),Long.parseLong(cycleCounter),machineNumber); + boolean sterilizaMatchPatternForDate = CssdUtils.getSystemSetConfigByNameBool("sterilizaMatchPatternForDate", false); + if(sterilizaMatchPatternForDate){ + String procStartTimeStr = (String)jsArray.get(1); + Date startTime = ForgonDateUtils.safelyParseDate(procStartTimeStr, ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS); + refreshWashRecordAmounts(devInterface.getId().toString(), startTime, machineNumber); + }else{ + cycleCounter = (String)jsArray.get(0); + refreshWashRecordAmounts(devInterface.getId().toString(),Long.parseLong(cycleCounter),machineNumber); + } } }else{ // 灭菌炉数据处理 @@ -934,6 +961,7 @@ } 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()); @@ -1054,6 +1082,39 @@ } } + /** + * 根据清洗数据的开始时间的前后10分钟,匹配清洗记录 + * @param devInterfaceId + * @param startTime + * @param machineNo + */ + private void refreshWashRecordAmounts(String devInterfaceId, Date startTime, String machineNo) { + // 根据接口和机器号找到清洗机 + Session session = objectDao.getHibernateSession(); + String queryString = "select r from Rinser r" + + " where r.deviceInterface.id = :deviceInterfaceId" + + " and r.machineNumber = :machineNo"; + Query query = session.createQuery(queryString); + query.setParameter("deviceInterfaceId", Long.valueOf(devInterfaceId)); + query.setParameter("machineNo", machineNo); + List rinsers = query.list(); + + for(Rinser rs : rinsers) { + Date beginStartTime = new Date(startTime.getTime() - 10*60*1000); + Date endStartTime = new Date(startTime.getTime() + 10*60*1000); + String beginStartTimeStr = ForgonDateUtils.safelyFormatDate(beginStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + String endStartTimeStr = ForgonDateUtils.safelyFormatDate(endStartTime,ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS,""); + String hql = String.format(" where po.rinserId = %s and %s ", rs.getId().toString(), dateQueryAdapter.dateAreaSql("po.startDate", beginStartTimeStr, endStartTimeStr, false)); + WashAndDisinfectRecord wd = (WashAndDisinfectRecord) objectDao.getBySql(WashAndDisinfectRecord.class.getSimpleName(), hql); + if(wd != null) { + Long amounts = wd.getWashDataAmount(); + amounts = amounts == null ? 0L : amounts; + wd.setWashDataAmount(amounts + 1l); + washAndDisinfectRecordManager.save(wd); + } + } + } + private String getValueByKey(String line,String key){ if(StringUtils.isBlank(line) || StringUtils.isBlank(key)){ return null; Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java =================================================================== diff -u -r32031 -r32077 --- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 32031) +++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 32077) @@ -1418,39 +1418,81 @@ Query query = session.createQuery(queryString); query.setParameter("rinserName", sr.getDisinfectIdentification()); Rinser rs = (Rinser)query.uniqueResult(); + boolean sterilizaMatchPatternForDate = CssdUtils.getSystemSetConfigByNameBool("sterilizaMatchPatternForDate", false); if(sr != null && rs != null) { // Session session = objectDao.getHibernateSession(); + Long cycleCounter = sr.getCycleCounter(); if(StringUtils.equals(rs.getDeviceInterface().getDeviceBrand(), DeviceInterface.BELIMED)){ // 清洗开始时间和结束时间允许前后10分钟误差 Date startTime = sr.getStartDate(); - Date endTime = sr.getEndDate(); Date beginStartTime = new Date(startTime.getTime() - 10*60*1000); - Date endStartTime = new Date(endTime.getTime() + 10*60*1000); + Date endStartTime = new Date(startTime.getTime() + 10*60*1000); String beginStartTimeStr = DateTools.getFormatDateStr(beginStartTime, "yyyy/M/dd HH:mm:ss"); String endStartTimeStr = DateTools.getFormatDateStr(endStartTime, "yyyy/M/dd HH:mm:ss"); - + + // 查找循环次数最大的清洗数据 String whereSql = String.format( - " where po.deviceInterfaceID = %s and po.machineNo = '%s' and po.time > '%s' and po.time < '%s' order by po.id desc ", + "select max(po.cycleCounter) maxCycleCounter from WashData po where po.deviceInterfaceID = %s and po.machineNo = '%s' and po.time > '%s' and po.time < '%s' group by po.cycleCounter ", + rs.getDeviceInterfaceId(), rs.getMachineNumber(), beginStartTimeStr, endStartTimeStr); + ResultSet cycleCounterResultSet = null; + Long maxCycleCounter = null; + try { + cycleCounterResultSet = objectDao.executeSql(whereSql); + while(cycleCounterResultSet.next()){ + maxCycleCounter = cycleCounterResultSet.getLong("maxCycleCounter"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(cycleCounterResultSet); + } + cycleCounter = maxCycleCounter; + }else if(StringUtils.equals(rs.getDeviceInterface().getDeviceBrand(), DeviceInterface.GETINGE) + && sterilizaMatchPatternForDate){ + // 清洗开始时间和结束时间允许前后10分钟误差 + Date startTime = sr.getStartDate(); + Date beginStartTime = new Date(startTime.getTime() - 10*60*1000); + Date endStartTime = new Date(startTime.getTime() + 10*60*1000); + String beginStartTimeStr = DateTools.getFormatDateStr(beginStartTime, "yyyy/MM/dd HH:mm:ss"); + String endStartTimeStr = DateTools.getFormatDateStr(endStartTime, "yyyy/MM/dd HH:mm:ss"); + + // 查找循环次数最大的清洗数据 + String whereSql = String.format( + "select max(po.cycleCounter) maxCycleCounter from WashData po where po.deviceInterfaceID = %s and po.machineNo = '%s' and po.time > '%s' and po.time < '%s' group by po.cycleCounter ", rs.getDeviceInterfaceId(), rs.getMachineNumber(), beginStartTimeStr, endStartTimeStr); - - List washDatas = objectDao.findBySql(WashData.class.getSimpleName(), whereSql); - return washDatas; - }else{ - queryString = "select wd from WashData wd" - + " where wd.deviceInterfaceID = :devInterfaceId" - + " and wd.machineNo = :machineNo" - + " and wd.cycleCounter = :cycleCounter"; - query = session.createQuery(queryString); -// query.setParameter("devInterfaceId", rs.getDeviceInterface().getId()); - query.setParameter("devInterfaceId", rs.getDeviceInterfaceId()); - query.setParameter("machineNo", rs.getMachineNumber()); - query.setParameter("cycleCounter", sr.getCycleCounter()); - List result = query.list(); - if( !CollectionUtils.isEmpty(result)) - return result; + ResultSet cycleCounterResultSet = null; + Long maxCycleCounter = null; + try { + cycleCounterResultSet = objectDao.executeSql(whereSql); + while(cycleCounterResultSet.next()){ + maxCycleCounter = cycleCounterResultSet.getLong("maxCycleCounter"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(cycleCounterResultSet); + } + cycleCounter = maxCycleCounter; } + + if(cycleCounter == null){ + return null; + } + + queryString = "select wd from WashData wd" + + " where wd.deviceInterfaceID = :devInterfaceId" + + " and wd.machineNo = :machineNo" + + " and wd.cycleCounter = :cycleCounter"; + query = session.createQuery(queryString); + // query.setParameter("devInterfaceId", rs.getDeviceInterface().getId()); + query.setParameter("devInterfaceId", rs.getDeviceInterfaceId()); + query.setParameter("machineNo", rs.getMachineNumber()); + query.setParameter("cycleCounter", cycleCounter); + List result = query.list(); + if( !CollectionUtils.isEmpty(result)) + return result; } return null; } @@ -1646,6 +1688,8 @@ + machineNoSql + "and po.cycleCounter = " + wr.getCycleCounter(); + boolean sterilizaMatchPatternForDate = CssdUtils.getSystemSetConfigByNameBool("sterilizaMatchPatternForDate", false); + //新华长龙清洗机 if(StringUtils.equals(devInterface.getDeviceBrand(), DeviceInterface.XINHUA)){ if(StringUtils.equals(DeviceInterface.XINHUA_CHANGLONG_DC_4, devInterface.getDeviceModel()) @@ -1675,6 +1719,20 @@ queryString = "select count(*) c from "+ WashDataOfGeting.class.getSimpleName() +" po " + "where po.deviceInterfaceID = " + devInterface.getId() + machineNoSql + "and " + dateQueryAdapter.dateAreaSql("po.startTime", beginStartTimeStr, endStartTimeStr, false); + }else if(StringUtils.equals(devInterface.getDeviceModel(), DeviceInterface.GETING_9125E) + || StringUtils.equals(devInterface.getDeviceModel(), DeviceInterface.GETING_CM320) + || StringUtils.equals(devInterface.getDeviceModel(), DeviceInterface.GETING_S_8668)){ + + if(sterilizaMatchPatternForDate){ + beginStartTime = new Date(startTime.getTime() - 10*60*1000); + endStartTime = new Date(startTime.getTime() + 10*60*1000); + String beginStartTimeStr = DateTools.getFormatDateStr(beginStartTime, "yyyy/MM/dd HH:mm:ss"); + String endStartTimeStr = DateTools.getFormatDateStr(endStartTime, "yyyy/MM/dd HH:mm:ss"); + + queryString = "select count(*) c from "+ WashData.class.getSimpleName() +" po " + + "where po.deviceInterfaceID = " + devInterface.getId() + machineNoSql + + "and po.time > '" + beginStartTimeStr + "' and po.time < '" + endStartTimeStr + "'"; + } } }else if(StringUtils.equals(devInterface.getDeviceBrand(), DeviceInterface.BELIMED)){ queryString = "select count(*) c from "+ WashData.class.getSimpleName() + " po "