Exemple #1
0
        /// <summary>
        /// 根据服务编号获取频道编号
        /// </summary>
        /// <param name="ServiceID"></param>
        /// <returns></returns>
        public string GetChannelIDByServiceID(string ServiceID, DBEntities db = null)
        {
            var    cacheKey_ConversationRoomID = new StringCacheKey(StringCacheKeyType.MAP_GetChannelIDByServiceID, ServiceID);
            string ConversationRoomID          = cacheKey_ConversationRoomID.FromCache <string>();

            if (string.IsNullOrEmpty(ConversationRoomID))
            {
                bool dbPrivateFlag = false;
                if (db == null)
                {
                    db            = CreateDb();
                    dbPrivateFlag = true;
                }

                var model = db.ConversationRooms.Where(a => a.ServiceID == ServiceID).Select(a => new { a.ConversationRoomID }).FirstOrDefault();

                if (dbPrivateFlag)
                {
                    db.Dispose();
                }

                if (model != null)
                {
                    ConversationRoomID = model.ConversationRoomID;
                    ConversationRoomID.ToCache(cacheKey_ConversationRoomID, TimeSpan.FromHours(1));
                }
                else
                {
                    return(null);
                }
            }

            return(ConversationRoomID);
        }
        /// <summary>
        /// 检查验证码
        /// </summary>
        /// <param name="Mobile"></param>
        /// <param name="MsgType"></param>
        /// <param name="Title"></param>
        /// <returns></returns>
        public bool CheckVerifyCode(string Mobile, string MsgType, string Title)
        {
            var cacheKey = new StringCacheKey(StringCacheKeyType.SYS_SMSVerifyCode, $"{Mobile}/{MsgType}/{Title}");
            UserShortMessageLog model = cacheKey.FromCache <UserShortMessageLog>();

            return(model != null);
        }
Exemple #3
0
        /// <summary>
        /// 获取房间信息
        /// </summary>
        /// <param name="ConversationRoomID"></param>
        /// <returns></returns>
        public ResponseConversationRoomDTO GetChannelInfo(string ConversationRoomID, DBEntities db = null)
        {
            var cacheKey = new StringCacheKey(StringCacheKeyType.Channel, ConversationRoomID);
            ResponseConversationRoomDTO room = cacheKey.FromCache <ResponseConversationRoomDTO>();

            if (room == null)
            {
                bool dbPrivateFlag = false;
                if (db == null)
                {
                    db            = CreateDb();
                    dbPrivateFlag = true;
                }

                var model = db.ConversationRooms.Where(a => a.ConversationRoomID == ConversationRoomID).FirstOrDefault();

                if (dbPrivateFlag)
                {
                    db.Dispose();
                }

                if (model != null)
                {
                    room = model.Map <ConversationRoom, ResponseConversationRoomDTO>();
                    room.ToCache(cacheKey, TimeSpan.FromHours(1));
                }
            }
            return(room);
        }
Exemple #4
0
        /// <summary>
        /// 替换频道成员
        /// </summary>
        /// <param name="ConversationRoomID"></param>
        /// <param name="members"></param>
        /// <returns></returns>
        public bool ReplaceChannelMembers(string ConversationRoomID, List <RequestChannelMemberDTO> members)
        {
            using (DBEntities db = new DBEntities())
            {
                var oldmembers = db.ConversationRoomUids.Where(a => a.ConversationRoomID == ConversationRoomID).ToList();

                foreach (var member in members)
                {
                    var roomUid = new ConversationRoomUid()
                    {
                        ConversationRoomID = ConversationRoomID,
                        UserType           = member.UserType,
                        Identifier         = member.Identifier,
                        UserMemberID       = member.UserMemberID.IfNull(""),
                        UserCNName         = member.UserCNName.IfNull(""),
                        UserENName         = member.UserENName.IfNull(""),
                        PhotoUrl           = member.PhotoUrl.IfNull(""),
                        UserID             = member.UserID
                    };
                    db.ConversationRoomUids.Add(roomUid);
                }

                if (db.SaveChanges() > 0)
                {
                    var cacheKey = new StringCacheKey(StringCacheKeyType.Channel_Member, ConversationRoomID);
                    cacheKey.RemoveCache();

                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Exemple #5
0
        List <RequestMessageExtrasConfigDTO> GetAllExtrasConfig()
        {
            var cacheKey = new StringCacheKey(StringCacheKeyType.Sys_NoticeMessageExtrasConfig, "");
            ////从缓存中取
            var list = cacheKey.FromCache <List <RequestMessageExtrasConfigDTO> >();

            if (list == null)
            {
                using (DBEntities db = new DBEntities())
                {
                    list = db.MessageExtrasConfigs.Where(a => !a.IsDeleted).Select(a => new RequestMessageExtrasConfigDTO()
                    {
                        ExtrasConfigID = a.ExtrasConfigID,
                        MsgTitle       = a.MsgTitle,
                        MsgType        = a.MsgType,
                        PageArgs       = "",
                        PageTarget     = a.PageTarget,
                        PageType       = a.PageType,
                        PageUrl        = a.PageUrl,
                        TerminalType   = a.TerminalType
                    }).ToList();
                }

                list.ToCache(cacheKey);
            }

            return(list);
        }
Exemple #6
0
        /// <summary>
        /// 服务时间递增
        /// </summary>
        /// <param name="ServiceID">业务编号</param>
        /// <param name="Seconds">需要递增的服务时长,小于等于0意味着不限制服务时长(秒)</param>
        /// <returns></returns>
        public bool IncrementChannelDuration(string ConversationRoomID, string ServiceID, int Seconds, string OrderNo, string NewUpgradeOrderNo)
        {
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["KMEHospEntities"].ConnectionString))
            {
                SqlCommand cmd = new SqlCommand(@"if(select top 1 1 from ConversationRoomUpgrades where ServiceID=@ServiceID and OrderNo=@OrderNo 
                    and NewUpgradeOrderNo=@NewUpgradeOrderNo) 
                    begin
                        update ConversationRooms set Duration=case when Duration<0 then 1 else Duration end + @Seconds
                        where ServiceID = @ServiceID
                        insert into ConversationRoomUpgrades(ServiceID,Duration,CreateTime,IsDeleted,OrderNo,NewUpgradeOrderNo)
                        values(@ServiceID,@Seconds,@CreateTime,0,@OrderNo,@NewUpgradeOrderNo)
                    end");

                cmd.Parameters.Add("@ServiceID", SqlDbType.VarChar).Value         = ServiceID;
                cmd.Parameters.Add("@OrderNo", SqlDbType.VarChar).Value           = OrderNo;
                cmd.Parameters.Add("@NewUpgradeOrderNo", SqlDbType.VarChar).Value = NewUpgradeOrderNo;
                cmd.Parameters.Add("@Seconds", SqlDbType.Int).Value         = Seconds;
                cmd.Parameters.Add("@CreateTime", SqlDbType.DateTime).Value = DateTime.Now;
                cmd.Parameters.Add("@ModifyTime", SqlDbType.DateTime).Value = DateTime.Now;

                var ret = cmd.ExecuteNonQuery() > 0;
                if (ret)
                {
                    var cacheKey = new StringCacheKey(StringCacheKeyType.Channel, ConversationRoomID);
                    cacheKey.RemoveCache();
                }
                return(ret);
            }
        }
Exemple #7
0
        public SysGrabService(string name)
        {
            this._name = name;

            _CacheKey_TaskPool       = new StringCacheKey(StringCacheKeyType.Grab, name);
            _CacheKey_LatestTakeTime = new StringCacheKey(StringCacheKeyType.Grab, $"{_name}:LatestTakeTime");
            _CacheKey_DerepList      = $"{_CacheKey_TaskPool.KeyName}:Dereplication";
        }
Exemple #8
0
 public void InvalidTask(T item, string category)
 {
     if (Manager.Instance != null)
     {
         var CacheKey_Waiting = new StringCacheKey(StringCacheKeyType.Grab, $"{_name}:{_Scope}:{category}:Waiting");
         Manager.Instance.ListRemove <T>(CacheKey_Waiting.KeyName, item);
     }
 }
Exemple #9
0
        public bool Handle(Dto.EventBus.ChannelNewMsgEvent evt)
        {
            if (evt == null)
            {
                return(true);
            }

            //是通过客户端发送的
            if (evt.OptPlatform != "RESTAPI" && IsEnable())
            {
                #region 检查当前咨询中康博士回答情况,判断是否还需要继续使用康博士
                var cacheKey_Channel_DrKangState = new StringCacheKey(StringCacheKeyType.Channel_DrKangState, evt.ChannelID.ToString());
                var Channel_DrKangState          = cacheKey_Channel_DrKangState.FromCache <string>();

                switch (Channel_DrKangState)
                {
                //问答结束,没有匹配的疾病
                case "nullMatchDisease":
                //问答结束,已有明确诊断
                case "diagnosis":
                //无法响应回复
                case "nullMatchResponse":
                //禁用(医生已回复)
                case "disabled":
                //出现异常
                case "exception":
                    return(true);
                }
                #endregion

                //文字内容才识别
                if (evt.Messages.Length > 0 && evt.Messages[0].MessageContent.Contains("\"MsgType\":\"TIMTextElem\""))
                {
                    var room = roomService.GetChannelInfo(evt.ChannelID);

                    //医生未接诊
                    if (room != null && room.RoomState == EnumRoomState.AlreadyVisit)
                    {
                        //  { "MsgContent":{ "Text":"头疼"},"MsgType":"TIMTextElem"}
                        var msg = JsonHelper.FromJson <Msg>(evt.Messages[0].MessageContent);

                        if (msg != null && msg.MsgType == "TIMTextElem" && msg.MsgContent != null)
                        {
                            var text = msg.MsgContent["Text"];
                        }
                    }
                    else
                    {
                        //医生已经回答
                        "disabled".ToCache(cacheKey_Channel_DrKangState, TimeSpan.FromHours(24));
                    }
                }
            }

            return(true);
        }
Exemple #10
0
        public string GetKMSDUserID(EnumUserType UserType, string OrgID, string Mobile, string OuterID)
        {
            if (string.IsNullOrWhiteSpace(Mobile) && string.IsNullOrWhiteSpace(OuterID))
            {
                throw new Exception("Mobile,OuterID至少需指定一个");
            }
            if (!string.IsNullOrWhiteSpace(OuterID) && string.IsNullOrWhiteSpace(OrgID))
            {
                throw new Exception("OrgID不能为空");
            }
            string UserID = "";

            StringCacheKey GetUserIDByCreateUserID_CacheKey = null;

            if (!string.IsNullOrEmpty(OuterID))
            {
                GetUserIDByCreateUserID_CacheKey = new StringCacheKey(
                    StringCacheKeyType.MAP_GetUserIDByCreateUserIDAndOrgID, $"{OrgID}&{OuterID}");
            }
            else
            {
                GetUserIDByCreateUserID_CacheKey = new StringCacheKey(
                    StringCacheKeyType.MAP_GetUserIDByCreateUserIDAndOrgID, $"{Mobile}");
            }

            UserID = GetUserIDByCreateUserID_CacheKey.FromCache <string>();
            if (string.IsNullOrEmpty(UserID))
            {
                using (DBEntities db = new DBEntities())
                {
                    var q = from m in db.Users
                            where m.UserType == UserType && m.IsDeleted == false
                            select new { m.UserID, m.Mobile, m.OrgCode, m.CreateUserID };

                    if (!string.IsNullOrWhiteSpace(OuterID))// OuterID + OrgCode确定一个用户
                    {
                        q = q.Where(w => w.CreateUserID == OuterID);
                        if (!string.IsNullOrWhiteSpace(OrgID))
                        {
                            q = q.Where(w => w.OrgCode == OrgID);
                        }
                    }
                    else if (!string.IsNullOrWhiteSpace(Mobile))//手机号确定一个帐号
                    {
                        q = q.Where(w => w.Mobile == Mobile && string.IsNullOrEmpty(w.CreateUserID));
                    }

                    var u = q.FirstOrDefault();
                    UserID = u?.UserID;
                    UserID.ToCache(GetUserIDByCreateUserID_CacheKey, TimeSpan.FromMinutes(_GetUserInfoExpireMinutes()));
                }
            }
            return(UserID);
        }
Exemple #11
0
        /// <summary>
        /// 领取任务后,执行完成
        /// 作者:郭明
        /// 日期:2017年8月17日
        /// </summary>
        /// <param name="item"></param>
        public void FinishTask(T item, string category)
        {
            if (Manager.Instance != null)
            {
                var CacheKey_DoingTask = new StringCacheKey(StringCacheKeyType.Grab, $"{_name}:{_Scope}:{category}:Doing");
                var CacheKey_Finished  = new StringCacheKey(StringCacheKeyType.Grab, $"{_name}:{_Scope}:{category}:Finished");

                Manager.Instance.ListRemove <T>(CacheKey_DoingTask.KeyName, item);
                Manager.Instance.ListLeftPush(CacheKey_Finished.KeyName, item);
            }
        }
Exemple #12
0
 /// <summary>
 /// 已完成的任务数量
 /// </summary>
 public long FinishedTaskCount(string category)
 {
     if (Manager.Instance != null)
     {
         var CacheKey_FinishedTask = new StringCacheKey(StringCacheKeyType.Grab, $"{_name}:{_Scope}:{category}:Finished");
         return(Manager.Instance.ListLength(CacheKey_FinishedTask.KeyName));
     }
     else
     {
         return(0);
     }
 }
Exemple #13
0
 /// <summary>
 /// 已完成的人数列表是否为空
 /// </summary>
 /// <returns></returns>
 public bool FinishedTaskListEmpty(string category)
 {
     if (Manager.Instance != null)
     {
         var CacheKey_FinishedTask = new StringCacheKey(StringCacheKeyType.Grab, $"{_name}:{_Scope}:{category}:Finished");
         return(Manager.Instance.ListLength(CacheKey_FinishedTask.KeyName) <= 0);
     }
     else
     {
         return(true);
     }
 }
Exemple #14
0
        /// <summary>
        /// 领取任务后拒绝执行
        /// 作者:郭明
        /// 日期:2017年8月17日
        /// </summary>
        /// <param name="item"></param>
        public void RejectTask(T item, string category, int priority)
        {
            if (Manager.Instance != null)
            {
                var CacheKey_DoingTask = new StringCacheKey(StringCacheKeyType.Grab, $"{_name}:{_Scope}:{category}:Doing");
                var CacheKey_WaitTask  = new StringCacheKey(StringCacheKeyType.Grab, $"{_name}:{_Scope}:{category}:Waiting");

                Manager.Instance.ListRemove <T>(CacheKey_DoingTask.KeyName, item);
                Manager.Instance.ListRemove <T>(CacheKey_WaitTask.KeyName, item);
                Manager.Instance.ListLeftPush <T>($"{_CacheKey_TaskPool.KeyName}:{priority}", item);
            }
        }
Exemple #15
0
        /// <summary>
        /// 开始执行任务
        /// 作者:郭明
        /// 日期:2017年8月17日
        /// </summary>
        /// <param name="item"></param>
        public void StartTask(T item, string category)
        {
            if (Manager.Instance != null)
            {
                var CacheKey_Waiting = new StringCacheKey(StringCacheKeyType.Grab, $"{_name}:{_Scope}:{category}:Waiting");
                var CacheKey_Doing   = new StringCacheKey(StringCacheKeyType.Grab, $"{_name}:{_Scope}:{category}:Doing");

                //删除重复列表记录
                Manager.Instance.SetRemove(_CacheKey_DerepList, item);
                Manager.Instance.ListRemove <T>(CacheKey_Waiting.KeyName, item);
                Manager.Instance.ListLeftPush(CacheKey_Doing.KeyName, item);
            }
        }
        /// <summary>
        /// 获取医生的通信唯一标识
        /// </summary>
        /// <param name="doctorIDList"></param>
        /// <returns></returns>
        public int GetUserIMUid(string userID)
        {
            var cacheKey = new StringCacheKey(StringCacheKeyType.MAP_GetIMUidByUserID, userID);

            int?uid = cacheKey.FromCache <int?>();

            if (uid == null || !uid.HasValue || uid.Value == 0)
            {
                uid = GetUserIMUids(userID).FirstOrDefault();
                uid.ToCache(cacheKey);
            }

            return(uid.Value);
        }
Exemple #17
0
        /// <summary>
        /// 检查是否已存在  时代,蒙发利,掌上医院 用外部唯一ID;健康档案 一体机 用身份证号
        /// </summary>
        /// <param name="idNumber"></param>
        /// <param name="outID"></param>
        /// <param name="orgID"></param>
        /// <param name="checkType">1-外部唯一ID;2-身份证号</param>
        /// <returns></returns>
        public string ExistUserByCreateID(string outID, string orgID, int checkType)
        {
            StringCacheKey GetUserIDByCreateUserID_CacheKey = null;
            string         UserID = null;

            switch (checkType)
            {
            case 1:
                GetUserIDByCreateUserID_CacheKey = new StringCacheKey(StringCacheKeyType.MAP_GetUserIDByCreateUserIDAndOrgID, $"{orgID}&{outID}");

                UserID = GetUserIDByCreateUserID_CacheKey.FromCache <string>();

                if (string.IsNullOrEmpty(UserID))
                {
                    using (DBEntities db = new DBEntities())
                    {
                        //康美时代会员,蒙发利会员,掌上医院
                        //判断 outID  和orgID
                        UserID = (from aa in db.Users
                                  where aa.CreateUserID == outID && aa.OrgCode == orgID && !aa.IsDeleted
                                  select aa.UserID).FirstOrDefault();

                        if (!string.IsNullOrEmpty(UserID))
                        {
                            UserID.ToCache(GetUserIDByCreateUserID_CacheKey, TimeSpan.FromMinutes(_GetUserInfoExpireMinutes()));
                        }
                    }
                }
                break;

            case 2:
                GetUserIDByCreateUserID_CacheKey = new StringCacheKey(StringCacheKeyType.MAP_GetUserIDByCreateUserID, outID);
                UserID = GetUserIDByCreateUserID_CacheKey.FromCache <string>();
                if (string.IsNullOrEmpty(UserID))
                {
                    using (DBEntities db = new DBEntities())
                    {
                        //双佳一体机,健康档案
                        //双佳一体机 调用,判断 身份证号
                        UserID = (from aa in db.Users
                                  where aa.CreateUserID == outID && !aa.IsDeleted
                                  select aa.UserID).FirstOrDefault();

                        UserID.ToCache(GetUserIDByCreateUserID_CacheKey, TimeSpan.FromMinutes(_GetUserInfoExpireMinutes()));
                    }
                }
                break;
            }
            return(UserID);
        }
        private string Lookup(StringCacheKey key, params string[] args)
        {
            var returnValue = string.Empty;

            switch (key)
            {
            case StringCacheKey.UserPermissions:
            {
                returnValue = string.Format("bedrock:{1}:permissions:{0}", args);
                break;
            }
            }

            return(returnValue);
        }
Exemple #19
0
        public bool UpdateChannelChargeSeq(string conversationRoomID, int chargingSeq, DateTime chargingTime, int chargingInterval
                                           , EnumRoomState?roomState, DateTime?endTime)
        {
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["KMEHospEntities"].ConnectionString))
            {
                var sql = "";
                if (roomState.HasValue)
                {
                    sql = @"update ConversationRooms set ChargingTime=@ChargingTime,ChargingSeq=@ChargingSeq,
                    ChargingInterval=@ChargingInterval,RoomState=@RoomState,EndTime=@EndTime,ModifyTime=@ModifyTime 
                    where ConversationRooms.ConversationRoomID=@ConversationRoomID";
                }
                else
                {
                    sql = @"update ConversationRooms set ChargingTime=@ChargingTime,ChargingSeq=@ChargingSeq,
                    ChargingInterval=@ChargingInterval,ModifyTime=@ModifyTime 
                    where ConversationRooms.ConversationRoomID=@ConversationRoomID";
                }

                SqlCommand cmd = new SqlCommand(@"update ConversationRooms set ChargingTime=@ChargingTime,ChargingSeq=@ChargingSeq,
                    ChargingInterval=@ChargingInterval,RoomState=@RoomState,ModifyTime=@ModifyTime 
                    where ConversationRooms.ConversationRoomID=@ConversationRoomID");

                if (roomState.HasValue)
                {
                    cmd.Parameters.Add("@RoomState", SqlDbType.Int).Value    = (int)roomState.Value;
                    cmd.Parameters.Add("@EndTime", SqlDbType.DateTime).Value = endTime.Value;
                }

                cmd.Parameters.Add("@ChargingTime", SqlDbType.DateTime).Value  = chargingTime;
                cmd.Parameters.Add("@ChargingSeq", SqlDbType.Int).Value        = chargingSeq;
                cmd.Parameters.Add("@ChargingInterval", SqlDbType.Int).Value   = chargingInterval;
                cmd.Parameters.Add("@ModifyTime", SqlDbType.DateTime).Value    = DateTime.Now;
                cmd.Parameters.Add("@ConversationRoomID", SqlDbType.Int).Value = conversationRoomID;

                var ret = cmd.ExecuteNonQuery() > 0;
                if (ret)
                {
                    var cacheKey = new StringCacheKey(StringCacheKeyType.Channel, conversationRoomID);
                    cacheKey.RemoveCache();
                }

                return(ret);
            }
        }
        public static string GetPublicKey(uint SdkAppid)
        {
            var cacheKey = new StringCacheKey(StringCacheKeyType.KEY_IM_PublicKey, SdkAppid.ToString());
            var key      = cacheKey.FromCache <string>();

            if (string.IsNullOrEmpty(key))
            {
                var          basedir      = System.AppDomain.CurrentDomain.BaseDirectory;
                var          pri_key_path = System.IO.Path.Combine(basedir, "App_Data/Key/IM", SdkAppid.ToString(), "public_key");
                FileStream   f            = new FileStream(pri_key_path, FileMode.Open, FileAccess.Read);
                BinaryReader reader       = new BinaryReader(f);
                byte[]       b            = new byte[f.Length];
                reader.Read(b, 0, b.Length);
                key = Encoding.Default.GetString(b);
                key.ToCache(cacheKey);
            }

            return(key);
        }
        public bool Handle(Dto.EventBus.ChannelCreatedEvent evt)
        {
            if (evt != null && (evt.ServiceType == EnumDoctorServiceType.AudServiceType || evt.ServiceType == EnumDoctorServiceType.VidServiceType))
            {
                var lockName  = $"{nameof(IfVideoOrAudioConsultSendConsultContent)}:{evt.ChannelID}";
                var lockValue = Guid.NewGuid().ToString("N");
                if (lockName.Lock(lockValue, TimeSpan.FromSeconds(5)))
                {
                    try
                    {
                        var CacheKey_Derep = new StringCacheKey(StringCacheKeyType.SysDerep_ChannelConsultContentMsg, evt.ChannelID.ToString());

                        //订单续费去重复
                        if (!CacheKey_Derep.FromCache <bool>())
                        {
                            if (service.SendConsultContent(evt.ChannelID, evt.ServiceID))
                            {
                                true.ToCache(CacheKey_Derep, TimeSpan.FromMinutes(5));
                            }
                            else
                            {
                                return(false);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        LogHelper.DefaultLogger.Error(ex);
                        return(false);
                    }
                    finally
                    {
                        lockName.UnLock(lockValue);
                    }
                }
                else
                {
                    return(false);
                }
            }

            return(true);
        }
        /// <summary>
        /// 获取所有模板
        /// </summary>
        /// <returns></returns>
        List <SysShortMessageTemplate> GetAllTemplates()
        {
            StringCacheKey shortMsgTemplatesKey = new StringCacheKey(StringCacheKeyType.Sys_ShortMsgTemplates);
            var            shortMsgTemplates    = shortMsgTemplatesKey.FromCache <List <SysShortMessageTemplate> >();

            if (shortMsgTemplates == null)
            {
                using (DBEntities db = new DBEntities())
                {
                    shortMsgTemplates = db.SysShortMessageTemplates.ToList();
                    if (shortMsgTemplates == null)
                    {
                        shortMsgTemplates = new List <SysShortMessageTemplate>();
                    }

                    shortMsgTemplates.ToCache(shortMsgTemplatesKey);
                }
            }
            return(shortMsgTemplates);
        }
Exemple #23
0
        /// <summary>
        /// 修改分诊编号
        /// </summary>
        /// <param name="ConversationRoomID"></param>
        /// <param name="triageID"></param>
        /// <returns></returns>
        public bool UpdateTriageID(string ConversationRoomID, long triageID)
        {
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["KMEHospEntities"].ConnectionString))
            {
                SqlCommand cmd = new SqlCommand(@"update ConversationRooms set TriageID=@TriageID,ModifyTime=@ModifyTime 
                    where ConversationRooms.ConversationRoomID=@ConversationRoomID");
                cmd.Parameters.Add("@ModifyTime", SqlDbType.DateTime).Value    = DateTime.Now;
                cmd.Parameters.Add("@TriageID", SqlDbType.BigInt).Value        = triageID;
                cmd.Parameters.Add("@ConversationRoomID", SqlDbType.Int).Value = ConversationRoomID;

                var ret = cmd.ExecuteNonQuery() > 0;
                if (ret)
                {
                    var cacheKey = new StringCacheKey(StringCacheKeyType.Channel, ConversationRoomID);
                    cacheKey.RemoveCache();
                }

                return(ret);
            }
        }
Exemple #24
0
        /// <summary>
        /// 设置频道计费状态
        /// </summary>
        /// <param name="room"></param>
        /// <returns></returns>
        public bool UpdateChannelChargeState(string ConversationRoomID, EnumRoomChargingState chargingState)
        {
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["KMEHospEntities"].ConnectionString))
            {
                SqlCommand cmd = new SqlCommand(@"update ConversationRooms set ChargingState=@ChargingState,ModifyTime=@ModifyTime 
                    where ConversationRooms.ConversationRoomID=@ConversationRoomID");
                cmd.Parameters.Add("@ModifyTime", SqlDbType.DateTime).Value    = DateTime.Now;
                cmd.Parameters.Add("@ChargingState", SqlDbType.Int).Value      = (int)chargingState;
                cmd.Parameters.Add("@ConversationRoomID", SqlDbType.Int).Value = ConversationRoomID;

                var ret = cmd.ExecuteNonQuery() > 0;
                if (ret)
                {
                    var cacheKey = new StringCacheKey(StringCacheKeyType.Channel, ConversationRoomID.ToString());
                    cacheKey.RemoveCache();
                }

                return(ret);
            }
        }
Exemple #25
0
        /// <summary>
        /// 根据手机号码查询用户编号
        /// </summary>
        /// <param name="UserID"></param>
        /// <returns></returns>
        public string GetUserIDByOpenID(string openid)
        {
            var GetUserIDByOpenID_CacheKey = new StringCacheKey(StringCacheKeyType.MAP_GetUserIDByOpenID, $"{openid}");

            var UserID = GetUserIDByOpenID_CacheKey.FromCache <string>();

            //缓存没有命中,则查询数据库获取医生编号并设置缓存(缓存不过期)
            if (string.IsNullOrEmpty(UserID))
            {
                using (var db = new DBEntities())
                {
                    UserID = db.UserWechatMaps.Where(p => p.IsDeleted == false && p.OpenID == openid).
                             Select(t => t.UserID).FirstOrDefault();

                    if (!string.IsNullOrEmpty(UserID))
                    {
                        UserID.ToCache(GetUserIDByOpenID_CacheKey, TimeSpan.FromMinutes(_GetUserInfoExpireMinutes()));
                    }
                }
            }

            return(UserID);
        }
Exemple #26
0
        /// <summary>
        /// 获取房间用户信息
        /// </summary>
        /// <param name="ConversationRoomID"></param>
        /// <returns></returns>
        public List <ResponseConversationRoomMemberDTO> GetChannelUsersInfo(string ConversationRoomID, DBEntities db = null)
        {
            var cacheKey = new StringCacheKey(StringCacheKeyType.Channel_Member, ConversationRoomID);
            var result   = cacheKey.FromCache <List <ResponseConversationRoomMemberDTO> >();

            if (result == null)
            {
                bool dbPrivateFlag = false;
                if (db == null)
                {
                    db            = CreateDb();
                    dbPrivateFlag = true;
                }

                result = (
                    from roomMember in db.ConversationRoomUids
                    join room in db.ConversationRooms on roomMember.ConversationRoomID equals room.ConversationRoomID
                    where room.ConversationRoomID == ConversationRoomID
                    select new ResponseConversationRoomMemberDTO
                {
                    identifier = roomMember.Identifier,
                    UserCNName = roomMember.UserCNName,
                    UserENName = roomMember.UserENName,
                    PhotoUrl = roomMember.PhotoUrl,
                    UserType = roomMember.UserType,
                    UserID = roomMember.UserID,
                }).ToList();

                if (dbPrivateFlag)
                {
                    db.Dispose();
                }

                result.ToCache(cacheKey, TimeSpan.FromHours(2));
            }
            return(result);
        }
Exemple #27
0
        /// <summary>
        /// 获取医生状态配置
        /// </summary>
        /// <param name="room"></param>
        /// <returns></returns>
        public List <ResponseConversationRoomDocConfDTO> GetDoctorConfigs(string DoctorID, DBEntities db = null)
        {
            #region 获取医生配置
            var CacheKey      = new StringCacheKey(StringCacheKeyType.Doctor_Configs, DoctorID);
            var doctorConfigs = CacheKey.FromCache <List <ResponseConversationRoomDocConfDTO> >();

            if (doctorConfigs == null)
            {
                bool dbPrivateFlag = false;
                if (db == null)
                {
                    db            = CreateDb();
                    dbPrivateFlag = true;
                }

                doctorConfigs = db.DoctorConfigs.Where(x => !x.IsDeleted && x.DoctorID == DoctorID).Select(x => new ResponseConversationRoomDocConfDTO
                {
                    DoctorID      = DoctorID,
                    ConfigType    = x.ConfigType,
                    ConfigContent = x.ConfigContent
                }).ToList();

                if (dbPrivateFlag)
                {
                    db.Dispose();
                }

                if (doctorConfigs != null)
                {
                    doctorConfigs.ToCache(CacheKey);
                }
            }
            return(doctorConfigs);

            #endregion
        }
        public bool Handle(Dto.EventBus.ChannelNewMsgEvent evt)
        {
            try
            {
                if (evt.OptPlatform != "RESTAPI" && evt.ServiceType == EnumDoctorServiceType.PicServiceType)
                {
                    //获取医生回复状态,已经回答的则忽略
                    var cacheKey_Channel_DoctorAnswerState = new StringCacheKey(StringCacheKeyType.Channel_DoctorAnswerState, evt.ChannelID.ToString());
                    var Channel_DoctorAnswerState          = cacheKey_Channel_DoctorAnswerState.FromCache <bool?>();
                    if (Channel_DoctorAnswerState.HasValue && Channel_DoctorAnswerState.Value)
                    {
                        return(true);
                    }

                    var room = roomService.GetChannelInfo(evt.ChannelID);

                    if (room != null && (
                            room.RoomState != EnumRoomState.AlreadyVisit &&
                            room.RoomState != EnumRoomState.InMedicalTreatment))
                    {
                        var userInfo = roomService.GetChannelUsersInfo(evt.ChannelID).Where(t =>
                                                                                            t.identifier == Convert.ToInt32(evt.FromAccount)).FirstOrDefault();

                        //医生回复了
                        if (userInfo != null && userInfo.UserType == EnumUserType.Doctor)
                        {
                            //修改咨询状态为已回复
                            bllUserConsult.UpdateReplied(evt.ServiceID);

                            var ExpectedState = room.RoomState;
                            if (roomService.CompareAndSetChannelState(
                                    room.ConversationRoomID,
                                    userInfo.UserID,
                                    EnumRoomState.InMedicalTreatment,
                                    room.DisableWebSdkInteroperability,
                                    ref ExpectedState) != EnumApiStatus.BizOK)
                            {
                                return(false);
                            }

                            //设置医生回复状态
                            true.ToCache(cacheKey_Channel_DoctorAnswerState, TimeSpan.FromHours(24));

                            using (MQChannel mqChannel = new MQChannel())
                            {
                                return(mqChannel.Publish(new Dto.EventBus.UserNoticeEvent()
                                {
                                    NoticeType = EnumNoticeSecondType.UserPicDoctorReplyNotice,
                                    ServiceID = evt.ServiceID
                                }));
                            }
                        }
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                LogHelper.DefaultLogger.Error(ex);
            }

            return(false);
        }
Exemple #29
0
        /// <summary>
        /// 获取流水号
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public static string GetWaterNo(EnumWaterNoType type)
        {
            ICacheKey cachKey = null;
            double    no      = 0;

            switch (type)
            {
            case EnumWaterNoType.Identify:
                cachKey = new StringCacheKey(StringCacheKeyType.User_Identify);
                no      = Manager.Increment(cachKey);

                if (no < 1000)
                {
                    if (!$"GetWaterNo_Identify".Lock($"GetWaterNo_Identify", TimeSpan.FromSeconds(10), 100, 3))
                    {
                        throw new Exception("并发冲突");
                    }

                    no = Manager.Increment(cachKey);
                    if (no < 1000)
                    {
                        using (var db = new DBEntities())
                        {
                            no = db.ConversationIMUids.Where(t => !t.IsDeleted).
                                 Select(t => t.Identifier).Max();

                            if (no < 1000)
                            {
                                no = 1000;
                            }
                            Manager.Increment(cachKey, no);
                        }
                    }
                }
                return(no.ToString());

            case EnumWaterNoType.ChannelID:
                cachKey = new StringCacheKey(StringCacheKeyType.ChannelID);
                no      = Manager.Increment(cachKey);

                if (no < 1000)
                {
                    if (!$"GetWaterNo_Identify".Lock($"GetWaterNo_Identify", TimeSpan.FromSeconds(10), 100, 3))
                    {
                        throw new Exception("并发冲突");
                    }

                    no = Manager.Increment(cachKey);
                    if (no < 1000)
                    {
                        using (var db = new DBEntities())
                        {
                            no = db.ConversationIMUids.Where(t => !t.IsDeleted).
                                 Select(t => t.Identifier).Max();

                            if (no < 1000)
                            {
                                no = 1000;
                            }
                            Manager.Increment(cachKey, no);
                        }
                    }
                }
                return(no.ToString());

            default:
                return(no.ToString());
            }
        }
Exemple #30
0
        /// <summary>
        /// 依据角色,系统标识 获取菜单功能权限
        /// </summary>
        /// <param name="roletypes"></param>
        /// <param name="topModuleID"></param>
        /// <param name="type">0 菜单 1 功能</param>
        /// <returns></returns>
        public List <ResponseSysModuleForDocDTO> GetRoleMenus(List <EnumRoleType> roletypes, string topModuleID, int type = -1)
        {
            StringCacheKey SysModuleskey = new StringCacheKey(StringCacheKeyType.Sys_SysModules);

            var sysModules = SysModuleskey.FromCache <List <ResponseRoleSysModuleDTO> >();

            if (sysModules == null)
            {
                using (var db = new DBEntities())
                {
                    sysModules = (from sys in db.SysModules
                                  join sysmap in db.UserRolePrevileges on sys.ModuleID equals sysmap.ModuleID
                                  join role in db.UserRoles on sysmap.RoleID equals role.RoleID
                                  where !sys.IsDeleted
                                  select new ResponseRoleSysModuleDTO()
                    {
                        CSSClass = sys.CSSClass,
                        Level = sys.Level,
                        ModuleID = sys.ModuleID,
                        ModuleName = sys.ModuleName,
                        ModuleType = sys.ModuleType,
                        ModuleUrl = sys.ModuleUrl,
                        ParentModuleID = sys.ParentModuleID,
                        Sort = sys.Sort,
                        Target = sys.Target,
                        TopModuleID = sys.TopModuleID,
                        RoleID = role.RoleID,
                        RoleType = (int)role.RoleType
                    }).ToList();
                    sysModules.ToCache(SysModuleskey);
                }
            }

            if (sysModules == null)
            {
                return(new List <ResponseSysModuleForDocDTO>());
            }
            else
            {
                var query = (from sys in sysModules
                             join role in roletypes on sys.RoleType equals(int) role
                             where sys.TopModuleID == topModuleID && !string.IsNullOrEmpty(sys.ModuleUrl)
                             group new { sys.CSSClass, sys.ModuleUrl, sys.Target, sys.ModuleName, sys.Sort, sys.ModuleType }
                             by new { sys.CSSClass, sys.ModuleUrl, sys.Target, sys.ModuleName, sys.Sort, sys.ModuleType } into gro
                             select new ResponseSysModuleForDocDTO()
                {
                    cssClass = gro.Key.CSSClass,
                    href = gro.Key.ModuleUrl,
                    target = gro.Key.Target,
                    title = gro.Key.ModuleName,
                    Sort = gro.Key.Sort,
                    ModuleType = gro.Key.ModuleType,
                    id = gro.Key.ModuleUrl
                });

                if (type >= 0)
                {
                    query = query.Where(t => t.ModuleType == type);
                }
                return(query.OrderBy(t => t.Sort).ToList());
            }
        }