public async Task <IHttpActionResult> AddFMEAProjectTree(FTATreeRequestViewModel tree)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var docs = db.FMEAProjects.Include("Project").Where(item => item.ProjectId == tree.ProjectId).FirstOrDefault();

            if (docs == null)
            {
                return(NotFound());
            }

            if (ProjectHelper.HasUpdateAccess(docs.Project) == false)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "No Access"));
            }

            ShqUser shqUser = await db.ShqUsers.Where(item => item.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).Include("IdentityUser").FirstOrDefaultAsync();

            var tr = docs.FMEATrees.Where(item => item.Id == tree.Id).FirstOrDefault();

            if (tr == null)
            {
                FMEATree FMEATree = new FMEATree()
                {
                    Id = tree.Id, FMEAProjectId = docs.Id, FMEAProject = docs, Content = tree.Content, CreatedById = shqUser.IdentityUserId, CreatedTime = DateTime.Now, LastModifiedById = shqUser.IdentityUserId, LastModfiedTime = DateTime.Now
                };
                docs.FMEATrees.Add(FMEATree);
                await db.SaveChangesAsync();

                return(Ok(new FTATreeRequestViewModel()
                {
                    Id = FMEATree.Id, Content = FMEATree.Content, ProjectId = docs.ProjectId
                }));
            }
            else
            {
                return(Conflict());
            }
        }
        public async Task <IHttpActionResult> AddFTAProjectTree(FTATreeRequestViewModel tree)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var docs = db.FTAProjects.Include("Project").Where(item => item.ProjectId == tree.ProjectId).FirstOrDefault();

            if (docs == null)
            {
                return(NotFound());
            }

            if (ProjectHelper.HasUpdateAccess(docs.Project) == false)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "No Access"));
            }

            ShqUser shqUser = await db.ShqUsers.Where(item => item.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).Include("IdentityUser").FirstOrDefaultAsync();

            var tr = docs.FTATrees.Where(item => item.Id == tree.Id).FirstOrDefault();

            if (tr == null)
            {
                FTATree ftaTree = new FTATree()
                {
                    Id = tree.Id, FTAProjectId = docs.Id, FTAProject = docs, AnalysisStatus = 0, Content = tree.Content, CreatedById = shqUser.IdentityUserId, CreatedTime = DateTime.Now, LastModifiedById = shqUser.IdentityUserId, LastModfiedTime = DateTime.Now
                };
                docs.FTATrees.Add(ftaTree);
                await db.SaveChangesAsync();

                (new AuditsController()).AddAuditEntry("api/FTAProjects/AddTree", JsonConvert.SerializeObject(new ProjectViewModel(docs.Project, db)));
                return(Ok(new FTATreeViewModel(ftaTree, db)));
            }
            else
            {
                return(Conflict());
            }
        }
        public async Task <IHttpActionResult> AddFMEAProjectTree(FTATreeRequestViewModel tree)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var docs = db.FMEAProjects.Include("Project").Where(item => item.ProjectId == tree.ProjectId).FirstOrDefault();

            if (docs == null)
            {
                return(NotFound());
            }

            if (ProjectHelper.HasUpdateAccess(docs.Project) == false)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "No Access"));
            }

            ShqUser shqUser = await db.ShqUsers.Where(item => item.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).Include("IdentityUser").FirstOrDefaultAsync();

            var tr = docs.FMEATrees.Where(item => item.Id == tree.Id).FirstOrDefault();

            if (tr == null)
            {
                FMEATree FMEATree = new FMEATree()
                {
                    Id = tree.Id, FMEAProjectId = docs.Id, FMEAProject = docs, Content = tree.Content, CreatedById = shqUser.IdentityUserId, CreatedTime = DateTime.Now, LastModifiedById = shqUser.IdentityUserId, LastModfiedTime = DateTime.Now
                };
                docs.FMEATrees.Add(FMEATree);
                await db.SaveChangesAsync();

                dynamic jsonSource = JObject.Parse(FMEATree.Content);
                foreach (var structureNode in jsonSource.structureNodes)
                {
                    foreach (var function in structureNode.FunctionSet)
                    {
                        foreach (var failure in function.FailureSet)
                        {
                            foreach (var property in failure.properties)
                            {
                                string key   = property.key;
                                string value = property.value;
                                if (property.previousValue != value)
                                {
                                    property.previousValue = value;
                                    db.ShqKeywordSets.Add(new ShqKeywordSet {
                                        Keyword = string.Format("{0}^{1}^{2}^{3}", structureNode.name, function.name, failure.name, key), KeywordValue = value
                                    });
                                }
                            }
                        }
                    }
                }

                FMEATree.Content = JsonConvert.SerializeObject(jsonSource);

                await db.SaveChangesAsync();

                (new AuditsController()).AddAuditEntry("api/FMEAProjects/AddTree", JsonConvert.SerializeObject(new ProjectViewModel(docs.Project, db)));
                return(Ok(new FTATreeRequestViewModel()
                {
                    Id = FMEATree.Id, Content = FMEATree.Content, ProjectId = docs.ProjectId
                }));
            }
            else
            {
                return(Conflict());
            }
        }
        public async Task <IHttpActionResult> AnalyzeFTAProjectTree(FTATreeRequestViewModel tree)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var docs = db.FTAProjects.Include("Project").Where(item => item.ProjectId == tree.ProjectId).FirstOrDefault();

            if (docs == null)
            {
                return(NotFound());
            }

            if (ProjectHelper.HasUpdateAccess(docs.Project) == false)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "No Access"));
            }

            ShqUser shqUser = await db.ShqUsers.Where(item => item.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).Include("IdentityUser").FirstOrDefaultAsync();

            var tr = docs.FTATrees.Where(item => item.Id == tree.Id).FirstOrDefault();

            if (tr == null)
            {
                FTATree ftaTree = new FTATree()
                {
                    Id = tree.Id, FTAProjectId = docs.Id, AnalysisStatus = 1, FTAProject = docs, Content = tree.Content, CreatedById = shqUser.IdentityUserId, CreatedTime = DateTime.Now, LastModifiedById = shqUser.IdentityUserId, LastModfiedTime = DateTime.Now
                };
                docs.FTATrees.Add(ftaTree);
                db.SaveChanges();

                var     jsonFTATree = JsonConvert.DeserializeObject <JsonFTATree>(tree.Content);
                dynamic jsonSource  = JObject.Parse(tree.Content);

                Analyze(docs, jsonFTATree);
                var result = new FTATreeViewModel(ftaTree, db);

                string exeString = RunPythonAnalysis(docs.Id);
                if (exeString == null)
                {
                    result.AnalysisStatus = "Ok";

                    foreach (var jsNode in jsonSource.nodes)
                    {
                        string jsNodeId = jsNode.id;

                        using (var con = new MySqlConnection(ConfigurationManager.ConnectionStrings["ShqContext"].ConnectionString))
                        {
                            con.Open();
                            var cmd = con.CreateCommand();


                            //var node = db.FTANodes.FirstOrDefault(item => item.FTAProjectId == docs.Id && item.EventId == jsNodeId);
                            //if (node != null)
                            //{
                            //    jsNode.smallFailureRateQ = node.SmallFailureRateQ;
                            //}

                            cmd.CommandText = string.Format("select SmallFailureRateQ,Color from shqdb.ftanodes where FTAProjectId = '{0}' and EventId = '{1}' limit 1;", docs.Id, jsNodeId);
                            using (var rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.CloseConnection))
                            {
                                while (rdr.Read())
                                {
                                    jsNode.smallFailureRateQ = rdr.GetDouble(0);
                                    jsNode.color             = rdr.GetString(1);
                                }
                            }
                        }
                    }

                    foreach (var jsProperty in jsonSource.attributes)
                    {
                        string jName = jsProperty.name;
                        //var node = db.FTANodeProperties.FirstOrDefault(item => item.FTAProjectId == docs.Id && item.Name == jName);
                        //if (node != null)
                        //{
                        //    jsProperty.failureRateQ = node.FailureRateQ;
                        //    jsProperty.invalidRate = node.InvalidRate;
                        //    jsProperty.failureTime = node.FailureTime;
                        //    jsProperty.dCrf = node.DCrf;
                        //    jsProperty.dClf = node.DClf;
                        //}

                        using (var con = new MySqlConnection(ConfigurationManager.ConnectionStrings["ShqContext"].ConnectionString))
                        {
                            con.Open();
                            var cmd = con.CreateCommand();
                            cmd.CommandText = string.Format("select SmallFailureRateQ,failureRateQ,invalidRate,failureTime,dCrf,dClf from ftanodes as nodes inner join ftanodeproperties as ps on nodes.NodeName = ps.Name where ps.FTAProjectId = '{0}' and ps.Name = '{1}' limit 1;", docs.Id, jName);
                            using (var rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.CloseConnection))
                            {
                                while (rdr.Read())
                                {
                                    jsProperty.smallFailureRateQ = rdr.GetDouble(0);
                                    jsProperty.failureRateQ      = rdr.GetDouble(1);
                                    jsProperty.invalidRate       = rdr.GetDouble(2);
                                    jsProperty.failureTime       = rdr.GetDouble(3);
                                    jsProperty.dCrf = rdr.GetDouble(4);
                                    jsProperty.dClf = rdr.GetDouble(5);
                                }
                            }
                        }
                    }

                    result.Content  = JsonConvert.SerializeObject(jsonSource);
                    ftaTree.Content = result.Content;
                    db.SaveChanges();

                    //// remove C:\Users\phimath\Source\Repos\sq_analysis\2.service\packages\MySqlConnector.0.47.1\lib\net45\MySqlConnector.dll
                    //using (var con = new MySqlConnection(ConfigurationManager.ConnectionStrings["ShqContext"].ConnectionString))
                    //{
                    //    con.Open();
                    //    var cmd = con.CreateCommand();
                    //    cmd.CommandText = "SELECT ftanodes.eventid as nodeid,ftanodeeventreportsreview.FTAEventTypeId,ftanodeeventreportsreview.FTAFailureTypeId, ftanodeeventreportsreview.EventValue,ftanodeeventreportsreview.EventValueType  FROM ftanodeeventreportsreview inner join ftanodes	on ftanodes.id = ftanodeeventreportsreview.FTANodeId";
                    //    using (var rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.CloseConnection))
                    //    {
                    //        result.JsonNodeEvents = new List<JsonNodeEvent>();

                    //        while (rdr.Read())
                    //        {
                    //            JsonNodeEvent e = new JsonNodeEvent();
                    //            e.NodeId = rdr.GetString(0);
                    //            e.EventId = rdr.GetInt32(1);
                    //            e.FalureId = rdr.GetInt32(2);
                    //            e.EventValue = rdr.GetDouble(3);
                    //            e.EventValueType = rdr.GetInt32(4);
                    //            result.JsonNodeEvents.Add(e);
                    //        }
                    //    }
                    //}

                    //using (var con = new MySqlConnection(ConfigurationManager.ConnectionStrings["ShqContext"].ConnectionString))
                    //{
                    //    con.Open();
                    //    var cmd = con.CreateCommand();
                    //    cmd.CommandText = string.Format("SELECT FTAEventTypeId,FTAFailureTypeId,FailureRateQ,InvalidRate FROM shqdb.ftaeventreports where ftaprojectid = '{0}'", docs.Id);
                    //    using (var rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.CloseConnection))
                    //    {
                    //        result.JsonTreeEvents = new List<JsonTreeEvent>();

                    //        while (rdr.Read())
                    //        {
                    //            JsonTreeEvent e = new JsonTreeEvent();
                    //            e.EventId = rdr.GetInt32(0);
                    //            e.FalureId = rdr.GetInt32(1);
                    //            e.FailureRateQ = rdr.GetDouble(2);
                    //            e.InvalidRate = rdr.GetInt32(3);
                    //            result.JsonTreeEvents.Add(e);
                    //        }
                    //    }
                    //}
                }
                else
                {
                    result.AnalysisStatus = "Error:" + exeString;
                }

                (new AuditsController()).AddAuditEntry("api/FTAProjects/AnalyzeTree", JsonConvert.SerializeObject(new ProjectViewModel(docs.Project, db)));
                return(Ok(result));
            }
            else
            {
                return(Conflict());
            }
        }