发票布奖资料0525Word格式文档下载.docx
《发票布奖资料0525Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《发票布奖资料0525Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
我们采用了:
struts+jdbc+oracle8.17+weblogic8.1的构架方式(mvc模式)。
1.采用了des加密技术,用于用户登录密码的加密。
1、采用了DH非对称加密技术。
主要用于奖项的加密。
2:
跟印刷厂的数据传输采用了数字签名技术。
2、大批量数据的处理。
第三步:
主要的模块:
1:
答大的模块:
不要详细介绍:
系统管理--奖池管理---布奖管理---印制管理----兑奖管理
你们的项目是否很简单?
答:
这个项目是个产品。
项目不大,但是技术含量高,业务逻辑很复杂。
我们的发票布奖可以跨奖池,跨批次,跨段号。
(完毕)
什么是跨奖池跨批次跨段号?
跨奖池:
一种发票可以布奖在多个奖池中。
一个奖池也可以给多种发票布奖。
跨批次:
列如:
该种发票的一个批次布50000万张。
但是这次征管系统下达的印制计划是30000万张,此时还有2000万张不能
印刷。
那么只能在下个批次中接着上一个批次的印刷。
跨段号:
发票每隔10000张。
号码必须跨100位。
如:
印刷50000张:
000001----1000010010----2000020010---30000…….
该项目遇到什么样的困难?
1:
因为数据量比较大,用到了循环并且用到了大对象处理。
List中存放有奖无奖数据对象,内存出现了溢出程序终止运行。
解决方案:
在每一种发票布奖完成后,调用垃圾回收器:
system.gc()清除内存,再循环下一种发票种类。
因为用到了jdbc的预处理prepareStatement对象,在布奖后根据发票印制计划生产发票印制文件时,由于业务逻辑复杂,频繁操作数据库,也出现了weblogic报内存溢出错误,程序终止。
在weblogic中设置jdbc连接池的缓存(StatementCacheSize:
)。
并且调整虚拟机内存的大小。
默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:
java.lang.OutOfMemoryError。
DH非对称加密算法:
乙方向甲方发送数据:
数字签名
该系统的运行环境:
数据库:
用oracle9i部署在小型机上:
和税务局的税控系统公用一个数据库,只是用户不同,表空间不同。
2:
开发用tomcat服务器,部署时是在weblogic8.2上面。
因为是大数据量操作。
测试一般用5000---50000条数据
真实运行情况:
一个批次要部署1000—5000万张发票。
3:
该系统是税务局内部使用,不对公网发布。
布奖都要公证处的人在场做公证的。
只有兑奖才对公网开放
4:
去印刷厂的印刷数据是写文件的,采用了非对称加密技术DH加密算法。
用户登陆管理采用了des加密技术。
5:
项目接口科室:
信息中心和征收管理科。
6:
生成的发票文件名称:
奖池id+布奖批次号+发票代码.dat文件中的奖项名称一栏是采用了DH加密算法的。
本系统的功能是负责布奖和产生发票印制文件,发票印制是给印刷厂负责印刷。
印刷厂有接口程序:
根据密钥进行解密
并且自动印刷。
并在奖项一栏填充颜色使用户看不见,必须刮掉上面的一层才能看到中没有中奖。
熟悉以下税务局的组织机构
布奖的奖项表
奖项信息表
奖池信息表:
布奖信息表:
发票种类表:
奖池和发票种类对照表:
(发票种类入池表)
领奖表:
无奖发票信息表
有奖发票信息表:
布奖中生成按钮完成的操作流程:
每种发票布奖的有奖无奖数据放到一个大的数据对象中:
list如:
datavo1-----datavo6
Datavo1
000000000001
餐饮发票
谢谢你的参与
Datavo2
000000000002
二等奖
Datavo3
000000000003
一等奖
Datavo4
000000000004
Datavo5
000000000005
Datavo6
000000000006
列转行写文件的内容如下:
此时的匹数是3
按生成按纽要做的事情:
获取该条数据的开始座位号和结束座位号:
作为循环次数:
生成的发票号码就等于座位号(转12位数字)
根据该批次布奖的奖项从开始座位号和结束座位号中:
产生随机数。
有几个一等奖就产生几个一等奖的随机数
其他奖项依次类推。
将有奖的发票信息和无奖的发票信息分别存放到有浆的list1和无奖的list2.
将有奖和无奖的数据分别插入到有奖和无奖数据表中。
在内存中把有奖和无奖的list存放到一个list中:
list1.addAll(list2)并且打乱顺序.Collections.shuffle(list)
5:
有奖和无奖的list合并后,完成上图中的写文件。
产生随机数的代码:
见工程:
jdbcTestProject中的Tools类
//得到一个处于iMaxPass,iMinPass之间的一个长度为:
length的随机数:
publicstaticStringgetRandom(intiMaxPass,intiMinPass,intlength){
intpwd=(int)(Math.random()*(iMaxPass-iMinPass+1))+iMinPass;
returngetCode(String.valueOf(pwd),length);
}
//凑齐位数
privatestaticStringgetCode(Stringvalue,intLength){
for(inti=value.length();
i<
Length;
i++){
value="
0"
+value;
}
returnvalue;