ae26800639875bd9adf8be4eb21c6cb0c42822fd.svn-base
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;
}
}