Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/servlet/UploadServlet.java =================================================================== diff -u -r12331 -r15591 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/servlet/UploadServlet.java (.../UploadServlet.java) (revision 12331) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/servlet/UploadServlet.java (.../UploadServlet.java) (revision 15591) @@ -9,6 +9,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; @@ -25,6 +26,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecordPic; import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service.SterilizationRecordManager; +import com.forgon.disinfectsystem.tousse.imagefilemanager.service.ImageFileManager; import com.forgon.tools.Path; import com.forgon.tools.SpringBeanManger; @@ -33,13 +35,16 @@ private SterilizationRecordManager sterilizationRecordManager; private SupplyRoomConfigManager supplyRoomConfigManager; + private ImageFileManager imageFileManager; @Override public void init() throws ServletException { sterilizationRecordManager = (SterilizationRecordManager) SpringBeanManger .getBean("sterilizationRecordManager"); supplyRoomConfigManager = (SupplyRoomConfigManager) SpringBeanManger .getBean("supplyRoomConfigManager"); + imageFileManager = (ImageFileManager) SpringBeanManger + .getBean("imageFileManager"); } @Override @@ -121,9 +126,13 @@ 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); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManagerImpl.java =================================================================== diff -u -r15399 -r15591 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManagerImpl.java (.../ImageFileManagerImpl.java) (revision 15399) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManagerImpl.java (.../ImageFileManagerImpl.java) (revision 15591) @@ -326,7 +326,27 @@ imageFileObj.setImage(imageData); saveOrUpdateImageFileObj(imageFileObj); } + /** + * 保存为缩略图 + */ + public void SaveToThumbnail(byte[] img,String originalAbsoultFilePaht,String ThumbnailFileName){ + if(img == null || StringUtils.isBlank(originalAbsoultFilePaht) || StringUtils.isBlank(ThumbnailFileName)){ + return ; + } + String saveImagePath = supplyRoomConfigManager + .getSystemParamsObj().getSaveImagePath(); + String thumbnailImagePath = "\\thumbnail";// 缩略图路径 + String thumbnailImageAbsolutePath = saveImagePath + + thumbnailImagePath; + File file2 = new File(thumbnailImageAbsolutePath); + if (!file2.exists()) { + file2.mkdirs(); + } + File imageFile = new File(originalAbsoultFilePaht); + createThumbnailImage(imageFile, img, new File(file2,ThumbnailFileName)); + } + @Override public void saveImage(ImageFile imageFile) { Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManager.java =================================================================== diff -u -r15249 -r15591 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManager.java (.../ImageFileManager.java) (revision 15249) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManager.java (.../ImageFileManager.java) (revision 15591) @@ -60,4 +60,11 @@ * @return */ public ImageFile getImageAt(Long objectId,String imageType,int index); + /** + * 保存为缩略图 + * @param img 原图二进制数据 + * @param originalAbsoultFilePaht 源文件的绝对路劲 + * @param ThumbnailFileName 缩略图 的文件名 包含后缀 + */ + public void SaveToThumbnail(byte[] img,String originalAbsoultFilePaht,String ThumbnailFileName); } Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordPic.js =================================================================== diff -u -r12331 -r15591 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordPic.js (.../sterilizationRecordPic.js) (revision 12331) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordPic.js (.../sterilizationRecordPic.js) (revision 15591) @@ -1,6 +1,172 @@ var sterilizationRecordPicWin; +var scale = 1.2;//每次缩放比例 +var currentScalePercent = 100;//当前缩放百分比 +var winWidth = 700; +var winHeight = 420; +var currentImageWidth = 0; +var currentImageId;//当前image对象id +var ImgView; +var curRotateIndex = 0; +Ext.onReady(function() { + //屏蔽右击事件 + window.oncontextmenu = function (){ + window.event.returnValue=false;//针对chrome可行,IE不可行 + } + ImgView = Ext.extend(Ext.Panel, { + height: winHeight, + border:false, + img_index: 0, + img_view_id: this.id + '_img', + align:'center', + + set_img: function(offset) { + Ext.get(this.img_view_id).dom.src = this.src[this.img_index + offset]; + Ext.getCmp(this.id + '_next_btn').disabled = ((this.img_index + offset) == this.src.length - 1) ? true : false; + Ext.getCmp(this.id + '_pre_btn').disabled = ((this.img_index + offset) == 0) ? true : false; + this.img_index = this.img_index + offset; + }, + initComponent: function(){ + currentImageId = this.img_view_id; + var cmp = this; + this.html='

'; + + /*this.tbar = [ + {text:"上一张", id: this.id + '_pre_btn', handler: function(){ + + cmp.set_img(-1); + }}, + {text:"下一张", id: this.id + '_next_btn', handler: function(){ + cmp.set_img(1); + } + }];*/ + + ImgView.superclass.initComponent.call(this); + }, + afterRender: function() { + curRotateIndex = 0; + ImgView.superclass.afterRender.call(this); + Ext.get(this.img_view_id).parent = this; + /*Ext.get(this.img_view_id).center(); */ + new Ext.dd.DD(Ext.get(this.img_view_id), 'pic');//能够图片在容器中拖动 + + Ext.get(this.img_view_id).dom.title='双击放大 右击缩小'; + Ext.get(this.img_view_id).on({'dblclick': {fn: function(){ + Ext.get(this).parent.zoom(Ext.get(this), scale,true); + + currentScalePercent = currentScalePercent * scale; + //Ext.Toast.show(Math.round(currentScalePercent) + '%',Ext.Toast.ShortTime); + }}, + 'contextmenu': {fn: function(){ + Ext.get(this).parent.zoom(Ext.get(this), scale,false); + + currentScalePercent = currentScalePercent / scale; + //Ext.Toast.show(Math.round(currentScalePercent) + '%',Ext.Toast.ShortTime); + }} + }); + + }, + //放大、缩小 + zoom: function(el, offset,type) { + var width = el.getWidth(); + var height = el.getHeight(); + var nwidth = type ? (width * offset) : (width / offset); + var nheight = type ? (height * offset) : (height / offset); + var left = type ? -((nwidth - width) / 2):((width - nwidth) / 2); + var top = type ? -((nheight - height) / 2):((height - nheight) / 2); + try{ + el.animate( + { + height: {to: nheight, from: height}, + width: {to: nwidth, from: width}, + left: {by:left}, + top: {by:top} + }, + null, + null, + 'backBoth', + 'motion' + ); + }catch(e){ + //alert(e.msg); + } + currentImageWidth = nwidth; + }, + rotate: function(el,type){ + try{ + if(type == true){ + // 顺转 + curRotateIndex = (curRotateIndex + 1) % 4; + var angle = curRotateIndex * 90; + el.setStyle('-webkit-transform','rotate(' + angle + 'deg)'); + el.setStyle('-moz-transform','rotate(' + angle + 'deg)');  + el.setStyle('-ms-transform','rotate(' + angle + 'deg)');  + el.setStyle('-o-transform','rotate(' + angle + 'deg)');  + el.setStyle('transform','rotate(' + angle + 'deg)');  + el.setStyle('filter','progid:DXImageTransform.Microsoft.BasicImage(rotation=' + curRotateIndex + ')');  + }else{ + // 逆转 + if(curRotateIndex == 0){ + curRotateIndex = 4; + } + curRotateIndex = (curRotateIndex - 1) % 4; + var angle = curRotateIndex * 90; + el.setStyle('-webkit-transform','rotate(' + angle + 'deg)'); + el.setStyle('-moz-transform','rotate(' + angle + 'deg)');  + el.setStyle('-ms-transform','rotate(' + angle + 'deg)');  + el.setStyle('-o-transform','rotate(' + angle + 'deg)');  + el.setStyle('transform','rotate(' + angle + 'deg)');  + el.setStyle('filter','progid:DXImageTransform.Microsoft.BasicImage(rotation=' + curRotateIndex + ')');  + } + }catch(e){ + alert(e.message); + } + } + }); + + var scrollFunc = function (e) { + try{ + var direct = 0; + var type; + e = e || window.event; + //e.wheelDelta:判断浏览器IE,谷歌滑轮事件 e.detail:Firefox滑轮事件 当滑轮向上滚动时 + if((e.wheelDelta && e.wheelDelta > 0) || (e.detail && e.detail > 0)){ + type = true; + }else if((e.wheelDelta && e.wheelDelta < 0) || (e.detail && e.detail < 0)){ + type = false; + } + if(Ext.isIE){ + Ext.get(e.srcElement).parent.zoom(Ext.get(e.srcElement), scale,type); + }else{ + Ext.get(e.target).parent.zoom(Ext.get(e.target), scale,type); + } + + //type为true表示放大,false为缩小 + if(type){ + currentScalePercent = currentScalePercent * scale; + }else{ + currentScalePercent = currentScalePercent / scale; + } + + //Ext.Toast.show(Math.round(currentScalePercent) + '%',Ext.Toast.ShortTime); + //ScrollText(direct); + }catch (e) { + // TODO: handle exception + } + } + //给页面绑定滑轮滚动事件 + if (document.addEventListener) { + document.addEventListener('DOMMouseScroll', scrollFunc, false); + } + //注册滚动滑轮触发scrollFunc方法 + window.onmousewheel = document.onmousewheel = scrollFunc; + + //ext 吐丝提示 + Ext.Toast = function() { }; Ext.Toast.LongTime = 4000; Ext.Toast.MiddleTime = 1000; Ext.Toast.ShortTime = 100; Ext.Toast.show = function(msgText, time) { Ext.MessageBox.show({ msg : msgText, closable : false }); setTimeout(function() { Ext.MessageBox.hide(); }, time); }; +}); + function showSterilizationRecordPic(id) { + currentScalePercent = 100;//当前缩放百分比 var page = 1; var totalPage = 0; @@ -11,43 +177,82 @@ text : '共0页' }); - var imagePanel = new top.Ext.Panel({ - id : 'imagePanel', - layout : 'fit', - height : 500, - items : [{ - xtype : 'box', - id : 'browseImage', - fieldLabel : "预览图片", - autoEl : { - id : 'imageBrowse', - tag : 'img', - autoHeight:true, - src : Ext.BLANK_IMAGE_URL, - style : 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);', - complete : 'off' - } - }] - }); - var browseImage = imagePanel.findById('browseImage'); var url = WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!getSterilizationRecordPic.do?id=' + id + '&page=' + page; - browseImage.autoEl.src=url; - - var formObj = new top.Ext.Panel({ - items : [imagePanel,{ + var img1 = new ImgView({ + src: [url] + }); + var formObj = new Ext.Panel({ + width:winWidth, + height:winHeight, + border:false, + renderTo: Ext.getBody(), + align : 'center', + items : [img1,{ xtype : 'panel', id : 'pageToolbar', bbar : ['->',{ xtype : 'button', + text : '放大', + handler : function(){ + Ext.get(currentImageId).parent.zoom(Ext.get(currentImageId), scale,true); + } + },{ + xtype : 'button', + text : '缩小', + handler : function(){ + Ext.get(currentImageId).parent.zoom(Ext.get(currentImageId), scale,false); + } + },{ + xtype : 'button', + text : '顺转', + handler : function(){ + Ext.get(currentImageId).parent.rotate(Ext.get(currentImageId),true); + } + },{ + xtype : 'button', + text : '逆转', + handler : function(){ + Ext.get(currentImageId).parent.rotate(Ext.get(currentImageId),false); + } + },{ + xtype : 'button', + text : '删除', + handler : function(){ + Ext.Ajax.request({ + url : WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!delSterilizationRecordPic.do?page=' + page + '&time='+new Date(), + params : { + id : id + }, + success : function(result){ + var pageStr = result.responseText; + totalPage = parseInt(pageStr); + var element = top.Ext.get(toolbarTotalPage.el); + element.update('共' + totalPage + '页'); + // 删除后显示第一张 + page = 1; + var url = WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!getSterilizationRecordPic.do?id=' + id + '&page=' + page + '&time='+new Date(); + var imageBrowse = Ext.get(currentImageId); + var image = imageBrowse.dom; + image.src = url;// 覆盖原来的图片 + var element = top.Ext.get(toolbarPage.el); + element.update('第' + page + '页'); + }, + failure : function(){ + + } + }); + } + },{ + xtype : 'button', text : '上一页', handler : function(){ if (page - 1 <= 0) { showResult('已是第一页'); return; } page = page - 1; - var url = WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!getSterilizationRecordPic.do?id=' + id + '&page=' + page; - var imageBrowse = top.Ext.get('imageBrowse'); + var url = WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!getSterilizationRecordPic.do?id=' + id + '&page=' + page + '&time='+new Date(); + var imageBrowse = Ext.get(currentImageId); var image = imageBrowse.dom; image.src = url;// 覆盖原来的图片 var element = top.Ext.get(toolbarPage.el); @@ -64,8 +269,8 @@ return; } page = page + 1; - var url = WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!getSterilizationRecordPic.do?id=' + id + '&page=' + page; - var imageBrowse = top.Ext.get('imageBrowse'); + var url = WWWROOT + '/disinfectSystem/sterilization/sterilizationRecordAction!getSterilizationRecordPic.do?id=' + id + '&page=' + page + '&time='+new Date(); + var imageBrowse = Ext.get(currentImageId); var image = imageBrowse.dom; image.src = url;// 覆盖原来的图片 var element = top.Ext.get(toolbarPage.el); @@ -74,15 +279,14 @@ }] }] }); - - sterilizationRecordWin = new top.Ext.Window({ + sterilizationRecordWin = new Ext.Window({ id : 'sterilizationRecordPicWin', layout : 'fit', title : '灭菌记录图片', border : false, modal : true, width : 800, - height: 555, + height: 490, plain : true, align : 'center', items : [ formObj ] Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecordPic.java =================================================================== diff -u -r13662 -r15591 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecordPic.java (.../SterilizationRecordPic.java) (revision 13662) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/sterilizationrecord/SterilizationRecordPic.java (.../SterilizationRecordPic.java) (revision 15591) @@ -31,6 +31,8 @@ private byte[] picture; private String filePath;// 文件路径 + + private String thumbnailFileName; //缩略图名称 @Id @GeneratedValue(strategy = GenerationType.AUTO) @@ -61,5 +63,12 @@ public void setFilePath(String filePath) { this.filePath = filePath; } - + + public String getThumbnailFileName() { + return thumbnailFileName; + } + + public void setThumbnailFileName(String thumbnailFileName) { + this.thumbnailFileName = thumbnailFileName; + } } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java =================================================================== diff -u -r15363 -r15591 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 15363) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/action/SterilizationRecordAction.java (.../SterilizationRecordAction.java) (revision 15591) @@ -1097,8 +1097,33 @@ e.printStackTrace(); } } - /** + * 删除灭菌记录图片 + */ + public void delSterilizationRecordPic(){ + String page = StrutsParamUtils.getPraramValue("page", "1"); + List pictureList = sterilizationRecord + .getRecordPictures(); + int pageSize = pictureList.size(); + if (StringUtils.isNumeric(page)) { + int pageIndex = Integer.parseInt(page); + if(pageIndex <= pageSize){ + SterilizationRecordPic picture = pictureList.get(pageIndex - 1); + objectDao.delete(picture); + pageSize--; + } + } + + HttpServletResponse httpServletResponse = StrutsParamUtils + .getResponse(); + httpServletResponse.setCharacterEncoding("UTF-8"); + try { + httpServletResponse.getWriter().print(pageSize); + } catch (IOException e) { + e.printStackTrace(); + } + } + /** * 灭菌图片 */ public void getSterilizationRecordPic() { @@ -1114,9 +1139,20 @@ // 数据库没有的话,尝试从文件系统获取 if(ArrayUtils.isEmpty(img)){ - String filePath = picture.getFilePath(); - if(StringUtils.isNotBlank(filePath)){ + String saveImagePath = supplyRoomConfigManager + .getSystemParamsObj().getSaveImagePath(); + String thumbnailImagePath = "\\thumbnail";// 缩略图路径 + String thumbnailImageAbsolutePath = saveImagePath + + thumbnailImagePath; + String filePath = thumbnailImageAbsolutePath + "\\" + picture.getThumbnailFileName(); + if( FileUtils.fileExist(filePath) ){ img = FileUtils.readFileBytes(filePath); + }else{ + // 找不到缩略图,尝试找源图显示 + filePath = picture.getFilePath(); + if(StringUtils.isNotBlank(filePath) && FileUtils.fileExist(filePath)){ + img = FileUtils.readFileBytes(filePath); + } } } }