/// <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); } } }
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)); } } }