本帖最后由 crazyzxl 于 2011-1-4 14:04 编辑 http://www.webgamei.com/club/forum-viewthread-tid-16561-fromuid-53276.html 注:这个demo其实在 csdn 的共享也可以下载到.也是我分享的 所以说是原创 账号都是crazyzxl 这个demo是部门经理让我给技术支持MM写的一个小小工具.. 需求我还真忘了..因为都内部自己人用的工具所以也没有落实文档.. 是选择不同的选项生成不同地区的excel并发送到指定的邮箱 大家看代码的时候可能觉得很繁琐 其实我也觉得是.因为老大说了不让用数据库,说一个小工具不给弄数据库浪费客户的资源.. 当时老无语了...呵呵 分享几段代码然后看附件吧好吧 IDE:Workshop for WebLogic Platform 9.2 database:oracle9i web server:weblogic9.2 //自己百度下一个就行 下MyEclipse(至少6.0版本) 也行 不过就要自己手动弄代码了 我是没那么导过..不过java代码是一样的 在MyEclipse也能用 [index.jsp 1,2,3,4,5,6,7是为了区分各个表的不同操作跟excel格式,其实可以用数据库也可以用xml,不过数据库经理不让用,xml做java的自己试试就知道了.可以写成一个xml读取判断表类型的类..呵呵..]
- switch (index)
- {
- case 1:
- name = "当月人数变化及短信量统计报表";
- break;
- case 2:
- name = "外段号码报表";
- break;
- case 6:
- name = "联通拆机号码";
- break;
- case 7:
- name = "移动确认号码报表";
- break;
- }
复制代码
[web.xml 这个不用我多说了吧]
- <servlet>
- <servlet-name>UploadServlet</servlet-name>
- <servlet-class>src.execl.UploadServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>UploadServlet</servlet-name>
- <url-pattern>/UploadServlet</url-pattern>
- </servlet-mapping>
复制代码
[ExeclController.java 根据不同的格式类型选择不同的excel类,并且根据不同的状态位返回到xml 前台ajax 得到xml进行错误判断打印到前台给用户,获取服务器文件]
- String File=null,Patch=null,FilePath=null;
- getResponse().setContentType("text/xml;charset=UTF-8");
- getResponse().setHeader("Cache-Control","no_cache");
- String d_s=getRequest().getParameter("d_s")+" 00:00:00";
- String d_e=getRequest().getParameter("d_e")+" 23:59:59";
- String mail_id=getRequest().getParameter("mail_id");
- String mail_ps=getRequest().getParameter("mail_ps");
- PrintWriter out=getResponse().getWriter();
- String xml="<response>";
- String reporti=getRequest().getParameter("rd");
- MailTest mt=new MailTest();
- //InetAddress addr = InetAddress.getLocalHost();
- String IP =getRequest().getRemoteAddr();
- //addr.getHostAddress().toString();
- switch (Integer.parseInt(reporti))
- {
- case 1: //当月人数变化及短信量统计报表
- if(execl1("c:\\当月人数变化及短信量统计报表.xls",d_s,d_e)==false)
- {
- xml+="<reportid>1</reportid>";
- xml+="<beginflag>0</beginflag>";
- }
- else
- {
- if(mt.sendMail(reporti,"1",d_s,d_e,mail_id,mail_ps,"null","null")==false)
- {
- xml+="<reportid>1</reportid>";
- xml+="<beginflag>2</beginflag>";
- }
- else{
- xml+="<reportid>1</reportid>";
- xml+="<beginflag>1</beginflag>";
- }
- }
- break;
- case 2: //外段号码报表
- if(execl2("c:\\外段号码报表-天津.xls",1,d_s,d_e)==false||execl2("c:\\外段号码报表-河北.xls",2,d_s,d_e)==false||execl2("c:\\外段号码报表-杭州.xls",3,d_s,d_e)==false||execl2("c:\\外段号码报表-长春.xls",4,d_s,d_e)==false)
- {
- xml+="<reportid>2</reportid>";
- xml+="<beginflag>0</beginflag>";
- }
- else
- {
- if(mt.sendMail(reporti,"1",d_s,d_e,mail_id,mail_ps,"null","null")==false||mt.sendMail(reporti,"2",d_s,d_e,mail_id,mail_ps,"null","null")==false||mt.sendMail(reporti,"3",d_s,d_e,mail_id,mail_ps,"null","null")==false||mt.sendMail(reporti,"4",d_s,d_e,mail_id,mail_ps,"null","null")==false)
- {
- xml+="<reportid>2</reportid>";
- xml+="<beginflag>2</beginflag>";
- }
- else{
- xml+="<reportid>2</reportid>";
- xml+="<beginflag>1</beginflag>";
- }
- }
- break;
- case 6://联通拆机号码
- FilePath=getRequest().getParameter("filename");
- FilePath=new String(FilePath.getBytes("iso8859-1"),"GBK");
- String strs_a[]=FilePath.split("[url=]\\\\[/url]");
- int i;
- for(i=1;i<strs_a.length;i++)
- {
- File=strs_a[i];
- Patch=strs_a[i-1];
- }
- FilePath="[url=]\\\\"+IP+"\\\\"+Patch+"\\\\"+File[/url];
- System.out.println("***************************************");
- System.out.println(FilePath);
- System.out.println("***************************************");
- if(readline(FilePath,"6")==false)
- {
- xml+="<reportid>6</reportid>";
- xml+="<beginflag>0</beginflag>";
- }
- else{
- String user_count=""+tjdb.unicom_user_count_temp();
- String update_count=""+tjdb.unicom_update_count_temp();
- tjdb.unicom_delete_temp();
- if(mt.sendMail(reporti,"1",d_s,d_e,mail_id,mail_ps,user_count,update_count)==false)
- {
- xml+="<reportid>6</reportid>";
- xml+="<beginflag>2</beginflag>";
- }
- else{
- xml+="<reportid>6</reportid>";
- xml+="<beginflag>1</beginflag>";
- }
- }
- break;
- case 7://移动确认号码报表
- FilePath=getRequest().getParameter("filename");
- FilePath=new String(FilePath.getBytes("iso8859-1"),"GBK");
- String strs_b[]=FilePath.split("[url=]\\\\[/url]");
- int a;
- for(a=1;a<strs_b.length;a++)
- {
- File=strs_b[a];
- Patch=strs_b[a-1];
- }
- FilePath="[url=]\\\\"+IP+"\\\\"+Patch+"\\\\"+File[/url];
- System.out.println("***************************************");
- System.out.println(FilePath);
- System.out.println("***************************************");
- if(readline(FilePath,"7")==false)
- {
- xml+="<reportid>7</reportid>";
- xml+="<beginflag>0</beginflag>";
- }
- else{
- if(mt.sendMail(reporti,"1",d_s,d_e,mail_id,mail_ps,"null","null")==false)
- {
- xml+="<reportid>7</reportid>";
- xml+="<beginflag>2</beginflag>";
- }
- else{
- xml+="<reportid>7</reportid>";
- xml+="<beginflag>1</beginflag>";
- }
- }
- break;
- }
- xml+="</response>";
- out.println(xml);
- out.close();
- return null;
- }
- /////////////////////////////////////-----------------------------------华丽丽的分割线
- //下面内容是一个片段,也是这个文件中的 主要是前面代码调用的 不同的生成的excel 表 根据地区格式做成excel
- try{
- //创建工作空间
- WritableWorkbook wwb = Workbook.createWorkbook(new File(path));
- //创建工作表
- WritableSheet hm = wwb.createSheet("号码明细",0);
- WritableSheet dx = wwb.createSheet("短信明细",1);
- WritableSheet zl = wwb.createSheet("总量",2);
- //生成表头
- /**
- * 号码明细
- */
- Label labelT0 = new Label(0,0,"学校名称");
- hm.addCell(labelT0);
- Label labelT1 = new Label(1,0,"联系电话");
- hm.addCell(labelT1);
- /**
- * 短信明细
- */
- Label labelT2 = new Label(0,0,"短信内容");
- dx.addCell(labelT2);
- Label labelT3 = new Label(1,0,"短信时间");
- dx.addCell(labelT3);
- /**
- * 总量
- */
- Label labelT4 = new Label(0,0,"学校名称");
- zl.addCell(labelT4);
- Label labelT5 = new Label(1,0,"号码数量统计");
- zl.addCell(labelT5);
- /**
- * 短信总量
- */
- int gbsc=0;
- /**
- * 外段总量
- */
- generate_bean[] gbc=null;
- /**
- * 号码详细
- */
- generate_bean[] gbn=null;
- /**
- * 短信详细
- */
- generate_bean[] gbs=null;
- switch (flag)
- {
- case 1: //天津
- gbn=tjdb.tj_outer_segment_num_all(d_s,d_e);
- gbs=tjdb.tj_outer_segment_sns_all(d_s,d_e);
- gbsc=tjdb.tj_outer_segment_sns_count_all(d_s,d_e);
- gbc=tjdb.tj_outer_segment_count(d_s,d_e);
- break;
- case 2: //河北
- gbn=hbdb.hb_outer_segment_num_all(d_s,d_e);
- gbs=hbdb.hb_outer_segment_sns_all(d_s,d_e);
- gbsc=hbdb.hb_outer_segment_sns_count_all(d_s,d_e);
- gbc=hbdb.hb_outer_segment_count(d_s,d_e);
- break;
- case 3://杭州
- gbn=hzdb.hz_outer_segment_num_all(d_s,d_e);
- gbs=hzdb.hz_outer_segment_sns_all(d_s,d_e);
- gbsc=hzdb.hz_outer_segment_sns_count_all(d_s,d_e);
- gbc=hzdb.hz_outer_segment_count(d_s,d_e);
- break;
- case 4://长春
- gbn=ccdb.cc_outer_segment_num_all(d_s,d_e);
- gbs=ccdb.cc_outer_segment_sns_all(d_s,d_e);
- gbsc=ccdb.cc_outer_segment_sns_count_all(d_s,d_e);
- gbc=ccdb.cc_outer_segment_count(d_s,d_e);
- break;
- }
-
- //生成单元格
- int rowzl=0;
- int countzl=0;
- int hm_temp=0;
- int dx_temp=0;
- for(int i=0;i<gbn.length;i++)
- {
-
- for(int a=0;a<gbn.length-1;a++)
- {
- if(gbn[a].getSCHL_NAME().length()<gbn[a+1].getSCHL_NAME().length())
- {
- hm_temp=gbn[a+1].getSCHL_NAME().length();
- }
- else
- {
- hm_temp=gbn[a].getSCHL_NAME().length();
- }
- }
- Label label0 = new Label(0,i+1,gbn[i].getSCHL_NAME());
- hm.addCell(label0);
- Label label1 = new Label(1,i+1,gbn[i].getPANT_MOBILE());
- hm.addCell(label1);
- }
- for(int i=0;i<gbs.length;i++)
- {
- String time=gbs[i].getSEND_TIME();
- time=time.substring(0,11);
- /**
- * 短信明细
- */
- Label label0 = new Label(0,i+1,gbs[i].getMT_CONTENT());
- dx.addCell(label0);
- Label label1 = new Label(1,i+1,time);
- dx.addCell(label1);
- for(int a=0;a<gbs.length-1;a++)
- {
- /**
- * 号码明细
- */
- /**
- * 短信明细
- */
- if(gbs[a].getMT_CONTENT().length()<gbs[a+1].getMT_CONTENT().length())
- {
- dx_temp=gbs[a+1].getMT_CONTENT().length();
- }
- else
- {
- dx_temp=gbs[a].getMT_CONTENT().length();
- }
- }
- }
- for(int i=0;i<gbc.length;i++)
- {
- /**
- * 总量
- */
- Label label0 = new Label(0,i+1,gbc[i].getSCHL_NAME());
- zl.addCell(label0);
- Label label1 = new Label(1,i+1,""+gbc[i].getCount());
- zl.addCell(label1);
- rowzl++;
- countzl+=gbc[i].getCount();
- }
- Label label1 = new Label(0,rowzl+2,"外段号码数");
- zl.addCell(label1);
- Label label2 = new Label(1,rowzl+2,""+countzl);
- zl.addCell(label2);
- Label label3 = new Label(0,rowzl+3,"短信量总数");
- zl.addCell(label3);
- Label label4 = new Label(1,rowzl+3,""+gbsc);
- zl.addCell(label4);
- /**
- * 号码明细
- */
- if(hm_temp<1)
- {
- hm_temp=4;
- }
- hm.setColumnView(0,hm_temp*2+2);
- /**
- * 短信明细
- */
- if(dx_temp<1)
- {
- dx_temp=4;
- }
- dx.setColumnView(0,dx_temp*2+2);
- /**
- * 总量
- */
- if(hm_temp<1)
- {
- hm_temp=4;
- }
- zl.setColumnView(0,hm_temp*2+2);
- wwb.write();
- wwb.close();
- }catch(IOException e){
- e.printStackTrace();
- return false;
- }catch(WriteException e1){
- e1.printStackTrace();
- return false;
- }
- return true;
复制代码
[MailTest.java 指定收件人 抄送附件。。惭愧的是这里使用到了枚举的描述符。后来才知道那样写是非常不对的。大家自己改下吧。。:$]
- import java.util.*;
- import publicclass.publicvalue;
-
- public class MailTest {
- public boolean sendMail(String reporti,String city,String d_s,String d_e,String mail_id,String mail_ps,String index_a,String index_b) throws Exception
- {
-
- Mail mail = new Mail();
- d_s=d_s.substring(0,11);
- d_e=d_e.substring(0,11);
- mail.setFrom(mail_id);
- List<String> to = new ArrayList<String>();
- List<String> cc = new ArrayList<String>();
- List<Attachment> attaches = new ArrayList<Attachment>();
-
- Attachment attach1 = new Attachment();
- // mail.setContentType(Mail.CONTENT_TYPE_TEXT);
- switch (Integer.parseInt(reporti))
- {
- case 1: //当月人数变化及短信量统计报表
- switch (Integer.parseInt(city))
- {
- case 1: //天津;
- mail.setSubject("当月人数变化及短信量统计报表");
- mail.setContent("当月人数变化及短信量统计报表"+d_s+"至"+d_e);
- to.add(mail_id);
- attach1.setName("当月人数变化及短信量统计报表.xls");
- attach1.setLocalPath("c:\\当月人数变化及短信量统计报表.xls");
- break;
- case 2: //河北
- break;
- case 3://杭州
- break;
- case 4://长春
- break;
- }
- break;
- case 2: //外段号码报表
- mail.setSubject("外段号码报表");
-
- switch (Integer.parseInt(city))
- {
-
- case 1: //天津;
- mail.setContent("天津外段号码报表"+d_s+"至"+d_e);
- to.add(mail_id);
- /*to.add(publicvalue.外段表天津.getValue());
- cc.add(publicvalue.刘.getValue());
- cc.add(mail_id);*/
- attach1.setName("外段号码报表-天津.xls");
- attach1.setLocalPath("c:\\外段号码报表-天津.xls");
- break;
- case 2: //河北
- mail.setContent("河北外段号码报表"+d_s+"至"+d_e);
- to.add(mail_id);
- /*to.add(publicvalue.外段表石家庄.getValue());
- cc.add(publicvalue.刘.getValue());
- cc.add(mail_id);*/
- attach1.setName("外段号码报表-河北.xls");
- attach1.setLocalPath("c:\\外段号码报表-河北.xls");
- break;
- case 3://杭州
- mail.setContent("杭州外段号码报表"+d_s+"至"+d_e);
- to.add(mail_id);
- /*to.add(publicvalue.外段表杭州.getValue());
- cc.add(publicvalue.刘.getValue());
- cc.add(mail_id);*/
- attach1.setName("外段号码报表-杭州.xls");
- attach1.setLocalPath("c:\\外段号码报表-杭州.xls");
- break;
- case 4://长春
- mail.setContent("长春外段号码报表"+d_s+"至"+d_e);
- to.add(mail_id);
- /*to.add(publicvalue.外段表长春.getValue());
- cc.add(publicvalue.刘.getValue());
- cc.add(mail_id);*/
- attach1.setName("外段号码报表-长春.xls");
- attach1.setLocalPath("c:\\外段号码报表-长春.xls");
- break;
- }
- break;
- case 6://联通拆机号码
- mail.setSubject("报告:联通拆机号码表生成完毕");
- switch (Integer.parseInt(city))
- {
- case 1: //天津;
- mail.setContent("本月拆机文件中,有【"+index_a+"】个号码为我公司用户,更新了系统中【"+index_b+"】条数据. ");
- to.add(mail_id);
- /*to.add(publicvalue.外段表长春.getValue());
- cc.add(publicvalue.刘.getValue());
- cc.add(mail_id);*/
- break;
- case 2: //河北
- break;
- case 3://杭州
- break;
- case 4://长春
- break;
- }
- break;
- case 7://移动确认号码报表
- mail.setSubject("移动确认号码报表");
- switch (Integer.parseInt(city))
- {
- case 1: //天津;
- mail.setContent("移动确认号码报表操作生成完毕,请检查附件");
- to.add(mail_id);
- /*to.add(publicvalue.外段表长春.getValue());
- cc.add(publicvalue.刘.getValue());
- cc.add(mail_id);*/
- attach1.setName("移动确认号码报表.xls");
- attach1.setLocalPath("c:\\移动确认号码报表.xls");
- break;
- case 2: //河北
- break;
- case 3://杭州
- break;
- case 4://长春
- break;
- }
- break;
- }
- mail.setTo(to);
- mail.setCc(cc);
- attaches.add(attach1);
- /* List<String> reply = new ArrayList<String>();
- reply.add("[url=mailto:[email protected]][email protected][/url]");
- reply.add("[url=mailto:[email protected]][email protected][/url]");
- mail.setReply(reply);*/
- Properties pro = new Properties();
- pro.setProperty("mail.smtp.host", "mail.infogate-tj.com.cn");
- pro.setProperty("mail.smtp.port", "25");
- pro.setProperty("mail.smtp.auth", "true");
- pro.setProperty("mail.smtp.username",mail_id);
- pro.setProperty("mail.smtp.password",mail_ps);
- mail.setProperties(pro);
- mail.setAttachments(attaches);
- System.out.println("正在发送...");
- long time1 = new Date().getTime();
- boolean sended = MailSender.send(mail);
- long time2 = new Date().getTime();
- System.out.println((sended ? "发送成功!" : "发送失败!"));
- System.out.println("耗时:" + (time2 - time1) + "毫秒");
- return true; }
- }
- //publicvalue.java 这就是我说的应该修改的 不应该用枚举描述符..其实这个方法也是一个同事跟我说地.等后来领导给我说了利弊后
- //才恍然大悟.哈哈..人非圣贤孰能无过..大家改成 privat String email; 吧
- package publicclass;
- public enum publicvalue {
- 张([email protected]][email protected]),王("[email protected]][email protected]");
- private final String value;
- private publicvalue(String value)
- {
- this.value=value;
- }
- public String getValue() {
- return this.value;
- }
-
- }
复制代码
ccjxt.java generate_bean.java hbjxt.java hzjxt.java tjjxt.java 这几个文件是不能给大家的..没办法 你们自己写吧..因为里面的sql语句是不能透露的毕竟跟database安全有关系 bean不用说就是pojo 上面用红色标注的bean跟tjjxt 里面文件我保留给大家了.不过没有内容只有格式 其他几个就是不同地区的 sql语句.嗯..没了就这样了 发送邮件+excel生成.rar (10.86 MB, 下载次数: 17)
|
|