package com.chinacreator.process.job;

import java.net.URLEncoder;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.log4j.Logger;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.PersistJobDataAfterExecution;
import org.springframework.beans.factory.annotation.Autowired;
import com.chinacreator.common.util.DESUtil;
import com.chinacreator.common.util.URLUtil;
import com.chinacreator.process.dao.DictionaryDao;
import com.chinacreator.process.util.JsonUtil;
import com.chinacreator.video.queue.MessageService;
import com.chinacreator.video.queue.bean.MessagePipe;

@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class CShandleSmsJob {

	private Logger logger = Logger.getLogger("cssms");
	private Logger log = Logger.getLogger(CShandleSmsJob.class);

	@Autowired
	private DictionaryDao dictionaryDao;

	@Autowired
	private MessageService messageService;

	private final static String F_SMS_CONTENT ="很遗憾，由于系统错误{0}，畅视业务办理失败，详情请咨询10010";
	
	private final static String T_SMS_CONTENT ="温馨提示，您申请的畅视业务正在办理中，稍后请以短信通知为准，详情请咨询10010超时时间要求：超时时间>30秒";
	
	private final static String E_SMS_CONTENT = "畅视生效提醒:您的畅视业务已生效。请完成以下步骤操作1、点开链接下载最新版畅视合作客户端http:// changshi.wo.cn/cs/xuanchuan.html  2、在合作客户端内激活畅视业务。注意:未激活客户端将无法正常免流量使用!【畅视如非自己开通,则为系统赠送,详情咨询:10010】";
	
	private final static String S_SMS_CONTENT = "温馨提示：您的畅视业务订购成功，请刷新页面查看最终订购状态。";
	
	private final static String B_SMS_CONTENT = "尊敬的用户，为感谢您对联通WO+视频定向流量产品的支持与使用，赠送您400MB省内流量包（当月有效，次月失效），本月赠送流量已经到账。WO+视频邀您畅享视频，流量无忧，详情可咨询4000600611";
	
	private final static String ECB_SMS_CONTENT = "亲爱的{0}用户，您已成功订购无限畅视业务，现可免费领取一个月爱奇艺会员，点击http://changshi.wo.cn/wx/index.html 享受省时跳广告、超清不卡顿等尊贵会员权益，数量有限，先到先得！更多精彩内容，请关注中国联通无限畅视业务!";
	
	private final static String WXCS_SMS_CONTENT = "感谢您对无限畅视业务的支持，祝您使用愉快！活动赠送的两个500M全国流量包将于48小时内到账，具体到账时间请以短信通知为准。";
	
	//private final static String TENCNETORDER_SMS_CONTENT = "温馨提示：您于{0}月{1}日订购的腾讯定向流量会员包月已办理成功，资费20元/月，自然月收费，次月自动续订。生效后请打开腾讯视频客户端进行手动激活（点击http://v.wo.cn/vipjh 了解），激活成功后在观看视频时有免流量标识即已免流量观看；订购当月务必通过 http://v.wo.cn/viphy 领取腾讯VIP会员，次月不能再领取上月会员。当月领取会员的次月续订用户会员自动续订，无需再次领取！";

	private final static String TENCNETORDER_SMS_CONTENT = "温馨提示：您于{0}月{1}日订购的腾讯定向流量会员包月已办理成功，资费20元/月，自然月收费，次月自动续订。生效后请打开腾讯视频客户端进行手动激活（点击 http://v.wo.cn/vipjh 了解），激活成功后在观看视频时有免流量标识即已免流量观看；订购当月务必通过 http://v.wo.cn/viphy 领取腾讯VIP会员，次月不能再领取上月会员。当月领取会员的次月续订用户会员自动续订，无需再次领取！您可在腾讯视频客户端进行退订";
			
	private final static String TENCENTCANCEL_SMS_CONTENT = "您已退订联通（腾讯）定向免流会员包";

	private final static String TENCENTCANCEL_FAIL_CONTENT = "尊敬的用户，因产品重叠，“WO+视频腾讯定向流量包月”退订失败，请通过10010或线下营业厅自行退订，给您带来的不便敬请谅解。";

	private final static String CCTVORDER_SMS_CONTENT  = "温馨提示：您于{0}月{1}日订购的CCTV手机电视免流会员包月已办理成功，资费12元/月，自然月收费，次月自动续订。生效后请打开CCTV手机电视客户端进行手动激活（点击 http://v.wo.cn/fifajh 了解），激活成功后在观看视频时有免流量标识即已免流量观看；CCTV手机电视客户端会员会发放至本号码，请务必以本号码获取动态码登录CCTV手机电视客户端使用会员。祝您使用愉快！现关注“畅视互娱”公众号回复“邀请计划”，可领取福利哦!您可在CTV手机电视客户端进行退订";
	
	private final static String CCTVCANCEL_SMS_CONTENT  = "您已退订中国联通CCTV手机电视定向流量会员包";
	
	private final static String AIQY_SMS_CONTENT = "您于{0}月{1}日订购的WO+视频爱奇艺定向流量产品已办理成功，资费15元/月，自然月收费，次月自动续订。同时感谢您参与送7天会员活动，请戳此链接进行领取 http://v.wo.cn/aqysms ，也可以在爱奇艺客户端领取。现关注“畅视互娱”公众号回复“邀请计划”，可领取福利哦!您可在爱奇艺客户端进行退订";

	private final static String TENCENTCONTINUE_FAILSMS_CONTENT = "尊敬的用户，万分抱歉的通知您，由于系统为您续订腾讯定向流量会员包月产品扣费失败，免流服务已于上月底截止，腾讯视频VIP会员有效期自会员领取日起31天失效，且本月不再续送。诚挚的邀请您继续使用本业务，请拨打10010或点链接进行重新订购 http://v.wo.cn/dx01 ";
	
	private final static String AIQY_GIVEVIP_CONTENT = "感谢参与WO+视频爱奇艺月会员领取活动，爱奇艺31天会员已赠送至此号码，通过此号码登录客户端即可使用，过期无效。";
	
	private final static String AIQY_ORDER_CONTENT = "感谢参与WO+视频爱奇艺定向流量送31天会员活动，请戳此链接进行领取 http://v.wo.cn/aqysms31 ，也可以在爱奇艺客户端领取。";
	
	private final static String AIQY_ORDER20_CONTENT="您于{0}月{1}日订购的联通免流+爱奇艺VIP月会员产品已办理成功，资费20元/月，自然月收费，次月自动续订。请戳此链接进行领取 http://v.wo.cn/aqy20sms ,也可以在爱奇艺客户端领取。您可在爱奇艺客户端进行退订";
	
	private final static String AIQY_GIVEVIP20_CONTENT="感谢您订购联通免流+爱奇艺VIP月会员产品，爱奇艺31天会员已赠送至此号码，通过此号码登录客户端即可使用，过期无效。";
	
	private final static String AIQY_CONTIMUEVIP20_CONTENT="感谢您订购联通免流+爱奇艺VIP月会员产品，这个月的爱奇艺31天会员已赠送至此号码，使用此号码登录客户端，赶快享用吧！";
	
   private final static String LESHI_ORDER_CONTENT="您于{0}月{1}日订购的联通免流+乐视VIP月会员产品已办理成功，资费12元/月，自然月收费，次月自动续订。请在乐视视频app中，点击我的-我的流量-乐视视频定向流量会员包，激活产品后领取会员。您可在乐视视频客户端进行退订";
	
	private final static String LESHI_CANCEL_CONTENT="您已退订中国联通乐视视频定向流量会员包";
	
	private final static String LESHI_CONTIMUEVIP_CONTENT="本月的乐视会员已经赠送到之前领取会员的乐视账户，感谢使用联通免流+乐视VIP月会员产品。";
	
	private final static String MGTV_ORDER_CONTENT="您于{0}月{1}日订购的联通免流+芒果VIP月会员产品已办理成功，资费16元/月，自然月收费，次月自动续订。请戳此链接进行领取会员：http://v.wo.cn/mgtv16 ，也可以在芒果TV客户端领取。您可在芒果TV客户端进行退订";
	
	private final static String MGTV_CANCEL_CONTENT="您已退订中国联通芒果TV定向流量会员包";
	
	private final static String MGTV_CONTIMUE_CONTENT="本月的芒果VIP会员已经赠送到本号码绑定的芒果TV账户，感谢使用联通免流+芒果VIP月会员产品。";
	
	private final static String KEY = "22fdse33";
	
	private final static String AIQY12_CANCEL_CONTENT ="您已退订中国联通爱奇艺定向流量包";
	
	private final static String TENCENT6_ORDER_CONTENT="您于{0}月{1}日订购的WO+视频腾讯定向流量包月产品已办理成功，资费15元/月，自然月收费，次月自动续订。如有问题，请咨询10010。您可在腾讯视频客户端进行退订";
	
	private final static String TENCENT6_CANCEL_CONTENT="您已退订WO+视频腾讯定向流量包月包";

	private final static String LESHILT952_ORDER_CONTENT="您于{0}月{1}日订购的WO+乐视视频定向流量包包月产品已办理成功，资费15元/月，自然月收费，次月自动续订。如有问题，请咨询10010。您可在乐视视频客户端进行退订";

	private final static String LESHILT952_CANCEL_CONTENT="您已退订WO+乐视视频定向流量包包月包";

	private final static String YOUTU21156_ORDER_CONTENT="您于{0}月{1}日订购的WO+视频优酷定向流量包月产品已办理成功，资费15元/月，自然月收费，次月自动续订。如有问题，请咨询10010。您可在优酷视频客户端进行退订";

	private final static String YOUTU21156_CANCEL_CONTENT="您已退订WO+视频优酷定向流量包月包";

	private final static String BILIBL979_ORDER_CONTENT="您于{0}月{1}日订购的WO+视频哔哩哔哩定向流量包月产品已办理成功，资费15元/月，自然月收费，次月自动续订。如有问题，请咨询10010。您可在哔哩哔哩视频客户端进行退订";

	private final static String BILIBL979_CANCEL_CONTENT="您已退订WO+视频哔哩哔哩定向流量包月包";

	private final static String MANGTV1005_ORDER_CONTENT="您于{0}月{1}日订购的WO+视频芒果TV定向流量包月产品已办理成功，资费15元/月，自然月收费，次月自动续订。如有问题，请咨询10010。您可在芒果TV视频客户端进行退订";

	private final static String MANGTV1005_CANCEL_CONTENT="您已退订WO+视频芒果TV定向流量包月包";

	private final static String PPTV11_ORDER_CONTENT="您于{0}月{1}日订购的WO+视频PPTV定向流量包月产品已办理成功，资费15元/月，自然月收费，次月自动续订。如有问题，请咨询10010。您可在PPTV视频客户端进行退订";

	private final static String PPTV11_CANCEL_CONTENT="您已退订WO+视频PPTV定向流量包月包";

	private final static String BESTV980_ORDER_CONTENT="您于{0}月{1}日订购的WO+bestv定向流量包包月产品已办理成功，资费15元/月，自然月收费，次月自动续订。如有问题，请咨询10010。您可在百事通视频客户端进行退订";

	private final static String BESTV980_CANCEL_CONTENT="您已退订WO+bestv定向流量包包月包";
	
	private final static String AIQY1018_CANCEL_CONTENT="您已退订爱奇艺定向流量会员包（前向）包";
	
	private final static String AIQY1017_CANCEL_CONTENT="您已退订WO+视频爱奇艺定向流量包月包";
	
	private final static String YOUTU15_GIVEVIP_CONTENT="感谢您参与订购优酷流量包送优酷7天VIP会员活动，优酷7天VIP会员已充值至订购号码，请您及时查收。活动期间订购且不退订用户，截止至2019年12月31日前每月初可获赠优酷7天VIP会员。《时间的朋友》跨年演讲，我在优酷等你。";

	private final static String TWOWEI10013_ORDER_CONTENT="尊敬的用户，您已开通中国联通-腾讯视频免流会员体验卡，请您通过领取时使用的手机号登录腾讯视频客户端激活使用（点击 http://v.wo.cn/vipjh 了解）。温馨提示：要在视频播放中看到免流标识，方可确认免流量使用，如未能正常显示请参见 http://v.wo.cn/vipjh 。祝您使用愉快。";
	
	private final static String TWOWEI10013_CANCEL_CONTENT="您体验的联通-腾讯视频定向免流将于本月底到期，到期后自动退订。搜索公众号“联通视频权益助手”，体验更多精彩视频服务。";
	
	private final static String TWOWEI10014_ORDER_CONTENT="尊敬的用户，您已开通中国联通-爱奇艺免流会员体验卡，请您通过领取时使用的手机号登录爱奇艺客户端激活使用（点击 http://v.wo.cn/iqiyi20 了解）。温馨提示：要在视频播放中看到免流标识，方可确认免流量使用，如未能正常显示请参见 http://v.wo.cn/iqiyi20 。祝您使用愉快。";
	
	private final static String TWOWEI10014_CANCEL_CONTENT="您体验的联通-爱奇艺视频定向免流将于本月底到期，到期后自动退订。搜索公众号“联通视频权益助手”，体验更多精彩视频服务。";
	

	public void doProcess() throws Exception {
		log.info("超时，生效短信job开始执行");
		if (dictionaryDao.getValue("recivemq").equals("0")) {
			List<MessagePipe> list = messageService.reciveBatchMessage("cssms", 500);
			if(list != null && list.size()>0){
				log.info("超时，生效短信需要发送："+list.size());
				for (MessagePipe messagePipe : list) {
					String result ="";
					String resultcode =(String) messagePipe.getBody().get("result");
					String userid = (String) messagePipe.getBody().get("userid");
					String times = (String) messagePipe.getBody().get("times");
					int style = NumberUtils.toInt((String)messagePipe.getBody().get("style"));
					try{
					String content = "";
					switch (style) {
					case 0:
						content =F_SMS_CONTENT.replace("{0}", resultcode);
						break;
					case 1:
						content =T_SMS_CONTENT;
						break;
					case 2:
						content =E_SMS_CONTENT;
						break;
					case 3:
						content =S_SMS_CONTENT;
						break;
					case 4:
						content =B_SMS_CONTENT;
						break;
					case 5:
						content =ECB_SMS_CONTENT.replace("{0}", userid);
						break;
					case 6:
						content =WXCS_SMS_CONTENT;
						break;
					case 7:
						content =TENCNETORDER_SMS_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));
						break;
					case 8:
						content =TENCENTCANCEL_SMS_CONTENT;
						break;
					case 9:
						content =TENCENTCANCEL_FAIL_CONTENT;
						break;
					case 10:
						content =CCTVORDER_SMS_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));
						break;
					case 11:
						content =CCTVCANCEL_SMS_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));
						break;
					case 12:
						content =AIQY_SMS_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));;
						break;
					case 13:
						content =TENCENTCONTINUE_FAILSMS_CONTENT;
						break;
					case 14:
						content =AIQY_GIVEVIP_CONTENT;
						break;
					case 15:
						content =AIQY_ORDER_CONTENT;
						break;
					case 16:
						content =AIQY_ORDER20_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));
						break;
					case 17:
						content =AIQY_GIVEVIP20_CONTENT;
						break;
					case 18:
						content =AIQY_CONTIMUEVIP20_CONTENT;
						break;
					default:
					case 20:
						content =LESHI_ORDER_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));
						break;
					case 21:
						content =LESHI_CANCEL_CONTENT;
						break;
					case 22:
						content =MGTV_ORDER_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));
						break;
					case 23:
						content =MGTV_CANCEL_CONTENT ;
						break;
					case 24:
						content =LESHI_CONTIMUEVIP_CONTENT;
						break;
					case 25:
						content =MGTV_CONTIMUE_CONTENT;
						break;
					case 26:
						content =AIQY12_CANCEL_CONTENT;
						break;
					case 30:
						content =TENCENT6_ORDER_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));
						break;
					case 31:
						content =LESHILT952_ORDER_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));
						break;
					case 32:
						content =YOUTU21156_ORDER_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));
						break;
					case 33:
						content =BILIBL979_ORDER_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));
						break;
					case 34:
						content =MANGTV1005_ORDER_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));
						break;
					case 35:
						content =PPTV11_ORDER_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));
						break;
					case 36:
						content =BESTV980_ORDER_CONTENT.replace("{0}", DateFormatUtils.format(new Date(), "MM")).replace("{1}", DateFormatUtils.format(new Date(), "dd"));
						break;
					case 37:
						content =TENCENT6_CANCEL_CONTENT;
						break;
					case 38:
						content =LESHILT952_CANCEL_CONTENT;
						break;
					case 39:
						content =YOUTU21156_CANCEL_CONTENT;
						break;
					case 40:
						content =BILIBL979_CANCEL_CONTENT;
						break;
					case 41:
						content =MANGTV1005_CANCEL_CONTENT;
						break;
					case 42:
						content =PPTV11_CANCEL_CONTENT;
						break;
					case 43:
						content =BESTV980_CANCEL_CONTENT;
						break;
					case 45:
						content =AIQY1018_CANCEL_CONTENT;
						break;
					case 44:
						content =AIQY1017_CANCEL_CONTENT;
						break;
					case 50:
						content =YOUTU15_GIVEVIP_CONTENT;
						break;
					case 51:
						content =TWOWEI10013_ORDER_CONTENT;
						break;
					case 52:
						content =TWOWEI10013_CANCEL_CONTENT;
						break;
					case 53:
						content =TWOWEI10014_ORDER_CONTENT;
						break;
					case 54:
						content =TWOWEI10014_CANCEL_CONTENT;
						break;
					}
					if(StringUtils.isNotEmpty(content)){
						result = URLUtil.get("http://10.199.99.147:8092/videoif/channelSmsSend.do?userid="+URLEncoder.encode(DESUtil.encode(userid, KEY),"utf-8")+"&content="+URLEncoder.encode(content,"UTF-8")+"&channel=cssms", 2000);
					}
					}catch(Exception e){
						log.error(userid+"短信发送失败",e);
					}finally {
						Map<String,String> map = new HashMap<String, String>();
						map.put("userid", userid);
						map.put("style", style+"");
						map.put("result", result);
						map.put("times", times);
						logger.info(JsonUtil.objectToJson(map));
					}                                                                                                                                  
				}
			}
		}
	}

	public static void main(String[] args) throws Exception {
		String url = "http://114.255.201.238:8092/videoif/channelSmsSend.do?userid="+URLEncoder.encode(DESUtil.encode("18574414678", KEY),"utf-8")+"&content="+URLEncoder.encode(F_SMS_CONTENT,"utf-8")+"&channel=cssms";
		System.out.println(url);
		System.out.println(URLUtil.get(url, 3000));
	}
	
}
