public RequestDelivery Add(RequestDelivery item) { if (item == null) { throw new ArgumentNullException(nameof(item)); } item.Id = _nextId++; var warehouse = repository.Warehouses.Find(w => w.Id == item.WarehouseId); if (warehouse == null) { item.WarehouseId = 0; } else { item.Warehouse = warehouse; } var shop = repository.Shops.Find(s => s.Id == item.ShopId); if (shop == null) { item.ShopId = 0; } else { item.Shop = shop; } repository.RequestDeliverys.Add(item); return(item); }
/// <summary> /// 配信メッセージを作成する /// </summary> /// <param name="messageObject">配信メッセージオブジェクト</param> /// <param name="gatewayDevice">ゲートウェイ機器</param> /// <returns>配信メッセージ</returns> private string CreateDeliveryMessageJson(RequestDelivery messageObject, DtDevice gatewayDevice) { string deliveryMessage = null; try { Assert.IfNull(messageObject); deliveryMessage = JsonConvert.SerializeObject(messageObject); _logger.Debug("message: {0}", new object[] { deliveryMessage }); } catch (Exception e) { // Sq1.4 _logger.Error(e, nameof(Resources.CO_DLV_DLV_012), new object[] { gatewayDevice.EdgeId, gatewayDevice.EquipmentUid, e.Message }); } return(deliveryMessage); }
public bool Update(RequestDelivery item) { if (item == null) { throw new ArgumentNullException("item"); } int index = repository.RequestDeliverys.FindIndex(r => r.Id == item.Id); if (index == -1) { return(false); } repository.RequestDeliverys.RemoveAt(index); var warehouse = repository.Warehouses.Find(w => w.Id == item.WarehouseId); if (warehouse == null) { item.WarehouseId = 0; } else { item.Warehouse = warehouse; } var shop = repository.Shops.Find(s => s.Id == item.ShopId); if (shop == null) { item.ShopId = 0; } else { item.Shop = shop; } repository.RequestDeliverys.Add(item); return(true); }
public bool Update(int id, RequestDeliveryInputDTO inputEntity) { using IDbConnection connection = new SqlConnection(connectionString); connection.Open(); using IDbTransaction transaction = connection.BeginTransaction(); try { var updateQuery = "Update RequestDeliverys SET Number = @Number, WarehouseId = @WarehouseId, ShopId = @ShopId WHERE Id = @Id"; RequestDelivery entity = mapper.Map <RequestDelivery>(inputEntity); entity.Id = id; var result = connection.Execute(updateQuery, entity, transaction) == 1; var deleteDeliveryItems = "DELETE FROM DeliveryItems WHERE RequestDeliveryId = @Id"; connection.Execute(deleteDeliveryItems, entity, transaction); AddDeliveryItems(connection, transaction, id, inputEntity.ProductIds); transaction.Commit(); return(result); } catch { transaction.Rollback(); throw; } }
/// <summary> /// 配信処理開始 /// </summary> public void StartDelivery() { try { _logger.Enter(); // Sq1.1: 開始可能な配信グループを取得する(現在時刻) // 配信結果・配信グループステータス・配信ファイルのデータを持って取得 var groups = ReadStartableDtDeliveryGroupWrapper(); foreach (var group in groups) { try { // Sq1.2: 開始可能な配信グループの配信結果ステータスを更新する(started) var updatedGroup = UpdateDtDeliveryGroupStatusStartedWrapper(group.Sid); if (updatedGroup == null) { continue; } // Sq1.3: 配信グループに属し、オンラインとなっているゲートウェイ機器を取得する var onlineGatewayDevices = ReadDtDeviceOnlineGatewayWrapper(group); if (!onlineGatewayDevices.Any()) { continue; } // 配信グループデータを基に、親子エンティティのデータをもった配信グループを取得する var includedGroup = _deliveryGroupRepository.ReadDeliveryIncludedDtDeliveryGroup(group.Sid); if (includedGroup == null) { continue; } // メッセージオブジェクトの生成(配信対象以外) var messageObject = RequestDelivery.CreateDeliveryMessageObject(includedGroup); foreach (var gatewayDevice in onlineGatewayDevices) { try { // 配信対象の設定 messageObject.Targets = includedGroup.DtDeliveryResult ?.Where(x => x.GwDeviceSid == gatewayDevice.Sid) .Select(x => new RequestDelivery.Target() { DeliveryResultSID = x.Sid.ToString(), EquipmentUID = x.DtDevice1.EquipmentUid }) .ToArray(); // Sq1.4: 配信メッセージを生成する var deliveryMessage = CreateDeliveryMessageJson(messageObject, gatewayDevice); if (deliveryMessage == null) { continue; } // メッセージ送信 if (!SendMessageAsync(gatewayDevice, deliveryMessage).Result) { // 送信失敗時は次のゲートウェイ機器の処理に移る continue; } // Sq1.7:ゲートウェイ機器を持つ配信機器の配信結果ステータスを更新する(messagesent) var installResults = CreateDtInstallResultStatusSentWrapper(includedGroup, gatewayDevice); if (!installResults.Any()) { continue; } // メッセージ送信処理の正常終了をログ出力 _logger.Info(nameof(Resources.CO_DLV_DLV_017), new object[] { gatewayDevice.EdgeId, gatewayDevice.EquipmentUid }); } catch (Exception e) { // その他箇所でエラー _logger.Error(e, nameof(Resources.CO_DLV_DLV_003), new object[] { gatewayDevice.EdgeId, gatewayDevice.EquipmentUid, e.Message }); } } } catch (Exception e) { // その他箇所でエラー _logger.Error(e, nameof(Resources.CO_DLV_DLV_002), new object[] { group.Sid, e.Message }); } } } finally { _logger.Leave(); } }