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, "发生错误,请联系管理员。"));
}
}
}
}