Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/Ps100gxpStageDetails.java =================================================================== diff -u -r34939 -r34948 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/Ps100gxpStageDetails.java (.../Ps100gxpStageDetails.java) (revision 34939) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizerrecord/Ps100gxpStageDetails.java (.../Ps100gxpStageDetails.java) (revision 34948) @@ -36,11 +36,11 @@ /** * 内室压力 */ - private Float interiorPressure; + private String interiorPressure; /** * 内室温度 */ - private Float interiorTemperature; + private String interiorTemperature; /** * 所属低温灭菌炉记录 @@ -66,16 +66,16 @@ public void setStageNo(String stageNo) { this.stageNo = stageNo; } - public Float getInteriorPressure() { + public String getInteriorPressure() { return interiorPressure; } - public void setInteriorPressure(Float interiorPressure) { + public void setInteriorPressure(String interiorPressure) { this.interiorPressure = interiorPressure; } - public Float getInteriorTemperature() { + public String getInteriorTemperature() { return interiorTemperature; } - public void setInteriorTemperature(Float interiorTemperature) { + public void setInteriorTemperature(String interiorTemperature) { this.interiorTemperature = interiorTemperature; } @ManyToOne Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImpl.java =================================================================== diff -u -r34939 -r34948 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImpl.java (.../XinHuaDataManagerImpl.java) (revision 34939) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/service/XinHuaDataManagerImpl.java (.../XinHuaDataManagerImpl.java) (revision 34948) @@ -8,6 +8,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -37,6 +38,7 @@ import com.forgon.Constants; import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.vo.LoginUserData; +import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.entity.basedatamanager.deviceinterface.DeviceInterface; import com.forgon.disinfectsystem.entity.basedatamanager.rinser.Rinser; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; @@ -191,7 +193,17 @@ String backUpPath = rootPath + "/backUp"; commonFileManager.makeDirectory(remoteType, ftp, backUpPath, session, enableDetailedDeviceInformation, loginUserData); SimpleDateFormat sdfToday = new SimpleDateFormat("yyyyMMdd"); - for (int i = 0; i < length; i++) { + int interfaceReadLimitDays = CssdUtils.getSystemSetConfigByNameInt("interfaceReadLimitDays", 0); + Date endStartTime = null; + if(interfaceReadLimitDays > 1){ + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE, -interfaceReadLimitDays); + endStartTime = calendar.getTime(); + }else{ + endStartTime = new Date(); + } + int readAmount = 0;//每次遍历接口只读5个文件,避免定时器一个循环的时间处理不完 + for (int i = 0; i < length && readAmount < 5; i++) { FTPFile ftpFile = null; SmbFile smbForm = null; String name = null; @@ -209,12 +221,26 @@ } } int index = name.indexOf("-"); - if(sdfToday.parse("20" + name.substring(index - 6, index)).before(sdfToday.parse(sdfToday.format(new Date())))){ - commonFileManager.moveFile(remoteType, name, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbForm); + if(sdfToday.parse("20" + name.substring(index - 6, index)).before(sdfToday.parse(sdfToday.format(endStartTime)))){ + try{ + commonFileManager.moveFile(remoteType, name, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbForm); + }catch(Exception e){ + e.printStackTrace(); + logger.debug(name+"文件在移动和删除过程中发生错误"); + } continue; } String machineNumber = name.substring(0,index - 6); - sterilizerDataReadAndSaveXinhuatype_ps_100gxp(machineNumber, smbForm,devInterface, remoteType, ftp, ftpFile, enableDetailedDeviceInformation, loginUserData); + readAmount++; + JSONObject resultObj = sterilizerDataReadAndSaveXinhuatype_ps_100gxp(machineNumber, smbForm,devInterface, remoteType, ftp, ftpFile, enableDetailedDeviceInformation, loginUserData); + if(resultObj != null && resultObj.optBoolean("end")){ + try{ + commonFileManager.moveFile(remoteType, name, ftp, ftpFileManager.getCurrentPath(ftp), backUpPath, session, smbForm); + }catch(Exception e){ + e.printStackTrace(); + logger.debug(name+"文件在移动和删除过程中发生错误"); + } + } } } catch (Exception e) { logger.warn(e.getMessage()); @@ -263,6 +289,27 @@ } } } + /** + * 验证此机器号此灭菌锅次的数据是否已经保存过,避免重复保存 + * @param machineNumber + * @param potTimes + * @return + */ + private boolean isExistPS100Data(String machineNumber, Long cycles){ + String sql = String.format("select count(*) from %s where machineNumber='%s' and cycles=%s ", + Ps100gxpSterilizerRecord.class.getSimpleName(),machineNumber,cycles); + if(objectDao.countBySql(sql) > 0){ + return true; + } + return false; + } + /** + * 更新灭菌记录的温度压力数据条数 + * @param item Ps100gxpSterilizerRecord + * @param enableDetailedDeviceInformation 启用日志 + * @param loginUserData 登录用户 + * @return + */ public boolean refreshSterilizaerRecordAmountsXinhuatype_ps_100gxp(Ps100gxpSterilizerRecord item, boolean enableDetailedDeviceInformation, LoginUserData loginUserData) { boolean result = false; try { @@ -272,20 +319,19 @@ 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 " + dateQueryAdapter.dateAreaSql("sr.startDate", beginStartTimeStr, endStartTimeStr, false); - Session session = objectDao.getHibernateSession(); - Query query = session.createQuery(queryString); - query.setParameter("machineNumber", machineNo); - Long id = (Long) query.uniqueResult(); + String queryString = "select max(sr.id) id from SterilizationRecord sr join Sterilizer s on s.id=sr.sterilizer_id " + + " where s.machineNumber ='" + + machineNo + + "' and " + dateQueryAdapter.dateAreaSql("sr.startDate", beginStartTimeStr, endStartTimeStr, false); + System.out.println(queryString); + Long id = objectDao.getALongNum(queryString, "id"); if(enableDetailedDeviceInformation){ appLogManager.saveLog(loginUserData, 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); + sterilizationRecord.setSterilizationParaType(SterilizationRecord.STERILIZATIONPARATYPE_XINHUATYPE_PS100GXP); objectDao.saveOrUpdate(sterilizationRecord); item.setSterilizationRecord(sterilizationRecord); result = true; @@ -298,13 +344,13 @@ /** * 灭菌炉数据处理, backUpPath, session, smbForm */ - public JSONArray sterilizerDataReadAndSaveXinhuatype_ps_100gxp(String machineNumber, SmbFile remoteFile, + public JSONObject sterilizerDataReadAndSaveXinhuatype_ps_100gxp(String machineNumber, SmbFile remoteFile, DeviceInterface devInterface, String remoteType, FTPClient ftp, FTPFile ftpFile, boolean enableDetailedDeviceInformation, LoginUserData loginUserData) { InputStream inputStream = null; ByteArrayOutputStream out = null; InputStreamReader isr = null; BufferedReader br = null; - JSONArray jsonArray = null; + JSONObject obj = null; String fileName = null; try { Date da = null; @@ -326,7 +372,11 @@ Long cycleCounter = null; Set readRecords = new HashSet(); Date endDate = null; + DecimalFormat df = new DecimalFormat("0.0"); while ((line = br.readLine()) != null) { + if(StringUtils.isBlank(line)){ + continue; + } if(line.length() != 40){ throw new RuntimeException(fileName + "文件内容行长度不等于接口说明的40长度"); } @@ -337,16 +387,23 @@ Date date = sdf.parse(dateStr); if(cycleCounter == null){ cycleCounter = Long.valueOf(line.substring(7, 12)); + if(isExistPS100Data(machineNumber, cycleCounter)){ + break; + } ps100gxpSterilizerRecord = new Ps100gxpSterilizerRecord(); ps100gxpSterilizerRecord.setStartDate(date); ps100gxpSterilizerRecord.setProgramNo(line.substring(12, 14)); ps100gxpSterilizerRecord.setCycles(cycleCounter); ps100gxpSterilizerRecord.setMachineNumber(machineNumber); + ps100gxpSterilizerRecordList.add(ps100gxpSterilizerRecord); } if(ps100gxpSterilizerRecord == null){ continue; } String stageNo = line.substring(14, 16); + if("00".equals(stageNo)){ + continue; + } String readKey = cycleCounter + stageNo + line.substring(16, 26); if(readRecords.contains(readKey)){ continue; @@ -359,8 +416,8 @@ } xinhuatypePs100gxpStageDetails.setStageDate(date); xinhuatypePs100gxpStageDetails.setPs100gxpSterilizerRecord(ps100gxpSterilizerRecord); - xinhuatypePs100gxpStageDetails.setInteriorPressure(Float.valueOf(line.substring(28, 34))); - xinhuatypePs100gxpStageDetails.setInteriorTemperature(Float.valueOf(line.substring(34, 39))); + xinhuatypePs100gxpStageDetails.setInteriorPressure(df.format(Float.valueOf(line.substring(28, 34)))); + xinhuatypePs100gxpStageDetails.setInteriorTemperature(df.format(Float.valueOf(line.substring(34, 39)))); endDate = date; ps100gxpSterilizerRecord.getPs100gxpStageDetailsList().add(xinhuatypePs100gxpStageDetails); } @@ -369,7 +426,11 @@ } if(CollectionUtils.isNotEmpty(ps100gxpSterilizerRecordList)){ removeIncompleteData(ps100gxpSterilizerRecordList, enableDetailedDeviceInformation, loginUserData); - objectDao.batchSaveOrUpdate(ps100gxpSterilizerRecordList); + if(CollectionUtils.isNotEmpty(ps100gxpSterilizerRecordList)){ + objectDao.batchSaveOrUpdate(ps100gxpSterilizerRecordList); + obj = new JSONObject(); + obj.put("end", true); + } } } catch (FileNotFoundException e) { logger.warn(e.getMessage()); @@ -388,7 +449,7 @@ }finally{ FileSystemHelper.closeInputStream(inputStream, br, isr, out); } - return jsonArray; + return obj; } /** * 共享文件夹方式读取