數據模型封裝--行列都不固定(java)

 
package ims.sinotrust.bean;

import ims.sinotrust.util.FormatBigDecimal;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import snt.common.dao.base.ICommonDAOService;
import snt.common.web.util.WebUtils;

public class ImportExportBean extends CreditReportViewBean implements Serializable{

	private static final long serialVersionUID = 1L;
	
	private static Log logger = LogFactory.getLog(ReportSummaryBean.class);
	
	// 進口總額
	private List<BigDecimal> showImportTradeSum;
	
	//出口總額
	private List<BigDecimal> showExportTradeSum;
	
	//進出口情況年度
	private List<String> yearOfImportAndExport;
	
	// 主要自營進口地區
	private List<List<String>> importCountryData;
	
	// 主要自營出口地區-戰曉娟修改
	private List<List<String>> exportCountryData;
	
	// Map中存的<商品編碼, 進口商品數據(單位,數據)>
	private Map<String, ImportProduceBean> importProduceMap;
	
	// Map中存的<商品編碼, 出口商品數據(單位,數據)>
	private Map<String, ExportProduceBean> exportProduceMap;
	
	
	
	/**
	 * 進出口情況信息對應的年份
	 * @return
	 */
	private List<String> getYear(){
		if (this.yearOfImportAndExport == null) {
			this.yearOfImportAndExport = new ArrayList<String>();
		}
		return this.yearOfImportAndExport;
	}
	
	@SuppressWarnings("unchecked")
	public void getInportExportYears(ICommonDAOService query, String SBDNum){
		//*******根據進口商品總額 添加 年度************
		String sql = WebUtils.getMessage("sql", "ReportSummaryBean.sql.add17", new Object[]{SBDNum});
		logger.debug("新華信編號:" + SBDNum + " 進出口商品總額&年度: " + sql);
		List<Map> rsIOPro = query.queryForMapList(sql);		
		int rsIOProSize = rsIOPro.size();
		List<BigDecimal> showImportTreeYears = new ArrayList<BigDecimal>();
		List<BigDecimal> showExportTreeYears = new ArrayList<BigDecimal>();
		for (int i = 0; i < rsIOProSize; i++) {
			String year = this.changeType(rsIOPro.get(i).get("years"));
			//進口年數
			BigDecimal imvalue = this.changeTypeForBigDecimal(rsIOPro.get(i).get("ImpValue"));
			//出口
			BigDecimal exvalue = this.changeTypeForBigDecimal(rsIOPro.get(i).get("ExpValue"));
			/*importTreeYears.add(imvalue.add(new BigDecimal("0.5")).subtract(new BigDecimal("1")));
			exportTreeYears.add(exvalue.add(new BigDecimal("0.5")).subtract(new BigDecimal("1")));*/
			showImportTreeYears.add(imvalue.add(new BigDecimal("0.5")).subtract(new BigDecimal("1")));
			showExportTreeYears.add(exvalue.add(new BigDecimal("0.5")).subtract(new BigDecimal("1")));
		/*	showImportTreeYears.add(FormatBigDecimal.BigdecimalFormat(imvalue.add(new BigDecimal("0.5")).subtract(new BigDecimal("1"))));
			showExportTreeYears.add(FormatBigDecimal.BigdecimalFormat(exvalue.add(new BigDecimal("0.5")).subtract(new BigDecimal("1"))));*/
			this.getYear().add(year); //添加到年度列表
		}
		this.setShowImportTradeSum(showImportTreeYears);
		this.setShowExportTradeSum(showExportTreeYears);

	}
	
	// ************主要自營進口產品************
	@SuppressWarnings("unchecked")
	public void getImportBean(ICommonDAOService query, String SBDNum){
		this.getInportExportYears(query, SBDNum);		
		String sql = WebUtils.getMessage("sql", "ReportSummaryBean.sql.add1", new Object[]{SBDNum});
		logger.debug("新華信編號:" + SBDNum.toString() + " 主要自營進口產品: " + sql.toString());
		List<Map> rsProIn = query.queryForMapList(sql.toString());
		Map<String, ImportProduceBean> importProduceMap = new LinkedHashMap<String, ImportProduceBean>();
		for (String existentYear : this.getYear()) {
			for (Map map : rsProIn) {
				if (importProduceMap.size() < 3 ) {//只顯示三行數據
					String code = this.changeType(map.get("PRODUCTCODE"));//商品編碼
					String year = this.changeType(map.get("year"));
					if (!existentYear.equalsIgnoreCase(year)) { //如果不是當前所選年度,則繼續找下一條記錄
						continue;
					}
					if(importProduceMap.containsKey(code)){
						ImportProduceBean importProductBean = importProduceMap.get(code);
						String value = FormatBigDecimal.BigdecimalFormat(this.changeTypeForBigDecimal(map.get("TRADEQUANTITY")));									
						importProductBean.setImportproduct(value);
					} else {
						ImportProduceBean importProductBean = new ImportProduceBean();
						String unit = this.changeType(map.get("UNITCNAME"));//商品單位
						String name = this.changeType(map.get("PRODUCTCNAME"));//商品名稱
						String value = FormatBigDecimal.BigdecimalFormat(this.changeTypeForBigDecimal(map.get("TRADEQUANTITY")));
						importProductBean.setUnit(unit);
						importProductBean.setProduceName(name);
						importProductBean.setImportproduct(value);
						importProduceMap.put(code, importProductBean);
					}														
				}
			}
		}	
		// ***********主要自營進口地區****************	
		int index = 0;
		//鍵值 代表爲第i行。
		Map<Integer,Map<String,String>> rowData = new LinkedHashMap<Integer, Map<String,String>>();
		for (String year : this.getYear()) {			
			sql = WebUtils.getMessage("sql", "ReportSummaryBean.sql.add3", new Object[]{SBDNum, year});
			logger.debug("新華信編號:" + SBDNum.toString() + " 主要自營進口地區: " + sql.toString());
			List<Map> rsAreaIn = query.queryForMapList(sql.toString());
			int rsAreaInSize = rsAreaIn.size();
			for (int i = 0; i < rsAreaInSize; i++) {
				String name = this.changeType(rsAreaIn.get(i).get("countryname"));
				String value = this.changeType(rsAreaIn.get(i).get("importvalue"));
				String valueImport =this.changeType(showImportTradeSum.get(index));
				if(value == null || valueImport == null)continue;
				float percentage = Float.valueOf(value) / Float.valueOf(valueImport);				
				String name_value = name+"("+FormatBigDecimal.format(percentage * 100)+"%)";
				if(rowData.get(i) == null){
					Map<String,String> newMap = new LinkedHashMap<String, String>();
					newMap.put(year, name_value);
					rowData.put(i, newMap);
				} else {
					Map<String,String> newMap = rowData.get(i);
					newMap.put(year, name_value);
				}			
			}
			index++;
		}
		//轉化爲頁面更容易的結構
		List<List<String>> data = new ArrayList<List<String>>();
		for(int rowcount: rowData.keySet()){
			//得到第rowcount的數據
			Map<String,String> indexdata =  rowData.get(rowcount);
			//需要進行佔位
			List<String> oneRow = new ArrayList<String>();
			for(int j = 0;j < this.getYear().size();j++){
				//this.getYear().get(j)年的行數爲rowcount的數據
				if(indexdata.get(this.getYear().get(j))==null){
					oneRow.add("--");
				} else{
					oneRow.add(indexdata.get(this.getYear().get(j)));
				}
			}
			data.add(oneRow);
		}
		this.setImportCountryData(data);
		this.setImportProduceMap(importProduceMap);
		this.getExportBean(query, SBDNum);
	}

	// ************主要自營出口產品************
	@SuppressWarnings("unchecked")
	public void getExportBean(ICommonDAOService query, String SBDNum){		
		String sql = WebUtils.getMessage("sql", "ReportSummaryBean.sql.add2", new Object[]{SBDNum});
		logger.debug("新華信編號:" + SBDNum.toString() + " 主要自營出口產品: " + sql.toString());
		List<Map> rsProIn = query.queryForMapList(sql.toString());
		Map<String, ExportProduceBean> exportProduceMap = new LinkedHashMap<String, ExportProduceBean>();
		for (String existentYear : this.getYear()) {
			for (Map map : rsProIn) {
				if (exportProduceMap.size() < 3 ) {//只顯示三行數據
					String code = this.changeType(map.get("PRODUCTCODE"));//商品編碼
					String year = this.changeType(map.get("year"));
					if (!existentYear.equalsIgnoreCase(year)) { //如果不是當前所選年度,則繼續找下一條記錄
						continue;
					}
					if(exportProduceMap.containsKey(code)){
						ExportProduceBean exportProductBean = exportProduceMap.get(code);
						String value = FormatBigDecimal.BigdecimalFormat(this.changeTypeForBigDecimal(map.get("TRADEQUANTITY")));									
						exportProductBean.setExportproduct(value);
					} else {
						ExportProduceBean exportProductBean = new ExportProduceBean();
						String unit = this.changeType(map.get("UNITCNAME"));//商品單位
						String value = FormatBigDecimal.BigdecimalFormat(this.changeTypeForBigDecimal(map.get("TRADEQUANTITY")));
						exportProductBean.setUnit(unit);
						exportProductBean.setExportproduct(value);
						exportProduceMap.put(code, exportProductBean);
					}														
				}
			}
		}
		
		// ***********主要自營出口地區****************	
		
		int index = 0;
		//鍵值 代表爲第i行。
		Map<Integer,Map<String,String>> rowData = new LinkedHashMap<Integer, Map<String,String>>();
		for (String year : this.getYear()) {			
			sql = WebUtils.getMessage("sql", "ReportSummaryBean.sql.add4", new Object[]{SBDNum, year});
			logger.debug("新華信編號:" + SBDNum.toString() + " 主要自營出口地區: " + sql.toString());
			List<Map> rsAreaIn = query.queryForMapList(sql.toString());
			int rsAreaInSize = rsAreaIn.size();
			for (int i = 0; i < rsAreaInSize; i++) {
				String name = this.changeType(rsAreaIn.get(i).get("countryname"));
				String value = this.changeType(rsAreaIn.get(i).get("importvalue"));
				String valueExport =this.changeType(showExportTradeSum.get(index));
				if(value == null || valueExport == null)continue;
				float percentage = Float.valueOf(value) / Float.valueOf(valueExport);				
				String name_value = name+"("+FormatBigDecimal.format(percentage * 100)+"%)";
				if(rowData.get(i) == null){
					Map<String,String> newMap = new LinkedHashMap<String, String>();
					newMap.put(year, name_value);
					rowData.put(i, newMap);
				} else {
					Map<String,String> newMap = rowData.get(i);
					newMap.put(year, name_value);
				}			
			}
			index++;
		}
		//轉化爲頁面更容易的結構
		List<List<String>> data = new ArrayList<List<String>>();
		for(int rowcount: rowData.keySet()){
			//得到第rowcount的數據
			Map<String,String> indexdata =  rowData.get(rowcount);
			//需要進行佔位
			List<String> oneRow = new ArrayList<String>();
			for(int j = 0;j < this.getYear().size();j++){
				//this.getYear().get(j)年的行數爲rowcount的數據
				if(indexdata.get(this.getYear().get(j))==null){
					oneRow.add("--");
				} else{
					oneRow.add(indexdata.get(this.getYear().get(j)));
				}
			}
			data.add(oneRow);
		}
		this.setExportCountryData(data);
		this.setExportProduceMap(exportProduceMap);
	}

	
	//對數字進行格式化
    public List<String> getShowImportTradeSum(){
    	if(showImportTradeSum == null || showImportTradeSum.size() <= 0){
    		return null;
    	} else {
    		List<String> newShowImportTradeSum = new ArrayList<String>();
    		for(BigDecimal cur : showImportTradeSum){
    			newShowImportTradeSum.add(FormatBigDecimal.BigdecimalFormat(cur));
    		}
    		return newShowImportTradeSum;
    	}
    	
    }

	public void setShowImportTradeSum(List<BigDecimal> showImportTradeSum) {
		this.showImportTradeSum = showImportTradeSum;
	}

	public List<String> getShowExportTradeSum() {
	 	if(showExportTradeSum == null || showExportTradeSum.size() <= 0){
    		return null;
    	} else {
    		List<String> newShowExportTradeSum = new ArrayList<String>();
    		for(BigDecimal cur : showExportTradeSum){
    			newShowExportTradeSum.add(FormatBigDecimal.BigdecimalFormat(cur));
    		}
    		return newShowExportTradeSum;
    	}
	}

	public void setShowExportTradeSum(List<BigDecimal> showExportTradeSum) {
		this.showExportTradeSum = showExportTradeSum;
	}


	public List<String> getYearOfImportAndExport() {
		return yearOfImportAndExport;
	}

	public void setYearOfImportAndExport(List<String> yearOfImportAndExport) {
		this.yearOfImportAndExport = yearOfImportAndExport;
	}



	public Map<String, ImportProduceBean> getImportProduceMap() {
		return importProduceMap;
	}

	public void setImportProduceMap(Map<String, ImportProduceBean> importProduceMap) {
		this.importProduceMap = importProduceMap;
	}

	public Map<String, ExportProduceBean> getExportProduceMap() {
		return exportProduceMap;
	}

	public void setExportProduceMap(Map<String, ExportProduceBean> exportProduceMap) {
		this.exportProduceMap = exportProduceMap;
	}

	public List<List<String>> getExportCountryData() {
		return exportCountryData;
	}

	public void setExportCountryData(List<List<String>> exportCountryData) {
		this.exportCountryData = exportCountryData;
	}

	public List<List<String>> getImportCountryData() {
		return importCountryData;
	}

	public void setImportCountryData(List<List<String>> importCountryData) {
		this.importCountryData = importCountryData;
	}


	
	
	
}


public class ImportProduceBean {
	
	private String unit;//單位
	private String produceName;// 商品名稱
	
	private List<String> importproduct = new ArrayList<String>();//年度進口產品數據
	


	public String getUnit() {
		return unit;
	}

	public void setUnit(String unit) {
		this.unit = unit;
	}

	public List<String> getImportproduct() {
		return importproduct;
	}

	public void setImportproduct(String value) {
		this.importproduct.add(value);
	}

	public String getProduceName() {
		return produceName;
	}

	public void setProduceName(String produceName) {
		this.produceName = produceName;
	}
	
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章