e91ab5e1aaa19f5babcc3bde00359b644815c9a8.svn-base 14.8 KB
package yxy.timer.method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import yxy.timer.service.YxyReadService;
import yxy.timer.tool.DBUtil;
import yxy.timer.tool.DateFormat;
import yxy.timer.tool.UserAgentUtil;
import yxy.timer.tool.getArea;

/**
 * 
 * @author 谢勇
 * 点读定时器类
 */
public class ClickCountTimer {
	private boolean isRun = false; //判断定时器是否在运行 默认false
	private Connection conn;
	private ResultSet rs;
	private PreparedStatement pst;
	
	public void clickcount()throws Exception{
		try {
			if(!isRun)
			{
				System.out.println("正在从远程获取点读信息...");
				isRun = true;//在运行
				conn = DBUtil.getConnection("clickdataSource");
				String yxysql="select sing_cid,mail_uid,mail_loginid,mail_domain,mail_readIP," +
						"mail_readDate,mail_read_email,mail_useragent from yxy_singreadinfo " +
						"where mail_isupdate=0 limit 200";
				pst = conn.prepareStatement(yxysql);
				rs  = pst.executeQuery(); 
				while(rs.next()){
					int sing_cid = rs.getInt("sing_cid");
					String mail_uid = rs.getString("mail_uid");
					String mail_loginid = rs.getString("mail_loginid");
					String mail_domain = rs.getString("mail_domain");
					String mail_readIP = rs.getString("mail_readIP");
					String mail_readDate = rs.getString("mail_readDate");
					String mail_read_email = rs.getString("mail_read_email");
					String mail_useragent = rs.getString("mail_useragent");
					if(mail_uid!=null&&mail_read_email!=null){
						mail_uid=mail_uid.replace("'", "").replace("(", "").replace(")", "").replace(".", "").replace(",", "");
						mail_read_email=mail_read_email.replace("'", "").replace("(", "").replace(")", "").replace(",.", "").replace(",", "");
						if("sale100.com".equals(mail_domain)){//个人版的营销邮
							yxy.timer.sale.YxyMailNumCountInfo count = yxyreadservice.getYxyMailNumCount2(mail_uid);
							if(count == null){//添加 
								count = new yxy.timer.sale.YxyMailNumCountInfo();
								count.setId(0);
								count.setMail_uid(mail_uid);
								count.setRead_person(1);
								count.setRead_all(1);
							}else{//编辑
								int readperson = 0;//点读人数,如果已经存在该邮件地址对应的邮件点读信息则阅读人数不加1,否则加1
								String hql = "select count(yxy_reading_id) from YxyReadingInfo where yxy_reading_mailuid='"+mail_uid+"' and yxy_reading_email='"+mail_read_email+"'";
								int counts = yxyreadservice.findisRecode2(hql);
								if(counts == 0){//该封邮件没有该邮件地址的点读信息
									readperson = 1;
								}
								count.setRead_person(count.getRead_person()+readperson);
								count.setRead_all(count.getRead_all()+1);
							}
							//获取ip所属地区
							String area = "未知";
							if(mail_readIP!=null&&!"".equals(mail_readIP)&&!"unknown".equals(mail_readIP)){
								area = getArea.getArea(mail_readIP);
							}
							yxy.timer.sale.YxyReadingInfo read = new yxy.timer.sale.YxyReadingInfo();
							read.setYxy_reading_loginid(mail_loginid);
							read.setYxy_reading_domain(mail_domain);
							read.setYxy_reading_mailuid(mail_uid);
							read.setYxy_reading_ip(mail_readIP);
							read.setYxy_reading_date(mail_readDate);
							read.setYxy_reading_email(mail_read_email);
							read.setYxy_reading_area(area);
							read.setYxy_useragent(UserAgentUtil.parseUserAgent(mail_useragent));
							read.setYxy_useragent_all(mail_useragent);
							if(mail_readDate!=null&&!mail_readDate.equals("")){
								mail_readDate = mail_readDate.split(" ")[0];
							}else{
								mail_readDate = DateFormat.getNowDate().split(" ")[0];
							}
							int month = Integer.parseInt(mail_readDate.split("-")[1]);
							int year = Integer.parseInt(mail_readDate.split("-")[0]);
							read.setYxy_reading_month(month);
							read.setYxy_reading_year(year);
							//添加点读信息
							yxyreadservice.insertRead2(read);
							//添加邮件对应的数量统计
							yxyreadservice.addEditYxyMailNumCount2(count);
						}else{//自己的营销邮
							yxy.timer.pojo.YxyMailNumCount count = yxyreadservice.getYxyMailNumCount(mail_uid);
							if(count == null){//添加 
								count = new yxy.timer.pojo.YxyMailNumCount();
								count.setId(0);
								count.setMail_uid(mail_uid);
								count.setRead_person(1);
								count.setRead_all(1);
							}else{//编辑
								int readperson = 0;//点读人数,如果已经存在该邮件地址对应的邮件点读信息则阅读人数不加1,否则加1
								String hql = "select count(yxy_reading_id) from YxyReadingInfo where yxy_reading_mailuid='"+mail_uid+"' and yxy_reading_email='"+mail_read_email+"'";
								int counts = yxyreadservice.findisRecode(hql);
								if(counts == 0){//该封邮件没有该邮件地址的点读信息
									readperson = 1;
								}
								count.setRead_person(count.getRead_person()+readperson);
								count.setRead_all(count.getRead_all()+1);
							}
							//获取ip所属地区
							String area = "未知";
							if(mail_readIP!=null&&!"".equals(mail_readIP)&&!"unknown".equals(mail_readIP)){
								area = getArea.getArea(mail_readIP);
							}
							yxy.timer.pojo.YxyReadingInfo read = new yxy.timer.pojo.YxyReadingInfo();
							read.setYxy_reading_loginid(mail_loginid);
							read.setYxy_reading_domain(mail_domain);
							read.setYxy_reading_mailuid(mail_uid);
							read.setYxy_reading_ip(mail_readIP);
							read.setYxy_reading_date(mail_readDate);
							read.setYxy_reading_email(mail_read_email);
							read.setYxy_reading_area(area);
							read.setYxy_useragent(UserAgentUtil.parseUserAgent(mail_useragent));
							read.setYxy_useragent_all(mail_useragent);
							if(mail_readDate!=null&&!mail_readDate.equals("")){
								mail_readDate = mail_readDate.split(" ")[0];
							}else{
								mail_readDate = DateFormat.getNowDate().split(" ")[0];
							}
							int month = Integer.parseInt(mail_readDate.split("-")[1]);
							int year = Integer.parseInt(mail_readDate.split("-")[0]);
							read.setYxy_reading_month(month);
							read.setYxy_reading_year(year);
							//添加点读信息
							yxyreadservice.insertRead(read);
							//添加邮件对应的数量统计
							yxyreadservice.addEditYxyMailNumCount(count);
						}
					}
					//更新远程
					conn.setAutoCommit(false);
					String updatesql="update yxy_singreadinfo set mail_isupdate = ? where sing_cid= ?";
					pst = conn.prepareStatement(updatesql);
					pst.setInt(1, 1);
					pst.setInt(2, sing_cid);
					pst.executeUpdate();
					conn.commit();
					System.out.println("邮件点读量处理中...");
				}
			}
			System.out.println("正常结束从远程获取点读信息");
			
			
			
			
			
			
//			SimpleDateFormat df1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//			String nowTimer=df1.format(new Date());
//			SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
//			String nowdate=df.format(new Date());
//			//定时获取点读信息
//			//==============================营销邮点读获取===================================
//			//定义本地点击对象集合
//			List<YxyReadingInfo> readinglist=new ArrayList<YxyReadingInfo>();
//			System.out.println(nowTimer+"营销点读信息进来了===");
//			//1.查出远程点击记录
//			conn = DBUtil.getConnection("clickdataSource");
//			String yxysql="select * from yxy_singreadinfo where mail_isupdate=0 limit 200";
//			pst = conn.prepareStatement(yxysql);
//			rs  = pst.executeQuery();
//			int idpk=0;
//			String mailUID="";//邮件UID
//			String mailAddr="";//点读地址
//			int readNun;//点读量
//			String reademail="";//点读者email
//			String readdomain="";//域名
//			String readloginid="";////账号
//			String readip="";//点读IP
//			String readuid="";////点读邮件唯一码
//			String readuseragent="";
//			int readnum=0;//点读量 
//			//循环处理新的数据
//			while(rs.next()){
//				System.out.println("点读执行中............");
//				idpk=rs.getInt("sing_cid");
//				reademail=rs.getString("mail_read_email");
//				readdomain=rs.getString("mail_domain");
//				readloginid=rs.getString("mail_loginid");
//				readip=rs.getString("mail_readIP");
//				readuid=rs.getString("mail_uid");
//				readnum=rs.getInt("mail_readnum");
//				readuseragent=rs.getString("mail_useragent");
//				if(reademail!=null&&readdomain!=null&&readloginid!=null&&readip!=null&&readuid!=null){
//					String readDate=rs.getString("mail_readDate");
//					//定义本地对象
//					YxyReadingInfo o=new YxyReadingInfo();
//					int isexit=0;//是否存在
//					//取值赋值
//					o.setYxy_reading_domain(readdomain);//域名
//					o.setYxy_reading_loginid(readloginid);//账号
//					o.setYxy_reading_ip(readip);//点读IP
//					o.setYxy_reading_date(readDate);//点读日期
//					o.setYxy_reading_mailuid(readuid);//点读邮件唯一码
//					o.setYxy_reading_email(reademail);//点读者email
//					o.setYxy_reading_num(readnum);//点读量
//					o.setYxy_useragent(UserAgentUtil.parseUserAgent(readuseragent));
//					o.setYxy_useragent_all(readuseragent);
//					if(readDate!=null&&!readDate.equals("")){
//						int month=Integer.parseInt(readDate.split("-")[1]);
//						int year=Integer.parseInt(readDate.split("-")[0]);
//						o.setYxy_reading_month(month);//所在月份
//						o.setYxy_reading_year(year);//所在年份
//					}else{
//						o.setYxy_reading_month(Integer.parseInt(nowdate.split("-")[1]));//所在月份
//						o.setYxy_reading_year(Integer.parseInt(nowdate.split("-")[0]));//所在年份
//					}
//					boolean isexits=false;
//					//查询本地库是否存在了
//					String hql="select yxy_reading_num from YxyReadingInfo where yxy_reading_mailuid='"+readuid+"' and yxy_reading_email='"+reademail+"'";
//					int count=yxyreadservice.findisRecode(hql);
//					if(count>0){//有记录
//						if(count!=readnum){
//							//更新
//							String updatesql="update yxy_reading_info set yxy_reading_num="+readnum+" where yxy_reading_mailuid='"+readuid+"' and yxy_reading_email='"+reademail+"'";
//							yxyreadservice.updateBySql(updatesql);
//							conn.setAutoCommit(false);
//							String updateclicksql="update yxy_singreadinfo set mail_isupdate=1 where sing_cid="+idpk;
//							pst = conn.prepareStatement(updateclicksql);
//							pst.executeUpdate();
//							conn.commit();
//						}else{
//							conn.setAutoCommit(false);
//							String updateclicksql="update yxy_singreadinfo set mail_isupdate=1 where sing_cid="+idpk;
//							pst = conn.prepareStatement(updateclicksql);
//							pst.executeUpdate();
//							conn.commit();
//						}
//					}else{//无记录
//						//将点读信息插入到本地数据库中
//						int result=yxyreadservice.insertRead(o);
//						if(result>0){
//							//更新远程
//							conn.setAutoCommit(false);
//							String updatesql="update yxy_singreadinfo set mail_isupdate=1 where sing_cid="+idpk;
//							pst = conn.prepareStatement(updatesql);
//							pst.executeUpdate();
//							conn.commit();
//						}
//					}
//				}else{
//					//更新远程
//					conn.setAutoCommit(false);
//					String updatesql="update yxy_singreadinfo set mail_isupdate=1 where sing_cid="+idpk;
//					pst = conn.prepareStatement(updatesql);
//					pst.executeUpdate();
//					conn.commit();
//				}
//			}
//			System.out.println("点读获取成功---");
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("异常从远处获取点读信息");
		}finally{
			DBUtil.close(rs, pst, conn);
			isRun = false;//更改状态为非执行
		}
		
		//-----------------------------处理邮件具体点读量---------------------------------
//		try {
//			System.out.println("开始处理邮件具体点读量");
//			Map<String,Integer> readmap=new HashMap<String,Integer>();
//			for(int i=0;i<readinglist.size();i++){
//				String mailuid=readinglist.get(i).getYxy_reading_mailuid();//邮件唯一码
//				//判断是否存在此键(uid作为键)
//				boolean isexits=readmap.containsKey(mailuid);
//				if(isexits){
//					int mailnum=readmap.get(mailuid);
//					readmap.put(mailuid,mailnum+1);
//				}else{
//					readmap.put(mailuid,1);
//				}
//			}
//			
//			//循环map
//			Iterator<Entry<String, Integer>>  iter = readmap.entrySet().iterator();
//			while (iter.hasNext()){
//				Entry<String, Integer> entry=iter.next();
//				String key =entry.getKey();
//				int value =entry.getValue();
//				//查询历史的
//				String findold="select reading_tol from yxy_send_mail_master_base where mail_uid='"+key+"'";
//				List<Object> oldlist=yxyreadservice.findBySqlQuery(findold);
//				if(oldlist.size()>0){
//					value=value+Integer.parseInt(oldlist.get(0).toString());
//				}
//				//修改邮件信息
//				String mailsql="update yxy_send_mail_master_base set reading_tol="+value+" where mail_uid='"+key+"'";
//				yxyreadservice.updateBySql(mailsql);
//			}
//			System.out.println("处理邮件具体点读量结束!");
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
		
		
//		//处理地址点读量
//		try {
//			System.out.println("开始处理地址点读量统计");
//			String domain="";
//			String loginid="";
//			String email="";
//			for(int i=0;i<readinglist.size();i++){
//				domain=readinglist.get(i).getYxy_reading_domain();
//				loginid=readinglist.get(i).getYxy_reading_loginid();
//				email=readinglist.get(i).getYxy_reading_email();
//				
//				//查询历史地址量
//				String sql="select readingnum from yxy_user_address where user_domain='"+domain+"' and user_loginid='"+loginid+"' and user_addr_email='"+email+"'";
//				List<Object> objlist=yxyreadservice.findBySqlQuery(sql);
//				if(objlist.size()>0){
//					int newreadnum=Integer.parseInt(objlist.get(0).toString())+1;
//					//更新量
//					String updatesql="update yxy_user_address set readingnum="+newreadnum+" where user_domain='"+domain+"' and user_loginid='"+loginid+"' and user_addr_email='"+email+"'";
//					yxyreadservice.updateBySql(updatesql);
//				}
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
		
//		//======================以前的点击地区赋值===================
//		//查询出前1000条点读地区为空的点读信息
//		try {
//			System.out.println("*********************************************");
//			String readAre="未知";
//			List<YxyReadingInfo> readAll=yxyreadservice.findAllRead();
//			if(readAll.size()>0){
//				for(int i=0;i<readAll.size();i++){
//					readAre="未知";
//					if(readAll.get(i).getYxy_reading_ip()!=null&&!readAll.get(i).getYxy_reading_ip().equals("")){
//						readAre=getArea.getArea(readAll.get(i).getYxy_reading_ip());
//					}
//					readAll.get(i).setYxy_reading_area(readAre);
//				}
//				//批量更新
//				yxyreadservice.insertReadPi(readAll);
//			}
//			
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
	}
	
	private YxyReadService yxyreadservice;//点读service
	public YxyReadService getYxyreadservice() {
		return yxyreadservice;
	}
	public void setYxyreadservice(YxyReadService yxyreadservice) {
		this.yxyreadservice = yxyreadservice;
	}
}