需求说明:将行业税利指标分析的税金、利润图形分开,并加上一个税利合计,并按单选按钮形式显示这三个的相应图形。
原界面:原图.png
目标界面:目标1.png
目标2.png
目标3.png
主要改动文件:
ZJ_Produce_AnalyseAction.java的taxshow()方法:
public ActionForward taxshow(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
DynaActionForm aForm = (DynaActionForm) form;
if(aForm.get("beginYear")==null || aForm.get("beginYear").equals("")){
aForm.set("beginYear", MethodFactory.getCurrentYear());
}
if(aForm.get("beginMonth")==null || aForm.get("beginMonth").equals("")){
aForm.set("beginMonth", "04");
}
CallHelper helper = initializeCallHelper("getTaxIndexAnalyseShow", form, request, false);
helper.execute();
request.setAttribute("result.List",helper.getResult(1));
request.setAttribute("caption.List",helper.getResult(0));
List ret1=helper.getResult(2);
String values1="";
String values2="";
if (ret1 != null && ret1.size() > 0) {
for (int i = 1; i < ret1.size(); i++) {
BasicDynaBean bean2 = (BasicDynaBean) ret1.get(i);
values1=values1+i+MethodFactory.getThisString(bean2.get("name")).substring(0, 2)+","
+MethodFactory.getThisString(bean2.get("taxbq"))+","
+MethodFactory.getThisString(bean2.get("pbq"))+";";
values2=values2+i+MethodFactory.getThisString(bean2.get("name")).substring(0, 2)+","
+MethodFactory.getThisString(bean2.get("pbq"))+";";
}
}
request.setAttribute("values1",values1);
request.setAttribute("values2",values2);
return mapping.findForward("taxshow");
}
ChartObjest.js对应方法:
ChartObject.prototype.createStackedColumn2DXml=function(values,caption)
{
var xmlstr = this.getTitleString();
var values1 = values.split(";");
var caption1=caption.split(",");
var dataset =new Array();
var color="F984A1,A66EDD,8BBA00,F6BD0F,AFD8F8";
var colors=color.split(",");
var datasetall="";
var tempstr="";
var lables="";
for(i=0;i<caption1.length;i++)
/*How many datasets*/
{
tempstr="";
if(i<5)
dataset[i]="<dataset seriesName='"+caption1[i]+"' showValues='1' color='"+colors[i]+"' >";
else
dataset[i]="<dataset seriesName='"+caption1[i]+"' showValues='1'>";
for(j=0;j<values1.length;j++)
{
var values2=values1[j].split(",");
if(i==0) lables=lables+"<category label='"+values2[0]+"' />";
tempstr=tempstr+ "<set value='" +values2[i+1]+"' />";
}
dataset[i]=dataset[i] +tempstr+"</dataset>";
datasetall=datasetall+dataset[i];
}
xmlstr=xmlstr+"<categories>"+lables+"</categories>"+datasetall+"</chart>";
return xmlstr;
}
ZJ_TaxIndexShow.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="/zl-html" prefix="select" %>
<%@ taglib uri="/struts-bean" prefix="bean" %>
<%@ taglib uri="/struts-html" prefix="html" %>
<%@ taglib uri="/zl-grid" prefix="grid"%>
<%@ page import="com.publicConstValue"%>
<HTML>
<style>
<!--
.content {color: #FF0000 }
-->
</style>
<HEAD>
<TITLE><%=publicConstValue.getInstance().getSystemName()%></TITLE>
</HEAD>
<%@include file="/common/Common.jsp"%>
<link type="text/css" rel="stylesheet" href=<select:link page="/css/main.css"></select:link>>
<link type="text/css" rel="stylesheet"
href=<select:link page="/tabpane/standard.css"/>></link>
<script type="text/javascript"
src=<select:link page="/tabpane/standard.js"/>></script>
<script language="javaScript">
parent.document.all["showform"].disabled= false;
window.onload = function showChart(){
showChart1(0);
}
function showChart1(type){
var allvalue='<%=request.getAttribute("values1")%>';
var taxvalue='<%=request.getAttribute("values2")%>';
var codename = '';
var caption = '';
var chartObj = new ChartObject();
var caption="";
var xmlString="";
chartObj.useRoundEdges='1';
if (type=='0')
{ caption="税金,利润";
chartObj.caption="税利合计";
xmlString = chartObj.createStackedColumn2DXml(allvalue,caption);
}
else
if (type=='1') { caption="税金"; chartObj.caption="税金"; xmlString= chartObj.createStackedColumn2DXml(allvalue,caption);}
else { caption="利润";chartObj.caption="利润"; xmlString= chartObj.createStackedColumn2DXml(taxvalue,caption);}
var chart = new FusionCharts("Charts/StackedColumn2D.swf", "ChartId3", "950", "350", "0", "0");
chart.setDataXML(xmlString);
chart.render("chartDiv1");
}
</script>
<BODY>
<html:form action="/ZJ_Produce_AnalyseAction.do?method=taxshow">
<html:hidden property="beginYear"/>
<html:hidden property="beginMonth"/>
<html:hidden property="information"/>
<html:hidden property="temp1"/>
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=tab-on align=center id=navcell name="navcell" οnclick=switchCell(1)> 数据展示 </TD>
<TD class=tab-off align=center id=navcell name="navcell" οnclick=switchCell(2)> 图形展示</TD>
<TD class="tab-none"> </TD>
</TR>
</TBODY>
</table>
<!-- 每个TAB开始 -->
<TABLE class=tab-content id=tb cellSpacing=5 cellPadding=0 width="100%" height="100%" border=0 name="tb">
<TR>
<TD vAlign=top align="left">
<grid:gridreport reportcaption="行业税利指标分析" property="sheetgrid" collection="result.List" caption="caption.List" merge="true" mergetype="0" height="100%" width="100%" serial="true" />
</TD>
</TR>
</TABLE>
<!-- 每个TAB开始 -->
<TABLE class=tab-content id=tb cellSpacing=5 cellPadding=0 width="100%" height="100%" border=1 name="tb">
<tr valign="top" height="4%">
<td colspan="2"><input type=radio name="queryoption" checked="checked" οnclick="showChart1('0')">税利合计
<input type=radio name="queryoption" οnclick="showChart1('1')">税金
<input type=radio name="queryoption" οnclick="showChart1('2')">利润
<!--
<input type=button class="btn" name="query" value="隐藏报表" οnclick="hide()"></input>
-->
</td>
</tr>
<TR>
<TD>
<div id="chartDiv1" ></div>
</TD>
</TR>
</TABLE>
</td>
</tr>
</table>
</html:form>
<script language="javaScript">
</script>
</BODY>
</HTML>
另外还有相关存储过程文件:
DROP PROCEDURE G_getTaxIndexAnalyseShow
@
CREATE PROCEDURE G_getTaxIndexAnalyseShow
(
IN v_year int,
IN v_month int
)
LANGUAGE SQL
DYNAMIC RESULT SETS 3
BEGIN
DECLARE SQLCODE INT;
DECLARE SQLSTATE CHAR(5);
DECLARE v_errCode INT DEFAULT 0;
DECLARE v_errState CHAR(5) DEFAULT '00000';
DECLARE v_rows int DEFAULT 5;
DECLARE v_begintime int;
DECLARE v_endtime int;
DECLARE v_tqbegintime int;
DECLARE v_tqendtime int;
DECLARE not_found CONDITION FOR '02000'; -- 没有数据,游标结尾定义
--------------------------------------------------------
-- DECLARE ERROR HANDLERS
--------------------------------------------------------
SET v_begintime=v_year*100+1;
SET v_endtime=v_year*100+v_month;
SET v_tqbegintime=v_begintime-100;
SET v_tqendtime=v_endtime-100;
--标题
DECLARE GLOBAL TEMPORARY TABLE captions
(
caption VARCHAR(200),
width INT,
property VARCHAR(40),
format VARCHAR(20),
fixcol INT,
align VARCHAR(20),
ordertag int,
lable VARCHAR(20),
isreturn VARCHAR(10),
TYPE VARCHAR(10)
) ON COMMIT PRESERVE ROWS WITH REPLACE NOT LOGGED;
DECLARE GLOBAL TEMPORARY TABLE results
(
code VARCHAR(10),
name VARCHAR(100),
ordertag VARCHAR(20),
pamtbq decimal(19,2), --本期自产产量
pamttq decimal(19,2), --同期产量
samtbq decimal(19,2), --本期销量
samttq decimal(19,2), --同期销量
hjbq decimal(19,2), --本期税利合计
hjtq decimal(19,2), --同期税利合计
ratio1 decimal(19,2),--增幅
ratio2 decimal(19,2), --%
taxbq decimal(19,2), --本期税金
taxtq decimal(19,2), --同期税金
ratio3 decimal(19,2),
ratio4 decimal(19,2),
pbq decimal(19,2), --本期利润
ptq decimal(19,2), --同期利润
ratio5 decimal(19,2),
ratio6 decimal(19,2)
) ON COMMIT DELETE ROWS WITH REPLACE NOT LOGGED;
INSERT INTO session.results(code,name,ordertag,pamtbq,pamttq,samtbq,samttq,hjbq,hjtq,taxbq,taxtq,pbq,ptq)
SELECT a.code,b.name,b.ordertag,a.pamtbq,a.pamttq,a.samtbq,a.samttq,c.hjbq,c.hjtq,c.taxbq,c.taxtq,c.pbq,c.ptq
FROM (
select CASE WHEN a.industrycode IN ('12530401','12530104') THEN '20530001' ELSE a.industrycode END AS code,
sum(CASE WHEN a.monthid between v_begintime and v_endtime THEN produce_amount END)/5.0 AS pamtbq,
sum(CASE WHEN a.monthid between v_tqbegintime and v_tqendtime THEN produce_amount END)/5.0 AS pamttq,
sum(CASE WHEN a.monthid between v_begintime and v_endtime THEN sale_amount END)/5.0 AS samtbq,
sum(CASE WHEN a.monthid between v_tqbegintime and v_tqendtime THEN sale_amount END)/5.0 AS samttq
from V_TZ_IN_Y_Q_M_P_D_ALL_B a left join g_tobacco b on a.tobacode=b.tobacode
WHERE (a.monthid between v_begintime and v_endtime OR a.monthid between v_tqbegintime and v_tqendtime)
and b.importflag=0
GROUP BY CASE WHEN a.industrycode IN ('12530401','12530104') THEN '20530001' ELSE a.industrycode END
)a left join
(SELECT DISTINCT indgroupcode,CASE indgroupname WHEN '浙江中烟' THEN '<font color=red>浙江中烟</font>' ELSE indgroupname END AS name,ordertag FROM g_industry ) b ON a.code=b.indgroupcode
left join ( select COMPCODE, sum(CASE WHEN a.monthid = v_endtime THEN TAX END) AS taxbq,
sum(CASE WHEN a.monthid = v_tqendtime THEN TAX END) AS taxtq,
sum(CASE WHEN a.monthid = v_endtime THEN PROFIT END) AS pbq,
sum(CASE WHEN a.monthid = v_tqendtime THEN PROFIT END) AS ptq,
sum(COALESCE(CASE WHEN a.monthid = v_endtime THEN tax END,0))+ sum(COALESCE(CASE WHEN a.monthid = v_endtime THEN profit END,0))AS hjbq,
sum(COALESCE(CASE WHEN a.monthid = v_tqendtime THEN tax END,0)) + sum(COALESCE(CASE WHEN a.monthid = v_tqendtime THEN profit END,0))AS hjtq
from F_ALLCOMPFINANCE_TAX a WHERE (a.monthid=v_endtime OR a.monthid=v_tqendtime ) AND a.flag=1
GROUP BY a.compcode
) c ON a.code=c.compcode;
--合计
INSERT INTO session.results(code,name,ordertag,pamtbq,pamttq,samtbq,samttq,hjbq,hjtq,taxbq,taxtq,pbq,ptq)
SELECT '0','<font color=red>合计</font>','0',sum(pamtbq),sum(pamttq),sum(samtbq),sum(samttq),sum(hjbq),sum(hjtq),sum(taxbq),sum(taxtq),sum(pbq),sum(ptq)
FROM session.results;
UPDATE session.results r SET
r.ratio1=r.hjbq-r.hjtq,
r.ratio2=CASE r.hjtq WHEN 0 THEN 0 ELSE (r.hjbq-r.hjtq)/r.hjtq*100 END,
r.ratio3=r.taxbq-r.taxtq,
r.ratio4=CASE r.taxtq WHEN 0 THEN 0 ELSE (r.taxbq-r.taxtq)/r.taxtq*100 END,
r.ratio5=r.pbq-r.ptq,
r.ratio6=CASE r.ptq WHEN 0 THEN 0 ELSE (r.pbq-r.ptq)/r.ptq*100 END;
INSERT INTO SESSION.captions(caption,width, property, format, fixcol, align, ordertag,TYPE,isreturn)
VALUES('code',0,'code',' ',1,'left',110,'lable','true'),
('单位',100,'name',' ',1,'left',112,'lable','false'),
('累计产量(自产)##本期',75,'pamtbq',' ',0,'right',113,'lable','false'),
('累计产量(自产)##同期',75,'pamttq',' ',0,'right',114,'lable','false'),
('累计销量##本期',75,'samtbq',' ',0,'right',115,'lable','false'),
('累计销量##同期',75,'samttq',' ',0,'right',116,'lable','false'),
('税利合计##本期',75,'hjbq',' ',0,'right',117,'lable','false'),
('税利合计##同期',75,'hjtq',' ',0,'right',118,'lable','false'),
('税利合计##增减量',75,'ratio1',' ',0,'right',119,'lable','false'),
('税利合计##增幅%',75,'ratio2',' ',0,'right',120,'lable','false'),
('税金##本期',75,'taxbq',' ',0,'right',121,'lable','false'),
('税金##同期',75,'taxtq',' ',0,'right',122,'lable','false'),
('税金##增减量',75,'ratio3',' ',0,'right',123,'lable','false'),
('税金##增幅%',75,'ratio4',' ',0,'right',124,'lable','false'),
('利润##本期',75,'pbq',' ',0,'right',125,'lable','false'),
('利润##同期',75,'ptq',' ',0,'right',126,'lable','false'),
('利润##增减量',75,'ratio5',' ',0,'right',127,'lable','false'),
('利润##增幅%',75,'ratio6',' ',0,'right',128,'lable','false');
BEGIN
DECLARE v_captionCur CURSOR WITH RETURN TO CALLER FOR
SELECT * FROM session.captions ORDER BY ordertag;
DECLARE v_resultCur CURSOR WITH RETURN TO CALLER FOR
SELECT * FROM session.results ORDER BY ordertag ;
DECLARE v_resultCur1 CURSOR WITH RETURN TO CALLER FOR
SELECT CASE code WHEN '20330001' THEN '浙江中烟' ELSE name END AS name,taxbq ,pbq FROM session.results WHERE code <> '0' ORDER BY (taxbq+pbq) desc;
OPEN v_captionCur;
OPEN v_resultCur;
OPEN v_resultCur1;
END;
RETURN v_errCode;
END @
知识点:
1、FusionCharts
2、getElementsByName('delID')返回的是所有name 属性为delID的所有元素 是一个数组
document.getElementsByName()与 document.getElementById()、 document.getElementsByTagName()的区别是什么?
document.getElementsByName() 根据name 属性的值来得到元素 是一个数组
document.getElementById() 根据id 属性的值来得到元素 ,是唯一的
document.getElementsByTagName() 根据控件的type 属性 来得到元素, 是一个数组