参考代码
public List<SalaryDetail> monthFormListFormat(List<SalaryDetail> oriSalaryList) {
//未作任何处理的list
if(oriSalaryList==null||oriSalaryList.size()==0)
return null;
int len = oriSalaryList.size();
//目的List
List<SalaryDetail> desSalaryList = oriSalaryList;
//第一行的对象
SalaryDetail firstLineSalary = oriSalaryList.get(0);
//小计的对象
SalaryDetail subtotalSalary = new SalaryDetail();
//最后总计的对象
SalaryDetail sumtotalSalary = new SalaryDetail();
//存放小计对象的位置,以及小计对象
Map<Integer,SalaryDetail> subtotalMap = new HashMap<Integer,SalaryDetail>();
//插入了几行数据
int n = 0;
for(int i = 0;i<len;i++){
if(firstLineSalary.getUserType().equals(oriSalaryList.get(i).getUserType())) {
if(i==len-1){
subtotalSalary = getSubTotalSum(subtotalSalary, oriSalaryList.get(i),"1");
subtotalSalary.setUserType("小计");
subtotalSalary.setRowSpanCount(1);
subtotalMap.put(i, subtotalSalary);
sumtotalSalary = getSubTotalSum(sumtotalSalary, subtotalSalary,"1");
break;
}
//如果用户类型相同则进行相加,以便得到小计的值
subtotalSalary = getSubTotalSum(subtotalSalary, oriSalaryList.get(i),"1");
}else{
if(i==len-1){
//把最后一条记录以上的计算一下,并清空【小计】
subtotalSalary.setUserType("小计");
subtotalSalary.setRowSpanCount(1);
sumtotalSalary = getSubTotalSum(sumtotalSalary, subtotalSalary,"1");
subtotalMap.put(i-1, subtotalSalary);
subtotalSalary = new SalaryDetail();
//最后一条记录的处理
subtotalSalary = getSubTotalSum(subtotalSalary, oriSalaryList.get(i),"1");
subtotalSalary.setUserType("小计");
subtotalSalary.setRowSpanCount(1);
sumtotalSalary = getSubTotalSum(sumtotalSalary, subtotalSalary,"1");
subtotalMap.put(i, subtotalSalary);
break;
}
//把每种用户类型的第一行修改,并在List副本里面加上一个小计的对象,
firstLineSalary = oriSalaryList.get(i);
subtotalSalary.setUserType("小计");
subtotalSalary.setRowSpanCount(1);
subtotalMap.put(i-1, subtotalSalary);
sumtotalSalary = getSubTotalSum(sumtotalSalary, subtotalSalary,"1");
subtotalSalary = new SalaryDetail();
//把新的“第一个值”增加到小计中
subtotalSalary = getSubTotalSum(subtotalSalary, firstLineSalary,"1");
}
}
for(int i = oriSalaryList.size()-1;i>=0;i--){
if(subtotalMap.containsKey(i)){
// if(i == oriSalaryList.size()-1){
oriSalaryList.add(i+1,subtotalMap.get(i));
// }else{
// oriSalaryList.add(i,subtotalMap.get(i));
// }
}
}
//插入最后一列
sumtotalSalary.setUserType("总计");
sumtotalSalary.setRowSpanCount(1);
desSalaryList.add(desSalaryList.size(), sumtotalSalary);
//新的第一行
firstLineSalary = oriSalaryList.get(0);
len = oriSalaryList.size();
int rowSpan = 0;
//加上rowspan
for(int i = 0;i<len;i++){
if(i<len-1){
SalaryDetail nextLineSalary = oriSalaryList.get(i+1);
if("小计".equals(nextLineSalary.getUserType())||"总计".equals(nextLineSalary.getUserType())){
if(!"小计".equals(firstLineSalary.getUserType())&&!"总计".equals(firstLineSalary.getUserType())){
firstLineSalary.setRowSpanCount(rowSpan+1);
}
continue;
}
if(firstLineSalary.getUserType().equals(nextLineSalary.getUserType())){
rowSpan ++;
firstLineSalary.setRowSpanCount(rowSpan+1);
}else{
rowSpan = 0;
firstLineSalary = nextLineSalary;
}
}
}
return oriSalaryList;
}
/**
* 把原对象的值和目的对象的值相加,并返回目的对象
* @param desSalary
* @param oriSalary
* @return
*/
private SalaryDetail getSubTotalSum(SalaryDetail desSalary,SalaryDetail oriSalary,String flg){
//desSalary.setUserType("小计");
if("1".equals(flg)){
desSalary.setEleYjdf(oriSalary.getEleYjdf()+(desSalary.getEleYjdf()==null?0:desSalary.getEleYjdf()));
desSalary.setEleJxzxh(oriSalary.getEleJxzxh()+(desSalary.getEleJxzxh()==null?0:desSalary.getEleJxzxh()));
desSalary.setEleHgkjxs(oriSalary.getEleHgkjxs()+(desSalary.getEleHgkjxs()==null?0:desSalary.getEleHgkjxs()));
desSalary.setEleYdkhxs(oriSalary.getEleYdkhxs()+(desSalary.getEleYdkhxs()==null?0:desSalary.getEleYdkhxs()));
desSalary.setEleGlkpxs(oriSalary.getEleGlkpxs()+(desSalary.getEleGlkpxs()==null?0:desSalary.getEleGlkpxs()));//管理考评
//desSalary.setEleTcbl(oriSalary.getEleTcbl()+(desSalary.getEleTcbl()==null?0:desSalary.getEleTcbl()));//提成比例,不需要进行计算
}
if("2".equals(flg)){
//设置虚拟的编号
desSalary.setVid(oriSalary.getVid());
desSalary.setUserCount(oriSalary.getUserCount()+desSalary.getUserCount());
}
desSalary.setEleQmkhzc(oriSalary.getEleQmkhzc()+(desSalary.getEleQmkhzc()==null?0:desSalary.getEleQmkhzc()));//期末客户资产
desSalary.setEleYjfy(oriSalary.getEleYjfy()+(desSalary.getEleYjfy()==null?0:desSalary.getEleYjfy()));//一级费用
desSalary.setEleCjl(oriSalary.getEleCjl()+(desSalary.getEleCjl()==null?0:desSalary.getEleCjl()));
desSalary.setEleSsyj(oriSalary.getEleSsyj()+(desSalary.getEleSsyj()==null?0:desSalary.getEleSsyj()));//实收佣金
desSalary.setEleYysjfj(oriSalary.getEleYysjfj()+(desSalary.getEleYysjfj()==null?0:desSalary.getEleYysjfj()));//营业税及附加
desSalary.setEleTzzbhjj(oriSalary.getEleTzzbhjj()+(desSalary.getEleTzzbhjj()==null?0:desSalary.getEleTzzbhjj()));//投资者保护基金
desSalary.setOthField1(oriSalary.getOthField1()+(desSalary.getOthField1()==null?0:desSalary.getOthField1()));//净佣金
desSalary.setEleYyjjsr(oriSalary.getEleYyjjsr()+(desSalary.getEleYyjjsr()==null?0:desSalary.getEleYyjjsr()));//月佣金净收入
desSalary.setSalYxtc(oriSalary.getSalYxtc()+(desSalary.getSalYxtc()==null?0:desSalary.getSalYxtc()));
desSalary.setSalJbgzBefore(oriSalary.getSalJbgzBefore()+(desSalary.getSalJbgzBefore()==null?0:desSalary.getSalJbgzBefore())); //调整前基本工资
desSalary.setSalJbgz(oriSalary.getSalJbgz()+(desSalary.getSalJbgz()==null?0:desSalary.getSalJbgz()));
desSalary.setSalGljt(oriSalary.getSalGljt()+(desSalary.getSalGljt()==null?0:desSalary.getSalGljt()));
desSalary.setSalKhjljcj(oriSalary.getSalKhjljcj()+(desSalary.getSalKhjljcj()==null?0:desSalary.getSalKhjljcj()));
desSalary.setSalJjrjcj(oriSalary.getSalJjrjcj()+(desSalary.getSalJjrjcj()==null?0:desSalary.getSalJjrjcj()));
desSalary.setSalJxzxhj(oriSalary.getSalJxzxhj()+(desSalary.getSalJxzxhj()==null?0:desSalary.getSalJxzxhj()));
desSalary.setSalZqfxsczgj(oriSalary.getSalZqfxsczgj()+(desSalary.getSalZqfxsczgj()==null?0:desSalary.getSalZqfxsczgj()));
desSalary.setSalQtcxwsr(oriSalary.getSalQtcxwsr()+(desSalary.getSalQtcxwsr()==null?0:desSalary.getSalQtcxwsr()));
desSalary.setSalZyf(oriSalary.getSalZyf()+(desSalary.getSalZyf()==null?0:desSalary.getSalZyf()));
desSalary.setSalJjx(oriSalary.getSalJjx()+(desSalary.getSalJjx()==null?0:desSalary.getSalJjx()));
desSalary.setSalYfs(oriSalary.getSalYfs()+(desSalary.getSalYfs()==null?0:desSalary.getSalYfs()));
desSalary.setRzrqYxjl(oriSalary.getRzrqYxjl()+(desSalary.getRzrqYxjl()==null?0:desSalary.getRzrqYxjl()));
desSalary.setSalCpxsjl(oriSalary.getSalCpxsjl()+(desSalary.getSalCpxsjl()==null?0:desSalary.getSalCpxsjl()));
desSalary.setSalCpxssy(oriSalary.getSalCpxssy()+(desSalary.getSalCpxssy()==null?0:desSalary.getSalCpxssy()));
desSalary.setSalCpyjbl(oriSalary.getSalCpyjbl()+(desSalary.getSalCpyjbl()==null?0:desSalary.getSalCpyjbl()));
return desSalary;
}
分享到:
相关推荐
jsp下中国式复杂报表的设计及应用
应用java后端技术与pdf-box模板技术将应用中的数据整理汇总,导出为pdf报表的形式,可以保存为pdf文件,便于打印等操作,并且支持多种语言的操作。
整合java报表制作的一些文档,汇总在一起了,有需要的朋友值得下载一下,省地费时间去找
手把手__SELENIUM_JAVA搭建_总结汇总篇
3.6.3 在报表中加入交叉报表 28 3.6.4 数据准备 29 3.6.5 向交叉表插入数据 32 3.6.6 加入汇总 33 3.6.7 格式化报表 34 3.7 嵌套报表 35 3.7.1 构建数据源 36 3.7.2 构建数据集 36 3.7.3 布局嵌套报表 38 3.7.4 将...
java对文档的读写操作,盖里是关于一个报表的统计汇总处理。
具有完备的报表填报功能,支持多级汇总填报。 有了FineReport报表工具,在软件开发过程中,可以革命性的加快开发速度,提高软件的稳定性;在软件交付后,可以大大的降低维护难度,提高最终用户的满意度。开发出的...
打印功能 内置动态积木报表,支持自定义打印模板 统计报表 日收费报表、商铺租售比例统计、费用汇总表等 协同办公 工作流设计器、我的待办已办、报修流程、投诉流程 后端运行 1、导入到Eclipse,菜单 File -> Import...
所有查询结果均可导出成excel文件进行保存、打印,可对医院报告的传染病情况报表进行汇总、统计、分析。重点研究的问题:如何通过RBAC进行角色与用户之间的权限管理。如何通过对依医院以及所属地区为单位进行人群的...
该系统主要用于办公室文档管理、人员管理、日程安排等功能,通过JAVA语言开发客户端软件,使用MySQL数据库进行数据存储,实现了文档管理、人员信息管理、日程安排、报表查询等功能。 文档管理模块实现了对办公文档的增...
一个使用Java语言开发,以国内开源Web MVC框架EasyJWeb作系统引擎的Java Web应用系统,主要实现的功能有订单录入、打印、销售汇总、原料管理、客户管理、生产配料计算、报表打印、汇总、系统数据管理及维护等功能,...
该系统是一个使用Java语言开发,系统主要实现的功能有订单录入、打印,销售汇总、原料管理、客户管理、生产配料计算、报表打印、汇总、系统数据管理及维护等功能,是一个使用非常简单的编码方式实现的Web开源应用系统...
系统主要实现的功能有订单录入、打印,销售汇总、原料管理、客户管理、生产配料计算、报表打印、汇总、系统数据管理及维护等功能,是一个使用非常简单的编码方式实现的Web开源应用系统。 系统采用面向对象的设计...
系统主要实现的功能有订单录入、打印,销售汇总、原料管理、客户管理、生产配料计算、报表打印、汇总、系统数据管理及维护等功能,是一个使用非常简单的编码方式实现的Web开源应用系统。 系统采用面向对象的设计...
easyPoi模板导出Excel报表(xls 和xlsx 都支持)
按日消费额汇总统计实现的月结账功能。 按日营业额实现的年结账功能。 系统运行稳定、安全可靠。 操作注意事项 (1)本系统管理员用户名为:Tsoft,密码为:111。 (2)用户首次登录时,需要添加一个新用户,...
系统主要实现的功能有订单录入、打印,销售汇总、原料管理、客户管理、生产配料计算、报表打印、汇总、系统数据管理及维护等功能,是一个使用非常简单的编码方式实现的Web开源应用系统。 系统采用面向对象的设计...
FineReport报表工具提供了易用且高效率的报表设计方案,采用主流的数据双向扩展,真正无编码形式设计报表;拥有强大的报表展示功能,并且提供完善的报表权限管理,报表...具有完备的报表填报功能,支持多级汇总填报。
报表查询:库存状况、结算账户、进货统计、销售统计、入库明细、出库明细、入库汇总、出库汇总、客户对账、供应商对账、库存预警; 商品管理:商品类别、商品信息、计量单位、序列号; 基本资料:供应商信息、客户...