本帖最后由 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("\\\\");
int i;
for(i=1;i<strs_a.length;i++)
{
File=strs_a[i];
Patch=strs_a[i-1];
}
FilePath="\\\\"+IP+"\\\\"+Patch+"\\\\"+File;
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("\\\\");
int a;
for(a=1;a<strs_b.length;a++)
{
File=strs_b[a];
Patch=strs_b[a-1];
}
FilePath="\\\\"+IP+"\\\\"+Patch+"\\\\"+File;
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("glwllw@163.com");
reply.add("gonglingwei@163.com");
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 {
张(43@tj.com.cn]43@tj.com.cn),王("123@tj.com.cn]123@tj.com.cn");
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)
2011-1-4 14:04 上传 下载次数: 17
下载积分: 论坛金币 -1
|
|