`
q445862108
  • 浏览: 85155 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

有一个bug错误,报java.util.ConcurrentModificationException

    博客分类:
  • web
 
阅读更多
在下面  [p]块中,发现如果Map 不用两个就一个就报java.util.ConcurrentModificationException
记录下来

package com.xyj.server.imp;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.xyj.business.CodeBo;
import com.xyj.business.DataBo;
import com.xyj.business.FileDicBo;
import com.xyj.business.FileTypeBo;
import com.xyj.business.PrintBo;
import com.xyj.server.PrintService;
import com.xyj.util.BusinessException;
import com.xyj.util.CacheManage;
import com.xyj.util.Constants;
import com.xyj.util.ServerException;
import com.xyj.util.StringUtil;
import com.xyj.vo.Code;
import com.xyj.vo.Data;
import com.xyj.vo.FileDic;
import com.xyj.vo.FileType;
import com.xyj.vo.Print;
import common.Logger;

/**
 * 打印
 * @author 易小斌
 *
 */
public class PrintServerImp implements PrintService{
	private PrintBo printBo;
	private FileTypeBo fileTypeBo;
	private FileDicBo fileDicBo;
	private DataBo dataBo;
	private CacheManage cacheManage;
	private CodeBo codeBo;
	
	private Logger logger =Logger.getLogger(getClass());
	

	public List<Print> queryPrintModels(Print model)
			throws ServerException {
		try {
			return printBo.queryPrintModels(model);
		} catch (BusinessException e) {
			throw new ServerException(e);
		}
	}

	public PrintBo getPrintBo() {
		return printBo;
	}

	public void setPrintBo(PrintBo printBo) {
		this.printBo = printBo;
	}

	public void uploadPrintModel(Map param)
			throws ServerException {
		String path = (String) param.get(Constants.PARAM_PATH);
		String path1 = (String) param.get(Constants.PARAM_PATH);
		String filedata = (String) param.get(Constants.PARAM_FILE_DATA);
		String fileName = (String) param.get(Constants.PARAM_FILE_NAME);
		String id= (String) param.get(Constants.PARAM_ID);
		File file = new File(filedata);
		String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
		String ext=fileName.substring(fileName.lastIndexOf("."));
		String saveName=System.currentTimeMillis()+""+ext;
		String fileName1 = fileName.substring(0,fileName.lastIndexOf("."));
		
		if(!new File(path).exists()){
			new File(path).mkdir();
		}
		path+=File.separator+date;
		path1+=File.separator+date;
		if(!new File(path).exists()){
			new File(path).mkdir();
		}
		
		byte[] by  = new byte[1024*8];
		int len=0;
		try {
			FileOutputStream out = new FileOutputStream(path+File.separator+saveName);
			FileInputStream in = new FileInputStream(file);
			while((len=in.read(by))>=0){
				out.write(by,0,len);
			}
			in.close();
			out.flush();
			out.close();
		} catch (Exception e) {
			throw new ServerException(e);
		}
		file.delete();
		param.put("URL",path1);
		param.put("MODELNAME",fileName1);
		param.put("SAVENAME",saveName);
	}

	public void updatePrint(Print print) throws ServerException {
		try {
			printBo.updatePrint(print);
		} catch (BusinessException e) {
			throw new ServerException(e);
		}
	}

	public List printData(Map<String, String> param) throws ServerException {
		//得到参数,filetypeId,tableFlag,
		String fileTypeId = param.get(Constants.PARAM_FILE_TYPE_ID);
		String tableFlag = param.get(Constants.PARAM_TABLE_FLAG);
		String oldTableFlag=param.get(Constants.PARAM_TABLE_FLAG);
		String DATATABLEFLAG=param.get("DATATABLEFLAG");  //数据TableFlag
		if("AJ,JN".equals(tableFlag)){ //如果是AJ+JN==JN
			tableFlag="JN";
		}
		//得到参数 PageInfo
		String pageInfo = param.get(Constants.PARAM_PAGE_INFO);
		//查询 Print
		String select= param.get("id");
		Print print = new Print();
		print.setId(select);
		print.setStatus(Constants.STATUS_TRUE);
		List<Print> prints  = this.queryPrintModels(print);
		print =prints.get(0);
		Set<String>  existsAddColumns = new HashSet<String>();
		
		//获得 where 条件
		String where="";
		try {
			if(Constants.TABLE_FLAG_JN.equals(tableFlag)){  //是卷内
				param.put("append","a.");
				param.put(Constants.PARAM_TABLE_FLAG,Constants.TABLE_FLAG_AJ);
				param.put("CURRTABLEFLAG",DATATABLEFLAG);
				String ajWHere=fileDicBo.toChSqlByPageInfo(pageInfo, param);
				
				param.put("append","j.");
				param.put(Constants.PARAM_TABLE_FLAG,Constants.TABLE_FLAG_JN);
				String jnWHere=fileDicBo.toChSqlByPageInfo(pageInfo, param);
				
				where=ajWHere+jnWHere;
			}else{
				param.put("CURRTABLEFLAG",DATATABLEFLAG);
				where=fileDicBo.toChSqlByPageInfo(pageInfo, param);
			}
		} catch (BusinessException e1) {
			throw new ServerException(e1);
		}
		//得到门类对应的字段
		FileDic fileDic = new FileDic();
		fileDic.setFileTypeId(fileTypeId);
		fileDic.setTableFlag(tableFlag);
		fileDic.setStatus(Constants.STATUS_TRUE);
		fileDic.setOrderByString("columnOrder");
		List<FileDic> dataSourceList= new ArrayList<FileDic>();
		try {
			List<FileDic> fileDics  = fileDicBo.queryFileDic(fileDic);
			
			//拼接列。
			Map<String,String> columnMap = new HashMap<String, String>();  //列Map		<columnChName,columnName>
			String tableName =fileTypeBo.getTableName(fileTypeId, tableFlag);
			StringBuffer fieldBuss = new StringBuffer("");					//字段 id,ninadu
			Map<String,String> colMap = new HashMap<String, String>();		//<columnName,columnChName>
			for (Iterator iterator = fileDics.iterator(); iterator.hasNext();) {
				fileDic = (FileDic) iterator.next();
				if(fieldBuss.length()>0){
					fieldBuss.append(",");
				}
				if(Constants.TABLE_FLAG_JN.equals(tableFlag)){  //是卷内
					fieldBuss.append("j.");
					existsAddColumns.add("j."+fileDic.getColumnName());
				}else{
					existsAddColumns.add(fileDic.getColumnName());
				}
				fieldBuss.append(fileDic.getColumnName());
				colMap.put(StringUtil.getNotNullString(fileDic.getColumnName()).toUpperCase(),fileDic.getColumnChName());
				if(Constants.TABLE_FLAG_JN.equals(tableFlag)){  //是卷内
					columnMap.put(fileDic.getColumnChName(),"j."+fileDic.getColumnName());
				}else{
					columnMap.put(fileDic.getColumnChName(),fileDic.getColumnName());
				}
				if(!Constants.FILE_DIC_DATA_TYPE_DATE.equals(fileDic.getColDataInputType()) && !Constants.FILE_DIC_DATA_TYPE_REMARK.equals(fileDic.getColDataInputType())  && (Constants.FILE_DIC_INPUT_TYPE_select.equals(fileDic.getInputType()) || Constants.FILE_DIC_INPUT_TYPE_inSe.equals(fileDic.getInputType())) && !StringUtil.isEmptyString(fileDic.getDataSource())){  //如是日期和备注类型。 且是下拉框的 且DataSource不是空
					dataSourceList.add(fileDic);
				}
			}
			
			//是卷内
			if(Constants.TABLE_FLAG_JN.equals(tableFlag)){  		
				fileDic= new FileDic();
				fileDic.setFileTypeId(fileTypeId);
				fileDic.setTableFlag(Constants.TABLE_FLAG_AJ);
				fileDic.setStatus(Constants.STATUS_TRUE);
				fileDic.setOrderByString("columnOrder");
				List<FileDic> fileDics2 = fileDicBo.queryFileDic(fileDic);
				for (Iterator iterator = fileDics2.iterator(); iterator.hasNext();) {
					 fileDic = (FileDic) iterator.next();
					 columnMap.put(fileDic.getColumnChName(),"a."+fileDic.getColumnName());
					 colMap.put(StringUtil.getNotNullString(fileDic.getColumnName()).toUpperCase(),fileDic.getColumnChName());
					 if("AJ,JN".equals(oldTableFlag)){
						 	if(fieldBuss.length()>0){
								fieldBuss.append(",");
							}
							fieldBuss.append("a."+fileDic.getColumnName());
							existsAddColumns.add("a."+fileDic.getColumnName());
							
							if(!Constants.FILE_DIC_DATA_TYPE_DATE.equals(fileDic.getColDataInputType()) && !Constants.FILE_DIC_DATA_TYPE_REMARK.equals(fileDic.getColDataInputType())  && (Constants.FILE_DIC_INPUT_TYPE_select.equals(fileDic.getInputType()) || Constants.FILE_DIC_INPUT_TYPE_inSe.equals(fileDic.getInputType())) && !StringUtil.isEmptyString(fileDic.getDataSource())){  //如是日期和备注类型。 且是下拉框的 且DataSource不是空
								dataSourceList.add(fileDic);
							}
					 }
				}
				 //如果是卷内且     是否分组
				if(Constants.STATUS_TRUE.equals(print.getGroupBy())){ 
					String[] fileds=print.getGroupField().split(",");
					for (int j = 0; j < fileds.length; j++) {
						String string=columnMap.get(fileds[j]);
						if(string!=null){
							if(!existsAddColumns.contains(string)){
								if(fieldBuss.length()>0){
									fieldBuss.append(",");
								}
								fieldBuss.append(string);
								existsAddColumns.add(string);
							}
						}
					}
				}
			}
			
			
			//循环获得列  排序
			StringBuffer order =new StringBuffer("");
			if(!StringUtil.isEmptyString(print.getOrderString())){
				String[] arr =print.getOrderString().split(",");
				for (int i = 0; i < arr.length; i++) {
					String[] ar=arr[i].split("-");
					if(ar.length>=0){
						boolean bool=false;
						String str=StringUtil.getNotNullString(columnMap.get(ar[0]));
						if(str.length()>0){
							bool=true;
							if(order.length()>0){
								order.append(",");
							}
						}
						if(bool && !existsAddColumns.contains(str)){
							existsAddColumns.add(str);
							if(fieldBuss.length()>0){
								fieldBuss.append(",");
							}
							fieldBuss.append(str);
						}
						if(bool && ar.length>2){
							if("1".equals(ar[2])){
								order.append(" "+printBo.getDbNumberFunction(str));
							}else{
								order.append(" "+str);
							}
							order.append(" "+ar[1]);
						}else if(bool && ar.length>1){
							order.append(" "+str);
							order.append(" "+ar[1]);
						}
					}else{
						order.append(StringUtil.getNotNullString(columnMap.get(arr[i])));
					}
				}
			}
			
			//生成 Data 对象,和  设置表 名, 条件 ,排序
			Data data  =new Data();
			data.setColumns(fieldBuss.toString());
			if(Constants.TABLE_FLAG_JN.equals(tableFlag)){  //是卷内
				String ajTableName=fileTypeBo.getTableName(fileTypeId, Constants.TABLE_FLAG_AJ);
				data.setTableName(tableName+" j left join "+ajTableName+" a on j.AJID=a.id ");
				data.setWhere(where+StringUtil.getPageInfoSql("j.STATUS@@1@@2@_@a.STATUS@@1@@2@_@"));
			}else{
				data.setTableName(tableName);
				data.setWhere(where+StringUtil.getPageInfoSql("STATUS@@1@@2@_@"));
			}
			data.setOrderString(order.toString());
			
			//查询数据结果
			List<Map<String,String>>  maps = dataBo.queryNotPageDataList(data);
			//真正的返回数据List
			List result  = new ArrayList ();
			
			//是否拆分行
			Map<String,String[]> splitMap = new HashMap<String, String[]>();   //splitMap
			if(Constants.STATUS_TRUE.equals(print.getIsSplit())){
				String splitString=StringUtil.getNotNullString(print.getSplitString());
				String[] arr=splitString.split("@_@");
				if(arr!=null){
					for (int i = 0; i < arr.length; i++) {
						if(StringUtil.isEmptyString(arr[i])){
							continue;
						}
						String[] ar=arr[i].split("@,@");
						if(ar!=null && ar.length>1 && StringUtil.isNumeric(ar[1]) && !"0".equals(ar[1])){
							splitMap.put(ar[0],ar);
						}
					}
				}
			}  //end
			
			//不分组数据
			if(!Constants.STATUS_TRUE.equals(print.getGroupBy())){  
				printNotGroup(dataSourceList, colMap, maps, result,columnMap,print,splitMap,fileTypeId);
			}else{	
				//分组数据
				printGroup(print, dataSourceList, columnMap, colMap, maps, result,splitMap);
			}
			return result;
		} catch (BusinessException e) {
			throw new ServerException("printGDWJML()",e);
		}
	}
	
	/*不分组*/
	private void printNotGroup(List<FileDic> dataSourceList,Map<String, String> colMap, List<Map<String, String>> maps,	List result,Map<String,String> columnMap,Print print,Map<String,String[]> splitMap,String fileTypeId) throws ServerException {
		FileType fileType=null;
		try {
			fileType=fileTypeBo.queryFileTypeById(fileTypeId);
		} catch (BusinessException e1) {
			throw new ServerException(e1);
		}
			
		Map<String,Map<String, Code>> allCodeMap = new HashMap<String, Map<String,Code>>();  //全部AllCode
			int index=0;
			int dataSourceSize=dataSourceList.size();
			for (Iterator iterator = maps.iterator(); iterator.hasNext();) {
				index++;
				Map<String,String> map = (Map<String, String>) iterator.next();
				Map<String,String> map2 = new HashMap<String, String>();
				map2.put("序号_1",index+"");
				map2.put("门类名称",fileType.getChname());
				for (Iterator iterator2 = map.keySet().iterator(); iterator2
						.hasNext();) {
					String key = (String) iterator2.next();
					boolean start=false;
					if(dataSourceSize>0 && !start){
						start=true;
							for (Iterator iterator3 = dataSourceList.iterator(); iterator3.hasNext();) {
								FileDic dataSourceFileDic = (FileDic) iterator3.next();
								if(key.equals(dataSourceFileDic.getColumnName())){
									Map<String, Code> codeMap=allCodeMap.get(dataSourceFileDic.getDataSource());
									try {
										if(codeMap==null){
											codeMap = codeBo.queryCodeValMapByType(dataSourceFileDic.getDataSource());
											allCodeMap.put(dataSourceFileDic.getDataSource(),codeMap);
										}
									} catch (BusinessException e) {
										throw new ServerException(e);
									}
										String value=map.get(key);
										if(codeMap!=null && codeMap.get(value)!=null && Constants.STATUS_TRUE.equals(codeMap.get(value).getStatus())){
											map2.put(colMap.get(key)+"_1",value);
											map.put(key,codeMap.get(value).getCodeKey());
										}
								}
							}
					}
					String value=map.get(key);
					map2.put(colMap.get(key),value);
				}
				result.add(map2);
			}
	}

	/*分组*/
	private void printGroup(Print print, List<FileDic> dataSourceList,Map<String, String> columnMap, Map<String, String> colMap,List<Map<String, String>> maps, List result,Map<String,String[]> splitMap) throws ServerException {
			String[] fileds=print.getGroupField().split(",");
			List<String> groupFileDicList = new ArrayList<String>();
			for (int j = 0; j < fileds.length; j++) {
				String string=columnMap.get(fileds[j]);
				if(string!=null){
					groupFileDicList.add(string);
				}
			}
			List<String> keyList = new ArrayList<String>();
			Map<String,List<Map<String,String>>> dataMap = new HashMap<String, List<Map<String,String>>>();
			
			for (Iterator iterator = maps.iterator(); iterator.hasNext();) {
				Map<String,String> map = (Map<String, String>) iterator.next();
				/*Map<String,String> map2 = new HashMap<String, String>();
				for (Iterator iterator2 = map.keySet().iterator(); iterator2.hasNext();) {
					String key = (String) iterator2.next();
					map2.put(colMap.get(key),map.get(key));
				}
				result.add(map2);*/
				StringBuffer strKey=new StringBuffer("");
				for (Iterator iterator2 = groupFileDicList.iterator(); iterator2.hasNext();) {
					String groupFieldStr = (String) iterator2.next();
					if(groupFieldStr.indexOf(".")>=0){
						groupFieldStr=groupFieldStr.substring(groupFieldStr.indexOf(".")+1);
					}
					String value=StringUtil.getNotNullString(map.get(groupFieldStr));
					if(!StringUtil.isEmptyString(value)){
						strKey.append(value);
					}
				}
				List<Map<String,String>> rowList=dataMap.get(strKey.toString());
				if(rowList==null){
					rowList =new ArrayList<Map<String,String>>();
					dataMap.put(strKey.toString(),rowList);
				}
				if(!keyList.contains(strKey.toString())){
					keyList.add(strKey.toString());
				}
				rowList.add(map);
			}
			int index=0;
			int indexId=0;
			boolean isSplitNext=splitMap.size()>0?true:false;  //是否有下一个 拆分行
			List<Map<String,String>> newAddList = null; //拆分行 List
			if(isSplitNext){
				newAddList =  new ArrayList<Map<String,String>>();
			}
			Map<String,Map<String, Code>> allCodeMap = new HashMap<String, Map<String,Code>>();  //全部CODEMAP
			for (Iterator iterator = keyList.iterator(); iterator.hasNext();) {		//Key s
				String key = (String) iterator.next();
				index=0;
				indexId=0;
				List<Map<String,String>>  listMap = dataMap.get(key);    //得到每一组数据
				int groupIndex=0; //每组的下标
				Map<String,String> groupTop1Map =null; //分组的第一个Map<String,String>
				int dataSourceSize=dataSourceList.size();
				for (Iterator iterator2 = listMap.iterator(); iterator2.hasNext();) {   // get(key)
					Map<String, String> map = (Map<String, String>) iterator2.next();   //  old Row
					Map<String,String> map2 = new HashMap<String, String>();			//new Row
					groupIndex++;
					if(groupIndex==1){ //如果是分组的第一个就把这个句本给保存起来。
						groupTop1Map=map2;
					}
					map2.put("序号_1",(indexId+1)+"");
					for (Iterator iterator4 = map.keySet().iterator(); iterator4.hasNext();) {	// for  TD
						String kyes = (String) iterator4.next();
						boolean start=false;
						if(dataSourceSize>0 && !start){
							start=true;
								for (Iterator iterator3 = dataSourceList.iterator(); iterator3.hasNext();) {
									FileDic dataSourceFileDic = (FileDic) iterator3.next();
									if(kyes.equals(dataSourceFileDic.getColumnName())){
										Map<String, Code> codeMap=allCodeMap.get(dataSourceFileDic.getDataSource());
										try {
											if(codeMap==null){
												codeMap = codeBo.queryCodeValMapByType(dataSourceFileDic.getDataSource());
												allCodeMap.put(dataSourceFileDic.getDataSource(),codeMap);
											}
										} catch (BusinessException e) {
											throw new ServerException(e);
										}
										String value=map.get(kyes);
										if(codeMap!=null && codeMap.get(value)!=null && Constants.STATUS_TRUE.equals(codeMap.get(value).getStatus())){
											String abc=codeMap.get(value).getCodeKey();
											map2.put(colMap.get(kyes)+"_1",abc);
											map.put(kyes,abc);
										}
									}
								}
						}
						String value=map.get(kyes);
						map2.put(colMap.get(kyes),value);
					}
					result.add(map2);
					if(isSplitNext){  //拆分行  split row
						List<Map<String,String>> tempResultList = new ArrayList<Map<String,String>>();		//table 装行
						for (Iterator iterator3 = splitMap.keySet().iterator(); iterator3.hasNext();) {
							try {

								String splitKey = (String) iterator3.next();
								String[] paramArr=splitMap.get(splitKey);
								int leng=Integer.parseInt(paramArr[1]);
								String val=StringUtil.getNotNullString(map2.get(splitKey));
								if(paramArr.length==3 && val.length()>0){   //判断是否有拆分的字符串 比如[
									int cuIndex=val.indexOf(paramArr[2]);   
									if(cuIndex>0){  //>0
										String temp=val.substring(0,cuIndex);
										StringBuffer  buff= new StringBuffer(temp);
										int tempLength=StringUtil.getCodeLen(temp);
										for (int i = tempLength; i < leng; i++) {
											buff.append(" ");
										}
										buff.append(val.substring(cuIndex));
										val=buff.toString();
									}
								}
								if(StringUtil.getCodeLen(val)>leng){
									String val1=StringUtil.subStringCode(val,0,leng);			//原来数据
									String newSTr=StringUtil.subStringCode(val,leng+1);		//后面的数据
									int newLen=StringUtil.getCodeLen(newSTr);
									int size=newLen/leng;				//后面的数据的长度
									if(newLen%leng!=0){
										size++;
									}
									if(tempResultList.size()<size){		//判定有几行 就添加几个
										for (int i = tempResultList.size(); i <size; i++) {
											Map<String,String> tempMap=new HashMap<String, String>();
											tempMap.put("序号_2",""+(index+i+1));
											tempResultList.add(tempMap);
										}
									}
									map2.put(splitKey,val1);  //重新赋值
									int start=0;
									int end=0;
									for (int i = 0; i <size; i++) {
										Map<String,String> tempDataMap=null;
										if(tempResultList.size()>i){
											tempDataMap=tempResultList.get(i);
										}
										if(tempDataMap!=null){
											end+=leng;
											if(end>newLen){
												end=newLen;
											}
											String tempVal=StringUtil.subStringCode(newSTr,start,end);
											tempDataMap.put(splitKey,tempVal);    //赋值
											start=end;
										}
									}
								}
							} catch (Exception e) {
								e.printStackTrace();
								throw new ServerException(e);
							}
						}
						if(tempResultList.size()>0){	//判定》0 就添加
							result.addAll(tempResultList);
							index+=tempResultList.size();
							newAddList.addAll(tempResultList);
						}
					}
					index++;
					indexId++;
					
					
					
					
					
					
					//给每一条增加分页
					int pageSize=Integer.parseInt(print.getPageSize());
					int pageCont=listMap.size()/pageSize;
					if(listMap.size()%pageSize!=0){
						pageCont++;
					}
					map2.put("总页数_1",pageCont+"");
					
					pageCont=index/pageSize;
					if(index%pageSize!=0){
						pageCont++;
					}
					map2.put("当前页数_1",pageCont+"");
					//end
				}
				if(Constants.STATUS_TRUE.equals(print.getIsjoinTop1())){  //分组数据最后一条是否连接第一个条数据
					[p]int len=result.size();
					if(len>0 && groupTop1Map!=null){
						Map<String,String> map = (Map<String, String>) result.get(len-1);  //得到最后一个
						Map<String,String> tempMap=new HashMap<String,String>(groupTop1Map);
						Iterator iterator2 = tempMap.keySet().iterator();
						for (; iterator2.hasNext();) {
							String top1Key = (String) iterator2.next();
							map.put(top1Key+"_TOP1",groupTop1Map.get(top1Key));
						}
					}
					[/p]
				}
				
				//给拆分行的添加分页
				if(isSplitNext){
					int maxSize=listMap.size()+newAddList.size();
					int pageSize=Integer.parseInt(print.getPageSize());
					for (Iterator iterator11 = newAddList.iterator(); iterator.hasNext();) {
						Map<String, String> map = (Map<String, String>) iterator11.next();
						int tempIndex=Integer.parseInt(map.get("序号_2"));
						int pageCont=maxSize/pageSize;
						if(maxSize%pageSize!=0){
							pageCont++;
						}
						map.put("总页数_1",pageCont+"");
						
						pageCont=tempIndex/pageSize;
						if(tempIndex%pageSize!=0){
							pageCont++;
						}
						map.put("当前页数_1",pageCont+"");
					}
				}
				

				//给不足的行添加空格。
				int pageSize=Integer.parseInt(print.getPageSize());
				int pageCont=index/pageSize;
				if(index%pageSize!=0){
					pageCont++;
				}
				for(int i=index;i<(pageCont*pageSize);i++){
					Map map2= new HashMap();
					map2.put("总页数_1",pageCont+"");
					result.add(map2);
					
					pageCont=i/pageSize;
					if(i%pageSize!=0){
						pageCont++;
					}
					map2.put("当前页数_1",pageCont+"");
				}
			}
			
			
	}

	public FileTypeBo getFileTypeBo() {
		return fileTypeBo;
	}

	public void setFileTypeBo(FileTypeBo fileTypeBo) {
		this.fileTypeBo = fileTypeBo;
	}

	

	public FileDicBo getFileDicBo() {
		return fileDicBo;
	}

	public void setFileDicBo(FileDicBo fileDicBo) {
		this.fileDicBo = fileDicBo;
	}

	public DataBo getDataBo() {
		return dataBo;
	}

	public void setDataBo(DataBo dataBo) {
		this.dataBo = dataBo;
	}

	public void insertPrint(Print print) throws ServerException {
		try {
			printBo.insertPrint(print);
		} catch (BusinessException e) {
			throw new ServerException(e);
		}
	}

	public CacheManage getCacheManage() {
		return cacheManage;
	}

	public void setCacheManage(CacheManage cacheManage) {
		this.cacheManage = cacheManage;
	}

	public String getDbNumberFunction(String str) throws ServerException {
		try {
			return printBo.getDbNumberFunction(str);
		} catch (BusinessException e) {
			throw new ServerException(e);
		}
	}

	public CodeBo getCodeBo() {
		return codeBo;
	}

	public void setCodeBo(CodeBo codeBo) {
		this.codeBo = codeBo;
	}

	public Logger getLogger() {
		return logger;
	}

	public void setLogger(Logger logger) {
		this.logger = logger;
	}

	public String getDb() throws ServerException {
		try {
			return printBo.getDb();
		} catch (BusinessException e) {
			throw new ServerException(e);
		}
	}


	
	

}

分享到:
评论

相关推荐

    JAVA.BUG模式详解

    这是Java中最常见的错误之一,当尝试访问一个为null的对象的成员时,程序会抛出此异常。避免这种问题的方法是始终确保对象在使用前已经被初始化,或者在访问其成员之前进行非null检查。 二、数组越界异常...

    详解Java 集合类 List 的那些坑

    Arrays.asList 方法返回的 List 并不是我们常用的 java.util.ArrayList,而是 Arrays 的静态内部类 java.util.Arrays.ArrayList,该类继承自抽象类 java.util.AbstractList,但没有实现 add 方法,默认抛出 java....

    Java开发规约.rar

    - 避免过度使用`synchronized`,考虑使用`java.util.concurrent`包中的并发工具类。 6. **集合操作** - 尽量使用`foreach`循环遍历集合,避免索引操作。 - 避免使用`Collection.remove()`操作,因其可能抛出`...

    Java开发人员最常犯的10个错误

    这个方法返回的是`java.util.Arrays.ArrayList`,它是一个固定大小的列表,不支持添加元素。正确做法是使用`ArrayList`的构造函数,如`ArrayList&lt;String&gt; arrayList = new ArrayList(Arrays.asList(arr));`来创建一...

    北京市城-郊梯度森林表土碳组分及其影响因素数据集(2019)

    作者于2019年6月下旬至7月初,从北京市中心(紫禁城)到郊区设置了4条不同走向(东北、西北、西南和正南)的城—郊梯度样带;随机选取了20个独立的城市森林公园进行采样。每个公园选择3块典型森林斑块,采集表层(0-10 cm)和亚表层(10-20 cm)土壤样品,并测定了土壤总碳含量、土壤有机碳含量、颗粒态有机碳和矿物结合态有机碳含量。该数据集内容包括:(1)样点位置数据;(2)研究区森林表土总碳、总有机碳、总无机碳、颗粒态有机碳和矿物结合态有机碳含量;(3)森林表土碳组分含量与不同影响因素数据,包括:土壤数据(土壤pH、土壤粘粉粒含量)、植被数据(植被覆盖度、公园年龄、树种多样性)、气候数据(年均温、年降水量)。数据集存储为.shp和.xlsx格式,由8个数据文件组成,数据量为30.7 KB(压缩为1个文件,27 KB)。田越韩, 郭泓伯, 高晓飞等. 北京森林表土碳组分城郊梯度变化及其影响因素[J]. 地理学报, 2024, 79(1): 206-217. DOI: 10.11821/dlxb202401013.

    USB转串口模块:CH340与FT232双选,61*35mm尺寸,原理图&PCB版

    内容概要:本文详细介绍了集成CH340和FT232两款芯片的USB转串口模块的设计与应用。该模块尺寸为61x35mm,采用跳线帽进行芯片切换,支持多种接口(USB-A公头、Mini USB母座)和电源输出(5V和3.3V)。文中探讨了硬件配置、电源设计、信号切换电路以及PCB布局等方面的细节,并提供了Python、Arduino和Linux下的代码示例来展示不同场景下的使用方法。此外,还分享了一些实际项目中的经验和注意事项,如波特率适配、电磁兼容性和稳压电路设计等。 适合人群:从事嵌入式系统开发、硬件设计及相关领域的工程师和技术爱好者。 使用场景及目标:适用于需要灵活选择USB转串口芯片的项目,特别是在工业级应用场景中,能够提供稳定的通信解决方案。目标是帮助开发者更好地理解和利用这一模块,提高开发效率和产品质量。 其他说明:文中提到的双芯片设计方案不仅兼顾了成本效益,还能满足不同项目的特定需求。对于初学者来说,可以通过提供的代码示例快速上手;而对于资深工程师,则可以深入研究硬件设计细节,优化现有产品。

    基于水平集进化的轮廓提取MATLAB代码实现及优化策略研究

    内容概要:本文详细探讨了利用MATLAB实现水平集进化进行图像轮廓提取的方法。首先介绍了传统的水平集演化方法存在的问题,如频繁的重新初始化导致计算效率低下和分割精度波动。接着提出了一种改进方案,即在演化方程中引入正则化项来自适应地维护水平集的良好状态,从而避免了显式的重新初始化操作。此外,还讨论了曲率计算方法的优化以及参数选择的影响,并展示了改进前后算法性能的具体对比实验结果。 适合人群:从事图像处理、计算机视觉领域的研究人员和技术开发者,尤其是对水平集方法有一定了解并希望提高其实战应用效果的专业人士。 使用场景及目标:适用于需要精确分割图像中目标对象的应用场合,如医学影像分析(CT、MRI)、遥感图像处理等。主要目的是提升图像分割的速度和准确性,同时降低计算资源消耗。 其他说明:文中提供了多个MATLAB代码片段用于解释各个关键技术点,便于读者理解和实践。对于想要深入了解水平集演化的机制及其优化策略的人来说是非常有价值的参考资料。

    MLP信息熵随深度增加的变化

    MLP信息熵研究完整代码

    西门子S7-200 PLC与触摸屏实现的恒压供水系统全套图纸程序:一拖二与一拖三配置的实践应用

    内容概要:本文详细介绍了基于西门子S7-200 PLC的恒压供水系统的设计与实现。系统采用一拖二或一拖三模式,确保供水系统的可靠性。核心组件包括PLC、富士PID控制模块和ABB变频器,通过精确的压力控制和快速响应,实现了稳定的恒压供水。文中提供了详细的PLC程序示例,涵盖水泵启停控制、PID算法调用以及变频器频率调节等功能。此外,还展示了触摸屏界面设计,用于实时监控和操作。硬件配置方面,强调了柜体制作图纸的重要性和规范性,确保电气接线正确无误。调试过程中,作者分享了许多实用技巧,如PID参数整定、变频器设置和故障切换逻辑等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和恒压供水系统感兴趣的读者。 使用场景及目标:适用于工业现场的恒压供水系统设计与实施,旨在提高供水系统的稳定性和可靠性,减少因设备故障导致的生产中断。 其他说明:本文不仅提供了完整的硬件配置和软件编程指导,还分享了丰富的实战经验和调试技巧,帮助读者更好地理解和应用相关技术。

    恒压供水系统:西门子224xp PLC与ABB变频器一拖二(一对一变频)控制系统

    内容概要:本文详细介绍了基于西门子224XP PLC和ABB ACS510变频器的一对一变频恒压供水系统的设计与实现。系统旨在保持管网压力恒定,确保用户在不同用水需求下获得稳定水压。硬件配置包括西门子S7-224XP PLC、ABB ACS510变频器以及昆仑通态触摸屏。系统采用双PID控制策略,分为低频段和高频段控制,以提高响应速度和稳定性。此外,通过合理的逻辑设计实现了变频器之间的无缝切换,确保压力波动最小。实际应用案例表明,该系统显著减少了压力波动,降低了能耗,提升了用户满意度。 适合人群:从事工业自动化领域的工程师和技术人员,特别是对PLC编程和变频器配置有一定经验的人群。 使用场景及目标:适用于需要恒压供水的高层建筑、住宅小区等场所,目标是实现高效的水资源管理和节能降耗。 其他说明:文中还分享了一些调试技巧和注意事项,如变频器参数配置、PID参数调整、模拟量输出切换逻辑等,有助于实际项目的顺利实施。

    KepWare与HMI的OPC连接通信:解决老PLC与新触摸屏连接难题的案例程序

    内容概要:本文详细介绍了如何利用OPC技术和KepWare软件解决老PLC与新触摸屏之间的连接问题。首先解释了OPC的作用及其工作机制,接着阐述了KepWare作为OPC服务器的功能和配置方法,包括添加设备驱动、配置参数以及创建标签。随后展示了具体的案例程序,如配置Modbus TCP通道、定义标签并进行数据转换,以及在HMI端使用VB脚本、C#代码等实现与KepWare的连接和数据交互。此外,文中还提供了关于优化性能、处理常见错误和故障排查的方法,如调整超时时间、设置心跳检测机制等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是需要解决老旧设备与现代控制系统兼容性的相关人员。 使用场景及目标:适用于需要将传统PLC集成到现代化HMI系统的场合,旨在确保不同年代、不同品牌的工业设备能够稳定可靠地相互通信,提高生产效率和维护便利性。 其他说明:文中不仅提供了详细的理论讲解,还有丰富的实战经验和技巧分享,帮助读者快速掌握相关技能并在实际工作中应用。

    MATLAB SIFT特征追踪

    内容概要:本文详细介绍了利用MATLAB实现运动目标检测与追踪的方法。首先通过三帧差分法初步锁定运动目标,接着使用SIFT(尺度不变特征变换)算法稳定特征点,最后借助Meanshift算法进行持续追踪。文中不仅提供了具体的MATLAB代码实现,还讨论了各步骤的技术要点,如特征匹配、几何校验、核密度估计等。此外,针对可能出现的问题提出了优化措施,例如状态机模式下重新触发检测、SIFT特征定期更新以及自适应融合策略的应用。 适合人群:具有一定MATLAB编程基础的研究人员和技术爱好者,尤其是从事计算机视觉、图像处理领域的从业者。 使用场景及目标:适用于需要精确捕捉和跟踪视频序列中特定对象的应用场合,如安防监控、智能交通、机器人导航等领域。主要目的是提高目标检测的准确性和追踪的稳定性。 其他说明:文中提到的技术组合能够有效应对复杂环境下的目标追踪挑战,但在颜色突变场景中表现不佳。建议根据具体应用场景选择合适的算法组合,并考虑硬件配置的影响。

    LabView源码实现与FX5U以太网通讯,支持PLC读写多个元件,包括X、Y、M、S、D等,便捷应用于项目实战。

    内容概要:本文详细介绍了如何利用LabVIEW与三菱FX5U PLC进行以太网通讯的方法。首先,文中讲解了FX5U的以太网配置步骤,包括设置静态IP地址、开放TCP端口以及启用MC协议。接着,重点阐述了LabVIEW中TCP通信节点的应用,特别是针对不同类型的寄存器(X/Y/M/D)的读写操作,提供了具体的报文结构和LabVIEW代码实现方法。此外,文章还讨论了一些常见的实操注意事项,如字节序处理、批量读写的限制、通讯延时等,并分享了作者在实际项目中的经验教训。最后,给出了完整的源码链接,方便读者直接应用于工程项目中。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是熟悉LabVIEW和三菱PLC的用户。 使用场景及目标:适用于需要将LabVIEW与三菱FX5U PLC集成的工业控制系统开发,旨在提高系统的可靠性和效率,减少调试时间和成本。 其他说明:文中提供的解决方案已经在多个实际项目中得到验证,性能稳定,能够满足大多数工业应用场景的需求。

    21世纪的网络会计.docx

    21世纪的网络会计.docx

    昆仑通态(MCGS)样板程序:历史实时功能与多种应用场景的集成

    内容概要:本文详细介绍了昆仑通态MCGS组态软件的各种样板程序及其应用场景,旨在帮助开发者高效利用这些预构建模块进行工业自动化项目的开发。文中涵盖了多个关键技术点,如报表生成功能、动画配置、Modbus通信、U盘导出、PID控制、数据记录与转发、报警处理以及配方管理等。每个部分不仅提供了具体的代码示例,还分享了许多基于实际项目经验的技术细节和优化建议。 适合人群:从事工业自动化控制系统开发的技术人员,尤其是具有一定编程基础并对MCGS有一定了解的研发人员。 使用场景及目标:适用于各类工业现场的自动化控制系统开发,如污水处理厂、泵站、锅炉房等。主要目标是通过使用MCGS提供的样板程序,快速搭建稳定可靠的自动化控制系统,缩短开发周期,提高工作效率。 其他说明:文章强调了理解和灵活运用这些样板程序的重要性,指出在具体应用中需要根据实际情况调整参数和组合方式,以满足特定的需求。此外,作者还分享了一些个人经验和教训,使读者能够更好地规避常见错误和技术陷阱。

    西门子1200PLC大型项目包膜机程序参考指南

    内容概要:本文详细介绍了西门子1200PLC在一个大型包膜机项目中的应用,涵盖通讯架构、伺服控制、故障处理等多个方面。该项目涉及5台S7-1200和1台S7-1500组成分布式控制系统,通过Profinet、ModbusRTU等多种通讯协议实现设备间高效协同。伺服控制部分展示了复杂的轴控制逻辑,利用PTO控制20多个伺服轴,确保精确运动。故障处理逻辑则体现了高度的容错性和智能化,如自动切换备用传感器、尝试多次复位等。此外,触摸屏程序集成了机械结构图和3D动画,提供直观的操作和故障诊断体验。 适合人群:从事工业自动化、PLC编程、机电一体化等相关工作的工程师和技术人员。 使用场景及目标:适用于新能源行业的自动化生产线设计与实施,旨在提高生产效率、降低故障率并优化人机交互体验。 其他说明:文中提供了大量实际案例和代码片段,帮助读者深入理解各个技术细节。同时强调了项目中的实战经验和创新解决方案,对未来的多PLC项目具有重要的参考价值。

    基于FPGA的永磁同步电机FOC控制策略与PMSM三环控制策略的电子资料详解

    内容概要:本文详细介绍了利用FPGA实现永磁同步电机(PMSM)的磁场定向控制(FOC),重点探讨了三环控制系统(电流环、速度环、位置环)的设计与实现。文章首先阐述了电流环的高效并行处理方法,通过Verilog代码展示了电流采样的并行处理和坐标变换。接着讨论了速度环和位置环的配合,特别是在FPGA中使用Cordic算法进行位置估算的方法。文中还提到了双闭环切换时的抖振问题解决办法以及FPGA与STM32的对比,强调了FPGA在并行处理和实时性方面的优势。此外,文章涉及了SVPWM生成、编码器信号处理、异构系统时钟同步等问题,并分享了一些实际调试经验和技巧。 适合人群:从事电机控制研究的技术人员,尤其是对FPGA和永磁同步电机有兴趣的研发人员。 使用场景及目标:适用于希望深入了解FPGA在电机控制领域的应用,掌握FOC控制原理和技术细节的人群。目标是提高对复杂电机控制系统的理解和实现能力。 其他说明:文章不仅提供了理论知识,还包括了大量的代码实例和实践经验,有助于读者更好地理解和应用相关技术。

    BIM项目管理应用与项目管理.docx

    BIM项目管理应用与项目管理.docx

    2023年软件测试外包揭秘我是一个二手的程序员ITeye技术网站.doc

    2023年软件测试外包揭秘我是一个二手的程序员ITeye技术网站.doc

    【发表技术博客题目】30KW三相PFC程序,详解500~1000Vdc 0~60A的充电桩设计及实测结果

    内容概要:本文深入探讨了一款30kW三相PFC充电桩的技术细节,涵盖从硬件设计到软件实现的各个方面。首先介绍了完整的文件资料,包括Altium Designer原理图、BOM表、CCS工程项目文件及详细的测试报告。接着详细解析了主电路采用的T型三相维也纳结构及其优势。重点讨论了主控芯片TMS320F28069的特点,尤其是其32位浮点运算能力和CLA协处理器的作用。随后阐述了关键算法,如正负序分离锁相环算法、三相DQ变换和中点平衡控制的具体实现方法。最后分享了一些实战经验和注意事项,强调了硬件设计对软件性能的影响。 适合人群:从事电力电子、嵌入式系统开发的专业人士,尤其是对大功率充电设备感兴趣的工程师和技术爱好者。 使用场景及目标:适用于希望深入了解30kW三相PFC充电桩设计原理的研发团队,旨在帮助他们掌握从硬件搭建到软件编程的关键技术和最佳实践。 其他说明:文中提供了大量代码片段和实践经验,有助于读者更好地理解和应用所介绍的技术。同时,强调了硬件与软件协同设计的重要性,为实际项目提供宝贵的参考。

Global site tag (gtag.js) - Google Analytics