示例#1
0
 /// <summary>
 /// 执行发送作业(延时或立刻)
 /// 需要先注册发送方法
 /// </summary>
 /// <param name="model">发送对象</param>
 /// <param name="response">响应</param>
 public void JobsRun(PMS.Model.CombineModel.SendAndMessage_Model model, out SMSModel_Receive receive)
 {
     receive = new SMSModel_Receive();
     if (DoSendJobs != null)
     {
         DoSendJobs(model,out receive);
     }
     else
     {
         //response = new PMS.Model.Message.BaseResponse() { Message = "未绑定方法", Success = false };
     }
 }
示例#2
0
        public bool SendMsg(SMSModel_Send smsdata, out SMSModel_Receive receiveModel)
        {
            String _data = null;//XML文本
            String _serverURL = "http://wt.3tong.net/http/sms/Submit";//服务器地址
            string returnMsg;

            //1 判断参数是否足够
            if (!SendBeforeCheck(smsdata))
            {
                receiveModel = new SMSModel_Receive()
                {
                    desc = "参数不全",
                    msgid = smsdata.msgid,
                    failPhones = smsdata.phones,
                    result = SMSDictionary.GetResponseCode()[101]
                };

                return false;
            }
            _data = ObjTransform.Model2Xml_FormatSend(smsdata);
            //2.1 http方式发送
            returnMsg = httpInvoke(_serverURL, _data);
            //解析服务器反馈信息
            if (returnMsg.Length < 1)
            {

                returnMsg = "未收到服务器返回信息";
                receiveModel = new SMSModel_Receive()
                {
                    desc = returnMsg,
                    msgid = smsdata.msgid,
                    failPhones = smsdata.phones,
                    result = SMSDictionary.GetResponseCode()[101]
                };
                return false;
            }
            //2.2 将接收到的短信发送回执转换为对象
            receiveModel = ObjTransform.Xml2Model_ReceiveMsg(returnMsg);

            //等待信息发送完成后
            //System.Threading.Thread.Sleep(10000);//10秒
            ////自动重发
            //vipResend();
            return true;
        }
示例#3
0
        /// <summary>
        /// 立刻发送
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public bool SendMsgbyNow(PMS.Model.CombineModel.SendAndMessage_Model model, out SMSModel_Receive receiveModel)
        {
            //SMSModel_Receive receiveModel = new SMSModel_Receive();
            ServiceReference_SMSService.SMSServiceClient client = new ServiceReference_SMSService.SMSServiceClient();

            //重新梳理并做抽象
            #region 11-14 在控制器中已经调用这些方法(现写在控制器中),此处与控制器重复,注释掉
            ////1 根据选定的群组及部门获取相应的联系人
            //var list_PersonPhonesByGroupAndDepartment = GetFinalPersonPhoneList(model.Model_Message, GetPersonListByGroupDepartment);

            ////2 获取临时联系人电话集合

            //var list_tempPersonPhones = AddAndGetTempPersons(model.Model_Message, personBLL, groupBLL);

            ////2.2 获取最终的联系人电话集合
            //list_PersonPhonesByGroupAndDepartment.AddRange(list_tempPersonPhones);
            //var list_phones = list_PersonPhonesByGroupAndDepartment;

            ////3 转成发送对象
            //var sendMsg = ToSendModel(model.Model_Message, list_phones);

            /*步骤四
                    生成提交对象及短信及作业对象
                    由SMSFactory进行短信提交操作(并选择延时/立刻发送)
            */
            //4 短信发送
            //注意:desc:定时时间格式错误;
            //      result:定时时间格式错误
            //PMS.Model.CombineModel.SendAndMessage_Model sendandMsgModel = new PMS.Model.CombineModel.SendAndMessage_Model() { Model_Message = model, Model_Send = sendMsg };
            //model.Model_Send = sendMsg;
            #endregion
            // SMSModel_Receive receive = new SMSModel_Receive();
            PMS.Model.Message.BaseResponse response = new PMS.Model.Message.BaseResponse();
            client.SendMsg(model.Model_Send, out receiveModel);
            //receiveModel = new SMSModel_Receive() { msgid = "210cb72fe038484fb2952d0db96e0ae7", desc = "提交成功", result = "0", failPhones = new string[] { "" } };
            //发送之后执行将发送记录写会数据库的操作
            this.AfterSend(model.Model_Message, receiveModel, model.Model_Send.phones.ToList(), this.redis_list_id, this.Interval_OverTime);
            //SendMsg(model, out response);
            return true;
        }
示例#4
0
        /// <summary>
        /// 延时发送
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public bool SendMsgbyDelayed(PMS.Model.CombineModel.SendAndMessage_Model model,out  SMSModel_Receive response)
        {
            //response = new PMS.Model.Message.BaseResponse();
            //1 创建quartz父类客户端
            // 不使用服务因为此处需要通过反射的方式创建作业实例
            //Quartz_Service.JobServiceClient client = new Quartz_Service.JobServiceClient();
            //ServiceReference_QuartzService.JobServiceClient client = new ServiceReference_QuartzService.JobServiceClient();
            QuartzJobFactory.IJobService client = new QuartzJobFactory.JobService();
            //2 创建发送作业实例(非模板)
            /*此处需要实现:
                           1)向数据库写入创建的新的作业实例
                           2)创建该作业实例的关联表
            */
            //var jobTemplateInstance= jobTemplateBLL.GetListBy(t => t.JTID == 3);
            //jobInfoBLL.Create(new J_JobInfo() { JobName = "发送作业", JobClassName = "SendJob", NextRunTime=model.Model_Message.NextRunTime });
            //找到对应的作业模板(发送作业模板)
            //2.1 查找当前用户
            var user_current= userInfoBLL.GetListBy(u =>u.ID==  model.Model_Message.UID).FirstOrDefault();
            //2.2 根据当前用户找到指定类型(jobType)的作业模板
            var jobTemplate_target = (from t in user_current.J_JobTemplate
                                     where t.JobType == Convert.ToInt32(PMS.Model.Enum.JobType_Enum.sendJob)
                                     select t).FirstOrDefault();
            //2.3 根据作业模板创建作业实例
            //    调用J_JobInfoBLL中的AddJobInfo方法创建作业实例
            J_JobInfo jobInstance = new J_JobInfo()
            {
                UID = model.Model_Message.UID,
                CreateTime = DateTime.Now,
                EndRunTime = model.Model_Message.EndRunTime == DateTime.MinValue ? model.Model_Message.StartRunTime : model.Model_Message.EndRunTime,//此处加入判断,若EndRunTime时间为1/1/1/1这种情况先将起始时间赋给他
                NextRunTime = model.Model_Message.NextRunTime == DateTime.MinValue ? model.Model_Message.StartRunTime : model.Model_Message.NextRunTime,
                StartRunTime = model.Model_Message.StartRunTime,
                JobClassName = jobTemplate_target.JobClassName,
                JobName = jobTemplate_target.JTName,
                JobGroup = jobTemplate_target.JobGroup
            };
            //执行以下操作
            //var jobInstance = jobInfoBLL.GetListBy(j => j.JID == 27).FirstOrDefault();
            //3 创建JobData
            var jobData = new PMS.Model.JobDataModel.SendJobDataModel()
            {

                //4 将前台传入的model值赋给JobData中的JobValue
                JobDataValue=new PMS.Model.CombineModel.SendAndMessage_Model()
                {
                     Model_Send=new SMSModel_Send()
                     {
                         account = model.Model_Send.account,
                         content = model.Model_Send.content,
                         msgid = model.Model_Send.msgid,
                         password = model.Model_Send.password,
                         phones = model.Model_Send.phones,
                         sendtime = model.Model_Send.sendtime,
                         subcode = model.Model_Send.subcode

                     },

                    Model_Message =new PMS.Model.ViewModel.ViewModel_Message()
                    {
                        UID = model.Model_Message.UID,
                        Content=model.Model_Send.content,
                        SMSMissionID=model.Model_Message.SMSMissionID

                    }
                }
                //JobDataValue = new PMS.Model.SMSModel.SMSModel_Send()
                //{
                //    account = model.Model_Send.account,
                //    content = model.Model_Send.content,
                //    msgid = model.Model_Send.msgid,
                //    password = model.Model_Send.password,
                //    phones = model.Model_Send.phones,
                //    sendtime = model.Model_Send.sendtime,
                //    subcode = model.Model_Send.subcode
                //}
            };

            //5 将发送作业实例添加至计划任务中
            //注意此作业实例中需要含UID
            jobInfoBLL.AddJobInfo(jobInstance, jobData);

            //**** 11-16 创建jobInfo与其他的关联(以便在作业管理页面中显示)
            //在job的bll层中创建作业(同时写入数据库,并添加至调度池中)
            /*var response=*/
            //12-6
            //统一写在JobInfoBLL层中的AddJobInfo方法中
            //QuartzProxy.QuartzServiceFacade quartzService = new QuartzProxy.QuartzServiceFacade(new QuartzProxy.QuartzServiceClientProxy());
            //var response_base= quartzService.AddScheduleJob(jobInstance, jobData);
            //client.AddScheduleJob(jobInstance, jobData);
            response = new SMSModel_Receive() { result="0"};
            return true;
        }
示例#5
0
 /// <summary>
 /// 短信发送
 /// </summary>
 /// <param name="smsdata"></param>
 /// <returns></returns>
 public bool SendMsg(PMS.Model.CombineModel.SendAndMessage_Model model, out /*PMS.Model.Message.BaseResponse response*/SMSModel_Receive receive)
 {
     SendJobManagement jobManagement = new SendJobManagement();
     //判断是否开启定时发送功能
     if (model.Model_Message.isTiming)
     {
         //绑定定时发送功能
         //使用作业调度
         jobManagement.DoSendJobs += SendMsgbyDelayed;
     }
     else
     {
         //绑定立刻发送功能
         jobManagement.DoSendJobs += SendMsgbyNow;
     }
     //不管具体绑定的是哪个方法,调用该发送方法
     //SMSModel_Receive receive = new SMSModel_Receive();
     jobManagement.JobsRun(model,out receive);
     //response = new PMS.Model.Message.BaseResponse() { Success = true };
     return false;
 }
示例#6
0
        /// <summary>
        /// 在发送短信之后执行
        ///  步骤五:
        ///  创建短信内容至数据库 
        ///  创建发送记录至数据库
        /// (此处应放在SMSFactory.SendMsg或写在JobInstance中的SendJob.Exceuted)
        /// </summary>
        /// <param name="model"></param>
        /// <param name="receive"></param>
        /// <param name="list_phones"></param>
        /// <param name="redis_list_id">redis中保存的list的key</param>
        /// <param name="redis_expirationDate">redis中保存集合的过期时间(默认72小时)</param>
        /// <returns></returns>
        public bool AfterSend(PMS.Model.ViewModel.ViewModel_Message model, SMSModel_Receive receive, List<string> list_phones,string redis_list_id,int redis_expirationDate=72)
        {
            //5 将发送的短信以及提交响应存入SMSContent
            var mid = model.SMSMissionID;
            var uid = model.UID;
            bool isSaveMsgOk = smsContentBLL.SaveMsg(receive, model.Content, mid, uid);

            //在current表中存入发送信息,在query之前,表中的StatusCode默认为98,DescContent默认为"暂时未收到查询回执"
            //7月28日 注意此处已修改方法为:CreateReceieveMsg!!!
            if (!smsRecord_CurrentBLL.CreateReceieveMsg(receive.msgid, list_phones))
            {
                return false;
            }

            /*步骤六:
                    写入redis缓存中
                    (此处应放在SMSFactory.SendMsg中或写在JobInstance中的SendJob.Exceuted)
            */
            ListReidsHelper<PMS.Model.QueryModel.Redis_SMSContent> redisListhelper = new ListReidsHelper<PMS.Model.QueryModel.Redis_SMSContent>(redis_list_id);

            StringRedisHelper redisStrhelper = new StringRedisHelper();
            redisStrhelper.Set(receive.msgid, "1", DateTime.Now.AddMinutes(redis_expirationDate));
            return true;
        }
示例#7
0
 /// <summary>
 /// 将返回结果的xml字符串解析为实体对象
 /// </summary>
 /// <param name="result">返回结果的xml字符串</param>
 /// <returns></returns>
 public static SMSModel_Receive Xml2Model_ReceiveMsg(string result)
 {
     //将xml解析
     var msgid = Xml2StrHelper.Xml2Str(result, "response/msgid");
     var smsresult = Xml2StrHelper.Xml2Str(result, "response/result");
     var desc = Xml2StrHelper.Xml2Str(result, "response/desc");
     var blacklist = Xml2StrHelper.Xml2Str(result, "response/blacklist");
     //6月1日新增
     var resultCode = SMSDictionary.GetResponseCode().Where(d=>d.Value==smsresult).Select(d=>d.Key).FirstOrDefault();
     SMSModel_Receive model_receive = new SMSModel_Receive()
     {
         msgid = msgid,
         result =resultCode.ToString(),
         desc = desc,
         failPhones = blacklist.Split(',')
     };
     return model_receive;
 }
示例#8
0
        private bool DoSendNow(PMS.Model.CombineModel.SendAndMessage_Model model,out SMSModel_Receive receive)
        {
            //重新梳理并做抽象
            #region 暂时注释掉
            ///*步骤一:
            //    获取传入的群组及部门获取对应联系人
            //    获取要删除的联系人id
            //    从联系人集合中去除要删除的联系人获得最终要发送的联系人
            //*/
            ////1.1 获取要去除的 联系人id 数组
            //var ids = model.PersonId_Int;
            //int count = 0;
            //string dids_str = null;
            //string gids_str = null;
            //if (model.GroupIds == null)
            //{
            //    gids_str = "";
            //}

            //if (model.DepartmentIds == null)
            //{
            //    dids_str = "";
            //}

            //if (model.GroupIds != null)
            //{
            //    foreach (var item in model.GroupIds)
            //    {
            //        gids_str += item.ToString() + ",";
            //    }
            //}

            //if (model.DepartmentIds != null)
            //{
            //    foreach (var item in model.DepartmentIds)
            //    {
            //        dids_str += item.ToString() + ",";
            //    }
            //}

            ////1.3 根据传入的群组及部门id获取对应的联系人
            //var list_person = GetPersonListByGroupDepartment(dids_str, gids_str, out count);

            ////2.1 去除不需要的联系人,获得最终联系人集合
            //list_person = (from p in list_person
            //               where !ids.Contains(p.PID)
            //               select p).ToList();

            ////2.2 获取联系人集合中的电话生成电话集合
            //List<string> list_phones = new List<string>();
            //list_person.ForEach(p => list_phones.Add(p.PhoneNum.ToString()));

            ///*步骤二:
            //        获取添加的临时联系人
            //        向数据库中写入这些临时联系人
            //*/
            ////1.2 获取临时联系人的电话数组
            //var phoneNums = model.PhoneNum_Str;
            ////1.3 调用personBLL中的添加联系人方法,将临时联系人写入数据库(qu)
            //string PName_Temp = "临时联系人";

            ////1.4 目前默认只添加到全部联系人群组中
            //int groupID_AllContacts = groupBLL.GetListBy(a => a.GroupName.Equals("全部联系人")).FirstOrDefault().GID;

            //List<int> groupIds = new List<int>();
            //groupIds.Add(groupID_AllContacts);
            ////1.5 循环写入数据库
            //bool isSaveTempPersonOk = false;
            //if (phoneNums != null && phoneNums.Length != 0)
            //{
            //    foreach (var item in phoneNums)
            //    {
            //        //1.6 判断输入的联系人在是否存在在数据库中

            //        if (!personBLL.AddValidation(item))
            //        {
            //            //1.7 不存在在数据库中,则将临时联系人添加进数据库
            //            isSaveTempPersonOk = personBLL.DoAddTempPerson(PName_Temp, item, true, groupIds);
            //            if (!isSaveTempPersonOk)
            //            {
            //                return false;
            //            }
            //        }
            //        //1.7 存在在数据库中,且已经在发送列表中,这种情况需讨论

            //    }

            //    list_phones.AddRange(phoneNums.ToList());
            //}

            ///*步骤三
            //        获取短信内容
            //        封装要提交至联通接口的发送对象
            //        (含联系人电话号码)
            //*/
            ////2 获取短信内容
            //var content = model.Content;

            ////2.1 设置发送对象相关参数
            //string subCode = "";//短信子码"74431",接收回馈信息用
            //string sign = "【国家海洋预报台】"; //短信签名,!仅在!发送短信时用= "【国家海洋预报台】";
            //                           //短信发送与查询所需参数
            //string smsContent = content;//短信内容
            //string sendTime;//计划发送时间,为空则立即发送
            //                //3 对短信内容进行校验——先暂时不做

            ////6月27日新增将List电话集合转成用,拼接的字符串
            ////查询时不需要联系人电话
            //SMSModel_Send sendMsg = new SMSModel_Send()
            //{
            //    account = "dh74381",
            //    password = "******",
            //    content = content,
            //    phones = list_phones.ToArray(),
            //    sendtime = DateTime.Now,

            //};
            #endregion
            //1 根据选定的群组及部门获取相应的联系人
               var list_PersonPhonesByGroupAndDepartment= smsSendBLL.GetFinalPersonPhoneList(model.Model_Message, GetPersonListByGroupDepartment);

            //2 获取临时联系人电话集合
            var list_tempPersonPhones= smsSendBLL.AddAndGetTempPersons(model.Model_Message, personBLL, groupBLL);

            //2.2 获取最终的联系人电话集合
            list_PersonPhonesByGroupAndDepartment.AddRange(list_tempPersonPhones);

            var list_phones = list_PersonPhonesByGroupAndDepartment;

            //3 转成发送对象
               var sendMsg= smsSendBLL.ToSendModel(model.Model_Message, list_phones);

            /*步骤四
                    生成提交对象及短信及作业对象
                    由SMSFactory进行短信提交操作(并选择延时/立刻发送)
            */
            //4 短信发送
            //注意:desc:定时时间格式错误;
            //      result:定时时间格式错误
            //PMS.Model.CombineModel.SendAndMessage_Model sendandMsgModel = new PMS.Model.CombineModel.SendAndMessage_Model() { Model_Message = model, Model_Send = sendMsg };
            model.Model_Send = sendMsg;
            //PMS.Model.Message.BaseResponse response = new PMS.Model.Message.BaseResponse();
             smsSendBLL.SendMsg(model, out /*response*/receive);
            //receive = new SMSModel_Receive();
            return true;
        }
示例#9
0
 public bool DoSendTiming(PMS.Model.ViewModel.ViewModel_Message model, ref SMSModel_Receive receive)
 {
     return true;
 }
示例#10
0
        /// <summary>
        /// 根据传入的 联系人id数组 以及 短信内容进行短信发送
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public ActionResult DoSend(PMS.Model.ViewModel.ViewModel_Message model)
        {
            //1 有效性判断
            //1.1 联系人名单为空,不执行发送操作,返回
            //if (model.PersonIds == null||model.PersonIds== "undefined") { return Content("empty contact list"); }
            //1.2 短信内容为空,不执行发送操作,返回
            if (model.Content == null) { return Content("empty content"); }
            //1.3 超出300字,不执行发送操作,返回
            if (model.Content.Length + 9 >= 300) { return Content("out of range"); }
            SMSModel_Receive receive = new SMSModel_Receive();
            #region 11月14日已做修改,判断是定时还是实时发送在SMSFactory中的SMSSend中判断,此处暂时注释掉
            //SendJobManagement sendjobManagement = new SendJobManagement();
            //if (model.isTiming)
            //{
            //    //延时发送

            //}
            //else
            //{
            //    //立刻发送
            //    sendjobManagement.DoSendJobs += DoSendNow;
            //    //smsSendBLL.SendMsg()
            //}

            //// var isSaveMsgOk = DoSendNow(model,ref receive);

            ////var isSaveMsgOk = DoSendNow(Combine_model, receive);
            //sendjobManagement.JobsRun(Combine_model, receive);
            #endregion
            PMS.Model.CombineModel.SendAndMessage_Model combine_model = new PMS.Model.CombineModel.SendAndMessage_Model();
            combine_model.Model_Message = model;
            //smsSendBLL.SendMsg(Combine_model, out response);

            //****注意此处还未实现向前台向后台传递对象时应加上uid,并向combin_model中加入uid(以包含此属性)
            DoSendNow(combine_model, out receive);

            #region 测试批量写入时间时的测试返回对象
            //测试批量写入时间时的测试返回对象——现注释掉
            //SMSModel_Receive testModel = new SMSModel_Receive()
            //{
            //    desc = "提交成功",
            //    failPhones = new string[] { },
            //    msgid = "b14deff1f6ef45bb8e357e961f5c17ab",
            //    result = "0"
            //};
            #endregion

            //AfterSend(combine_model.Model_Message, receive/*testModel*/, combine_model.Model_Send.phones.ToList());
            //if (!isSaveMsgOk)
            //{
            //    return Content("服务器错误");
            //}

            if ("0".Equals(receive.result))
            {
                //6 查询发送状态(是否加入等待时间?)
                return Content("ok");

            }
            else
            {
                return Content("error");
            }
        }