private WXResponseMsgBase 查询绑定(string publicWX, WXRequestMsg msg)
        {
            string response = _DefaultResponse;
            var    sid      = new WXBindingBLL(WXManager.Current[publicWX].DBConnect).GetBindingStudentID(msg.FromUserName, msg.ToUserName);

            if (string.IsNullOrEmpty(sid))
            {
                response = "您还没有绑定学号。";
            }
            else
            {
                var s = new StudentBLL(WXManager.Current[publicWX].DBConnect).GetByID(sid).QueryObject;
                if (s == null)
                {
                    response = string.Format("学号:{0}\n{1}", sid, "没有找到学生信息");
                }
                else
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine(string.Format("学号:{0}", s.ID));
                    sb.AppendLine(string.Format("姓名:{0}", s.Name));
                    if (s.Grade.HasValue)
                    {
                        sb.AppendLine(string.Format("年级:{0}", GradeHelper.Instance.GetName(s.Grade.Value)));
                    }
                    if (!string.IsNullOrEmpty(s.ClassName))
                    {
                        sb.AppendLine(string.Format("班级:{0}", s.ClassName));
                    }
                    response = sb.ToString();
                }
            }
            return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, response));
        }
        private WXResponseMsgBase HandleSubscribeMsg(WXRequestMsg msg)
        {
            string response = "欢迎关注我们! \n" +
                              "相信汇海,相信专业!\n";

            return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, response));
        }
        private WXResponseMsgBase 查看预约(string publicWX, WXRequestMsg msg)
        {
            string response = string.Empty;
            var    wx       = WXManager.Current[publicWX];
            var    sid      = new WXBindingBLL(wx.DBConnect).GetBindingStudentID(msg.FromUserName, msg.ToUserName);

            if (string.IsNullOrEmpty(sid))
            {
                return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, "您还没有绑定学号,请先绑定学号"));
            }

            var client = new 中国美院接口Client("http://120.78.230.233:8081");
            var ret    = client.获取预约信息(sid);

            if (ret.Code == 0 && ret.预约信息 != null && ret.预约信息.Length > 0)
            {
                var sb = new StringBuilder();
                sb.AppendLine("你已经预约如下这些项目:");
                sb.AppendLine("----------------------------------------");
                foreach (var item in ret.预约信息)
                {
                    sb.AppendLine(string.Format("{0} 日期{1}", item.项目名称, item.测试日期.ToString("yyyy-MM-dd")));
                }
                sb.AppendLine("----------------------------------------");
                response = sb.ToString();
            }
            else
            {
                response = "你没有可预约项目";
            }
            return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, response));
        }
        private WXResponseMsgBase 预约测试(string publicWX, WXRequestMsg msg)
        {
            string response = string.Empty;
            var    wx       = WXManager.Current[publicWX];
            var    sid      = new WXBindingBLL(wx.DBConnect).GetBindingStudentID(msg.FromUserName, msg.ToUserName);

            if (string.IsNullOrEmpty(sid))
            {
                return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, "您还没有绑定学号,请先绑定学号"));
            }
            if (!string.IsNullOrEmpty(msg.Content))
            {
                DateTime dt;
                if (msg.Content.Length >= 10)
                {
                    var dttemp = msg.Content.Substring(0, 8);
                    if (DateTime.TryParseExact(dttemp, "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out dt))
                    {
                        var sheme  = msg.Content.Substring(9);
                        var client = new 中国美院接口Client("http://120.78.230.233:8081");
                        var ret    = client.预约(sid, dt, sheme);
                        if (ret.Code == 0)
                        {
                            response = "预约成功!";
                        }
                        else
                        {
                            response = "预约失败";
                        }
                    }
                }
                else
                {
                    response = "输入的日期格式不正确,请重新输入";
                }
            }
            else
            {
                var client = new 中国美院接口Client("http://120.78.230.233:8081");
                var ret    = client.获取可预约项目(sid);
                if (ret.Code == 0 && ret.Scores != null && ret.Scores.Length > 0)
                {
                    var sb = new StringBuilder();
                    sb.AppendLine("你可以预约如下这些项目:");
                    sb.AppendLine("----------------------------------------");
                    foreach (var item in ret.Scores)
                    {
                        sb.AppendLine(string.Format("{0} 编号{1}", item.项目名称, item.编号));
                    }
                    sb.AppendLine("----------------------------------------");
                    sb.AppendLine("预约请发送 年月日+项目编号 如:20180101+7");
                    response = sb.ToString();
                }
                else
                {
                    response = "你没有可预约项目";
                }
            }
            return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, response));
        }
        private WXResponseMsgBase 取消绑定(string publicWX, WXRequestMsg msg)
        {
            string response = _DefaultResponse;
            var    ret      = new WXBindingBLL(WXManager.Current[publicWX].DBConnect).UnRegister(msg.FromUserName, msg.ToUserName);

            if (ret.Result == ResultCode.Successful)
            {
                response = "你已经成功取消学号绑定";
            }
            else
            {
                response = ret.Message;
            }
            return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, response));
        }
        private WXResponseMsgBase 查询二维码(string publicWX, WXRequestMsg msg)
        {
            string response = _DefaultResponse;
            var    wx       = WXManager.Current[publicWX];
            var    sid      = new WXBindingBLL(wx.DBConnect).GetBindingStudentID(msg.FromUserName, msg.ToUserName);

            if (string.IsNullOrEmpty(sid))
            {
                return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, "您还没有绑定学号,请先绑定学号"));
            }
            var s = new StudentBLL(wx.DBConnect).GetByID(sid).QueryObject;

            if (s == null)
            {
                return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, "没有找到学生信息"));
            }
            response = string.Format(@"点击打开二维码 http://{0}/hhcloud/qr/{1}/{2}/", _Request.RequestUri.Host, publicWX, s.ID);
            return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, response));
        }
 private WXResponseMsgBase 绑定学号(string publicWX, WXRequestMsg msg)
 {
     if (!string.IsNullOrEmpty(msg.Content))
     {
         string sid = null;
         if (msg.Content.IndexOf(_regStudentID) == 0 && msg.Content.Length > _regStudentID.Length)
         {
             sid = msg.Content.Substring(_regStudentID.Length);                                                                                       //
         }
         else
         {
             sid = msg.Content;  //通过菜单项然后输入学号
         }
         var ret = new WXBindingBLL(WXManager.Current[publicWX].DBConnect).Register(msg.FromUserName, msg.ToUserName, sid);
         if (ret.Result != ResultCode.Successful)
         {
             return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, ret.Message));
         }
         return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, string.Format("你已经成功绑定学号 {0}", sid)));
     }
     return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, "请输入你要绑定的学号"));
 }
        public WXResponseMsgBase HandleMsg(string publicWX, WXRequestMsg msg)
        {
            var wx = WXManager.Current[publicWX];

            if (wx == null)
            {
                return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, "系统没有提供此微信公众号服务"));
            }
            if (msg.MsgType == MsgType.Event)
            {
                string temp = null;
                _WaitingEvents.TryRemove(msg.FromUserName, out temp);  //如果是事件
                if (msg.Event == WXEventType.Subscribe)
                {
                    return(HandleSubscribeMsg(msg));
                }
                else if (msg.Event.ToUpper() == WXEventType.Click)
                {
                    switch (msg.EventKey)
                    {
                    case "btn_绑定学号":
                    {
                        _WaitingEvents[msg.FromUserName] = msg.EventKey;
                        return(绑定学号(publicWX, msg));
                    }

                    case "btn_取消绑定":
                    {
                        _WaitingEvents[msg.FromUserName] = msg.EventKey;
                        return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, "是否取消绑定?确定取消请回复 \"是\""));
                    }

                    case "btn_预约":
                    {
                        _WaitingEvents[msg.FromUserName] = msg.EventKey;
                        return(预约测试(publicWX, msg));
                    }

                    case "btn_查询学号": return(查询绑定(publicWX, msg));

                    case "btn_查询成绩": return(查询成绩(publicWX, msg));

                    case "btn_二维码": return(查询二维码(publicWX, msg));

                    case "btn_查看预约":  return(查看预约(publicWX, msg));
                    }
                }
                else if (msg.Event == WXEventType.View) //VIEW菜单事件
                {
                    var url = msg.EventKey;
                }
            }
            else if (msg.MsgType == MsgType.Text)
            {
                if (_WaitingEvents.ContainsKey(msg.FromUserName))
                {
                    string eventKey = null;
                    _WaitingEvents.TryRemove(msg.FromUserName, out eventKey);
                    if (eventKey == "btn_绑定学号")
                    {
                        return(绑定学号(publicWX, msg));
                    }
                    else if (eventKey == "btn_取消绑定" && msg.Content == "是")
                    {
                        return(取消绑定(publicWX, msg));
                    }
                    else if (eventKey == "btn_预约")
                    {
                        return(预约测试(publicWX, msg));
                    }
                }
                else if (msg.Content == "@qr")
                {
                    return(查询二维码(publicWX, msg));
                }
            }
            return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, _DefaultResponse));
        }
        private WXResponseMsgBase 查询成绩(string publicWX, WXRequestMsg msg)
        {
            string response = _DefaultResponse;
            var    wx       = WXManager.Current[publicWX];
            var    sid      = new WXBindingBLL(wx.DBConnect).GetBindingStudentID(msg.FromUserName, msg.ToUserName);

            if (string.IsNullOrEmpty(sid))
            {
                new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, "您还没有绑定学号,请先绑定学号");
            }
            var s = new StudentBLL(wx.DBConnect).GetByID(sid).QueryObject;

            if (s == null)
            {
                new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, "没有找到学生信息");
            }
            StringBuilder sb = new StringBuilder();

            sb.AppendLine(string.Format("学号:{0}", s.ID));
            sb.AppendLine(string.Format("姓名:{0}", s.Name));
            sb.AppendLine(string.Format("性别:{0}", s.Sex == 1 ? "男" : "女"));
            if (s.Grade.HasValue)
            {
                sb.AppendLine(string.Format("年级:{0}", GradeHelper.Instance.GetName(s.Grade.Value)));
            }
            if (!string.IsNullOrEmpty(s.ClassName))
            {
                sb.AppendLine(string.Format("班级:{0}", s.ClassName));
            }
            var con = new StudentScoreSearchCondition()
            {
                Grade = s.Grade, StudentID = s.ID, ProjectID = "TizhiCheshi"
            };
            var scores = new StudentScoreBLL(wx.DBConnect).GetItems(con).QueryObjects;

            scores = (from it in scores orderby it.PhysicalItem ascending select it).ToList();
            var pis = UserSettings.Current.CreateDefaultFormula(s.Grade.Value, s.Sex);

            if (pis != null && pis.Length > 0)
            {
                if (scores != null && scores.Count > 0)
                {
                    var total = CalTotal(s.Grade.Value, scores);
                    if (total > 0)
                    {
                        sb.AppendLine(string.Format("总分:{0}", total));
                    }
                    var jiafen = CalJiafen(scores);
                    if (jiafen.HasValue)
                    {
                        sb.AppendLine(string.Format("加分:{0}", jiafen.Value.Trim()));
                    }
                    sb.AppendLine("----------------------");
                    foreach (var score in scores)
                    {
                        if (pis.Contains(score.PhysicalItem))
                        {
                            if (!score.Result.HasValue || score.PhysicalItem == 1 || score.PhysicalItem == 2)
                            {
                                sb.AppendLine(string.Format("{0}:{1}", score.PhysicalName, score.Score));
                            }
                            else
                            {
                                sb.AppendLine(string.Format("{0}:{1}_{2}分_{3}", score.PhysicalName, score.Score, score.Result.Value.Trim(), score.Rank));
                            }
                        }
                    }
                }
                if (pis.Any(it => scores == null || !scores.Exists(sc => sc.PhysicalItem == it)))
                {
                    sb.AppendLine("------------------未测试科目");
                    foreach (var pi in pis)
                    {
                        if (scores == null || !scores.Exists(it => it.PhysicalItem == pi))
                        {
                            sb.AppendLine(UserSettings.Current.GetPhysicalName(pi));
                        }
                    }
                }
                response = sb.ToString();
            }
            return(new WXTextResponseMsg(msg.FromUserName, msg.ToUserName, DateTime.Now, response));
        }
Beispiel #10
0
 /// <summary>
 /// 微信后台消息POST处理函数
 /// </summary>
 /// <param name="id">微信公众号ID,系统可以托管多个公众号,用于区分各个公众号</param>
 /// <param name="signature">微信后台发过来的签名参数,用于验证是否是微信服务器发的消息</param>
 /// <param name="timestamp">微信后台发过来的签名参数,用于验证是否是微信服务器发的消息</param>
 /// <param name="nonce">微信后台发过来的签名参数,用于验证是否是微信服务器发的消息</param>
 /// <param name="msg">微信POST请求中的消息主体内容,后台会自动用XMLFORMATER反序列化</param>
 /// <returns></returns>
 public HttpResponseMessage Post(string id, string signature, string timestamp, string nonce, WXRequestMsg msg)
 {
     try
     {
         var wx = WXManager.Current[id];
         //检查签名
         if (wx == null || wx.GetSigniture(timestamp, nonce).ToUpper() != signature.ToUpper())
         {
             return(Request.CreateResponse(HttpStatusCode.BadRequest));
         }
         if (msg != null)
         {
             var ret = new WXRequestHandler(this.Request).HandleMsg(id, msg);
             if (ret != null)
             {
                 var response = Request.CreateResponse();
                 response.Content = new StringContent(ret.ToXML());
                 return(response);
             }
             return(Request.CreateResponse());
         }
         return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, new HttpError("消息不能解析")));
     }
     catch (Exception ex)
     {
         return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, new HttpError(ex.Message)));
     }
 }