using Competition.Common.Util;
using CompetitionAPI.api.back;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using CompetitionAPI.Util;
namespace CompetitionAPI.Controllers.back
{
[Route("api/[controller]")]
[ApiController]
public class AddExamController : Controller
{
private readonly IWebHostEnvironment _webHostEnvironment;
Competition.Mysql.BLL.pow_exam exam_bll = new Competition.Mysql.BLL.pow_exam();
Competition.Mysql.BLL.pow_operation_ticket ticket_bll = new Competition.Mysql.BLL.pow_operation_ticket();
Competition.Mysql.BLL.pow_fault fault_bll = new Competition.Mysql.BLL.pow_fault();
Competition.Mysql.BLL.pow_tool tool_bll = new Competition.Mysql.BLL.pow_tool();
private static Object Lockobj = new object();
public AddExamController(IWebHostEnvironment webHostEnvironment)
{
_webHostEnvironment = webHostEnvironment;
}
///
/// 新增考试接口
///
/// 请求参数
///
[Authorize]
[HttpPost]
[APIFilter]
public JsonResult Index([FromBody] AddExamRequest req)
{
try
{
lock (Lockobj)
{
if (string.IsNullOrWhiteSpace(req.ExamName))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "考试名称不能为空"));
}
if (req.ExamName.Length > 20)
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "考试名称长度不能超过20个字符"));
}
if (string.IsNullOrWhiteSpace(req.Type))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "类型不能为空"));
}
if (req.Type == "考试")
{
if (string.IsNullOrWhiteSpace(req.StartExamTime))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "开始考试时间不能为空"));
}
if (string.IsNullOrWhiteSpace(req.EndExamTime))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "结束考试时间不能为空"));
}
}
else
{
if (string.IsNullOrWhiteSpace(req.CoverName))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "实训封面不能为空"));
}
if (string.IsNullOrWhiteSpace(req.CoverPath))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "实训封面不能为空"));
}
//获取当前web目录
var webRootPath = _webHostEnvironment.WebRootPath;
if (!System.IO.File.Exists(webRootPath + "/" + req.CoverPath))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "封面不存在,请先上传封面"));
}
}
if (string.IsNullOrWhiteSpace(req.LinePatrolDate))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "巡线日期不能为空"));
}
if (string.IsNullOrWhiteSpace(req.HandleDate))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "处理日期不能为空"));
}
if (string.IsNullOrEmpty(req.SceneId))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "场景不能为空"));
}
if (string.IsNullOrEmpty(req.PlatformAreaId))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "台区不能为空"));
}
if (string.IsNullOrEmpty(req.LineId))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "线路不能为空"));
}
if (req.Type == "考试")
{
if (string.IsNullOrEmpty(req.ExaminationDuration))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "考试时长不能为空"));
}
var start_time = DateTime.Parse(req.StartExamTime);
var end_time = DateTime.Parse(req.EndExamTime);
if (start_time >= end_time)
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "开始考试时间必须要小于结束考试时间"));
}
var duration = (end_time - start_time).TotalMinutes;
var exam_duration = double.Parse(req.ExaminationDuration);
if (exam_duration > duration)
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "考试时长不能超过开始考试时间和结束考试时间的区间分钟数"));
}
}
if (string.IsNullOrWhiteSpace(req.IncomingLineModelLength))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "进线电缆型号及长度不能为空"));
}
if (string.IsNullOrWhiteSpace(req.OutgoingLineModelLength))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "出线电缆型号及长度不能为空"));
}
if (string.IsNullOrWhiteSpace(req.WorkOrderContent))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "工单内容不能为空"));
}
if (!req.WorkOrderContent.Contains(req.PlatformArea))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "工单内容里不包含选择的台区!"));
}
if (string.IsNullOrWhiteSpace(req.BackgroundInformation))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "背景资料不能为空"));
}
if (string.IsNullOrEmpty(req.Weather))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "天气不能为空"));
}
var protection_list = new List();
protection_list.Add("411开关(保护器)额定剩余电流保护:");
protection_list.Add("411开关(保护器)过载保护:");
protection_list.Add("411开关(保护器)短路延时保护:");
protection_list.Add("411开关(保护器)短路瞬时保护:");
protection_list.Add("411开关(保护器)欠压保护:");
protection_list.Add("411开关(保护器)过压保护:");
protection_list.Add("411开关(保护器)缺相保护:");
protection_list.Add("411熔芯熔断电流:");
var leakage_protection = "";
var overload_protection = "";
var short_circuit_delay_protection = "";
var short_circuit_protection = "";
var undervoltage_protection = "";
var overvoltage_protection = "";
var phase_loss_protection = "";
var fusible_core_current = "";
foreach (var item in protection_list)
{
if (!req.BackgroundInformation.Contains(item))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "背景资料格式不正确,未包含" + item));
}
var content_list = req.BackgroundInformation.Split(new char[2] { '\r', '\n' }).ToList();
var leakage_protection_value = content_list.Where(a => a.Contains(item)).FirstOrDefault();
if (!string.IsNullOrEmpty(leakage_protection_value))
{
var value = leakage_protection_value.Split(':');
if (value.Length != 2)
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "背景资料的" + item + "格式不正确"));
}
else
{
if (item != "411开关(保护器)缺相保护:" && item != "411熔芯熔断电流:")
{
if (!value[1].Contains("(") || !value[1].Contains(")"))
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "背景资料的" + item + "格式不正确,值未包含()格式"));
}
var value_list = new List();
var pro = value[1].Split('(');
if (item == "411开关(保护器)额定剩余电流保护:")
{
if (pro[0] == "50mA" || pro[0] == "100mA" || pro[0] == "200mA" || pro[0] == "300mA" || pro[0] == "400mA" || pro[0] == "500mA" || pro[0] == "600mA" || pro[0] == "800mA")
{
if (pro[0] == "50mA")
{
value_list.Add("050mA");
}
else
{
value_list.Add(pro[0]);
}
}
else
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "背景资料的" + item + "格式不正确,档位值不在指定范围内(50mA、100mA、200mA、300mA、400mA、500mA、600mA、800mA)"));
}
}
if (item == "411开关(保护器)过载保护:")
{
if (pro[0] == "160A" || pro[0] == "200A" || pro[0] == "240A" || pro[0] == "280A" || pro[0] == "320A" || pro[0] == "360A" || pro[0] == "400A")
{
if (pro[0] == "160A")
{
value_list.Add("0.4ln");
}
else if (pro[0] == "200A")
{
value_list.Add("0.5ln");
}
else if (pro[0] == "240A")
{
value_list.Add("0.6ln");
}
else if (pro[0] == "280A")
{
value_list.Add("0.7ln");
}
else if (pro[0] == "320A")
{
value_list.Add("0.8ln");
}
else if (pro[0] == "360A")
{
value_list.Add("0.9ln");
}
else if (pro[0] == "400A")
{
value_list.Add("1.0ln");
}
else
{
value_list.Add(pro[0]);
}
}
else
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "背景资料的" + item + "格式不正确,档位值不在指定范围内(160A、200A、240A、280A、320A、360A、400A)"));
}
}
if (item == "411开关(保护器)短路延时保护:")
{
Dictionary delay_protection = new Dictionary();
delay_protection.Add("800A", "2ln");
delay_protection.Add("1000A", "2.5ln");
delay_protection.Add("1200A", "3ln");
delay_protection.Add("1600A", "4ln");
delay_protection.Add("2000A", "5ln");
delay_protection.Add("2400A", "6ln");
delay_protection.Add("2800A", "7ln");
delay_protection.Add("3400A", "8ln");
delay_protection.Add("4000A", "10ln");
if (delay_protection.ContainsKey(pro[0]))
{
value_list.Add(delay_protection[pro[0]]);
}
else
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "背景资料的" + item + "格式不正确,档位值不在指定范围内(" + string.Join("、", delay_protection.Keys.ToArray()) + ")"));
}
}
if (item == "411开关(保护器)短路瞬时保护:")
{
Dictionary delay_protection = new Dictionary();
delay_protection.Add("2400A", "6ln");
delay_protection.Add("2800A", "7ln");
delay_protection.Add("3200A", "8ln");
delay_protection.Add("4000A", "10ln");
delay_protection.Add("4400A", "11ln");
delay_protection.Add("4800A", "12ln");
delay_protection.Add("5200A", "13ln");
delay_protection.Add("5600A", "14ln");
if (delay_protection.ContainsKey(pro[0]))
{
value_list.Add(delay_protection[pro[0]]);
}
else
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "背景资料的" + item + "格式不正确,档位值不在指定范围内(" + string.Join("、", delay_protection.Keys.ToArray()) + ")"));
}
}
if (item == "411开关(保护器)欠压保护:")
{
Dictionary delay_protection = new Dictionary();
delay_protection.Add("170V", "170");
delay_protection.Add("175V", "175");
delay_protection.Add("180V", "180");
delay_protection.Add("185V", "185");
delay_protection.Add("190V", "190");
delay_protection.Add("195V", "195");
delay_protection.Add("200V", "200");
if (delay_protection.ContainsKey(pro[0]))
{
value_list.Add(delay_protection[pro[0]]);
}
else
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "背景资料的" + item + "格式不正确,档位值不在指定范围内(" + string.Join("、", delay_protection.Keys.ToArray()) + ")"));
}
}
if (item == "411开关(保护器)过压保护:")
{
Dictionary delay_protection = new Dictionary();
delay_protection.Add("255V", "255");
delay_protection.Add("260V", "260");
delay_protection.Add("265V", "265");
delay_protection.Add("270V", "270");
delay_protection.Add("275V", "275");
delay_protection.Add("280V", "280");
delay_protection.Add("285V", "285");
delay_protection.Add("290V", "290");
if (delay_protection.ContainsKey(pro[0]))
{
value_list.Add(delay_protection[pro[0]]);
}
else
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "背景资料的" + item + "格式不正确,档位值不在指定范围内(" + string.Join("、", delay_protection.Keys.ToArray()) + ")"));
}
}
pro[1] = pro[1].Replace(")", "");
if (pro[1] == "开" || pro[1] == "关")
{
value_list.Add(pro[1]);
}
else
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "背景资料的" + item + "格式不正确,()里的值不是开或者关"));
}
if (item == "411开关(保护器)额定剩余电流保护:")
{
leakage_protection = string.Join("|", value_list.ToArray());
}
if (item == "411开关(保护器)过载保护:")
{
overload_protection = string.Join("|", value_list.ToArray());
}
if (item == "411开关(保护器)短路延时保护:")
{
short_circuit_delay_protection = string.Join("|", value_list.ToArray());
}
if (item == "411开关(保护器)短路瞬时保护:")
{
short_circuit_protection = string.Join("|", value_list.ToArray());
}
if (item == "411开关(保护器)欠压保护:")
{
undervoltage_protection = string.Join("|", value_list.ToArray());
}
if (item == "411开关(保护器)过压保护:")
{
overvoltage_protection = string.Join("|", value_list.ToArray());
}
}
else
{
if (item == "411开关(保护器)缺相保护:")
{
if (value[1] == "开" || value[1] == "关")
{
phase_loss_protection = value[1];
}
else
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "背景资料的" + item + "格式不正确,开关值不是开或者关"));
}
}
else
{
var pro = value[1];
if (value[1] == "100A" || value[1] == "200A" || value[1] == "400A" || value[1] == "800A")
{
fusible_core_current = value[1];
}
else
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "背景资料的" + item + "格式不正确,电流值不在指定范围内:100A、200A、400A、800A"));
}
}
}
}
}
}
if (exam_bll.GetRecordCount(string.Format(" ExamName = '{0}' and Type='{1}' ", req.ExamName, req.Type)) > 0)
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "考试名称禁止重复"));
}
var model = new Competition.Mysql.Model.pow_exam();
model.ExamId = Guid.NewGuid().ToString("N");
model.ExamName = req.ExamName;
if (!string.IsNullOrEmpty(req.StartExamTime))
{
model.StartExamTime = DateTime.Parse(req.StartExamTime);
}
if (!string.IsNullOrEmpty(req.EndExamTime))
{
model.EndExamTime = DateTime.Parse(req.EndExamTime);
}
model.Status = "未发布";
model.Synopsis = req.Synopsis;
model.CoverName = req.CoverName;
model.CoverPath = req.CoverPath;
model.CreateTime = DateTime.Now;
model.WorkOrderContent = req.WorkOrderContent;
model.BackgroundInformation = req.BackgroundInformation;
model.SceneId = req.SceneId;
model.PlatformAreaId = req.PlatformAreaId;
model.LineId = req.LineId;
model.LinePatrolDate = DateTime.Parse(req.LinePatrolDate);
model.HandleDate = DateTime.Parse(req.HandleDate);
model.IncomingLineModelLength = req.IncomingLineModelLength;
model.OutgoingLineModelLength = req.OutgoingLineModelLength;
model.ExaminationDuration = req.ExaminationDuration;
model.LeakageProtection = leakage_protection;
model.OverloadProtection = overload_protection;
model.ShortCircuitDelayProtection = short_circuit_delay_protection;
model.ShortCircuitProtection = short_circuit_protection;
model.UndervoltageProtection = undervoltage_protection;
model.OvervoltageProtection = overvoltage_protection;
model.PhaseLossProtection = phase_loss_protection;
model.FusibleCoreCurrent = fusible_core_current;
model.Type = req.Type;
model.Weather = req.Weather;
var ticket_list = ticket_bll.GetModelList("");
foreach (var item in ticket_list)
{
item.Content = item.Content.Replace("xxxxx", req.PlatformArea);
}
var tool_list = tool_bll.GetModelList(" Purpose='巡线' or ToolName='绝缘手套' or ToolName='熔断器操作手柄' ");
var fault_list = fault_bll.GetModelList("");
var new_fault_list = fault_list.Where(a => a.Type == "断路器" || a.FaultDesc == "熔芯不匹配").ToList();
foreach (var item in new_fault_list)
{
if (item.FaultDesc == "漏电保护设置不合理")
{
item.Value = leakage_protection;
}
else if (item.FaultDesc == "过载保护设置错误")
{
var old_value = item.Value.Split('|');
var new_value = overload_protection.Split('|');
old_value[0] = new_value[0];
old_value[1] = new_value[1];
item.Value = string.Join("|", old_value);
}
else if (item.FaultDesc == "短路延时保护设置错误")
{
var old_value = item.Value.Split('|');
var new_value = short_circuit_delay_protection.Split('|');
old_value[0] = new_value[0];
old_value[1] = new_value[1];
item.Value = string.Join("|", old_value);
}
else if (item.FaultDesc == "短路瞬时保护设置错误")
{
item.Value = short_circuit_protection;
}
else if (item.FaultDesc == "欠压保护设置错误")
{
item.Value = undervoltage_protection;
}
else if (item.FaultDesc == "过压保护设置错误")
{
item.Value = overvoltage_protection;
}
else if (item.FaultDesc == "缺相保护设置错误")
{
item.Value = phase_loss_protection;
}
else if (item.FaultDesc == "熔芯不匹配")
{
if (fusible_core_current == item.FusibleCoreFault)
{
if (fusible_core_current == "800A")
{
item.FusibleCoreFault = "100A";
}
if (fusible_core_current == "100A")
{
item.FusibleCoreFault = "200A";
}
if (fusible_core_current == "200A")
{
item.FusibleCoreFault = "400A";
}
if (fusible_core_current == "400A")
{
item.FusibleCoreFault = "800A";
}
}
item.FusibleCoreNormal = fusible_core_current;
}
}
var cable_fault_list = fault_list.Where(a => a.FaultDesc == "出线电缆编号牌型号编写错误").ToList();
if (cable_fault_list.Count > 0)
{
foreach (var item in cable_fault_list)
{
var name1 = "1#配变0.4kV411东线出线电缆";
var start1 = "1#配变低压综合配电箱411熔断器";
var end1 = "1#配变0.4kV411东线001#杆";
var name2 = "1#配变0.4kV412南线出线电缆";
var start2 = "1#配变低压综合配电箱412熔断器";
var end2 = "1#配变0.4kV412南线001#杆";
//411
if (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c")
{
item.CableName = req.PlatformArea + name1;
item.CableStart = req.PlatformArea + start1;
item.CableEnd = req.PlatformArea + end1;
item.ModelLength = req.IncomingLineModelLength;
}
//412
if (item.DeviceId == "a238da230c0f11ed844e7cd30a92bb1c")
{
item.CableName = req.PlatformArea + name2;
item.CableStart = req.PlatformArea + start2;
item.CableEnd = req.PlatformArea + end2;
item.ModelLength = req.OutgoingLineModelLength;
}
var success = new List();
var dic_name = "/Upload/Cable/" + DateTime.Now.ToString("yyyy-MM-dd") + "/";
var dir_path = _webHostEnvironment.WebRootPath + dic_name;
if (!Directory.Exists(dir_path))
Directory.CreateDirectory(dir_path);
var path1 = dic_name + Guid.NewGuid().ToString("N") + ".jpg";
var result1 = Tool.GeneratePictures("台区一" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? name1 : name2), "台区一" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? start1 : start2), "台区一" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? end1 : end2), (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? req.IncomingLineModelLength : req.OutgoingLineModelLength), path1, _webHostEnvironment.WebRootPath);
if (result1)
{
item.SensitiveKnowledge = path1;
success.Add(path1);
}
var path2 = dic_name + Guid.NewGuid().ToString("N") + ".jpg";
var result2 = Tool.GeneratePictures("台区二" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? name1 : name2), "台区二" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? start1 : start2), "台区二" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? end1 : end2), (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? req.IncomingLineModelLength : req.OutgoingLineModelLength), path2, _webHostEnvironment.WebRootPath);
if (result2)
{
item.Minhui = path2;
success.Add(path2);
}
var path3 = dic_name + Guid.NewGuid().ToString("N") + ".jpg";
var result3 = Tool.GeneratePictures("台区三" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? name1 : name2), "台区三" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? start1 : start2), "台区三" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? end1 : end2), (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? req.IncomingLineModelLength : req.OutgoingLineModelLength), path3, _webHostEnvironment.WebRootPath);
if (result3)
{
item.SensitiveLine = path3;
success.Add(path3);
}
var path4 = dic_name + Guid.NewGuid().ToString("N") + ".jpg";
var result4 = Tool.GeneratePictures("台区四" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? name1 : name2), "台区四" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? start1 : start2), "台区四" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? end1 : end2), (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? req.IncomingLineModelLength : req.OutgoingLineModelLength), path4, _webHostEnvironment.WebRootPath);
if (result4)
{
item.Allergy = path4;
success.Add(path4);
}
var path5 = dic_name + Guid.NewGuid().ToString("N") + ".jpg";
var result5 = Tool.GeneratePictures("台区五" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? name1 : name2), "台区五" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? start1 : start2), "台区五" + (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? end1 : end2), (item.DeviceId == "9d8da9360c0f11ed844e7cd30a92bb1c" ? req.IncomingLineModelLength : req.OutgoingLineModelLength), path5, _webHostEnvironment.WebRootPath);
if (result5)
{
item.GracefulGraceful = path5;
success.Add(path5);
}
if (success.Count != 5)
{
foreach (var pic in success)
{
string path = _webHostEnvironment.WebRootPath + pic;
if (System.IO.File.Exists(path))
{
System.IO.File.Delete(path);
}
}
return Json(Tool.GetJsonWithCode(APICode.Fail, "添加失败"));
}
}
}
if (exam_bll.OperationAddData(model, ticket_list, fault_list, tool_list) > 0)
{
return Json(Tool.GetJsonWithCode(APICode.Success, "添加成功"));
}
else
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "添加失败"));
}
}
}
catch (Exception ex)
{
LogHelper.WriteLog(ex.Message + ",行号:" + ex.StackTrace);
return Json(Tool.GetJsonWithCode(APICode.Fail, "发生错误,请联系管理员。"));
}
}
}
}