xinyb
4 天以前 67a32b3138862fa8faf2d774f4f841280f0e4000
CRM邮箱附件路径的优化
2个文件已修改
117 ■■■■ 已修改文件
src/com/yc/crm/mail/action/MailController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/crm/mail/service/MailFileImpl.java 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/crm/mail/action/MailController.java
@@ -216,14 +216,17 @@
                if (StringUtils.isNotBlank(t482101HEntity.getAttachmentList())) {//附件的处理
                    //获取到附件内容
                    List<AttachmentEntity> attachmentEntities = mailFileIfc.getAttachmentEntityList(t482101HEntity.getAttachmentList());
                    List<Map<String,Object>> list = new ArrayList<>();
                    List<Map<String, Object>> list = new ArrayList<>();
                    if (attachmentEntities.size() > 0) {
                        for (AttachmentEntity a : attachmentEntities) {
                            Map<String,Object> map=new HashMap<>();
                            map.put("url",shoppingImageServer + "/uploads/email/" + dataSourceEntity.getDbId() + "/482101/" + a.getUnid() + "@p@" + a.getPhysicalFile());
                            map.put("name",a.getOriginalFileName());
                            map.put("size",a.getFileSize());
                            map.put("fileType",a.getFileType());
                            Map<String, Object> map = new HashMap<>();
                            map.put("url", shoppingImageServer + "/uploads/email/" + dataSourceEntity.getDbId() + "/482101/" + a.getUnid() + "@p@" + a.getPhysicalFile());
                            if (!t482101HEntity.getMailType().equals(1)) {//不是收件类型(1)
                                map.put("url", shoppingImageServer + "/uploads/attachment/" + dataSourceEntity.getDbId() + "/482101/" + a.getUnid() + "@p@" + a.getSeq() + "." + a.getFileType());
                            }
                            map.put("name", a.getOriginalFileName());
                            map.put("size", a.getFileSize());
                            map.put("fileType", a.getFileType());
                            list.add(map);
                        }
                        t482101HEntity.setAttachmentPath(list);
src/com/yc/crm/mail/service/MailFileImpl.java
@@ -44,9 +44,10 @@
 */
@Service("MailFileImpl")
public class MailFileImpl extends BaseService implements MailFileIfc {
    private final ShoppingImageEntity shoppingImage =  new ShoppingImageEntity() ;
    private final ShoppingImageEntity shoppingImage = new ShoppingImageEntity();
    @Autowired
    private DefaultLobHandler defaultLobHandler;
    @Override
    public void saveAttachment(List<MailFileEntity> mailFile) {
        try {
@@ -90,6 +91,7 @@
            attachment.setUnid(unId);
            attachment.setFileType(list.get(i).get("FileType") == null ? null : (String) list.get(i).get("FileType"));
            attachment.setFileSize(list.get(i).get("FileSize") == null ? 0 : (Long) list.get(i).get("FileSize"));
            attachment.setSeq(list.get(i).get("seq") == null ? 0 : (Integer) list.get(i).get("seq"));
            attachment.setPhysicalFile(list.get(i).get("PhysicalFile") == null ? null : (String) list.get(i).get("PhysicalFile"));
            attachment.setOriginalFileName(list.get(i).get("OriginalFileName") == null ? null : (String) list.get(i).get("OriginalFileName"));
            attachment.setOriginalPicture(list.get(i).get("OriginalPicture") == null ? null : (byte[]) list.get(i).get("OriginalPicture"));  //附件处理
@@ -97,7 +99,6 @@
        }
        return attachmentList;
    }
    @Transactional(rollbackFor = Exception.class)
@@ -128,32 +129,32 @@
            width = null;
            height = null;
        }
        ShoppingImageEntity shoppingImageEntity = null ;
        ShoppingImageEntity shoppingImageEntity = null;
        DataSourceEntity dataSourceEntity = null;
        try {
            dataSourceEntity = MultiDataSource.getDataSourceMap( request) ;
            dataSourceEntity = MultiDataSource.getDataSourceMap(request);
            if (dataSourceEntity == null) {
                throw new Exception("没有找到数据源,获取图片文件失败!" ) ;
                throw new Exception("没有找到数据源,获取图片文件失败!");
            }
            String rootPath = session.getServletContext().getRealPath("/");
            //String uuid = UUID.randomUUID().toString().toUpperCase();
            shoppingImageEntity = getImage( unid,rootPath ,dataSourceEntity.getDbId(),attachmentPath,formidPath);
            shoppingImageEntity = getImage(unid, rootPath, dataSourceEntity.getDbId(), attachmentPath, formidPath);
            if (shoppingImageEntity == null || shoppingImageEntity.getImage() == null) {
                return null;
            }
            //取原图路径
            String shoppingImageFileName = SettingKey.getShoppingImageFileName(rootPath,unid, width,height, isShowOrgImage, dataSourceEntity.getDbId()+"", shoppingImageEntity.getFileType(),attachmentPath,formidPath);
            String shoppingImageFileName = SettingKey.getShoppingImageFileName(rootPath, unid, width, height, isShowOrgImage, dataSourceEntity.getDbId() + "", shoppingImageEntity.getFileType(), attachmentPath, formidPath);
            File file = shoppingImageEntity.getImage();
            if (file != null) {
                if (width != null && height != null && shoppingImageEntity.getFileType()!=null
                if (width != null && height != null && shoppingImageEntity.getFileType() != null
                        //图片文件才缩放,否则会报错
                        && StringUtils.containsAny(shoppingImageEntity.getFileType().toLowerCase(),"jpg","png","gif","jpeg","tiff","bmp","raw","tga","fpx","webp")) {
                        && StringUtils.containsAny(shoppingImageEntity.getFileType().toLowerCase(), "jpg", "png", "gif", "jpeg", "tiff", "bmp", "raw", "tga", "fpx", "webp")) {
                    // 缩放图片
                    ImageUtils.scale(file.getPath(), shoppingImageFileName, width, height);
                } else {
@@ -166,10 +167,10 @@
                return image;
            }
        } catch (IOException e) {
            System.out.println("输出缩略图时出错,出错文件名:" + (shoppingImageEntity!=null?shoppingImageEntity.getPhysicalFile():"") +  (dataSourceEntity!=null?"dbid:["+dataSourceEntity.getDbId() + "],系统名称:["+ dataSourceEntity.getSystemDescribe()+"]":"") );
            System.out.println("输出缩略图时出错,出错文件名:" + (shoppingImageEntity != null ? shoppingImageEntity.getPhysicalFile() : "") + (dataSourceEntity != null ? "dbid:[" + dataSourceEntity.getDbId() + "],系统名称:[" + dataSourceEntity.getSystemDescribe() + "]" : ""));
            throw e;
        }catch (Exception e) {
            throw e ;
        } catch (Exception e) {
            throw e;
        } finally {
            //if (width != null && height != null && file != null && file.exists())
            //    file.delete();
@@ -178,18 +179,18 @@
    }
    private ShoppingImageEntity getImage(String unids, String rootPath, int dbId, String attachmentPath, String formidPath) {
        if  (unids == null || "".equals(unids))  return null ;
        String unid = "" ,mailSeq = "" ;
        String unidStr[] = unids.split(SettingKey.NAVSPLIT) ;   //
        unid = unidStr[0] ;
        if (unidStr.length > 1 ) {
            String seqs[] = unidStr[1].split(";") ;
            mailSeq = seqs[seqs.length-1];   //只取最后一个 seq , 因为有时候传过来的值是:  7394;7382 ,如果不处理会导致语法错误
        if (unids == null || "".equals(unids)) return null;
        String unid = "", mailSeq = "";
        String unidStr[] = unids.split(SettingKey.NAVSPLIT);   //
        unid = unidStr[0];
        if (unidStr.length > 1) {
            String seqs[] = unidStr[1].split(";");
            mailSeq = seqs[seqs.length - 1];   //只取最后一个 seq , 因为有时候传过来的值是:  7394;7382 ,如果不处理会导致语法错误
        }
        String sql = " set nocount on ; \n"
                + " declare @myrowcount int,@myerror int \n"
                + " declare @unid varchar(50) = "+ GridUtils.prossSqlParm(unid)+" \n"
                + " declare @unid varchar(50) = " + GridUtils.prossSqlParm(unid) + " \n"
                + " declare @FormId int,@DocCode varchar(50),@FieldId varchar(50),@RowId varchar(50) \n"
                + " declare @OriginalFileName varchar(200),@PhysicalFile varchar(50),@FileType varchar(50),@FileSize bigint \n"
                + " declare @AuthorCode varchar(50),@AuthorName varchar(50),@OriginalPicture varbinary(max) \n"
@@ -198,9 +199,9 @@
                + "    @OriginalFileName = a.OriginalFileName ,@PhysicalFile = a.PhysicalFile,@FileType = a.FileType,\n"
                + "    @FileSize = isnull(a.FileSize,0),@AuthorCode = a.AuthorCode,@AuthorName = a.AuthorName,\n"
                + "    @OriginalPicture = a.OriginalPicture \n"
                + " from " + (formidPath!=null&&"9747".equals(formidPath)?"_sys_AttachmentLog":"_sys_Attachment9") + " a \n"
                + " from " + (formidPath != null && "9747".equals(formidPath) ? "_sys_AttachmentLog" : "_sys_Attachment9") + " a \n"
                + " where a.UNID = @unid  \n"
                + (mailSeq !=null && !"".equals(mailSeq)?" and a.fieldid = '" + mailSeq + "' \n":"")
                + (mailSeq != null && !"".equals(mailSeq) ? " and a.fieldid = '" + mailSeq + "' \n" : "")
                + " select @myrowcount  = @@rowcount,@myerror = @@error \n"
                + " if isnull(@myrowcount,0) = 0 \n"
@@ -209,16 +210,16 @@
                + "       @OriginalFileName = a.OriginalFileName ,@PhysicalFile = a.PhysicalFile,@FileType = a.FileType,\n"
                + "       @FileSize = isnull(a.FileSize,0),@AuthorCode = a.AuthorCode,@AuthorName = a.AuthorName,\n"
                + "       @OriginalPicture = a.OriginalPicture \n"
                + "    from "+ (formidPath!=null&&"9747".equals(formidPath)?"_sys_AttachmentLog":"_sys_Attachment") +" a \n"
                + "    from " + (formidPath != null && "9747".equals(formidPath) ? "_sys_AttachmentLog" : "_sys_Attachment") + " a \n"
                + "    where a.UNID = @unid  \n"
                + (mailSeq !=null && !"".equals(mailSeq)?"    and a.fieldid = '" + mailSeq + "' \n":"")
                + (mailSeq != null && !"".equals(mailSeq) ? "    and a.fieldid = '" + mailSeq + "' \n" : "")
                + " end \n "
                + " select @FormId as FormId,@DocCode as DocCode,@FieldId as FieldId,@RowId as RowId, \n" +
                "       @OriginalFileName as OriginalFileName ,@PhysicalFile as PhysicalFile,@FileType as FileType,\n" +
                "       isnull(@FileSize,0) as FileSize,@AuthorCode as AuthorCode,@AuthorName as AuthorName,\n" +
                "       @OriginalPicture as OriginalPicture \n";
        try {
            this.jdbcTemplate.query(sql,new AbstractLobStreamingResultSetExtractor(){
            this.jdbcTemplate.query(sql, new AbstractLobStreamingResultSetExtractor() {
                protected void handleNoRowFound() throws LobRetrievalFailureException {
                    System.out.println("在数据库id为:" + dbId + "中,导购管理  ShoppingImageImpl 未找到 unid=" + unids + " 的图片文件(或附件)!");
                    shoppingImage.setFormId(-1);
@@ -232,66 +233,67 @@
                    shoppingImage.setFileSize(0L);
                    shoppingImage.setAuthorCode("");
                    shoppingImage.setAuthorName("");
                    shoppingImage.setImage(null) ;
                    shoppingImage.setImage(null);
                }
                @Override
                protected void streamData(ResultSet rs) throws SQLException, IOException, DataAccessException {
                    shoppingImage.setFormId(rs.getString("FormId") == null?0:rs.getInt("FormId"));
                    shoppingImage.setDocCode(rs.getString("DocCode") == null?"":rs.getString("DocCode"));
                    shoppingImage.setFieldId(rs.getString("FieldId") == null?"":rs.getString("FieldId"));
                    shoppingImage.setRowId(rs.getString("RowId") == null?"":rs.getString("RowId"));
                    shoppingImage.setFormId(rs.getString("FormId") == null ? 0 : rs.getInt("FormId"));
                    shoppingImage.setDocCode(rs.getString("DocCode") == null ? "" : rs.getString("DocCode"));
                    shoppingImage.setFieldId(rs.getString("FieldId") == null ? "" : rs.getString("FieldId"));
                    shoppingImage.setRowId(rs.getString("RowId") == null ? "" : rs.getString("RowId"));
                    shoppingImage.setOriginalFileName(rs.getString("OriginalFileName") == null?null:rs.getString("OriginalFileName"));
                    shoppingImage.setPhysicalFile(rs.getString("PhysicalFile") == null?null:rs.getString("PhysicalFile"));
                    shoppingImage.setFileType(rs.getString("FileType") == null?null:rs.getString("FileType"));
                    shoppingImage.setOriginalFileName(rs.getString("OriginalFileName") == null ? null : rs.getString("OriginalFileName"));
                    shoppingImage.setPhysicalFile(rs.getString("PhysicalFile") == null ? null : rs.getString("PhysicalFile"));
                    shoppingImage.setFileType(rs.getString("FileType") == null ? null : rs.getString("FileType"));
                    shoppingImage.setFileSize(rs.getLong("FileSize"));
                    shoppingImage.setAuthorCode(rs.getString("AuthorCode") == null?null:rs.getString("AuthorName"));
                    shoppingImage.setAuthorName(rs.getString("AuthorName") == null?null:rs.getString("AuthorName"));
                    shoppingImage.setAuthorCode(rs.getString("AuthorCode") == null ? null : rs.getString("AuthorName"));
                    shoppingImage.setAuthorName(rs.getString("AuthorName") == null ? null : rs.getString("AuthorName"));
                    //取原图路径
                    String shoppingImageFileName = SettingKey.getShoppingImageFileName(rootPath,unids, null, null, true, dbId+"", shoppingImage.getFileType(),attachmentPath,formidPath);
                    InputStream is = null ;
                    byte[] bytes = null ;
                    String shoppingImageFileName = SettingKey.getShoppingImageFileName(rootPath, unids, null, null, true, dbId + "", shoppingImage.getFileType(), attachmentPath, formidPath);
                    InputStream is = null;
                    byte[] bytes = null;
                    try {
                        is = defaultLobHandler.getBlobAsBinaryStream(rs, "OriginalPicture");
                        if (is != null) {
                            bytes = ShoppingImageEntity.InputStreamToByte( is); //取二进制图片
                            bytes = ShoppingImageEntity.InputStreamToByte(is); //取二进制图片
                            File file = BlobToFile.writeBytesToFile(bytes,shoppingImageFileName);  //
                            File file = BlobToFile.writeBytesToFile(bytes, shoppingImageFileName);  //
                            if (file != null) {
                                shoppingImage.setImage(file);
                            }
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                        throw e ;
                        throw e;
                    } finally {
                        bytes = null ;
                        bytes = null;
                        if (is != null) is.close();
                    }
                }   // end function
            });
            return shoppingImage ;
            return shoppingImage;
        }catch(DataAccessException e ) {
            if (e instanceof EmptyResultDataAccessException){
                return null ;
            }else {
                System.out.println("dbid:" + dbId + ",error:" + (e.getCause() != null ?e.getCause().getMessage():e.getMessage())) ;
        } catch (DataAccessException e) {
            if (e instanceof EmptyResultDataAccessException) {
                return null;
            } else {
                System.out.println("dbid:" + dbId + ",error:" + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()));
                e.printStackTrace();
                throw e;
            }
        }catch(Exception e){
            System.out.println("dbid:" + dbId + ",error:" + (e.getCause() != null ?e.getCause().getMessage():e.getMessage())) ;
        } catch (Exception e) {
            System.out.println("dbid:" + dbId + ",error:" + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()));
            e.printStackTrace();
            throw e;
        }
    }
    /**
     * 判断是否为数字
     *