Пример #1
0
        /// <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());
            }
        }
Пример #2
0
        /// <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>());
        }
Пример #3
0
        /// <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);
            }
        }