xinyb
4 天以前 73c8452a479ea83d4e9d28a7c66c019d9955d194
CRM邮箱删除和待处理功能
3个文件已修改
186 ■■■■ 已修改文件
src/com/yc/crm/mail/action/MailController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/crm/mail/listener/EmailImageFilter.java 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/crm/mail/service/MailImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/crm/mail/action/MailController.java
@@ -220,7 +220,7 @@
                    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("url", "http://yingchen.onbus.cn:9010" + "/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());
                            }
@@ -655,24 +655,29 @@
                msg.setFail("邮件唯一标识docCode不能空");
                return msg;
            }
            if (param.get("handleTime") == null) {
                msg.setFail("待处理时间不能空");
                return msg;
            List<String> docCode = (List<String>) param.get("docCode");//待处理的单号
            String handleTime = "";//待处理时间
            if (param.get("handleTime") != null && !param.get("handleTime").equals("")) {
                handleTime = (String) param.get("handleTime");
            }
            List<String> docCode = (List<String>) param.get("docCode");
            String handleTime = (String) param.get("handleTime");
            // 正则表达式,用于匹配日期格式
            String regex = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}";
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(handleTime);
            if (!matcher.matches()) {
                msg.setFail("待处理日期格式为:yyyy-MM-dd HH:mm(如:1900-08-01 08:00)。请检查");
                return msg;
            if (StringUtils.isNotBlank(handleTime)) {
                // 正则表达式,用于匹配日期格式
                String regex = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}";
                Pattern pattern = Pattern.compile(regex);
                Matcher matcher = pattern.matcher(handleTime);
                if (!matcher.matches()) {
                    msg.setFail("待处理日期格式为:yyyy-MM-dd HH:mm(如:1900-08-01 08:00)。请检查");
                    return msg;
                }
            }
            DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);//获取数据源信息
            SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());//切换数据源
            emailIfc.updateMailHandle(handleTime, StringUtils.join(docCode, ","));
            msg.setOk("成功标记为待处理邮件");
            if(StringUtils.isBlank(handleTime)){//没值就是完成
                msg.setOk("待处理邮件已完成");
            }else{
                msg.setOk("标记为待处理邮件");
            }
        } catch (Exception e) {
            msg.setFail(e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
        } finally {
src/com/yc/crm/mail/listener/EmailImageFilter.java
@@ -33,87 +33,89 @@
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String reqUri = request.getRequestURI();
        synchronized (this) {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            String reqUri = request.getRequestURI();
        String hostUrl = SettingKey.getHostUrl(request);
        String queryString = request.getQueryString();
            String hostUrl = SettingKey.getHostUrl(request);
            String queryString = request.getQueryString();
        HttpSession session = request.getSession();
        String rootPath = session.getServletContext().getRealPath("/");
        ImageUrlParametersEntity imageUrlParametersEntity = getImageUrlParameters(reqUri);
        File file = new File(rootPath.substring(0, rootPath.length() - 1) + reqUri);
        try {
            if (file != null && file.exists()) {
                filterChain.doFilter(request, response);
                return;
            }
            MailFileIfc mailFileIfc= (MailFileIfc) FactoryBean.getBean("MailFileImpl");
            ImageEntity image = mailFileIfc.getImageFile(
                    imageUrlParametersEntity.getUnids(),
                    imageUrlParametersEntity.getWidth(),
                    imageUrlParametersEntity.getHeight(),
                    (imageUrlParametersEntity.getWidth() == null
                            && imageUrlParametersEntity.getHeight() == null ? true : false),
                    request, imageUrlParametersEntity.getAttachmentPath(), imageUrlParametersEntity.getFormidPath());
            if (image == null) {
                System.out.println("输出缩略图时出错,出错文件reqUri:" + hostUrl + reqUri + (queryString != null && !"".equals(queryString) ? "?" + queryString : ""));
                return;
            }
            if (image != null && image.getOriginalFileName() != null && (
                    image.getOriginalFileName().toLowerCase().endsWith(".pdf")
                            || image.getOriginalFileName().toLowerCase().endsWith(".doc")
                            || image.getOriginalFileName().toLowerCase().endsWith(".xls")
                            || image.getOriginalFileName().toLowerCase().endsWith(".ppt")
                            || image.getOriginalFileName().toLowerCase().endsWith(".docx")
                            || image.getOriginalFileName().toLowerCase().endsWith(".xlsx")
                            || image.getOriginalFileName().toLowerCase().endsWith(".pptx")
            )) {
                //不是图片格式,附件打开预览会自动下载,在这里处理直接跳过下面的生成输出流 by danaus 2023-07-10 09:49
                filterChain.doFilter(request, response);
                return;
            } else {
                //图片格式,直接显示
                response.setStatus(HttpServletResponse.SC_OK);
                InputStream is = null;
                try {
                    is = new FileInputStream(image.getFile());
                    //设置页面另存为时的文件名
                    response.setHeader("Content-Disposition", "inline; filename="
                            + (image != null && image.getOriginalFileName() != null ? new String(image.getOriginalFileName().getBytes("utf-8"), "ISO_8859_1") : ""));
                    String type = "image/";
                    //输出流
                    response.setContentType(type + image.getFileType());
                    OutputStream output = response.getOutputStream();
                    try {
                        FileCopyUtils.copy(is, output);
                    } catch (ClientAbortException | IllegalStateException e) {
                        System.out.println(getClass() + " reqUri:" + reqUri + ", Error:" + e.getMessage());
                    }
            HttpSession session = request.getSession();
            String rootPath = session.getServletContext().getRealPath("/");
            ImageUrlParametersEntity imageUrlParametersEntity = getImageUrlParameters(reqUri);
            File file = new File(rootPath.substring(0, rootPath.length() - 1) + reqUri);
            try {
                if (file != null && file.exists()) {
                    filterChain.doFilter(request, response);
                    return;
                    // 这里不能再执行   chain.doFilter(request, response) , 因为是新生成的文件,如果用  chain.doFilter 输出,则浏览器收到 404 文件不存的错误 ,
                    // 为了解决这个问题,使用  response 流 Stream 输出解决
                    //chain.doFilter(request, response);
                } catch (Exception e) {
                    System.out.println("输出缩略图时出错,出错文件reqUri:" + hostUrl + reqUri + (queryString != null && !"".equals(queryString) ? "?" + queryString : "") + ",错误原因:" + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()));
                    e.printStackTrace();
                } finally {
                }
                MailFileIfc mailFileIfc = (MailFileIfc) FactoryBean.getBean("MailFileImpl");
                ImageEntity image = mailFileIfc.getImageFile(
                        imageUrlParametersEntity.getUnids(),
                        imageUrlParametersEntity.getWidth(),
                        imageUrlParametersEntity.getHeight(),
                        (imageUrlParametersEntity.getWidth() == null
                                && imageUrlParametersEntity.getHeight() == null ? true : false),
                        request, imageUrlParametersEntity.getAttachmentPath(), imageUrlParametersEntity.getFormidPath());
                if (image == null) {
                    System.out.println("输出缩略图时出错,出错文件reqUri:" + hostUrl + reqUri + (queryString != null && !"".equals(queryString) ? "?" + queryString : ""));
                    return;
                }
                if (image != null && image.getOriginalFileName() != null && (
                        image.getOriginalFileName().toLowerCase().endsWith(".pdf")
                                || image.getOriginalFileName().toLowerCase().endsWith(".doc")
                                || image.getOriginalFileName().toLowerCase().endsWith(".xls")
                                || image.getOriginalFileName().toLowerCase().endsWith(".ppt")
                                || image.getOriginalFileName().toLowerCase().endsWith(".docx")
                                || image.getOriginalFileName().toLowerCase().endsWith(".xlsx")
                                || image.getOriginalFileName().toLowerCase().endsWith(".pptx")
                )) {
                    //不是图片格式,附件打开预览会自动下载,在这里处理直接跳过下面的生成输出流 by danaus 2023-07-10 09:49
                    filterChain.doFilter(request, response);
                    return;
                } else {
                    //图片格式,直接显示
                    response.setStatus(HttpServletResponse.SC_OK);
                    InputStream is = null;
                    try {
                        if (is != null) is.close();
                    } catch (IOException e) {
                        is = new FileInputStream(image.getFile());
                        //设置页面另存为时的文件名
                        response.setHeader("Content-Disposition", "inline; filename="
                                + (image != null && image.getOriginalFileName() != null ? new String(image.getOriginalFileName().getBytes("utf-8"), "ISO_8859_1") : ""));
                        String type = "image/";
                        //输出流
                        response.setContentType(type + image.getFileType());
                        OutputStream output = response.getOutputStream();
                        try {
                            FileCopyUtils.copy(is, output);
                        } catch (ClientAbortException | IllegalStateException e) {
                            System.out.println(getClass() + " reqUri:" + reqUri + ", Error:" + e.getMessage());
                        }
                        return;
                        // 这里不能再执行   chain.doFilter(request, response) , 因为是新生成的文件,如果用  chain.doFilter 输出,则浏览器收到 404 文件不存的错误 ,
                        // 为了解决这个问题,使用  response 流 Stream 输出解决
                        //chain.doFilter(request, response);
                    } catch (Exception e) {
                        System.out.println("输出缩略图时出错,出错文件reqUri:" + hostUrl + reqUri + (queryString != null && !"".equals(queryString) ? "?" + queryString : "") + ",错误原因:" + (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()));
                        e.printStackTrace();
                    } finally {
                        try {
                            if (is != null) is.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            } catch (Exception e) {
                servletResponse.setContentType("text/html;charset=utf-8");
                PrintWriter out = servletResponse.getWriter();
                out.print(e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
                out.flush();
                out.close();
            }
        } catch (Exception e) {
            servletResponse.setContentType("text/html;charset=utf-8");
            PrintWriter out = servletResponse.getWriter();
            out.print(e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
            out.flush();
            out.close();
        }
    }
src/com/yc/crm/mail/service/MailImpl.java
@@ -159,7 +159,7 @@
        String sql = "set nocount on\n";
        try {
            sql += "declare @docCode varchar(200) ='" + docCode + "' \n";
            sql += "update t482101H deleteFlag=1 where userCode =" + GridUtils.prossSqlParm(userCode) +
            sql += "update t482101H set delete_flag=1 where userCode =" + GridUtils.prossSqlParm(userCode) +
                    " and docCode in (select list from GetInStr(@docCode))\n";//标记删除
            sql += " select @@ROWCOUNT";
            return jdbcTemplate.queryForObject(sql, Integer.class);
@@ -174,7 +174,7 @@
        String sql = "set nocount on\n";
        try {
            sql += "declare @docCode varchar(200) ='" + docCode + "' \n";
            sql += "update t482101H deleteFlag=1 where userCode =" + GridUtils.prossSqlParm(userCode) +
            sql += "update t482101H set delete_flag=1 where userCode =" + GridUtils.prossSqlParm(userCode) +
                    " and docCode in (select list from GetInStr(@docCode))\n";//标记删除
            sql += " select @@ROWCOUNT";
            return jdbcTemplate.queryForObject(sql, Integer.class);
@@ -221,6 +221,7 @@
                    "read_Flag,(case when (isnull(handle_time,'') <> '' and isnull(handle_time,'') < getdate()) then 1 else 0 end) as handle," +
                    "handle_time,sender_time,receiving_time from t482101H ";
            sql += " where userCode=" + GridUtils.prossSqlParm(userCode);
            sql += " and isnull(delete_Flag,0) = 0 ";//未删除的
            sql += " and mailType=" + mailType;//0:草稿箱 1:收件箱 2:发件箱
            if (StringUtils.isNotBlank(email)) {
                if (mailType == 1) {