Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java =================================================================== diff -u -r29718 -r29791 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 29718) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 29791) @@ -1,8 +1,13 @@ package com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.action; import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.sql.ResultSet; import java.sql.SQLException; @@ -71,6 +76,7 @@ import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.exception.SterilingModeNotTheSameException; +import com.forgon.exception.SystemException; import com.forgon.exception.service.ExceptionHandler; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; @@ -102,6 +108,10 @@ @Action(value = "sterilizationRecordAction") public class SterilizationRecordAction implements ModelDriven, Preparable { + + private File[] uploadFiles; + + private String[] uploadFilesFileName; private SterilizationRecord sterilizationRecord; @@ -146,6 +156,22 @@ private SterilisationManager sterilisationManager; + public File[] getUploadFiles() { + return uploadFiles; + } + + public void setUploadFiles(File[] uploadFiles) { + this.uploadFiles = uploadFiles; + } + + public String[] getUploadFilesFileName() { + return uploadFilesFileName; + } + + public void setUploadFilesFileName(String[] uploadFilesFileName) { + this.uploadFilesFileName = uploadFilesFileName; + } + public void setSterilisationManager(SterilisationManager sterilisationManager) { this.sterilisationManager = sterilisationManager; } @@ -1713,7 +1739,117 @@ } ServletActionContext.getResponse().setStatus(200); } + + /** + * PC端上传灭菌记录图片(根据科室供应室配置的"图片保存方式",判断是保存到数据库还是保存到文件系统) + */ + public void uploadSterilizationRecordPicFile(){ + String sterileRecordId = StrutsParamUtils.getPraramValue("sterileRecordId", null); + JSONObject json = JSONUtil.buildJsonObject(true, "上传成功!"); + boolean isSavePathExist = supplyRoomConfigManager.isSavePathExist(); + if (isSavePathExist == false) { + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "文件保存目录不存在."); + return; + } + if(uploadFiles == null || uploadFiles.length == 0){ + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, "未找到要上传的文件"); + StrutsResponseUtils.output(json); + return; + } + try { + if (DatabaseUtil.isPoIdValid(sterileRecordId) && isSavePathExist) { + // 上传图片 + for (int i = 0, size = uploadFiles.length; i < size; i++) { + File file = uploadFiles[i]; + InputStream fileStream = null; + ByteArrayOutputStream outStream = null; + if (file != null) { + try { + fileStream = new FileInputStream(file); + outStream = new ByteArrayOutputStream(); + byte[] data = new byte[4096]; + int count = -1; + while ((count = fileStream.read(data, 0, 4096)) != -1) { + outStream.write(data, 0, count); + } + saveSterileRecordPic(uploadFilesFileName[i], outStream.toByteArray(), Long.parseLong(sterileRecordId)); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (fileStream != null) { + try { + fileStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (outStream != null) { + try { + outStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + } + } + } + } + } catch (Throwable e) { + e.printStackTrace(); + JSONUtil.addSuccess(json, false); + JSONUtil.addMessage(json, e.getMessage()); + } + StrutsResponseUtils.output(json); + } + + /** + * 保存灭菌记录图片 + * @param filename 文件名称 + * @param picData 文件内容 + * @param id 灭菌记录Id + * @throws FileNotFoundException + * @throws IOException + */ + private void saveSterileRecordPic(String filename,byte[] picData, Long id) throws FileNotFoundException, IOException { + if(id == null){ + throw new SystemException("灭菌记录的id不能为空"); + } + if(ArrayUtils.isEmpty(picData)){ + throw new SystemException("未获取到图片数据"); + } + if (supplyRoomConfigManager.getSystemParamsObj().saveImageLocal()) {// 保存到文件系统 + if(StringUtils.isBlank(filename)){ + throw new SystemException("文件名不能为空"); + } + FileOutputStream fos = new FileOutputStream(filename); + fos.write(picData, 0, picData.length); // 向服务端文件写入字节流 + fos.close(); // 关闭FileOutputStream对象 + + // 生成缩略图 + String thumbnailImageName = UUID.randomUUID().toString() + ".jpg"; + imageFileManager.SaveToThumbnail(picData, filename, thumbnailImageName); + // 保存记录到数据库 + SterilizationRecordPic pic = new SterilizationRecordPic(); + pic.setFilePath(filename); + pic.setThumbnailFileName(thumbnailImageName); + Collection picList = new ArrayList(); + picList.add(pic); + sterilizationRecordManager.saveRecordPicture(id, picList, ""); + }else if(supplyRoomConfigManager.getSystemParamsObj().saveImageDataBase()){// 保存到数据库 + SterilizationRecordPic pic = new SterilizationRecordPic(); + pic.setPicture(picData); + Collection picList = new ArrayList(); + picList.add(pic); + sterilizationRecordManager.saveRecordPicture(id, picList,""); + }else{ + throw new SystemException("图片保存方式设置错误,请到科室供应室设置中进行配置"); + } + } + public String getTousseIds() { return tousseIds; }