`
jeasonjack
  • 浏览: 49594 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
收藏列表
标题 标签 来源
sendMail mail
package com.yolotone.report.spweekly;

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormatSymbols;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

import com.xuanzhi.ms.server.logic.operator.Operator;
import com.xuanzhi.ms.server.logic.operator.concrete.XmlOperatorNodeManager;
import com.xuanzhi.userstat.dailydata.MailUtil;
import com.xuanzhi.userstat.feestat.projects.ProjectConnectionManagerForOracle;

public class getSpContent {

	private  ProjectConnectionManagerForOracle connectionPoolManager = ProjectConnectionManagerForOracle.getInstance(); 
	private  Connection com = null;
	private  Statement stat = null;
	private  ResultSet rs = null;
	private  SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
	
	/**
	 * 根据时间 sp名称
	 * @param beginDate
	 * @param endDate
	 * @return 此sp在此时间段的收入
	 * @throws ParseException
	 */
	public String getSpByDateAndSp(String beginDate,String endDate,String sp) throws ParseException
	{		
		String beginyear = beginDate.substring(0,4);
		String endyear = endDate.substring(0,4);
		String beginMonth = beginDate.substring(4,6);
		String endMonth = endDate.substring(4,6);
		String sql = "";
		String revenue = "0";
			if(beginMonth.equalsIgnoreCase(endMonth) && beginyear.equalsIgnoreCase(endyear))
			{
				String month = beginDate.substring(0,4)+"_"+beginDate.substring(4,6);
				
				sql = "select sum(t.revenue) from t_hour_"+
				month+" t where operator = '"+sp+"' and day between "+beginDate+" and "+endDate;
			}
			else
			{
				String beginmonth = beginDate.substring(0,4)+"_"+beginDate.substring(4,6);
				String endmonth =  endDate.substring(0,4)+"_"+endDate.substring(4,6);
				Calendar begincal = Calendar.getInstance();
				begincal.setTime(format.parse(beginDate));
				int maxday = begincal.getActualMaximum(Calendar.DAY_OF_MONTH); //获取当前月最大日期
				String beginmaxDate = beginDate.substring(0,6)+maxday; //得到开始日期的结束日期
				String endmindate = endDate.substring(0,6)+"01"; //得到结束日期的开始日期
				sql = "select sum(t.revenue) from t_hour_"+beginmonth+" t where operator = '"+sp+"' and day between "+beginDate+" and "+beginmaxDate +
						" union " +
						"select sum(t.revenue) from t_hour_"+endmonth+" t where operator = '"+sp+"' and day between "+endmindate+" and "+endDate;
				
			}
			
			
		try {
			com = connectionPoolManager.getConnection();
			stat = com.createStatement();
			rs = stat.executeQuery(sql);
			Map<String,String> spmap = null;
			while(rs.next())
			{
				revenue = rs.getString(1)==null?"0":rs.getString(1);			
			}
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
		}
		finally
		{
			if(rs!=null)
				try {
					rs.close();
				} catch (SQLException e1) {}
			if(stat!=null)
				try {
					stat.close();
				} catch (SQLException e1) {}
			if(com!=null)
				try {
					com.close();
				} catch (SQLException e) {}
		}
		
		//System.out.println("sql   "+sql);
		return revenue;
	}
		
	/**
	 * 传入日期 获取日期之前 每周liu是多少号 
	 * @param date 日期
	 * @return
	 * @throws ParseException 
	 */
	private  List<String> getWeekDay(String datestr) throws ParseException
	{
		String yyyyMM = datestr.substring(0,6);
		LinkedList<String> daylist = new LinkedList<String>();
		Calendar calendar = Calendar.getInstance();
		Date date = format.parse(datestr);
		calendar.setTime(date); 
		
		//int maxday = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
		
		int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); //获取今天是星期几 1:星期日,2:星期一,3:星期二,4:星期三,5:星期四,6:星期五,7:星期六
		int day = date.getDate();//获取今天是几号
		//System.out.println("今天是"+day+"号");
		int ri = day - dayOfWeek; //获取上周liu是几号
		
		if(String.valueOf(ri).length()<2)
		{
			daylist.addFirst(yyyyMM+"0"+ri);
		}
		
		daylist.addFirst(yyyyMM+ri); //将上周六de日期加入集合中
				
		int pri = ri - 7;//判断还够不够一周
		while(pri>0)
		{				
			daylist.addFirst(String.valueOf(pri).length()<2 ? yyyyMM+"0"+pri : yyyyMM+pri);
			pri = pri-7;
			
		} 
		
		return daylist;
	}
	/**
	 * 判断今天 是否 是本月第一天 并且 是星期一
	 * @return
	 * @throws ParseException
	 */
	public List<String> getWeekDays(Date date) throws ParseException
	{			
		//Date date = format.parse(datestr);
		Calendar calendar = Calendar.getInstance(); 
		calendar.setTime(date);
		
		if(date.getDate()-1>0)
		{
			int maxday = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
			calendar.set(Calendar.DATE, maxday);
			
		}
		else
		{
			
			calendar.set(Calendar.DATE, 1);
			calendar.add(Calendar.DATE, -1);
			
		}
		return this.getWeekDay(format.format(calendar.getTime()));
	}
	
	/**
	 * 获取通道信息(spId,spName)
	 * @return
	 */
	public  List<Map<String,String>> getCp()
	{
		XmlOperatorNodeManager onm = XmlOperatorNodeManager.getInstance();
		Operator[] opers = onm.getOperators();
		List<Map<String,String>> list = new ArrayList<Map<String,String>>();
		Map<String,String> map  =  null;
		for(int i =0 ;i<opers.length;i++)
		{
		
			map = new HashMap<String,String>();
			
			map.put("spId",opers[i].getSpId());
			//String spName = opers[i].getDisplayName().substring(0,(opers[i].getDisplayName().length())-(opers[i].getSpId().length()));
			//System.out.println(opers[i].getDisplayName());
			//map.put("spName",spName);
			map.put("spName", opers[i].getDisplayName());
			list.add(map);
		}
		return list;
	}
	
	
	public Map<String,String> MakeTable(String spId,List<String> datestr)
	{
		Map<String,String> spmap = new HashMap<String, String>();
		double jiezhiRevenue = 0d;
		spmap.put("spId", spId);
		try {
			
			for (int i = 0; i < datestr.size(); i++) {
				//获取开始日期  结束日期
				Map<String,String> datemap = this.getbeginDateAndendDate(format.parse(datestr.get(i)));
				String begindate = datemap.get("beginDate"); //开始日期
				String enddate = datemap.get("endDate"); //结束日期
				String value = this.getSpByDateAndSp(begindate, enddate, spId);  //获取当前spId在这个时间段中那个的收入
				
				jiezhiRevenue += value == null ? 0 : Double.parseDouble(value);
				spmap.put(spId+"_"+i, value == null ? "0" : value);				
			}
			
			spmap.put("jiezhiRevenue", String.valueOf(jiezhiRevenue));
			
			return spmap;
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			System.out.println("MakeTable error:"+e.getMessage());
			return null;
		}
		
		
	}
	
	/**
	 * 返回需要发送的表格
	 * @return
	 */
	public String sendMail(String filePath)
	{
		try {
			//getClass().getResource("/");			
			List<Map<String,String>> exlist = this.getExcelContent(filePath);
			
			List<String> datestr = this.getWeekDays(new Date());
			int datestrlength = datestr.size();
			
			StringBuffer sb = new StringBuffer();
			sb.append("<table style='text-align:center;font-size:14px' border='1' bordercolor='#000000' cellpadding='2' cellspacing='0'>");
			sb.append("<tr bgcolor = '#C2D69A'><td nowrap rowspan='2'>商务负责人</td><td nowrap rowspan='2'>SP名称</td><td nowrap rowspan='2'>收入目标</td>");
			sb.append("<td nowrap rowspan='2'>截止日总信息费</td><td nowrap rowspan='2'>收入进度</td>");
			for (int i = 0; i < datestrlength; i++) {
				Map<String,String> datemap = this.getbeginDateAndendDate(format.parse(datestr.get(i)));
				String begindate = datemap.get("beginDate");
				String enddate = datemap.get("endDate");
				sb.append("<td nowrap colspan='2'>第"+(i+1)+"周("+begindate+"-"+enddate+")</td>");
			}		
			sb.append("</tr><tr bgcolor = '#C2D69A'>");
			for (int i = 0; i < datestrlength; i++) {
				sb.append("<td>总信息费</td><td>收入占比</td>");
			}
			sb.append("</tr>");
			
			//汇总	
			String pson = ""; //负责人
			int sumtatget = 0;  //汇总 收入目标
			double jiezhisumtarget = 0d; //汇总 截止日收入
			Map<Integer,Double> summsgtarget = null; //按周汇总收入
			
			//总计
			int max_sumtarget = 0; //总计  收入目标
			double max_jiezhisumtarget = 0; //总计 截至收入
			Map<Integer,Double> max_summsgtarget = new HashMap<Integer, Double>(); //总计 每周总收入
			
			int m =0;
			for (Map<String, String> map : exlist) {			
				m++;			
				//System.out.println("exlist:"+exlist.size());
				//System.out.println(m);
				
				String person = map.get("person");
				String spName = map.get("spName");
				String target = map.get("target");
				
			
				if(pson == null || pson == "")
				{
					pson = person;
					sumtatget += Integer.parseInt(target); 
					summsgtarget = new HashMap<Integer,Double>(); //按周汇总收入
				}
				else if(pson!="")
				{
					if(pson!= person && person != null && person.length() > 0)
					{
						sb.append("<tr bgcolor = '#D6D6D6' ><td colspan='2'>共计</td><td>"+sumtatget+"</td><td>"+jiezhisumtarget+"</td><td>"+formatRevenue(Double.valueOf(jiezhisumtarget),Double.valueOf(sumtatget))+"%</td>");
						for (int i = 0; i < datestrlength; i++) {
							sb.append("<td>"+summsgtarget.get(i)+"</td><td>"+formatRevenue(Double.valueOf(summsgtarget.get(i)),Double.valueOf(sumtatget))+"%</td>");
							
							if(max_summsgtarget.get(i)!=null)
							{
								double vl = summsgtarget.get(i)+max_summsgtarget.get(i);
								max_summsgtarget.put(i, vl);
							}
							else
							{
								max_summsgtarget.put(i, summsgtarget.get(i));
							}
						}
						sb.append("</tr>");
						
						//总计
						max_sumtarget += sumtatget;
						max_jiezhisumtarget += jiezhisumtarget;
						
						//汇总
						summsgtarget = new HashMap<Integer,Double>(); //按周汇总收入
						pson = person; //负责人
						sumtatget = Integer.parseInt(target);	 //汇总收入目标
						jiezhisumtarget = 0d;
					}
					else
					{
						sumtatget += Integer.parseInt(target);					
					}
					
				}
				
				Map<String,String> spsmap = new HashMap<String, String>();
				Map<Integer,Double> spvalue = new HashMap<Integer, Double>();
				
				List<Map<String,String>> cplist = this.getCp(); 
				
				for (int p=0;p<cplist.size();p++) {
					Map<String,String> cpmap = cplist.get(p);
					String cpId = cpmap.get("spId");
					String cpName = cpmap.get("spName");
					String cpName1 = cpName.substring(0,(cpName.length())-(cpId.length()));
					//System.out.println("spName:  "+spName+"cpName   "+cpName1);
					
					if(spName.equalsIgnoreCase(cpName1))
					{
						
						Map<String,String> spmap = this.MakeTable(cpId, datestr);
						
						String jiezhi = spmap.get("jiezhiRevenue"); //截止日期总收入
						
						if(jiezhi.indexOf(".")>0)
						{
							jiezhi = jiezhi.substring(0,jiezhi.indexOf(".")+2);
						}
						
						jiezhisumtarget += Double.parseDouble(jiezhi); //汇总截至收入
						
						if(spsmap.get("person")!=null)
						{
							double jz = Double.parseDouble(spsmap.get("jiezhi"))+Double.parseDouble(jiezhi);
							spsmap.put("jiezhi", String.valueOf(jz));
							
							for (int i = 0; i < datestrlength; i++) {
								String value = spmap.get(cpId+"_"+i);
								double vl = Double.parseDouble(value) + spvalue.get(i);
								spvalue.put(i, vl);
							}
						}
						else
						{
							spsmap.put("person", person);
							spsmap.put("spName", spName);
							spsmap.put("target", target);
							spsmap.put("jiezhi", jiezhi);
							
							for (int i = 0; i < datestrlength; i++) {
								String value = spmap.get(cpId+"_"+i);
								spvalue.put(i, Double.parseDouble(value));
							}
						}
						
						if(p==this.getCp().size()-1)
						{
							sb.append("<tr><td>"+spsmap.get("person")+"</td><td>"+spsmap.get("spName")+"</td><td>"+spsmap.get("target")+"</td><td>"+spsmap.get("jiezhi")+"</td><td>"+formatRevenue(Double.valueOf(spsmap.get("jiezhi")),Double.valueOf(spsmap.get("target")))+"%</td>");
							for (int i = 0; i < datestrlength; i++) {
								double value = spvalue.get(i);
								sb.append("<td>"+value+"</td><td>"+formatRevenue(Double.valueOf(value),Double.valueOf(target))+"%</td>");
								
								if(summsgtarget.get(i)!=null)
								{
									double vl = value + summsgtarget.get(i);
									summsgtarget.put(i, vl);
								}
								else
								{
									summsgtarget.put(i,value);
								}
							}					
							sb.append("</tr>");
							break;
						}
					}
					else if(!spName.equalsIgnoreCase(cpName1) && p==this.getCp().size()-1)
					{
						
						if(spsmap!=null && spsmap.size()>0)
						{
							sb.append("<tr><td>"+spsmap.get("person")+"</td><td>"+spsmap.get("spName")+"</td><td>"+spsmap.get("target")+"</td><td>"+spsmap.get("jiezhi")+"</td><td>"+formatRevenue(Double.valueOf(spsmap.get("jiezhi")),Double.valueOf(spsmap.get("target")))+"%</td>");//
							for (int i = 0; i < datestrlength; i++) {
								double value = spvalue.get(i);
								sb.append("<td>"+value+"</td><td>"+formatRevenue(Double.valueOf(value),Double.valueOf(target))+"%</td>");
								
								if(summsgtarget.get(i)!=null)
								{
									double vl = value + summsgtarget.get(i);
									summsgtarget.put(i, vl);
								}
								else
								{
									summsgtarget.put(i,value);
								}
							}					
							sb.append("</tr>");
						}
						else
						{
						
							sb.append("<tr><td>"+person+"</td><td>"+spName+"</td><td>"+target+"</td><td>0</td><td>0%</td>");
							for (int i = 0; i < datestrlength; i++) {
								//String value = spmap.get(cpId+"_"+i);
								sb.append("<td>0</td><td>0%</td>");
								
								if(summsgtarget.get(i)!=null)
								{
									double vl = Double.parseDouble("0") + summsgtarget.get(i);
									summsgtarget.put(i, vl);
								}
								else
								{
									summsgtarget.put(i, Double.parseDouble("0"));
								}
							}					
							sb.append("</tr>");
							break;
						}
					}
				}
				
				if(m==exlist.size()) //判断是否是最后一条
				{
					sb.append("<tr bgColor='#D6D6D6'><td colspan='2'>共计</td><td>"+sumtatget+"</td><td>"+jiezhisumtarget+"</td><td>"+formatRevenue(Double.valueOf(jiezhisumtarget),Double.valueOf(sumtatget))+"%</td>");
					for (int i = 0; i < datestrlength; i++) {
						sb.append("<td>"+summsgtarget.get(i)+"</td><td>"+formatRevenue(Double.valueOf(summsgtarget.get(i)),Double.valueOf(sumtatget))+"%</td>");
						
						if(max_summsgtarget.get(i)!=null)
						{
							double vl = summsgtarget.get(i)+max_summsgtarget.get(i);
							max_summsgtarget.put(i, vl);
						}
						else
						{
							max_summsgtarget.put(i, summsgtarget.get(i));
						}
					}
					sb.append("</tr>");
					
					//总计
					max_sumtarget += sumtatget;
					max_jiezhisumtarget += jiezhisumtarget;
				}
			}
			
			
			//总计
			sb.append("<tr bgColor='#919191'><td colspan='2'>总计</td><td>"+max_sumtarget+"</td><td>"+max_jiezhisumtarget+"</td><td>"+formatRevenue(Double.valueOf(max_jiezhisumtarget),Double.valueOf(max_sumtarget))+"%</td>");
			for (int i = 0; i < datestrlength; i++) {
				sb.append("<td>"+max_summsgtarget.get(i)+"</td><td>"+formatRevenue(Double.valueOf(max_summsgtarget.get(i)),Double.valueOf(max_sumtarget))+"%</td>");
			}
			sb.append("</tr>");
			sb.append("</table>");
			
			return sb.toString();
		
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			System.out.println("sendMail error:"+e.getMessage());
			return "发送邮件出错啦!~!  请联系技术人员!~!";
		}
	}
	
	/**
	 * 传入文件路径 
	 * @param filePath
	 * @return 返回集合List<Map<负责人,sp名称,收入指标>>
	 */
	public List<Map<String,String>> getExcelContent(String filePath)
	{
		InputStream is = null;
		Workbook book = null;
		List<Map<String,String>> exlist = new ArrayList<Map<String,String>>();
		Map<String,String> exmap = null;
		try {
			is = new FileInputStream(filePath);
			book = Workbook.getWorkbook(is);
			
			Sheet sheet = book.getSheet(0);
			
			int column = sheet.getColumns(); //列
			int row = sheet.getRows(); //行
			
			for (int i = 1; i < row; i++) {
				exmap = new HashMap<String, String>();
				for (int j = 0; j < column; j++) {
					Cell cell = sheet.getCell(j,i);
					if(j==0)
					{
						exmap.put("person", cell.getContents());
					}
					else if(j==1)
					{
						exmap.put("spName", cell.getContents());
					}
					else if(j==2)
					{
						String target = "0";
						try {
							target = Integer.toString(Integer.parseInt(cell.getContents().replace(",", "")));
						} catch (Exception e) {
							e.printStackTrace();
						}
						exmap.put("target", target);
					}
					//System.out.println(cell.getContents());
				}
				exlist.add(exmap);
			}
			
			return exlist;
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("get File method error :"+e.getMessage());
			return null;
		}
		
	}
	
	/**
	 * 传入今天日期
	 * @param date
	 * @return 返回本日所在周的开始日期 结束日期
	 */
	public Map<String,String> getbeginDateAndendDate(Date date)
	{
		Map<String,String> datemap = new HashMap<String, String>();
		SimpleDateFormat ff = new SimpleDateFormat("yyyyMMdd");
		Calendar cal = Calendar.getInstance();
		
		cal.setTime(date);
		
		 int day_of_week = cal.get(Calendar.DAY_OF_WEEK) - 2;
		 cal.add(Calendar.DATE, -day_of_week);
	
		 datemap.put("beginDate", ff.format(cal.getTime()));
		 cal.add(Calendar.DATE, 6);
		
		 datemap.put("endDate", ff.format(cal.getTime()));
		 
		 return datemap;
	}
	
	
	//格式化字符串
	public String formatRevenue(double vl1,double vl2)
	{
		DecimalFormat df = new DecimalFormat("###.##");
		double va1 = (vl1 / vl2)*100;
		return df.format(va1);
	}
	public static void main(String[] args) throws ParseException {
		
		//getSpContent gs = new getSpContent();
		//MailUtil.sendMail("mengfanzhi@yolotone.com","","", "测试",gs.MakeTable() , null);
		//gs.showTest();
//		double aa = Double.valueOf("337730");
//		double bb =  Double.valueOf("24000000");
//		double a = aa / bb;
//		System.out.println(a);
		System.out.println(System.getProperty("user.dir"));
		System.out.println(Integer.parseInt("234d"));
	}
}
以系统方式下发邮件 mail
package com.xuanzhi.userstat.dailydata;

import java.io.File;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**   
 *   
 * @author zhanghusong   
 */
public class MailUtil {
	private static String fromaddress="support@yolotone.com";
	private static String host  = "mail.yolotone.com";
	private static String username  = "support";
	private static String password="F7'wf(U4l!@'"; 
	public static boolean sendMail(String toUser,String cc,String bcc,String title,String content,File myFilePath)
	{
		Properties props=new Properties(); 
		props.put("mail.smtp.host",host);
		props.put("mail.smtp.auth","true");
		Session s=Session.getInstance(props);
		s.setDebug(true); 

		MimeMessage message=new MimeMessage(s);
		try {
			InternetAddress from;
		
			from = new InternetAddress(fromaddress);
			message.setFrom(from);
//			InternetAddress to=new InternetAddress(toUser); 
			message.setRecipients(Message.RecipientType.TO,new InternetAddress().parse(toUser)); 
			if(cc!=null && !"".equals(cc))
			{
				message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));
			}
			if(bcc!=null && !"".equals(bcc))
			{
				message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bcc));
			}
			
			message.setSubject(title);
//			message.setText(content);
			
			 Multipart mp = new MimeMultipart();   
	         MimeBodyPart mbp = new MimeBodyPart();   
	         mbp.setContent(content.toString(), "text/html;charset=gb2312");   
	         mp.addBodyPart(mbp);
	         
	         if(myFilePath!=null)
	         {
	        	 MimeBodyPart mbp1 = new MimeBodyPart();
		         FileDataSource fds=new FileDataSource(myFilePath);    
	             mbp1.setDataHandler(new DataHandler(fds));    
	             mbp1.setFileName(myFilePath.getName());     
	             mp.addBodyPart(mbp1);  
	         }
             
             message.setContent(mp);
			message.setSentDate(new Date()); 
	
			message.saveChanges(); 
			Transport transport=s.getTransport("smtp"); 
			transport.connect(host,username,password); 
			transport.sendMessage(message,message.getAllRecipients()); 
			transport.close(); 
			return true;
		} catch (Exception e) {
			e.printStackTrace();
		} 

		return false;
	}
	public static void main(String []a )
	{
		MailUtil.sendMail("mengfanzhi@yolotone.com","","", "测试", "<table border='1'><tr><td>id</td><td>name</td></tr></table>", null);
	}
}
Global site tag (gtag.js) - Google Analytics