using Competition.Common.Util; using CompetitionAPI.api.unity; using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Authorization; using CompetitionAPI.Util; namespace CompetitionAPI.Controllers.unity { [Route("unity/[controller]")] [ApiController] public class AddUserFaultRecordController : Controller { private readonly IWebHostEnvironment _webHostEnvironment; Competition.Mysql.BLL.pow_user_fault_record user_fault_record_bll = new Competition.Mysql.BLL.pow_user_fault_record(); Competition.Mysql.BLL.pow_user_fault user_fault_bll = new Competition.Mysql.BLL.pow_user_fault(); Competition.Mysql.BLL.pow_user_exam user_exam_bll = new Competition.Mysql.BLL.pow_user_exam(); Competition.Mysql.BLL.pow_achievement achievement_bll = new Competition.Mysql.BLL.pow_achievement(); Competition.Mysql.BLL.pow_achievement_details achievement_details_bll = new Competition.Mysql.BLL.pow_achievement_details(); Competition.Mysql.BLL.pow_config config_bll = new Competition.Mysql.BLL.pow_config(); public AddUserFaultRecordController(IWebHostEnvironment webHostEnvironment) { _webHostEnvironment = webHostEnvironment; } /// /// 保存考试故障记录接口 /// /// /// [Authorize] [HttpPost] [APIFilter] public JsonResult Index([FromBody] AddUserFaultRecordRequest req) { try { if (req != null) { var test = JsonConvert.SerializeObject(req); var config_model = config_bll.GetModelList("").FirstOrDefault(); if (config_model == null) { return Json(Tool.GetJsonWithCode(APICode.Fail, "配置信息不存在")); } var user_exam_model = user_exam_bll.GetModelList(" ExamId='" + req.ExamId + "' and UserId='" + req.UserId + "' ").FirstOrDefault(); if (user_exam_model != null) { if (user_exam_model.Status == "已结束") { return Json(Tool.GetJsonWithCode(APICode.Fail, "考生考试已结束")); } var achievement_model = achievement_bll.GetModelList(" ExamId='" + req.ExamId + "' and UserId='" + req.UserId + "' ").FirstOrDefault(); if (achievement_model == null) { return Json(Tool.GetJsonWithCode(APICode.Fail, "考生成绩数据不存在")); } var user_fault_list = user_fault_bll.GetModelList(" ExamId='" + req.ExamId + "' and UserId='" + req.UserId + "' "); var select_total_score = user_fault_list.Where(a => a.ChoiceQuestion != "0").Sum(a => decimal.Parse(a.SelectSocre)); var fault_total_score = user_fault_list.Where(a => a.ChoiceQuestion != "0").Sum(a => decimal.Parse(a.FaultScore)); var handler_score = user_fault_list.Where(a => a.ChoiceQuestion != "0").Sum(a => decimal.Parse(a.HandlerScore)); var total = select_total_score + fault_total_score + handler_score;//总分 var record_list = new List(); var details_list = new List(); var TotalDefectScore = decimal.Parse(config_model.TotalDefectScore); decimal total_score = 0; //组织树 var tree_list = ReadTree(); foreach (var item in req.Data) { var new_fault_model = new Competition.Mysql.Model.pow_user_fault_record(); if (!string.IsNullOrEmpty(item.FaultId)) { var fault_model = user_fault_list.Where(a => a.FaultId == item.FaultId && a.RootDeviceId == item.RootDeviceId && a.DeviceId == item.DeviceId).FirstOrDefault(); if (fault_model.FaultDesc == "导线未绑扎、扎线断股" || fault_model.FaultDesc == "瓷瓶歪斜松动" || fault_model.FaultDesc == "瓷瓶损坏") { item.Value = ""; } else if (fault_model.FaultDesc == "电缆接头发热") { item.Value = item.Value + "发热"; } if (item.Value.Contains("东侧") || item.Value.Contains("北侧") || item.Value.Contains("西侧")) { item.Value = item.Value + "拉线"; } var root_device_name = ""; var device_name = ""; if (fault_model != null) { var first_list = tree_list.Where(a => a.TowerId == item.RootDeviceId).FirstOrDefault(); if (first_list != null) { root_device_name = first_list.Tower; if (first_list.TowerId != item.DeviceId) { if (first_list.Data != null) { var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == item.DeviceId).FirstOrDefault(); if (two_list != null) { device_name = two_list.PowerDistributionBox; } else { var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == item.DeviceId).FirstOrDefault(); if (three_list != null) { device_name = three_list.Line; } } } } } var is_find_score = "0"; var is_classification_score = "0"; if (item.IsCorrect == "1") { if (fault_model.ChoiceQuestion != "0") { is_find_score = "1"; decimal select_score = 0; decimal fault_score = 0; if (fault_model.FaultDesc == "配电箱箱门未加锁" || fault_model.FaultDesc == "柜门与箱体没有链接线" || fault_model.FaultDesc == "配电箱孔洞未封堵") { var value_list = new List(); if (fault_model.FaultDesc != "配电箱孔洞未封堵") { value_list = fault_model.Position.Split('|').ToList(); } else { value_list = fault_model.MultipleQuestion.Split('|').ToList(); } foreach (var position_item in value_list) { var select_score_model = System.Decimal.Round((decimal.Parse(fault_model.SelectSocre) / total) * TotalDefectScore, 3); decimal otherQuestionScore = 0; var firstQuestionScore = Tool.TransFormation(select_score_model, value_list.Count, out otherQuestionScore); var user_Index = value_list.IndexOf(position_item); if (user_Index == 0) { select_score = firstQuestionScore; } else { select_score = otherQuestionScore; } var item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷查找分值"; var achievement_details_model = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and ItemName='" + item_name + "' ").FirstOrDefault(); if (achievement_details_model == null) { var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault(); if (new_details_model == null) { var details_model = new Competition.Mysql.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement_model.AchievementId; details_model.ItemName = item_name; details_model.ItemizedScore = select_score; details_model.Type = "故障记录选择"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = select_score; details_model.FaultDesc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item; details_model.ScoreType = "缺陷查找分值"; details_list.Add(details_model); total_score = total_score + select_score; } } var fault_score_model = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * TotalDefectScore, 3); decimal otherQuestionScore2 = 0; var firstQuestionScore2 = Tool.TransFormation(fault_score_model, value_list.Count, out otherQuestionScore2); if (user_Index == 0) { fault_score = firstQuestionScore2; } else { fault_score = otherQuestionScore2; } if (item.DefectLevel == fault_model.DefectLevel) { var item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷分类分值"; var achievement_details_model2 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and ItemName='" + item_name2 + "' ").FirstOrDefault(); if (achievement_details_model2 == null) { var new_details_model = details_list.Where(a => a.ItemName == item_name2).FirstOrDefault(); if (new_details_model == null) { var details_model2 = new Competition.Mysql.Model.pow_achievement_details(); details_model2.DetailsId = Guid.NewGuid().ToString("N"); details_model2.AchievementId = achievement_model.AchievementId; details_model2.ItemName = item_name2; details_model2.ItemizedScore = fault_score; details_model2.Type = "故障记录选择"; details_model2.CreateTime = DateTime.Now; details_model2.TotalScore = fault_score; details_model2.FaultDesc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item; details_model2.ScoreType = "缺陷分类分值"; details_list.Add(details_model2); total_score = total_score + fault_score; is_classification_score = "1"; } } } else { var item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷分类分值"; var achievement_details_model2 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and ItemName='" + item_name2 + "' ").FirstOrDefault(); if (achievement_details_model2 == null) { var new_details_model = details_list.Where(a => a.ItemName == item_name2).FirstOrDefault(); if (new_details_model == null) { var details_model2 = new Competition.Mysql.Model.pow_achievement_details(); details_model2.DetailsId = Guid.NewGuid().ToString("N"); details_model2.AchievementId = achievement_model.AchievementId; details_model2.ItemName = item_name2; details_model2.ItemizedScore = 0; details_model2.Type = "故障记录选择"; details_model2.CreateTime = DateTime.Now; details_model2.TotalScore = fault_score; details_model2.FaultDesc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item; details_model2.ScoreType = "缺陷分类分值"; details_list.Add(details_model2); } } } } } else { var value_list = new List(); if (fault_model.FaultDesc == "配电箱孔洞未封堵" || fault_model.FaultDesc == "熔断器下桩头发热" || fault_model.FaultDesc == "熔芯不匹配" || fault_model.FaultDesc == "熔芯损坏" || fault_model.FaultDesc == "电缆头套管相色缺失" || fault_model.FaultDesc == "电缆接头发热" || fault_model.FaultDesc == "电缆绝缘层老化开裂" || fault_model.FaultDesc == "拉线无警示套管" || fault_model.FaultDesc == "拉线松动" || fault_model.FaultDesc == "拉线断股锈蚀" || fault_model.FaultDesc == "拉线UT线夹螺帽不齐全" || fault_model.FaultDesc == "接头发热" || fault_model.FaultDesc == "线路弧垂不一致") { if (!string.IsNullOrEmpty(fault_model.MultipleQuestion)) { if (fault_model.FaultDesc != "相色标识错误") { value_list = fault_model.MultipleQuestion.Split('|').ToList(); } } } if (value_list.Count > 0) { var select_score_model = System.Decimal.Round((decimal.Parse(fault_model.SelectSocre) / total) * TotalDefectScore, 3); decimal otherQuestionScore = 0; var firstQuestionScore = Tool.TransFormation(select_score_model, value_list.Count, out otherQuestionScore); var fault_score_model = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * TotalDefectScore, 3); decimal otherQuestionScore2 = 0; var firstQuestionScore2 = Tool.TransFormation(fault_score_model, value_list.Count, out otherQuestionScore2); var user_Index = value_list.IndexOf(item.Value); if (user_Index == 0) { select_score = firstQuestionScore; fault_score = firstQuestionScore2; } else { select_score = otherQuestionScore; fault_score = otherQuestionScore2; } } else { select_score = System.Decimal.Round((decimal.Parse(fault_model.SelectSocre) / total) * TotalDefectScore, 3); fault_score = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * TotalDefectScore, 3); } var item_name = ""; var desc = ""; if (!string.IsNullOrEmpty(item.Value)) { item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value + "-" + "缺陷查找分值"; desc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value; } else { item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + "缺陷查找分值"; desc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc; } var achievement_details_model = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and ItemName='" + item_name + "' ").FirstOrDefault(); if (achievement_details_model == null) { var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault(); if (new_details_model == null) { var details_model = new Competition.Mysql.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement_model.AchievementId; details_model.ItemName = item_name; details_model.FaultDesc = desc; details_model.ItemizedScore = select_score; details_model.Type = "故障记录选择"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = select_score; details_model.ScoreType = "缺陷查找分值"; details_list.Add(details_model); total_score = total_score + select_score; } } if (item.DefectLevel == fault_model.DefectLevel) { var item_name2 = ""; var desc2 = ""; if (!string.IsNullOrEmpty(item.Value)) { item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value + "-" + "缺陷分类分值"; desc2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value; } else { item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + "缺陷分类分值"; desc2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc; } var achievement_details_model2 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and ItemName='" + item_name2 + "' ").FirstOrDefault(); if (achievement_details_model2 == null) { var new_details_model = details_list.Where(a => a.ItemName == item_name2).FirstOrDefault(); if (new_details_model == null) { var details_model2 = new Competition.Mysql.Model.pow_achievement_details(); details_model2.DetailsId = Guid.NewGuid().ToString("N"); details_model2.AchievementId = achievement_model.AchievementId; details_model2.ItemName = item_name2; details_model2.FaultDesc = desc2; details_model2.ItemizedScore = fault_score; details_model2.Type = "故障记录选择"; details_model2.CreateTime = DateTime.Now; details_model2.TotalScore = fault_score; details_model2.ScoreType = "缺陷分类分值"; details_list.Add(details_model2); total_score = total_score + fault_score; is_classification_score = "1"; } } } else { var item_name2 = ""; var desc2 = ""; if (!string.IsNullOrEmpty(item.Value)) { item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value + "-" + "缺陷分类分值"; desc2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value; } else { item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + "缺陷分类分值"; desc2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc; } var achievement_details_model2 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and ItemName='" + item_name2 + "' ").FirstOrDefault(); if (achievement_details_model2 == null) { var new_details_model = details_list.Where(a => a.ItemName == item_name2).FirstOrDefault(); if (new_details_model == null) { var details_model2 = new Competition.Mysql.Model.pow_achievement_details(); details_model2.DetailsId = Guid.NewGuid().ToString("N"); details_model2.AchievementId = achievement_model.AchievementId; details_model2.ItemName = item_name2; details_model2.FaultDesc = desc2; details_model2.ItemizedScore = 0; details_model2.Type = "故障记录选择"; details_model2.CreateTime = DateTime.Now; details_model2.TotalScore = fault_score; details_model2.ScoreType = "缺陷分类分值"; details_list.Add(details_model2); } } } } } } new_fault_model.UserFaultRecordId = Guid.NewGuid().ToString("N"); new_fault_model.UserId = req.UserId; new_fault_model.ExamId = req.ExamId; new_fault_model.FaultId = item.FaultId; new_fault_model.RootDeviceId = item.RootDeviceId; new_fault_model.DeviceId = item.DeviceId; new_fault_model.Type = item.Type; new_fault_model.FaultType = item.FaultType; new_fault_model.FaultDesc = fault_model.FaultDesc; new_fault_model.DefectLevel = fault_model.DefectLevel; new_fault_model.SpecificSimulation = fault_model.SpecificSimulation; new_fault_model.FaultPosition = fault_model.FaultPosition; new_fault_model.SelectSocre = fault_model.SelectSocre; new_fault_model.FaultScore = fault_model.FaultScore; new_fault_model.HandlerScore = fault_model.HandlerScore; new_fault_model.DegreesSerialNumber = fault_model.DegreesSerialNumber; new_fault_model.DegreesValue = fault_model.DegreesValue; new_fault_model.ChoiceQuestion = fault_model.ChoiceQuestion; new_fault_model.MultipleQuestion = fault_model.MultipleQuestion; new_fault_model.DifficultyLevel = fault_model.DifficultyLevel; new_fault_model.PositionValue = fault_model.PositionValue; new_fault_model.Position = fault_model.Position; new_fault_model.PorcelainBottleType = fault_model.PorcelainBottleType; new_fault_model.Direction = fault_model.Direction; new_fault_model.Topic = fault_model.Topic; new_fault_model.OptionA = fault_model.OptionA; new_fault_model.OptionB = fault_model.OptionB; new_fault_model.OptionC = fault_model.OptionC; new_fault_model.OptionD = fault_model.OptionD; new_fault_model.OptionE = fault_model.OptionE; new_fault_model.RightKey = fault_model.RightKey; new_fault_model.IsCorrect = item.IsCorrect; new_fault_model.Answer = ""; new_fault_model.Content = item.Content; new_fault_model.Value = item.Value; new_fault_model.IsFindScore = is_find_score; new_fault_model.IsClassificationScore = is_classification_score; new_fault_model.IsProcessingScore = "0"; new_fault_model.CreateTime = fault_model.CreateTime; new_fault_model.Cache_Key = item.Cache_Key; new_fault_model.Cache_Content = item.Cache_Content; new_fault_model.Cache_Value = item.Cache_Value; new_fault_model.R1 = item.R1; new_fault_model.R2 = item.R2; new_fault_model.R3 = item.R3; record_list.Add(new_fault_model); } } else { new_fault_model.UserFaultRecordId = Guid.NewGuid().ToString("N"); new_fault_model.UserId = req.UserId; new_fault_model.ExamId = req.ExamId; new_fault_model.IsCorrect = item.IsCorrect; new_fault_model.Content = item.Content; new_fault_model.IsFindScore = "0"; new_fault_model.IsClassificationScore = "0"; new_fault_model.IsProcessingScore = "0"; new_fault_model.CreateTime = DateTime.Now; new_fault_model.Cache_Key = item.Cache_Key; new_fault_model.Cache_Content = item.Cache_Content; new_fault_model.Cache_Value = item.Cache_Value; new_fault_model.R1 = item.R1; new_fault_model.R2 = item.R2; new_fault_model.R3 = item.R3; record_list.Add(new_fault_model); } } var fault_list = req.Data.Select(a => a.FaultId).ToList(); //本地数据库正确数据里有,用户选择数据里没有,少选 var correct_data = user_fault_list.Where(s => s.ChoiceQuestion != "0" && !fault_list.Contains(s.FaultId)).ToList(); foreach (var item in correct_data) { var root_device_name = ""; var device_name = ""; var first_list = tree_list.Where(a => a.TowerId == item.RootDeviceId).FirstOrDefault(); if (first_list != null) { root_device_name = first_list.Tower; if (first_list.TowerId != item.DeviceId) { if (first_list.Data != null) { var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == item.DeviceId).FirstOrDefault(); if (two_list != null) { device_name = two_list.PowerDistributionBox; } else { var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == item.DeviceId).FirstOrDefault(); if (three_list != null) { device_name = three_list.Line; } } } } } decimal select_score = 0; decimal fault_score = 0; var value_list = new List(); if (item.FaultDesc == "配电箱箱门未加锁" || item.FaultDesc == "柜门与箱体没有链接线") { value_list = item.Position.Split('|').ToList(); } else { if (item.FaultDesc == "配电箱孔洞未封堵" || item.FaultDesc == "熔断器下桩头发热" || item.FaultDesc == "熔芯不匹配" || item.FaultDesc == "熔芯损坏" || item.FaultDesc == "电缆头套管相色缺失" || item.FaultDesc == "电缆接头发热" || item.FaultDesc == "电缆绝缘层老化开裂" || item.FaultDesc == "拉线无警示套管" || item.FaultDesc == "拉线松动" || item.FaultDesc == "拉线断股锈蚀" || item.FaultDesc == "拉线UT线夹螺帽不齐全" || item.FaultDesc == "接头发热" || item.FaultDesc == "线路弧垂不一致") { if (!string.IsNullOrEmpty(item.MultipleQuestion)) { if (item.FaultDesc != "相色标识错误") { value_list = item.MultipleQuestion.Split('|').ToList(); } } } } if (value_list.Count == 0) { select_score = System.Decimal.Round((decimal.Parse(item.SelectSocre) / total) * TotalDefectScore, 3); var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + "缺陷查找分值"; var achievement_details_model = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and ItemName='" + item_name + "' ").FirstOrDefault(); if (achievement_details_model == null) { var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault(); if (new_details_model == null) { var details_model = new Competition.Mysql.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement_model.AchievementId; details_model.ItemName = item_name; details_model.ItemizedScore = 0; details_model.Type = "故障记录选择"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = select_score; details_model.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc; details_model.ScoreType = "缺陷查找分值"; details_list.Add(details_model); } } fault_score = System.Decimal.Round((decimal.Parse(item.FaultScore) / total) * TotalDefectScore, 3); var item_name2 = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + "缺陷分类分值"; var achievement_details_model2 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and ItemName='" + item_name2 + "' ").FirstOrDefault(); if (achievement_details_model2 == null) { var new_details_model = details_list.Where(a => a.ItemName == item_name2).FirstOrDefault(); if (new_details_model == null) { var details_model2 = new Competition.Mysql.Model.pow_achievement_details(); details_model2.DetailsId = Guid.NewGuid().ToString("N"); details_model2.AchievementId = achievement_model.AchievementId; details_model2.ItemName = item_name2; details_model2.ItemizedScore = 0; details_model2.Type = "故障记录选择"; details_model2.CreateTime = DateTime.Now; details_model2.TotalScore = fault_score; details_model2.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc; details_model2.ScoreType = "缺陷分类分值"; details_list.Add(details_model2); } } } else { foreach (var position_item in value_list) { var select_score_model = System.Decimal.Round((decimal.Parse(item.SelectSocre) / total) * TotalDefectScore, 3); decimal otherQuestionScore = 0; var firstQuestionScore = Tool.TransFormation(select_score_model, value_list.Count, out otherQuestionScore); var fault_score_model = System.Decimal.Round((decimal.Parse(item.FaultScore) / total) * TotalDefectScore, 3); decimal otherQuestionScore2 = 0; var firstQuestionScore2 = Tool.TransFormation(fault_score_model, value_list.Count, out otherQuestionScore2); var user_Index = value_list.IndexOf(position_item); if (user_Index == 0) { select_score = firstQuestionScore; fault_score = firstQuestionScore2; } else { select_score = otherQuestionScore; fault_score = otherQuestionScore2; } var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷查找分值"; var achievement_details_model = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and ItemName='" + item_name + "' ").FirstOrDefault(); if (achievement_details_model == null) { var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault(); if (new_details_model == null) { var details_model = new Competition.Mysql.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement_model.AchievementId; details_model.ItemName = item_name; details_model.ItemizedScore = 0; details_model.Type = "故障记录选择"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = select_score; details_model.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item; details_model.ScoreType = "缺陷查找分值"; details_list.Add(details_model); } } var item_name2 = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷分类分值"; var achievement_details_model2 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and ItemName='" + item_name2 + "' ").FirstOrDefault(); if (achievement_details_model2 == null) { var new_details_model = details_list.Where(a => a.ItemName == item_name2).FirstOrDefault(); if (new_details_model == null) { var details_model2 = new Competition.Mysql.Model.pow_achievement_details(); details_model2.DetailsId = Guid.NewGuid().ToString("N"); details_model2.AchievementId = achievement_model.AchievementId; details_model2.ItemName = item_name2; details_model2.ItemizedScore = 0; details_model2.Type = "故障记录选择"; details_model2.CreateTime = DateTime.Now; details_model2.TotalScore = fault_score; details_model2.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item; details_model2.ScoreType = "缺陷分类分值"; details_list.Add(details_model2); } } } } } //单条数据多选故障少选情况 var moment_data = user_fault_list.Where(s => s.ChoiceQuestion != "0" && (s.FaultDesc == "配电箱箱门未加锁" || s.FaultDesc == "柜门与箱体没有链接线" || s.FaultDesc == "配电箱孔洞未封堵" || s.FaultDesc == "熔断器下桩头发热" || s.FaultDesc == "熔芯不匹配" || s.FaultDesc == "熔芯损坏" || s.FaultDesc == "电缆头套管相色缺失" || s.FaultDesc == "电缆接头发热" || s.FaultDesc == "电缆绝缘层老化开裂" || s.FaultDesc == "拉线无警示套管" || s.FaultDesc == "拉线松动" || s.FaultDesc == "拉线断股锈蚀" || s.FaultDesc == "拉线UT线夹螺帽不齐全" || s.FaultDesc == "接头发热" || s.FaultDesc == "线路弧垂不一致")).ToList(); foreach (var item in moment_data) { var select_list = req.Data.Where(a => a.FaultId == item.FaultId).ToList(); if (select_list.Count > 0) { var root_device_name = ""; var device_name = ""; var first_list = tree_list.Where(a => a.TowerId == item.RootDeviceId).FirstOrDefault(); if (first_list != null) { root_device_name = first_list.Tower; if (first_list.TowerId != item.DeviceId) { if (first_list.Data != null) { var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == item.DeviceId).FirstOrDefault(); if (two_list != null) { device_name = two_list.PowerDistributionBox; } else { var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == item.DeviceId).FirstOrDefault(); if (three_list != null) { device_name = three_list.Line; } } } } } decimal select_score = 0; decimal fault_score = 0; var value_list = new List(); if (item.FaultDesc == "配电箱箱门未加锁" || item.FaultDesc == "柜门与箱体没有链接线") { value_list = item.Position.Split('|').ToList(); } else { if (!string.IsNullOrEmpty(item.MultipleQuestion)) { if (item.FaultDesc != "相色标识错误") { value_list = item.MultipleQuestion.Split('|').ToList(); } } } if (value_list.Count > 0) { foreach (var position_item in value_list) { var count = details_list.Where(a => a.FaultDesc == root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item).Count(); if (count == 0) { var select_score_model = System.Decimal.Round((decimal.Parse(item.SelectSocre) / total) * TotalDefectScore, 3); decimal otherQuestionScore = 0; var firstQuestionScore = Tool.TransFormation(select_score_model, value_list.Count, out otherQuestionScore); var fault_score_model = System.Decimal.Round((decimal.Parse(item.FaultScore) / total) * TotalDefectScore, 3); decimal otherQuestionScore2 = 0; var firstQuestionScore2 = Tool.TransFormation(fault_score_model, value_list.Count, out otherQuestionScore2); var user_Index = value_list.IndexOf(position_item); if (user_Index == 0) { select_score = firstQuestionScore; fault_score = firstQuestionScore2; } else { select_score = otherQuestionScore; fault_score = otherQuestionScore2; } var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷查找分值"; var achievement_details_model = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and ItemName='" + item_name + "' ").FirstOrDefault(); if (achievement_details_model == null) { var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault(); if (new_details_model == null) { var details_model = new Competition.Mysql.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement_model.AchievementId; details_model.ItemName = item_name; details_model.ItemizedScore = 0; details_model.Type = "故障记录选择"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = select_score; details_model.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item; details_model.ScoreType = "缺陷查找分值"; details_list.Add(details_model); } } var item_name2 = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷分类分值"; var achievement_details_model2 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and ItemName='" + item_name2 + "' ").FirstOrDefault(); if (achievement_details_model2 == null) { var new_details_model = details_list.Where(a => a.ItemName == item_name2).FirstOrDefault(); if (new_details_model == null) { var details_model2 = new Competition.Mysql.Model.pow_achievement_details(); details_model2.DetailsId = Guid.NewGuid().ToString("N"); details_model2.AchievementId = achievement_model.AchievementId; details_model2.ItemName = item_name2; details_model2.ItemizedScore = 0; details_model2.Type = "故障记录选择"; details_model2.CreateTime = DateTime.Now; details_model2.TotalScore = fault_score; details_model2.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item; details_model2.ScoreType = "缺陷分类分值"; details_list.Add(details_model2); } } } } } } } //if (details_list.Count > 0) //{ // total_score = details_list.Sum(a => a.ItemizedScore).Value; //} if (user_fault_record_bll.OperationAddData(record_list, details_list, achievement_model.AchievementId, total_score) > 0) { return Json(Tool.GetJsonWithCode(APICode.Success, "成功")); } else { return Json(Tool.GetJsonWithCode(APICode.Fail, "失败")); } } else { return Json(Tool.GetJsonWithCode(APICode.Fail, "考生考试信息不存在")); } } else { return Json(Tool.GetJsonWithCode(APICode.Fail, "请求参数无数据")); } } catch (Exception ex) { LogHelper.WriteLog(ex.Message + ",行号:" + ex.StackTrace); return Json(Tool.GetJsonWithCode(APICode.Fail, "发生错误,请联系管理员。")); } } /// /// 获取树结构json /// /// private List ReadTree() { var tree_list = new List(); string fault_tree_file = _webHostEnvironment.WebRootPath + "/Json/FaultTree.json"; //读取json文件 using (StreamReader file = System.IO.File.OpenText(fault_tree_file)) { using (JsonTextReader reader = new JsonTextReader(file)) { tree_list = JsonConvert.DeserializeObject>(JToken.ReadFrom(reader).ToString()); } } return tree_list; } } }