示例#1
0
        //TODO Либо генерировать у пользователя GUID и передавать его, либо генерировать его здесь и возвращать как результат операции
        //TODO Соответственно, MessageInChat либо генерируется по запросам клиента, либо "вшить" генерацию внутрь контроллера
        //TODO (когда посылаем и создаем сообщениеб тогда же и создаем MsgInChat)
        public CMessageInfo CreateMessage(CMessageInfo message)
        {
            s_log.LogInfo($@"Data provider's method '{nameof(CreateMessage)}({message})' is called");

            #region SQL

            var sql = @"
INSERT INTO messages (Id, DispatchDate, MessageText, Type, ContentUri)
    VALUES (
@Id, @DispatchDate, @MessageText, @Type, @ContentUri
);
SELECT USN 
FROM messages 
    WHERE Id = @Id;
";

            #endregion

            using (IDbConnection connection = new SqlConnection(_dbSettings.DbConnectionString))
            {
                using (CDbTransactionQueryExecutor executor = new CDbTransactionQueryExecutor(connection))
                {
                    try
                    {
                        var outputId = Guid.NewGuid();

                        var result = executor.ExecuteScalar <Int64>(sql,
                                                                    SSqlParameterCreator.Create(
                                                                        "@Id", outputId, SqlDbType.UniqueIdentifier, false, ParameterDirection.Input
                                                                        ),
                                                                    SSqlParameterCreator.Create(
                                                                        "@DispatchDate", message.DispatchDate, SqlDbType.DateTimeOffset, false, ParameterDirection.Input
                                                                        ),
                                                                    SSqlParameterCreator.Create(
                                                                        "@MessageText", message.MessageText, SqlDbType.NVarChar, true, ParameterDirection.Input, 2038
                                                                        ),
                                                                    SSqlParameterCreator.Create(
                                                                        "@Type", message.Type, SqlDbType.TinyInt, false
                                                                        ),
                                                                    SSqlParameterCreator.Create(
                                                                        "@ContentUri", message.ContentUri, SqlDbType.NVarChar, true, ParameterDirection.Input, 2038
                                                                        )
                                                                    );

                        executor.Commit();

                        return(new CMessageInfo(outputId, message.DispatchDate, message.MessageText, message.Type,
                                                message.ContentUri, message.FromUserId, message.IsRead, message.Login, result));
                    }
                    catch (SqlException e)
                    {
                        s_log.LogError($@"{nameof(CreateMessage)}({message}): Error occured during SQL query execution", e);
                        s_log.LogInfo($@"{nameof(CreateMessage)}({message}): Operation was rolled back because of error");
                        Console.WriteLine($@"{nameof(CreateMessage)}({message}): Error occured during SQL query execution");
                        Console.WriteLine("Operation was rolled back because of error");
                        return(null);
                    }
                }
            }
        }
示例#2
0
        public IHttpActionResult PostMessage([FromBody] CNewMessageDto message)
        {
            if (message == null)
            {
                ModelState.AddModelError($"{nameof(message)}", "Incoming data is null");
                return(BadRequest(ModelState));
            }

            var messageInfoToPost = new CMessageInfo(Guid.Empty, message.DispatchDate, message.MessageText, message.Type, message.ContentUri, message.SenderId, true, String.Empty, default(Int64));

            var messageInfoRetrieved = _messageDataProvider.CreateMessage(messageInfoToPost);

            if (messageInfoRetrieved == null || messageInfoRetrieved.Id == Guid.Empty)
            {
                s_log.LogError($"{System.Reflection.MethodBase.GetCurrentMethod()}({message})", new Exception("Failed to post message: can't get message info"));
                return(InternalServerError());
            }

            var chatParticipants = _userDataProvider.GetAllChatParticipantsByChatId(message.ChatId);

            if (chatParticipants == null || chatParticipants.Count == 0)
            {
                s_log.LogError($"{System.Reflection.MethodBase.GetCurrentMethod()}({message})", new Exception("Failed to post message: can't get chat participants"));
                return(InternalServerError());
            }

            CUserInfo senderInfo = null;

            //get all participants
            foreach (var user in chatParticipants)
            {
                //TODO А если сами себе пересылаем сообщение?
                //if (user.Id == message.SenderId)
                //    continue;
                if (user.Id == message.SenderId)
                {
                    senderInfo = user;
                }

                var messageInChatInfo = new CMessageInChatInfo(
                    Guid.Empty,
                    messageInfoRetrieved.Id,
                    message.ChatId,
                    message.SenderId,
                    user.Id,
                    user.Id == message.SenderId
                    );

                var rowsAffected = _messageInChatDataProvider.CreateMessageInChat(messageInChatInfo);

                if (rowsAffected == 0)
                {
                    s_log.LogError($"{System.Reflection.MethodBase.GetCurrentMethod()}({message})", new Exception("Failed to post message: can't create message in chat"));
                    return(InternalServerError());
                }
            }

            return(Ok(new CMessagePostedDto(messageInfoRetrieved.Id, messageInfoRetrieved.DispatchDate, senderInfo != null ? senderInfo.Login : String.Empty, messageInfoRetrieved.Usn)));
        }
示例#3
0
文件: FormMain.cs 项目: ckbcjj/jxcar
 private void barLargeButtonItem3_ItemClick(object sender, ItemClickEventArgs e)
 {
     if (((this.SwitchModuleSM == null) && (ServerSystemInfo.SerialComInfoList != null)) && (ServerSystemInfo.SerialComInfoList.Count != 0))
     {
         SerialComConfig config = (from t in ServerSystemInfo.SerialComInfoList
                                   where t.SerialComType == 1
                                   select t).FirstOrDefault <SerialComConfig>();
         if (config != null)
         {
             this.SwitchModuleSM = new SysManager(config.SerialComInfo.Key, config.SerialComInfo.Value);
         }
     }
     if (ServerSystemInfo.ModuleId == ServerSystemInfo.SoftModuleId)
     {
         CMessageInfo.ShowMessage("该模块已连接!", "模块切换", 1);
         if ((this.client != null) && (this.buffer != null))
         {
             PaidComm.SendBack(this.client, this.buffer, 0);
         }
     }
     else if (CheckInfo.PcCheckState)
     {
         CMessageInfo.ShowMessage("学生机考核进行中,无法操作!", "模块切换", 1);
     }
     else if (CheckInfo.PaidCheckState)
     {
         CMessageInfo.ShowMessage("平板用户考核进行中,无法操作!", "模块切换", 1);
     }
     else
     {
         string msg = string.Empty;
         if (this.SwitchModuleSM.ConnectModule(int.Parse(this._dr["Id"].ToString())))
         {
             ServerSystemInfo.ModuleName   = this._dr["ModuleName"].ToString();
             ServerSystemInfo.ModuleIdBuff = int.Parse(this._dr["Id"].ToString());
             CMessageInfo.ShowMessage("模块切换成功!", "模块切换", 1);
             if ((this.client != null) && (this.buffer != null))
             {
                 PaidComm.SendBack(this.client, this.buffer, 0);
             }
             SysManager.ModuleId = ServerSystemInfo.ModuleId;
             SysManager.ResetFaultPoint();
             msg = string.Format("切换模块[{0}]成功", ServerSystemInfo.ModuleName);
         }
         else
         {
             CMessageInfo.ShowMessage("模块连接失败,请重试!", "模块切换", 1);
             msg = string.Format("切换模块[{0}]失败", this._dr["ModuleName"].ToString());
             if ((this.client != null) && (this.buffer != null))
             {
                 PaidComm.SendBack(this.client, this.buffer, 1);
             }
         }
         this.da.WriteLog(LoginInfo.UserName, msg);
     }
 }
示例#4
0
 private void barLargeButtonItem10_ItemClick(object sender, ItemClickEventArgs e)
 {
     if ((ServerSystemInfo.ModuleId != ServerSystemInfo.SoftModuleId) || (ServerSystemInfo.SysPattern != 1))
     {
         CMessageInfo.ShowMessage("请先连接当前要操作的系统模块并且将软件运行模式设置为实训考核模式", "考核发题", 2);
     }
     else if (CheckInfo.PcCheckState)
     {
         MessageBox.Show("学生机考核进行中,不能操作");
     }
     else
     {
         ServerSystemInfo.dic = new Dictionary <int, string>();
         foreach (DataRow row in ((DataTable)this.gridControl1.DataSource).Rows)
         {
             if (row[0].ToString() == "True")
             {
                 string str = row["PointState"].ToString();
                 string.Compare(row["NormalIsBreak"].ToString(), "False", true);
                 if ((string.IsNullOrEmpty(str) || (str == "清除故障失败")) || ((str == "读取状态失败") || (str == "设置故障失败")))
                 {
                     CMessageInfo.ShowMessage("请先设置故障,再发题", "考核发题", 1);
                     return;
                 }
                 ServerSystemInfo.dic.Add(int.Parse(row[1].ToString()), str);
             }
         }
         int           num = (ServerSystemInfo.Counts == 0) ? this.dt.Rows.Count : ServerSystemInfo.Counts;
         SendCheckItem msg = new SendCheckItem {
             ItemList   = ServerSystemInfo.dic,
             ScorePoint = ServerSystemInfo.ScorePoint,
             Counts     = num,
             Time       = ServerSystemInfo.PcTimeCount,
             Memo       = ServerSystemInfo.Memo
         };
         SysManager.SentToClient(TcpService.clientPool, LoginInfo.StudyNO, SocketInfoType.CheckItem, msg);
         CheckInfo.PcCheckState = true;
         CheckInfo.PcCheckTime  = DateTime.Now;
         CMessageInfo.ShowMessage("发题成功", "考核发题", 1);
     }
 }
示例#5
0
        public IHttpActionResult GetLastMessage([FromUri] Guid userId, [FromUri] Guid chatId)
        {
            s_log.LogInfo($"{System.Reflection.MethodBase.GetCurrentMethod()}({chatId}) is called");

            if (chatId == Guid.Empty)
            {
                ModelState.AddModelError($"{nameof(chatId)}", "Incoming data is null");
                s_log.LogError($"{System.Reflection.MethodBase.GetCurrentMethod()}({chatId})", new ArgumentNullException(nameof(chatId), "Incoming data is null"));
                return(BadRequest(ModelState));
            }

            CMessageInfo lastMsg = _messageDataProvider.GetLastMessageFromChat(chatId);

            if (lastMsg == null)
            {
                s_log.LogError($"{System.Reflection.MethodBase.GetCurrentMethod()}({chatId})", new Exception("Failed to get last message"));
                return(NotFound());
            }

            return(Ok(new CMessageDto(lastMsg.Id, lastMsg.DispatchDate, lastMsg.MessageText, lastMsg.Type, lastMsg.ContentUri, lastMsg.FromUserId == userId, lastMsg.IsRead, lastMsg.Login, lastMsg.Usn)));
        }
示例#6
0
        private void barLargeButtonItem7_ItemClick(object sender, ItemClickEventArgs e)
        {
            MapLocation location = new MapLocation();

            if (ServerSystemInfo.ModuleId == ServerSystemInfo.SoftModuleId)
            {
                if (CheckInfo.PcCheckState)
                {
                    CMessageInfo.ShowMessage("学生机考核进行中,不能操作", "故障设置", 2);
                }
                else if (CheckInfo.PaidCheckState)
                {
                    CMessageInfo.ShowMessage("平板用户考核进行中,不能操作", "故障设置", 2);
                }
                else
                {
                    foreach (DataRow row in ((DataTable)this.gridControl1.DataSource).Rows)
                    {
                        if (row[0].ToString() == "True")
                        {
                            bool flag     = string.Compare(row["NormalIsBreak"].ToString(), "False", true) != 0;
                            int  moduleId = ServerSystemInfo.ModuleId;
                            int  pointId  = int.Parse(row[1].ToString().Trim());
                            if (row["FaultPattern"].ToString() == "故障指令")
                            {
                                CMessageInfo.ShowMessage("请选择故障指令", "故障设置", 2);
                                return;
                            }
                            if (row["FaultPattern"].ToString() != row["PointState"].ToString())
                            {
                                int data      = int.Parse(this.table.Select(" OrderName='" + row["FaultPattern"].ToString() + "'").First <DataRow>()["OrderId"].ToString());
                                int orderCode = location.DataToCoder(data);
                                if (SysManager.SetFaultPoint(pointId, orderCode))
                                {
                                    row["PointState"] = row["FaultPattern"].ToString().Trim();
                                    if (((row["PointState"].ToString() == "通路") && !flag) || ((row["PointState"].ToString() == "断路") && flag))
                                    {
                                        row["IsNormal"] = "正常";
                                    }
                                    else
                                    {
                                        row["IsNormal"] = "有故障";
                                    }
                                    if ((this.client != null) && (this.buffer != null))
                                    {
                                        this.buffer[3] = (byte)moduleId;
                                        this.buffer[4] = 1;
                                        this.buffer[5] = (byte)pointId;
                                        PaidComm.SendBack(this.client, this.buffer, 0);
                                    }
                                    this.da.WriteLog(LoginInfo.UserName, string.Format("成功设置故障[{2}]:模块为[{0}],故障点为[{1}]", ServerSystemInfo.ModuleName, row["name"].ToString(), row["FaultPattern"].ToString()));
                                }
                                else
                                {
                                    row["PointState"] = "设置故障失败";
                                    if ((this.client != null) && (this.buffer != null))
                                    {
                                        this.buffer[3] = (byte)moduleId;
                                        this.buffer[4] = 1;
                                        this.buffer[5] = (byte)pointId;
                                        PaidComm.SendBack(this.client, this.buffer, 1);
                                    }
                                    this.da.WriteLog(LoginInfo.UserName, string.Format("设置故障[{2}]失败:模块为[{0}],故障点为[{1}]", ServerSystemInfo.ModuleName, row["name"].ToString(), row["FaultPattern"].ToString()));
                                }
                            }
                            else
                            {
                                if ((this.client != null) && (this.buffer != null))
                                {
                                    this.buffer[3] = (byte)moduleId;
                                    this.buffer[4] = 1;
                                    this.buffer[5] = (byte)pointId;
                                    PaidComm.SendBack(this.client, this.buffer, 0);
                                }
                                this.da.WriteLog(LoginInfo.UserName, string.Format("成功设置故障[{2}]:模块为[{0}],故障点为[{1}]", ServerSystemInfo.ModuleName, row["name"].ToString(), row["FaultPattern"].ToString()));
                            }
                            this.gridControl1.RefreshDataSource();
                        }
                    }
                    if ((this.client != null) && (this.buffer != null))
                    {
                        PaidComm.SendBack(this.client, this.buffer, 0);
                    }
                }
            }
            else
            {
                if ((this.client != null) && (this.buffer != null))
                {
                    PaidComm.SendBack(this.client, this.buffer, 1);
                }
                CMessageInfo.ShowMessage("对不起,您要操作的模块和接入的模块不一致。请接入该系统模块后再尝试", "故障设置", 1);
            }
        }