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)); } }
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 }); } }
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); }