/// <summary> /// Создает контейнер в базе данных формирует номер QR кода /// </summary> /// <param name="realContainer">realContainer</param> /// <returns>созданный контейнер</returns> public async Task <RealContainer> InsertAsync(RealContainer realContainer) { using (var sqlConnect = Connections.GetLM()) { string[] bCodeForCheck = { "Bag", "SecurePack", "RKCBag", "TechBag", "MoneyPack", "CoinBag", "BanknotePack" }; var qrCode = realContainer.QrCode; if (realContainer.BCode != null && bCodeForCheck.Contains(realContainer.BCode.Trim())) { realContainer.VendorId = null; realContainer.NominalId = null; realContainer.PositionId = null; realContainer.CasseteModelId = null; realContainer.QrCode = qrCode; realContainer.UpdateQrCodeNum(); if (!await CheckRealContainerNotExistAsync(realContainer.QrCode, realContainer.CreditOrgId) || !await CheckCreditOrgAsync(realContainer.CreditOrgId)) { throw new Exception($"Контейнер с номером \"{realContainer.QrCode}\" уже существует в базе."); } } else { qrCode = await GetUniqueNumaratorAsync(realContainer.CreditOrgId); realContainer.QrCode = qrCode; realContainer.UpdateQrCodeNum(); if (!await CheckRealContainerNotExistAsync(realContainer) || !await CheckCreditOrgAsync(realContainer.CreditOrgId)) { throw new Exception($"Контейнер с заданными параметрами и номером \"{realContainer.QrCode}\" уже существует в базе."); } } var sql = @"INSERT INTO [BankValues].[Cassetes] ([idCasseteType] ,[idModel] ,[idNominal] ,[idCurrency] ,[idVendor] ,[idPosition] ,[Volume] ,[idCreditOrg] ,[idStatus] ,[QrCode] ,[QrCodeNum] ,[Model] ,[sSeal] ,[sSealDouble] ,[bSealIntegrity] ,[bSealIntegrityDouble] ,[sSerialNUmber] ,[bDepo] ,[idCasseteModel] ,[idCreateUser] ,[idCity]) OUTPUT INSERTED.[idCassete] VALUES (@RealContainerTypeId ,@ModelId ,@NominalId ,@CurrencyId ,@VendorId ,@PositionId ,@Volume ,@CreditOrgId ,@StatusId ,@QrCode ,@QrCodeNum ,@Model ,@Seal ,@SealDouble ,@SealIntegrity ,@SealIntegrityDouble ,@SerialNumber ,@BDepo ,@CasseteModelId ,@IdCreateUser ,@CityId)"; var newRealContainerId = await sqlConnect.QuerySingleAsync <int>(sql, new { realContainer.RealContainerTypeId, realContainer.ModelId, realContainer.NominalId, realContainer.CurrencyId, realContainer.VendorId, realContainer.PositionId, realContainer.Volume, realContainer.CreditOrgId, realContainer.StatusId, realContainer.QrCode, realContainer.QrCodeNum, realContainer.Model, realContainer.Seal, realContainer.SealDouble, realContainer.SealIntegrity, realContainer.SealIntegrityDouble, realContainer.SerialNumber, realContainer.BDepo, realContainer.CasseteModelId, realContainer.IdCreateUser, realContainer.CityId }); if (newRealContainerId == 0) { throw new Exception($"Не удалось добавить контейнеры."); } var realContainers = await GetAsync(new[] { newRealContainerId }); return(realContainers.SingleOrDefault()); } }
/// <summary> /// Создает указанное кол-во копий контейнеров в базе с разными QR /// </summary> /// <param name="realContainer">realContainer</param> /// <returns>коллекция созданных контейнеров</returns> public async Task <List <RealContainer> > InsertCopyAsync(RealContainer realContainer) { using (var sqlConnect = Connections.GetLM()) { List <string> copyCassetes = new List <string>(); realContainer.QrCode = await GetUniqueNumaratorAsync(realContainer.CreditOrgId, realContainer.CountCopyCassetes); long qrCount = long.Parse(realContainer.QrCode); for (int i = 0; i < realContainer.CountCopyCassetes; i++) { realContainer.QrCode = (qrCount++).ToString(); realContainer.UpdateQrCodeNum(); copyCassetes.Add(@"(@RealContainerTypeId , @ModelId , @NominalId , @CurrencyId , @VendorId , @PositionId , @Volume , @CreditOrgId , @StatusId , '@QrCode' , '@QrCodeNum' , @Model , @Seal , @SealDouble , @SealIntegrity , @SealIntegrityDouble , @SerialNumber , @BDepo , @CasseteModelId , @IdCreateUser , @CityId)".Replace("@QrCodeNum", realContainer.QrCodeNum.ToString()).Replace("@QrCode", realContainer.QrCode)); } if (await CheckRealContainerNotExistAsync(realContainer) && await CheckCreditOrgAsync(realContainer.CreditOrgId)) { var sql = @"INSERT INTO [BankValues].[Cassetes] ([idCasseteType] ,[idModel] ,[idNominal] ,[idCurrency] ,[idVendor] ,[idPosition] ,[Volume] ,[idCreditOrg] ,[idStatus] ,[QrCode] ,[QrCodeNum] ,[Model] ,[sSeal] ,[sSealDouble] ,[bSealIntegrity] ,[bSealIntegrityDouble] ,[sSerialNUmber] ,[bDepo] ,[idCasseteModel] ,[idCreateUser] ,[idCity]) OUTPUT INSERTED.[idCassete] VALUES "; sql = sql + string.Join(", ", copyCassetes.ToArray()); var newRealContainerId = await sqlConnect.QueryMultipleAsync(sql, new { realContainer.RealContainerTypeId, realContainer.ModelId, realContainer.NominalId, realContainer.CurrencyId, realContainer.VendorId, realContainer.PositionId, realContainer.Volume, realContainer.CreditOrgId, realContainer.StatusId, realContainer.Model, realContainer.Seal, realContainer.SealDouble, realContainer.SealIntegrity, realContainer.SealIntegrityDouble, realContainer.SerialNumber, realContainer.BDepo, realContainer.CasseteModelId, realContainer.IdCreateUser, realContainer.CityId }); var results = newRealContainerId.Read <int>().ToArray(); if (results.Length == 0) { return(null); } var realContainers = await GetAsync(results); return(realContainers); } } return(new List <RealContainer>()); }
/// <summary> /// обновляет существующий контейнер /// </summary> /// <param name="realContainer">realContainer</param> /// <param name="force">необходимость проверки на блокировку</param> /// <returns>1 удаление прошло успешно, 0 ничего не удалено</returns> public async Task <int> UpdateAsync(RealContainer realContainer, bool force) { using (var sqlConnect = Connections.GetLM()) { if (await CheckRealContainerIsBlockedAsync(realContainer.RealContainerId, sqlConnect, force)) { // изменение статуса заблокировно return(0); } realContainer.UpdateQrCodeNum(); var sql = @"UPDATE [BankValues].[Cassetes] SET [idCasseteType] = @RealContainerTypeId ,[idModel] = @ModelId ,[idNominal] = @NominalId ,[idCurrency] = @CurrencyId ,[idVendor] = @VendorId ,[idPosition] = @PositionId ,[Volume] = @Volume ,[idCreditOrg] = @CreditOrgId ,[idStatus] = @StatusId ,[QrCode] = @QrCode ,[QrCodeNum] = @QrCodeNum ,[Model] = @Model ,[sSeal] = @Seal ,[sSealDouble] = @SealDouble ,[bSealIntegrity] = @SealIntegrity ,[bSealIntegrityDouble] = @SealIntegrityDouble ,[sSerialNumber] = @SerialNumber ,[bDepo] = @BDepo ,[idCasseteModel] = @CasseteModelId ,[idCity] = @CityId WHERE idCassete = @RealContainerId"; var result = await sqlConnect.ExecuteAsync(sql, new { realContainer.RealContainerTypeId, realContainer.ModelId, realContainer.NominalId, realContainer.CurrencyId, realContainer.VendorId, realContainer.PositionId, realContainer.Volume, realContainer.CreditOrgId, realContainer.StatusId, realContainer.QrCode, realContainer.QrCodeNum, realContainer.Model, realContainer.Seal, realContainer.SealDouble, realContainer.SealIntegrity, realContainer.SealIntegrityDouble, realContainer.SerialNumber, realContainer.BDepo, realContainer.RealContainerId, realContainer.CasseteModelId, realContainer.CityId, }); return(result); } }