关于Ireport写章程

需要有多种身份放在不同页数的表格里获取图片
具体思路如下:
将数据库中决定的key传进来
在mmp添加映射(mmp知道对应字段的type是什么)
然后去数据库里的sql中查到图片路径(在服务器中的路径)->置换本地文件名->路径被set进reportMap里(以key做标识)
主要代码如下

/** 九连环 */
    public  Map core(Map reportMap, String key, String imgDirectoryPath, List datasource){

        boolean flag = false;//同名文件是否覆盖(不覆盖=不保存)|default:false
        Map map  = new HashMap<>();

        File imgFile = new File(imgDirectoryPath);
        if (imgFile != null && imgFile.exists() && imgFile.isDirectory()) {// 进一步校验缺失图片 进行抓取
            for (PageData p : datasource) {//数据源所有图片路径
                String fileName = null;//回来再改这个
                //the key!重要
                if(p!=null){
                    fileName = p.getString("UPLOAD_ADDRESS").substring(p.getString("UPLOAD_ADDRESS").lastIndexOf("/") + 1, p.getString("UPLOAD_ADDRESS").length());
                    map.put(fileName, p.getString("UPLOAD_ADDRESS"));
                }
            }
            //文件存在 进一步判断文件夹下级目录,不写通配(递归),只查一级子集 不总写就忘了
            File[] files = imgFile.listFiles();
            for(File f : files){
                if(f.isFile()){
                    String fname = f.getName();
                    if(map.containsKey(fname)){//文件夹所有图片(文件)目录
                        map.remove(fname);//从数据源中将已有同名名图片去除
                        if(!reportMap.containsKey(key) || flag){
                            reportMap.put(key, imgDirectoryPath+File.separator+fname);
                        }
                        continue;
                    }
                }
            }
            //pd_cond.put("idfan", imgFilePath);// pd_cond.put("idfan", "/uploadpics/"+MARKETPOID+".jpg");
        } else {
            //没有文件夹就意味着全没有,新建路径,同步全部数据源图片
            boolean b = imgFile.mkdirs();//这步貌似可以省略,那边好像有了,先写着
            if(b){
                for (PageData p : datasource) {
                    //System.out.println(p.getString("UPLOAD_ADDRESS"));// 这应该就是路径
                    String fileName = null;//回来再改这个
                    if(p!=null){
                        fileName = p.getString("UPLOAD_ADDRESS").substring(p.getString("UPLOAD_ADDRESS").lastIndexOf("/") + 1, p.getString("UPLOAD_ADDRESS").length());
                        map.put(fileName, p.getString("UPLOAD_ADDRESS"));
                    }
                }   
            }else{
                logger.error("本地路径创建失败!");
            }
        }
        //这的 bug依然存在,不能保存同名但不同MD5校验的图片(因为用的filename当key)
        if(map!=null && !map.isEmpty()){
            for (String s : map.keySet()) {
                //System.out.println(s);// 这应该就是文件名
                HttpURLConnectionPost.sendPost2(map.get(s), imgDirectoryPath);//get(s)这就是路径
                reportMap.put(key, imgDirectoryPath+File.separator+s);
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        return reportMap;
    }
    enum TypeStone{
        /*法人*/
        FRID("FRID", null, "1", "frid"), 
        FRIDA("FRIDA", "1", "1", "frid"), 
        FRIDB("FRIDB", "0", "1", "frid"),
        /*财务人员*/
        CWID("CWID", null, "4", "cwid"), 
        CWIDA("CWIDA", "1", "4", "cwid"), 
        CWIDB("CWIDB", "0", "4", "cwid"),
        /*联络员*/
        LLYID("LLYID", null, "2", "cwid"), 
        LLYIDA("LLYIDA", "1", "2", "cwid"), 
        LLYIDB("LLYIDA", "0", "2", "cwid"),
        /*自然人股东
        ZZRGD("ZZRGD", null, "8", "zzrgd"), 
        ZZRGDA("ZZRGDA", "1", "8", "zzrgd"), 
        ZZRGDB("ZZRGDB", "0", "8", "zzrgd"),*/

        /*委托代理人*/
        WTDLR("WTDLR", null, "3", "wtdlr"), 
        WTDLRA("WTDLRA", "1", "3", "wtdlr"), 
        WTDLRB("WTDLRB", "0", "3", "wtdlr");


        private TypeStone(String key, String type, String filetype, String clusterPath){
            this.key = key;
            this.type = type;
            this.filetype = filetype;
            this.clusterPath = clusterPath;
        }

        public static boolean containsKey(String key){
            boolean b = false;
            for(TypeStone t : TypeStone.values()){
                if(toCompareStr(key, t.key)){
                    b = true;
                    break;
                }
            }
            return b;
        }

        public static TypeStone getKey(String key){
            for(TypeStone t : TypeStone.values()){
                if(toCompareStr(key, t.key)){
                    return t;
                }
            }
            return null;
        }

        private String key;
        private String type;
        private String filetype;
        private String clusterPath;
        public String getKey() {
            return key;
        }
        public void setKey(String key) {
            this.key = key;
        }
        public String getType() {
            return type;
        }
        public void setType(String type) {
            this.type = type;
        }
        public String getFiletype() {
            return filetype;
        }
        public void setFiletype(String filetype) {
            this.filetype = filetype;
        }
        public String getClusterPath() {
            return clusterPath;
        }
        public void setClusterPath(String clusterPath) {
            this.clusterPath = clusterPath;
        }
    }

    private static boolean isNotEmpty(String str){
        if(str!=null && str.trim().length()>0){
            return true;
        }
        return false;
    }

    private static boolean toCompareStr(String str1, String str2){
        if(isNotEmpty(str1)&&isNotEmpty(str2)){
            if(str1.equals(str2)){
                return true;
            }
        }
        return false;
    }

    /** 十八弯 */
    public Map callCore (Map reportMap, String key, String globlePath, String marketpoid){

        String imgDirectoryPath = globlePath+File.separator+marketpoid;

        List data = null;
        PageData pdn = null;
        //  TypeStone.
        if(TypeStone.containsKey(key)){
            TypeStone t = TypeStone.getKey(key);
            if(isNotEmpty(t.filetype)){
                pdn = new PageData();
                pdn.put("MARKETPOID", marketpoid);// MARKETPOID
                pdn.put("UPLOAD_FILETYPE", t.filetype);//pdn.put("UPLOAD_FILETYPE", mmp.get(key));
                try {
                    data = uploadinfoService.findByMarketIdCombineType(pdn);
                } catch (Exception e) {
                    System.out.println("here");
                    logger.error(e);
                }
                if(data!=null && data.size()>0){
                    if(isNotEmpty(t.type)){// 十大块五小块
                        //五小块
                        for(PageData p : data){
                            if(!toCompareStr(String.valueOf(p.get("UPLOAD_TYPE")), t.type)){//!和t.type不一样的去掉
                                p = null;
                            }
                        }
                        imgDirectoryPath = globlePath + File.separator + marketpoid + File.separator + t.clusterPath + File.separator + t.type;
                    }else{
                        //十大块
                        //nothing
                        imgDirectoryPath = globlePath + File.separator + marketpoid + File.separator + t.clusterPath;
                    }
                    //二次判断
                    if(data!=null && data.size()>0){
                        reportMap = core(reportMap, key, imgDirectoryPath, data);
                    }else{
                        logger.info("方法【data.remove("+t.type+")】返回结果集为空");
                    }
                }else{
                    logger.info("方法【uploadinfoService.findByMarketIdCombineType】返回结果集为空");
                }
            }else{
                logger.info("fileType类型为空,无法查询!");
            }
        }else{
            logger.info("key为空,,无法转换fileType类型进行查询!");
        }

        return reportMap;
    }

你可能感兴趣的:(成长之路)