コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="file"></param>
        /// <param name="campaignSeuDesejo"></param>
        /// <returns></returns>
        public async Task <int> ProcessBulkCopyAsync(Arquivo file, CampanhaFase campaignSeuDesejo)
        {
            await DropTempTableAsync();

            int result;

            using (var dataTable = new DataTable())
            {
                await CreateTempTableAsync(dataTable);

                _logger.LogInformation("Read file and send records.");
                result = await ProcessFileAsync(file, dataTable);
            }

            _logger.LogInformation("Merge User Status.");
            await _usuarioStatusFaseRepository.FixUserStatusAsync(campaignSeuDesejo.CampanhaId);

            await DropTempTableAsync();

            return(result);
        }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="usersStatus"></param>
        /// <param name="file"></param>
        /// <param name="campaign"></param>
        /// <param name="campanhaFaseAtual"></param>
        /// <param name="file500CpfList"></param>
        /// <returns></returns>
        private async Task ProcessUserStatus(IEnumerable <UsuarioStatusArquivo> usersStatus, Arquivo file, CampanhaFase campanhaFaseAtual, IDictionary <string, CampanhaFaseUsuarioAcesso> file500Dict)
        {
            foreach (var item in usersStatus.Where(x => x.Valido))
            {
                try
                {
                    var usuario = await _usuarioRepository.GetByCampaignAndDocumentAsync(campanhaFaseAtual.CampanhaId, item.Cpf);

                    if (usuario == null)
                    {
                        _logger.LogError($"Usuário não encontrado para campanha: CPF: [{item.Cpf}] - Campanha: [{campanhaFaseAtual.CampanhaId}]");
                        continue;
                    }

                    item.UsuarioId = usuario.UsuarioId;
                    var usuarioStatus = _mapper.Map <UsuarioStatusFase>(item);
                    usuarioStatus.ArquivoId = file.Id;

                    if (campanhaFaseAtual.IsCurrentPeriod(item.Periodo))
                    {
                        usuarioStatus.CampanhaFaseId = campanhaFaseAtual.CampanhaFaseId;
                    }
                    else
                    {
                        var campanhaFasePeriodo = await _campanhaFaseRepository.GetByPeriodAsync(item.Periodo);

                        if (campanhaFasePeriodo == null)
                        {
                            _logger.LogError($"Período não encontrado: {item.Periodo:yyyy/MM} - item: {JsonConvert.SerializeObject(item)}");
                            continue;
                        }
                        usuarioStatus.CampanhaFaseId = campanhaFasePeriodo.CampanhaFaseId;
                    }

                    var lastUserStatus = await _usuarioStatusFaseRepository.GetByCampaignFaseIdAndUserIdActiveAsync(usuarioStatus.CampanhaFaseId, usuarioStatus.UsuarioId);

                    if (lastUserStatus != null)
                    {
                        lastUserStatus.Ativo = false;
                        await _usuarioStatusFaseRepository.UpdateAsync(lastUserStatus);
                    }

                    usuarioStatus.Ativo = true;
                    usuarioStatus       = await _usuarioStatusFaseRepository.InsertAsync(usuarioStatus);


                    if (!campanhaFaseAtual.IsFase1())
                    {
                        continue;
                    }

                    var exist = await _campanhaFaseUsuarioAcessoRepository.ExistAsync(campanhaFaseAtual.CampanhaFaseId, usuarioStatus.UsuarioId);

                    if (exist)
                    {
                        continue;
                    }

                    var campaignUserFase = new CampanhaFaseUsuarioAcesso
                    {
                        UsuarioId      = usuarioStatus.UsuarioId,
                        CampanhaFaseId = campanhaFaseAtual.CampanhaFaseId,
                        Bonificado     = true
                    };

                    //campaignUserFase = await _campanhaFaseUsuarioAcessoRepository.InsertAsync(campaignUserFase);

                    file500Dict.Add(usuario.Documento, campaignUserFase);
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, ex.Message);
                }
            }
        }
コード例 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="usersStatus"></param>
        /// <param name="file"></param>
        /// <param name="campaign"></param>
        /// <param name="campaignSeuDesejo"></param>
        /// <returns></returns>
        public async Task ProcessAsync(IEnumerable <UsuarioStatusArquivo> usersStatus, Arquivo file, CampanhaFase campaignSeuDesejo)
        {
            var file500Dict = new Dictionary <string, CampanhaFaseUsuarioAcesso>();

            await ProcessUserStatus(usersStatus, file, campaignSeuDesejo, file500Dict);

            /*
             * if (file500Dict.Any())
             * {
             *  var valid = await _bonusService.BonusFaseAccess(file500Dict.Keys);
             *  if (valid)
             *  {
             *      _logger.LogInformation($"File 500 generated with success.");
             *  }
             *  else
             *  {
             *      foreach (var usuarioAcesso in file500Dict)
             *      {
             *          file500Dict[usuarioAcesso.Key].Bonificado = false;
             *          await _campanhaFaseUsuarioAcessoRepository.UpdateAsync(file500Dict[usuarioAcesso.Key]);
             *      }
             *
             *      _logger.LogInformation($"Error on generate file 500.");
             *  }
             * }
             *
             */
        }
コード例 #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="users"></param>
        /// <param name="file"></param>
        /// <param name="campaign"></param>
        /// <param name="campanhaFaseAtual"></param>
        /// <returns></returns>
        public async Task ProcessAsync(IEnumerable <UsuarioArquivo> users, Arquivo file, CampanhaFase campanhaFaseAtual)
        {
            foreach (var item in users.Where(x => x.Valido))
            {
                var usuario = await _usuarioRepository.GetByCampaignAndDocumentAsync(campanhaFaseAtual.CampanhaId, item.Documento);

                if (usuario != null)
                {
                    _logger.LogError($"Usuário já existe ou já cadastrado para campanha: CPF: [{item.Documento}] - Campanha: [{campanhaFaseAtual.CampanhaId}]");
                    continue;
                }

                if (!campanhaFaseAtual.IsFase1())
                {
                    continue;
                }

                usuario            = _mapper.Map <Usuario>(item);
                usuario.CampanhaId = campanhaFaseAtual.CampanhaId;

                usuario = await _usuarioRepository.InsertAsync(usuario);

                foreach (var complemento in item.UsuarioComplemento)
                {
                    var usuarioComplemento = _mapper.Map <UsuarioComplemento>(complemento);
                    usuarioComplemento.UsuarioId = usuario.UsuarioId;
                    usuarioComplemento           = await _usuarioComplementoRepository.InsertAsync(usuarioComplemento);
                }
            }
        }
コード例 #5
0
        private async Task <int> ProcessFileAsync(Arquivo file, DataTable dataTable, CampanhaFase campanhaFase)
        {
            var elapsed = new Stopwatch();

            elapsed.Start();
            var        iLine     = 0;
            var        batchsize = 0;
            var        rows      = 0;
            const char delimiter = ';';
            var        columns   = new Dictionary <string, int>();



            using (var bk = new SqlBulkCopy(_connectionStrings.DotzApp)
            {
                DestinationTableName = "BB_TEMP_USUARIO_CADASTRO",
                BulkCopyTimeout = 0,
                BatchSize = 100000
            })
                using (var stream = new StreamReader(file.Nome))
                {
                    while (!stream.EndOfStream)
                    {
                        var line = stream.ReadLine();



                        //var columnsTable = dataTable.Columns;


                        if (string.IsNullOrWhiteSpace(line))
                        {
                            continue;
                        }

                        var values = line.Split(delimiter);

                        /*
                         * if (columns.Count == 0)
                         * {
                         *  for (var i = 0; i < values.Length; i++)
                         *  {
                         *      var value = values[i];
                         *      if (!columns.ContainsKey(value))
                         *      {
                         *          columns.Add(value, i);
                         *      }
                         *  }
                         *  continue;
                         * }
                         *
                         * var item = new UsuarioArquivo();
                         *
                         *
                         * foreach (var column in columns)
                         * {
                         *  if (values.Length <= column.Value)
                         *      continue;
                         *
                         *  var value = values[column.Value];
                         *
                         *  if (value == null)
                         *      continue;
                         *
                         *  line = item.Set(column.Key, value, line);
                         * }
                         *
                         * if (!item.Valido)
                         * {
                         *  _logger.LogError($"Item inválido: {JsonConvert.SerializeObject(item, Formatting.Indented)}");
                         *  continue;
                         * }
                         */


                        // Com validação direta

                        iLine++;
                        if (iLine == 1)
                        {
                            continue;
                        }

                        var item = new UsuarioArquivo();

                        item.Read(values);

                        if (!item.Valido)
                        {
                            _logger.LogError($"Item inválido: {JsonConvert.SerializeObject(item, Formatting.Indented)}");
                            continue;
                        }


                        var usuario = _mapper.Map <Usuario>(item);
                        usuario.CampanhaId = campanhaFase.CampanhaId;

                        var dr = dataTable.NewRow();

                        dr["CPR_USUARIO_ID"]      = usuario.UsuarioId;
                        dr["CPR_CAMPANHA_ID"]     = usuario.CampanhaId;
                        dr["USR_USUARIO_ID"]      = (object)usuario.UsrUsuarioId ?? DBNull.Value;
                        dr["DT_OPT_IN"]           = DateTime.Now;
                        dr["NIVEL"]               = DBNull.Value;
                        dr["NIVEL_COMPARTILHADO"] = DBNull.Value;
                        dr["APELIDO"]             = DBNull.Value;
                        dr["NOME"]                   = usuario.Nome;
                        dr["DT_NASCIMENTO"]          = usuario.DataNascimento;
                        dr["DOCUMENTO"]              = usuario.Documento;
                        dr["EMAIL"]                  = DBNull.Value;
                        dr["DESC_LOGRADOURO"]        = (object)usuario.Logradouro ?? DBNull.Value;
                        dr["NUMERO_LOGRADOURO"]      = (object)usuario.NumeroLogradouro ?? DBNull.Value;
                        dr["USR_ESTADO_UF"]          = (object)usuario.Estado ?? DBNull.Value;
                        dr["NUMERO_CEP"]             = (object)usuario.Cep ?? DBNull.Value;
                        dr["NOME_CIDADE"]            = (object)usuario.Cidade ?? DBNull.Value;
                        dr["NOME_BAIRRO"]            = (object)usuario.Bairro ?? DBNull.Value;
                        dr["DESC_COMPLEMENTO"]       = (object)usuario.Complemento ?? DBNull.Value;
                        dr["INFORMACOES_ADICIONAIS"] = (object)usuario.InformacoesAdicionais ?? DBNull.Value;
                        dr["NUMERO_DDD1"]            = (object)usuario.DddResidencial ?? DBNull.Value;
                        dr["NUMERO_TELEFONE1"]       = (object)usuario.TelefoneResidencial ?? DBNull.Value;
                        dr["NUMERO_DDD2"]            = (object)usuario.DddCelular ?? DBNull.Value;
                        dr["NUMERO_TELEFONE2"]       = (object)usuario.TelefoneCelular ?? DBNull.Value;
                        dr["NUMERO_DDD3"]            = (object)usuario.DddComercial ?? DBNull.Value;
                        dr["NUMERO_TELEFONE3"]       = (object)usuario.TelefoneComercial ?? DBNull.Value;
                        dr["INDICADOR_SEXO"]         = usuario.Sexo;
                        dr["DT_ULTIMA_ATUALIZACAO"]  = DateTime.Now;
                        dr["OBSERVACAO"]             = DBNull.Value;
                        dr["CPR_USUARIO_ORIGEM_ID"]  = DBNull.Value;
                        dr["CARTEIRA"]               = (object)usuario.Carteira ?? DBNull.Value;
                        dr["DT_OPT_OUT"]             = DateTime.Now;

                        foreach (var complemento in item.UsuarioComplemento)
                        {
                            dr[complemento.Nome] = (object)complemento.Valor ?? DBNull.Value;
                        }



                        batchsize += 1;
                        rows      += 1;
                        dataTable.Rows.Add(dr);
                        if (batchsize != 100000)
                        {
                            continue;
                        }
                        await bk.WriteToServerAsync(dataTable);

                        dataTable.Rows.Clear();
                        batchsize = 0;
                    }

                    bk.WriteToServer(dataTable);
                    dataTable.Rows.Clear();
                }

            elapsed.Stop();

            _logger.LogInformation($"{rows} records imported in {elapsed.Elapsed:hh\\:mm\\:ss} seconds.");


            return(rows);
        }
コード例 #6
0
        public async Task ProcessAsync(IEnumerable <ProdutoArquivo> produtosArquivo, Arquivo file, CampanhaFase campanhaFaseAtual)
        {
            foreach (var item in produtosArquivo.Where(x => x.Valido))
            {
                try
                {
                    var produto = await _produtoRepository.FindAsync(item.ProdutoId);

                    if (produto == null)
                    {
                        _logger.LogError($"Produto não encontrado: {item.ProdutoId}");
                        continue;
                    }

                    if (!string.IsNullOrEmpty(item.Voltagem))
                    {
                        var volt = await _produtoRepository.IsVoltAsync(item.ProdutoId);

                        if (!volt)
                        {
                            _logger.LogError($"Produto elétrico inválido. {item.ProdutoId}");
                            continue;
                        }
                    }

                    var campanhaProdutoFase = _mapper.Map <CampanhaProdutoFase>(item);

                    campanhaProdutoFase.ArquivoId = file.Id;

                    if (campanhaFaseAtual.IsCurrentPeriod(item.Periodo))
                    {
                        campanhaProdutoFase.CampanhaFaseId = campanhaFaseAtual.CampanhaFaseId;
                    }
                    else
                    {
                        var camapnhaFasePeriodo = await _campanhaFaseRepository.GetByPeriodAsync(item.Periodo);

                        if (camapnhaFasePeriodo == null)
                        {
                            _logger.LogError($"Período informado não encontrado: {item.Periodo:yyyy/MM} - item: {JsonConvert.SerializeObject(item)}");
                            continue;
                        }

                        campanhaProdutoFase.CampanhaFaseId = camapnhaFasePeriodo.CampanhaFaseId;
                    }

                    var campanhaProduto = await _campanhaProdutoRepository.FindByCampaignAndProductIdAsync(campanhaFaseAtual.CampanhaId, item.ProdutoId);

                    if (campanhaProduto == null)
                    {
                        campanhaProduto = new CampanhaProduto
                        {
                            CampanhaId   = campanhaFaseAtual.CampanhaId,
                            ProdutoId    = item.ProdutoId,
                            LojaId       = item.LojaId,
                            MecanicaId   = item.Pid,
                            PremioPadrao = false
                        };

                        campanhaProduto = await _campanhaProdutoRepository.InsertAsync(campanhaProduto);
                    }
                    else
                    {
                        if (campanhaProduto.MadeChanges(item))
                        {
                            await _campanhaProdutoRepository.UpdateAsync(campanhaProduto);
                        }
                    }

                    campanhaProdutoFase.CampanhaProdutoId = campanhaProduto.CampanhaProdutoId;

                    var checkExist = await _campanhaProdutoFaseRepository.FindByKeysAsync(campanhaProduto.CampanhaProdutoId,
                                                                                          campanhaProdutoFase.CampanhaFaseId, campanhaProdutoFase.FaixaMeta, campanhaProdutoFase.Carteira, campanhaProdutoFase.Catalogo);

                    if (checkExist != null)
                    {
                        checkExist.SetValue(campanhaProdutoFase);
                        await _campanhaProdutoFaseRepository.UpdateAsync(checkExist);

                        _logger.LogInformation("Produto atualizado com sucesso.");
                    }
                    else
                    {
                        campanhaProdutoFase = await _campanhaProdutoFaseRepository.InsertAsync(campanhaProdutoFase);

                        _logger.LogInformation("Produto inserido com sucesso.");
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, ex.Message);
                    _logger.LogError(JsonConvert.SerializeObject(item, Formatting.Indented));
                }
            }
        }