using Competition.Common.Util; using CompetitionAPI.api.unity; using CompetitionAPI.Util; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Security.Claims; namespace CompetitionAPI.Controllers.unity { [Route("unity/[controller]")] [ApiController] public class GetExamController : Controller { private readonly IWebHostEnvironment _webHostEnvironment; Competition.Mysql.BLL.pow_exam exam_bll = new Competition.Mysql.BLL.pow_exam(); Competition.Mysql.BLL.pow_exam_tool exam_tool_bll = new Competition.Mysql.BLL.pow_exam_tool(); Competition.Mysql.BLL.pow_user_tool user_tool_bll = new Competition.Mysql.BLL.pow_user_tool(); Competition.Mysql.BLL.pow_exam_operation_ticket exam_operation_ticket_bll = new Competition.Mysql.BLL.pow_exam_operation_ticket(); Competition.Mysql.BLL.pow_user_operation_ticket user_operation_ticket_bll = new Competition.Mysql.BLL.pow_user_operation_ticket(); Competition.Mysql.BLL.pow_user_operation_proc_ticket user_operation_proc_ticket_bll = new Competition.Mysql.BLL.pow_user_operation_proc_ticket(); Competition.Mysql.BLL.pow_user_fault user_fault_bll = new Competition.Mysql.BLL.pow_user_fault(); Competition.Mysql.BLL.pow_exam_fault exam_fault_bll = new Competition.Mysql.BLL.pow_exam_fault(); Competition.Mysql.BLL.pow_user_exam user_exam_bll = new Competition.Mysql.BLL.pow_user_exam(); Competition.Mysql.BLL.pow_exam_users exam_users_bll = new Competition.Mysql.BLL.pow_exam_users(); Competition.Mysql.BLL.pow_user_fault_record user_fault_record_bll = new Competition.Mysql.BLL.pow_user_fault_record(); Competition.Mysql.BLL.pow_video video_bll = new Competition.Mysql.BLL.pow_video(); Competition.Mysql.BLL.pow_achievement achievement_bll = new Competition.Mysql.BLL.pow_achievement(); public GetExamController(IWebHostEnvironment webHostEnvironment) { _webHostEnvironment = webHostEnvironment; } /// /// 获取当前时间已发布的考试信息接口 /// /// /// [Authorize] [HttpPost] [APIFilter] public JsonResult Index([FromForm] GetExamResquest req) { try { //从JWT令牌中获取用户ID,这里假设用户ID存储在ClaimTypes.NameIdentifier中 //string userId = User.FindFirstValue(ClaimTypes.NameIdentifier); //string role_id = User.FindFirstValue(ClaimTypes.Role); var model = new GetExamResponse(); var now = DateTime.Now; var exam = exam_bll.GetModelList(" ExamId='" + req.ExamId + "' ").FirstOrDefault(); if (exam == null) { return Json(Tool.GetJsonWithCode(APICode.Fail, "数据不存在")); } var is_exam = false; if (exam.Type == "实训") { var old_achievement_model = achievement_bll.GetModelList(string.Format(" UserId='{0}' and ExamId='{1}' ", req.UserId, req.ExamId)).FirstOrDefault(); if (old_achievement_model != null) { var video_list = video_bll.GetModelList(string.Format(" AchievementId='{0}' ", old_achievement_model.AchievementId)); var delete_list = user_fault_bll.GetModelList(string.Format(" ExamId='{0}' and UserId='{1}' and FaultDesc='出线电缆编号牌型号编写错误' ", req.ExamId, req.UserId)); //批量删除 if (achievement_bll.OperationDelAllData(new List() { new Competition.Mysql.Other.achievement_data() { AchievementId = old_achievement_model.AchievementId, UserId = req.UserId, ExamId = req.ExamId } }) > 0) { foreach (var item in video_list) { if (!string.IsNullOrEmpty(item.VideoPath)) { string path = _webHostEnvironment.WebRootPath + item.VideoPath; if (System.IO.File.Exists(path)) { System.IO.File.Delete(path); } } } foreach (var item in delete_list) { string path1 = _webHostEnvironment.WebRootPath + item.SensitiveKnowledge; if (System.IO.File.Exists(path1)) { System.IO.File.Delete(path1); } string path2 = _webHostEnvironment.WebRootPath + item.Minhui; if (System.IO.File.Exists(path2)) { System.IO.File.Delete(path2); } string path3 = _webHostEnvironment.WebRootPath + item.SensitiveLine; if (System.IO.File.Exists(path3)) { System.IO.File.Delete(path3); } string path4 = _webHostEnvironment.WebRootPath + item.Allergy; if (System.IO.File.Exists(path4)) { System.IO.File.Delete(path4); } string path5 = _webHostEnvironment.WebRootPath + item.GracefulGraceful; if (System.IO.File.Exists(path5)) { System.IO.File.Delete(path5); } } is_exam = true; } else { return Json(Tool.GetJsonWithCode(APICode.Fail, "清空之前数据失败")); } } else { is_exam = true; } } else { var user_exam_model = user_exam_bll.GetModelList(" UserId='" + req.UserId + "' and ExamId='" + req.ExamId + "' ").FirstOrDefault(); if (user_exam_model != null) { model.ExamId = user_exam_model.ExamId; model.ExamName = user_exam_model.ExamName; model.Scene = user_exam_model.SceneName; model.PlatformArea = user_exam_model.PlatformAreaName; model.Line = user_exam_model.LineName; model.LinePatrolDate = user_exam_model.LinePatrolDate.Value; model.HandleDate = user_exam_model.HandleDate.Value; model.WorkOrderContent = user_exam_model.WorkOrderContent; model.BackgroundInformation = user_exam_model.BackgroundInformation; model.Status = user_exam_model.Status; model.ExaminationLink = user_exam_model.ExaminationLink; model.ExaminationDuration = user_exam_model.ExaminationDuration; model.RestoreSceneMsg = user_exam_model.RestoreSceneMsg; model.SelectPlatformArea = user_exam_model.SelectPlatformArea; var tool_list = user_tool_bll.GetModelList(" UserId='" + req.UserId + "' and ExamId='" + req.ExamId + "' and IsSelect='1' "); if (tool_list.Count > 0) { var line_patrol_tool_list = tool_list.Where(a => a.Purpose == "巡线").ToList(); var line_tool_list = new List(); foreach (var item in line_patrol_tool_list) { var line_tool_model = new Competition.Mysql.Other.exam_tool(); line_tool_model.ToolName = item.ToolName; line_tool_model.ToolType = item.ToolType; line_tool_model.ExamId = item.ExamId; line_tool_model.Purpose = item.Purpose; line_tool_model.Quantity = item.Quantity.Value; line_tool_list.Add(line_tool_model); } model.LinePatrolTool = line_tool_list; var troubleshooting_tool_list = tool_list.Where(a => a.Purpose == "排故").ToList(); var troub_tool_list = new List(); foreach (var item in troubleshooting_tool_list) { var troub_tool_model = new Competition.Mysql.Other.exam_tool(); troub_tool_model.ToolName = item.ToolName; troub_tool_model.ToolType = item.ToolType; troub_tool_model.ExamId = item.ExamId; troub_tool_model.Purpose = item.Purpose; troub_tool_model.Quantity = item.Quantity.Value; troub_tool_list.Add(troub_tool_model); } model.TroubleshootingTool = troub_tool_list; } var ticket_list = user_operation_proc_ticket_bll.GetModelList(" ExamId='" + req.ExamId + "' and UserId='" + req.UserId + "'"); if (ticket_list.Count > 0) { var power_failure = ticket_list.Where(a => a.Type == "停电").OrderBy(a => a.SerialNumber).ToList(); var power_failure_list = new List(); foreach (var item in power_failure) { var power_failure_model = new Competition.Mysql.Other.exam_operation_ticket(); power_failure_model.OperationTicketId = item.OperationTicketId; power_failure_model.SerialNumber = item.SerialNumber; power_failure_model.Type = item.Type; power_failure_model.Content = item.Content; power_failure_model.State = item.State; power_failure_list.Add(power_failure_model); } model.PowerFailure = power_failure_list; var power_transmission = ticket_list.Where(a => a.Type == "送电").OrderBy(a => a.SerialNumber).ToList(); var power_transmission_list = new List(); foreach (var item in power_transmission) { var power_transmission_model = new Competition.Mysql.Other.exam_operation_ticket(); power_transmission_model.OperationTicketId = item.OperationTicketId; power_transmission_model.SerialNumber = item.SerialNumber; power_transmission_model.Type = item.Type; power_transmission_model.Content = item.Content; power_transmission_model.State = item.State; power_transmission_list.Add(power_transmission_model); } model.PowerTransmission = power_transmission_list; } var user_ticket_list = user_operation_ticket_bll.GetModelList(" UserId='" + req.UserId + "' and ExamId='" + req.ExamId + "' "); if (user_ticket_list.Count > 0) { var power_failure = user_ticket_list.Where(a => a.Type == "停电").OrderBy(a => a.SerialNumber).ToList(); var select_power_failure_list = new List(); foreach (var item in power_failure) { var select_power_failure_model = new Competition.Mysql.Other.user_operation_ticket(); select_power_failure_model.OperationTicketId = item.OperationTicketId; select_power_failure_model.SerialNumber = item.SerialNumber; select_power_failure_model.Type = item.Type; select_power_failure_model.Content = item.Content; select_power_failure_list.Add(select_power_failure_model); } model.SelectPowerFailure = select_power_failure_list; var power_transmission = user_ticket_list.Where(a => a.Type == "送电").OrderBy(a => a.SerialNumber).ToList(); var select_power_transmission_list = new List(); foreach (var item in power_transmission) { var select_power_transmission_model = new Competition.Mysql.Other.user_operation_ticket(); select_power_transmission_model.OperationTicketId = item.OperationTicketId; select_power_transmission_model.SerialNumber = item.SerialNumber; select_power_transmission_model.Type = item.Type; select_power_transmission_model.Content = item.Content; select_power_transmission_list.Add(select_power_transmission_model); } model.SelectPowerTransmission = select_power_transmission_list; } var fault_list = user_fault_bll.GetModelList(" UserId='" + req.UserId + "' and ExamId='" + req.ExamId + "' order by CreateTime asc "); var scene_list = new List(); foreach (var item in fault_list) { var scene_model = new Competition.Mysql.Other.exam_scene(); scene_model.FaultId = item.FaultId; scene_model.FaultType = item.FaultType; scene_model.Type = item.Type; scene_model.FaultDesc = item.FaultDesc; scene_model.RootDeviceId = item.RootDeviceId; if (item.Type == "断路器") { var screen = new Competition.Mysql.Other.screen_data(); screen.DeviceId = item.DeviceId; screen.ChoiceQuestion = item.ChoiceQuestion; var setting_list = new List(); var name_list = item.Name.Split('|'); var value_list = item.Value.Split('|'); for (int i = 0; i < name_list.Length; i++) { var setting_model = new Competition.Mysql.Other.setting_data(); setting_model.Name = name_list[i]; setting_model.Value = value_list[i]; setting_list.Add(setting_model); } screen.Settings = item.Settings; screen.Params = setting_list; scene_model.Screen = screen; } else { var details = new Competition.Mysql.Other.fault_details(); details.DeviceId = item.DeviceId; details.DefectLevel = item.DefectLevel; details.SpecificSimulation = item.SpecificSimulation; details.DegreesSerialNumber = item.DegreesSerialNumber; details.DegreesValue = item.DegreesValue; details.ChoiceQuestion = item.ChoiceQuestion; details.MultipleQuestion = item.MultipleQuestion; details.PositionValue = item.PositionValue; details.Position = item.Position; details.Topic = item.Topic; details.OptionA = item.OptionA; details.OptionB = item.OptionB; details.OptionC = item.OptionC; details.OptionD = item.OptionD; details.OptionE = item.OptionE; details.RightKey = item.RightKey; details.FusibleCoreNormal = item.FusibleCoreNormal; details.FusibleCoreFault = item.FusibleCoreFault; details.PorcelainBottleType = item.PorcelainBottleType; details.Direction = item.Direction; //if (!string.IsNullOrEmpty(item.SensitiveKnowledge)) //{ //} details.SensitiveKnowledge = !string.IsNullOrEmpty(item.SensitiveKnowledge) ? Tool.img_to_base64(_webHostEnvironment.WebRootPath + item.SensitiveKnowledge) : ""; details.Minhui = !string.IsNullOrEmpty(item.Minhui) ? Tool.img_to_base64(_webHostEnvironment.WebRootPath + item.Minhui) : ""; details.SensitiveLine = !string.IsNullOrEmpty(item.SensitiveLine) ? Tool.img_to_base64(_webHostEnvironment.WebRootPath + item.SensitiveLine) : ""; details.Allergy = !string.IsNullOrEmpty(item.Allergy) ? Tool.img_to_base64(_webHostEnvironment.WebRootPath + item.Allergy) : ""; details.GracefulGraceful = !string.IsNullOrEmpty(item.GracefulGraceful) ? Tool.img_to_base64(_webHostEnvironment.WebRootPath + item.GracefulGraceful) : ""; details.CurreSelectDetail = item.CurreSelectDetail; details.FaultLocation = item.FaultLocation; scene_model.Details = details; } scene_list.Add(scene_model); } model.SceneData = scene_list; var record_list = user_fault_record_bll.GetModelList(" UserId='" + req.UserId + "' and ExamId='" + req.ExamId + "' ").ToList(); var fault_record_list = new List(); foreach (var item in record_list) { var fault_record_model = new Competition.Mysql.Other.user_fault_record(); fault_record_model.IsCorrect = item.IsCorrect; fault_record_model.Content = item.Content; fault_record_model.Answer = item.Answer; fault_record_model.Cache_Key = item.Cache_Key; fault_record_model.Cache_Content = item.Cache_Content; fault_record_model.Cache_Value = item.Cache_Value; fault_record_model.R1 = item.R1; fault_record_model.R2 = item.R2; fault_record_model.R3 = item.R3; fault_record_list.Add(fault_record_model); } model.FaultRecord = fault_record_list; } else { is_exam = true; } } if (is_exam) { var is_data = false; if (exam.Type == "考试") { var exam_users_model = exam_users_bll.GetExamList(" T1.UserId='" + req.UserId + "' and T2.ExamId='" + req.ExamId + "' and T2.Status='已发布' ").FirstOrDefault(); if (exam_users_model != null) { is_data = true; } } else { is_data = true; } if (is_data) { var exam_model = exam_bll.GetAllList(" ExamId='" + req.ExamId + "' and Status='已发布' ").FirstOrDefault(); if (exam_model != null) { model.ExamId = exam_model.ExamId; model.ExamName = exam_model.ExamName; //model.StartExamTime = exam_model.StartExamTime.Value; //model.EndExamTime = exam_model.EndExamTime.Value; model.Scene = exam_model.SceneName; model.PlatformArea = exam_model.PlatformAreaName; model.Line = exam_model.LineName; model.LinePatrolDate = exam_model.LinePatrolDate.Value; model.HandleDate = exam_model.HandleDate.Value; model.WorkOrderContent = exam_model.WorkOrderContent; model.BackgroundInformation = exam_model.BackgroundInformation; model.Status = "未开始"; model.ExaminationLink = ""; model.ExaminationDuration = exam_model.ExaminationDuration + ":00"; var tool_list = exam_tool_bll.GetModelList(" ExamId='" + exam_model.ExamId + "' "); if (tool_list.Count > 0) { var line_patrol_tool_list = tool_list.Where(a => a.Purpose == "巡线").ToList(); var line_tool_list = new List(); foreach (var item in line_patrol_tool_list) { var line_tool_model = new Competition.Mysql.Other.exam_tool(); line_tool_model.ToolName = item.ToolName; line_tool_model.ToolType = item.ToolType; line_tool_model.ExamId = item.ExamId; line_tool_model.Purpose = item.Purpose; line_tool_model.Quantity = 0; line_tool_list.Add(line_tool_model); } model.LinePatrolTool = line_tool_list; var troubleshooting_tool_list = tool_list.Where(a => a.Purpose == "排故").ToList(); var troub_tool_list = new List(); foreach (var item in troubleshooting_tool_list) { var troub_tool_model = new Competition.Mysql.Other.exam_tool(); troub_tool_model.ToolName = item.ToolName; troub_tool_model.ToolType = item.ToolType; troub_tool_model.ExamId = item.ExamId; troub_tool_model.Purpose = item.Purpose; troub_tool_model.Quantity = 0; troub_tool_list.Add(troub_tool_model); } model.TroubleshootingTool = troub_tool_list; } var ticket_list = exam_operation_ticket_bll.GetModelList(" ExamId='" + exam_model.ExamId + "' "); if (ticket_list.Count > 0) { var power_failure = ticket_list.Where(a => a.Type == "停电").OrderBy(a => a.SerialNumber).ToList(); var power_failure_list = new List(); foreach (var item in power_failure) { var power_failure_model = new Competition.Mysql.Other.exam_operation_ticket(); power_failure_model.OperationTicketId = item.OperationTicketId; power_failure_model.SerialNumber = item.SerialNumber; power_failure_model.Type = item.Type; power_failure_model.Content = item.Content; power_failure_model.State = 0; power_failure_list.Add(power_failure_model); } model.PowerFailure = power_failure_list; var power_transmission = ticket_list.Where(a => a.Type == "送电").OrderBy(a => a.SerialNumber).ToList(); var power_transmission_list = new List(); foreach (var item in power_transmission) { var power_transmission_model = new Competition.Mysql.Other.exam_operation_ticket(); power_transmission_model.OperationTicketId = item.OperationTicketId; power_transmission_model.SerialNumber = item.SerialNumber; power_transmission_model.Type = item.Type; power_transmission_model.Content = item.Content; power_transmission_model.State = 0; power_transmission_list.Add(power_transmission_model); } model.PowerTransmission = power_transmission_list; } var fault_list = exam_fault_bll.GetModelList(" ExamId='" + exam_model.ExamId + "' order by CreateTime asc "); var scene_list = new List(); foreach (var item in fault_list) { var scene_model = new Competition.Mysql.Other.exam_scene(); scene_model.FaultId = item.FaultId; scene_model.FaultType = item.FaultType; scene_model.Type = item.Type; scene_model.FaultDesc = item.FaultDesc; scene_model.RootDeviceId = item.RootDeviceId; if (item.Type == "断路器") { var screen = new Competition.Mysql.Other.screen_data(); screen.DeviceId = item.DeviceId; screen.ChoiceQuestion = item.ChoiceQuestion; var setting_list = new List(); var name_list = item.Name.Split('|'); var value_list = item.Value.Split('|'); for (int i = 0; i < name_list.Length; i++) { var setting_model = new Competition.Mysql.Other.setting_data(); setting_model.Name = name_list[i]; setting_model.Value = value_list[i]; setting_list.Add(setting_model); } screen.Settings = item.Settings; screen.Params = setting_list; scene_model.Screen = screen; } else { var details = new Competition.Mysql.Other.fault_details(); details.DeviceId = item.DeviceId; details.DefectLevel = item.DefectLevel; details.SpecificSimulation = item.SpecificSimulation; details.DegreesSerialNumber = item.DegreesSerialNumber; details.DegreesValue = item.DegreesValue; details.ChoiceQuestion = item.ChoiceQuestion; details.MultipleQuestion = item.MultipleQuestion; details.PositionValue = item.PositionValue; details.Position = item.Position; details.Topic = item.Topic; details.OptionA = item.OptionA; details.OptionB = item.OptionB; details.OptionC = item.OptionC; details.OptionD = item.OptionD; details.OptionE = item.OptionE; details.RightKey = item.RightKey; details.FusibleCoreNormal = item.FusibleCoreNormal; details.FusibleCoreFault = item.FusibleCoreFault; details.PorcelainBottleType = item.PorcelainBottleType; details.Direction = item.Direction; details.SensitiveKnowledge = !string.IsNullOrEmpty(item.SensitiveKnowledge) ? Tool.img_to_base64(_webHostEnvironment.WebRootPath + item.SensitiveKnowledge) : ""; //LogHelper.WriteLog("图片转base64:" + Tool.img_to_base64(_webHostEnvironment.WebRootPath + item.SensitiveKnowledge)); details.Minhui = !string.IsNullOrEmpty(item.Minhui) ? Tool.img_to_base64(_webHostEnvironment.WebRootPath + item.Minhui) : ""; details.SensitiveLine = !string.IsNullOrEmpty(item.SensitiveLine) ? Tool.img_to_base64(_webHostEnvironment.WebRootPath + item.SensitiveLine) : ""; details.Allergy = !string.IsNullOrEmpty(item.Allergy) ? Tool.img_to_base64(_webHostEnvironment.WebRootPath + item.Allergy) : ""; details.GracefulGraceful = !string.IsNullOrEmpty(item.GracefulGraceful) ? Tool.img_to_base64(_webHostEnvironment.WebRootPath + item.GracefulGraceful) : ""; scene_model.Details = details; } scene_list.Add(scene_model); } model.SceneData = scene_list; } } } return Json(Tool.GetJsonWithCode(APICode.Success, model)); } catch (Exception ex) { LogHelper.WriteLog(ex.Message + ",行号:" + ex.StackTrace); return Json(Tool.GetJsonWithCode(APICode.Fail, "发生错误,请联系管理员。")); } } } }