예제 #1
0
        public async Task <JsonResult> CreateOperation([FromBody] OperationOutDto oper)
        {
            CheckApiKey();

            using (var sqlR = new DeviceRepository(_logger))
            {
                var ret = new InsertResDto();
                try
                {
                    await sqlR.CreateOperation(oper);

                    ret.IsSuccess = true;
                }
                catch (Exception e)
                {
                    ret.Error = e.Message;

                    if (e is SqlException sqle)
                    {
                        if (sqle.Number == 2601 && sqle.Message.ToLower().Contains("refid"))
                        {
                            ret.AlreadyExist = true;
                            ret.Error        = "already exist";
                        }
                    }
                }

                return(Json(ret));
            }
        }
예제 #2
0
        public async Task CreateOperation(OperationOutDto oper)
        {
            using (var conn = new SqlConnection(AppSettings.ConnectionString))
            {
                var SqlCreateRemoteOperation = "INSERT INTO [DeviceHistories] ([DeviceId],[Operation],[UserId],[RefId]) VALUES (@DeviceId,@Operation,@UserId,@RefId)";

                await conn.ExecuteAsync(SqlCreateRemoteOperation,
                                        new
                {
                    oper.DeviceId,
                    oper.Operation,
                    oper.UserId,
                    oper.RefId
                });
            }
        }
예제 #3
0
        private int ProcessOutOperations()
        {
            var sentCount = 0;

            var outOperations = _localConnection.Query <OperationOut>(SqlGetUnsentOperations).OrderBy(o => o.CreateDate).ToList();

            if (outOperations.Any())
            {
                _logger.Debug($"ProcessOutOperations total operations to send: {outOperations.Count}");

                foreach (var item in outOperations)
                {
                    try
                    {
                        //отправляем операцию в удаленную базу
                        var operDto = new OperationOutDto
                        {
                            DeviceId   = item.DeviceId,
                            Operation  = item.Operation,
                            UserId     = item.UserId,
                            CreateDate = item.CreateDate,
                            RefId      = item.RefId
                        };

                        _logger.Debug($"ProcessOutOperations operDto: DeviceId={operDto.DeviceId}, Operation={operDto.Operation}, UserId={operDto.UserId}, CreateDate={operDto.CreateDate}, RefId={operDto.RefId}");

                        var response = _remoteClient
                                       .PostAsJsonAsync("/api/TabletIssueStationSync/CreateOperation", operDto).Result;

                        var error = false;
                        if (response.IsSuccessStatusCode)
                        {
                            var result = response.Content.ReadAsAsync <InsertResDto>().Result;
                            if (result.IsSuccess == false && result.AlreadyExist == false)
                            {
                                //какая-то ошибка и это не повтор refid
                                _logger.Error($"ProcessOutOperations request error: {result.Error}");
                                error = true;
                            }
                        }
                        else
                        {
                            _logger.Error($"ProcessOutOperations non-success request status code: {response.StatusCode}");
                            error = true;
                        }

                        if (error)
                        {
                            throw new Exception();
                        }

                        sentCount++;
                        _localConnection.Execute(SqlMarkSentOperation, new { item.Id });
                    }
                    catch (Exception e)
                    {
                        _logger.Error(e, "ProcessOutOperations error");
                    }
                }
            }

            return(sentCount);
        }