using Microsoft.Win32; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using NPOI.HSSF.UserModel; using NPOI.POIFS.Crypt.Dsig; using NPOI.SS.Formula.Functions; using NPOI.SS.UserModel; using RestSharp; using RuralPower.Api; using SGUnitySDK.Etys; using SGUnitySDK.Services.HTTP; using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using System.Data; using System.IO; using System.Linq; using System.Management.Instrumentation; using System.Net; using System.Runtime.Remoting.Contexts; //using System.Net.Http; using System.Text; using System.Threading.Tasks; using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData; using static Org.BouncyCastle.Crypto.Digests.SkeinEngine; namespace RuralPower { public class RuralPowerAPI { /// /// 围栏分值 /// public string enclosure_score = "2"; /// /// 围栏每次扣分值 /// public string EnclosureFaultScore = "1"; /// /// 验电分值 /// public string ElectricityScore = "30"; /// /// 台区选择分值 /// public string SelectAreaScore = "30"; /// /// 巡检爬杆分值 /// public string ClimbrodScore = "30"; /// /// 巡线工器具总分 /// public double LineTotalScore = 3; /// /// 巡线工器具多选分值 /// public double LineMultipleScore = 0.5; /// /// 巡线工器具少选分值 /// public double LineMomentScore = 1; /// /// 缺陷总分 /// public string TotalDefectScore = "65"; /// /// Get 获取当前时间已发布的考试信息接口 /// /// 考生id /// 考试类型 1、2、3 /// 绝对路径前缀 /// 反序列化返回的值失败,代表请求接口失败 public string GetExam(string url, string UserId, string ExamType, string Path) { var now = DateTime.Now; DataBase.user_operation_ticket_list = new List(); DataBase.user_list = new List(); DataBase.scene_list = new List(); DataBase.platform_area_list = new List(); DataBase.line_list = new List(); DataBase.exam_list = new List(); DataBase.exam_tool_list = new List(); DataBase.exam_fault_list = new List(); DataBase.exam_operation_ticket_list = new List(); DataBase.user_exam_list = new List(); DataBase.user_tool_list = new List(); DataBase.user_operation_proc_ticket_list = new List(); DataBase.user_fault_list = new List(); DataBase.achievement_list = new List(); DataBase.achievement_details_list = new List(); DataBase.user_fault_record_list = new List(); DataBase.path = Path; if (DataBase.user_list.Where(a => a.user_id == UserId).Count() <= 0) { DataBase.user_list.Add(new DataService.Model.admin_user() { user_id = UserId }); } //根据考试类型读取考试信息 var exam_model = new exam_data(); string fault_tree_file = Path + "/Json/exam" + ExamType + ".json"; //读取json文件 using (StreamReader file = File.OpenText(fault_tree_file)) { using (JsonTextReader reader = new JsonTextReader(file)) { exam_model = JsonConvert.DeserializeObject(JToken.ReadFrom(reader).ToString()); } } string exam_file = Path + "/Json/exam.json"; //读取json文件 using (StreamReader file = File.OpenText(exam_file)) { using (JsonTextReader reader = new JsonTextReader(file)) { DataBase.exam_list = JsonConvert.DeserializeObject>(JToken.ReadFrom(reader).ToString()); } } string scene_file = Path + "/Json/scene.json"; //读取json文件 using (StreamReader file = File.OpenText(scene_file)) { using (JsonTextReader reader = new JsonTextReader(file)) { DataBase.scene_list = JsonConvert.DeserializeObject>(JToken.ReadFrom(reader).ToString()); } } string platform_area_file = Path + "/Json/platform_area.json"; //读取json文件 using (StreamReader file = File.OpenText(platform_area_file)) { using (JsonTextReader reader = new JsonTextReader(file)) { DataBase.platform_area_list = JsonConvert.DeserializeObject>(JToken.ReadFrom(reader).ToString()); } } string line_file = Path + "/Json/line.json"; //读取json文件 using (StreamReader file = File.OpenText(line_file)) { using (JsonTextReader reader = new JsonTextReader(file)) { DataBase.line_list = JsonConvert.DeserializeObject>(JToken.ReadFrom(reader).ToString()); } } string exam_tool_file = Path + "/Json/exam_tool.json"; //读取json文件 using (StreamReader file = File.OpenText(exam_tool_file)) { using (JsonTextReader reader = new JsonTextReader(file)) { DataBase.exam_tool_list = JsonConvert.DeserializeObject>(JToken.ReadFrom(reader).ToString()); } } string exam_fault_file = Path + "/Json/exam_fault.json"; //读取json文件 using (StreamReader file = File.OpenText(exam_fault_file)) { using (JsonTextReader reader = new JsonTextReader(file)) { DataBase.exam_fault_list = JsonConvert.DeserializeObject>(JToken.ReadFrom(reader).ToString()); } } string exam_operation_ticket_file = Path + "/Json/exam_operation_ticket.json"; //读取json文件 using (StreamReader file = File.OpenText(exam_operation_ticket_file)) { using (JsonTextReader reader = new JsonTextReader(file)) { DataBase.exam_operation_ticket_list = JsonConvert.DeserializeObject>(JToken.ReadFrom(reader).ToString()); } } return Write(APICode.Success, exam_model); } /// /// Post 开始考试接口 /// /// 考试id /// 考生id /// 反序列化返回的值失败,代表请求接口失败 public string StartExam(string url, string ExamId, string UserId) { //System.IO.File.AppendAllText(@"D:\zy\" + "StartExam.txt", "ExamId:" + ExamId + ",UserId:" + UserId); var user_model = DataBase.user_list.Where(a => a.user_id == UserId).FirstOrDefault(); if (user_model == null) { return Write(APICode.Fail, "考生信息不存在"); } var count = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).Count(); if (count > 0) { return Write(APICode.Fail, "考试考试信息已存在"); } var query = (from exam in DataBase.exam_list join scene in DataBase.scene_list on exam.SceneId equals scene.SceneId into sceneJoin from scene in sceneJoin.DefaultIfEmpty() join platformArea in DataBase.platform_area_list on exam.PlatformAreaId equals platformArea.PlatformAreaId into platformAreaJoin from platformArea in platformAreaJoin.DefaultIfEmpty() join line in DataBase.line_list on exam.LineId equals line.LineId into lineJoin from line in lineJoin.DefaultIfEmpty() select new { exam, SceneName = scene.SceneName, PlatformAreaName = platformArea.PlatformAreaName, LineName = line.LineName }).ToList(); var exam_model = query.Where(a => a.exam.ExamId == ExamId).FirstOrDefault(); if (exam_model != null) { var user_exam_model = new DataService.Model.pow_user_exam(); user_exam_model.UserExamId = Guid.NewGuid().ToString("N"); user_exam_model.UserId = UserId; user_exam_model.ExamId = ExamId; user_exam_model.ExamName = exam_model.exam.ExamName; user_exam_model.StartExamTime = exam_model.exam.StartExamTime; user_exam_model.EndExamTime = exam_model.exam.EndExamTime; user_exam_model.ExaminationDuration = exam_model.exam.ExaminationDuration + ":00"; user_exam_model.SceneId = exam_model.exam.SceneId; user_exam_model.SceneName = exam_model.SceneName; user_exam_model.PlatformAreaId = exam_model.exam.PlatformAreaId; user_exam_model.PlatformAreaName = exam_model.PlatformAreaName; user_exam_model.LineId = exam_model.exam.LineId; user_exam_model.LineName = exam_model.LineName; user_exam_model.LinePatrolDate = exam_model.exam.LinePatrolDate; user_exam_model.HandleDate = exam_model.exam.HandleDate; user_exam_model.WorkOrderContent = exam_model.exam.WorkOrderContent; user_exam_model.BackgroundInformation = exam_model.exam.BackgroundInformation; user_exam_model.IncomingLineModelLength = exam_model.exam.IncomingLineModelLength; user_exam_model.OutgoingLineModelLength = exam_model.exam.OutgoingLineModelLength; user_exam_model.StartExamTime = DateTime.Now; user_exam_model.Status = "考试中"; user_exam_model.ExaminationLink = "初始化"; user_exam_model.CreateTime = DateTime.Now; user_exam_model.LeakageProtection = exam_model.exam.LeakageProtection; user_exam_model.OverloadProtection = exam_model.exam.OverloadProtection; user_exam_model.ShortCircuitDelayProtection = exam_model.exam.ShortCircuitDelayProtection; user_exam_model.ShortCircuitProtection = exam_model.exam.ShortCircuitProtection; user_exam_model.UndervoltageProtection = exam_model.exam.UndervoltageProtection; user_exam_model.OvervoltageProtection = exam_model.exam.OvervoltageProtection; user_exam_model.PhaseLossProtection = exam_model.exam.PhaseLossProtection; user_exam_model.FusibleCoreCurrent = exam_model.exam.FusibleCoreCurrent; user_exam_model.LineIsScore = "0"; user_exam_model.FaultIsScore = "0"; user_exam_model.ClimbrodIsScore = "0"; user_exam_model.IsScore = "0"; user_exam_model.FusibleCoreIsScore = "0"; user_exam_model.EnclosureIsScore = enclosure_score; var tool_list = DataBase.exam_tool_list.Where(a => a.ExamId == exam_model.exam.ExamId); var achievement_model = new DataService.Model.pow_achievement(); achievement_model.AchievementId = Guid.NewGuid().ToString("N"); achievement_model.ExamId = exam_model.exam.ExamId; achievement_model.ExamName = exam_model.exam.ExamName; achievement_model.UserId = user_model.user_id; achievement_model.LoginName = user_model.login_name; achievement_model.RealName = user_model.real_name; achievement_model.ProvinceId = user_model.province_id; achievement_model.ProvinceName = user_model.province; achievement_model.CityId = user_model.city_id; achievement_model.CityName = user_model.city; achievement_model.TotalScore = 0; achievement_model.ExamStartTime = DateTime.Now; var exam_fault_list = DataBase.exam_fault_list.Where(a => a.ExamId == exam_model.exam.ExamId); var exam_operation_ticket_list = DataBase.exam_operation_ticket_list.Where(a => a.ExamId == exam_model.exam.ExamId).OrderBy(s => s.Type).ThenBy(s => s.SerialNumber).ToList(); try { DataBase.user_exam_list.Add(user_exam_model); var new_tool_list = new List(); foreach (var item in tool_list) { var tool_model = new DataService.Model.pow_user_tool(); tool_model.UserToolId = Guid.NewGuid().ToString("N"); tool_model.UserId = user_exam_model.UserId; tool_model.ExamId = user_exam_model.ExamId; tool_model.Purpose = item.Purpose; tool_model.ToolName = item.ToolName; tool_model.ToolType = item.ToolType; tool_model.IsSelect = "0"; tool_model.IsScore = "0"; tool_model.Quantity = 0; new_tool_list.Add(tool_model); } if (new_tool_list.Count > 0) { DataBase.user_tool_list.AddRange(new_tool_list); } DataBase.achievement_list.Add(achievement_model); var new_fault_list = new List(); foreach (var item in exam_fault_list) { var fault_model = new DataService.Model.pow_user_fault(); fault_model.UserFaultId = Guid.NewGuid().ToString("N"); fault_model.UserId = user_exam_model.UserId; fault_model.ExamId = item.ExamId; fault_model.FaultId = item.FaultId; fault_model.RootDeviceId = item.RootDeviceId; fault_model.DeviceId = item.DeviceId; fault_model.Type = item.Type; fault_model.FaultType = item.FaultType; fault_model.FaultDesc = item.FaultDesc; fault_model.DefectLevel = item.DefectLevel; fault_model.SpecificSimulation = item.SpecificSimulation; fault_model.FaultPosition = item.FaultPosition; fault_model.SelectSocre = item.SelectSocre; fault_model.FaultScore = item.FaultScore; fault_model.HandlerScore = item.HandlerScore; fault_model.DegreesSerialNumber = item.DegreesSerialNumber; fault_model.DegreesValue = item.DegreesValue; fault_model.ChoiceQuestion = item.ChoiceQuestion; fault_model.MultipleQuestion = item.MultipleQuestion; fault_model.DifficultyLevel = item.DifficultyLevel; fault_model.PositionValue = item.PositionValue; fault_model.Position = item.Position; fault_model.FusibleCoreNormal = item.FusibleCoreNormal; fault_model.FusibleCoreFault = item.FusibleCoreFault; fault_model.PorcelainBottleType = item.PorcelainBottleType; fault_model.Direction = item.Direction; fault_model.Topic = item.Topic; fault_model.OptionA = item.OptionA; fault_model.OptionB = item.OptionB; fault_model.OptionC = item.OptionC; fault_model.OptionD = item.OptionD; fault_model.OptionE = item.OptionE; fault_model.RightKey = item.RightKey; fault_model.Settings = item.Settings; fault_model.Name = item.Name; fault_model.Value = item.Value; fault_model.CableName = item.CableName; fault_model.CreateTime = item.CreateTime; fault_model.CableStart = item.CableStart; fault_model.CableEnd = item.CableEnd; fault_model.ModelLength = item.ModelLength; fault_model.SensitiveKnowledge = item.SensitiveKnowledge; fault_model.Minhui = item.Minhui; fault_model.SensitiveLine = item.SensitiveLine; fault_model.Allergy = item.Allergy; fault_model.GracefulGraceful = item.GracefulGraceful; fault_model.RequiredTool = item.RequiredTool; fault_model.HasHandle = "false"; fault_model.CurreSelectDetail = ""; fault_model.FaultLocation = ""; fault_model.IsProcessingScore = "0"; new_fault_list.Add(fault_model); } if (new_fault_list.Count > 0) { DataBase.user_fault_list.AddRange(new_fault_list); } var new_ticket_list = new List(); foreach (var model in exam_operation_ticket_list) { var ticket_model = new DataService.Model.pow_user_operation_proc_ticket(); ticket_model.UserOperationProcTicketId = Guid.NewGuid().ToString("N"); ticket_model.UserId = user_exam_model.UserId; ticket_model.ExamId = model.ExamId; ticket_model.OperationTicketId = model.OperationTicketId; ticket_model.Type = model.Type; ticket_model.SerialNumber = model.SerialNumber; ticket_model.Content = model.Content; ticket_model.State = 0; ticket_model.IsScore = "0"; // model.IsScore; 是否扣分 0:否,1:是 ticket_model.Score = 0; // model.Score; 扣分值 0 不扣分 ticket_model.ScoreReason = ""; // model.ScoreReason; //扣分原因 ticket_model.CreateTime = DateTime.Now; ticket_model.UpdateTime = null; ticket_model.R1 = ""; ticket_model.R2 = ""; ticket_model.R3 = ""; new_ticket_list.Add(ticket_model); } if (new_ticket_list.Count > 0) { DataBase.user_operation_proc_ticket_list.AddRange(new_ticket_list); } return Write(APICode.Success, "创建考试成功"); } catch (Exception ex) { return Write(APICode.Fail, "创建考试失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } /// /// Post 结束考试接口 /// /// 接口域名 /// 考试id /// 考生id /// 反序列化返回的值失败,代表请求接口失败 public string EndExam(string url, string ExamId, string UserId) { //System.IO.File.AppendAllText(@"D:\zy\" + "EndExam.txt", "ExamId:" + ExamId + ",UserId:" + UserId); var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (achievement_model == null) { return Write(APICode.Fail, "考生成绩信息不存在"); } var now = DateTime.Now; var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); var add_achievement_details_list = new List(); if (user_exam_model != null) { try { user_exam_model.EndExamTime = now; achievement_model.ExamEndTime = now; user_exam_model.Status = "已结束"; if (user_exam_model.EnclosureIsScore != "2") { var item_name = "不放置围栏分值"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); if (achievement_details_model == null) { var enclosure_is_score = decimal.Parse(user_exam_model.EnclosureIsScore); var points_score = 2 - enclosure_is_score; achievement_model.TotalScore = achievement_model.TotalScore + enclosure_is_score; if (achievement_model.TotalScore < 0) { achievement_model.TotalScore = 0; } var details_model = new DataService.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement_model.AchievementId; details_model.ItemName = "不放置围栏分值"; details_model.ItemizedScore = enclosure_is_score; details_model.Type = "围栏"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = 2; DataBase.achievement_details_list.Add(details_model); } } else { var item_name = "不放置围栏分值"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); if (achievement_details_model == null) { var enclosure_is_score = decimal.Parse(user_exam_model.EnclosureIsScore); achievement_model.TotalScore = achievement_model.TotalScore + enclosure_is_score; if (achievement_model.TotalScore < 0) { achievement_model.TotalScore = 0; } var details_model = new DataService.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement_model.AchievementId; details_model.ItemName = "不放置围栏分值"; details_model.ItemizedScore = 2; details_model.Type = "围栏"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = 2; DataBase.achievement_details_list.Add(details_model); } } if (user_exam_model.LineIsScore == "1" || user_exam_model.FaultIsScore == "1") { var item_name = "箱门或插座未验电或验电顺序错误"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); if (achievement_details_model == null) { var electricity_score = decimal.Parse(ElectricityScore); achievement_model.TotalScore = achievement_model.TotalScore - electricity_score; if (achievement_model.TotalScore < 0) { achievement_model.TotalScore = 0; } var details_model = new DataService.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement_model.AchievementId; details_model.ItemName = "箱门或插座未验电或验电顺序错误"; details_model.ItemizedScore = -30; details_model.Type = "验电"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = 2; DataBase.achievement_details_list.Add(details_model); } } else { var item_name = "箱门或插座未验电或验电顺序错误"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); if (achievement_details_model == null) { achievement_model.TotalScore = achievement_model.TotalScore + 2; var details_model = new DataService.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement_model.AchievementId; details_model.ItemName = "箱门或插座未验电或验电顺序错误"; details_model.ItemizedScore = 2; details_model.Type = "验电"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = 2; DataBase.achievement_details_list.Add(details_model); } } #region 巡检爬杆 if (user_exam_model.ClimbrodIsScore == "1") { var item_name = "巡检爬杆"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); if (achievement_details_model == null) { var electricity_score = decimal.Parse(ClimbrodScore); achievement_model.TotalScore = achievement_model.TotalScore - electricity_score; if (achievement_model.TotalScore < 0) { achievement_model.TotalScore = 0; } var details_model = new DataService.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement_model.AchievementId; details_model.ItemName = "巡检爬杆"; details_model.ItemizedScore = -30; details_model.Type = "巡检爬杆"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = 0; DataBase.achievement_details_list.Add(details_model); } } #endregion if (user_exam_model.IsScore == "1") { var item_name = "台区选择错误分值"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); if (achievement_details_model == null) { var select_area_score = decimal.Parse(SelectAreaScore); achievement_model.TotalScore = achievement_model.TotalScore - select_area_score; if (achievement_model.TotalScore < 0) { achievement_model.TotalScore = 0; } var details_model = new DataService.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement_model.AchievementId; details_model.ItemName = "台区选择错误分值"; details_model.ItemizedScore = -30; details_model.Type = "台区选择"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = 0; DataBase.achievement_details_list.Add(details_model); } } if (user_exam_model.FusibleCoreIsScore == "1") { var item_name = "未分闸状态拉合熔芯扣分分值"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); if (achievement_details_model == null) { achievement_model.TotalScore = achievement_model.TotalScore - 30; if (achievement_model.TotalScore < 0) { achievement_model.TotalScore = 0; } var details_model = new DataService.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement_model.AchievementId; details_model.ItemName = "未分闸状态拉合熔芯扣分分值"; details_model.ItemizedScore = -30; details_model.Type = "未分闸状态拉合熔芯"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = 0; DataBase.achievement_details_list.Add(details_model); } } var details_model1 = new DataService.Model.pow_achievement_details(); details_model1.DetailsId = Guid.NewGuid().ToString("N"); details_model1.AchievementId = achievement_model.AchievementId; details_model1.ItemName = "时间分"; details_model1.ItemizedScore = 5; details_model1.Type = "时间分"; details_model1.CreateTime = DateTime.Now; details_model1.TotalScore = 5; achievement_model.TotalScore = achievement_model.TotalScore + 5; DataBase.achievement_details_list.Add(details_model1); return Write(APICode.Success, "结束考试成功"); } catch (Exception) { return Write(APICode.Fail, "结束考试失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } /// /// 获取提交的数据 /// /// 考试id /// 用户id /// public List GetAnswer(string ExamId, string UserId, int lesson_plan_id) { var list = new List(); var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (achievement_model != null) { var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (user_exam_model != null) { //if (user_exam_model.Status == "已结束") //{ var model = new SGAnswer(lesson_plan_id, new List()); var answer_info = new List(); var answer_info_model1 = new SGAnswerInfo("1", "巡检工器具", 0, 0, 0, "", new List()); var answer_info_model2 = new SGAnswerInfo("2", "排故工器具", 0, 0, 0, "", new List()); var answer_info_model3 = new SGAnswerInfo("3", "停电操作票", 0, 0, 0, "", new List()); var answer_info_model4 = new SGAnswerInfo("4", "送电操作票", 0, 0, 0, "", new List()); var answer_info_model5 = new SGAnswerInfo("5", "停电操作票步骤", 0, 0, 0, "", new List()); var answer_info_model6 = new SGAnswerInfo("6", "送电操作票步骤", 0, 0, 0, "", new List()); var answer_info_model7 = new SGAnswerInfo("7", "围栏", 0, 0, 0, "", new List()); var answer_info_model8 = new SGAnswerInfo("8", "验电", 0, 0, 0, "", new List()); var answer_info_model9 = new SGAnswerInfo("9", "时间分", 0, 0, 0, "", new List()); var answer_info_model10 = new SGAnswerInfo("10", "缺陷查找、缺陷处理、缺陷分类分值", 0, 0, 0, "", new List()); var answer_info_model11 = new SGAnswerInfo("11", "其它扣分项", 0, 0, 0, "", new List()); var data = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId).OrderBy(a => a.CreateTime).ToList(); #region 巡检工器具 var all_line_tool_list = new List(); var line_tool_model = data.Where(a => a.Type == "巡线工器具").FirstOrDefault(); if (line_tool_model != null) { answer_info_model1.AutoScore = double.Parse(line_tool_model.ItemizedScore.ToString()); var tool_model = new SGStep(line_tool_model.ItemName, double.Parse(line_tool_model.TotalScore.ToString()), double.Parse(line_tool_model.ItemizedScore.ToString())); all_line_tool_list.Add(tool_model); } else { var tool_model = new SGStep("巡检工器具选择", 3, 0); all_line_tool_list.Add(tool_model); } var user_tool_list = DataBase.user_tool_list.Where(a => a.ExamId == ExamId && a.UserId == UserId && a.IsScore == "1").ToList(); var line_tool_list = user_tool_list.Where(a => a.Purpose == "巡线").ToList(); for (int i = 0; i < line_tool_list.Count; i++) { double score = 0; if (line_tool_list[i].IsSelect == "1") { score = LineMultipleScore; } else { score = LineMomentScore; } var tool_model = new SGStep(line_tool_list[i].ToolName, 0, double.Parse((-score).ToString())); all_line_tool_list.Add(tool_model); } if (all_line_tool_list.Count() > 0) { answer_info_model1.StepArr = all_line_tool_list; } #endregion #region 排故工器具 var all_trouble_tool_list = new List(); var trouble_tool_model = data.Where(a => a.Type == "排故工器具").FirstOrDefault(); if (trouble_tool_model != null) { answer_info_model2.AutoScore = double.Parse(trouble_tool_model.ItemizedScore.ToString()); var tool_model = new SGStep(trouble_tool_model.ItemName, double.Parse(trouble_tool_model.TotalScore.ToString()), double.Parse(trouble_tool_model.ItemizedScore.ToString())); all_trouble_tool_list.Add(tool_model); } else { var tool_model = new SGStep("排故工器具选择", 3, 0); all_trouble_tool_list.Add(tool_model); } var trouble_tool_list = user_tool_list.Where(a => a.Purpose == "排故").ToList(); for (int i = 0; i < trouble_tool_list.Count; i++) { double score = 0; if (trouble_tool_list[i].IsSelect == "1") { score = LineMultipleScore; } else { score = LineMomentScore; } var tool_model = new SGStep(trouble_tool_list[i].ToolName, 0, double.Parse((-score).ToString())); all_trouble_tool_list.Add(tool_model); } if (all_trouble_tool_list.Count() > 0) { answer_info_model2.StepArr = all_trouble_tool_list; } #endregion #region 停电操作票 var power_failure_model = data.Where(a => a.Type == "停电操作票").FirstOrDefault(); if (power_failure_model != null) { answer_info_model3.AutoScore = double.Parse(power_failure_model.ItemizedScore.ToString()); var power_model = new SGStep(power_failure_model.ItemName, double.Parse(power_failure_model.TotalScore.ToString()), double.Parse(power_failure_model.ItemizedScore.ToString())); answer_info_model3.StepArr = new List() { power_model }; } else { var power_model = new SGStep("停电操作票选择", 5, 0); answer_info_model3.StepArr = new List() { power_model }; } #endregion #region 送电操作票 var power_transmission_model = data.Where(a => a.Type == "送电操作票").FirstOrDefault(); if (power_transmission_model != null) { answer_info_model4.AutoScore = double.Parse(power_transmission_model.ItemizedScore.ToString()); var power_model = new SGStep(power_transmission_model.ItemName, double.Parse(power_transmission_model.TotalScore.ToString()), double.Parse(power_transmission_model.ItemizedScore.ToString())); answer_info_model4.StepArr = new List() { power_model }; } else { var power_model = new SGStep("送电操作票选择", 5, 0); answer_info_model4.StepArr = new List() { power_model }; } #endregion #region 停电操作票步骤 var all_power_failure_step_list = new List(); var power_failure_step_model = data.Where(a => a.Type == "停电操作票步骤").FirstOrDefault(); if (power_failure_step_model != null) { answer_info_model5.AutoScore = double.Parse(power_failure_step_model.ItemizedScore.ToString()); var power_model = new SGStep(power_failure_step_model.ItemName, double.Parse(power_failure_step_model.TotalScore.ToString()), double.Parse(power_failure_step_model.ItemizedScore.ToString())); all_power_failure_step_list.Add(power_model); } else { var power_model = new SGStep("停电操作票步骤", 5, 0); all_power_failure_step_list.Add(power_model); } var proc_ticket_list = DataBase.user_operation_proc_ticket_list.Where(a => a.ExamId == ExamId && a.UserId == UserId && a.IsScore == "1").ToList(); var power_failure_step_list = proc_ticket_list.Where(a => a.Type == "停电").OrderBy(a => a.SerialNumber).ToList(); for (int i = 0; i < power_failure_step_list.Count; i++) { var power_model = new SGStep(power_failure_step_list[i].Content, 0, double.Parse((-power_failure_step_list[i].Score).ToString())); all_power_failure_step_list.Add(power_model); } if (all_power_failure_step_list.Count() > 0) { answer_info_model5.StepArr = all_power_failure_step_list; } #endregion #region 送电操作票步骤 var all_power_transmission_step_list = new List(); var power_transmission_step_model = data.Where(a => a.Type == "送电操作票步骤").FirstOrDefault(); if (power_transmission_step_model != null) { answer_info_model6.AutoScore = double.Parse(power_transmission_step_model.ItemizedScore.ToString()); var power_model = new SGStep(power_transmission_step_model.ItemName, double.Parse(power_transmission_step_model.TotalScore.ToString()), double.Parse(power_transmission_step_model.ItemizedScore.ToString())); all_power_transmission_step_list.Add(power_model); } else { var power_model = new SGStep("送电操作票步骤", 5, 0); all_power_transmission_step_list.Add(power_model); } var power_transmission_step_list = proc_ticket_list.Where(a => a.Type == "送电").OrderBy(a => a.SerialNumber).ToList(); for (int i = 0; i < power_transmission_step_list.Count; i++) { var power_model = new SGStep(power_transmission_step_list[i].Content, 0, double.Parse((-power_transmission_step_list[i].Score).ToString())); all_power_transmission_step_list.Add(power_model); } if (all_power_transmission_step_list.Count() > 0) { answer_info_model6.StepArr = all_power_transmission_step_list; } #endregion #region 围栏 var place_model = data.Where(a => a.Type == "围栏").FirstOrDefault(); if (place_model != null) { answer_info_model7.AutoScore = double.Parse(place_model.ItemizedScore.ToString()); var power_model = new SGStep(place_model.ItemName, double.Parse(place_model.TotalScore.ToString()), double.Parse(place_model.ItemizedScore.ToString())); answer_info_model7.StepArr = new List() { power_model }; } else { var power_model = new SGStep("不放置围栏分值", 2, 0); answer_info_model7.StepArr = new List() { power_model }; } #endregion #region 验电 var electricity_model = data.Where(a => a.Type == "验电").FirstOrDefault(); if (electricity_model != null) { answer_info_model8.AutoScore = double.Parse(electricity_model.ItemizedScore.ToString()); var power_model = new SGStep(electricity_model.ItemName, double.Parse(electricity_model.TotalScore.ToString()), double.Parse(electricity_model.ItemizedScore.ToString())); answer_info_model8.StepArr = new List() { power_model }; } else { var power_model = new SGStep("箱门或插座未验电或验电顺序错误", 2, 0); answer_info_model8.StepArr = new List() { power_model }; } #endregion #region 时间分 var time_model = data.Where(a => a.Type == "时间分").FirstOrDefault(); if (time_model != null) { answer_info_model9.AutoScore = double.Parse(time_model.ItemizedScore.ToString()); var power_model = new SGStep(time_model.ItemName, double.Parse(time_model.TotalScore.ToString()), double.Parse(time_model.ItemizedScore.ToString())); answer_info_model9.StepArr = new List() { power_model }; } else { var power_model = new SGStep("时间分", 5, 0); answer_info_model9.StepArr = new List() { power_model }; } #endregion #region 缺陷查找、缺陷处理、缺陷分类分值 var all_fault_list = new List(); var fault_list = data.Where(a => a.Type == "故障记录选择" || a.Type == "故障选择题处理" || a.Type == "故障排故处理").OrderBy(a => a.CreateTime).ToList(); var fault_type_list = fault_list.GroupBy(a => a.FaultDesc).ToList(); for (int i = 0; i < fault_type_list.Count; i++) { var fault = fault_list.Where(a => a.FaultDesc == fault_type_list[i].Key).ToList(); var first = fault.Where(a => a.ScoreType == "缺陷查找分值").FirstOrDefault(); if (first != null) { var power_model = new SGStep(fault_type_list[i].Key + "-查找", double.Parse(first.TotalScore.ToString()), double.Parse(first.ItemizedScore.ToString())); all_fault_list.Add(power_model); } else { var power_model = new SGStep(fault_type_list[i].Key + "-查找", 0, 0); all_fault_list.Add(power_model); } var second = fault.Where(a => a.ScoreType == "缺陷分类分值").FirstOrDefault(); if (second != null) { var power_model = new SGStep(fault_type_list[i].Key + "-分类", double.Parse(second.TotalScore.ToString()), double.Parse(second.ItemizedScore.ToString())); all_fault_list.Add(power_model); } else { var power_model = new SGStep(fault_type_list[i].Key + "-分类", 0, 0); all_fault_list.Add(power_model); } var third = fault.Where(a => a.ScoreType == "缺陷处理分值").FirstOrDefault(); if (third != null) { var power_model = new SGStep(fault_type_list[i].Key + "-处理", double.Parse(third.TotalScore.ToString()), double.Parse(third.ItemizedScore.ToString())); all_fault_list.Add(power_model); } else { var power_model = new SGStep(fault_type_list[i].Key + "-处理", 0, 0); all_fault_list.Add(power_model); } } if (all_fault_list.Count() > 0) { answer_info_model10.AutoScore = all_fault_list.Sum(a => a.TotalScore); answer_info_model10.StepArr = all_fault_list; } #endregion #region 其它扣分项 var other_step_list = new List(); //巡检爬杆 var climbrod_model = data.Where(a => a.Type == "巡检爬杆").FirstOrDefault(); if (climbrod_model != null) { var power_model = new SGStep(climbrod_model.ItemName, double.Parse(climbrod_model.TotalScore.ToString()), double.Parse(climbrod_model.ItemizedScore.ToString())); other_step_list.Add(power_model); } var platform_area_model = data.Where(a => a.Type == "台区选择").FirstOrDefault(); if (platform_area_model != null) { var power_model = new SGStep(platform_area_model.ItemName, double.Parse(platform_area_model.TotalScore.ToString()), double.Parse(platform_area_model.ItemizedScore.ToString())); other_step_list.Add(power_model); } var fusible_core_model = data.Where(a => a.Type == "未分闸状态拉合熔芯").FirstOrDefault(); if (fusible_core_model != null) { var power_model = new SGStep(fusible_core_model.ItemName, double.Parse(fusible_core_model.TotalScore.ToString()), double.Parse(fusible_core_model.ItemizedScore.ToString())); other_step_list.Add(power_model); } if (other_step_list.Count() > 0) { answer_info_model11.AutoScore = other_step_list.Sum(a => a.TotalScore); answer_info_model11.StepArr = other_step_list; } #endregion answer_info.Add(answer_info_model1); answer_info.Add(answer_info_model2); answer_info.Add(answer_info_model3); answer_info.Add(answer_info_model4); answer_info.Add(answer_info_model5); answer_info.Add(answer_info_model6); answer_info.Add(answer_info_model7); answer_info.Add(answer_info_model8); answer_info.Add(answer_info_model9); answer_info.Add(answer_info_model10); answer_info.Add(answer_info_model11); model.AnswerInfo = answer_info; list.Add(model); //} } } return list; } /// /// 操作票接口 /// /// 开始id /// 用户id /// 送电、停电 /// json数组 /// public string WriteTicket(string url, string ExamId, string UserId, string Type, string data) { //System.IO.File.AppendAllText(@"D:\zy\" + "WriteTicket.txt", "ExamId:" + ExamId + ",UserId:" + UserId + ",Type:" + Type + ",data:" + data); if (string.IsNullOrEmpty(data)) { return GetResult(false, "data参数不能为空"); } if (string.IsNullOrEmpty(ExamId)) { return GetResult(false, "ExamId参数不能为空"); } if (string.IsNullOrEmpty(Type)) { return GetResult(false, "Type参数不能为空"); } if (string.IsNullOrEmpty(UserId)) { return GetResult(false, "UserId参数不能为空"); } var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (user_exam_model != null) { if (user_exam_model.Status == "已结束") { return GetResult(false, "考生考试已结束"); } } else { return GetResult(false, "考生考试信息不存在"); } var achievement = DataBase.achievement_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (null == achievement) { return GetResult(false, "考生成绩数据不存在"); } //用户操作ticket var list_user_operation_ticket = JsonConvert.DeserializeObject>(data); var list_exam_operation_ticket = DataBase.exam_operation_ticket_list.Where(a => a.ExamId == ExamId && a.Type == Type && a.Content.Length > 0).OrderBy(s => s.SerialNumber).ToList(); int total_score = 5; var list_TicketId_HasScore = new List(); var score = ComputeTicketScore(ref total_score, list_TicketId_HasScore, list_user_operation_ticket, list_exam_operation_ticket); for (int i = 0; i < list_user_operation_ticket.Count; i++) { var item = list_user_operation_ticket[i]; var model = new DataService.Model.pow_user_operation_ticket(); model.UserOperationTicketId = Guid.NewGuid().ToString("N"); model.UserId = UserId; model.ExamId = ExamId; model.OperationTicketId = item.OperationTicketId; model.Type = item.Type; model.SerialNumber = i + 1; // int.Parse(item.SerialNumber); model.Content = item.Content; model.IsSelect = "1"; //是否选择 0:未选择,1:已选择 model.IsScore = list_TicketId_HasScore.Contains(item.OperationTicketId) ? "0" : "1"; //是否扣分 0:否,1:是 model.CreateTime = DateTime.Now; DataBase.user_operation_ticket_list.Add(model); } var details_model = new DataService.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement.AchievementId; details_model.ItemName = Type + "操作票选择"; details_model.ItemizedScore = total_score; details_model.Type = Type + "操作票"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = 5; DataBase.achievement_details_list.Add(details_model); achievement.TotalScore = achievement.TotalScore + total_score; return GetResult(true, null, "操作票总分:" + total_score); } /// /// 查询操作票步骤,用以初始化或断点续传操作票步骤 /// /// 开始id /// 用户id /// 送电、停电 /// json数组 /// public string QueryTicketProc(string url, string ExamId, string UserId, string Type) { //System.IO.File.AppendAllText(@"D:\zy\" + "QueryTicketProc.txt", "ExamId:" + ExamId + ",UserId:" + UserId + ",Type:" + Type); if (string.IsNullOrEmpty(ExamId)) { return GetResult(false, "ExamId参数不能为空"); } if (string.IsNullOrEmpty(Type)) { return GetResult(false, "Type参数不能为空"); } if (string.IsNullOrEmpty(UserId)) { return GetResult(false, "UserId参数不能为空"); } //UserId :用户id //ExamId:考试id //Type:送电、停电 var proc_ticket_list = DataBase.user_operation_proc_ticket_list.Where(a => a.UserId == UserId && a.ExamId == ExamId && a.Type == Type).OrderBy(s => s.SerialNumber).ToList(); if (proc_ticket_list.Count > 0) { return GetResult(true, proc_ticket_list, proc_ticket_list.Count.ToString()); } else { return GetResult(false, null, "记录不存在"); } } /// /// 单步填写操作票步骤接口 /// /// 开始id /// 用户id /// 送电、停电 /// json数组 /// public string WriteTicketProc(string url, string ExamId, string UserId, string Type, string OperationTicketId, string Score, string ScoreReason) { //System.IO.File.AppendAllText(@"D:\zy\" + "WriteTicketProc.txt", "ExamId:" + ExamId + ",UserId:" + UserId + ",Type:" + Type + ",OperationTicketId:" + OperationTicketId + ",Score" + Score + ",ScoreReason:" + ScoreReason); //OperationTicketId: 步骤id //UserId :用户id //ExamId:考试id //Type:送电、停电 //Score: 扣分值:0:不扣分 //ScoreReason:扣分原因 if (string.IsNullOrEmpty(OperationTicketId)) { return GetResult(false, "OperationTicketId参数不能为空"); } if (string.IsNullOrEmpty(ExamId)) { return GetResult(false, "ExamId参数不能为空"); } if (string.IsNullOrEmpty(Type)) { return GetResult(false, "Type参数不能为空"); } if (string.IsNullOrEmpty(UserId)) { return GetResult(false, "UserId参数不能为空"); } if (string.IsNullOrEmpty(Score)) { return GetResult(false, "Score参数不能为空"); } if (string.IsNullOrEmpty(ScoreReason)) { return GetResult(false, "ScoreReason参数不能为空"); } var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (user_exam_model != null) { if (user_exam_model.Status == "已结束") { return GetResult(false, "考生考试已结束"); } } else { return GetResult(false, "考生考试信息不存在"); } //OperationTicketId: 步骤id //UserId :用户id //ExamId:考试id //Type:送电、停电 //Score: 扣分值:0:不扣分 //ScoreReason:扣分原因 var proc_ticket = DataBase.user_operation_proc_ticket_list.Where(a => a.OperationTicketId == OperationTicketId && a.UserId == UserId && a.ExamId == ExamId && a.Type == Type).FirstOrDefault(); if (proc_ticket != null) { try { proc_ticket.State = 1; //已开始 proc_ticket.UpdateTime = DateTime.Now; int i_score = 0; int.TryParse(Score, out i_score); proc_ticket.Score = i_score; proc_ticket.ScoreReason = ScoreReason; //是否扣分 0:否,1:是 if (i_score > 0) { proc_ticket.IsScore = "1"; } else { proc_ticket.IsScore = "0"; } return GetResult(true, ""); } catch (Exception) { return GetResult(false, ""); } } else { return GetResult(false, "操作票步骤信息不存在"); } } /// /// 停止操作票所有步骤接口,计算分数累计成绩 /// /// 开始id /// 用户id /// 送电、停电 /// public string StopTicketProc(string url, string ExamId, string UserId, string Type) { //System.IO.File.AppendAllText(@"D:\zy\" + "StopTicketProc.txt", "ExamId:" + ExamId + ",UserId:" + UserId + ",Type:" + Type); if (string.IsNullOrEmpty(ExamId)) { return GetResult(false, "ExamId参数不能为空"); } if (string.IsNullOrEmpty(Type)) { return GetResult(false, "Type参数不能为空"); } if (string.IsNullOrEmpty(UserId)) { return GetResult(false, "UserId参数不能为空"); } //UserId :用户id //ExamId:考试id //Type:送电、停电 var achievement = DataBase.achievement_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (null == achievement) { return GetResult(false, "考生成绩数据不存在"); } var proc_ticket_list = DataBase.user_operation_proc_ticket_list.Where(a => a.UserId == UserId && a.ExamId == ExamId && a.Type == Type && a.Content.Length > 0).OrderBy(s => s.SerialNumber).ToList(); if (proc_ticket_list.Count <= 0) { return GetResult(false, "操作票步骤数据不存在"); } //获取操作票步骤得分 var total_score = get_ticket_proc_scrore(proc_ticket_list); var details_model = new DataService.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement.AchievementId; details_model.ItemName = Type + "操作票步骤"; details_model.ItemizedScore = total_score; details_model.Type = Type + "操作票步骤"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = 5; DataBase.achievement_details_list.Add(details_model); achievement.TotalScore = achievement.TotalScore + total_score; return GetResult(true, null, "操作票步骤总分:" + total_score); } /// /// Post 巡线、排故工器具接口 /// /// 参数 /// 反序列化返回的值失败,代表请求接口失败 public string AddUserTool(string url, string parameter) { //System.IO.File.AppendAllText(@"D:\zy\" + "AddUserTool.txt", "parameter:" + parameter); var model = JsonConvert.DeserializeObject(parameter); if (model != null) { var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault(); if (user_exam_model != null) { if (user_exam_model.Status == "已结束") { return Write(APICode.Fail, "考生考试已结束"); } try { var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault(); if (achievement_model == null) { return Write(APICode.Fail, "考生成绩数据不存在"); } var user_tool_list = DataBase.user_tool_list.Where(a => a.UserId == model.UserId && model.ExamId == model.ExamId && a.Purpose == model.Purpose).ToList(); var tool_list = model.Tool.Select(a => a.ToolName).ToList(); //var local_tool_list = model.Tool.Select(a => a.ToolName).ToList(); //用户有、正确有,修改是否选择 //用户有、正确没有,新增数据 //用户没有、正确有, var line_total_score = double.Parse(LineTotalScore.ToString()); var total_score = decimal.Parse(LineTotalScore.ToString()); ////相同的数据 //var IdenticalData = user_tool_list.Where(s => tool_list.Contains(s.ToolName)).Select(s => s.ToolName).ToArray(); ////不同 //var DifferentData = user_tool_list.Where(s => !tool_list.Contains(s.ToolName)).ToList(); ////不同 用户选择数据里有,本地数据库里没有 //var FieldCaseData = model.Tool.Where(s => !local_tool_list.Contains(s.ToolName)).ToList(); foreach (var item in model.Tool) { var tool_model = user_tool_list.Where(a => a.ToolName == item.ToolName).FirstOrDefault(); if (tool_model != null) { tool_model.Quantity = item.Quantity; tool_model.IsSelect = "1"; tool_model.IsScore = "0"; } else { if (line_total_score != 0) { line_total_score = line_total_score - LineMultipleScore; if (line_total_score < 0) { line_total_score = 0; } } var add_tool_model = new DataService.Model.pow_user_tool(); add_tool_model.UserToolId = Guid.NewGuid().ToString("N"); add_tool_model.UserId = model.UserId; add_tool_model.ExamId = model.ExamId; add_tool_model.Purpose = model.Purpose; add_tool_model.ToolName = item.ToolName; add_tool_model.IsSelect = "1"; add_tool_model.Quantity = item.Quantity; add_tool_model.IsScore = "1"; DataBase.user_tool_list.Add(add_tool_model); } } //本地数据库正确数据里有,用户选择数据里没有,少选 var correct_data = user_tool_list.Where(s => !tool_list.Contains(s.ToolName)).ToList(); foreach (var item in correct_data) { if (line_total_score != 0) { line_total_score = line_total_score - LineMomentScore; if (line_total_score < 0) { line_total_score = 0; } } item.IsScore = "1"; } var details_model = new DataService.Model.pow_achievement_details(); details_model.DetailsId = Guid.NewGuid().ToString("N"); details_model.AchievementId = achievement_model.AchievementId; details_model.ItemName = model.Purpose + "工器具选择"; details_model.ItemizedScore = decimal.Parse(line_total_score.ToString()); details_model.Type = model.Purpose + "工器具"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = total_score; DataBase.achievement_details_list.Add(details_model); achievement_model.TotalScore = achievement_model.TotalScore + details_model.ItemizedScore.Value; return Write(APICode.Success, "成功"); } catch (Exception) { return Write(APICode.Fail, "失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } else { return Write(APICode.Fail, "请求参数无数据"); } } /// /// Post 保存考试故障记录接口 /// /// 参数 /// 反序列化返回的值失败,代表请求接口失败 public string AddUserFaultRecord(string url, string parameter) { //System.IO.File.AppendAllText(@"D:\zy\" + "AddUserFaultRecord.txt", "parameter:" + parameter); var model = JsonConvert.DeserializeObject(parameter); if (model != null) { var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault(); if (user_exam_model != null) { try { if (user_exam_model.Status == "已结束") { return Write(APICode.Fail, "考生考试已结束"); } var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault(); if (achievement_model == null) { return Write(APICode.Fail, "考生成绩数据不存在"); } var user_fault_list = DataBase.user_fault_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).ToList(); 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 total_defect_score = decimal.Parse(TotalDefectScore); decimal total_score = 0; //组织树 var tree_list = ReadTree(); foreach (var item in model.Data) { var new_fault_model = new DataService.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 = ""; } 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) { select_score = System.Decimal.Round((decimal.Parse(fault_model.SelectSocre) / total) * total_defect_score, 3); var item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷查找分值"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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; } } if (item.DefectLevel == fault_model.DefectLevel) { fault_score = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * total_defect_score, 3); var item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷分类分值"; var achievement_details_model2 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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 { fault_score = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * total_defect_score, 3); var item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷分类分值"; var achievement_details_model2 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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 { select_score = System.Decimal.Round((decimal.Parse(fault_model.SelectSocre) / total) * total_defect_score, 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 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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) { fault_score = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * total_defect_score, 3); 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 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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 { fault_score = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * total_defect_score, 3); 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 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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 = model.UserId; new_fault_model.ExamId = model.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 = model.UserId; new_fault_model.ExamId = model.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); } } if (record_list.Count > 0) { DataBase.user_fault_record_list.AddRange(record_list); } var fault_list = model.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) * total_defect_score, 3); var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + "缺陷查找分值"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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) * total_defect_score, 3); var item_name2 = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + "缺陷分类分值"; var achievement_details_model2 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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) { select_score = System.Decimal.Round((decimal.Parse(item.SelectSocre) / total) * total_defect_score, 3); var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷查找分值"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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); } } fault_score = System.Decimal.Round((decimal.Parse(item.FaultScore) / total) * total_defect_score, 3); var item_name2 = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷分类分值"; var achievement_details_model2 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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) { DataBase.achievement_details_list.AddRange(details_list); } achievement_model.TotalScore = achievement_model.TotalScore + total_score; return Write(APICode.Success, "成功"); } catch (Exception) { return Write(APICode.Fail, "失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } else { return Write(APICode.Fail, "请求参数无数据"); } } /// /// Post 上传考试选择题数据接口 /// /// 参数 /// 反序列化返回的值失败,代表请求接口失败 public string AddUserChoiceQuestion(string url, string parameter) { //System.IO.File.AppendAllText(@"D:\zy\" + "AddUserChoiceQuestion.txt", "parameter:" + parameter); var model = JsonConvert.DeserializeObject(parameter); if (model != null) { var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault(); if (user_exam_model != null) { try { if (user_exam_model.Status == "已结束") { return Write(APICode.Fail, "考生考试已结束"); } var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault(); if (achievement_model == null) { return Write(APICode.Fail, "考生成绩数据不存在"); } var exam_fault_list = DataBase.exam_fault_list.Where(a => a.ExamId == model.ExamId && a.ChoiceQuestion != "0").ToList(); var select_total_score = exam_fault_list.Sum(a => decimal.Parse(a.SelectSocre)); var fault_total_score = exam_fault_list.Sum(a => decimal.Parse(a.FaultScore)); var handler_score = exam_fault_list.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 user_fault_record_list = DataBase.user_fault_record_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).ToList(); decimal total_score = 0;//总分 var total_defect_score = decimal.Parse(TotalDefectScore); //组织树 var tree_list = ReadTree(); foreach (var item in model.Data) { var fault_model = new DataService.Model.pow_user_fault_record(); var root_device_name = ""; var device_name = ""; var exam_fault_model = exam_fault_list.Where(a => a.RootDeviceId == item.RootDeviceId && a.DeviceId == item.DeviceId && a.FaultId == item.FaultId).FirstOrDefault(); if (exam_fault_model != null) { if (exam_fault_model.FaultDesc == "导线未绑扎、扎线断股" || exam_fault_model.FaultDesc == "瓷瓶歪斜松动" || exam_fault_model.FaultDesc == "瓷瓶损坏") { item.Value = ""; } if (item.Value.Contains("东侧") || item.Value.Contains("北侧") || item.Value.Contains("西侧")) { item.Value = item.Value + "拉线"; } } if (!string.IsNullOrEmpty(item.Value)) { fault_model = user_fault_record_list.Where(a => a.FaultId == item.FaultId && a.RootDeviceId == item.RootDeviceId && a.DeviceId == item.DeviceId && a.Value == item.Value).FirstOrDefault(); } else { fault_model = user_fault_record_list.Where(a => a.FaultId == item.FaultId && a.RootDeviceId == item.RootDeviceId && a.DeviceId == item.DeviceId).FirstOrDefault(); } 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; } } } } } if (!string.IsNullOrEmpty(fault_model.UserFaultRecordId)) { var is_processing_score = "0"; if (fault_model.ChoiceQuestion != "0") { var right_key_content = new List(); var right_key_list = fault_model.RightKey.Split('|'); foreach (var right_key in right_key_list) { if (right_key == "A") { right_key_content.Add(fault_model.OptionA); } if (right_key == "B") { right_key_content.Add(fault_model.OptionB); } if (right_key == "C") { right_key_content.Add(fault_model.OptionC); } if (right_key == "D") { right_key_content.Add(fault_model.OptionD); } if (right_key == "E") { right_key_content.Add(fault_model.OptionE); } } 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 success_index = 0; var fault_index = 0; var answer_list = item.Answer.Split('|'); foreach (var answer_item in answer_list) { if (right_key_content.Contains(answer_item)) { success_index++; } else { fault_index++; } } if (success_index == right_key_list.Length && fault_index == 0) { is_processing_score = "1"; } if (is_processing_score == "1") { decimal processing_score = 0; processing_score = System.Decimal.Round((decimal.Parse(fault_model.HandlerScore) / total) * total_defect_score, 3); var item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷处理分值"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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 = processing_score; details_model.Type = "故障选择题处理"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = processing_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 + processing_score; } } } else { decimal processing_score = 0; processing_score = System.Decimal.Round((decimal.Parse(fault_model.HandlerScore) / total) * total_defect_score, 3); var item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷处理分值"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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 = processing_score; details_model.FaultDesc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item; details_model.ScoreType = "缺陷处理分值"; details_list.Add(details_model); } } } } } else { var success_index = 0; var fault_index = 0; var answer_list = item.Answer.Split('|'); foreach (var answer_item in answer_list) { if (right_key_content.Contains(answer_item)) { success_index++; } else { fault_index++; } } if (success_index == right_key_list.Length && fault_index == 0) { is_processing_score = "1"; } if (is_processing_score == "1") { decimal processing_score = 0; processing_score = System.Decimal.Round((decimal.Parse(fault_model.HandlerScore) / total) * total_defect_score, 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 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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 = processing_score; details_model.Type = "故障选择题处理"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = processing_score; details_model.ScoreType = "缺陷处理分值"; details_list.Add(details_model); total_score = total_score + processing_score; } } } else { decimal processing_score = 0; processing_score = System.Decimal.Round((decimal.Parse(fault_model.HandlerScore) / total) * total_defect_score, 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 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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 = 0; details_model.Type = "故障选择题处理"; details_model.CreateTime = DateTime.Now; details_model.TotalScore = processing_score; details_model.ScoreType = "缺陷处理分值"; details_list.Add(details_model); } } } } } fault_model.Answer = item.Answer; fault_model.IsProcessingScore = is_processing_score; //record_list.Add(fault_model); } } } var fault_list = model.Data.Select(a => a.FaultId).ToList(); //本地数据库正确数据里有,用户选择数据里没有,少选 var correct_data = exam_fault_list.Where(s => s.ChoiceQuestion != "0" && s.SpecificSimulation == "选择题" && !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) { decimal processing_score = 0; processing_score = System.Decimal.Round((decimal.Parse(item.HandlerScore) / total) * total_defect_score, 3); var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + "缺陷处理分值"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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 = processing_score; details_model.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc; details_model.ScoreType = "缺陷处理分值"; details_list.Add(details_model); } } } else { foreach (var position_item in value_list) { decimal processing_score = 0; processing_score = System.Decimal.Round((decimal.Parse(item.HandlerScore) / total) * total_defect_score, 3); var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷处理分值"; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.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 DataService.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 = processing_score; details_model.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item; details_model.ScoreType = "缺陷处理分值"; details_list.Add(details_model); } } } } } if (details_list.Count > 0) { DataBase.achievement_details_list.AddRange(details_list); } achievement_model.TotalScore = achievement_model.TotalScore + total_score; return Write(APICode.Success, "成功"); } catch (Exception) { return Write(APICode.Fail, "失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } else { return Write(APICode.Fail, "请求参数无数据"); } } /// /// Post 上传故障排故数据接口 /// /// 参数 /// 反序列化返回的值失败,代表请求接口失败 public string AddFaultOperation(string url, string parameter) { //System.IO.File.AppendAllText(@"D:\zy\" + "AddFaultOperation.txt", "parameter:" + parameter); var model = JsonConvert.DeserializeObject(parameter); if (model != null) { var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault(); if (user_exam_model != null) { try { if (user_exam_model.Status == "已结束") { Write(APICode.Fail, "考生考试已结束"); } var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault(); if (achievement_model == null) { Write(APICode.Fail, "考生成绩数据不存在"); } var exam_fault_list = DataBase.exam_fault_list.Where(a => a.ExamId == model.ExamId && a.ChoiceQuestion != "0").ToList(); var select_total_score = exam_fault_list.Sum(a => decimal.Parse(a.SelectSocre)); var fault_total_score = exam_fault_list.Sum(a => decimal.Parse(a.FaultScore)); var handler_score = exam_fault_list.Sum(a => decimal.Parse(a.HandlerScore)); var total = select_total_score + fault_total_score + handler_score;//总分 var add_details_model = new DataService.Model.pow_achievement_details(); var delete_details_model = new DataService.Model.pow_achievement_details(); var user_fault_model = new DataService.Model.pow_user_fault(); var correct_model = new DataService.Model.pow_exam_fault(); var total_defect_score = decimal.Parse(TotalDefectScore); var is_processing_score = "0"; //组织树 var tree_list = ReadTree(); var root_device_name = ""; var device_name = ""; if (model.Details != null) { user_fault_model = DataBase.user_fault_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId && a.FaultId == model.FaultId && a.RootDeviceId == model.RootDeviceId && a.DeviceId == model.Details.DeviceId).FirstOrDefault(); correct_model = exam_fault_list.Where(a => a.FaultId == model.FaultId && a.RootDeviceId == model.RootDeviceId && a.DeviceId == model.Details.DeviceId).FirstOrDefault(); if (user_fault_model != null) { var first_list = tree_list.Where(a => a.TowerId == user_fault_model.RootDeviceId).FirstOrDefault(); if (first_list != null) { root_device_name = first_list.Tower; if (first_list.TowerId != user_fault_model.DeviceId) { if (first_list.Data != null) { var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == user_fault_model.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 == user_fault_model.DeviceId).FirstOrDefault(); if (three_list != null) { device_name = three_list.Line; } } } } } } if (user_fault_model.FaultDesc == "配电箱名称牌缺失" || user_fault_model.FaultDesc == "出线电缆编号牌型号编写错误" || user_fault_model.FaultDesc == "无出线电缆名称牌" || user_fault_model.FaultDesc == "出线开关编号牌缺失" || user_fault_model.FaultDesc == "熔芯不匹配" || user_fault_model.FaultDesc == "熔芯损坏") { if (user_fault_model.FaultDesc == "熔芯不匹配") { if (!string.IsNullOrEmpty(model.Details.FaultLocation)) { var correct = correct_model.MultipleQuestion.Split('|').ToList(); if (correct.Contains(model.Details.FaultLocation)) { var multiple_value_list = new List(); if (!string.IsNullOrEmpty(user_fault_model.MultipleQuestion)) { multiple_value_list = user_fault_model.MultipleQuestion.Split('|').ToList(); } if (multiple_value_list.Contains(model.Details.FaultLocation)) { if (correct_model.FusibleCoreNormal == model.Details.CurreSelectDetail) { is_processing_score = "1"; multiple_value_list.Remove(model.Details.FaultLocation); } else { user_fault_model.FusibleCoreFault = model.Details.CurreSelectDetail; } } else { multiple_value_list.Add(model.Details.FaultLocation); user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list); } if (is_processing_score == "1") { user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list); if (multiple_value_list.Count == 0) { user_fault_model.ChoiceQuestion = "0"; } } else { if (user_fault_model.ChoiceQuestion == "0") { user_fault_model.ChoiceQuestion = "2"; user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list); } } } } } else if (user_fault_model.FaultDesc == "熔芯损坏") { if (!string.IsNullOrEmpty(model.Details.FaultLocation)) { var correct = correct_model.MultipleQuestion.Split('|').ToList(); if (correct.Contains(model.Details.FaultLocation)) { var multiple_value_list = new List(); if (!string.IsNullOrEmpty(user_fault_model.MultipleQuestion)) { multiple_value_list = user_fault_model.MultipleQuestion.Split('|').ToList(); } if (multiple_value_list.Contains(model.Details.FaultLocation)) { if (model.Details.CurreSelectDetail == "true") { is_processing_score = "1"; multiple_value_list.Remove(model.Details.FaultLocation); } } else { multiple_value_list.Add(model.Details.FaultLocation); user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list); } if (is_processing_score == "1") { user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list); if (multiple_value_list.Count == 0) { user_fault_model.ChoiceQuestion = "0"; } } else { if (user_fault_model.ChoiceQuestion == "0") { user_fault_model.ChoiceQuestion = "2"; user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list); } } } } } else if (user_fault_model.FaultDesc == "出线开关编号牌缺失") { if (model.Details.CurreSelectDetail == "411开关") { is_processing_score = "1"; user_fault_model.ChoiceQuestion = "0"; } else { if (user_fault_model.ChoiceQuestion == "0") { user_fault_model.ChoiceQuestion = "1"; } } } else if (user_fault_model.FaultDesc == "配电箱名称牌缺失") { if (model.Details.CurreSelectDetail.Replace("配电箱名牌-", "") == user_exam_model.PlatformAreaName) { is_processing_score = "1"; user_fault_model.ChoiceQuestion = "0"; } else { if (user_fault_model.ChoiceQuestion == "0") { user_fault_model.ChoiceQuestion = "1"; } } } else if (user_fault_model.FaultDesc == "无出线电缆名称牌") { if (model.Details.CurreSelectDetail.Replace("电缆名称牌-411#", "") == user_exam_model.PlatformAreaName) { is_processing_score = "1"; user_fault_model.ChoiceQuestion = "0"; } else { if (user_fault_model.ChoiceQuestion == "0") { user_fault_model.ChoiceQuestion = "1"; } } } else if (user_fault_model.FaultDesc == "出线电缆编号牌型号编写错误") { if (model.Details.CurreSelectDetail.Replace("电缆名称牌-411#", "") == user_exam_model.PlatformAreaName) { is_processing_score = "1"; user_fault_model.ChoiceQuestion = "0"; } else { if (user_fault_model.ChoiceQuestion == "0") { user_fault_model.ChoiceQuestion = "1"; } } } user_fault_model.CurreSelectDetail = model.Details.CurreSelectDetail; if (is_processing_score == "1") { decimal processing_score = 0; processing_score = System.Decimal.Round((decimal.Parse(correct_model.HandlerScore) / total) * total_defect_score, 3); var item_name = user_fault_model.FaultDesc + "-" + "缺陷处理分值"; if (!string.IsNullOrEmpty(model.Details.FaultLocation)) { item_name = user_fault_model.FaultDesc + "-" + model.Details.FaultLocation.Replace("配电箱名牌-", "").Replace("电缆名称牌-411#", "") + "-" + "缺陷处理分值"; } item_name = root_device_name + "-" + device_name + "-" + item_name; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); if (achievement_details_model != null) { delete_details_model = achievement_details_model; //update_details_model.DetailsId = achievement_details_model.DetailsId; //update_details_model.AchievementId = achievement_model.AchievementId; //update_details_model.ItemName = item_name; //update_details_model.ItemizedScore = processing_score; //update_details_model.Type = "故障排故处理"; //update_details_model.CreateTime = DateTime.Now; //update_details_model.TotalScore = processing_score; } else { add_details_model.DetailsId = Guid.NewGuid().ToString("N"); add_details_model.AchievementId = achievement_model.AchievementId; add_details_model.ItemName = item_name; add_details_model.ItemizedScore = processing_score; add_details_model.Type = "故障排故处理"; add_details_model.CreateTime = DateTime.Now; add_details_model.TotalScore = processing_score; add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", ""); add_details_model.ScoreType = "缺陷处理分值"; } } else { if (user_fault_model.ChoiceQuestion != "0") { decimal processing_score = 0; processing_score = System.Decimal.Round((decimal.Parse(correct_model.HandlerScore) / total) * total_defect_score, 3); var item_name = user_fault_model.FaultDesc + "-" + "缺陷处理分值"; if (!string.IsNullOrEmpty(model.Details.FaultLocation)) { item_name = user_fault_model.FaultDesc + "-" + model.Details.FaultLocation.Replace("配电箱名牌-", "").Replace("电缆名称牌-411#", "") + "-" + "缺陷处理分值"; } item_name = root_device_name + "-" + device_name + "-" + item_name; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); //if (achievement_details_model != null) //{ // delete_details_model = achievement_details_model; //} if (achievement_details_model != null) { delete_details_model = achievement_details_model; } else { add_details_model.DetailsId = Guid.NewGuid().ToString("N"); add_details_model.AchievementId = achievement_model.AchievementId; add_details_model.ItemName = item_name; add_details_model.ItemizedScore = 0; add_details_model.Type = "故障排故处理"; add_details_model.CreateTime = DateTime.Now; add_details_model.TotalScore = processing_score; add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", ""); add_details_model.ScoreType = "缺陷处理分值"; } } } } else { if (!string.IsNullOrEmpty(model.Details.FaultLocation)) { if (!string.IsNullOrEmpty(correct_model.MultipleQuestion)) { var multiple_value_list = correct_model.MultipleQuestion.Split('|').ToList(); if (multiple_value_list.Contains(model.Details.FaultLocation)) { is_processing_score = "1"; multiple_value_list.Remove(model.Details.FaultLocation); } if (is_processing_score == "1") { user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list); if (multiple_value_list.Count == 0) { user_fault_model.ChoiceQuestion = "0"; } } } if (!string.IsNullOrEmpty(correct_model.Position)) { var multiple_value_list = correct_model.Position.Split('|').ToList(); if (multiple_value_list.Contains(model.Details.FaultLocation)) { is_processing_score = "1"; multiple_value_list.Remove(model.Details.FaultLocation); } if (is_processing_score == "1") { user_fault_model.Position = string.Join("|", multiple_value_list); if (multiple_value_list.Count == 0) { user_fault_model.ChoiceQuestion = "0"; } } } } else { user_fault_model.ChoiceQuestion = "0"; is_processing_score = "1"; } if (is_processing_score == "1") { decimal processing_score = 0; processing_score = System.Decimal.Round((decimal.Parse(correct_model.HandlerScore) / total) * total_defect_score, 3); var item_name = user_fault_model.FaultDesc + "-" + "缺陷处理分值"; if (!string.IsNullOrEmpty(model.Details.FaultLocation)) { item_name = user_fault_model.FaultDesc + "-" + model.Details.FaultLocation + "-" + "缺陷处理分值"; } item_name = root_device_name + "-" + device_name + "-" + item_name; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); if (achievement_details_model != null) { achievement_details_model.ItemName = item_name; achievement_details_model.ItemizedScore = processing_score; achievement_details_model.Type = "故障排故处理"; achievement_details_model.CreateTime = DateTime.Now; achievement_details_model.TotalScore = processing_score; achievement_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", ""); achievement_details_model.ScoreType = "缺陷处理分值"; } else { add_details_model.DetailsId = Guid.NewGuid().ToString("N"); add_details_model.AchievementId = achievement_model.AchievementId; add_details_model.ItemName = item_name; add_details_model.ItemizedScore = processing_score; add_details_model.Type = "故障排故处理"; add_details_model.CreateTime = DateTime.Now; add_details_model.TotalScore = processing_score; add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", ""); add_details_model.ScoreType = "缺陷处理分值"; } } } } else if (model.Screen != null) { #region 断路器 user_fault_model = DataBase.user_fault_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId && a.FaultId == model.FaultId && a.RootDeviceId == model.RootDeviceId && a.DeviceId == model.Screen.DeviceId).FirstOrDefault(); if (user_fault_model != null) { var first_list = tree_list.Where(a => a.TowerId == user_fault_model.RootDeviceId).FirstOrDefault(); if (first_list != null) { root_device_name = first_list.Tower; if (first_list.TowerId != user_fault_model.DeviceId) { if (first_list.Data != null) { var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == user_fault_model.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 == user_fault_model.DeviceId).FirstOrDefault(); if (three_list != null) { device_name = three_list.Line; } } } } } } correct_model = exam_fault_list.Where(a => a.FaultId == model.FaultId && a.RootDeviceId == model.RootDeviceId && a.DeviceId == model.Screen.DeviceId).FirstOrDefault(); if (null == correct_model) { return Write(APICode.Success, "故障:" + model.FaultDesc + ":无需操作!"); } var name_list = user_fault_model.Name.Split('|'); ArrayList name_arry = new ArrayList(name_list); var value_list = user_fault_model.Value.Split('|'); var success_index = 0; var value = new List(); if (user_fault_model.FaultDesc == "漏电保护设置不合理" || user_fault_model.FaultDesc == "欠压保护设置错误" || user_fault_model.FaultDesc == "过压保护设置错误") { if (user_fault_model.FaultDesc == "欠压保护设置错误") value = user_exam_model.UndervoltageProtection.Split('|').ToList(); else if (user_fault_model.FaultDesc == "过压保护设置错误") value = user_exam_model.OvervoltageProtection.Split('|').ToList(); else value = user_exam_model.LeakageProtection.Split('|').ToList(); if (value.Count > 1 && !string.IsNullOrEmpty(value[0])) { foreach (var item in model.Screen.Params) { if (item.Name == "档位") { if (item.Value == value[0]) { success_index++; } } else if (item.Name == "开关") { if (item.Value == value[1]) { success_index++; } } } } } else if (user_fault_model.FaultDesc == "过载保护设置错误") { value = user_exam_model.OverloadProtection.Split('|').ToList(); if (value.Count > 1 && !string.IsNullOrEmpty(value[0])) { foreach (var item in model.Screen.Params) { if (item.Name == "ln1") { if (item.Value == value[0]) { success_index++; } } else if (item.Name == "保护") { if (item.Value == value[1]) { success_index++; } } } } } else if (user_fault_model.FaultDesc == "短路延时保护设置错误" || user_fault_model.FaultDesc == "短路瞬时保护设置错误") { if (user_fault_model.FaultDesc == "短路瞬时保护设置错误") value = user_exam_model.ShortCircuitProtection.Split('|').ToList(); else value = user_exam_model.ShortCircuitDelayProtection.Split('|').ToList(); if (value.Count > 1 && !string.IsNullOrEmpty(value[0])) { foreach (var item in model.Screen.Params) { if (item.Name == "ln2") { if (item.Value == value[0]) { success_index++; } } else if (item.Name == "保护") { if (item.Value == value[1]) { success_index++; } } } } } else if (user_fault_model.FaultDesc == "缺相保护设置错误") { value = user_exam_model.PhaseLossProtection.Split('|').ToList(); if (!string.IsNullOrEmpty(value[0])) { foreach (var item in model.Screen.Params) { if (item.Name == "开关") { if (item.Value == value[0]) { success_index++; } } } } } foreach (var item in model.Screen.Params) { var subscript = name_arry.IndexOf(item.Name); if (subscript > -1) { value_list[subscript] = item.Value; } } user_fault_model.Value = string.Join("|", value_list); if (success_index == value.Count) { user_fault_model.ChoiceQuestion = "0"; decimal processing_score = 0; processing_score = System.Decimal.Round((decimal.Parse(correct_model.HandlerScore) / total) * total_defect_score, 3); var item_name = user_fault_model.FaultDesc + "-" + "缺陷处理分值"; item_name = root_device_name + "-" + device_name + "-" + item_name; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); if (achievement_details_model != null) { delete_details_model = achievement_details_model; //update_details_model.DetailsId = achievement_details_model.DetailsId; //update_details_model.AchievementId = achievement_model.AchievementId; //update_details_model.ItemName = item_name; //update_details_model.ItemizedScore = processing_score; //update_details_model.Type = "故障排故处理"; //update_details_model.TotalScore= processing_score; //update_details_model.CreateTime = DateTime.Now; } else { add_details_model.DetailsId = Guid.NewGuid().ToString("N"); add_details_model.AchievementId = achievement_model.AchievementId; add_details_model.ItemName = item_name; add_details_model.ItemizedScore = processing_score; add_details_model.Type = "故障排故处理"; add_details_model.TotalScore = processing_score; add_details_model.CreateTime = DateTime.Now; add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", ""); add_details_model.ScoreType = "缺陷处理分值"; } } else { if (user_fault_model.ChoiceQuestion == "0") { decimal processing_score = 0; processing_score = System.Decimal.Round((decimal.Parse(correct_model.HandlerScore) / total) * total_defect_score, 3); user_fault_model.ChoiceQuestion = "1"; var item_name = user_fault_model.FaultDesc + "-" + "缺陷处理分值"; item_name = root_device_name + "-" + device_name + "-" + item_name; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); if (achievement_details_model != null) { delete_details_model = achievement_details_model; } else { add_details_model.DetailsId = Guid.NewGuid().ToString("N"); add_details_model.AchievementId = achievement_model.AchievementId; add_details_model.ItemName = item_name; add_details_model.ItemizedScore = 0; add_details_model.Type = "故障排故处理"; add_details_model.TotalScore = processing_score; add_details_model.CreateTime = DateTime.Now; add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", ""); add_details_model.ScoreType = "缺陷处理分值"; } } } #endregion } user_fault_model.IsProcessingScore = is_processing_score; if (add_details_model != null) { DataBase.achievement_details_list.Add(add_details_model); } if (delete_details_model != null) { DataBase.achievement_details_list.RemoveAll(a => a.DetailsId == delete_details_model.DetailsId); } return Write(APICode.Success, "成功"); } catch (Exception) { return Write(APICode.Fail, "失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } else { return Write(APICode.Fail, "请求参数无数据"); } } /// /// Post 结束故障排故处理接口 /// /// 考试id /// 用户id /// 反序列化返回的值失败,代表请求接口失败 public string EndFaultOperation(string url, string ExamId, string UserId) { //System.IO.File.AppendAllText(@"D:\zy\" + "EndFaultOperation.txt", "ExamId:" + ExamId + ",UserId:" + UserId); var details_list = new List(); var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (user_exam_model != null) { try { if (user_exam_model.Status == "已结束") { return Write(APICode.Fail, "考生考试已结束"); } var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (achievement_model == null) { return Write(APICode.Fail, "考生成绩数据不存在"); } var exam_fault = DataBase.exam_fault_list.Where(a => a.ExamId == ExamId && a.ChoiceQuestion != "0").OrderBy(a => a.CreateTime).ToList(); var user_fault = DataBase.user_fault_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).ToList(); var select_total_score = exam_fault.Sum(a => decimal.Parse(a.SelectSocre)); var fault_total_score = exam_fault.Sum(a => decimal.Parse(a.FaultScore)); var handler_score = exam_fault.Sum(a => decimal.Parse(a.HandlerScore)); var total = select_total_score + fault_total_score + handler_score;//总分 var total_defect_score = decimal.Parse(TotalDefectScore); //组织树 var tree_list = ReadTree(); var new_exam_fault = exam_fault.Where(a => a.SpecificSimulation == "现场处理").ToList(); foreach (var item in new_exam_fault) { var root_device_name = ""; var device_name = ""; var user_fault_model = user_fault.Where(a => a.FaultId == item.FaultId).FirstOrDefault(); if (user_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; } } } } } if (item.ChoiceQuestion == user_fault_model.ChoiceQuestion) { var value_list = new List(); var select_value_list = new List(); if (item.FaultDesc == "配电箱箱门未加锁" || item.FaultDesc == "柜门与箱体没有链接线") { if (!string.IsNullOrEmpty(item.Position)) { value_list = item.Position.Split('|').ToList(); select_value_list = user_fault_model.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(); select_value_list = user_fault_model.MultipleQuestion.Split('|').ToList(); } } //if (!string.IsNullOrEmpty(item.MultipleQuestion)) //{ // value_list = item.MultipleQuestion.Split('|').ToList(); // select_value_list = user_fault_model.MultipleQuestion.Split('|').ToList(); //} } } if (value_list.Count == 0) { decimal processing_score = 0; processing_score = System.Decimal.Round((decimal.Parse(item.HandlerScore) / total) * total_defect_score, 3); var item_name = user_fault_model.FaultDesc + "-" + "缺陷处理分值"; item_name = root_device_name + "-" + device_name + "-" + item_name; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); if (achievement_details_model == null) { var add_details_model = new DataService.Model.pow_achievement_details(); add_details_model.DetailsId = Guid.NewGuid().ToString("N"); add_details_model.AchievementId = achievement_model.AchievementId; add_details_model.ItemName = item_name; add_details_model.ItemizedScore = 0; add_details_model.Type = "故障排故处理"; add_details_model.CreateTime = DateTime.Now; add_details_model.TotalScore = processing_score; add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", ""); add_details_model.ScoreType = "缺陷处理分值"; details_list.Add(add_details_model); } } else { foreach (var position_item in value_list) { if (select_value_list.Contains(position_item)) { decimal processing_score = 0; processing_score = System.Decimal.Round((decimal.Parse(item.HandlerScore) / total) * total_defect_score, 3); var item_name = user_fault_model.FaultDesc + "-" + position_item + "-" + "缺陷处理分值"; item_name = root_device_name + "-" + device_name + "-" + item_name; var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault(); if (achievement_details_model == null) { var add_details_model = new DataService.Model.pow_achievement_details(); add_details_model.DetailsId = Guid.NewGuid().ToString("N"); add_details_model.AchievementId = achievement_model.AchievementId; add_details_model.ItemName = item_name; add_details_model.ItemizedScore = 0; add_details_model.Type = "故障排故处理"; add_details_model.CreateTime = DateTime.Now; add_details_model.TotalScore = processing_score; add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", ""); add_details_model.ScoreType = "缺陷处理分值"; details_list.Add(add_details_model); } } } } } } } var details = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.Type == "故障排故处理").ToList(); var total_score = details.Sum(a => a.ItemizedScore); if (details_list.Count > 0) { DataBase.achievement_details_list.AddRange(details_list); } achievement_model.TotalScore = achievement_model.TotalScore + total_score.Value; return Write(APICode.Success, "成功"); } catch (Exception) { return Write(APICode.Fail, "失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } /// /// Post 选择台区上传接口 /// /// 考试id /// 考生id /// 选择的台区 /// 反序列化返回的值失败,代表请求接口失败 public string SelectPlatformArea(string url, string ExamId, string UserId, string SelectPlatformArea) { //System.IO.File.AppendAllText(@"D:\zy\" + "SelectPlatformArea.txt", "ExamId:" + ExamId + ",UserId:" + UserId + ",SelectPlatformArea:" + SelectPlatformArea); var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (user_exam_model != null) { try { if (user_exam_model.Status == "已结束") { return Write(APICode.Fail, "考生考试已结束"); } user_exam_model.SelectPlatformArea = SelectPlatformArea; if (SelectPlatformArea != user_exam_model.PlatformAreaName) { user_exam_model.IsScore = "1"; } return Write(APICode.Success, "成功"); } catch (Exception) { return Write(APICode.Fail, "失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } /// /// Post 更新验电结果接口 /// /// 考试id /// 考生id /// 类型 巡线、排故 /// 反序列化返回的值失败,代表请求接口失败 public string UpdateElectricity(string url, string ExamId, string UserId, string Type) { //System.IO.File.AppendAllText(@"D:\zy\" + "UpdateElectricity.txt", "ExamId:" + ExamId + ",UserId:" + UserId + ",Type:" + Type); var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (user_exam_model != null) { try { if (user_exam_model.Status == "已结束") { return Write(APICode.Fail, "考生考试已结束"); } if (Type == "巡线") { user_exam_model.LineIsScore = "1"; } else if (Type == "排故") { user_exam_model.FaultIsScore = "1"; } return Write(APICode.Success, "成功"); } catch (Exception) { return Write(APICode.Fail, "失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } /// /// Post 更新爬杆结果 /// /// 考试id /// 考生id /// 反序列化返回的值失败,代表请求接口失败 public string UpdateClimbrod(string url, string ExamId, string UserId) { //System.IO.File.AppendAllText(@"D:\zy\" + "UpdateClimbrod.txt", "ExamId:" + ExamId + ",UserId:" + UserId); var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (user_exam_model != null) { try { if (user_exam_model.Status == "已结束") { return Write(APICode.Fail, "考生考试已结束"); } user_exam_model.ClimbrodIsScore = "1"; return Write(APICode.Success, "成功"); } catch (Exception) { return Write(APICode.Fail, "失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } /// /// Post 更新未分闸状态拉合熔芯扣分接口 /// /// 考试id /// 考生id /// 反序列化返回的值失败,代表请求接口失败 public string UpdateFusibleCore(string url, string ExamId, string UserId) { //System.IO.File.AppendAllText(@"D:\zy\" + "UpdateFusibleCore.txt", "ExamId:" + ExamId + ",UserId:" + UserId); var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (user_exam_model != null) { try { if (user_exam_model.Status == "已结束") { return Write(APICode.Fail, "考生考试已结束"); } user_exam_model.FusibleCoreIsScore = "1"; return Write(APICode.Success, "成功"); } catch (Exception) { return Write(APICode.Fail, "失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } /// /// Post 更新考试环节接口 /// /// 考试id /// 考生id /// 选择的台区 /// 反序列化返回的值失败,代表请求接口失败 public string UpdateExaminationLink(string url, string ExamId, string UserId, string ExaminationLink) { //System.IO.File.AppendAllText(@"D:\zy\" + "UpdateExaminationLink.txt", "ExamId:" + ExamId + ",UserId:" + UserId + ",ExaminationLink:" + ExaminationLink); var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (user_exam_model != null) { try { if (user_exam_model.Status == "已结束") { return Write(APICode.Fail, "考生考试已结束"); } user_exam_model.ExaminationLink = ExaminationLink; return Write(APICode.Success, "成功"); } catch (Exception) { return Write(APICode.Fail, "失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } /// /// Post 更新围栏接口 /// /// 考试id /// 考生id /// 反序列化返回的值失败,代表请求接口失败 public string UpdateEnclosure(string url, string ExamId, string UserId) { //System.IO.File.AppendAllText(@"D:\zy\" + "UpdateEnclosure.txt", "ExamId:" + ExamId + ",UserId:" + UserId); var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (user_exam_model != null) { try { if (user_exam_model.Status == "已结束") { return Write(APICode.Fail, "考生考试已结束"); } var enclosure_fault_score = decimal.Parse(EnclosureFaultScore); var value = decimal.Parse(user_exam_model.EnclosureIsScore) - enclosure_fault_score; if (value < 0) { value = 0; } user_exam_model.EnclosureIsScore = value.ToString(); return Write(APICode.Success, "成功"); } catch (Exception) { return Write(APICode.Fail, "失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } /// /// Post 更新考试时长接口 /// /// 用户id /// 考试id /// 剩余考试时长 /// 反序列化返回的值失败,代表请求接口失败 public string UpdateExaminationDuration(string url, string UserId, string ExamId, string ExaminationDuration) { //System.IO.File.AppendAllText(@"D:\zy\" + "UpdateExaminationDuration.txt", "ExamId:" + ExamId + ",UserId:" + UserId + ",ExaminationDuration:" + ExaminationDuration); var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (user_exam_model != null) { try { user_exam_model.ExaminationDuration = ExaminationDuration; return Write(APICode.Success, "更新考试时长成功"); } catch (Exception) { return Write(APICode.Fail, "更新考试时长失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } /// /// Post 更新场景设备状态接口 /// /// 用户id /// 考试id /// 场景设备状态 /// 反序列化返回的值失败,代表请求接口失败 public string UpdateRestoreSceneMsg(string url, string UserId, string ExamId, string RestoreSceneMsg) { ////System.IO.File.AppendAllText(@"D:\zy\" + "UpdateRestoreSceneMsg.txt", "ExamId:" + ExamId + ",UserId:" + UserId + ",RestoreSceneMsg:" + RestoreSceneMsg); var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (user_exam_model != null) { try { user_exam_model.RestoreSceneMsg = RestoreSceneMsg; return Write(APICode.Success, "更新场景设备状态成功"); } catch (Exception) { return Write(APICode.Fail, "更新场景设备状态失败"); } } else { return Write(APICode.Fail, "考生考试信息不存在"); } } /// /// Post 获取并更新考生考试时间 /// /// 用户id /// 考试id /// 1 读取, 0 更新 /// 反序列化返回的值失败,代表请求接口失败 public string UpdateUserExamTime(string url, string UserId, string ExamId, string Read) { //System.IO.File.AppendAllText(@"D:\zy\" + "UpdateUserExamTime.txt", "ExamId:" + ExamId + ",UserId:" + UserId + ",Read:" + Read); var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault(); if (user_exam_model != null) { var Last = user_exam_model.UpdateTime.HasValue ? user_exam_model.UpdateTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : ""; if (Read == "1") { var data = new { last = Last, now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msg = "查询考试时间成功!" }; return Write(APICode.Success, data); } else { try { user_exam_model.UpdateTime = DateTime.Now; return Write(APICode.Success, "更新考试时间成功!"); } catch (Exception) { return Write(APICode.Fail, "更新考试时间失败"); } } } else { //Write(APICode.Fail, "考生考试信息不存在"); var data = new { last = "", now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msg = "考生考试信息不存在" }; return Write(APICode.Fail, data); } } /// /// 计算操作票得分 /// /// 总分 /// 保存未扣分项 /// 用户操作票 /// 答案操作票 /// public int ComputeTicketScore(ref int total, List list_TicketId_HasScore, List list_user_operation_ticket, List list_exam_operation_ticket) { for (int i = 0; i < list_exam_operation_ticket.Count; i++) { var item_exam = list_exam_operation_ticket[i]; var item_user = list_user_operation_ticket.FirstOrDefault(s => s.OperationTicketId == item_exam.OperationTicketId); //没找到答案 扣1分 if (null == item_user) { total--; if (total <= 0) { return 0; } continue; } //找到答案 扣除距离分 var exam_index = i; var user_Index = list_user_operation_ticket.IndexOf(item_user); var distance = user_Index - exam_index; //不扣分项 if (distance == 0) { list_TicketId_HasScore.Add(item_user.OperationTicketId); } total = total - distance; if (total <= 0) { return 0; } //剩余用户答案 var remain_user_operation_ticket = new List(); for (var jindex = user_Index + 1; jindex < list_user_operation_ticket.Count; jindex++) { remain_user_operation_ticket.Add(list_user_operation_ticket[jindex]); } //剩余标准答案 var remain_exam_operation_ticket = new List(); for (var e_index = exam_index + 1; e_index < list_exam_operation_ticket.Count; e_index++) { remain_exam_operation_ticket.Add(list_exam_operation_ticket[e_index]); } //多余的用户操作票扣分 if (remain_exam_operation_ticket.Count <= 0) { total = total - remain_user_operation_ticket.Count; if (total <= 0) { return 0; } } return ComputeTicketScore(ref total, list_TicketId_HasScore, remain_user_operation_ticket, remain_exam_operation_ticket); } return total; } /// /// 获取步骤得分 /// /// /// public int get_ticket_proc_scrore(List list_proc) { int total = 5; foreach (var item in list_proc) { //未做步骤直接扣1分 if (item.State == 0) { total = total - 1; if (total <= 0) { return 0; } } //已做步骤按真实情况扣分或不扣分 else { total = total - item.Score; if (total <= 0) { return 0; } } } return total; } public List ReadTree() { var tree_list = new List(); string fault_tree_file = DataBase.path + "/Json/FaultTree.json"; //读取json文件 using (StreamReader file = File.OpenText(fault_tree_file)) { using (JsonTextReader reader = new JsonTextReader(file)) { tree_list = JsonConvert.DeserializeObject>(JToken.ReadFrom(reader).ToString()); } } return tree_list; } private string Write(APICode code, object data) { return GetJsonWithCode(code, data); } /// /// 获取带状态码的JSON字符串 /// /// /// /// private string GetJsonWithCode(APICode code, object dataObj) { return Newtonsoft.Json.JsonConvert.SerializeObject(new { code = (int)code, state = code.ToString(), data = dataObj }); } private string GetResult(bool _state, object _data, string _message) { var iso = new IsoDateTimeConverter(); iso.DateTimeFormat = "yyyy-MM-dd HH:mm:ss"; return JsonConvert.SerializeObject(new Result(_state, _data, _message), iso); } protected string GetResult(bool _state, string _message) { return JsonConvert.SerializeObject(new Result(_state, _message)); } } public class Result { public bool state = false; public string message = ""; public object data = null; public Result(bool _state, object _data, string _message) { this.state = _state; this.data = _data; this.message = _message; } public Result(bool _state, object _data) { this.state = _state; this.data = _data; } public Result(bool _state, string _message) { this.state = _state; this.message = _message; } } /// /// 接口状态码 /// public enum APICode { /// /// 成功 /// Success, /// /// 失败 /// Fail } }