Js中使用mmGrid+mmPaginator根据查询条件动态生成表头并展示数据

mmGrid+mmPaginator下载

需求描述:

  查询列表以季度为单位显示,可根据查询条件的费用起期、费用止期动态加列。出现不足一个季度的情况,显示不足一个季度的费用起期、费用止期
例如:查询区间的费用起期是2020/1/1,费用止期是2021/2/28,则查询列表应显示2020年一季度、2020年二季度、2020年三季度、2020年四季度、2021/1/1-2021/2/28五列信息。

请添加图片描述


需求分析

  对于系统现有功能,因为还未出现过这种场景,因此本需求为首次需求。
  首先对于列表的表头列,目前是默认写死的,即首先定义好列表的表头列都有哪些值,然后查询出数据后直接就填充上了。
  然后需要对这种模式调整;思路有两种:
  一是,在初始化列表前,先去后端根据费用起期、费用止期把数据查一遍,然后根据返回结果进行动态初始化列表的表头列,然后初始化列表后,需要再去后端查询一遍数据,多次和后端交互,时间上比较耗时。
  二是,在前端的js中,根据查询条件的费用起期、费用止期,生成动态季度列,然后直接初始化列表的表头列,然后去后端查询数据,这种比较方便一些。

经考虑,选择第二种方式进行完成


思路剖析

先上一个图,此图是在分析需求过程中得出的思路
在这里插入图片描述
  分两种情况,一个是费用起止期在同一年,另一个是费用起止期不在同一年
  对于每一个季度的列,都需要定义一个变量名name,因此想到了第一季度使用AA,第二季度使用BB,第三季度使用CC,第四季度使用DD,而在跨年时,季度的变量名后面加上年,即DD2020,AA2021,BB2021,CC2021,DD2021等,这样就可以区分出不同年的季度的变量名了。
  而在后端查询数据时,也需要根据费用起止期区分包含的每个季度的变量名是什么,这样才可以和前端页面列表中表头列对应,进行展示数据。


编写代码

前端

前端页面部分代码如下:

<div class="test-tradebond-main-container">
		<div class="test-form" id="basemng_search_form" style="display: none;">
			<div class="test-form-ele-2">
				<span class="test-form-label-l">JH名称</span>
				<input id="basemng_planName" value="" type="text" class="easyui-combobox test-txt mcp-save-combobox" data-options="prompt:'请选择'">
			</div>
			<div class="test-form-ele-2">
				<span class="test-form-label-l">ZH名称</span>
				<input id="basemng_portfolioName" value="" type="text" class="easyui-combobox test-txt mcp-save-combobox" data-options="prompt:'请选择'">
			</div>
			<div class="test-form-ele-2">
				<span class="test-form-label-l">费用类型</span>
				<input id="basemng_feeType" value="" type="text" class="easyui-combobox test-txt mcp-save-combobox" data-options="prompt:'请选择'">
			</div>
			<div class="test-form-ele-2">
				<span class="test-form-label-l">费用起期</span>
		  		<input id="basemng_feeDateStart" type="text" class="easyui-datebox test-txt" />
		  	</div>
		  	<div class="test-form-ele-2">
				<span class="test-form-label-l">费用止期</span>
		  		<input id="basemng_feeDateEnd" type="text" class="easyui-datebox test-txt" />
		  	</div>
		</div>
		<div class="clear"></div>
		<div class="test-form">
			<div class="test-form-ele-1">
				<div class="test-form-btn-center4" style="">
					<input type="button" id="psa_advancedSearchBtn" class="test-btn" value="高级搜索">
					<input type="button" id="basemng_searchBtn" class="test-btn" value="查询" >
					<input type="button" id="basemng_clearBtn" class="test-btn" value="清空">
					<input type="button" id="basemng_exportBtn" class="test-btn" value="导出">
				</div>
			</div>
		</div>
		<div class="clear"></div>
		<div class="test-form">
			<div class="test-form-ele-1" style="margin-top:-5px;margin-bottom: -5px;">
				<p class="test-form-show-title" style="margin-left:5px;margin-bottom:5px;font-size:14px;float:left;">JBGLF信息表</p>
			</div>
			<div class="test-form-ele-1">
				<div class="test-mmgrid">
					<table id="basemng_dataGrid"></table>
					<div id="basemng_pg" class="test-mmgrid-pg"></div>
				</div>
			</div>
		</div>
	</div>

对应的js中代码:

//初始化信息列表
function baseMngInfoGrid() {
    var FeeDateStart = $('#basemng_feeDateStart').datebox('getValue');//定价日期起
    var FeeDateEnd = $('#basemng_feeDateEnd').datebox('getValue');//定价日期止
    var num = 0;
    var year;
    quaterTimeArr = [];
    quaterWordArr = [];
    //此处尤为重要,根据费用起止期,生成动态的季度列
    dealAutoQuater(FeeDateStart, FeeDateEnd);
    if (FeeDateStart !== "" && FeeDateEnd !== "") {
        var sDate = new Date(FeeDateStart);
        var eDate = new Date(FeeDateEnd);
        var sYear = sDate.getFullYear();
        var eYear = eDate.getFullYear();
        num = eYear - sYear;
        year = sYear;
    } else {
        var date = new Date();
        year = date.getFullYear();
    }
    var cols = [
        {title: 'JH名称', name: 'PlanName', width: 200, align: 'center', sortable: true},
        {title: 'ZH名称', name: 'Portfolioname', width: 200, align: 'center', sortable: true},
        {title: '费用类型', name: 'FeeType', width: 60, align: 'center', sortable: true},
        {title: '费率%', name: 'FeeRate', width: 40, align: 'center', sortable: true},
        {title: 'PAY频率', name: 'PayCycle', width: 50, align: 'center', sortable: true}
    ];
    if(FeeDateStart === "" && FeeDateEnd === ""){ //无条件时,默认显示当年的四个季度
        for (var i = 0; i < num + 1; i++) {
            cols.push({title: year + '年一季度',name: 'AA' + year,width: 100,align: 'center',sortable: true,type: 'number',renderer:checkNullVal});
            cols.push({title: year + '年二季度',name: 'BB' + year,width: 100,align: 'center',sortable: true,type: 'number',renderer:checkNullVal});
            cols.push({title: year + '年三季度',name: 'CC' + year,width: 100,align: 'center',sortable: true,type: 'number',renderer:checkNullVal});
            cols.push({title: year + '年四季度',name: 'DD' + year,width: 100,align: 'center',sortable: true,type: 'number',renderer:checkNullVal});
            year = year + 1;
        }
    } else { //输入起止日期后,根据quaterTimeArr和quaterWordArr数组中的元素,动态添加列
        for (var j = 0; j < quaterTimeArr.length; j++) {
            cols.push({title: quaterTimeArr[j],name: quaterWordArr[j],width: 200,align: 'center',sortable: true,type: 'number',renderer:checkNullVal});
        }
    }
    cols.push({title: 'FEE合计', name: 'MngSumFee', width: 100, align: 'center', sortable: true, type: 'number'});
    cols.push({title: '归属机构', name: 'BelongOrgan', width: 100, align: 'center', sortable: true});
    var mmgridAutoHeight; //自适应高度
    var pageLimitList; //页面加载条数
    if (pageAutoHeight > 660) {
        mmgridAutoHeight = pageAutoHeight - 210;
        pageLimitList = 50;
    } else if (pageAutoHeight < 650) {
        mmgridAutoHeight = pageAutoHeight - 200;
        pageLimitList = 50;
    }
    basemng_dataGrid = $('#basemng_dataGrid').mmGrid({
        height: mmgridAutoHeight,
        cols: cols,
        url: 'xxx',
        params: basemngfeeGridParms,
        width: 'auto',
        method: 'post',
        root: 'items',
        remoteSort: false,
        sortName: '',// 排序的数据,如果为空以name为准
        sortStatues: 'asc',// 排序方式为'asc','desc'
        multiSelect: false,// 行多选
        indexCol: false,// 表格显示索引列
        checkCol: false,// 表格显示checkbox表格
        fullWidthRows: true,// 伸展列宽自动填满表格
        autoLoad: true,
        nowrap: true,
        subGridPageEnable: true,
        plugins: [$('#basemng_pg').mmPaginator({
            style: 'plain',
            totalCountName: 'totalCount',
            page: 1,
            pageParamName: 'currentPage',// 传递给后台当前第几页的参数名称
            limitParamName: 'pageSize',// 传递给后台每页记录数的参数名称
            limitLabel: '每页{0}条',
            totalCountLabel: '共<span>{0}</span>条记录',
            limit: 50,
            limitList: [5, 10, 15, 20, 50, 200]
        })]
    });
    //重新刷新表头,这里就是使用新的列替换旧的列
    basemng_dataGrid._initHead({
        cols: cols
    });
    //设置列宽,新的列没有宽度,需要重新设置宽度
    basemng_dataGrid._setColsWidth();
    basemng_dataGrid._fullWidthRows();

    loadPlanPrepareGrid(1);
}

/*
* 处理动态季度数据
* */
function dealAutoQuater(FeeDateStart, FeeDateEnd) {
    var sDate = new Date(FeeDateStart);
    var eDate = new Date(FeeDateEnd);
    var stYear = sDate.getFullYear();
    var sMonth = sDate.getMonth() + 1; //当前月,js中月份从0开始

    var eYear = eDate.getFullYear();
    var i = 1;

    for (var sYear = stYear; sYear <= eYear; sYear++) { //起止日期在同一年
        var theStartDate = new Date(getQuarterStartDate(sYear, sMonth));
        var theEndDate = new Date(getQuarterEndDate(sYear, sMonth));
        var diff = parseInt(sMonth / 3);
        var mod = sMonth % 3;
        if (mod !== 0) {
            diff = diff + 1;
        }
        if (i === 1) {
            if (sDate.getTime() == theStartDate.getTime()) { //起始日期等于本季度的开始日期,则表明开始是个季度
                if (eDate >= theEndDate) {
                    quaterTimeArr.push(sYear + "年第" + getQuarterUpChar(diff) + "季度");
                    quaterWordArr.push(getQuarterWord(diff) + sYear);
                    if(eDate.getTime() == theEndDate.getTime()){
                        break;
                    }
                } else {
                    theStartDate = getAllDate(theStartDate);
                    eDate = getAllDate(eDate);
                    quaterTimeArr.push(theStartDate + "-" + eDate);
                    quaterWordArr.push(getQuarterWord(diff) + sYear);
                    break;
                }
            } else {
                if (eDate >= theEndDate) {
                    theStartDate = getAllDate(sDate);
                    var endDate = getAllDate(theEndDate);
                    quaterTimeArr.push(theStartDate + "-" + endDate);
                    quaterWordArr.push(getQuarterWord(diff) + sYear);
                    if(eDate.getTime() == theEndDate.getTime()){
                        break;
                    }
                } else {
                    theStartDate = getAllDate(sDate);
                    theEndDate = getAllDate(eDate);
                    quaterTimeArr.push(theStartDate + "-" + theEndDate);
                    quaterWordArr.push(getQuarterWord(diff) + sYear);
                    break;
                }
            }
        }

        //下面的在第一次全部执行。
        while (diff !== 4) {
            if (i % 2 !== 0) { //加上这个条件,是为了在第二年的时候,第一次跑这个循环不会把月份加3,第二次跑的时候再加3,保证了,跨年的第二年,从第一季度开始
                sMonth = sMonth + 3;
                diff = parseInt(sMonth / 3);
                mod = sMonth % 3;
                if (mod !== 0) {
                    diff = diff + 1;
                }
            } else {
                i = i + 1;
            }
            theStartDate = new Date(getQuarterStartDate(sYear, sMonth));
            theEndDate = new Date(getQuarterEndDate(sYear, sMonth));
            if (eDate >= theEndDate) {
                quaterTimeArr.push(sYear + "年" + getQuarterUpChar(diff) + "季度");
                quaterWordArr.push(getQuarterWord(diff) + sYear);
                if(eDate.getTime() == theEndDate.getTime()){
                    break;
                }
            } else {
                theStartDate = getAllDate(theStartDate);
                theEndDate = getAllDate(eDate);
                quaterTimeArr.push(theStartDate + "-" + theEndDate);
                quaterWordArr.push(getQuarterWord(diff) + sYear);
                break;
            }
        }
        sMonth = 1;
        i = i + 1;
    }
}

//获得日期
function getAllDate(dates,fmt) {
    if(null == fmt || undefined == fmt || "" == fmt)
        fmt = "yyyy/MM/dd";
    var date = new Date(dates);
    var o = {
        "M+": date.getMonth() + 1, //月份
        "d+": date.getDate(), //日
        "h+": date.getHours(), //小时
        "m+": date.getMinutes(), //分
        "s+": date.getSeconds(), //秒
        "q+": Math.floor((date.getMonth() + 3) / 3), //季度
        "S": date.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}

//获得本月最后一天
function getMonthLastDay(theYear, myMonth){
    return (new Date(new Date(theYear,myMonth,1).getTime()-1000*60*60*24)).getDate();
}


//获得本季度的开始月份
function getQuarterStartMonth(theMonth){
    var quarterStartMonth = 0;
    if(theMonth<4){
        quarterStartMonth = 0;
    }
    if(3<theMonth && theMonth<7){
        quarterStartMonth = 3;
    }
    if(6<theMonth && theMonth<10){
        quarterStartMonth = 6;
    }
    if(theMonth>9){
        quarterStartMonth = 9;
    }
    return quarterStartMonth;
}
//获得某月的天数
function getMonthDays(theYear, myMonth){
    var monthStartDate = new Date(theYear, myMonth, 1);
    var monthEndDate = new Date(theYear, myMonth + 1, 1);
    return (monthEndDate - monthStartDate)/(1000 * 60 * 60 * 24);
}
//获得本季度的开始日期
function getQuarterStartDate(theYear, theMonth){
    var quarterStartDate = new Date(theYear, getQuarterStartMonth(theMonth), 1);
    return getAllDate(quarterStartDate,"yyyy-MM-dd");
    // return quarterStartDate;
}
//获得本季度的结束日期
function getQuarterEndDate(theYear, theMonth){
    var quarterEndMonth = getQuarterStartMonth(theMonth) + 2;
    var quarterEndDate = new Date(theYear, quarterEndMonth, getMonthDays(theYear, quarterEndMonth));
    return getAllDate(quarterEndDate,"yyyy-MM-dd");
    // return quarterEndDate;
}

//季度数字转汉字
function getQuarterUpChar(lowerchar){
    var upchar = "";
    switch (lowerchar) {
        case 1:
            upchar = "一";
            break;
        case 2:
            upchar = "二";
            break;
        case 3:
            upchar = "三";
            break;
        case 4:
            upchar = "四";
            break;
    }
    return upchar;
}

//季度数字转字母
function getQuarterWord(lowerchar){
    var upchar = "";
    switch (lowerchar) {
        case 1:
            upchar = "AA";
            break;
        case 2:
            upchar = "BB";
            break;
        case 3:
            upchar = "CC";
            break;
        case 4:
            upchar = "DD";
            break;
    }
    return upchar;
}
//将空值转换成-
function checkNullVal(val,item,rowIndex){
    if(isNull(val)){
        val='-';
    }
    return "<span>"+val+"</span";
}

在mmGrid.js源码中的 _initHead方法需要添加以下代码:

			//重新设置列表表头时使用
			if(arguments.length !== 0){
                opts.cols = arguments[0].cols;
                this.opts = opts;
            }

添加位置如图:
在这里插入图片描述

后端

因为对于后端处理的逻辑很复杂,需要耐心看一下

		/**
	    * @Description: 信息查询
	    * @param: "[page]"
	    * @Return: java.util.List<com.sinosoft.utils.PageData>
	    */
        public List<PageData> listBaseMngFeeQuery(Page page) throws Exception {
            String PortfolioCodes = (String) page.getPd().get("PortfolioCode");//多选组合编码
            String PlanCodes = (String) page.getPd().get("PlanCode");//多选计划编码
            String FeeTypeCodes = (String) page.getPd().get("FeeTypeCode");//多选费用类型code
            String DataF = (String) page.getPd().get("DataF");//查询标记  01-页面   02-导出
            List<PageData> tempPortCodeList = new ArrayList<>();
            List<PageData> tempPlanCodeList = new ArrayList<>();
            List<PageData> tempFeeTypeCodeList = new ArrayList<>();
            //组合编码
            if (!StringUtils.isEmpty(PortfolioCodes)) {
                String[] PortfolioCodeArr = PortfolioCodes.split(",");
                for (String portfolioCode : PortfolioCodeArr) {
                    PageData tempFundData = new PageData();
                    tempFundData.put("portfolioCode", portfolioCode);
                    tempPortCodeList.add(tempFundData);
                }
                page.getPd().put("PortfolioCodeList", tempPortCodeList);
            }

            //计划编码
            if (!StringUtils.isEmpty(PlanCodes)) {
                String[] PlanCodeArr = PlanCodes.split(",");
                for (String planCode : PlanCodeArr) {
                    PageData tempFundData = new PageData();
                    tempFundData.put("planCode", planCode);
                    tempPlanCodeList.add(tempFundData);
                }
                page.getPd().put("PlanCodeList", tempPlanCodeList);
            }

            //费用类型编码
            if (!StringUtils.isEmpty(FeeTypeCodes)) {
                String[] FeeTypeCodeArr = FeeTypeCodes.split(",");
                for (String feeTypeCode : FeeTypeCodeArr) {
                    PageData tempFundData = new PageData();
                    tempFundData.put("feeTypeCode", feeTypeCode);
                    tempFeeTypeCodeList.add(tempFundData);
                }
                page.getPd().put("FeeTypeCodeList", tempFeeTypeCodeList);
            }
            List<PageData> list;
            List<PageData> listSum;
            if ("01".equals(DataF)) { //页面
                list = (List<PageData>) dao.findForList("reportQueryMapper.listPageBaseMngFeeQuery", page);
            } else { //导出
                //组合费用,组合合计,计划合计
                list = (List<PageData>) dao.findForList("reportQueryMapper.queryExportBaseMngFeeQuery", page);

                //总合计
                listSum = (List<PageData>) dao.findForList("reportQueryMapper.queryExportBaseMngFeeSumQuery", page);
                list.addAll(listSum);
            }

            StringBuffer planNameBuffer = new StringBuffer(""); //计划名称
            StringBuffer portNameBuffer = new StringBuffer(""); //组合名称
            StringBuffer feeTypeBuffer = new StringBuffer(""); //费用类型

            StringBuffer quartData = new StringBuffer(""); //存放区间数据  如 2020年1季度、2020年2季度

            for (PageData pd : list) {

                page.getPd().put("PlanCode", pd.getString("PlanCode"));
                page.getPd().put("Portfoliono", pd.getString("Portfoliono"));
                if ("02".equals(DataF)) {
                    String PlanName = pd.getString("PlanName");
                    String Portfolioname = pd.getString("Portfolioname");
                    String FeeType = pd.getString("FeeType");
                    if (!planNameBuffer.toString().contains(PlanName) && !("合计").equals(PlanName)) {
                        if (!StringUtils.isEmpty(planNameBuffer.toString())) {
                            planNameBuffer.append("、");
                        }
                        planNameBuffer.append(PlanName);
                    }
                    if (!portNameBuffer.toString().contains(Portfolioname) && !("计划级").equals(Portfolioname) && !("合计").equals(Portfolioname)) {
                        if (!StringUtils.isEmpty(portNameBuffer.toString())) {
                            portNameBuffer.append("、");
                        }
                        portNameBuffer.append(Portfolioname);
                    }
                    if ((!feeTypeBuffer.toString().contains(FeeType)) && !("组合合计").equals(FeeType) && !("计划合计").equals(FeeType) && !("合计").equals(FeeType)) {
                        if (!StringUtils.isEmpty(feeTypeBuffer.toString())) {
                            feeTypeBuffer.append("、");
                        }
                        feeTypeBuffer.append(FeeType);
                    }
                }

                String FeeDateStart = (String) page.getPd().get("FeeDateStart");//费用起期
                String FeeDateEnd = (String) page.getPd().get("FeeDateEnd");//费用止期

                //根据查询条件生成季度
                //起止日期都为空,默认生成当年的四个季度
                if (StringUtils.isEmpty(FeeDateStart) && StringUtils.isEmpty(FeeDateEnd)) {
                    getCurrentYearQuarterDate(page, false, ""); //查询当前四个季度的开始和结束日期
                    dealDataWhileFeeDateIsNull(page, pd); //当费用日期为空时,处理数据
                } else {
                    //不为空,根据起期生成本年四个季度,判断第四季度的最后一天和止期大小,再决定是否生成下一年四个季度
                    String startYear = FeeDateStart.substring(0, 4);
                    String endYear = FeeDateEnd.substring(0, 4);

                    int num = Integer.parseInt(endYear) - Integer.parseInt(startYear);

                    if (num == 0) {
                        page.getPd().put("FeeDateStartYear", FeeDateStart);
                        page.getPd().put("FeeDateEndYear", FeeDateEnd);
                        getCurrentYearQuarterDate(page, true, FeeDateStart); //查询当前四个季度的开始和结束日期
                        dealDataWhileFeeDateIsNotNull(page, pd, quartData);
                    } else {
                        for (int i = 0; i < num + 1; i++) {

//                            logger.info("------ 指定日期:" + FeeDateStart + " ------");

                            getCurrentYearQuarterDate(page, true, FeeDateStart); //查询当前四个季度的开始和结束日期
                            if (i == 0) { //等于0,需要把起期和第一年第4季度的最后一天传过去
                                page.getPd().put("FeeDateStartYear", FeeDateStart);
                                page.getPd().put("FeeDateEndYear", page.getPd().get("FourQuarterEnd"));
                            } else if (i != num) { //不等0或者最后一年,说明起止日期中间还有一个完整年,把第一季的第一天和第四季度最后一天传过去
                                page.getPd().put("FeeDateStartYear", page.getPd().get("FiirstQuarterStart"));
                                page.getPd().put("FeeDateEndYear", page.getPd().get("FourQuarterEnd"));
                            } else if (i == num) { //等于差值,说明到了止期那一年,把最后一年第一季度的第一天和止期传过去
                                page.getPd().put("FeeDateStartYear", page.getPd().get("FiirstQuarterStart"));
                                page.getPd().put("FeeDateEndYear", FeeDateEnd);
                            }
                            dealDataWhileFeeDateIsNotNull(page, pd, quartData);

                            Calendar cal3 = Calendar.getInstance();
                            Date date = new SimpleDateFormat("yyyy-MM-dd").parse(FeeDateStart);
                            cal3.setTime(date);
                            cal3.add(Calendar.YEAR, 1);
                            cal3.set(Calendar.DAY_OF_YEAR, 1);
                            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                            FeeDateStart = sdf.format(cal3.getTime());
                        }
                    }


                }
            }

            page.getPd().put("planNameBuffer", planNameBuffer.toString());
            page.getPd().put("portNameBuffer", portNameBuffer.toString());
            page.getPd().put("feeTypeBuffer", feeTypeBuffer.toString());
            return list;
        }

		/**
		* @Description: 当费用日期为空时,处理数据
		* @param: "[page, pd]"
		* @Return: void
		*/
        private void dealDataWhileFeeDateIsNull(Page page, PageData pd) throws Exception {

            String FiirstQuarterStart = page.getPd().getString("FiirstQuarterStart");
            String FiirstQuarterEnd = page.getPd().getString("FiirstQuarterEnd");
            String SecondQuarterStart = page.getPd().getString("SecondQuarterStart");
            String SecondQuarterEnd = page.getPd().getString("SecondQuarterEnd");
            String ThirdQuarterStart = page.getPd().getString("ThirdQuarterStart");
            String ThirdQuarterEnd = page.getPd().getString("ThirdQuarterEnd");
            String FourQuarterStart = page.getPd().getString("FourQuarterStart");
            String FourQuarterEnd = page.getPd().getString("FourQuarterEnd");

            Date FiirstQuarterStartDate = new SimpleDateFormat("yyyy-MM-dd").parse(FiirstQuarterStart);
            Date FiirstQuarterEndDate = new SimpleDateFormat("yyyy-MM-dd").parse(FiirstQuarterEnd);
            Date SecondQuarterStartDate = new SimpleDateFormat("yyyy-MM-dd").parse(SecondQuarterStart);
            Date SecondQuarterEndDate = new SimpleDateFormat("yyyy-MM-dd").parse(SecondQuarterEnd);
            Date ThirdQuarterStartDate = new SimpleDateFormat("yyyy-MM-dd").parse(ThirdQuarterStart);
            Date ThirdQuarterEndDate = new SimpleDateFormat("yyyy-MM-dd").parse(ThirdQuarterEnd);
            Date FourQuarterStartDate = new SimpleDateFormat("yyyy-MM-dd").parse(FourQuarterStart);
            Date FourQuarterEndDate = new SimpleDateFormat("yyyy-MM-dd").parse(FourQuarterEnd);

            page.getPd().put("FeeStartDate", FiirstQuarterStart);
            page.getPd().put("FeeEndDate", FourQuarterEnd);

            //查询该计划该组合资产情况表中当年最小日期和最大日期
            List<PageData> dateList = (List<PageData>) dao.findForList("reportQueryMapper.queryStatementDataMinMaxDate", page);
            String minDate, maxDate;
            if (dateList.size() != 0 && dateList.get(0) != null) {
                minDate = dateList.get(0).getString("MinDate"); //数据最小日期
                maxDate = dateList.get(0).getString("MaxDate"); //数据最大日期
            } else {
                return;
            }

            Date minDataDate = new SimpleDateFormat("yyyy-MM-dd").parse(minDate);
            Date maxDataDate = new SimpleDateFormat("yyyy-MM-dd").parse(maxDate);

            if (FiirstQuarterStartDate.compareTo(minDataDate) == 0) { //等于0,说明数据最小日期日期是当年第一季度第一天

                if (FiirstQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第一季度最后一天,只显示这个区间的列
                    setSumFee(page, pd, FiirstQuarterStart, FiirstQuarterEnd, "AA");
                } else if (FiirstQuarterEndDate.compareTo(maxDataDate) < 0) { //等于 -1,数据最大日期大于第一季度最后一天
                    setSumFee(page, pd, FiirstQuarterStart, FiirstQuarterEnd, "AA");

                    if (SecondQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第二季度最后一天,显示这个区间的列
                        setSumFee(page, pd, SecondQuarterStart, SecondQuarterEnd, "BB");
                    } else if (SecondQuarterEndDate.compareTo(maxDataDate) < 0) {
                        setSumFee(page, pd, SecondQuarterStart, SecondQuarterEnd, "BB");

                        if (ThirdQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第三季度最后一天,显示这个区间的列
                            setSumFee(page, pd, ThirdQuarterStart, ThirdQuarterEnd, "CC");
                        } else if (ThirdQuarterEndDate.compareTo(maxDataDate) < 0) { //小于0,数据最大日期大于第三季度最后一天
                            setSumFee(page, pd, ThirdQuarterStart, ThirdQuarterEnd, "CC");
                            //...
                            if (FourQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第四季度最后一天,显示这个区间的列
                                setSumFee(page, pd, FourQuarterStart, FourQuarterEnd, "DD");
                            } else if (FourQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第四季度最后一天,显示时间这个区间的列
                                setSumFee(page, pd, FourQuarterStart, maxDate, "DD");
                            }

                        } else if (ThirdQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第三季度最后一天,显示时间这个区间的列
                            setSumFee(page, pd, ThirdQuarterStart, maxDate, "CC");
                        }
                    } else if (SecondQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第二季度最后一天,显示时间这个区间的列
                        setSumFee(page, pd, SecondQuarterStart, maxDate, "BB"); //具体日期
                    }
                } else if (FiirstQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第一季度最后一天,显示时间这个区间的列
                    setSumFee(page, pd, FiirstQuarterStart, maxDate, "AA"); //具体日期
                }

            } else if (FiirstQuarterStartDate.compareTo(minDataDate) < 0) { //小于0,数据最小日期大于第一季度第一天

                if (FiirstQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第一季度最后一天,只显示这个区间的列
                    setSumFee(page, pd, minDate, FiirstQuarterEnd, "AA");
                } else if (FiirstQuarterEndDate.compareTo(maxDataDate) < 0) { //等于 -1,数据最大日期大于第一季度最后一天
                    setSumFee(page, pd, minDate, FiirstQuarterEnd, "AA");

                    if (SecondQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第二季度最后一天,显示这个区间的列
                        setSumFee(page, pd, SecondQuarterStart, SecondQuarterEnd, "BB");
                    } else if (SecondQuarterEndDate.compareTo(maxDataDate) < 0) {
                        setSumFee(page, pd, SecondQuarterStart, SecondQuarterEnd, "BB");

                        if (ThirdQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第三季度最后一天,显示这个区间的列
                            setSumFee(page, pd, ThirdQuarterStart, ThirdQuarterEnd, "CC");
                        } else if (ThirdQuarterEndDate.compareTo(maxDataDate) < 0) { //小于0,数据最大日期大于第三季度最后一天
                            setSumFee(page, pd, ThirdQuarterStart, ThirdQuarterEnd, "CC");
                            //...
                            if (FourQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第四季度最后一天,显示这个区间的列
                                setSumFee(page, pd, FourQuarterStart, FourQuarterEnd, "DD");
                            } else if (FourQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第四季度最后一天,显示时间这个区间的列
                                setSumFee(page, pd, FourQuarterStart, maxDate, "DD");
                            }

                        } else if (ThirdQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第三季度最后一天,显示时间这个区间的列
                            setSumFee(page, pd, ThirdQuarterStart, maxDate, "CC");
                        }
                    } else if (SecondQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第二季度最后一天,显示时间这个区间的列
                        setSumFee(page, pd, SecondQuarterStart, maxDate, "BB"); //具体日期
                    }
                } else if (FiirstQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第一季度最后一天,显示时间这个区间的列
                    setSumFee(page, pd, minDate, maxDate, "AA"); //具体日期
                }
            }
        }

		/**
		* @Description:
		* @param: "[page, pd]"
		* @Return: void
		*/
        private void dealDataWhileFeeDateIsNotNull(Page page, PageData pd, StringBuffer quartData) throws Exception {

            String FiirstQuarterStart = page.getPd().getString("FiirstQuarterStart");
            String FiirstQuarterEnd = page.getPd().getString("FiirstQuarterEnd");
            String SecondQuarterStart = page.getPd().getString("SecondQuarterStart");
            String SecondQuarterEnd = page.getPd().getString("SecondQuarterEnd");
            String ThirdQuarterStart = page.getPd().getString("ThirdQuarterStart");
            String ThirdQuarterEnd = page.getPd().getString("ThirdQuarterEnd");
            String FourQuarterStart = page.getPd().getString("FourQuarterStart");
            String FourQuarterEnd = page.getPd().getString("FourQuarterEnd");

            Date FiirstQuarterStartDate = new SimpleDateFormat("yyyy-MM-dd").parse(FiirstQuarterStart);
            Date FiirstQuarterEndDate = new SimpleDateFormat("yyyy-MM-dd").parse(FiirstQuarterEnd);
            Date SecondQuarterStartDate = new SimpleDateFormat("yyyy-MM-dd").parse(SecondQuarterStart);
            Date SecondQuarterEndDate = new SimpleDateFormat("yyyy-MM-dd").parse(SecondQuarterEnd);
            Date ThirdQuarterStartDate = new SimpleDateFormat("yyyy-MM-dd").parse(ThirdQuarterStart);
            Date ThirdQuarterEndDate = new SimpleDateFormat("yyyy-MM-dd").parse(ThirdQuarterEnd);
            Date FourQuarterStartDate = new SimpleDateFormat("yyyy-MM-dd").parse(FourQuarterStart);
            Date FourQuarterEndDate = new SimpleDateFormat("yyyy-MM-dd").parse(FourQuarterEnd);

            String FeeDateStart = (String) page.getPd().get("FeeDateStartYear");//年度费用起期
            String FeeDateEnd = (String) page.getPd().get("FeeDateEndYear");//年度费用止期

            //查询的日期只能在一个年
            page.getPd().put("FeeStartDate", FeeDateStart);
            page.getPd().put("FeeEndDate", FeeDateEnd);

            //查询该计划该组合资产情况表中当年最小日期和最大日期
			/*List<PageData> dateList = (List<PageData>) dao.findForList("reportQueryMapper.queryStatementDataMinMaxDate", page);
			String minDate, maxDate;
			if (dateList.size() != 0 && dateList.get(0) != null) {
				minDate = dateList.get(0).getString("MinDate"); //数据最小日期
				maxDate = dateList.get(0).getString("MaxDate"); //数据最大日期
			} else {
				return;
			}
			Date minDataDate = new SimpleDateFormat("yyyy-MM-dd").parse(minDate);
			Date maxDataDate = new SimpleDateFormat("yyyy-MM-dd").parse(maxDate);
			*/
            String minDate = FeeDateStart, maxDate = FeeDateEnd;
            Date minDataDate = new SimpleDateFormat("yyyy-MM-dd").parse(FeeDateStart);
            Date maxDataDate = new SimpleDateFormat("yyyy-MM-dd").parse(FeeDateEnd);

            if (FiirstQuarterStartDate.compareTo(minDataDate) == 0) { //等于0,说明数据最小日期日期是当年第一季度第一天

                if (FiirstQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第一季度最后一天,只显示这个区间的列
                    //设置季度费用
                    setSumFee(page, pd, FiirstQuarterStart, FiirstQuarterEnd, "AA");

                    //设置季度
                    setQuaterData(quartData, FiirstQuarterStart, "1", "AA");

                } else if (FiirstQuarterEndDate.compareTo(maxDataDate) < 0) { //等于 -1,数据最大日期大于第一季度最后一天
                    setSumFee(page, pd, FiirstQuarterStart, FiirstQuarterEnd, "AA");
                    //设置季度
                    setQuaterData(quartData, FiirstQuarterStart, "1", "AA");

                    if (SecondQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第二季度最后一天,显示这个区间的列
                        setSumFee(page, pd, SecondQuarterStart, SecondQuarterEnd, "BB");
                        //设置季度
                        setQuaterData(quartData, SecondQuarterStart, "2", "BB");

                    } else if (SecondQuarterEndDate.compareTo(maxDataDate) < 0) {
                        setSumFee(page, pd, SecondQuarterStart, SecondQuarterEnd, "BB");
                        //设置季度
                        setQuaterData(quartData, SecondQuarterStart, "2", "BB");

                        if (ThirdQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第三季度最后一天,显示这个区间的列
                            setSumFee(page, pd, ThirdQuarterStart, ThirdQuarterEnd, "CC");
                            //设置季度
                            setQuaterData(quartData, ThirdQuarterStart, "3", "CC");
                        } else if (ThirdQuarterEndDate.compareTo(maxDataDate) < 0) { //小于0,数据最大日期大于第三季度最后一天
                            setSumFee(page, pd, ThirdQuarterStart, ThirdQuarterEnd, "CC");
                            //设置季度
                            setQuaterData(quartData, ThirdQuarterStart, "3", "CC");
                            //...
                            if (FourQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第四季度最后一天,显示这个区间的列
                                setSumFee(page, pd, FourQuarterStart, FourQuarterEnd, "DD");
                                //设置季度
                                setQuaterData(quartData, FourQuarterStart, "4", "DD");
                            } else if (FourQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第四季度最后一天,显示时间这个区间的列
                                setSumFee(page, pd, FourQuarterStart, maxDate, "DD");

                                //设置具体区间
                                setQuaterTime(quartData, FourQuarterStart, maxDate, "DD");
                            }

                        } else if (ThirdQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第三季度最后一天,显示时间这个区间的列
                            setSumFee(page, pd, ThirdQuarterStart, maxDate, "CC");
                            //设置具体区间
                            setQuaterTime(quartData, ThirdQuarterStart, maxDate, "CC");
                        }
                    } else if (SecondQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第二季度最后一天,显示时间这个区间的列
                        setSumFee(page, pd, SecondQuarterStart, maxDate, "BB"); //具体日期
                        //设置具体区间
                        setQuaterTime(quartData, SecondQuarterStart, maxDate, "BB");
                    }
                } else if (FiirstQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第一季度最后一天,显示时间这个区间的列
                    setSumFee(page, pd, FiirstQuarterStart, maxDate, "AA"); //具体日期
                    //设置具体区间
                    setQuaterTime(quartData, FiirstQuarterStart, maxDate, "AA");
                }

            } else if (FiirstQuarterStartDate.compareTo(minDataDate) <= 0 && minDataDate.compareTo(FiirstQuarterEndDate) <= 0) { //小于0,费用起期大于第一季度第一天

                //判断在端点和不在端点的情况

                //最小日期为第一季度开始,最大日期为第一季度结束
                if (FiirstQuarterStartDate.compareTo(minDataDate) == 0 && FiirstQuarterEndDate.compareTo(maxDataDate) <= 0) { //等于0,说明数据最大日期是当年第一季度最后一天,只显示这个区间的列
                    setSumFee(page, pd, FiirstQuarterStart, FiirstQuarterEnd, "AA");
                    //设置季度
                    setQuaterData(quartData, FiirstQuarterStart, "1", "AA");

                } else if (FiirstQuarterStartDate.compareTo(minDataDate) < 0 && FiirstQuarterEndDate.compareTo(maxDataDate) <= 0) { //最小日期大于第一季度开始,最大日期为第一季度结束
                    setSumFee(page, pd, minDate, FiirstQuarterEnd, "AA");
                    //设置具体区间
                    setQuaterTime(quartData, minDate, FiirstQuarterEnd, "AA");

                } else if (FiirstQuarterEndDate.compareTo(minDataDate) == 0 && FiirstQuarterEndDate.compareTo(maxDataDate) <= 0) { //最小日期为第一季度结束,最大日期为第一季度结束
                    setSumFee(page, pd, minDate, FiirstQuarterEnd, "AA");
                    //设置具体区间
                    setQuaterTime(quartData, minDate, FiirstQuarterEnd, "AA");
                }

                if (FiirstQuarterEndDate.compareTo(maxDataDate) < 0) { //等于 -1,数据最大日期大于第一季度最后一天
//							setSumFee(page, pd, minDate, FiirstQuarterEnd, "First");

                    if (SecondQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第二季度最后一天,显示这个区间的列
                        setSumFee(page, pd, SecondQuarterStart, SecondQuarterEnd, "BB");
                        //设置季度
                        setQuaterData(quartData, SecondQuarterStart, "2", "BB");

                    } else if (SecondQuarterEndDate.compareTo(maxDataDate) < 0) {
                        setSumFee(page, pd, SecondQuarterStart, SecondQuarterEnd, "BB");
                        //设置季度
                        setQuaterData(quartData, SecondQuarterStart, "2", "BB");

                        if (ThirdQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第三季度最后一天,显示这个区间的列
                            setSumFee(page, pd, ThirdQuarterStart, ThirdQuarterEnd, "CC");
                            //设置季度
                            setQuaterData(quartData, ThirdQuarterStart, "3", "CC");
                        } else if (ThirdQuarterEndDate.compareTo(maxDataDate) < 0) { //小于0,数据最大日期大于第三季度最后一天
                            setSumFee(page, pd, ThirdQuarterStart, ThirdQuarterEnd, "CC");
                            //设置季度
                            setQuaterData(quartData, ThirdQuarterStart, "3", "CC");
                            //...
                            if (FourQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第四季度最后一天,显示这个区间的列
                                setSumFee(page, pd, FourQuarterStart, FourQuarterEnd, "DD");
                                //设置季度
                                setQuaterData(quartData, FourQuarterStart, "4", "DD");
                            } else if (FourQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第四季度最后一天,显示时间这个区间的列
                                setSumFee(page, pd, FourQuarterStart, maxDate, "DD");
                                //设置具体区间
                                setQuaterTime(quartData, FourQuarterStart, maxDate, "DD");
                            }

                        } else if (ThirdQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第三季度最后一天,显示时间这个区间的列
                            setSumFee(page, pd, ThirdQuarterStart, maxDate, "CC");
                            //设置具体区间
                            setQuaterTime(quartData, ThirdQuarterStart, maxDate, "CC");
                        }
                    } else if (SecondQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第二季度最后一天,显示时间这个区间的列
                        setSumFee(page, pd, SecondQuarterStart, maxDate, "BB"); //具体日期
                        //设置具体区间
                        setQuaterTime(quartData, SecondQuarterStart, maxDate, "BB");
                    }
                } else if (FiirstQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第一季度最后一天,显示时间这个区间的列
                    setSumFee(page, pd, minDate, maxDate, "AA"); //具体日期
                    //设置具体区间
                    setQuaterTime(quartData, minDate, maxDate, "AA");

                }

            } else if (SecondQuarterStartDate.compareTo(minDataDate) <= 0 && minDataDate.compareTo(SecondQuarterEndDate) <= 0) { //小于0,费用起期大于第一季度第一天

                //判断在端点和不在端点的情况

                //最小日期为第一季度开始,最大日期为第一季度结束
                if (SecondQuarterStartDate.compareTo(minDataDate) == 0 && SecondQuarterEndDate.compareTo(maxDataDate) <= 0) { //等于0,说明数据最大日期是当年第一季度最后一天,只显示这个区间的列
                    setSumFee(page, pd, SecondQuarterStart, SecondQuarterEnd, "BB");
                    //设置季度
                    setQuaterData(quartData, SecondQuarterStart, "2", "BB");

                } else if (SecondQuarterStartDate.compareTo(minDataDate) < 0 && SecondQuarterEndDate.compareTo(maxDataDate) <= 0) { //最小日期大于第一季度开始,最大日期为第一季度结束
                    setSumFee(page, pd, minDate, SecondQuarterEnd, "BB");
                    //设置具体区间
                    setQuaterTime(quartData, minDate, SecondQuarterEnd, "BB");

                } else if (SecondQuarterEndDate.compareTo(minDataDate) == 0 && SecondQuarterEndDate.compareTo(maxDataDate) <= 0) { //最小日期为第一季度结束,最大日期为第一季度结束
                    setSumFee(page, pd, minDate, SecondQuarterEnd, "BB");
                    //设置具体区间
                    setQuaterTime(quartData, minDate, SecondQuarterEnd, "BB");
                }

                if (SecondQuarterEndDate.compareTo(maxDataDate) < 0) {
//							setSumFee(page, pd, minDate, SecondQuarterEnd, "Second");

                    if (ThirdQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第三季度最后一天,显示这个区间的列
                        setSumFee(page, pd, ThirdQuarterStart, ThirdQuarterEnd, "CC");
                        //设置季度
                        setQuaterData(quartData, ThirdQuarterStart, "3", "CC");
                    } else if (ThirdQuarterEndDate.compareTo(maxDataDate) < 0) { //小于0,数据最大日期大于第三季度最后一天
                        setSumFee(page, pd, ThirdQuarterStart, ThirdQuarterEnd, "CC");
                        //设置季度
                        setQuaterData(quartData, ThirdQuarterStart, "3", "CC");
                        //...
                        if (FourQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第四季度最后一天,显示这个区间的列
                            setSumFee(page, pd, FourQuarterStart, FourQuarterEnd, "DD");
                            //设置季度
                            setQuaterData(quartData, FourQuarterStart, "4", "DD");
                        } else if (FourQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第四季度最后一天,显示时间这个区间的列
                            setSumFee(page, pd, FourQuarterStart, maxDate, "DD");
                            //设置具体区间
                            setQuaterTime(quartData, FourQuarterStart, maxDate, "DD");
                        }

                    } else if (ThirdQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第三季度最后一天,显示时间这个区间的列
                        setSumFee(page, pd, ThirdQuarterStart, maxDate, "CC");
                        //设置具体区间
                        setQuaterTime(quartData, ThirdQuarterStart, maxDate, "CC");
                    }
                } else if (SecondQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第二季度最后一天,显示时间这个区间的列
                    setSumFee(page, pd, minDate, maxDate, "BB"); //具体日期
                    //设置具体区间
                    setQuaterTime(quartData, minDate, maxDate, "BB");
                }
            } else if (ThirdQuarterStartDate.compareTo(minDataDate) <= 0 && minDataDate.compareTo(ThirdQuarterEndDate) <= 0) { //小于0,费用起期大于第一季度第一天

                //判断在端点和不在端点的情况

                //最小日期为第一季度开始,最大日期为第一季度结束
                if (ThirdQuarterStartDate.compareTo(minDataDate) == 0 && ThirdQuarterEndDate.compareTo(maxDataDate) <= 0) { //等于0,说明数据最大日期是当年第一季度最后一天,只显示这个区间的列
                    setSumFee(page, pd, ThirdQuarterStart, ThirdQuarterEnd, "CC");
                    //设置季度
                    setQuaterData(quartData, ThirdQuarterStart, "3", "CC");

                } else if (ThirdQuarterStartDate.compareTo(minDataDate) < 0 && ThirdQuarterEndDate.compareTo(maxDataDate) <= 0) { //最小日期大于第一季度开始,最大日期为第一季度结束
                    setSumFee(page, pd, minDate, ThirdQuarterEnd, "CC");
                    //设置具体区间
                    setQuaterTime(quartData, minDate, ThirdQuarterEnd, "CC");

                } else if (ThirdQuarterEndDate.compareTo(minDataDate) == 0 && ThirdQuarterEndDate.compareTo(maxDataDate) <= 0) { //最小日期为第一季度结束,最大日期为第一季度结束
                    setSumFee(page, pd, minDate, ThirdQuarterEnd, "CC");
                    //设置具体区间
                    setQuaterTime(quartData, minDate, ThirdQuarterEnd, "CC");
                }


                if (ThirdQuarterEndDate.compareTo(maxDataDate) < 0) { //小于0,数据最大日期大于第三季度最后一天
//							setSumFee(page, pd, minDate, ThirdQuarterEnd, "Third");
                    //...
                    if (FourQuarterEndDate.compareTo(maxDataDate) == 0) { //等于0,说明数据最大日期是当年第四季度最后一天,显示这个区间的列
                        setSumFee(page, pd, FourQuarterStart, FourQuarterEnd, "DD");
                        //设置季度
                        setQuaterData(quartData, FourQuarterStart, "4", "DD");
                    } else if (FourQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第四季度最后一天,显示时间这个区间的列
                        setSumFee(page, pd, FourQuarterStart, maxDate, "DD");
                        //设置具体区间
                        setQuaterTime(quartData, FourQuarterStart, maxDate, "DD");
                    }

                } else if (ThirdQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第三季度最后一天,显示时间这个区间的列
                    setSumFee(page, pd, minDate, maxDate, "CC");
                    //设置具体区间
                    setQuaterTime(quartData, minDate, maxDate, "CC");
                }
            } else if (FourQuarterStartDate.compareTo(minDataDate) <= 0 && minDataDate.compareTo(FourQuarterEndDate) <= 0) { //小于0,费用起期大于第一季度第一天

                //判断在端点和不在端点的情况

                //最小日期为第一季度开始,最大日期为第一季度结束
                if (FourQuarterStartDate.compareTo(minDataDate) == 0 && FourQuarterEndDate.compareTo(maxDataDate) <= 0) { //等于0,说明数据最大日期是当年第一季度最后一天,只显示这个区间的列
                    setSumFee(page, pd, FourQuarterStart, FourQuarterEnd, "DD");
                    //设置季度
                    setQuaterData(quartData, FourQuarterStart, "4", "DD");

                } else if (FourQuarterStartDate.compareTo(minDataDate) < 0 && FourQuarterEndDate.compareTo(maxDataDate) <= 0) { //最小日期大于第一季度开始,最大日期为第一季度结束
                    setSumFee(page, pd, minDate, FourQuarterEnd, "DD");
                    //设置具体区间
                    setQuaterTime(quartData, minDate, FourQuarterEnd, "DD");

                } else if (FourQuarterEndDate.compareTo(minDataDate) == 0 && FourQuarterEndDate.compareTo(maxDataDate) <= 0) { //最小日期为第一季度结束,最大日期为第一季度结束
                    setSumFee(page, pd, minDate, FourQuarterEnd, "DD");
                    //设置具体区间
                    setQuaterTime(quartData, minDate, FourQuarterEnd, "DD");
                }

                if (FourQuarterEndDate.compareTo(maxDataDate) > 0) { //等于1,说明数据最大日期小于当年第四季度最后一天,显示时间这个区间的列
                    setSumFee(page, pd, minDate, maxDate, "DD");
                    //设置具体区间
                    setQuaterTime(quartData, minDate, maxDate, "DD");
                }
            }
            page.getPd().put("quartData", quartData.toString());
        }

		/**
		* @Description: 设置季度
		* @param: "[quartData, theDate, index]"
		* @Return: void
		*/
		private void setQuaterData(StringBuffer quartData, String theDate, String index, String flag){
			String year = theDate.substring(0, 4);
			String first = year + "年"+index+"季度" + flag+ year;
			if(!quartData.toString().contains(first)){
				if(!StringUtils.isEmpty(quartData.toString())){
					quartData.append("、");
				}
				quartData.append(first);
			}
		}

		/**
		* @Description: 设置具体区间
		* @param: "[quartData, theDate, index]"
		* @Return: void
		*/
		private void setQuaterTime(StringBuffer quartData, String startDate, String endDate, String flag) {
			//设置具体区间
			String year = startDate.substring(0, 4);
			String sd = startDate.replace("-", "/");
			String ed = endDate.replace("-", "/");
			String time = sd + "-" + ed + flag+ year;
			if (!quartData.toString().contains(time)) {
				if (!StringUtils.isEmpty(quartData.toString())) {
					quartData.append("、");
				}
				quartData.append(time);
			}
		}

		/**
		* @Description: 查询指定日期本年四个季度的开始和结束日期或者系统日期当年的四个季度
		* @param: "[page, flag, time]"
		* @Return: void
		*/
        private void getCurrentYearQuarterDate(Page page, boolean flag, String time) throws Exception {
            Calendar cal3 = Calendar.getInstance();

            if (flag) {
                Date date = new SimpleDateFormat("yyyy-MM-dd").parse(time);
                cal3.setTime(date);
            }

            cal3.set(Calendar.DAY_OF_YEAR, 1);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String FiirstQuarterStart = sdf.format(cal3.getTime());

            cal3.set(Calendar.MONTH, 2);
            cal3.roll(Calendar.DATE, -1);
            String FiirstQuarterEnd = sdf.format(cal3.getTime());

            cal3.set(Calendar.MONTH, 3);
            cal3.set(Calendar.DATE, 1);
            String SecondQuarterStart = sdf.format(cal3.getTime());

            cal3.set(Calendar.MONTH, 5);
            cal3.roll(Calendar.DATE, -1);
            String SecondQuarterEnd = sdf.format(cal3.getTime());

            cal3.set(Calendar.MONTH, 6);
            cal3.set(Calendar.DATE, 1);
            String ThirdQuarterStart = sdf.format(cal3.getTime());

            cal3.set(Calendar.MONTH, 8);
            cal3.roll(Calendar.DATE, -1);
            String ThirdQuarterEnd = sdf.format(cal3.getTime());

            cal3.set(Calendar.MONTH, 9);
            cal3.set(Calendar.DATE, 1);
            String FourQuarterStart = sdf.format(cal3.getTime());

            cal3.set(Calendar.MONTH, 11);
            cal3.roll(Calendar.DATE, -1);
            String FourQuarterEnd = sdf.format(cal3.getTime());
//			logger.info("------ 年度区间:" + FiirstQuarterStart + "~" + FourQuarterEnd + " ------");

            page.getPd().put("FiirstQuarterStart", FiirstQuarterStart);
            page.getPd().put("FiirstQuarterEnd", FiirstQuarterEnd);
            page.getPd().put("SecondQuarterStart", SecondQuarterStart);
            page.getPd().put("SecondQuarterEnd", SecondQuarterEnd);
            page.getPd().put("ThirdQuarterStart", ThirdQuarterStart);
            page.getPd().put("ThirdQuarterEnd", ThirdQuarterEnd);
            page.getPd().put("FourQuarterStart", FourQuarterStart);
            page.getPd().put("FourQuarterEnd", FourQuarterEnd);
        }

		/**
		* @Description: 设置季度费用,flag: AA  BB  CC  DD
		* @param: "[page, pd, StartDate, EndDate, flag]"
		* @Return: void
		* @Author: supenghui
		* @Date: 2021/7/5 15:01
		*/
        private void setSumFee(Page page, PageData pd, String StartDate, String EndDate, String flag) throws Exception {
            String FeeTypeCode = pd.getString("FeeTypeCode"); //投资管理费 20  托管费 30   受托费 10
            String DataFlag = pd.getString("DataFlag"); //支付时间 02  组合合计 00   费用 01
            String NetFeeTypeCode = pd.getString("NetFeeTypeCode"); //受托费 01 托管费 02 投管费 03
            page.getPd().put("StartDate", StartDate);
            page.getPd().put("EndDate", EndDate);
            page.getPd().put("NetFeeTypeCode", NetFeeTypeCode);


            if ("00".equals(DataFlag)) { //组合合计
                List<PageData> dataList = (List<PageData>) dao.findForList("reportQueryMapper.queryPortfeeSum", page);
                if (dataList.size() > 0 && dataList.get(0) != null) {
                    String year = StartDate.substring(0, 4);
                    pd.put(flag + year, dataList.get(0).getString("PortfeeSum"));
                }
                String FeeDateStart = (String) page.getPd().get("FeeDateStart");//费用起期
                String FeeDateEnd = (String) page.getPd().get("FeeDateEnd");//费用止期
                //管理费合计
                if (StringUtils.isEmpty(FeeDateStart) && StringUtils.isEmpty(FeeDateEnd)) {
                    page.getPd().put("StartDate", page.getPd().getString("FiirstQuarterStart"));
                    page.getPd().put("EndDate", page.getPd().getString("FourQuarterEnd"));
                } else {
                    page.getPd().put("StartDate", FeeDateStart);
                    page.getPd().put("EndDate", FeeDateEnd);
                }
                List<PageData> dataList2 = (List<PageData>) dao.findForList("reportQueryMapper.queryPortfeeSum", page);
                if (dataList2.size() > 0 && dataList2.get(0) != null) {
                    pd.put("MngSumFee", dataList2.get(0).getString("PortfeeSum"));
                }


            } else if ("01".equals(DataFlag)) { //组合费用
                //支付时间加上,为了上色
                List<PageData> portPayDateList = (List<PageData>) dao.findForList("reportQueryMapper.queryPortPayDate", page);
                if (portPayDateList.size() > 0 && portPayDateList.get(0) != null) {
                    String year = StartDate.substring(0, 4);
                    if ("10".equals(FeeTypeCode)) {
                        pd.put(flag + year + "payDate", portPayDateList.get(0).getString("ActurlSectionDate"));
                    } else if ("20".equals(FeeTypeCode)) {
                        pd.put(flag + year + "payDate", portPayDateList.get(0).getString("ActurlSectionDate"));
                    } else if ("30".equals(FeeTypeCode)) {
                        pd.put(flag + year + "payDate", portPayDateList.get(0).getString("ActurlSectionDate"));
                    }
                }

                List<PageData> dataList = (List<PageData>) dao.findForList("reportQueryMapper.querySumQuarter", page);

                if (dataList.size() > 0 && dataList.get(0) != null) {
                    String year = StartDate.substring(0, 4);
                    if ("10".equals(FeeTypeCode)) {
                        pd.put(flag + year, dataList.get(0).getString("TrustfeeSum"));
                    } else if ("20".equals(FeeTypeCode)) {
                        pd.put(flag + year, dataList.get(0).getString("InvestfeeSum"));
                    } else if ("30".equals(FeeTypeCode)) {
                        pd.put(flag + year, dataList.get(0).getString("EscrowfeeSum"));
                    }
                }

                String FeeDateStart = (String) page.getPd().get("FeeDateStart");//费用起期
                String FeeDateEnd = (String) page.getPd().get("FeeDateEnd");//费用止期
                //管理费合计
                if (StringUtils.isEmpty(FeeDateStart) && StringUtils.isEmpty(FeeDateEnd)) {
                    page.getPd().put("StartDate", page.getPd().getString("FiirstQuarterStart"));
                    page.getPd().put("EndDate", page.getPd().getString("FourQuarterEnd"));
                } else {
                    page.getPd().put("StartDate", FeeDateStart);
                    page.getPd().put("EndDate", FeeDateEnd);
                }
                List<PageData> sumDataList = (List<PageData>) dao.findForList("reportQueryMapper.querySumQuarter", page);

                if (sumDataList.size() > 0 && sumDataList.get(0) != null) {
                    if ("10".equals(FeeTypeCode)) {
                        pd.put("MngSumFee", sumDataList.get(0).getString("TrustfeeSum"));
                    } else if ("20".equals(FeeTypeCode)) {
                        pd.put("MngSumFee", sumDataList.get(0).getString("InvestfeeSum"));
                    } else if ("30".equals(FeeTypeCode)) {
                        pd.put("MngSumFee", sumDataList.get(0).getString("EscrowfeeSum"));
                    }
                }

            } else if ("02".equals(DataFlag)) { //支付时间
                List<PageData> portPayDateList = (List<PageData>) dao.findForList("reportQueryMapper.queryPortPayDate", page);
                if (portPayDateList.size() > 0 && portPayDateList.get(0) != null) {
                    String year = StartDate.substring(0, 4);
                    if ("10".equals(FeeTypeCode)) {
                        pd.put(flag + year, portPayDateList.get(0).getString("ActurlSectionDate"));
                    } else if ("20".equals(FeeTypeCode)) {
                        pd.put(flag + year, portPayDateList.get(0).getString("ActurlSectionDate"));
                    } else if ("30".equals(FeeTypeCode)) {
                        pd.put(flag + year, portPayDateList.get(0).getString("ActurlSectionDate"));
                    }
                }

            } else if ("09".equals(DataFlag)) { //计划级 - 费用
                String PlanCode = pd.getString("PlanCode");
                page.getPd().put("PlanCode_pp", PlanCode);

                //查询一个组合支付频率作为计划级的频率
                List<PageData> payCycleList = (List<PageData>) dao.findForList("reportQueryMapper.queryPlanPayCycle", page);

                if (payCycleList.size() > 0 && payCycleList.get(0) != null) {
                    pd.put("Plan_PayCycle", payCycleList.get(0).getString("PayCycle"));
                }

                List<PageData> dataList = (List<PageData>) dao.findForList("reportQueryMapper.queryPlanSumQuarter", page);

                if (dataList.size() > 0 && dataList.get(0) != null) {
                    String year = StartDate.substring(0, 4);
                    if ("10".equals(FeeTypeCode)) {
                        pd.put(flag + year, dataList.get(0).getString("TrustfeeSum"));
                    } else if ("20".equals(FeeTypeCode)) {
                        pd.put(flag + year, dataList.get(0).getString("InvestfeeSum"));
                    } else if ("30".equals(FeeTypeCode)) {
                        pd.put(flag + year, dataList.get(0).getString("EscrowfeeSum"));
                    }
                }

                String FeeDateStart = (String) page.getPd().get("FeeDateStart");//费用起期
                String FeeDateEnd = (String) page.getPd().get("FeeDateEnd");//费用止期
                //管理费合计
                if (StringUtils.isEmpty(FeeDateStart) && StringUtils.isEmpty(FeeDateEnd)) {
                    page.getPd().put("StartDate", page.getPd().getString("FiirstQuarterStart"));
                    page.getPd().put("EndDate", page.getPd().getString("FourQuarterEnd"));
                } else {
                    page.getPd().put("StartDate", FeeDateStart);
                    page.getPd().put("EndDate", FeeDateEnd);
                }
                List<PageData> sumDataList = (List<PageData>) dao.findForList("reportQueryMapper.queryPlanSumQuarter", page);

                if (sumDataList.size() > 0 && sumDataList.get(0) != null) {
                    if ("10".equals(FeeTypeCode)) {
                        pd.put("MngSumFee", sumDataList.get(0).getString("TrustfeeSum"));
                    } else if ("20".equals(FeeTypeCode)) {
                        pd.put("MngSumFee", sumDataList.get(0).getString("InvestfeeSum"));
                    } else if ("30".equals(FeeTypeCode)) {
                        pd.put("MngSumFee", sumDataList.get(0).getString("EscrowfeeSum"));
                    }
                }

            } else if ("10".equals(DataFlag)) { //计划级 - 计划合计
                List<PageData> dataList = (List<PageData>) dao.findForList("reportQueryMapper.queryPlanPortfeeSum", page);
                if (dataList.size() > 0 && dataList.get(0) != null) {
                    String year = StartDate.substring(0, 4);
                    pd.put(flag + year, dataList.get(0).getString("PortfeeSum"));
                }
                String FeeDateStart = (String) page.getPd().get("FeeDateStart");//费用起期
                String FeeDateEnd = (String) page.getPd().get("FeeDateEnd");//费用止期
                //管理费合计
                if (StringUtils.isEmpty(FeeDateStart) && StringUtils.isEmpty(FeeDateEnd)) {
                    page.getPd().put("StartDate", page.getPd().getString("FiirstQuarterStart"));
                    page.getPd().put("EndDate", page.getPd().getString("FourQuarterEnd"));
                } else {
                    page.getPd().put("StartDate", FeeDateStart);
                    page.getPd().put("EndDate", FeeDateEnd);
                }
                List<PageData> dataList2 = (List<PageData>) dao.findForList("reportQueryMapper.queryPlanPortfeeSum", page);
                if (dataList2.size() > 0 && dataList2.get(0) != null) {
                    pd.put("MngSumFee", dataList2.get(0).getString("PortfeeSum"));
                }

            } else if ("20".equals(DataFlag)) { //总合计 - 费用合计
                List<PageData> dataList = (List<PageData>) dao.findForList("reportQueryMapper.querySumTotalfeeSum", page);
                if (dataList.size() > 0 && dataList.get(0) != null) {
                    String year = StartDate.substring(0, 4);
                    if ("10".equals(FeeTypeCode)) {
                        pd.put(flag + year, dataList.get(0).getString("TrustfeeSum"));
                    } else if ("20".equals(FeeTypeCode)) {
                        pd.put(flag + year, dataList.get(0).getString("InvestfeeSum"));
                    } else if ("30".equals(FeeTypeCode)) {
                        pd.put(flag + year, dataList.get(0).getString("EscrowfeeSum"));
                    }
                }
                String FeeDateStart = (String) page.getPd().get("FeeDateStart");//费用起期
                String FeeDateEnd = (String) page.getPd().get("FeeDateEnd");//费用止期
                //管理费合计
                if (StringUtils.isEmpty(FeeDateStart) && StringUtils.isEmpty(FeeDateEnd)) {
                    page.getPd().put("StartDate", page.getPd().getString("FiirstQuarterStart"));
                    page.getPd().put("EndDate", page.getPd().getString("FourQuarterEnd"));
                } else {
                    page.getPd().put("StartDate", FeeDateStart);
                    page.getPd().put("EndDate", FeeDateEnd);
                }
                List<PageData> dataList2 = (List<PageData>) dao.findForList("reportQueryMapper.querySumTotalfeeSum", page);
                if (dataList2.size() > 0 && dataList2.get(0) != null) {
                    if ("10".equals(FeeTypeCode)) {
                        pd.put("MngSumFee", dataList2.get(0).getString("TrustfeeSum"));
                    } else if ("20".equals(FeeTypeCode)) {
                        pd.put("MngSumFee", dataList2.get(0).getString("InvestfeeSum"));
                    } else if ("30".equals(FeeTypeCode)) {
                        pd.put("MngSumFee", dataList2.get(0).getString("EscrowfeeSum"));
                    }
                }

            } else if ("30".equals(DataFlag)) { //总合计 - 总合计
                List<PageData> dataList = (List<PageData>) dao.findForList("reportQueryMapper.querySumTotalSum", page);
                if (dataList.size() > 0 && dataList.get(0) != null) {
                    String year = StartDate.substring(0, 4);
                    pd.put(flag + year, dataList.get(0).getString("TotalfeeSum"));
                }
                String FeeDateStart = (String) page.getPd().get("FeeDateStart");//费用起期
                String FeeDateEnd = (String) page.getPd().get("FeeDateEnd");//费用止期
                //管理费合计
                if (StringUtils.isEmpty(FeeDateStart) && StringUtils.isEmpty(FeeDateEnd)) {
                    page.getPd().put("StartDate", page.getPd().getString("FiirstQuarterStart"));
                    page.getPd().put("EndDate", page.getPd().getString("FourQuarterEnd"));
                } else {
                    page.getPd().put("StartDate", FeeDateStart);
                    page.getPd().put("EndDate", FeeDateEnd);
                }
                List<PageData> dataList2 = (List<PageData>) dao.findForList("reportQueryMapper.querySumTotalSum", page);
                if (dataList2.size() > 0 && dataList2.get(0) != null) {
                    pd.put("MngSumFee", dataList2.get(0).getString("TotalfeeSum"));
                }

            }

        }

因部分原因,有些代码不方便展示,如有问题,请往下看 以上部分就完了动态生成表头列

效果展示

在这里插入图片描述
在这里插入图片描述


author:su1573
鄙人记录生活点滴,学习并分享,请多指教!!!
如需交流,请联系 sph1573@163.com,鄙人看到会及时回复

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ssy03092919

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值