ae26800639875bd9adf8be4eb21c6cb0c42822fd.svn-base 8.1 KB
package com.espeed.yxy.timer;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import com.espeed.centre.pojo.CentreYxyedmOldcustomer;
import com.espeed.yxy.pojo.YxyMailStencil;
import com.espeed.yxy.pojo.YxyMarketingPlan;
import com.espeed.yxy.pojo.YxyMarketingWeek;
import com.espeed.yxy.pojo.YxySendMailMaster;
import com.espeed.yxy.pojo.YxySenderSet;
import com.espeed.yxy.pojo.YxyUserAddress;
import com.espeed.yxy.service.YxyMarketingPlanService;
import com.espeed.yxy.service.YxySendMailService;
import com.espeed.yxy.tool.GetRandom;
import com.espeed.yxy.tool.GreateEmlFile;
import com.espeed.yxy.tool.LogsTool;

/***
 * 
 * @author 谢勇
 * 营销计划定时器方法
 *
 */

public class MarketingPlanTime {
	public static boolean isrun=false;
	/**营销计划执行*/
	public void marketingmethod(){
		if(!isrun){
			try {
				isrun=true;
				System.out.println("营销计划开始执行...");		
				//是否有可执行的营销计划
				List<YxyMarketingPlan> planlist=marketingplanservice.findHavePlan();
				if(planlist.size()>0){
					//当前时间
					SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
					SimpleDateFormat df2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
					String nowtime=df2.format(new Date());
					String nowdate=df.format(new Date());
					//如果有营销计划则生成待发邮件
					for(int i=0;i<planlist.size();i++){
						int planaddressid=planlist.get(i).getPlan_groupid();//计划地址id
						int plan_differen = planlist.get(i).getPlan_differen();//区分客户的本地和CRM库 0:本地  1:CRM
						//查询营销计划选择的模版
						List<YxyMarketingWeek> weeklist=planlist.get(i).getWeeklist();
						//模版信息
						YxyMailStencil stencil=new YxyMailStencil();
						int weekid=0;//周期时间
						int weekok=0;//周期是否执行完成
						boolean ishaveplan=false;
						//选择当日周几的计划
						for(int j=0;j<weeklist.size();j++){
							if(nowdate.equals(weeklist.get(j).getWeek_day())&&weeklist.get(j).getIsexecution()==0){
								ishaveplan=true;
								weekid=weeklist.get(j).getWeek_id();
								//获取模版信息
								stencil=marketingplanservice.findStencilInfo(weeklist.get(j).getMode_id());
								break;
							}else if(weeklist.get(j).getIsexecution()==1){
								weekok++;
							}
						}
						if(weekok==weeklist.size()){//所有周期执行完毕则改为已执行
							marketingplanservice.updatePlanStatus(planlist.get(i).getPlan_id(), 1);
						}else{//未执行完毕则改为正在执行
							marketingplanservice.updatePlanStatus(planlist.get(i).getPlan_id(), -1);
						}
						//判断是否有执行计划
						if(ishaveplan){
							//是否有模版
							if(stencil.getStencil_id()>0){
								String loginid=planlist.get(i).getLoginid();
								String domain=planlist.get(i).getDomain();
								//查询发件人
								YxySenderSet sender=marketingplanservice.findSender(loginid, domain);
								if(sender!=null){
									SimpleDateFormat df1=new SimpleDateFormat("yyyyMMddHHmmssSSS");
									String romdate=df1.format(new Date());
									
									//生成待发邮件
									YxySendMailMaster master=new YxySendMailMaster();
									master.setSubject(stencil.getStencil_name());//主题
									master.setSender(sender.getSender());//发件人姓名
									master.setSend_email(sender.getSend_email());//发件人地址
									master.setReply_email(sender.getReply_email());//回复地址
									master.setBody(stencil.getStencil_body());//内容
									master.setUser_loginid(loginid);//用户账号
									master.setSendci(1);
									master.setUser_domain(domain);//用户域名
									master.setCreate_time(nowtime);//创建时间
									master.setFolder_id(0);//所属文件类别ID
									master.setStatus(0);//邮件所属状态
									master.setPlans_send(0);
									master.setPlans_send_time(null);
									if(plan_differen==1 || plan_differen==3 
											|| plan_differen==5 || plan_differen==7 
											|| plan_differen==9 || plan_differen == 11){//CRM库选择的时候才进行查询盘活客户配置信息
										//查询盘活客户配置信息
										CentreYxyedmOldcustomer old_set  = marketingplanservice.getOldCusSet(domain);
										if(old_set != null){//有配置信息
											if(old_set.getStatus() == 1){//状态是可用的
												if(old_set.getType() == 0){//自有域名
					 								master.setIsold(3);
												}else{//代发模式
													master.setIsold(2);
												}
											}else{//状态不可用
												master.setIsold(1);//老客户营销邮
											}
										}else{//无配置信息
											master.setIsold(1);//老客户营销邮 
										}
									}else if(plan_differen==2 || plan_differen==4 
											|| plan_differen==6 || plan_differen==8
											|| plan_differen==10 || plan_differen==12){//CRM库发送但超标了
										master.setIsold(4);
									}else{//本地库选择的时候还是老客户营销
										master.setIsold(1);//老客户营销邮 
									}
									String random=GetRandom.getRandomString(10);//获取随机数据制定邮件唯一码
									String mailUID=loginid+romdate+random;//邮件唯一码由用户域名+时间格式+随机数
									master.setMail_uid(mailUID);//加入唯一码
									//用户eml文件路径
									String useremlpath=marketingplanservice.findCompanyParamByCode("yxy_user_data_save_path",loginid,domain);
									if(useremlpath==null||useremlpath.equals("")||useremlpath.equals("-1")){
										//系统级
										useremlpath=marketingplanservice.findCompanyParamByCode("yxy_domain_save_path",loginid,domain);
									}
									//eml存放路径
									String emlsavepath=domain+"/"+loginid+"/plan";
									//生成eml文件
									List resulteml=GreateEmlFile.GreateMail(master,loginid,domain,"",useremlpath+"/"+emlsavepath);
									
									int emlsize=Integer.parseInt(resulteml.get(0).toString());//eml文件大小以K存储
									String emlpath=((String)resulteml.get(1));//eml文件存放路径
									emlpath=emlpath.replace(useremlpath, "#####");
									String emlkey=(String)resulteml.get(2);//emlKEY
									String picpath=resulteml.get(4).toString();//图片路径	
									//加入本地eml文件信息(待发表)
									master.setEml_encode_key(emlkey);
									master.setEml_file_path(emlpath);
									master.setMail_size(emlsize);
									master.setImage_path(picpath);
									//查询地址
									List<YxyUserAddress> sendaddress=marketingplanservice.findAddressByGroupid(planaddressid,plan_differen,loginid,domain,planlist.get(i).getOther_name());
									//插入到待发表里
									yxysendmailservice.addMailMaster(master,sendaddress,planlist.get(i).getPlan_id(),plan_differen);
								}
								//更新为已执行
								marketingplanservice.updateWeekStatus(weekid,1);
							}else{
								//更新为已执行
								marketingplanservice.updateWeekStatus(weekid,1);
							}
							System.out.println("营销执行计划id:"+planlist.get(0).getPlan_id()+",周期id:"+weekid+"执行完毕...");
						}
					}
				}else{
					System.out.println("未检测到待执行的营销计划...");
				}
				System.out.println("执行计划顺利完成!");
			} catch (Exception e) {
				System.out.println("执行计划异常了...");
				//写入日志
				StringWriter sw = new StringWriter();
				e.printStackTrace(new PrintWriter(sw, true));
		        String str = sw.toString();
				LogsTool.marketPlanLogs(str);
			}
			isrun=false;
		}else{
			System.out.println("执行计划还未完!");
		}
	}
	
	private YxyMarketingPlanService marketingplanservice;//计划service
	private YxySendMailService yxysendmailservice;//邮件
	
	public YxyMarketingPlanService getMarketingplanservice() {
		return marketingplanservice;
	}
	public void setMarketingplanservice(YxyMarketingPlanService marketingplanservice) {
		this.marketingplanservice = marketingplanservice;
	}
	public YxySendMailService getYxysendmailservice() {
		return yxysendmailservice;
	}
	public void setYxysendmailservice(YxySendMailService yxysendmailservice) {
		this.yxysendmailservice = yxysendmailservice;
	}
	
}