审查视图

src/com/espeed/yxy/timer/MarketingPlanTime.java 8.1 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
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;
	}
	
}