a7562d37ce0e82d308c900d271f46d1f26c05629.svn-base 8.4 KB
package yxy.timer.method;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import yxy.timer.service.YxyLinkInfoService;
import yxy.timer.tool.ConfigPath;
import yxy.timer.tool.UserAgentUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/***
 * 从远程获取链接信息
 */
public class GetLinkTimer {
	
	private boolean isRun = false; //判断定时器是否在运行 默认false
	
	public void getLinkInfo()
	{
		try {
			if(!isRun)
			{
				System.out.println("正在从远程获取链接信息...");
				isRun = true;//在运行
				//查询数据库 获取回复最后一条的id
				String hql1 = "from YxyLinkInfo ORDER BY id desc";
				List<yxy.timer.pojo.YxyLinkInfo> links1 = yxylinkinfoservice.findYxyLinkInfoByNum(hql1, 1);
				int linkid1 = 0;
				//判断是否有数据
				if(links1.size()>0)
				{
					linkid1 = links1.get(0).getId();
				}
				//查询数据库获取最后一条的id(个人版sale100)
				String hql2 = "from YxyLinkInfo ORDER BY id desc";
				List<yxy.timer.sale.YxyLinkInfo> links2 = yxylinkinfoservice.findYxyLinkInfoByNum2(hql2, 1);
				int linkid2 = 0;
				//判断是否有数据
				if(links2.size()>0)
				{
					linkid2 = links2.get(0).getId();
				}
				int id = linkid1 > linkid2 ? linkid1 : linkid2;
				List<yxy.timer.pojo.YxyLinkInfo> links = getRemoteLinkList(id);
				if(links1.size() > 0){
					for(yxy.timer.pojo.YxyLinkInfo link : links){
						if(link.getCompany_id() == 46898){//个人版的营销邮
							yxy.timer.sale.YxyMailNumCountInfo count = yxylinkinfoservice.getYxyMailNumCount2(link.getMail_uid());
							if(count == null){//添加
								count = new yxy.timer.sale.YxyMailNumCountInfo();
								count.setId(0);
								count.setMail_uid(link.getMail_uid());
								count.setOpen_url(1);
								count.setOpen_url_all(1);
							}else{//编辑
								int urlperson = 0;//点读人数,如果已经存在该邮件地址对应的邮件点读信息则阅读人数不加1,否则加1
								String hql = "select count(id) from YxyLinkInfo where mail_uid='"+link.getMail_uid()+"' " +
										"and link_email='"+link.getLink_email()+"' and link_url = '"+link.getLink_url()+"'";
								int counts = yxylinkinfoservice.countYxyLinkInfoByHql2(hql);
								if(counts == 0){//该封邮件没有该邮件地址的打开链接信息
									urlperson = 1;
								}
								count.setOpen_url(count.getOpen_url()+urlperson);
								count.setOpen_url_all(count.getOpen_url_all()+1);
							}
							yxy.timer.sale.YxyLinkInfo link2 = new yxy.timer.sale.YxyLinkInfo();
							link2.setId(link.getId());
							link2.setUser_id(link.getUser_id());
							link2.setCompany_id(link.getCompany_id());
							link2.setLink_email(link.getLink_email());
							link2.setMail_uid(link.getMail_uid());
							link2.setLink_url(link.getLink_url());
							link2.setUser_agent(link.getUser_agent());
							link2.setUser_agent_all(link.getUser_agent_all());
							link2.setIp(link.getIp());
							link2.setArea(link.getArea());
							link2.setCreate_time(link.getCreate_time());
							link2.setLink_year(link.getLink_year());
							link2.setLink_month(link.getLink_month());
							link2.setLink_day(link.getLink_day());
							//添加链接信息
							yxylinkinfoservice.addLink2(link2);
							//添加邮件对应的数量统计
							yxylinkinfoservice.addEditYxyMailNumCount2(count);
						}else{//自己的营销邮
							yxy.timer.pojo.YxyMailNumCount count = yxylinkinfoservice.getYxyMailNumCount(link.getMail_uid());
							if(count == null){//添加
								count = new yxy.timer.pojo.YxyMailNumCount();
								count.setId(0);
								count.setMail_uid(link.getMail_uid());
								count.setOpen_url(1);
								count.setOpen_url_all(1);
							}else{//编辑
								int urlperson = 0;//点读人数,如果已经存在该邮件地址对应的邮件点读信息则阅读人数不加1,否则加1
								String hql = "select count(id) from YxyLinkInfo where mail_uid='"+link.getMail_uid()+"' " +
										"and link_email='"+link.getLink_email()+"' and link_url = '"+link.getLink_url()+"'";
								int counts = yxylinkinfoservice.countYxyLinkInfoByHql(hql);
								if(counts == 0){//该封邮件没有该邮件地址的打开链接信息
									urlperson = 1;
								}
								count.setOpen_url(count.getOpen_url()+urlperson);
								count.setOpen_url_all(count.getOpen_url_all()+1);
							}
							//添加链接信息
							yxylinkinfoservice.addLink(link);
							//添加邮件对应的数量统计
							yxylinkinfoservice.addEditYxyMailNumCount(count);
						}
						System.out.println("邮件链接处理中...");
					}
				}
				System.out.println("正常结束从远程获取链接信息");
				isRun = false;//更改状态为非执行
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("异常从远程获取链接信息");
			isRun = false;//更改状态为非执行
		}
	}
	
	//获取远程链接信息
	public static List<yxy.timer.pojo.YxyLinkInfo> getRemoteLinkList(int id){
		List<yxy.timer.pojo.YxyLinkInfo> list = new ArrayList<yxy.timer.pojo.YxyLinkInfo>();
		HttpURLConnection httpUrlConnection = null;
		ByteArrayOutputStream baos = null;
		InputStream in = null;
		String path = ConfigPath.getTrackUrl();
		try {
			String url = path + "/track_getRecordInfos.action?id=" + id; 
			URLConnection urlConnection = new URL(url).openConnection();
			httpUrlConnection = (HttpURLConnection) urlConnection;
			httpUrlConnection.setDoOutput(true);
			httpUrlConnection.setDoInput(true);
			httpUrlConnection.setUseCaches(false);
			httpUrlConnection.setRequestMethod("POST");
			int responseCode = httpUrlConnection.getResponseCode();
			String result = null;
			if (HttpURLConnection.HTTP_OK == responseCode) {
				baos = new ByteArrayOutputStream();
				byte[] buffer = new byte[1024];
				int len = 0;
				in = httpUrlConnection.getInputStream();
				while ((len = in.read(buffer)) != -1) {
					baos.write(buffer, 0, len);
					baos.flush();
				}
				result = baos.toString("UTF-8");
				if (result != null && !result.equals("") && result.length() > 0) {
					JSONArray array = JSONArray.parseArray(result);
					for(int i=0; i<array.size(); i++){
						JSONObject json = array.getJSONObject(i);
						if(null!=json.getString("mail_uid")&&!"".equals(json.getString("mail_uid"))&&
								null!=json.getString("access_email")&&!"".equals(json.getString("access_email"))&&
								null!=json.getString("access_url")&&!"".equals(json.getString("access_url")))
						{
							yxy.timer.pojo.YxyLinkInfo info = new yxy.timer.pojo.YxyLinkInfo();
							info.setId(json.getIntValue("id"));
							info.setUser_id(json.getIntValue("user_id"));
							info.setCompany_id(json.getIntValue("company_id"));
							info.setLink_email(json.getString("access_email"));
							info.setMail_uid(json.getString("mail_uid"));
							info.setLink_url(json.getString("access_url").replace("'", ""));
							info.setUser_agent_all(json.getString("user_agent"));
							info.setUser_agent(UserAgentUtil.parseUserAgent(json.getString("user_agent")));
							info.setIp(json.getString("ip"));
							info.setArea(json.getString("country")+json.getString("province")+json.getString("city"));
							info.setCreate_time(json.getString("create_time"));
							String create_date = info.getCreate_time().split(" ")[0];
							int link_year = Integer.parseInt(create_date.split("-")[0]);
							int link_month = Integer.parseInt(create_date.split("-")[1]);
							int link_day = Integer.parseInt(create_date.split("-")[2]);
							info.setLink_year(link_year);
							info.setLink_month(link_month);
							info.setLink_day(link_day);
							list.add(info);
						}
					}
				}
			}
		}catch (Exception e) {
			//e.printStackTrace();
		} finally {
			if (baos != null) {
				try {
					baos.close(); 
				} catch (IOException e) {
					
				}
			}
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
				}
			}
			if (httpUrlConnection != null) {
				httpUrlConnection.disconnect();
			}
		}
		return list;
	}
	
	private YxyLinkInfoService yxylinkinfoservice;
	public YxyLinkInfoService getYxylinkinfoservice() {
		return yxylinkinfoservice;
	}
	public void setYxylinkinfoservice(YxyLinkInfoService yxylinkinfoservice) {
		this.yxylinkinfoservice = yxylinkinfoservice;
	}

	public static void main(String[] args) {
		System.out.println(getRemoteLinkList(2));
	} 
}