445 lines
24 KiB
C#
445 lines
24 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
||
using Microsoft.AspNetCore.Http;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using Newtonsoft.Json.Linq;
|
||
using Newtonsoft.Json;
|
||
using NPOI.HSSF.UserModel;
|
||
using NPOI.SS.UserModel;
|
||
using Competition.Common.Util;
|
||
using CompetitionAPI.Util;
|
||
|
||
namespace CompetitionAPI.Controllers.back
|
||
{
|
||
[Route("api/[controller]")]
|
||
[ApiController]
|
||
public class DownloadExamController : Controller
|
||
{
|
||
private readonly IWebHostEnvironment _webHostEnvironment;
|
||
|
||
Competition.Mysql.BLL.pow_exam exam_bll = new Competition.Mysql.BLL.pow_exam();
|
||
|
||
Competition.Mysql.BLL.pow_exam_fault exam_fault_bll = new Competition.Mysql.BLL.pow_exam_fault();
|
||
|
||
Competition.Mysql.BLL.pow_exam_tool exam_tool_bll = new Competition.Mysql.BLL.pow_exam_tool();
|
||
|
||
Competition.Mysql.BLL.pow_exam_operation_ticket exam_ticket_bll = new Competition.Mysql.BLL.pow_exam_operation_ticket();
|
||
|
||
public DownloadExamController(IWebHostEnvironment webHostEnvironment)
|
||
{
|
||
_webHostEnvironment = webHostEnvironment;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 下载考试接口
|
||
/// </summary>
|
||
/// <param name="ExamId">考试id</param>
|
||
/// <returns></returns>
|
||
[Authorize]
|
||
[HttpGet]
|
||
[APIFilter]
|
||
public ActionResult Index(string ExamId)
|
||
{
|
||
try
|
||
{
|
||
//组织树
|
||
var tree_list = ReadTree();
|
||
|
||
HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
|
||
ISheet sheet1 = workbook.CreateSheet("考试试卷");
|
||
var row1 = sheet1.CreateRow(0);//选择第1行
|
||
var cell1_1 = row1.CreateCell(0);//选择第1列
|
||
cell1_1.SetCellValue("考试名称");
|
||
var cell1_2 = row1.CreateCell(1);
|
||
cell1_2.SetCellValue("考试时长");
|
||
var cell1_3 = row1.CreateCell(2);
|
||
cell1_3.SetCellValue("台区");
|
||
var cell1_4 = row1.CreateCell(3);
|
||
cell1_4.SetCellValue("线路");
|
||
var cell1_5 = row1.CreateCell(4);
|
||
cell1_5.SetCellValue("工单内容");
|
||
var cell1_6 = row1.CreateCell(5);
|
||
cell1_6.SetCellValue("背景资料");
|
||
var cell1_7 = row1.CreateCell(6);
|
||
cell1_7.SetCellValue("进线电缆型号及长度");
|
||
var cell1_8 = row1.CreateCell(7);
|
||
cell1_8.SetCellValue("出线电缆型号及长度");
|
||
|
||
|
||
ISheet sheet2 = workbook.CreateSheet("巡线考试工具");
|
||
var row2 = sheet2.CreateRow(0);//选择第1行
|
||
var cell2_1 = row2.CreateCell(0);//选择第1列
|
||
cell2_1.SetCellValue("工具名称");
|
||
var cell2_2 = row2.CreateCell(1);
|
||
cell2_2.SetCellValue("类型(工具、材料、着装)");
|
||
|
||
ISheet sheet3 = workbook.CreateSheet("排故考试工具");
|
||
var row3 = sheet3.CreateRow(0);//选择第1行
|
||
var cell3_1 = row3.CreateCell(0);//选择第1列
|
||
cell3_1.SetCellValue("工具名称");
|
||
var cell3_2 = row3.CreateCell(1);
|
||
cell3_2.SetCellValue("类型(工具、材料、着装)");
|
||
|
||
ISheet sheet4 = workbook.CreateSheet("考试故障");
|
||
var row4 = sheet4.CreateRow(0);//选择第1行
|
||
var cell4_1 = row4.CreateCell(0);//选择第1列
|
||
cell4_1.SetCellValue("一级设备");
|
||
var cell4_2 = row4.CreateCell(1);
|
||
cell4_2.SetCellValue("二级设备");
|
||
var cell4_3 = row4.CreateCell(2);
|
||
cell4_3.SetCellValue("三级设备");
|
||
var cell4_4 = row4.CreateCell(3);
|
||
cell4_4.SetCellValue("瓷瓶子类型(裙边1、裙边2、裙边3、裙边4)");
|
||
var cell4_5 = row4.CreateCell(4);
|
||
cell4_5.SetCellValue("故障现象");
|
||
var cell4_6 = row4.CreateCell(5);
|
||
cell4_6.SetCellValue("故障等级");
|
||
var cell4_7 = row4.CreateCell(6);
|
||
cell4_7.SetCellValue("是否具体模拟");
|
||
var cell4_8 = row4.CreateCell(7);
|
||
cell4_8.SetCellValue("故障具体位置");
|
||
var cell4_9 = row4.CreateCell(8);
|
||
cell4_9.SetCellValue("查找缺陷分值");
|
||
var cell4_10 = row4.CreateCell(9);
|
||
cell4_10.SetCellValue("故障缺陷分值");
|
||
var cell4_11 = row4.CreateCell(10);
|
||
cell4_11.SetCellValue("处理缺陷分值");
|
||
var cell4_12 = row4.CreateCell(11);
|
||
cell4_12.SetCellValue("故障状态");
|
||
var cell4_13 = row4.CreateCell(12);
|
||
cell4_13.SetCellValue("具体故障,多个故障以|分隔");
|
||
var cell4_14 = row4.CreateCell(13);
|
||
cell4_14.SetCellValue("难度等级 高、中、低");
|
||
var cell4_15 = row4.CreateCell(14);
|
||
cell4_15.SetCellValue("故障点位置 高,中,低");
|
||
var cell4_16 = row4.CreateCell(15);
|
||
cell4_16.SetCellValue("故障点位置角度度数");
|
||
var cell4_17 = row4.CreateCell(16);
|
||
cell4_17.SetCellValue("位置 左、中、右");
|
||
var cell4_18 = row4.CreateCell(17);
|
||
cell4_18.SetCellValue("熔芯正常值");
|
||
var cell4_19 = row4.CreateCell(18);
|
||
cell4_19.SetCellValue("熔芯故障值");
|
||
var cell4_20 = row4.CreateCell(19);
|
||
cell4_20.SetCellValue("方向 东、西、南、北");
|
||
var cell4_21 = row4.CreateCell(20);
|
||
cell4_21.SetCellValue("缺陷详细信息");
|
||
var cell4_22 = row4.CreateCell(21);
|
||
cell4_22.SetCellValue("题干");
|
||
var cell4_23 = row4.CreateCell(22);
|
||
cell4_23.SetCellValue("选项A");
|
||
var cell4_24 = row4.CreateCell(23);
|
||
cell4_24.SetCellValue("选项B");
|
||
var cell4_25 = row4.CreateCell(24);
|
||
cell4_25.SetCellValue("选项C");
|
||
var cell4_26 = row4.CreateCell(25);
|
||
cell4_26.SetCellValue("选项D");
|
||
var cell4_27 = row4.CreateCell(26);
|
||
cell4_27.SetCellValue("选项E");
|
||
var cell4_28 = row4.CreateCell(27);
|
||
cell4_28.SetCellValue("正确答案,多个以|分隔");
|
||
var cell4_29 = row4.CreateCell(28);
|
||
cell4_29.SetCellValue("断路器设置名称");
|
||
var cell4_30 = row4.CreateCell(29);
|
||
cell4_30.SetCellValue("断路器参数名");
|
||
var cell4_31 = row4.CreateCell(30);
|
||
cell4_31.SetCellValue("断路器参数值");
|
||
var cell4_32 = row4.CreateCell(31);
|
||
cell4_32.SetCellValue("电缆名称");
|
||
var cell4_33 = row4.CreateCell(32);
|
||
cell4_33.SetCellValue("电缆起点");
|
||
var cell4_34 = row4.CreateCell(33);
|
||
cell4_34.SetCellValue("电缆终点");
|
||
var cell4_35 = row4.CreateCell(34);
|
||
cell4_35.SetCellValue("型号长度");
|
||
|
||
ISheet sheet5 = workbook.CreateSheet("考试停电操作票选项");
|
||
var row5 = sheet5.CreateRow(0);//选择第1行
|
||
var cell5_1 = row5.CreateCell(0);
|
||
cell5_1.SetCellValue("序号");
|
||
var cell5_2 = row5.CreateCell(1);
|
||
cell5_2.SetCellValue("内容");
|
||
|
||
ISheet sheet6 = workbook.CreateSheet("考试送电操作票选项");
|
||
var row6 = sheet6.CreateRow(0);//选择第1行
|
||
var cell6_1 = row6.CreateCell(0);
|
||
cell6_1.SetCellValue("序号");
|
||
var cell6_2 = row6.CreateCell(1);
|
||
cell6_2.SetCellValue("内容");
|
||
|
||
var model = new CompetitionAPI.api.back.JsonTurnExcelRequest();
|
||
model.Exam = exam_bll.GetAllList(" T1.ExamId='" + ExamId + "' ").FirstOrDefault();
|
||
model.ToolList = exam_tool_bll.GetModelList(" ExamId='" + ExamId + "' order by Purpose,ToolType asc ");
|
||
model.FaultList = exam_fault_bll.GetModelList(" ExamId='" + ExamId + "' ");
|
||
model.OperationTicketList = exam_ticket_bll.GetModelList(" ExamId='" + ExamId + "' order by Type,SerialNumber asc ");
|
||
if (model != null)
|
||
{
|
||
if (model.Exam != null)
|
||
{
|
||
var row = sheet1.CreateRow(1);//选择第1行
|
||
var cell1 = row.CreateCell(0);
|
||
cell1.SetCellValue(model.Exam.ExamName);
|
||
var cell2 = row.CreateCell(1);
|
||
cell2.SetCellValue(model.Exam.ExaminationDuration);
|
||
var cell3 = row.CreateCell(2);
|
||
cell3.SetCellValue(model.Exam.PlatformAreaName);
|
||
var cell4 = row.CreateCell(3);
|
||
cell4.SetCellValue(model.Exam.LineName);
|
||
var cell5 = row.CreateCell(4);
|
||
cell5.SetCellValue(model.Exam.WorkOrderContent);
|
||
var cell6 = row.CreateCell(5);
|
||
cell6.SetCellValue(model.Exam.BackgroundInformation);
|
||
var cell7 = row.CreateCell(6);
|
||
cell7.SetCellValue(model.Exam.IncomingLineModelLength);
|
||
var cell8 = row.CreateCell(7);
|
||
cell8.SetCellValue(model.Exam.OutgoingLineModelLength);
|
||
}
|
||
|
||
if (model.ToolList != null)
|
||
{
|
||
if (model.ToolList.Count > 0)
|
||
{
|
||
var line_tool = model.ToolList.Where(a => a.Purpose == "巡线").ToList();
|
||
for (int i = 0; i < line_tool.Count(); i++)
|
||
{
|
||
var row = sheet2.CreateRow(i + 1);//选择第1行
|
||
var cell1 = row.CreateCell(0);
|
||
cell1.SetCellValue(line_tool[i].ToolName);
|
||
var cell2 = row.CreateCell(1);
|
||
cell2.SetCellValue(line_tool[i].ToolType);
|
||
}
|
||
var fault_tool = model.ToolList.Where(a => a.Purpose == "排故").ToList();
|
||
for (int i = 0; i < fault_tool.Count(); i++)
|
||
{
|
||
var row = sheet3.CreateRow(i + 1);//选择第1行
|
||
var cell1 = row.CreateCell(0);
|
||
cell1.SetCellValue(fault_tool[i].ToolName);
|
||
var cell2 = row.CreateCell(1);
|
||
cell2.SetCellValue(fault_tool[i].ToolType);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (model.FaultList != null)
|
||
{
|
||
if (model.FaultList.Count > 0)
|
||
{
|
||
for (int i = 0; i < model.FaultList.Count; i++)
|
||
{
|
||
var row = sheet4.CreateRow(i + 1);//选择第1行
|
||
var cell1 = row.CreateCell(0);
|
||
var cell2 = row.CreateCell(1);
|
||
var cell3 = row.CreateCell(2);
|
||
var first_list = tree_list.Where(a => a.TowerId == model.FaultList[i].RootDeviceId).FirstOrDefault();
|
||
if (first_list != null)
|
||
{
|
||
cell1.SetCellValue(first_list.Tower);
|
||
if (first_list.TowerId != model.FaultList[i].DeviceId)
|
||
{
|
||
if (first_list.Data != null)
|
||
{
|
||
var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == model.FaultList[i].DeviceId).FirstOrDefault();
|
||
if (two_list != null)
|
||
{
|
||
cell2.SetCellValue(two_list.PowerDistributionBox);
|
||
if (two_list.Data != null)
|
||
{
|
||
var three_list = two_list.Data.Where(a => a.LineId == model.FaultList[i].DeviceId).FirstOrDefault();
|
||
if (three_list != null)
|
||
{
|
||
cell3.SetCellValue(three_list.Line);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == model.FaultList[i].DeviceId).FirstOrDefault();
|
||
if (three_list != null)
|
||
{
|
||
foreach (var box in first_list.Data)
|
||
{
|
||
var line_model = box.Data.Where(a => a.LineId == model.FaultList[i].DeviceId).FirstOrDefault();
|
||
if (line_model != null)
|
||
{
|
||
cell2.SetCellValue(box.PowerDistributionBox);
|
||
}
|
||
}
|
||
cell3.SetCellValue(three_list.Line);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
var cell4 = row.CreateCell(3);
|
||
cell4.SetCellValue(model.FaultList[i].PorcelainBottleType);
|
||
var cell5 = row.CreateCell(4);
|
||
cell5.SetCellValue(model.FaultList[i].FaultDesc);
|
||
var cell6 = row.CreateCell(5);
|
||
cell6.SetCellValue(model.FaultList[i].DefectLevel);
|
||
var cell7 = row.CreateCell(6);
|
||
cell7.SetCellValue(model.FaultList[i].SpecificSimulation);
|
||
var cell8 = row.CreateCell(7);
|
||
cell8.SetCellValue(model.FaultList[i].FaultPosition);
|
||
var cell9 = row.CreateCell(8);
|
||
cell9.SetCellValue(model.FaultList[i].SelectSocre);
|
||
var cell10 = row.CreateCell(9);
|
||
cell10.SetCellValue(model.FaultList[i].FaultScore);
|
||
var cell11 = row.CreateCell(10);
|
||
cell11.SetCellValue(model.FaultList[i].HandlerScore);
|
||
var cell12 = row.CreateCell(11);
|
||
if (model.FaultList[i].ChoiceQuestion == "0")
|
||
{
|
||
cell12.SetCellValue("正常");
|
||
}
|
||
else if (model.FaultList[i].ChoiceQuestion == "1")
|
||
{
|
||
cell12.SetCellValue("单个故障");
|
||
}
|
||
else if (model.FaultList[i].ChoiceQuestion == "2")
|
||
{
|
||
cell12.SetCellValue("多个故障");
|
||
}
|
||
var cell13 = row.CreateCell(12);
|
||
cell13.SetCellValue(model.FaultList[i].MultipleQuestion);
|
||
var cell14 = row.CreateCell(13);
|
||
cell14.SetCellValue(model.FaultList[i].DifficultyLevel);
|
||
var cell15 = row.CreateCell(14);
|
||
cell15.SetCellValue(model.FaultList[i].PositionValue);
|
||
var cell16 = row.CreateCell(15);
|
||
cell16.SetCellValue(model.FaultList[i].DegreesValue);
|
||
var cell17 = row.CreateCell(16);
|
||
cell17.SetCellValue(model.FaultList[i].Position);
|
||
var cell18 = row.CreateCell(17);
|
||
cell18.SetCellValue(model.FaultList[i].FusibleCoreNormal);
|
||
var cell19 = row.CreateCell(18);
|
||
cell19.SetCellValue(model.FaultList[i].FusibleCoreFault);
|
||
var cell20 = row.CreateCell(19);
|
||
cell20.SetCellValue(model.FaultList[i].Direction);
|
||
var cell21 = row.CreateCell(20);
|
||
if (model.FaultList[i].DegreesSerialNumber == "1")
|
||
{
|
||
cell21.SetCellValue("大缺口");
|
||
}
|
||
if (model.FaultList[i].DegreesSerialNumber == "2")
|
||
{
|
||
cell21.SetCellValue("上缺口");
|
||
}
|
||
if (model.FaultList[i].DegreesSerialNumber == "3")
|
||
{
|
||
cell21.SetCellValue("下缺口");
|
||
}
|
||
if (model.FaultList[i].DegreesSerialNumber == "4")
|
||
{
|
||
cell21.SetCellValue("瓷瓶裂纹");
|
||
}
|
||
var cell22 = row.CreateCell(21);
|
||
cell22.SetCellValue(model.FaultList[i].Topic);
|
||
var cell23 = row.CreateCell(22);
|
||
cell23.SetCellValue(model.FaultList[i].OptionA);
|
||
var cell24 = row.CreateCell(23);
|
||
cell24.SetCellValue(model.FaultList[i].OptionB);
|
||
var cell25 = row.CreateCell(24);
|
||
cell25.SetCellValue(model.FaultList[i].OptionC);
|
||
var cell26 = row.CreateCell(25);
|
||
cell26.SetCellValue(model.FaultList[i].OptionD);
|
||
var cell27 = row.CreateCell(26);
|
||
cell27.SetCellValue(model.FaultList[i].OptionE);
|
||
var cell28 = row.CreateCell(27);
|
||
cell28.SetCellValue(model.FaultList[i].RightKey);
|
||
var cell29 = row.CreateCell(28);
|
||
cell29.SetCellValue(model.FaultList[i].Settings);
|
||
var cell30 = row.CreateCell(29);
|
||
cell30.SetCellValue(model.FaultList[i].Name);
|
||
var cell31 = row.CreateCell(30);
|
||
cell31.SetCellValue(model.FaultList[i].Value);
|
||
var cell32 = row.CreateCell(31);
|
||
cell32.SetCellValue(model.FaultList[i].CableName);
|
||
var cell33 = row.CreateCell(32);
|
||
cell33.SetCellValue(model.FaultList[i].CableStart);
|
||
var cell34 = row.CreateCell(33);
|
||
cell34.SetCellValue(model.FaultList[i].CableEnd);
|
||
var cell35 = row.CreateCell(34);
|
||
cell35.SetCellValue(model.FaultList[i].ModelLength);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (model.OperationTicketList != null)
|
||
{
|
||
if (model.OperationTicketList.Count > 0)
|
||
{
|
||
var power_failure_ticket = model.OperationTicketList.Where(a => a.Type == "停电").ToList();
|
||
for (int i = 0; i < power_failure_ticket.Count(); i++)
|
||
{
|
||
var row = sheet5.CreateRow(i + 1);//选择第1行
|
||
var cell1 = row.CreateCell(0);
|
||
cell1.SetCellValue(power_failure_ticket[i].SerialNumber);
|
||
var cell2 = row.CreateCell(1);
|
||
cell2.SetCellValue(power_failure_ticket[i].Content);
|
||
}
|
||
|
||
var power_transmission_ticket = model.OperationTicketList.Where(a => a.Type == "送电").ToList();
|
||
for (int i = 0; i < power_transmission_ticket.Count(); i++)
|
||
{
|
||
var row = sheet6.CreateRow(i + 1);//选择第1行
|
||
var cell1 = row.CreateCell(0);
|
||
cell1.SetCellValue(power_transmission_ticket[i].SerialNumber);
|
||
var cell2 = row.CreateCell(1);
|
||
cell2.SetCellValue(power_transmission_ticket[i].Content);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//保存Workbook方式二: 保存到内存流中
|
||
var stream = new MemoryStream();
|
||
workbook.Write(stream);
|
||
stream.Flush();
|
||
stream.Position = 0;
|
||
|
||
sheet1 = null;
|
||
sheet2 = null;
|
||
sheet3 = null;
|
||
sheet4 = null;
|
||
sheet5 = null;
|
||
workbook = null;
|
||
|
||
var exam_name = "考试数据";
|
||
if (model != null)
|
||
{
|
||
if (model.Exam != null)
|
||
{
|
||
exam_name = model.Exam.ExamName;
|
||
}
|
||
}
|
||
var ExcelName = exam_name + ".xls";
|
||
//文件下载
|
||
return File(stream, "application/vnd.ms-excel", ExcelName);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.WriteLog(ex.Message + ",行号:" + ex.StackTrace);
|
||
return Json(Tool.GetJsonWithCode(APICode.Fail, "发生错误,请联系管理员。"));
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取树结构json
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
private List<Competition.Mysql.Other.fault_tree> ReadTree()
|
||
{
|
||
var tree_list = new List<Competition.Mysql.Other.fault_tree>();
|
||
string fault_tree_file = _webHostEnvironment.WebRootPath + "/Json/FaultTree.json";
|
||
//读取json文件
|
||
using (StreamReader file = System.IO.File.OpenText(fault_tree_file))
|
||
{
|
||
using (JsonTextReader reader = new JsonTextReader(file))
|
||
{
|
||
tree_list = JsonConvert.DeserializeObject<List<Competition.Mysql.Other.fault_tree>>(JToken.ReadFrom(reader).ToString());
|
||
}
|
||
}
|
||
return tree_list;
|
||
}
|
||
}
|
||
}
|