示例#1
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);
                }
            }
        }
示例#2
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));
                }
            }
        }