Example #1
0
        /// <summary>
        /// 选择图书馆
        /// </summary>
        /// <param name="strWeiXinId"></param>
        /// <param name="libCode"></param>
        public WxUserItem SelectLib(string strWeiXinId, string libCode, string libUserName)
        {
            WxUserItem userItem = WxUserDatabase.Current.GetActiveOrFirst(strWeiXinId, libCode);

            if (userItem == null)
            {
                userItem               = new WxUserItem();
                userItem.weixinId      = strWeiXinId;
                userItem.libCode       = libCode;
                userItem.libUserName   = libUserName;
                userItem.readerBarcode = "";
                userItem.readerName    = "";
                userItem.xml           = "";
                userItem.refID         = "";
                userItem.createTime    = DateTimeUtil.DateTimeToString(DateTime.Now);
                userItem.updateTime    = userItem.createTime;
                WxUserDatabase.Current.Add(userItem);
            }

            //设为当前活动状态
            WxUserDatabase.Current.SetActive(userItem);

            //记下来,以便点对点方便访问该图书馆
            //this.libCode = libCode;
            //this.remoteUserName = libUserName;

            return(userItem);
        }
Example #2
0
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="item"></param>
        public void Delete(String id)
        {
            if (string.IsNullOrEmpty(id) == true || id == "null")
            {
                return;
            }



            IMongoCollection <WxUserItem> collection = this.wxUserCollection;
            var filter = Builders <WxUserItem> .Filter.Eq("id", id);

            // 检查一下是否被删除读者是否为默认读者,如果是,把自动将默认值设了第一个读者上。
            List <WxUserItem> list     = this.wxUserCollection.Find(filter).ToList();
            string            weixinId = "";

            if (list.Count > 0)
            {
                weixinId = list[0].weixinId;
            }

            // 先删除
            collection.DeleteOne(filter);

            // 自动将第一个设为默认的
            WxUserItem newUserItem = this.GetOneByWeixinId(weixinId);

            if (newUserItem != null)
            {
                this.SetActive(newUserItem);
            }
        }
Example #3
0
        public WxUserItem Add(WxUserItem item)
        {
            //item.CreateTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");

            this.wxUserCollection.InsertOne(item);

            return(item);
        }
Example #4
0
 public virtual int Bind(string remoteUserName,
                         string libCode,
                         string strFullWord,
                         string strPassword,
                         string strWeiXinId,
                         out WxUserItem userItem,
                         out string strReaderBarcode,
                         out string strError)
 {
     userItem         = null;
     strReaderBarcode = "";
     strError         = "未实现";
     return(-1);
 }
Example #5
0
        /// <summary>
        /// 检查微信用户是否已经选择了图书馆
        /// </summary>
        /// <param name="strWeiXinId"></param>
        /// <returns></returns>
        public WxUserItem CheckIsSelectLib(string strWeiXinId)
        {
            WxUserItem userItem = WxUserDatabase.Current.GetActive(strWeiXinId);

            if (userItem == null)
            {
                return(null);
            }

            //记下来,以便点对点方便访问该图书馆
            //this.libCode = userItem.libCode;
            //this.remoteUserName = userItem.libUserName;

            return(userItem);
        }
Example #6
0
        public string CheckIsSelectLib(string strWeiXinId)
        {
            WxUserItem userItem = WxUserDatabase.Current.GetOneByWeixinId(strWeiXinId);

            if (userItem == null)
            {
                return("");
            }

            if (userItem.libCode == "")
            {
                return("");
            }

            return(userItem.libCode);
        }
Example #7
0
        // 更新
        public long Update(WxUserItem item)
        {
            IMongoCollection <WxUserItem> collection = this.wxUserCollection;

            var filter = Builders <WxUserItem> .Filter.Eq("weixinId", item.weixinId);

            var update = Builders <WxUserItem> .Update
                         .Set("weixinId", item.weixinId)
                         .Set("readerBarcode", item.readerBarcode)
                         .Set("readerName", item.readerName)
                         .Set("libCode", item.libCode)
                         .Set("createTime", item.createTime);

            UpdateResult ret = collection.UpdateOne(filter, update);

            return(ret.ModifiedCount);
        }
Example #8
0
        public void SelectLib(string strWeiXinId, string libCode)
        {
            WxUserItem userItem = WxUserDatabase.Current.GetOneByWeixinId(strWeiXinId);

            if (userItem == null)
            {
                userItem               = new WxUserItem();
                userItem.weixinId      = strWeiXinId;
                userItem.libCode       = libCode;
                userItem.readerBarcode = "";
                userItem.readerName    = "";
                userItem.createTime    = DateTimeUtil.DateTimeToString(DateTime.Now);
                WxUserDatabase.Current.Add(userItem);
            }
            else
            {
                userItem.libCode       = libCode;
                userItem.readerBarcode = "";
                userItem.readerName    = "";
                userItem.createTime    = DateTimeUtil.DateTimeToString(DateTime.Now);
                WxUserDatabase.Current.Update(userItem);
            }
        }
Example #9
0
        /// <summary>
        /// 根据微信id检索读者
        /// </summary>
        /// <param name="strWeiXinId"></param>
        /// <param name="strRecPath"></param>
        /// <param name="strXml"></param>
        /// <param name="strError"></param>
        /// <returns></returns>
        public long SearchReaderByWeiXinId(string strWeiXinId,
                                           out string strRecPath,
                                           out string strXml,
                                           out string strError)
        {
            strError   = "";
            strRecPath = "";
            strXml     = "";

            long lRet = 0;

            LibraryChannel channel = this.ChannelPool.GetChannel(this.dp2Url, this.dp2UserName);

            channel.Password = this.dp2Password;
            try
            {
                strWeiXinId = dp2CommandUtility.C_WeiXinIdPrefix + strWeiXinId;//weixinid:

                // 先从mongodb查
                if (this.IsUseMongoDb == true)
                {
                    return(0);
                }


                lRet = this.SearchReaderByWeiXinId(channel, strWeiXinId, out strError);
                if (lRet == -1)
                {
                    strError = "检索微信用户对应的读者出错:" + strError;
                    return(-1);
                }
                else if (lRet > 1)
                {
                    strError = "检索微信用户对应的读者异常,得到" + lRet.ToString() + "条读者记录";
                    return(-1);
                }
                else if (lRet == 0)
                {
                    strError = "根据微信id未找到对应读者。";
                    return(0);
                }
                else if (lRet == 1)
                {
                    lRet = this.GetSearchResultForWeiXinUser(channel,
                                                             out strRecPath,
                                                             out strXml,
                                                             out strError);
                    if (lRet != 1)
                    {
                        strError = "获取结果集异常:" + strError;
                        return(-1);
                    }

                    XmlDocument dom = new XmlDocument();
                    dom.LoadXml(strXml);
                    string strBarcode = DomUtil.GetNodeText(dom.DocumentElement.SelectSingleNode("barcode"));
                    // 将关系存到mongodb库
                    if (this.IsUseMongoDb == true)
                    {
                        //name
                        string  name = "";
                        XmlNode node = dom.DocumentElement.SelectSingleNode("name");
                        if (node != null)
                        {
                            name = DomUtil.GetNodeText(node);
                        }

                        WxUserItem userItem = new WxUserItem();
                        userItem.weixinId      = strWeiXinId;
                        userItem.readerBarcode = strBarcode;
                        userItem.readerName    = name;
                        userItem.libCode       = "";
                        userItem.createTime    = DateTimeUtil.DateTimeToString(DateTime.Now);
                        WxUserDatabase.Current.Add(userItem);
                    }
                }
            }
            finally
            {
                this.ChannelPool.ReturnChannel(channel);
            }

            return(1);
        }
Example #10
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="strBarcode"></param>
        /// <param name="strPassword"></param>
        /// <param name="weiXinId"></param>
        /// <returns>
        /// -1 出错
        /// 0 读者证条码号或密码不正确
        /// 1 成功
        /// </returns>
        public int Binding(string strBarcode,
                           string strPassword,
                           string strWeiXinId,
                           out string strReaderBarcode,
                           out string strError)
        {
            strError         = "";
            strReaderBarcode = "";

            LibraryChannel channel = this.ChannelPool.GetChannel(this.dp2Url, this.dp2UserName);

            channel.Password = this.dp2Password;
            try
            {
                // 检验用户名与密码
                long lRet = channel.VerifyReaderPassword(strBarcode,
                                                         strPassword,
                                                         out strError);
                if (lRet == -1)
                {
                    strError = "读者证条码号或密码不正确。\n请重新输入'读者证条码号'(注:您也可以同时输入'读者证条码号'和'密码',中间以/分隔,例如:R0000001/123)";
                    return(0);
                }

                if (lRet == 0)
                {
                    strError = "读者证条码号或密码不正确。\n请重新输入'读者证条码号'(注:您也可以同时输入'读者证条码号'和'密码',中间以/分隔,例如:R0000001/123)";
                    return(0);
                }

                if (lRet == 1)
                {
                    // 进行绑定
                    // 先根据barcode检索出来,得到原记录与时间戳
                    GetReaderInfoResponse response = channel.GetReaderInfo(strBarcode,
                                                                           "xml");
                    if (response.GetReaderInfoResult.Value != 1)
                    {
                        strError = "根据读者证条码号得到读者记录异常:" + response.GetReaderInfoResult.ErrorInfo;
                        return(-1);
                    }
                    string strRecPath   = response.strRecPath;
                    string strTimestamp = StringUtil.GetHexTimeStampString(response.baTimestamp);
                    string strXml       = response.results[0];

                    // 改读者的email字段
                    XmlDocument readerDom = new XmlDocument();
                    readerDom.LoadXml(strXml);
                    XmlNode emailNode = readerDom.SelectSingleNode("//email");
                    if (emailNode == null)
                    {
                        emailNode = readerDom.CreateElement("email");
                        readerDom.DocumentElement.AppendChild(emailNode);
                    }
                    emailNode.InnerText = JoinEmail(emailNode.InnerText, strWeiXinId);
                    string strNewXml = ConvertXmlToString(readerDom);

                    // 更新到读者库
                    lRet = channel.SetReaderInfoForWeiXin(strRecPath,
                                                          strNewXml,
                                                          strTimestamp,
                                                          out strError);
                    if (lRet == -1)
                    {
                        strError = "绑定出错:" + strError;
                        return(-1);
                    }

                    // 绑定成功,把读者证条码记下来,用于续借 2015/11/7,不要用strbarcode变量,因为可能做的大小写转换
                    strReaderBarcode = DomUtil.GetNodeText(readerDom.DocumentElement.SelectSingleNode("barcode"));

                    // 将关系存到mongodb库
                    if (this.IsUseMongoDb == true)
                    {
                        //name
                        string  name = "";
                        XmlNode node = readerDom.DocumentElement.SelectSingleNode("name");
                        if (node != null)
                        {
                            name = DomUtil.GetNodeText(node);
                        }

                        WxUserItem userItem = WxUserDatabase.Current.GetOneByWeixinId(strWeiXinId);
                        if (userItem == null)
                        {
                            // 大微信号管理多个图书馆不可能出现不存在的情况,必然先选择了图书馆
                            userItem               = new WxUserItem();
                            userItem.weixinId      = strWeiXinId;
                            userItem.libCode       = "";
                            userItem.readerBarcode = "";
                            userItem.readerName    = "";
                            userItem.createTime    = DateTimeUtil.DateTimeToString(DateTime.Now);
                            WxUserDatabase.Current.Add(userItem);
                        }
                        else
                        {
                            userItem.readerBarcode = strBarcode;
                            userItem.readerName    = name;
                            userItem.createTime    = DateTimeUtil.DateTimeToString(DateTime.Now);
                            lRet = WxUserDatabase.Current.Update(userItem);
                        }
                    }

                    return(1);
                }

                strError = "校验读者账号返回未知情况,返回值:" + lRet.ToString() + "-" + strError;
                return(-1);
            }
            finally
            {
                this.ChannelPool.ReturnChannel(channel);
            }
        }
Example #11
0
 public void SetActive(WxUserItem item)
 {
     this.SetActive(item.weixinId, item.id);
 }
Example #12
0
        /// <summary>
        /// 根据微信id检索读者
        /// </summary>
        /// <param name="strWeiXinId"></param>
        /// <param name="strRecPath"></param>
        /// <param name="strXml"></param>
        /// <param name="strError"></param>
        /// <returns></returns>
        public override long SearchOnePatronByWeiXinId(string remoteUserName,
                                                       string libCode,
                                                       string strWeiXinId,
                                                       out string strBarcode,
                                                       out string strError)
        {
            strError   = "";
            strBarcode = "";

            long lRet = 0;

            LibraryChannel channel = this.ChannelPool.GetChannel(this.dp2Url, this.dp2UserName);

            channel.Password = this.dp2Password;
            try
            {
                strWeiXinId = dp2CommandUtility.C_WeiXinIdPrefix + strWeiXinId;//weixinid:

                // 先从mongodb查
                if (this.IsUseMongoDb == true)
                {
                    return(0);
                }


                lRet = channel.SearchReader("",
                                            strWeiXinId,
                                            -1,
                                            "email",
                                            "exact",
                                            "zh",
                                            "weixin",
                                            "keyid",
                                            out strError);
                if (lRet == -1)
                {
                    strError = "检索微信用户对应的读者出错:" + strError;
                    return(-1);
                }
                else if (lRet > 1)
                {
                    strError = "检索微信用户对应的读者异常,得到" + lRet.ToString() + "条读者记录";
                    return(-1);
                }
                else if (lRet == 0)
                {
                    strError = "根据微信id未找到对应读者。";
                    return(0);
                }
                else if (lRet == 1)
                {
                    Record[] searchresults = null;
                    lRet = channel.GetSearchResult("weixin",
                                                   0,
                                                   -1,
                                                   "id,xml",
                                                   "zh",
                                                   out searchresults,
                                                   out strError);
                    if (searchresults.Length != 1)
                    {
                        throw new Exception("获得的记录数不是1");
                    }
                    if (lRet != 1)
                    {
                        strError = "获取结果集异常:" + strError;
                        return(-1);
                    }

                    string      strXml = searchresults[0].RecordBody.Xml;
                    XmlDocument dom    = new XmlDocument();
                    dom.LoadXml(strXml);
                    strBarcode = DomUtil.GetNodeText(dom.DocumentElement.SelectSingleNode("barcode"));
                    // 将关系存到mongodb库
                    if (this.IsUseMongoDb == true)
                    {
                        //name
                        string  name = "";
                        XmlNode node = dom.DocumentElement.SelectSingleNode("name");
                        if (node != null)
                        {
                            name = DomUtil.GetNodeText(node);
                        }

                        WxUserItem userItem = new WxUserItem();
                        userItem.weixinId      = strWeiXinId;
                        userItem.readerBarcode = strBarcode;
                        userItem.readerName    = name;
                        userItem.libCode       = "";
                        userItem.libUserName   = "";
                        userItem.xml           = strXml;
                        userItem.refID         = searchresults[0].Path;
                        userItem.createTime    = DateTimeUtil.DateTimeToString(DateTime.Now);
                        userItem.updateTime    = userItem.createTime;
                        WxUserDatabase.Current.Add(userItem);
                    }
                }
            }
            finally
            {
                this.ChannelPool.ReturnChannel(channel);
            }

            return(0);
        }