CompetitionAPI_dotnet/CompetitionAPI/Controllers/unity/GetExamController.cs

509 lines
33 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
/// <summary>
/// 获取当前时间已发布的考试信息接口
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
[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<Competition.Mysql.Other.achievement_data>() { 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<Competition.Mysql.Other.exam_tool>();
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<Competition.Mysql.Other.exam_tool>();
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<Competition.Mysql.Other.exam_operation_ticket>();
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<Competition.Mysql.Other.exam_operation_ticket>();
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<Competition.Mysql.Other.user_operation_ticket>();
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<Competition.Mysql.Other.user_operation_ticket>();
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<Competition.Mysql.Other.exam_scene>();
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<Competition.Mysql.Other.setting_data>();
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<Competition.Mysql.Other.user_fault_record>();
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<Competition.Mysql.Other.exam_tool>();
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<Competition.Mysql.Other.exam_tool>();
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<Competition.Mysql.Other.exam_operation_ticket>();
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<Competition.Mysql.Other.exam_operation_ticket>();
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<Competition.Mysql.Other.exam_scene>();
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<Competition.Mysql.Other.setting_data>();
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, "发生错误,请联系管理员。"));
}
}
}
}