public void DoLogOnEnd(ClientCreditAnalysisModel clientCreditAnalysisModel, ClassifyPersonalResultModel classifyPersonalResultModel) { var filePath = this.GetLogPathFile(clientCreditAnalysisModel, "ClientCreditAnalysisModel03End.json"); JsonHelper.SerializeToFile(filePath, clientCreditAnalysisModel, true, true); var fileclassifyPersonalResultModelPath = this.GetLogPathFile(clientCreditAnalysisModel, "ClassifyPersonalResultModel.json"); JsonHelper.SerializeToFile(fileclassifyPersonalResultModelPath, classifyPersonalResultModel, true, true); if (clientCreditAnalysisModel.ImageFile != null) { var fileName = this.GetImageFileName(clientCreditAnalysisModel, "FaceLandmarksPoint.jpg"); var filePathImage = this.GetLogPathFile(clientCreditAnalysisModel, fileName); Helper.SaveFile(filePathImage, clientCreditAnalysisModel.ImageFile); } }
/// <summary> /// Responsavel por fazer a analise dos dados do cliente. /// </summary> public async Task <bool> DoCreditAnalysisAsync(ClientCreditAnalysisModel clientCreditAnalysisModel) { /// Validamos se um modelo foi informado pelo cliente, if (clientCreditAnalysisModel.ModelType.ToInteger() == 0) { /// Em caso de negativa, informamos ao cliente que o modelo nao foi informado this.AddError("Modelo não selecionado"); return(false); } /// Preenche os dados do upload this.FillFileByte(clientCreditAnalysisModel); /// Gero um ID para o cliente com base na data e hora do envio clientCreditAnalysisModel.Id = DateTime.Now.ToFileName(); /// Faz o log dos dados de entrada para possivel analse posterior em casos de erro ou melhora do modelo this.DoLogOnBegin(clientCreditAnalysisModel); /// COnverto os dados do request do frontEnd para ToCreditAnalysisMLModel var creditAnalysisMLModel = this.ToCreditAnalysisMLModel(clientCreditAnalysisModel); /// Crio o objeto de container de resultado da analise de credito var classifyPersonalResultModel = new ClassifyPersonalResultModel() { }; /// Faco a analise de risco de credito, e pego o score classifyPersonalResultModel.CreditAnalysisScore = await this._creditAnalysisMLService.ClassifyAsync(creditAnalysisMLModel); /// Crio uma faixa de risco do score classifyPersonalResultModel.CreditAnalysisScoreRisk = AnalysisHelper.GetScoreRisk(classifyPersonalResultModel.CreditAnalysisScore); /// Faco a analise de nivel de não pagamento, caso tenho um indice alto de nao pagamento, nego o pedido do cliente if (classifyPersonalResultModel.CreditAnalysisScoreRisk == ScoreRiskEnum.High || classifyPersonalResultModel.CreditAnalysisScoreRisk == ScoreRiskEnum.VeryHigh) { /// Adiciono uma mensagem ao usuario e para o processamento this.AddError("Analise de pagamento em dia baixo."); clientCreditAnalysisModel.MessageError = this.GetFirstError(); return(false); } /// Faco uma analise da self do cliente, onde analise se existe uma pessoa classifyPersonalResultModel.ClassifyPerson = this.ClassifyPerson(clientCreditAnalysisModel); /// Faco uma analise da self do cliente, onde analise se existe conteudo explicito classifyPersonalResultModel.ClassifyExplicitSex = this.ClassifyExplicitSex(clientCreditAnalysisModel); /// Apos a analise da foto, verificamos se ela e valida if (!this.IsValid()) { /// Caso nao seja valido, retorno a primeria mensagem de erro ao usuario e para o processamento clientCreditAnalysisModel.MessageError = this.GetFirstError(); return(this.IsValid()); } /// Continuamos com a analise /// Fazermos a analise dos dados informados pelo usuario em relacao a self informada por ele classifyPersonalResultModel.VisionFaceResul = await this.ClassifyPersonalDataAsync(clientCreditAnalysisModel); /// apos a analise,salvo os dados processados por ela classifyPersonalResultModel.Status = this.IsValid(); classifyPersonalResultModel.MessageError = this.GetFirstError(); ///Caso o processamento de imagem tenha retornado dados if (classifyPersonalResultModel.VisionFaceResul.Any()) { /// Pego a idade e genero do processamento clientCreditAnalysisModel.VisionFaceAge = classifyPersonalResultModel.VisionFaceResul.FirstOrDefault().FaceAttributes.Age; clientCreditAnalysisModel.VisionFaceGender = classifyPersonalResultModel.VisionFaceResul.FirstOrDefault().FaceAttributes.Gender; } /// Faco o log do pos processamento this.DoLogOnEnd(clientCreditAnalysisModel, classifyPersonalResultModel); /// retorno o status do processamento return(this.IsValid()); }