RuralPowerCompetition_yizhe.../RuralPower/RuralPowerAPI.cs

3700 lines
220 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 Microsoft.Win32;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using NPOI.HSSF.UserModel;
using NPOI.POIFS.Crypt.Dsig;
using NPOI.SS.Formula.Functions;
using NPOI.SS.UserModel;
using RestSharp;
using RuralPower.Api;
using SGUnitySDK.Etys;
using SGUnitySDK.Services.HTTP;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.IO;
using System.Linq;
using System.Management.Instrumentation;
using System.Net;
using System.Runtime.Remoting.Contexts;
//using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData;
using static Org.BouncyCastle.Crypto.Digests.SkeinEngine;
namespace RuralPower
{
public class RuralPowerAPI
{
/// <summary>
/// 围栏分值
/// </summary>
public string enclosure_score = "2";
/// <summary>
/// 围栏每次扣分值
/// </summary>
public string EnclosureFaultScore = "1";
/// <summary>
/// 验电分值
/// </summary>
public string ElectricityScore = "30";
/// <summary>
/// 台区选择分值
/// </summary>
public string SelectAreaScore = "30";
/// <summary>
/// 巡检爬杆分值
/// </summary>
public string ClimbrodScore = "30";
/// <summary>
/// 巡线工器具总分
/// </summary>
public double LineTotalScore = 3;
/// <summary>
/// 巡线工器具多选分值
/// </summary>
public double LineMultipleScore = 0.5;
/// <summary>
/// 巡线工器具少选分值
/// </summary>
public double LineMomentScore = 1;
/// <summary>
/// 缺陷总分
/// </summary>
public string TotalDefectScore = "65";
/// <summary>
/// Get 获取当前时间已发布的考试信息接口
/// </summary>
/// <param name="UserId">考生id</param>
/// <param name="ExamType">考试类型 1、2、3</param>
/// <param name="Path">绝对路径前缀</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string GetExam(string url, string UserId, string ExamType, string Path)
{
var now = DateTime.Now;
DataBase.user_operation_ticket_list = new List<DataService.Model.pow_user_operation_ticket>();
DataBase.user_list = new List<DataService.Model.admin_user>();
DataBase.scene_list = new List<DataService.Model.pow_scene>();
DataBase.platform_area_list = new List<DataService.Model.pow_platform_area>();
DataBase.line_list = new List<DataService.Model.pow_line>();
DataBase.exam_list = new List<DataService.Model.pow_exam>();
DataBase.exam_tool_list = new List<DataService.Model.pow_exam_tool>();
DataBase.exam_fault_list = new List<DataService.Model.pow_exam_fault>();
DataBase.exam_operation_ticket_list = new List<DataService.Model.pow_exam_operation_ticket>();
DataBase.user_exam_list = new List<DataService.Model.pow_user_exam>();
DataBase.user_tool_list = new List<DataService.Model.pow_user_tool>();
DataBase.user_operation_proc_ticket_list = new List<DataService.Model.pow_user_operation_proc_ticket>();
DataBase.user_fault_list = new List<DataService.Model.pow_user_fault>();
DataBase.achievement_list = new List<DataService.Model.pow_achievement>();
DataBase.achievement_details_list = new List<DataService.Model.pow_achievement_details>();
DataBase.user_fault_record_list = new List<DataService.Model.pow_user_fault_record>();
DataBase.path = Path;
if (DataBase.user_list.Where(a => a.user_id == UserId).Count() <= 0)
{
DataBase.user_list.Add(new DataService.Model.admin_user() { user_id = UserId });
}
//根据考试类型读取考试信息
var exam_model = new exam_data();
string fault_tree_file = Path + "/Json/exam" + ExamType + ".json";
//读取json文件
using (StreamReader file = File.OpenText(fault_tree_file))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
exam_model = JsonConvert.DeserializeObject<exam_data>(JToken.ReadFrom(reader).ToString());
}
}
string exam_file = Path + "/Json/exam.json";
//读取json文件
using (StreamReader file = File.OpenText(exam_file))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
DataBase.exam_list = JsonConvert.DeserializeObject<List<DataService.Model.pow_exam>>(JToken.ReadFrom(reader).ToString());
}
}
string scene_file = Path + "/Json/scene.json";
//读取json文件
using (StreamReader file = File.OpenText(scene_file))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
DataBase.scene_list = JsonConvert.DeserializeObject<List<DataService.Model.pow_scene>>(JToken.ReadFrom(reader).ToString());
}
}
string platform_area_file = Path + "/Json/platform_area.json";
//读取json文件
using (StreamReader file = File.OpenText(platform_area_file))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
DataBase.platform_area_list = JsonConvert.DeserializeObject<List<DataService.Model.pow_platform_area>>(JToken.ReadFrom(reader).ToString());
}
}
string line_file = Path + "/Json/line.json";
//读取json文件
using (StreamReader file = File.OpenText(line_file))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
DataBase.line_list = JsonConvert.DeserializeObject<List<DataService.Model.pow_line>>(JToken.ReadFrom(reader).ToString());
}
}
string exam_tool_file = Path + "/Json/exam_tool.json";
//读取json文件
using (StreamReader file = File.OpenText(exam_tool_file))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
DataBase.exam_tool_list = JsonConvert.DeserializeObject<List<DataService.Model.pow_exam_tool>>(JToken.ReadFrom(reader).ToString());
}
}
string exam_fault_file = Path + "/Json/exam_fault.json";
//读取json文件
using (StreamReader file = File.OpenText(exam_fault_file))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
DataBase.exam_fault_list = JsonConvert.DeserializeObject<List<DataService.Model.pow_exam_fault>>(JToken.ReadFrom(reader).ToString());
}
}
string exam_operation_ticket_file = Path + "/Json/exam_operation_ticket.json";
//读取json文件
using (StreamReader file = File.OpenText(exam_operation_ticket_file))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
DataBase.exam_operation_ticket_list = JsonConvert.DeserializeObject<List<DataService.Model.pow_exam_operation_ticket>>(JToken.ReadFrom(reader).ToString());
}
}
return Write(APICode.Success, exam_model);
}
/// <summary>
/// Post 开始考试接口
/// </summary>
/// <param name="ExamId">考试id</param>
/// <param name="UserId">考生id</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string StartExam(string url, string ExamId, string UserId)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "StartExam.txt", "ExamId" + ExamId + "UserId" + UserId);
var user_model = DataBase.user_list.Where(a => a.user_id == UserId).FirstOrDefault();
if (user_model == null)
{
return Write(APICode.Fail, "考生信息不存在");
}
var count = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).Count();
if (count > 0)
{
return Write(APICode.Fail, "考试考试信息已存在");
}
var query = (from exam in DataBase.exam_list
join scene in DataBase.scene_list on exam.SceneId equals scene.SceneId into sceneJoin
from scene in sceneJoin.DefaultIfEmpty()
join platformArea in DataBase.platform_area_list on exam.PlatformAreaId equals platformArea.PlatformAreaId into platformAreaJoin
from platformArea in platformAreaJoin.DefaultIfEmpty()
join line in DataBase.line_list on exam.LineId equals line.LineId into lineJoin
from line in lineJoin.DefaultIfEmpty()
select new
{
exam,
SceneName = scene.SceneName,
PlatformAreaName = platformArea.PlatformAreaName,
LineName = line.LineName
}).ToList();
var exam_model = query.Where(a => a.exam.ExamId == ExamId).FirstOrDefault();
if (exam_model != null)
{
var user_exam_model = new DataService.Model.pow_user_exam();
user_exam_model.UserExamId = Guid.NewGuid().ToString("N");
user_exam_model.UserId = UserId;
user_exam_model.ExamId = ExamId;
user_exam_model.ExamName = exam_model.exam.ExamName;
user_exam_model.StartExamTime = exam_model.exam.StartExamTime;
user_exam_model.EndExamTime = exam_model.exam.EndExamTime;
user_exam_model.ExaminationDuration = exam_model.exam.ExaminationDuration + ":00";
user_exam_model.SceneId = exam_model.exam.SceneId;
user_exam_model.SceneName = exam_model.SceneName;
user_exam_model.PlatformAreaId = exam_model.exam.PlatformAreaId;
user_exam_model.PlatformAreaName = exam_model.PlatformAreaName;
user_exam_model.LineId = exam_model.exam.LineId;
user_exam_model.LineName = exam_model.LineName;
user_exam_model.LinePatrolDate = exam_model.exam.LinePatrolDate;
user_exam_model.HandleDate = exam_model.exam.HandleDate;
user_exam_model.WorkOrderContent = exam_model.exam.WorkOrderContent;
user_exam_model.BackgroundInformation = exam_model.exam.BackgroundInformation;
user_exam_model.IncomingLineModelLength = exam_model.exam.IncomingLineModelLength;
user_exam_model.OutgoingLineModelLength = exam_model.exam.OutgoingLineModelLength;
user_exam_model.StartExamTime = DateTime.Now;
user_exam_model.Status = "考试中";
user_exam_model.ExaminationLink = "初始化";
user_exam_model.CreateTime = DateTime.Now;
user_exam_model.LeakageProtection = exam_model.exam.LeakageProtection;
user_exam_model.OverloadProtection = exam_model.exam.OverloadProtection;
user_exam_model.ShortCircuitDelayProtection = exam_model.exam.ShortCircuitDelayProtection;
user_exam_model.ShortCircuitProtection = exam_model.exam.ShortCircuitProtection;
user_exam_model.UndervoltageProtection = exam_model.exam.UndervoltageProtection;
user_exam_model.OvervoltageProtection = exam_model.exam.OvervoltageProtection;
user_exam_model.PhaseLossProtection = exam_model.exam.PhaseLossProtection;
user_exam_model.FusibleCoreCurrent = exam_model.exam.FusibleCoreCurrent;
user_exam_model.LineIsScore = "0";
user_exam_model.FaultIsScore = "0";
user_exam_model.ClimbrodIsScore = "0";
user_exam_model.IsScore = "0";
user_exam_model.FusibleCoreIsScore = "0";
user_exam_model.EnclosureIsScore = enclosure_score;
var tool_list = DataBase.exam_tool_list.Where(a => a.ExamId == exam_model.exam.ExamId);
var achievement_model = new DataService.Model.pow_achievement();
achievement_model.AchievementId = Guid.NewGuid().ToString("N");
achievement_model.ExamId = exam_model.exam.ExamId;
achievement_model.ExamName = exam_model.exam.ExamName;
achievement_model.UserId = user_model.user_id;
achievement_model.LoginName = user_model.login_name;
achievement_model.RealName = user_model.real_name;
achievement_model.ProvinceId = user_model.province_id;
achievement_model.ProvinceName = user_model.province;
achievement_model.CityId = user_model.city_id;
achievement_model.CityName = user_model.city;
achievement_model.TotalScore = 0;
achievement_model.ExamStartTime = DateTime.Now;
var exam_fault_list = DataBase.exam_fault_list.Where(a => a.ExamId == exam_model.exam.ExamId);
var exam_operation_ticket_list = DataBase.exam_operation_ticket_list.Where(a => a.ExamId == exam_model.exam.ExamId).OrderBy(s => s.Type).ThenBy(s => s.SerialNumber).ToList();
try
{
DataBase.user_exam_list.Add(user_exam_model);
var new_tool_list = new List<DataService.Model.pow_user_tool>();
foreach (var item in tool_list)
{
var tool_model = new DataService.Model.pow_user_tool();
tool_model.UserToolId = Guid.NewGuid().ToString("N");
tool_model.UserId = user_exam_model.UserId;
tool_model.ExamId = user_exam_model.ExamId;
tool_model.Purpose = item.Purpose;
tool_model.ToolName = item.ToolName;
tool_model.ToolType = item.ToolType;
tool_model.IsSelect = "0";
tool_model.IsScore = "0";
tool_model.Quantity = 0;
new_tool_list.Add(tool_model);
}
if (new_tool_list.Count > 0)
{
DataBase.user_tool_list.AddRange(new_tool_list);
}
DataBase.achievement_list.Add(achievement_model);
var new_fault_list = new List<DataService.Model.pow_user_fault>();
foreach (var item in exam_fault_list)
{
var fault_model = new DataService.Model.pow_user_fault();
fault_model.UserFaultId = Guid.NewGuid().ToString("N");
fault_model.UserId = user_exam_model.UserId;
fault_model.ExamId = item.ExamId;
fault_model.FaultId = item.FaultId;
fault_model.RootDeviceId = item.RootDeviceId;
fault_model.DeviceId = item.DeviceId;
fault_model.Type = item.Type;
fault_model.FaultType = item.FaultType;
fault_model.FaultDesc = item.FaultDesc;
fault_model.DefectLevel = item.DefectLevel;
fault_model.SpecificSimulation = item.SpecificSimulation;
fault_model.FaultPosition = item.FaultPosition;
fault_model.SelectSocre = item.SelectSocre;
fault_model.FaultScore = item.FaultScore;
fault_model.HandlerScore = item.HandlerScore;
fault_model.DegreesSerialNumber = item.DegreesSerialNumber;
fault_model.DegreesValue = item.DegreesValue;
fault_model.ChoiceQuestion = item.ChoiceQuestion;
fault_model.MultipleQuestion = item.MultipleQuestion;
fault_model.DifficultyLevel = item.DifficultyLevel;
fault_model.PositionValue = item.PositionValue;
fault_model.Position = item.Position;
fault_model.FusibleCoreNormal = item.FusibleCoreNormal;
fault_model.FusibleCoreFault = item.FusibleCoreFault;
fault_model.PorcelainBottleType = item.PorcelainBottleType;
fault_model.Direction = item.Direction;
fault_model.Topic = item.Topic;
fault_model.OptionA = item.OptionA;
fault_model.OptionB = item.OptionB;
fault_model.OptionC = item.OptionC;
fault_model.OptionD = item.OptionD;
fault_model.OptionE = item.OptionE;
fault_model.RightKey = item.RightKey;
fault_model.Settings = item.Settings;
fault_model.Name = item.Name;
fault_model.Value = item.Value;
fault_model.CableName = item.CableName;
fault_model.CreateTime = item.CreateTime;
fault_model.CableStart = item.CableStart;
fault_model.CableEnd = item.CableEnd;
fault_model.ModelLength = item.ModelLength;
fault_model.SensitiveKnowledge = item.SensitiveKnowledge;
fault_model.Minhui = item.Minhui;
fault_model.SensitiveLine = item.SensitiveLine;
fault_model.Allergy = item.Allergy;
fault_model.GracefulGraceful = item.GracefulGraceful;
fault_model.RequiredTool = item.RequiredTool;
fault_model.HasHandle = "false";
fault_model.CurreSelectDetail = "";
fault_model.FaultLocation = "";
fault_model.IsProcessingScore = "0";
new_fault_list.Add(fault_model);
}
if (new_fault_list.Count > 0)
{
DataBase.user_fault_list.AddRange(new_fault_list);
}
var new_ticket_list = new List<DataService.Model.pow_user_operation_proc_ticket>();
foreach (var model in exam_operation_ticket_list)
{
var ticket_model = new DataService.Model.pow_user_operation_proc_ticket();
ticket_model.UserOperationProcTicketId = Guid.NewGuid().ToString("N");
ticket_model.UserId = user_exam_model.UserId;
ticket_model.ExamId = model.ExamId;
ticket_model.OperationTicketId = model.OperationTicketId;
ticket_model.Type = model.Type;
ticket_model.SerialNumber = model.SerialNumber;
ticket_model.Content = model.Content;
ticket_model.State = 0;
ticket_model.IsScore = "0"; // model.IsScore; 是否扣分 01
ticket_model.Score = 0; // model.Score; 扣分值 0 不扣分
ticket_model.ScoreReason = ""; // model.ScoreReason; //扣分原因
ticket_model.CreateTime = DateTime.Now;
ticket_model.UpdateTime = null;
ticket_model.R1 = "";
ticket_model.R2 = "";
ticket_model.R3 = "";
new_ticket_list.Add(ticket_model);
}
if (new_ticket_list.Count > 0)
{
DataBase.user_operation_proc_ticket_list.AddRange(new_ticket_list);
}
return Write(APICode.Success, "创建考试成功");
}
catch (Exception ex)
{
return Write(APICode.Fail, "创建考试失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
/// <summary>
/// Post 结束考试接口
/// </summary>
/// <param name="url">接口域名</param>
/// <param name="ExamId">考试id</param>
/// <param name="UserId">考生id</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string EndExam(string url, string ExamId, string UserId)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "EndExam.txt", "ExamId" + ExamId + "UserId" + UserId);
var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (achievement_model == null)
{
return Write(APICode.Fail, "考生成绩信息不存在");
}
var now = DateTime.Now;
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
var add_achievement_details_list = new List<DataService.Model.pow_achievement_details>();
if (user_exam_model != null)
{
try
{
user_exam_model.EndExamTime = now;
achievement_model.ExamEndTime = now;
user_exam_model.Status = "已结束";
if (user_exam_model.EnclosureIsScore != "2")
{
var item_name = "不放置围栏分值";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var enclosure_is_score = decimal.Parse(user_exam_model.EnclosureIsScore);
var points_score = 2 - enclosure_is_score;
achievement_model.TotalScore = achievement_model.TotalScore + enclosure_is_score;
if (achievement_model.TotalScore < 0)
{
achievement_model.TotalScore = 0;
}
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = "不放置围栏分值";
details_model.ItemizedScore = enclosure_is_score;
details_model.Type = "围栏";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = 2;
DataBase.achievement_details_list.Add(details_model);
}
}
else
{
var item_name = "不放置围栏分值";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var enclosure_is_score = decimal.Parse(user_exam_model.EnclosureIsScore);
achievement_model.TotalScore = achievement_model.TotalScore + enclosure_is_score;
if (achievement_model.TotalScore < 0)
{
achievement_model.TotalScore = 0;
}
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = "不放置围栏分值";
details_model.ItemizedScore = 2;
details_model.Type = "围栏";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = 2;
DataBase.achievement_details_list.Add(details_model);
}
}
if (user_exam_model.LineIsScore == "1" || user_exam_model.FaultIsScore == "1")
{
var item_name = "箱门或插座未验电或验电顺序错误";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var electricity_score = decimal.Parse(ElectricityScore);
achievement_model.TotalScore = achievement_model.TotalScore - electricity_score;
if (achievement_model.TotalScore < 0)
{
achievement_model.TotalScore = 0;
}
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = "箱门或插座未验电或验电顺序错误";
details_model.ItemizedScore = -30;
details_model.Type = "验电";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = 2;
DataBase.achievement_details_list.Add(details_model);
}
}
else
{
var item_name = "箱门或插座未验电或验电顺序错误";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
achievement_model.TotalScore = achievement_model.TotalScore + 2;
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = "箱门或插座未验电或验电顺序错误";
details_model.ItemizedScore = 2;
details_model.Type = "验电";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = 2;
DataBase.achievement_details_list.Add(details_model);
}
}
#region
if (user_exam_model.ClimbrodIsScore == "1")
{
var item_name = "巡检爬杆";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var electricity_score = decimal.Parse(ClimbrodScore);
achievement_model.TotalScore = achievement_model.TotalScore - electricity_score;
if (achievement_model.TotalScore < 0)
{
achievement_model.TotalScore = 0;
}
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = "巡检爬杆";
details_model.ItemizedScore = -30;
details_model.Type = "巡检爬杆";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = 0;
DataBase.achievement_details_list.Add(details_model);
}
}
#endregion
if (user_exam_model.IsScore == "1")
{
var item_name = "台区选择错误分值";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var select_area_score = decimal.Parse(SelectAreaScore);
achievement_model.TotalScore = achievement_model.TotalScore - select_area_score;
if (achievement_model.TotalScore < 0)
{
achievement_model.TotalScore = 0;
}
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = "台区选择错误分值";
details_model.ItemizedScore = -30;
details_model.Type = "台区选择";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = 0;
DataBase.achievement_details_list.Add(details_model);
}
}
if (user_exam_model.FusibleCoreIsScore == "1")
{
var item_name = "未分闸状态拉合熔芯扣分分值";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
achievement_model.TotalScore = achievement_model.TotalScore - 30;
if (achievement_model.TotalScore < 0)
{
achievement_model.TotalScore = 0;
}
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = "未分闸状态拉合熔芯扣分分值";
details_model.ItemizedScore = -30;
details_model.Type = "未分闸状态拉合熔芯";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = 0;
DataBase.achievement_details_list.Add(details_model);
}
}
var details_model1 = new DataService.Model.pow_achievement_details();
details_model1.DetailsId = Guid.NewGuid().ToString("N");
details_model1.AchievementId = achievement_model.AchievementId;
details_model1.ItemName = "时间分";
details_model1.ItemizedScore = 5;
details_model1.Type = "时间分";
details_model1.CreateTime = DateTime.Now;
details_model1.TotalScore = 5;
achievement_model.TotalScore = achievement_model.TotalScore + 5;
DataBase.achievement_details_list.Add(details_model1);
return Write(APICode.Success, "结束考试成功");
}
catch (Exception)
{
return Write(APICode.Fail, "结束考试失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
/// <summary>
/// 获取提交的数据
/// </summary>
/// <param name="ExamId">考试id</param>
/// <param name="UserId">用户id</param>
/// <returns></returns>
public List<SGAnswer> GetAnswer(string ExamId, string UserId, int lesson_plan_id)
{
var list = new List<SGAnswer>();
var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (achievement_model != null)
{
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (user_exam_model != null)
{
//if (user_exam_model.Status == "已结束")
//{
var model = new SGAnswer(lesson_plan_id, new List<SGAnswerInfo>());
var answer_info = new List<SGAnswerInfo>();
var answer_info_model1 = new SGAnswerInfo("1", "巡检工器具", 0, 0, 0, "", new List<SGStep>());
var answer_info_model2 = new SGAnswerInfo("2", "排故工器具", 0, 0, 0, "", new List<SGStep>());
var answer_info_model3 = new SGAnswerInfo("3", "停电操作票", 0, 0, 0, "", new List<SGStep>());
var answer_info_model4 = new SGAnswerInfo("4", "送电操作票", 0, 0, 0, "", new List<SGStep>());
var answer_info_model5 = new SGAnswerInfo("5", "停电操作票步骤", 0, 0, 0, "", new List<SGStep>());
var answer_info_model6 = new SGAnswerInfo("6", "送电操作票步骤", 0, 0, 0, "", new List<SGStep>());
var answer_info_model7 = new SGAnswerInfo("7", "围栏", 0, 0, 0, "", new List<SGStep>());
var answer_info_model8 = new SGAnswerInfo("8", "验电", 0, 0, 0, "", new List<SGStep>());
var answer_info_model9 = new SGAnswerInfo("9", "时间分", 0, 0, 0, "", new List<SGStep>());
var answer_info_model10 = new SGAnswerInfo("10", "缺陷查找、缺陷处理、缺陷分类分值", 0, 0, 0, "", new List<SGStep>());
var answer_info_model11 = new SGAnswerInfo("11", "其它扣分项", 0, 0, 0, "", new List<SGStep>());
var data = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId).OrderBy(a => a.CreateTime).ToList();
#region
var all_line_tool_list = new List<SGStep>();
var line_tool_model = data.Where(a => a.Type == "巡线工器具").FirstOrDefault();
if (line_tool_model != null)
{
answer_info_model1.AutoScore = double.Parse(line_tool_model.ItemizedScore.ToString());
var tool_model = new SGStep(line_tool_model.ItemName, double.Parse(line_tool_model.TotalScore.ToString()), double.Parse(line_tool_model.ItemizedScore.ToString()));
all_line_tool_list.Add(tool_model);
}
else
{
var tool_model = new SGStep("巡检工器具选择", 3, 0);
all_line_tool_list.Add(tool_model);
}
var user_tool_list = DataBase.user_tool_list.Where(a => a.ExamId == ExamId && a.UserId == UserId && a.IsScore == "1").ToList();
var line_tool_list = user_tool_list.Where(a => a.Purpose == "巡线").ToList();
for (int i = 0; i < line_tool_list.Count; i++)
{
double score = 0;
if (line_tool_list[i].IsSelect == "1")
{
score = LineMultipleScore;
}
else
{
score = LineMomentScore;
}
var tool_model = new SGStep(line_tool_list[i].ToolName, 0, double.Parse((-score).ToString()));
all_line_tool_list.Add(tool_model);
}
if (all_line_tool_list.Count() > 0)
{
answer_info_model1.StepArr = all_line_tool_list;
}
#endregion
#region
var all_trouble_tool_list = new List<SGStep>();
var trouble_tool_model = data.Where(a => a.Type == "排故工器具").FirstOrDefault();
if (trouble_tool_model != null)
{
answer_info_model2.AutoScore = double.Parse(trouble_tool_model.ItemizedScore.ToString());
var tool_model = new SGStep(trouble_tool_model.ItemName, double.Parse(trouble_tool_model.TotalScore.ToString()), double.Parse(trouble_tool_model.ItemizedScore.ToString()));
all_trouble_tool_list.Add(tool_model);
}
else
{
var tool_model = new SGStep("排故工器具选择", 3, 0);
all_trouble_tool_list.Add(tool_model);
}
var trouble_tool_list = user_tool_list.Where(a => a.Purpose == "排故").ToList();
for (int i = 0; i < trouble_tool_list.Count; i++)
{
double score = 0;
if (trouble_tool_list[i].IsSelect == "1")
{
score = LineMultipleScore;
}
else
{
score = LineMomentScore;
}
var tool_model = new SGStep(trouble_tool_list[i].ToolName, 0, double.Parse((-score).ToString()));
all_trouble_tool_list.Add(tool_model);
}
if (all_trouble_tool_list.Count() > 0)
{
answer_info_model2.StepArr = all_trouble_tool_list;
}
#endregion
#region
var power_failure_model = data.Where(a => a.Type == "停电操作票").FirstOrDefault();
if (power_failure_model != null)
{
answer_info_model3.AutoScore = double.Parse(power_failure_model.ItemizedScore.ToString());
var power_model = new SGStep(power_failure_model.ItemName, double.Parse(power_failure_model.TotalScore.ToString()), double.Parse(power_failure_model.ItemizedScore.ToString()));
answer_info_model3.StepArr = new List<SGStep>() { power_model };
}
else
{
var power_model = new SGStep("停电操作票选择", 5, 0);
answer_info_model3.StepArr = new List<SGStep>() { power_model };
}
#endregion
#region
var power_transmission_model = data.Where(a => a.Type == "送电操作票").FirstOrDefault();
if (power_transmission_model != null)
{
answer_info_model4.AutoScore = double.Parse(power_transmission_model.ItemizedScore.ToString());
var power_model = new SGStep(power_transmission_model.ItemName, double.Parse(power_transmission_model.TotalScore.ToString()), double.Parse(power_transmission_model.ItemizedScore.ToString()));
answer_info_model4.StepArr = new List<SGStep>() { power_model };
}
else
{
var power_model = new SGStep("送电操作票选择", 5, 0);
answer_info_model4.StepArr = new List<SGStep>() { power_model };
}
#endregion
#region
var all_power_failure_step_list = new List<SGStep>();
var power_failure_step_model = data.Where(a => a.Type == "停电操作票步骤").FirstOrDefault();
if (power_failure_step_model != null)
{
answer_info_model5.AutoScore = double.Parse(power_failure_step_model.ItemizedScore.ToString());
var power_model = new SGStep(power_failure_step_model.ItemName, double.Parse(power_failure_step_model.TotalScore.ToString()), double.Parse(power_failure_step_model.ItemizedScore.ToString()));
all_power_failure_step_list.Add(power_model);
}
else
{
var power_model = new SGStep("停电操作票步骤", 5, 0);
all_power_failure_step_list.Add(power_model);
}
var proc_ticket_list = DataBase.user_operation_proc_ticket_list.Where(a => a.ExamId == ExamId && a.UserId == UserId && a.IsScore == "1").ToList();
var power_failure_step_list = proc_ticket_list.Where(a => a.Type == "停电").OrderBy(a => a.SerialNumber).ToList();
for (int i = 0; i < power_failure_step_list.Count; i++)
{
var power_model = new SGStep(power_failure_step_list[i].Content, 0, double.Parse((-power_failure_step_list[i].Score).ToString()));
all_power_failure_step_list.Add(power_model);
}
if (all_power_failure_step_list.Count() > 0)
{
answer_info_model5.StepArr = all_power_failure_step_list;
}
#endregion
#region
var all_power_transmission_step_list = new List<SGStep>();
var power_transmission_step_model = data.Where(a => a.Type == "送电操作票步骤").FirstOrDefault();
if (power_transmission_step_model != null)
{
answer_info_model6.AutoScore = double.Parse(power_transmission_step_model.ItemizedScore.ToString());
var power_model = new SGStep(power_transmission_step_model.ItemName, double.Parse(power_transmission_step_model.TotalScore.ToString()), double.Parse(power_transmission_step_model.ItemizedScore.ToString()));
all_power_transmission_step_list.Add(power_model);
}
else
{
var power_model = new SGStep("送电操作票步骤", 5, 0);
all_power_transmission_step_list.Add(power_model);
}
var power_transmission_step_list = proc_ticket_list.Where(a => a.Type == "送电").OrderBy(a => a.SerialNumber).ToList();
for (int i = 0; i < power_transmission_step_list.Count; i++)
{
var power_model = new SGStep(power_transmission_step_list[i].Content, 0, double.Parse((-power_transmission_step_list[i].Score).ToString()));
all_power_transmission_step_list.Add(power_model);
}
if (all_power_transmission_step_list.Count() > 0)
{
answer_info_model6.StepArr = all_power_transmission_step_list;
}
#endregion
#region
var place_model = data.Where(a => a.Type == "围栏").FirstOrDefault();
if (place_model != null)
{
answer_info_model7.AutoScore = double.Parse(place_model.ItemizedScore.ToString());
var power_model = new SGStep(place_model.ItemName, double.Parse(place_model.TotalScore.ToString()), double.Parse(place_model.ItemizedScore.ToString()));
answer_info_model7.StepArr = new List<SGStep>() { power_model };
}
else
{
var power_model = new SGStep("不放置围栏分值", 2, 0);
answer_info_model7.StepArr = new List<SGStep>() { power_model };
}
#endregion
#region
var electricity_model = data.Where(a => a.Type == "验电").FirstOrDefault();
if (electricity_model != null)
{
answer_info_model8.AutoScore = double.Parse(electricity_model.ItemizedScore.ToString());
var power_model = new SGStep(electricity_model.ItemName, double.Parse(electricity_model.TotalScore.ToString()), double.Parse(electricity_model.ItemizedScore.ToString()));
answer_info_model8.StepArr = new List<SGStep>() { power_model };
}
else
{
var power_model = new SGStep("箱门或插座未验电或验电顺序错误", 2, 0);
answer_info_model8.StepArr = new List<SGStep>() { power_model };
}
#endregion
#region
var time_model = data.Where(a => a.Type == "时间分").FirstOrDefault();
if (time_model != null)
{
answer_info_model9.AutoScore = double.Parse(time_model.ItemizedScore.ToString());
var power_model = new SGStep(time_model.ItemName, double.Parse(time_model.TotalScore.ToString()), double.Parse(time_model.ItemizedScore.ToString()));
answer_info_model9.StepArr = new List<SGStep>() { power_model };
}
else
{
var power_model = new SGStep("时间分", 5, 0);
answer_info_model9.StepArr = new List<SGStep>() { power_model };
}
#endregion
#region
var all_fault_list = new List<SGStep>();
var fault_list = data.Where(a => a.Type == "故障记录选择" || a.Type == "故障选择题处理" || a.Type == "故障排故处理").OrderBy(a => a.CreateTime).ToList();
var fault_type_list = fault_list.GroupBy(a => a.FaultDesc).ToList();
for (int i = 0; i < fault_type_list.Count; i++)
{
var fault = fault_list.Where(a => a.FaultDesc == fault_type_list[i].Key).ToList();
var first = fault.Where(a => a.ScoreType == "缺陷查找分值").FirstOrDefault();
if (first != null)
{
var power_model = new SGStep(fault_type_list[i].Key + "-查找", double.Parse(first.TotalScore.ToString()), double.Parse(first.ItemizedScore.ToString()));
all_fault_list.Add(power_model);
}
else
{
var power_model = new SGStep(fault_type_list[i].Key + "-查找", 0, 0);
all_fault_list.Add(power_model);
}
var second = fault.Where(a => a.ScoreType == "缺陷分类分值").FirstOrDefault();
if (second != null)
{
var power_model = new SGStep(fault_type_list[i].Key + "-分类", double.Parse(second.TotalScore.ToString()), double.Parse(second.ItemizedScore.ToString()));
all_fault_list.Add(power_model);
}
else
{
var power_model = new SGStep(fault_type_list[i].Key + "-分类", 0, 0);
all_fault_list.Add(power_model);
}
var third = fault.Where(a => a.ScoreType == "缺陷处理分值").FirstOrDefault();
if (third != null)
{
var power_model = new SGStep(fault_type_list[i].Key + "-处理", double.Parse(third.TotalScore.ToString()), double.Parse(third.ItemizedScore.ToString()));
all_fault_list.Add(power_model);
}
else
{
var power_model = new SGStep(fault_type_list[i].Key + "-处理", 0, 0);
all_fault_list.Add(power_model);
}
}
if (all_fault_list.Count() > 0)
{
answer_info_model10.AutoScore = all_fault_list.Sum(a => a.TotalScore);
answer_info_model10.StepArr = all_fault_list;
}
#endregion
#region
var other_step_list = new List<SGStep>();
//巡检爬杆
var climbrod_model = data.Where(a => a.Type == "巡检爬杆").FirstOrDefault();
if (climbrod_model != null)
{
var power_model = new SGStep(climbrod_model.ItemName, double.Parse(climbrod_model.TotalScore.ToString()), double.Parse(climbrod_model.ItemizedScore.ToString()));
other_step_list.Add(power_model);
}
var platform_area_model = data.Where(a => a.Type == "台区选择").FirstOrDefault();
if (platform_area_model != null)
{
var power_model = new SGStep(platform_area_model.ItemName, double.Parse(platform_area_model.TotalScore.ToString()), double.Parse(platform_area_model.ItemizedScore.ToString()));
other_step_list.Add(power_model);
}
var fusible_core_model = data.Where(a => a.Type == "未分闸状态拉合熔芯").FirstOrDefault();
if (fusible_core_model != null)
{
var power_model = new SGStep(fusible_core_model.ItemName, double.Parse(fusible_core_model.TotalScore.ToString()), double.Parse(fusible_core_model.ItemizedScore.ToString()));
other_step_list.Add(power_model);
}
if (other_step_list.Count() > 0)
{
answer_info_model11.AutoScore = other_step_list.Sum(a => a.TotalScore);
answer_info_model11.StepArr = other_step_list;
}
#endregion
answer_info.Add(answer_info_model1);
answer_info.Add(answer_info_model2);
answer_info.Add(answer_info_model3);
answer_info.Add(answer_info_model4);
answer_info.Add(answer_info_model5);
answer_info.Add(answer_info_model6);
answer_info.Add(answer_info_model7);
answer_info.Add(answer_info_model8);
answer_info.Add(answer_info_model9);
answer_info.Add(answer_info_model10);
answer_info.Add(answer_info_model11);
model.AnswerInfo = answer_info;
list.Add(model);
//}
}
}
return list;
}
/// <summary>
/// 操作票接口
/// </summary>
/// <param name="ExamId">开始id</param>
/// <param name="UserId">用户id</param>
/// <param name="Type">送电、停电</param>
/// <param name="data">json数组</param>
/// <returns></returns>
public string WriteTicket(string url, string ExamId, string UserId, string Type, string data)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "WriteTicket.txt", "ExamId" + ExamId + "UserId" + UserId + "Type" + Type + "data" + data);
if (string.IsNullOrEmpty(data))
{
return GetResult(false, "data参数不能为空");
}
if (string.IsNullOrEmpty(ExamId))
{
return GetResult(false, "ExamId参数不能为空");
}
if (string.IsNullOrEmpty(Type))
{
return GetResult(false, "Type参数不能为空");
}
if (string.IsNullOrEmpty(UserId))
{
return GetResult(false, "UserId参数不能为空");
}
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (user_exam_model != null)
{
if (user_exam_model.Status == "已结束")
{
return GetResult(false, "考生考试已结束");
}
}
else
{
return GetResult(false, "考生考试信息不存在");
}
var achievement = DataBase.achievement_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (null == achievement)
{
return GetResult(false, "考生成绩数据不存在");
}
//用户操作ticket
var list_user_operation_ticket = JsonConvert.DeserializeObject<List<OperationTicketData>>(data);
var list_exam_operation_ticket = DataBase.exam_operation_ticket_list.Where(a => a.ExamId == ExamId && a.Type == Type && a.Content.Length > 0).OrderBy(s => s.SerialNumber).ToList();
int total_score = 5;
var list_TicketId_HasScore = new List<string>();
var score = ComputeTicketScore(ref total_score, list_TicketId_HasScore, list_user_operation_ticket, list_exam_operation_ticket);
for (int i = 0; i < list_user_operation_ticket.Count; i++)
{
var item = list_user_operation_ticket[i];
var model = new DataService.Model.pow_user_operation_ticket();
model.UserOperationTicketId = Guid.NewGuid().ToString("N");
model.UserId = UserId;
model.ExamId = ExamId;
model.OperationTicketId = item.OperationTicketId;
model.Type = item.Type;
model.SerialNumber = i + 1; // int.Parse(item.SerialNumber);
model.Content = item.Content;
model.IsSelect = "1"; //是否选择 0未选择1已选择
model.IsScore = list_TicketId_HasScore.Contains(item.OperationTicketId) ? "0" : "1"; //是否扣分 01
model.CreateTime = DateTime.Now;
DataBase.user_operation_ticket_list.Add(model);
}
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement.AchievementId;
details_model.ItemName = Type + "操作票选择";
details_model.ItemizedScore = total_score;
details_model.Type = Type + "操作票";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = 5;
DataBase.achievement_details_list.Add(details_model);
achievement.TotalScore = achievement.TotalScore + total_score;
return GetResult(true, null, "操作票总分:" + total_score);
}
/// <summary>
/// 查询操作票步骤,用以初始化或断点续传操作票步骤
/// </summary>
/// <param name="ExamId">开始id</param>
/// <param name="UserId">用户id</param>
/// <param name="Type">送电、停电</param>
/// <param name="data">json数组</param>
/// <returns></returns>
public string QueryTicketProc(string url, string ExamId, string UserId, string Type)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "QueryTicketProc.txt", "ExamId" + ExamId + "UserId" + UserId + "Type" + Type);
if (string.IsNullOrEmpty(ExamId))
{
return GetResult(false, "ExamId参数不能为空");
}
if (string.IsNullOrEmpty(Type))
{
return GetResult(false, "Type参数不能为空");
}
if (string.IsNullOrEmpty(UserId))
{
return GetResult(false, "UserId参数不能为空");
}
//UserId :用户id
//ExamId:考试id
//Type:送电、停电
var proc_ticket_list = DataBase.user_operation_proc_ticket_list.Where(a => a.UserId == UserId && a.ExamId == ExamId && a.Type == Type).OrderBy(s => s.SerialNumber).ToList();
if (proc_ticket_list.Count > 0)
{
return GetResult(true, proc_ticket_list, proc_ticket_list.Count.ToString());
}
else
{
return GetResult(false, null, "记录不存在");
}
}
/// <summary>
/// 单步填写操作票步骤接口
/// </summary>
/// <param name="ExamId">开始id</param>
/// <param name="UserId">用户id</param>
/// <param name="Type">送电、停电</param>
/// <param name="data">json数组</param>
/// <returns></returns>
public string WriteTicketProc(string url, string ExamId, string UserId, string Type, string OperationTicketId, string Score, string ScoreReason)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "WriteTicketProc.txt", "ExamId" + ExamId + "UserId" + UserId + "Type" + Type + "OperationTicketId" + OperationTicketId + ",Score" + Score + ",ScoreReason:" + ScoreReason);
//OperationTicketId: 步骤id
//UserId :用户id
//ExamId:考试id
//Type:送电、停电
//Score 扣分值:0不扣分
//ScoreReason扣分原因
if (string.IsNullOrEmpty(OperationTicketId))
{
return GetResult(false, "OperationTicketId参数不能为空");
}
if (string.IsNullOrEmpty(ExamId))
{
return GetResult(false, "ExamId参数不能为空");
}
if (string.IsNullOrEmpty(Type))
{
return GetResult(false, "Type参数不能为空");
}
if (string.IsNullOrEmpty(UserId))
{
return GetResult(false, "UserId参数不能为空");
}
if (string.IsNullOrEmpty(Score))
{
return GetResult(false, "Score参数不能为空");
}
if (string.IsNullOrEmpty(ScoreReason))
{
return GetResult(false, "ScoreReason参数不能为空");
}
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (user_exam_model != null)
{
if (user_exam_model.Status == "已结束")
{
return GetResult(false, "考生考试已结束");
}
}
else
{
return GetResult(false, "考生考试信息不存在");
}
//OperationTicketId: 步骤id
//UserId :用户id
//ExamId:考试id
//Type:送电、停电
//Score 扣分值:0不扣分
//ScoreReason扣分原因
var proc_ticket = DataBase.user_operation_proc_ticket_list.Where(a => a.OperationTicketId == OperationTicketId && a.UserId == UserId && a.ExamId == ExamId && a.Type == Type).FirstOrDefault();
if (proc_ticket != null)
{
try
{
proc_ticket.State = 1; //已开始
proc_ticket.UpdateTime = DateTime.Now;
int i_score = 0;
int.TryParse(Score, out i_score);
proc_ticket.Score = i_score;
proc_ticket.ScoreReason = ScoreReason;
//是否扣分 01
if (i_score > 0)
{
proc_ticket.IsScore = "1";
}
else
{
proc_ticket.IsScore = "0";
}
return GetResult(true, "");
}
catch (Exception)
{
return GetResult(false, "");
}
}
else
{
return GetResult(false, "操作票步骤信息不存在");
}
}
/// <summary>
/// 停止操作票所有步骤接口,计算分数累计成绩
/// </summary>
/// <param name="ExamId">开始id</param>
/// <param name="UserId">用户id</param>
/// <param name="Type">送电、停电</param>
/// <returns></returns>
public string StopTicketProc(string url, string ExamId, string UserId, string Type)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "StopTicketProc.txt", "ExamId" + ExamId + "UserId" + UserId + "Type" + Type);
if (string.IsNullOrEmpty(ExamId))
{
return GetResult(false, "ExamId参数不能为空");
}
if (string.IsNullOrEmpty(Type))
{
return GetResult(false, "Type参数不能为空");
}
if (string.IsNullOrEmpty(UserId))
{
return GetResult(false, "UserId参数不能为空");
}
//UserId :用户id
//ExamId:考试id
//Type:送电、停电
var achievement = DataBase.achievement_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (null == achievement)
{
return GetResult(false, "考生成绩数据不存在");
}
var proc_ticket_list = DataBase.user_operation_proc_ticket_list.Where(a => a.UserId == UserId && a.ExamId == ExamId && a.Type == Type && a.Content.Length > 0).OrderBy(s => s.SerialNumber).ToList();
if (proc_ticket_list.Count <= 0)
{
return GetResult(false, "操作票步骤数据不存在");
}
//获取操作票步骤得分
var total_score = get_ticket_proc_scrore(proc_ticket_list);
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement.AchievementId;
details_model.ItemName = Type + "操作票步骤";
details_model.ItemizedScore = total_score;
details_model.Type = Type + "操作票步骤";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = 5;
DataBase.achievement_details_list.Add(details_model);
achievement.TotalScore = achievement.TotalScore + total_score;
return GetResult(true, null, "操作票步骤总分:" + total_score);
}
/// <summary>
/// Post 巡线、排故工器具接口
/// </summary>
/// <param name="parameter">参数</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string AddUserTool(string url, string parameter)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "AddUserTool.txt", "parameter" + parameter);
var model = JsonConvert.DeserializeObject<DataService.Api.add_user_tool_request>(parameter);
if (model != null)
{
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault();
if (user_exam_model != null)
{
if (user_exam_model.Status == "已结束")
{
return Write(APICode.Fail, "考生考试已结束");
}
try
{
var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault();
if (achievement_model == null)
{
return Write(APICode.Fail, "考生成绩数据不存在");
}
var user_tool_list = DataBase.user_tool_list.Where(a => a.UserId == model.UserId && model.ExamId == model.ExamId && a.Purpose == model.Purpose).ToList();
var tool_list = model.Tool.Select(a => a.ToolName).ToList();
//var local_tool_list = model.Tool.Select(a => a.ToolName).ToList();
//用户有、正确有,修改是否选择
//用户有、正确没有,新增数据
//用户没有、正确有,
var line_total_score = double.Parse(LineTotalScore.ToString());
var total_score = decimal.Parse(LineTotalScore.ToString());
////相同的数据
//var IdenticalData = user_tool_list.Where(s => tool_list.Contains(s.ToolName)).Select(s => s.ToolName).ToArray();
////不同
//var DifferentData = user_tool_list.Where(s => !tool_list.Contains(s.ToolName)).ToList();
////不同 用户选择数据里有,本地数据库里没有
//var FieldCaseData = model.Tool.Where(s => !local_tool_list.Contains(s.ToolName)).ToList();
foreach (var item in model.Tool)
{
var tool_model = user_tool_list.Where(a => a.ToolName == item.ToolName).FirstOrDefault();
if (tool_model != null)
{
tool_model.Quantity = item.Quantity;
tool_model.IsSelect = "1";
tool_model.IsScore = "0";
}
else
{
if (line_total_score != 0)
{
line_total_score = line_total_score - LineMultipleScore;
if (line_total_score < 0)
{
line_total_score = 0;
}
}
var add_tool_model = new DataService.Model.pow_user_tool();
add_tool_model.UserToolId = Guid.NewGuid().ToString("N");
add_tool_model.UserId = model.UserId;
add_tool_model.ExamId = model.ExamId;
add_tool_model.Purpose = model.Purpose;
add_tool_model.ToolName = item.ToolName;
add_tool_model.IsSelect = "1";
add_tool_model.Quantity = item.Quantity;
add_tool_model.IsScore = "1";
DataBase.user_tool_list.Add(add_tool_model);
}
}
//本地数据库正确数据里有,用户选择数据里没有,少选
var correct_data = user_tool_list.Where(s => !tool_list.Contains(s.ToolName)).ToList();
foreach (var item in correct_data)
{
if (line_total_score != 0)
{
line_total_score = line_total_score - LineMomentScore;
if (line_total_score < 0)
{
line_total_score = 0;
}
}
item.IsScore = "1";
}
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = model.Purpose + "工器具选择";
details_model.ItemizedScore = decimal.Parse(line_total_score.ToString());
details_model.Type = model.Purpose + "工器具";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = total_score;
DataBase.achievement_details_list.Add(details_model);
achievement_model.TotalScore = achievement_model.TotalScore + details_model.ItemizedScore.Value;
return Write(APICode.Success, "成功");
}
catch (Exception)
{
return Write(APICode.Fail, "失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
else
{
return Write(APICode.Fail, "请求参数无数据");
}
}
/// <summary>
/// Post 保存考试故障记录接口
/// </summary>
/// <param name="parameter">参数</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string AddUserFaultRecord(string url, string parameter)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "AddUserFaultRecord.txt", "parameter" + parameter);
var model = JsonConvert.DeserializeObject<DataService.Api.add_user_fault_record_request>(parameter);
if (model != null)
{
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault();
if (user_exam_model != null)
{
try
{
if (user_exam_model.Status == "已结束")
{
return Write(APICode.Fail, "考生考试已结束");
}
var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault();
if (achievement_model == null)
{
return Write(APICode.Fail, "考生成绩数据不存在");
}
var user_fault_list = DataBase.user_fault_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).ToList();
var select_total_score = user_fault_list.Where(a => a.ChoiceQuestion != "0").Sum(a => decimal.Parse(a.SelectSocre));
var fault_total_score = user_fault_list.Where(a => a.ChoiceQuestion != "0").Sum(a => decimal.Parse(a.FaultScore));
var handler_score = user_fault_list.Where(a => a.ChoiceQuestion != "0").Sum(a => decimal.Parse(a.HandlerScore));
var total = select_total_score + fault_total_score + handler_score;//总分
var record_list = new List<DataService.Model.pow_user_fault_record>();
var details_list = new List<DataService.Model.pow_achievement_details>();
var total_defect_score = decimal.Parse(TotalDefectScore);
decimal total_score = 0;
//组织树
var tree_list = ReadTree();
foreach (var item in model.Data)
{
var new_fault_model = new DataService.Model.pow_user_fault_record();
if (!string.IsNullOrEmpty(item.FaultId))
{
var fault_model = user_fault_list.Where(a => a.FaultId == item.FaultId && a.RootDeviceId == item.RootDeviceId && a.DeviceId == item.DeviceId).FirstOrDefault();
if (fault_model.FaultDesc == "导线未绑扎、扎线断股" || fault_model.FaultDesc == "瓷瓶歪斜松动" || fault_model.FaultDesc == "瓷瓶损坏")
{
item.Value = "";
}
if (item.Value.Contains("东侧") || item.Value.Contains("北侧") || item.Value.Contains("西侧"))
{
item.Value = item.Value + "拉线";
}
var root_device_name = "";
var device_name = "";
if (fault_model != null)
{
var first_list = tree_list.Where(a => a.TowerId == item.RootDeviceId).FirstOrDefault();
if (first_list != null)
{
root_device_name = first_list.Tower;
if (first_list.TowerId != item.DeviceId)
{
if (first_list.Data != null)
{
var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == item.DeviceId).FirstOrDefault();
if (two_list != null)
{
device_name = two_list.PowerDistributionBox;
}
else
{
var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == item.DeviceId).FirstOrDefault();
if (three_list != null)
{
device_name = three_list.Line;
}
}
}
}
}
var is_find_score = "0";
var is_classification_score = "0";
if (item.IsCorrect == "1")
{
if (fault_model.ChoiceQuestion != "0")
{
is_find_score = "1";
decimal select_score = 0;
decimal fault_score = 0;
if (fault_model.FaultDesc == "配电箱箱门未加锁" || fault_model.FaultDesc == "柜门与箱体没有链接线" || fault_model.FaultDesc == "配电箱孔洞未封堵")
{
var value_list = new List<string>();
if (fault_model.FaultDesc != "配电箱孔洞未封堵")
{
value_list = fault_model.Position.Split('|').ToList();
}
else
{
value_list = fault_model.MultipleQuestion.Split('|').ToList();
}
foreach (var position_item in value_list)
{
select_score = System.Decimal.Round((decimal.Parse(fault_model.SelectSocre) / total) * total_defect_score, 3);
var item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷查找分值";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault();
if (new_details_model == null)
{
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = item_name;
details_model.ItemizedScore = select_score;
details_model.Type = "故障记录选择";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = select_score;
details_model.FaultDesc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item;
details_model.ScoreType = "缺陷查找分值";
details_list.Add(details_model);
total_score = total_score + select_score;
}
}
if (item.DefectLevel == fault_model.DefectLevel)
{
fault_score = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * total_defect_score, 3);
var item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷分类分值";
var achievement_details_model2 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name2).FirstOrDefault();
if (achievement_details_model2 == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name2).FirstOrDefault();
if (new_details_model == null)
{
var details_model2 = new DataService.Model.pow_achievement_details();
details_model2.DetailsId = Guid.NewGuid().ToString("N");
details_model2.AchievementId = achievement_model.AchievementId;
details_model2.ItemName = item_name2;
details_model2.ItemizedScore = fault_score;
details_model2.Type = "故障记录选择";
details_model2.CreateTime = DateTime.Now;
details_model2.TotalScore = fault_score;
details_model2.FaultDesc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item;
details_model2.ScoreType = "缺陷分类分值";
details_list.Add(details_model2);
total_score = total_score + fault_score;
is_classification_score = "1";
}
}
}
else
{
fault_score = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * total_defect_score, 3);
var item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷分类分值";
var achievement_details_model2 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name2).FirstOrDefault();
if (achievement_details_model2 == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name2).FirstOrDefault();
if (new_details_model == null)
{
var details_model2 = new DataService.Model.pow_achievement_details();
details_model2.DetailsId = Guid.NewGuid().ToString("N");
details_model2.AchievementId = achievement_model.AchievementId;
details_model2.ItemName = item_name2;
details_model2.ItemizedScore = 0;
details_model2.Type = "故障记录选择";
details_model2.CreateTime = DateTime.Now;
details_model2.TotalScore = fault_score;
details_model2.FaultDesc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item;
details_model2.ScoreType = "缺陷分类分值";
details_list.Add(details_model2);
}
}
}
}
}
else
{
select_score = System.Decimal.Round((decimal.Parse(fault_model.SelectSocre) / total) * total_defect_score, 3);
var item_name = "";
var desc = "";
if (!string.IsNullOrEmpty(item.Value))
{
item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value + "-" + "缺陷查找分值";
desc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value;
}
else
{
item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + "缺陷查找分值";
desc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc;
}
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault();
if (new_details_model == null)
{
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = item_name;
details_model.FaultDesc = desc;
details_model.ItemizedScore = select_score;
details_model.Type = "故障记录选择";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = select_score;
details_model.ScoreType = "缺陷查找分值";
details_list.Add(details_model);
total_score = total_score + select_score;
}
}
if (item.DefectLevel == fault_model.DefectLevel)
{
fault_score = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * total_defect_score, 3);
var item_name2 = "";
var desc2 = "";
if (!string.IsNullOrEmpty(item.Value))
{
item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value + "-" + "缺陷分类分值";
desc2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value;
}
else
{
item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + "缺陷分类分值";
desc2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc;
}
var achievement_details_model2 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name2).FirstOrDefault();
if (achievement_details_model2 == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name2).FirstOrDefault();
if (new_details_model == null)
{
var details_model2 = new DataService.Model.pow_achievement_details();
details_model2.DetailsId = Guid.NewGuid().ToString("N");
details_model2.AchievementId = achievement_model.AchievementId;
details_model2.ItemName = item_name2;
details_model2.FaultDesc = desc2;
details_model2.ItemizedScore = fault_score;
details_model2.Type = "故障记录选择";
details_model2.CreateTime = DateTime.Now;
details_model2.TotalScore = fault_score;
details_model2.ScoreType = "缺陷分类分值";
details_list.Add(details_model2);
total_score = total_score + fault_score;
is_classification_score = "1";
}
}
}
else
{
fault_score = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * total_defect_score, 3);
var item_name2 = "";
var desc2 = "";
if (!string.IsNullOrEmpty(item.Value))
{
item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value + "-" + "缺陷分类分值";
desc2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value;
}
else
{
item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + "缺陷分类分值";
desc2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc;
}
var achievement_details_model2 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name2).FirstOrDefault();
if (achievement_details_model2 == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name2).FirstOrDefault();
if (new_details_model == null)
{
var details_model2 = new DataService.Model.pow_achievement_details();
details_model2.DetailsId = Guid.NewGuid().ToString("N");
details_model2.AchievementId = achievement_model.AchievementId;
details_model2.ItemName = item_name2;
details_model2.FaultDesc = desc2;
details_model2.ItemizedScore = 0;
details_model2.Type = "故障记录选择";
details_model2.CreateTime = DateTime.Now;
details_model2.TotalScore = fault_score;
details_model2.ScoreType = "缺陷分类分值";
details_list.Add(details_model2);
}
}
}
}
}
}
new_fault_model.UserFaultRecordId = Guid.NewGuid().ToString("N");
new_fault_model.UserId = model.UserId;
new_fault_model.ExamId = model.ExamId;
new_fault_model.FaultId = item.FaultId;
new_fault_model.RootDeviceId = item.RootDeviceId;
new_fault_model.DeviceId = item.DeviceId;
new_fault_model.Type = item.Type;
new_fault_model.FaultType = item.FaultType;
new_fault_model.FaultDesc = fault_model.FaultDesc;
new_fault_model.DefectLevel = fault_model.DefectLevel;
new_fault_model.SpecificSimulation = fault_model.SpecificSimulation;
new_fault_model.FaultPosition = fault_model.FaultPosition;
new_fault_model.SelectSocre = fault_model.SelectSocre;
new_fault_model.FaultScore = fault_model.FaultScore;
new_fault_model.HandlerScore = fault_model.HandlerScore;
new_fault_model.DegreesSerialNumber = fault_model.DegreesSerialNumber;
new_fault_model.DegreesValue = fault_model.DegreesValue;
new_fault_model.ChoiceQuestion = fault_model.ChoiceQuestion;
new_fault_model.MultipleQuestion = fault_model.MultipleQuestion;
new_fault_model.DifficultyLevel = fault_model.DifficultyLevel;
new_fault_model.PositionValue = fault_model.PositionValue;
new_fault_model.Position = fault_model.Position;
new_fault_model.PorcelainBottleType = fault_model.PorcelainBottleType;
new_fault_model.Direction = fault_model.Direction;
new_fault_model.Topic = fault_model.Topic;
new_fault_model.OptionA = fault_model.OptionA;
new_fault_model.OptionB = fault_model.OptionB;
new_fault_model.OptionC = fault_model.OptionC;
new_fault_model.OptionD = fault_model.OptionD;
new_fault_model.OptionE = fault_model.OptionE;
new_fault_model.RightKey = fault_model.RightKey;
new_fault_model.IsCorrect = item.IsCorrect;
new_fault_model.Answer = "";
new_fault_model.Content = item.Content;
new_fault_model.Value = item.Value;
new_fault_model.IsFindScore = is_find_score;
new_fault_model.IsClassificationScore = is_classification_score;
new_fault_model.IsProcessingScore = "0";
new_fault_model.CreateTime = fault_model.CreateTime;
new_fault_model.Cache_Key = item.Cache_Key;
new_fault_model.Cache_Content = item.Cache_Content;
new_fault_model.Cache_Value = item.Cache_Value;
new_fault_model.R1 = item.R1;
new_fault_model.R2 = item.R2;
new_fault_model.R3 = item.R3;
record_list.Add(new_fault_model);
}
}
else
{
new_fault_model.UserFaultRecordId = Guid.NewGuid().ToString("N");
new_fault_model.UserId = model.UserId;
new_fault_model.ExamId = model.ExamId;
new_fault_model.IsCorrect = item.IsCorrect;
new_fault_model.Content = item.Content;
new_fault_model.IsFindScore = "0";
new_fault_model.IsClassificationScore = "0";
new_fault_model.IsProcessingScore = "0";
new_fault_model.CreateTime = DateTime.Now;
new_fault_model.Cache_Key = item.Cache_Key;
new_fault_model.Cache_Content = item.Cache_Content;
new_fault_model.Cache_Value = item.Cache_Value;
new_fault_model.R1 = item.R1;
new_fault_model.R2 = item.R2;
new_fault_model.R3 = item.R3;
record_list.Add(new_fault_model);
}
}
if (record_list.Count > 0)
{
DataBase.user_fault_record_list.AddRange(record_list);
}
var fault_list = model.Data.Select(a => a.FaultId).ToList();
//本地数据库正确数据里有,用户选择数据里没有,少选
var correct_data = user_fault_list.Where(s => s.ChoiceQuestion != "0" && !fault_list.Contains(s.FaultId)).ToList();
foreach (var item in correct_data)
{
var root_device_name = "";
var device_name = "";
var first_list = tree_list.Where(a => a.TowerId == item.RootDeviceId).FirstOrDefault();
if (first_list != null)
{
root_device_name = first_list.Tower;
if (first_list.TowerId != item.DeviceId)
{
if (first_list.Data != null)
{
var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == item.DeviceId).FirstOrDefault();
if (two_list != null)
{
device_name = two_list.PowerDistributionBox;
}
else
{
var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == item.DeviceId).FirstOrDefault();
if (three_list != null)
{
device_name = three_list.Line;
}
}
}
}
}
decimal select_score = 0;
decimal fault_score = 0;
var value_list = new List<string>();
if (item.FaultDesc == "配电箱箱门未加锁" || item.FaultDesc == "柜门与箱体没有链接线")
{
value_list = item.Position.Split('|').ToList();
}
else
{
if (item.FaultDesc == "配电箱孔洞未封堵"
|| item.FaultDesc == "熔断器下桩头发热"
|| item.FaultDesc == "熔芯不匹配"
|| item.FaultDesc == "熔芯损坏"
|| item.FaultDesc == "电缆头套管相色缺失"
|| item.FaultDesc == "电缆接头发热"
|| item.FaultDesc == "电缆绝缘层老化开裂"
|| item.FaultDesc == "拉线无警示套管"
|| item.FaultDesc == "拉线松动"
|| item.FaultDesc == "拉线断股锈蚀"
|| item.FaultDesc == "拉线UT线夹螺帽不齐全"
|| item.FaultDesc == "接头发热"
|| item.FaultDesc == "线路弧垂不一致")
{
if (!string.IsNullOrEmpty(item.MultipleQuestion))
{
if (item.FaultDesc != "相色标识错误")
{
value_list = item.MultipleQuestion.Split('|').ToList();
}
}
}
}
if (value_list.Count == 0)
{
select_score = System.Decimal.Round((decimal.Parse(item.SelectSocre) / total) * total_defect_score, 3);
var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + "缺陷查找分值";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault();
if (new_details_model == null)
{
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = item_name;
details_model.ItemizedScore = 0;
details_model.Type = "故障记录选择";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = select_score;
details_model.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc;
details_model.ScoreType = "缺陷查找分值";
details_list.Add(details_model);
}
}
fault_score = System.Decimal.Round((decimal.Parse(item.FaultScore) / total) * total_defect_score, 3);
var item_name2 = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + "缺陷分类分值";
var achievement_details_model2 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name2).FirstOrDefault();
if (achievement_details_model2 == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name2).FirstOrDefault();
if (new_details_model == null)
{
var details_model2 = new DataService.Model.pow_achievement_details();
details_model2.DetailsId = Guid.NewGuid().ToString("N");
details_model2.AchievementId = achievement_model.AchievementId;
details_model2.ItemName = item_name2;
details_model2.ItemizedScore = 0;
details_model2.Type = "故障记录选择";
details_model2.CreateTime = DateTime.Now;
details_model2.TotalScore = fault_score;
details_model2.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc;
details_model2.ScoreType = "缺陷分类分值";
details_list.Add(details_model2);
}
}
}
else
{
foreach (var position_item in value_list)
{
select_score = System.Decimal.Round((decimal.Parse(item.SelectSocre) / total) * total_defect_score, 3);
var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷查找分值";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault();
if (new_details_model == null)
{
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = item_name;
details_model.ItemizedScore = 0;
details_model.Type = "故障记录选择";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = select_score;
details_model.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item;
details_model.ScoreType = "缺陷查找分值";
details_list.Add(details_model);
}
}
fault_score = System.Decimal.Round((decimal.Parse(item.FaultScore) / total) * total_defect_score, 3);
var item_name2 = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷分类分值";
var achievement_details_model2 = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name2).FirstOrDefault();
if (achievement_details_model2 == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name2).FirstOrDefault();
if (new_details_model == null)
{
var details_model2 = new DataService.Model.pow_achievement_details();
details_model2.DetailsId = Guid.NewGuid().ToString("N");
details_model2.AchievementId = achievement_model.AchievementId;
details_model2.ItemName = item_name2;
details_model2.ItemizedScore = 0;
details_model2.Type = "故障记录选择";
details_model2.CreateTime = DateTime.Now;
details_model2.TotalScore = fault_score;
details_model2.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item;
details_model2.ScoreType = "缺陷分类分值";
details_list.Add(details_model2);
}
}
}
}
}
if (details_list.Count > 0)
{
DataBase.achievement_details_list.AddRange(details_list);
}
achievement_model.TotalScore = achievement_model.TotalScore + total_score;
return Write(APICode.Success, "成功");
}
catch (Exception)
{
return Write(APICode.Fail, "失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
else
{
return Write(APICode.Fail, "请求参数无数据");
}
}
/// <summary>
/// Post 上传考试选择题数据接口
/// </summary>
/// <param name="parameter">参数</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string AddUserChoiceQuestion(string url, string parameter)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "AddUserChoiceQuestion.txt", "parameter" + parameter);
var model = JsonConvert.DeserializeObject<DataService.Api.add_user_fault_record_request>(parameter);
if (model != null)
{
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault();
if (user_exam_model != null)
{
try
{
if (user_exam_model.Status == "已结束")
{
return Write(APICode.Fail, "考生考试已结束");
}
var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault();
if (achievement_model == null)
{
return Write(APICode.Fail, "考生成绩数据不存在");
}
var exam_fault_list = DataBase.exam_fault_list.Where(a => a.ExamId == model.ExamId && a.ChoiceQuestion != "0").ToList();
var select_total_score = exam_fault_list.Sum(a => decimal.Parse(a.SelectSocre));
var fault_total_score = exam_fault_list.Sum(a => decimal.Parse(a.FaultScore));
var handler_score = exam_fault_list.Sum(a => decimal.Parse(a.HandlerScore));
var total = select_total_score + fault_total_score + handler_score;//总分
var record_list = new List<DataService.Model.pow_user_fault_record>();
var details_list = new List<DataService.Model.pow_achievement_details>();
var user_fault_record_list = DataBase.user_fault_record_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).ToList();
decimal total_score = 0;//总分
var total_defect_score = decimal.Parse(TotalDefectScore);
//组织树
var tree_list = ReadTree();
foreach (var item in model.Data)
{
var fault_model = new DataService.Model.pow_user_fault_record();
var root_device_name = "";
var device_name = "";
var exam_fault_model = exam_fault_list.Where(a => a.RootDeviceId == item.RootDeviceId && a.DeviceId == item.DeviceId && a.FaultId == item.FaultId).FirstOrDefault();
if (exam_fault_model != null)
{
if (exam_fault_model.FaultDesc == "导线未绑扎、扎线断股" || exam_fault_model.FaultDesc == "瓷瓶歪斜松动" || exam_fault_model.FaultDesc == "瓷瓶损坏")
{
item.Value = "";
}
if (item.Value.Contains("东侧") || item.Value.Contains("北侧") || item.Value.Contains("西侧"))
{
item.Value = item.Value + "拉线";
}
}
if (!string.IsNullOrEmpty(item.Value))
{
fault_model = user_fault_record_list.Where(a => a.FaultId == item.FaultId && a.RootDeviceId == item.RootDeviceId && a.DeviceId == item.DeviceId && a.Value == item.Value).FirstOrDefault();
}
else
{
fault_model = user_fault_record_list.Where(a => a.FaultId == item.FaultId && a.RootDeviceId == item.RootDeviceId && a.DeviceId == item.DeviceId).FirstOrDefault();
}
if (fault_model != null)
{
var first_list = tree_list.Where(a => a.TowerId == item.RootDeviceId).FirstOrDefault();
if (first_list != null)
{
root_device_name = first_list.Tower;
if (first_list.TowerId != item.DeviceId)
{
if (first_list.Data != null)
{
var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == item.DeviceId).FirstOrDefault();
if (two_list != null)
{
device_name = two_list.PowerDistributionBox;
}
else
{
var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == item.DeviceId).FirstOrDefault();
if (three_list != null)
{
device_name = three_list.Line;
}
}
}
}
}
if (!string.IsNullOrEmpty(fault_model.UserFaultRecordId))
{
var is_processing_score = "0";
if (fault_model.ChoiceQuestion != "0")
{
var right_key_content = new List<string>();
var right_key_list = fault_model.RightKey.Split('|');
foreach (var right_key in right_key_list)
{
if (right_key == "A")
{
right_key_content.Add(fault_model.OptionA);
}
if (right_key == "B")
{
right_key_content.Add(fault_model.OptionB);
}
if (right_key == "C")
{
right_key_content.Add(fault_model.OptionC);
}
if (right_key == "D")
{
right_key_content.Add(fault_model.OptionD);
}
if (right_key == "E")
{
right_key_content.Add(fault_model.OptionE);
}
}
if (fault_model.FaultDesc == "配电箱箱门未加锁" || fault_model.FaultDesc == "柜门与箱体没有链接线" || fault_model.FaultDesc == "配电箱孔洞未封堵")
{
var value_list = new List<string>();
if (fault_model.FaultDesc != "配电箱孔洞未封堵")
{
value_list = fault_model.Position.Split('|').ToList();
}
else
{
value_list = fault_model.MultipleQuestion.Split('|').ToList();
}
foreach (var position_item in value_list)
{
var success_index = 0;
var fault_index = 0;
var answer_list = item.Answer.Split('|');
foreach (var answer_item in answer_list)
{
if (right_key_content.Contains(answer_item))
{
success_index++;
}
else
{
fault_index++;
}
}
if (success_index == right_key_list.Length && fault_index == 0)
{
is_processing_score = "1";
}
if (is_processing_score == "1")
{
decimal processing_score = 0;
processing_score = System.Decimal.Round((decimal.Parse(fault_model.HandlerScore) / total) * total_defect_score, 3);
var item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷处理分值";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault();
if (new_details_model == null)
{
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = item_name;
details_model.ItemizedScore = processing_score;
details_model.Type = "故障选择题处理";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = processing_score;
details_model.FaultDesc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item;
details_model.ScoreType = "缺陷处理分值";
details_list.Add(details_model);
total_score = total_score + processing_score;
}
}
}
else
{
decimal processing_score = 0;
processing_score = System.Decimal.Round((decimal.Parse(fault_model.HandlerScore) / total) * total_defect_score, 3);
var item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷处理分值";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault();
if (new_details_model == null)
{
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = item_name;
details_model.ItemizedScore = 0;
details_model.Type = "故障选择题处理";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = processing_score;
details_model.FaultDesc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item;
details_model.ScoreType = "缺陷处理分值";
details_list.Add(details_model);
}
}
}
}
}
else
{
var success_index = 0;
var fault_index = 0;
var answer_list = item.Answer.Split('|');
foreach (var answer_item in answer_list)
{
if (right_key_content.Contains(answer_item))
{
success_index++;
}
else
{
fault_index++;
}
}
if (success_index == right_key_list.Length && fault_index == 0)
{
is_processing_score = "1";
}
if (is_processing_score == "1")
{
decimal processing_score = 0;
processing_score = System.Decimal.Round((decimal.Parse(fault_model.HandlerScore) / total) * total_defect_score, 3);
var item_name = "";
var desc = "";
if (!string.IsNullOrEmpty(item.Value))
{
item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value + "-" + "缺陷处理分值";
desc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value;
}
else
{
item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + "缺陷处理分值";
desc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc;
}
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault();
if (new_details_model == null)
{
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = item_name;
details_model.FaultDesc = desc;
details_model.ItemizedScore = processing_score;
details_model.Type = "故障选择题处理";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = processing_score;
details_model.ScoreType = "缺陷处理分值";
details_list.Add(details_model);
total_score = total_score + processing_score;
}
}
}
else
{
decimal processing_score = 0;
processing_score = System.Decimal.Round((decimal.Parse(fault_model.HandlerScore) / total) * total_defect_score, 3);
var item_name = "";
var desc = "";
if (!string.IsNullOrEmpty(item.Value))
{
item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value + "-" + "缺陷处理分值";
desc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + item.Value;
}
else
{
item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + "缺陷处理分值";
desc = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc;
}
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault();
if (new_details_model == null)
{
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = item_name;
details_model.FaultDesc = desc;
details_model.ItemizedScore = 0;
details_model.Type = "故障选择题处理";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = processing_score;
details_model.ScoreType = "缺陷处理分值";
details_list.Add(details_model);
}
}
}
}
}
fault_model.Answer = item.Answer;
fault_model.IsProcessingScore = is_processing_score;
//record_list.Add(fault_model);
}
}
}
var fault_list = model.Data.Select(a => a.FaultId).ToList();
//本地数据库正确数据里有,用户选择数据里没有,少选
var correct_data = exam_fault_list.Where(s => s.ChoiceQuestion != "0" && s.SpecificSimulation == "选择题" && !fault_list.Contains(s.FaultId)).ToList();
foreach (var item in correct_data)
{
var root_device_name = "";
var device_name = "";
var first_list = tree_list.Where(a => a.TowerId == item.RootDeviceId).FirstOrDefault();
if (first_list != null)
{
root_device_name = first_list.Tower;
if (first_list.TowerId != item.DeviceId)
{
if (first_list.Data != null)
{
var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == item.DeviceId).FirstOrDefault();
if (two_list != null)
{
device_name = two_list.PowerDistributionBox;
}
else
{
var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == item.DeviceId).FirstOrDefault();
if (three_list != null)
{
device_name = three_list.Line;
}
}
}
}
}
decimal select_score = 0;
decimal fault_score = 0;
var value_list = new List<string>();
if (item.FaultDesc == "配电箱箱门未加锁" || item.FaultDesc == "柜门与箱体没有链接线")
{
value_list = item.Position.Split('|').ToList();
}
else
{
if (item.FaultDesc == "配电箱孔洞未封堵"
|| item.FaultDesc == "熔断器下桩头发热"
|| item.FaultDesc == "熔芯不匹配"
|| item.FaultDesc == "熔芯损坏"
|| item.FaultDesc == "电缆头套管相色缺失"
|| item.FaultDesc == "电缆接头发热"
|| item.FaultDesc == "电缆绝缘层老化开裂"
|| item.FaultDesc == "拉线无警示套管"
|| item.FaultDesc == "拉线松动"
|| item.FaultDesc == "拉线断股锈蚀"
|| item.FaultDesc == "拉线UT线夹螺帽不齐全"
|| item.FaultDesc == "接头发热"
|| item.FaultDesc == "线路弧垂不一致")
{
if (!string.IsNullOrEmpty(item.MultipleQuestion))
{
if (item.FaultDesc != "相色标识错误")
{
value_list = item.MultipleQuestion.Split('|').ToList();
}
}
}
}
if (value_list.Count == 0)
{
decimal processing_score = 0;
processing_score = System.Decimal.Round((decimal.Parse(item.HandlerScore) / total) * total_defect_score, 3);
var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + "缺陷处理分值";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault();
if (new_details_model == null)
{
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = item_name;
details_model.ItemizedScore = 0;
details_model.Type = "故障选择题处理";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = processing_score;
details_model.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc;
details_model.ScoreType = "缺陷处理分值";
details_list.Add(details_model);
}
}
}
else
{
foreach (var position_item in value_list)
{
decimal processing_score = 0;
processing_score = System.Decimal.Round((decimal.Parse(item.HandlerScore) / total) * total_defect_score, 3);
var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷处理分值";
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var new_details_model = details_list.Where(a => a.ItemName == item_name).FirstOrDefault();
if (new_details_model == null)
{
var details_model = new DataService.Model.pow_achievement_details();
details_model.DetailsId = Guid.NewGuid().ToString("N");
details_model.AchievementId = achievement_model.AchievementId;
details_model.ItemName = item_name;
details_model.ItemizedScore = 0;
details_model.Type = "故障选择题处理";
details_model.CreateTime = DateTime.Now;
details_model.TotalScore = processing_score;
details_model.FaultDesc = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item;
details_model.ScoreType = "缺陷处理分值";
details_list.Add(details_model);
}
}
}
}
}
if (details_list.Count > 0)
{
DataBase.achievement_details_list.AddRange(details_list);
}
achievement_model.TotalScore = achievement_model.TotalScore + total_score;
return Write(APICode.Success, "成功");
}
catch (Exception)
{
return Write(APICode.Fail, "失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
else
{
return Write(APICode.Fail, "请求参数无数据");
}
}
/// <summary>
/// Post 上传故障排故数据接口
/// </summary>
/// <param name="parameter">参数</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string AddFaultOperation(string url, string parameter)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "AddFaultOperation.txt", "parameter" + parameter);
var model = JsonConvert.DeserializeObject<DataService.Api.add_fault_operation_request>(parameter);
if (model != null)
{
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault();
if (user_exam_model != null)
{
try
{
if (user_exam_model.Status == "已结束")
{
Write(APICode.Fail, "考生考试已结束");
}
var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId).FirstOrDefault();
if (achievement_model == null)
{
Write(APICode.Fail, "考生成绩数据不存在");
}
var exam_fault_list = DataBase.exam_fault_list.Where(a => a.ExamId == model.ExamId && a.ChoiceQuestion != "0").ToList();
var select_total_score = exam_fault_list.Sum(a => decimal.Parse(a.SelectSocre));
var fault_total_score = exam_fault_list.Sum(a => decimal.Parse(a.FaultScore));
var handler_score = exam_fault_list.Sum(a => decimal.Parse(a.HandlerScore));
var total = select_total_score + fault_total_score + handler_score;//总分
var add_details_model = new DataService.Model.pow_achievement_details();
var delete_details_model = new DataService.Model.pow_achievement_details();
var user_fault_model = new DataService.Model.pow_user_fault();
var correct_model = new DataService.Model.pow_exam_fault();
var total_defect_score = decimal.Parse(TotalDefectScore);
var is_processing_score = "0";
//组织树
var tree_list = ReadTree();
var root_device_name = "";
var device_name = "";
if (model.Details != null)
{
user_fault_model = DataBase.user_fault_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId && a.FaultId == model.FaultId && a.RootDeviceId == model.RootDeviceId && a.DeviceId == model.Details.DeviceId).FirstOrDefault();
correct_model = exam_fault_list.Where(a => a.FaultId == model.FaultId && a.RootDeviceId == model.RootDeviceId && a.DeviceId == model.Details.DeviceId).FirstOrDefault();
if (user_fault_model != null)
{
var first_list = tree_list.Where(a => a.TowerId == user_fault_model.RootDeviceId).FirstOrDefault();
if (first_list != null)
{
root_device_name = first_list.Tower;
if (first_list.TowerId != user_fault_model.DeviceId)
{
if (first_list.Data != null)
{
var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == user_fault_model.DeviceId).FirstOrDefault();
if (two_list != null)
{
device_name = two_list.PowerDistributionBox;
}
else
{
var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == user_fault_model.DeviceId).FirstOrDefault();
if (three_list != null)
{
device_name = three_list.Line;
}
}
}
}
}
}
if (user_fault_model.FaultDesc == "配电箱名称牌缺失" || user_fault_model.FaultDesc == "出线电缆编号牌型号编写错误" || user_fault_model.FaultDesc == "无出线电缆名称牌" || user_fault_model.FaultDesc == "出线开关编号牌缺失" || user_fault_model.FaultDesc == "熔芯不匹配" || user_fault_model.FaultDesc == "熔芯损坏")
{
if (user_fault_model.FaultDesc == "熔芯不匹配")
{
if (!string.IsNullOrEmpty(model.Details.FaultLocation))
{
var correct = correct_model.MultipleQuestion.Split('|').ToList();
if (correct.Contains(model.Details.FaultLocation))
{
var multiple_value_list = new List<string>();
if (!string.IsNullOrEmpty(user_fault_model.MultipleQuestion))
{
multiple_value_list = user_fault_model.MultipleQuestion.Split('|').ToList();
}
if (multiple_value_list.Contains(model.Details.FaultLocation))
{
if (correct_model.FusibleCoreNormal == model.Details.CurreSelectDetail)
{
is_processing_score = "1";
multiple_value_list.Remove(model.Details.FaultLocation);
}
else
{
user_fault_model.FusibleCoreFault = model.Details.CurreSelectDetail;
}
}
else
{
multiple_value_list.Add(model.Details.FaultLocation);
user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list);
}
if (is_processing_score == "1")
{
user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list);
if (multiple_value_list.Count == 0)
{
user_fault_model.ChoiceQuestion = "0";
}
}
else
{
if (user_fault_model.ChoiceQuestion == "0")
{
user_fault_model.ChoiceQuestion = "2";
user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list);
}
}
}
}
}
else if (user_fault_model.FaultDesc == "熔芯损坏")
{
if (!string.IsNullOrEmpty(model.Details.FaultLocation))
{
var correct = correct_model.MultipleQuestion.Split('|').ToList();
if (correct.Contains(model.Details.FaultLocation))
{
var multiple_value_list = new List<string>();
if (!string.IsNullOrEmpty(user_fault_model.MultipleQuestion))
{
multiple_value_list = user_fault_model.MultipleQuestion.Split('|').ToList();
}
if (multiple_value_list.Contains(model.Details.FaultLocation))
{
if (model.Details.CurreSelectDetail == "true")
{
is_processing_score = "1";
multiple_value_list.Remove(model.Details.FaultLocation);
}
}
else
{
multiple_value_list.Add(model.Details.FaultLocation);
user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list);
}
if (is_processing_score == "1")
{
user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list);
if (multiple_value_list.Count == 0)
{
user_fault_model.ChoiceQuestion = "0";
}
}
else
{
if (user_fault_model.ChoiceQuestion == "0")
{
user_fault_model.ChoiceQuestion = "2";
user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list);
}
}
}
}
}
else if (user_fault_model.FaultDesc == "出线开关编号牌缺失")
{
if (model.Details.CurreSelectDetail == "411开关")
{
is_processing_score = "1";
user_fault_model.ChoiceQuestion = "0";
}
else
{
if (user_fault_model.ChoiceQuestion == "0")
{
user_fault_model.ChoiceQuestion = "1";
}
}
}
else if (user_fault_model.FaultDesc == "配电箱名称牌缺失")
{
if (model.Details.CurreSelectDetail.Replace("配电箱名牌-", "") == user_exam_model.PlatformAreaName)
{
is_processing_score = "1";
user_fault_model.ChoiceQuestion = "0";
}
else
{
if (user_fault_model.ChoiceQuestion == "0")
{
user_fault_model.ChoiceQuestion = "1";
}
}
}
else if (user_fault_model.FaultDesc == "无出线电缆名称牌")
{
if (model.Details.CurreSelectDetail.Replace("电缆名称牌-411#", "") == user_exam_model.PlatformAreaName)
{
is_processing_score = "1";
user_fault_model.ChoiceQuestion = "0";
}
else
{
if (user_fault_model.ChoiceQuestion == "0")
{
user_fault_model.ChoiceQuestion = "1";
}
}
}
else if (user_fault_model.FaultDesc == "出线电缆编号牌型号编写错误")
{
if (model.Details.CurreSelectDetail.Replace("电缆名称牌-411#", "") == user_exam_model.PlatformAreaName)
{
is_processing_score = "1";
user_fault_model.ChoiceQuestion = "0";
}
else
{
if (user_fault_model.ChoiceQuestion == "0")
{
user_fault_model.ChoiceQuestion = "1";
}
}
}
user_fault_model.CurreSelectDetail = model.Details.CurreSelectDetail;
if (is_processing_score == "1")
{
decimal processing_score = 0;
processing_score = System.Decimal.Round((decimal.Parse(correct_model.HandlerScore) / total) * total_defect_score, 3);
var item_name = user_fault_model.FaultDesc + "-" + "缺陷处理分值";
if (!string.IsNullOrEmpty(model.Details.FaultLocation))
{
item_name = user_fault_model.FaultDesc + "-" + model.Details.FaultLocation.Replace("配电箱名牌-", "").Replace("电缆名称牌-411#", "") + "-" + "缺陷处理分值";
}
item_name = root_device_name + "-" + device_name + "-" + item_name;
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model != null)
{
delete_details_model = achievement_details_model;
//update_details_model.DetailsId = achievement_details_model.DetailsId;
//update_details_model.AchievementId = achievement_model.AchievementId;
//update_details_model.ItemName = item_name;
//update_details_model.ItemizedScore = processing_score;
//update_details_model.Type = "故障排故处理";
//update_details_model.CreateTime = DateTime.Now;
//update_details_model.TotalScore = processing_score;
}
else
{
add_details_model.DetailsId = Guid.NewGuid().ToString("N");
add_details_model.AchievementId = achievement_model.AchievementId;
add_details_model.ItemName = item_name;
add_details_model.ItemizedScore = processing_score;
add_details_model.Type = "故障排故处理";
add_details_model.CreateTime = DateTime.Now;
add_details_model.TotalScore = processing_score;
add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", "");
add_details_model.ScoreType = "缺陷处理分值";
}
}
else
{
if (user_fault_model.ChoiceQuestion != "0")
{
decimal processing_score = 0;
processing_score = System.Decimal.Round((decimal.Parse(correct_model.HandlerScore) / total) * total_defect_score, 3);
var item_name = user_fault_model.FaultDesc + "-" + "缺陷处理分值";
if (!string.IsNullOrEmpty(model.Details.FaultLocation))
{
item_name = user_fault_model.FaultDesc + "-" + model.Details.FaultLocation.Replace("配电箱名牌-", "").Replace("电缆名称牌-411#", "") + "-" + "缺陷处理分值";
}
item_name = root_device_name + "-" + device_name + "-" + item_name;
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
//if (achievement_details_model != null)
//{
// delete_details_model = achievement_details_model;
//}
if (achievement_details_model != null)
{
delete_details_model = achievement_details_model;
}
else
{
add_details_model.DetailsId = Guid.NewGuid().ToString("N");
add_details_model.AchievementId = achievement_model.AchievementId;
add_details_model.ItemName = item_name;
add_details_model.ItemizedScore = 0;
add_details_model.Type = "故障排故处理";
add_details_model.CreateTime = DateTime.Now;
add_details_model.TotalScore = processing_score;
add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", "");
add_details_model.ScoreType = "缺陷处理分值";
}
}
}
}
else
{
if (!string.IsNullOrEmpty(model.Details.FaultLocation))
{
if (!string.IsNullOrEmpty(correct_model.MultipleQuestion))
{
var multiple_value_list = correct_model.MultipleQuestion.Split('|').ToList();
if (multiple_value_list.Contains(model.Details.FaultLocation))
{
is_processing_score = "1";
multiple_value_list.Remove(model.Details.FaultLocation);
}
if (is_processing_score == "1")
{
user_fault_model.MultipleQuestion = string.Join("|", multiple_value_list);
if (multiple_value_list.Count == 0)
{
user_fault_model.ChoiceQuestion = "0";
}
}
}
if (!string.IsNullOrEmpty(correct_model.Position))
{
var multiple_value_list = correct_model.Position.Split('|').ToList();
if (multiple_value_list.Contains(model.Details.FaultLocation))
{
is_processing_score = "1";
multiple_value_list.Remove(model.Details.FaultLocation);
}
if (is_processing_score == "1")
{
user_fault_model.Position = string.Join("|", multiple_value_list);
if (multiple_value_list.Count == 0)
{
user_fault_model.ChoiceQuestion = "0";
}
}
}
}
else
{
user_fault_model.ChoiceQuestion = "0";
is_processing_score = "1";
}
if (is_processing_score == "1")
{
decimal processing_score = 0;
processing_score = System.Decimal.Round((decimal.Parse(correct_model.HandlerScore) / total) * total_defect_score, 3);
var item_name = user_fault_model.FaultDesc + "-" + "缺陷处理分值";
if (!string.IsNullOrEmpty(model.Details.FaultLocation))
{
item_name = user_fault_model.FaultDesc + "-" + model.Details.FaultLocation + "-" + "缺陷处理分值";
}
item_name = root_device_name + "-" + device_name + "-" + item_name;
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model != null)
{
achievement_details_model.ItemName = item_name;
achievement_details_model.ItemizedScore = processing_score;
achievement_details_model.Type = "故障排故处理";
achievement_details_model.CreateTime = DateTime.Now;
achievement_details_model.TotalScore = processing_score;
achievement_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", "");
achievement_details_model.ScoreType = "缺陷处理分值";
}
else
{
add_details_model.DetailsId = Guid.NewGuid().ToString("N");
add_details_model.AchievementId = achievement_model.AchievementId;
add_details_model.ItemName = item_name;
add_details_model.ItemizedScore = processing_score;
add_details_model.Type = "故障排故处理";
add_details_model.CreateTime = DateTime.Now;
add_details_model.TotalScore = processing_score;
add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", "");
add_details_model.ScoreType = "缺陷处理分值";
}
}
}
}
else if (model.Screen != null)
{
#region
user_fault_model = DataBase.user_fault_list.Where(a => a.ExamId == model.ExamId && a.UserId == model.UserId && a.FaultId == model.FaultId && a.RootDeviceId == model.RootDeviceId && a.DeviceId == model.Screen.DeviceId).FirstOrDefault();
if (user_fault_model != null)
{
var first_list = tree_list.Where(a => a.TowerId == user_fault_model.RootDeviceId).FirstOrDefault();
if (first_list != null)
{
root_device_name = first_list.Tower;
if (first_list.TowerId != user_fault_model.DeviceId)
{
if (first_list.Data != null)
{
var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == user_fault_model.DeviceId).FirstOrDefault();
if (two_list != null)
{
device_name = two_list.PowerDistributionBox;
}
else
{
var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == user_fault_model.DeviceId).FirstOrDefault();
if (three_list != null)
{
device_name = three_list.Line;
}
}
}
}
}
}
correct_model = exam_fault_list.Where(a => a.FaultId == model.FaultId && a.RootDeviceId == model.RootDeviceId && a.DeviceId == model.Screen.DeviceId).FirstOrDefault();
if (null == correct_model)
{
return Write(APICode.Success, "故障:" + model.FaultDesc + ":无需操作!");
}
var name_list = user_fault_model.Name.Split('|');
ArrayList name_arry = new ArrayList(name_list);
var value_list = user_fault_model.Value.Split('|');
var success_index = 0;
var value = new List<string>();
if (user_fault_model.FaultDesc == "漏电保护设置不合理" || user_fault_model.FaultDesc == "欠压保护设置错误" || user_fault_model.FaultDesc == "过压保护设置错误")
{
if (user_fault_model.FaultDesc == "欠压保护设置错误")
value = user_exam_model.UndervoltageProtection.Split('|').ToList();
else if (user_fault_model.FaultDesc == "过压保护设置错误")
value = user_exam_model.OvervoltageProtection.Split('|').ToList();
else
value = user_exam_model.LeakageProtection.Split('|').ToList();
if (value.Count > 1 && !string.IsNullOrEmpty(value[0]))
{
foreach (var item in model.Screen.Params)
{
if (item.Name == "档位")
{
if (item.Value == value[0])
{
success_index++;
}
}
else if (item.Name == "开关")
{
if (item.Value == value[1])
{
success_index++;
}
}
}
}
}
else if (user_fault_model.FaultDesc == "过载保护设置错误")
{
value = user_exam_model.OverloadProtection.Split('|').ToList();
if (value.Count > 1 && !string.IsNullOrEmpty(value[0]))
{
foreach (var item in model.Screen.Params)
{
if (item.Name == "ln1")
{
if (item.Value == value[0])
{
success_index++;
}
}
else if (item.Name == "保护")
{
if (item.Value == value[1])
{
success_index++;
}
}
}
}
}
else if (user_fault_model.FaultDesc == "短路延时保护设置错误" || user_fault_model.FaultDesc == "短路瞬时保护设置错误")
{
if (user_fault_model.FaultDesc == "短路瞬时保护设置错误")
value = user_exam_model.ShortCircuitProtection.Split('|').ToList();
else
value = user_exam_model.ShortCircuitDelayProtection.Split('|').ToList();
if (value.Count > 1 && !string.IsNullOrEmpty(value[0]))
{
foreach (var item in model.Screen.Params)
{
if (item.Name == "ln2")
{
if (item.Value == value[0])
{
success_index++;
}
}
else if (item.Name == "保护")
{
if (item.Value == value[1])
{
success_index++;
}
}
}
}
}
else if (user_fault_model.FaultDesc == "缺相保护设置错误")
{
value = user_exam_model.PhaseLossProtection.Split('|').ToList();
if (!string.IsNullOrEmpty(value[0]))
{
foreach (var item in model.Screen.Params)
{
if (item.Name == "开关")
{
if (item.Value == value[0])
{
success_index++;
}
}
}
}
}
foreach (var item in model.Screen.Params)
{
var subscript = name_arry.IndexOf(item.Name);
if (subscript > -1)
{
value_list[subscript] = item.Value;
}
}
user_fault_model.Value = string.Join("|", value_list);
if (success_index == value.Count)
{
user_fault_model.ChoiceQuestion = "0";
decimal processing_score = 0;
processing_score = System.Decimal.Round((decimal.Parse(correct_model.HandlerScore) / total) * total_defect_score, 3);
var item_name = user_fault_model.FaultDesc + "-" + "缺陷处理分值";
item_name = root_device_name + "-" + device_name + "-" + item_name;
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model != null)
{
delete_details_model = achievement_details_model;
//update_details_model.DetailsId = achievement_details_model.DetailsId;
//update_details_model.AchievementId = achievement_model.AchievementId;
//update_details_model.ItemName = item_name;
//update_details_model.ItemizedScore = processing_score;
//update_details_model.Type = "故障排故处理";
//update_details_model.TotalScore= processing_score;
//update_details_model.CreateTime = DateTime.Now;
}
else
{
add_details_model.DetailsId = Guid.NewGuid().ToString("N");
add_details_model.AchievementId = achievement_model.AchievementId;
add_details_model.ItemName = item_name;
add_details_model.ItemizedScore = processing_score;
add_details_model.Type = "故障排故处理";
add_details_model.TotalScore = processing_score;
add_details_model.CreateTime = DateTime.Now;
add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", "");
add_details_model.ScoreType = "缺陷处理分值";
}
}
else
{
if (user_fault_model.ChoiceQuestion == "0")
{
decimal processing_score = 0;
processing_score = System.Decimal.Round((decimal.Parse(correct_model.HandlerScore) / total) * total_defect_score, 3);
user_fault_model.ChoiceQuestion = "1";
var item_name = user_fault_model.FaultDesc + "-" + "缺陷处理分值";
item_name = root_device_name + "-" + device_name + "-" + item_name;
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model != null)
{
delete_details_model = achievement_details_model;
}
else
{
add_details_model.DetailsId = Guid.NewGuid().ToString("N");
add_details_model.AchievementId = achievement_model.AchievementId;
add_details_model.ItemName = item_name;
add_details_model.ItemizedScore = 0;
add_details_model.Type = "故障排故处理";
add_details_model.TotalScore = processing_score;
add_details_model.CreateTime = DateTime.Now;
add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", "");
add_details_model.ScoreType = "缺陷处理分值";
}
}
}
#endregion
}
user_fault_model.IsProcessingScore = is_processing_score;
if (add_details_model != null)
{
DataBase.achievement_details_list.Add(add_details_model);
}
if (delete_details_model != null)
{
DataBase.achievement_details_list.RemoveAll(a => a.DetailsId == delete_details_model.DetailsId);
}
return Write(APICode.Success, "成功");
}
catch (Exception)
{
return Write(APICode.Fail, "失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
else
{
return Write(APICode.Fail, "请求参数无数据");
}
}
/// <summary>
/// Post 结束故障排故处理接口
/// </summary>
/// <param name="ExamId">考试id</param>
/// <param name="UserId">用户id</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string EndFaultOperation(string url, string ExamId, string UserId)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "EndFaultOperation.txt", "ExamId" + ExamId + ",UserId:" + UserId);
var details_list = new List<DataService.Model.pow_achievement_details>();
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (user_exam_model != null)
{
try
{
if (user_exam_model.Status == "已结束")
{
return Write(APICode.Fail, "考生考试已结束");
}
var achievement_model = DataBase.achievement_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (achievement_model == null)
{
return Write(APICode.Fail, "考生成绩数据不存在");
}
var exam_fault = DataBase.exam_fault_list.Where(a => a.ExamId == ExamId && a.ChoiceQuestion != "0").OrderBy(a => a.CreateTime).ToList();
var user_fault = DataBase.user_fault_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).ToList();
var select_total_score = exam_fault.Sum(a => decimal.Parse(a.SelectSocre));
var fault_total_score = exam_fault.Sum(a => decimal.Parse(a.FaultScore));
var handler_score = exam_fault.Sum(a => decimal.Parse(a.HandlerScore));
var total = select_total_score + fault_total_score + handler_score;//总分
var total_defect_score = decimal.Parse(TotalDefectScore);
//组织树
var tree_list = ReadTree();
var new_exam_fault = exam_fault.Where(a => a.SpecificSimulation == "现场处理").ToList();
foreach (var item in new_exam_fault)
{
var root_device_name = "";
var device_name = "";
var user_fault_model = user_fault.Where(a => a.FaultId == item.FaultId).FirstOrDefault();
if (user_fault_model != null)
{
var first_list = tree_list.Where(a => a.TowerId == item.RootDeviceId).FirstOrDefault();
if (first_list != null)
{
root_device_name = first_list.Tower;
if (first_list.TowerId != item.DeviceId)
{
if (first_list.Data != null)
{
var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == item.DeviceId).FirstOrDefault();
if (two_list != null)
{
device_name = two_list.PowerDistributionBox;
}
else
{
var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == item.DeviceId).FirstOrDefault();
if (three_list != null)
{
device_name = three_list.Line;
}
}
}
}
}
if (item.ChoiceQuestion == user_fault_model.ChoiceQuestion)
{
var value_list = new List<string>();
var select_value_list = new List<string>();
if (item.FaultDesc == "配电箱箱门未加锁" || item.FaultDesc == "柜门与箱体没有链接线")
{
if (!string.IsNullOrEmpty(item.Position))
{
value_list = item.Position.Split('|').ToList();
select_value_list = user_fault_model.Position.Split('|').ToList();
}
}
else
{
if (item.FaultDesc == "配电箱孔洞未封堵"
|| item.FaultDesc == "熔断器下桩头发热"
|| item.FaultDesc == "熔芯不匹配"
|| item.FaultDesc == "熔芯损坏"
|| item.FaultDesc == "电缆头套管相色缺失"
|| item.FaultDesc == "电缆接头发热"
|| item.FaultDesc == "电缆绝缘层老化开裂"
|| item.FaultDesc == "拉线无警示套管"
|| item.FaultDesc == "拉线松动"
|| item.FaultDesc == "拉线断股锈蚀"
|| item.FaultDesc == "拉线UT线夹螺帽不齐全"
|| item.FaultDesc == "接头发热"
|| item.FaultDesc == "线路弧垂不一致")
{
if (!string.IsNullOrEmpty(item.MultipleQuestion))
{
if (item.FaultDesc != "相色标识错误")
{
value_list = item.MultipleQuestion.Split('|').ToList();
select_value_list = user_fault_model.MultipleQuestion.Split('|').ToList();
}
}
//if (!string.IsNullOrEmpty(item.MultipleQuestion))
//{
// value_list = item.MultipleQuestion.Split('|').ToList();
// select_value_list = user_fault_model.MultipleQuestion.Split('|').ToList();
//}
}
}
if (value_list.Count == 0)
{
decimal processing_score = 0;
processing_score = System.Decimal.Round((decimal.Parse(item.HandlerScore) / total) * total_defect_score, 3);
var item_name = user_fault_model.FaultDesc + "-" + "缺陷处理分值";
item_name = root_device_name + "-" + device_name + "-" + item_name;
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var add_details_model = new DataService.Model.pow_achievement_details();
add_details_model.DetailsId = Guid.NewGuid().ToString("N");
add_details_model.AchievementId = achievement_model.AchievementId;
add_details_model.ItemName = item_name;
add_details_model.ItemizedScore = 0;
add_details_model.Type = "故障排故处理";
add_details_model.CreateTime = DateTime.Now;
add_details_model.TotalScore = processing_score;
add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", "");
add_details_model.ScoreType = "缺陷处理分值";
details_list.Add(add_details_model);
}
}
else
{
foreach (var position_item in value_list)
{
if (select_value_list.Contains(position_item))
{
decimal processing_score = 0;
processing_score = System.Decimal.Round((decimal.Parse(item.HandlerScore) / total) * total_defect_score, 3);
var item_name = user_fault_model.FaultDesc + "-" + position_item + "-" + "缺陷处理分值";
item_name = root_device_name + "-" + device_name + "-" + item_name;
var achievement_details_model = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.ItemName == item_name).FirstOrDefault();
if (achievement_details_model == null)
{
var add_details_model = new DataService.Model.pow_achievement_details();
add_details_model.DetailsId = Guid.NewGuid().ToString("N");
add_details_model.AchievementId = achievement_model.AchievementId;
add_details_model.ItemName = item_name;
add_details_model.ItemizedScore = 0;
add_details_model.Type = "故障排故处理";
add_details_model.CreateTime = DateTime.Now;
add_details_model.TotalScore = processing_score;
add_details_model.FaultDesc = item_name.Replace("-缺陷处理分值", "");
add_details_model.ScoreType = "缺陷处理分值";
details_list.Add(add_details_model);
}
}
}
}
}
}
}
var details = DataBase.achievement_details_list.Where(a => a.AchievementId == achievement_model.AchievementId && a.Type == "故障排故处理").ToList();
var total_score = details.Sum(a => a.ItemizedScore);
if (details_list.Count > 0)
{
DataBase.achievement_details_list.AddRange(details_list);
}
achievement_model.TotalScore = achievement_model.TotalScore + total_score.Value;
return Write(APICode.Success, "成功");
}
catch (Exception)
{
return Write(APICode.Fail, "失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
/// <summary>
/// Post 选择台区上传接口
/// </summary>
/// <param name="ExamId">考试id</param>
/// <param name="UserId">考生id</param>
/// <param name="SelectPlatformArea">选择的台区</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string SelectPlatformArea(string url, string ExamId, string UserId, string SelectPlatformArea)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "SelectPlatformArea.txt", "ExamId" + ExamId + ",UserId:" + UserId + ",SelectPlatformArea:" + SelectPlatformArea);
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (user_exam_model != null)
{
try
{
if (user_exam_model.Status == "已结束")
{
return Write(APICode.Fail, "考生考试已结束");
}
user_exam_model.SelectPlatformArea = SelectPlatformArea;
if (SelectPlatformArea != user_exam_model.PlatformAreaName)
{
user_exam_model.IsScore = "1";
}
return Write(APICode.Success, "成功");
}
catch (Exception)
{
return Write(APICode.Fail, "失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
/// <summary>
/// Post 更新验电结果接口
/// </summary>
/// <param name="ExamId">考试id</param>
/// <param name="UserId">考生id</param>
/// <param name="Type">类型 巡线、排故</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string UpdateElectricity(string url, string ExamId, string UserId, string Type)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "UpdateElectricity.txt", "ExamId" + ExamId + ",UserId:" + UserId + ",Type:" + Type);
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (user_exam_model != null)
{
try
{
if (user_exam_model.Status == "已结束")
{
return Write(APICode.Fail, "考生考试已结束");
}
if (Type == "巡线")
{
user_exam_model.LineIsScore = "1";
}
else if (Type == "排故")
{
user_exam_model.FaultIsScore = "1";
}
return Write(APICode.Success, "成功");
}
catch (Exception)
{
return Write(APICode.Fail, "失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
/// <summary>
/// Post 更新爬杆结果
/// </summary>
/// <param name="ExamId">考试id</param>
/// <param name="UserId">考生id</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string UpdateClimbrod(string url, string ExamId, string UserId)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "UpdateClimbrod.txt", "ExamId" + ExamId + ",UserId:" + UserId);
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (user_exam_model != null)
{
try
{
if (user_exam_model.Status == "已结束")
{
return Write(APICode.Fail, "考生考试已结束");
}
user_exam_model.ClimbrodIsScore = "1";
return Write(APICode.Success, "成功");
}
catch (Exception)
{
return Write(APICode.Fail, "失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
/// <summary>
/// Post 更新未分闸状态拉合熔芯扣分接口
/// </summary>
/// <param name="ExamId">考试id</param>
/// <param name="UserId">考生id</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string UpdateFusibleCore(string url, string ExamId, string UserId)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "UpdateFusibleCore.txt", "ExamId" + ExamId + ",UserId:" + UserId);
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (user_exam_model != null)
{
try
{
if (user_exam_model.Status == "已结束")
{
return Write(APICode.Fail, "考生考试已结束");
}
user_exam_model.FusibleCoreIsScore = "1";
return Write(APICode.Success, "成功");
}
catch (Exception)
{
return Write(APICode.Fail, "失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
/// <summary>
/// Post 更新考试环节接口
/// </summary>
/// <param name="ExamId">考试id</param>
/// <param name="UserId">考生id</param>
/// <param name="SelectPlatformArea">选择的台区</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string UpdateExaminationLink(string url, string ExamId, string UserId, string ExaminationLink)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "UpdateExaminationLink.txt", "ExamId" + ExamId + ",UserId:" + UserId + ",ExaminationLink:" + ExaminationLink);
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (user_exam_model != null)
{
try
{
if (user_exam_model.Status == "已结束")
{
return Write(APICode.Fail, "考生考试已结束");
}
user_exam_model.ExaminationLink = ExaminationLink;
return Write(APICode.Success, "成功");
}
catch (Exception)
{
return Write(APICode.Fail, "失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
/// <summary>
/// Post 更新围栏接口
/// </summary>
/// <param name="ExamId">考试id</param>
/// <param name="UserId">考生id</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string UpdateEnclosure(string url, string ExamId, string UserId)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "UpdateEnclosure.txt", "ExamId" + ExamId + ",UserId:" + UserId);
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (user_exam_model != null)
{
try
{
if (user_exam_model.Status == "已结束")
{
return Write(APICode.Fail, "考生考试已结束");
}
var enclosure_fault_score = decimal.Parse(EnclosureFaultScore);
var value = decimal.Parse(user_exam_model.EnclosureIsScore) - enclosure_fault_score;
if (value < 0)
{
value = 0;
}
user_exam_model.EnclosureIsScore = value.ToString();
return Write(APICode.Success, "成功");
}
catch (Exception)
{
return Write(APICode.Fail, "失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
/// <summary>
/// Post 更新考试时长接口
/// </summary>
/// <param name="UserId">用户id</param>
/// <param name="ExamId">考试id</param>
/// <param name="ExaminationDuration">剩余考试时长</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string UpdateExaminationDuration(string url, string UserId, string ExamId, string ExaminationDuration)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "UpdateExaminationDuration.txt", "ExamId" + ExamId + ",UserId:" + UserId + ",ExaminationDuration:" + ExaminationDuration);
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (user_exam_model != null)
{
try
{
user_exam_model.ExaminationDuration = ExaminationDuration;
return Write(APICode.Success, "更新考试时长成功");
}
catch (Exception)
{
return Write(APICode.Fail, "更新考试时长失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
/// <summary>
/// Post 更新场景设备状态接口
/// </summary>
/// <param name="UserId">用户id</param>
/// <param name="ExamId">考试id</param>
/// <param name="RestoreSceneMsg">场景设备状态</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string UpdateRestoreSceneMsg(string url, string UserId, string ExamId, string RestoreSceneMsg)
{
////System.IO.File.AppendAllText(@"D:\zy\" + "UpdateRestoreSceneMsg.txt", "ExamId" + ExamId + ",UserId:" + UserId + ",RestoreSceneMsg:" + RestoreSceneMsg);
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (user_exam_model != null)
{
try
{
user_exam_model.RestoreSceneMsg = RestoreSceneMsg;
return Write(APICode.Success, "更新场景设备状态成功");
}
catch (Exception)
{
return Write(APICode.Fail, "更新场景设备状态失败");
}
}
else
{
return Write(APICode.Fail, "考生考试信息不存在");
}
}
/// <summary>
/// Post 获取并更新考生考试时间
/// </summary>
/// <param name="UserId">用户id</param>
/// <param name="ExamId">考试id</param>
/// <param name="Read">1 读取, 0 更新</param>
/// <returns>反序列化返回的值失败,代表请求接口失败</returns>
public string UpdateUserExamTime(string url, string UserId, string ExamId, string Read)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "UpdateUserExamTime.txt", "ExamId" + ExamId + ",UserId:" + UserId + ",Read:" + Read);
var user_exam_model = DataBase.user_exam_list.Where(a => a.ExamId == ExamId && a.UserId == UserId).FirstOrDefault();
if (user_exam_model != null)
{
var Last = user_exam_model.UpdateTime.HasValue ? user_exam_model.UpdateTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";
if (Read == "1")
{
var data = new
{
last = Last,
now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
msg = "查询考试时间成功!"
};
return Write(APICode.Success, data);
}
else
{
try
{
user_exam_model.UpdateTime = DateTime.Now;
return Write(APICode.Success, "更新考试时间成功!");
}
catch (Exception)
{
return Write(APICode.Fail, "更新考试时间失败");
}
}
}
else
{
//Write(APICode.Fail, "考生考试信息不存在");
var data = new
{
last = "",
now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
msg = "考生考试信息不存在"
};
return Write(APICode.Fail, data);
}
}
/// <summary>
/// 计算操作票得分
/// </summary>
/// <param name="total">总分</param>
/// <param name="list_TicketId_HasScore">保存未扣分项</param>
/// <param name="list_user_operation_ticket">用户操作票</param>
/// <param name="list_exam_operation_ticket">答案操作票</param>
/// <returns></returns>
public int ComputeTicketScore(ref int total, List<string> list_TicketId_HasScore, List<OperationTicketData> list_user_operation_ticket, List<DataService.Model.pow_exam_operation_ticket> list_exam_operation_ticket)
{
for (int i = 0; i < list_exam_operation_ticket.Count; i++)
{
var item_exam = list_exam_operation_ticket[i];
var item_user = list_user_operation_ticket.FirstOrDefault(s => s.OperationTicketId == item_exam.OperationTicketId);
//没找到答案 扣1分
if (null == item_user)
{
total--;
if (total <= 0)
{
return 0;
}
continue;
}
//找到答案 扣除距离分
var exam_index = i;
var user_Index = list_user_operation_ticket.IndexOf(item_user);
var distance = user_Index - exam_index;
//不扣分项
if (distance == 0)
{
list_TicketId_HasScore.Add(item_user.OperationTicketId);
}
total = total - distance;
if (total <= 0)
{
return 0;
}
//剩余用户答案
var remain_user_operation_ticket = new List<OperationTicketData>();
for (var jindex = user_Index + 1; jindex < list_user_operation_ticket.Count; jindex++)
{
remain_user_operation_ticket.Add(list_user_operation_ticket[jindex]);
}
//剩余标准答案
var remain_exam_operation_ticket = new List<DataService.Model.pow_exam_operation_ticket>();
for (var e_index = exam_index + 1; e_index < list_exam_operation_ticket.Count; e_index++)
{
remain_exam_operation_ticket.Add(list_exam_operation_ticket[e_index]);
}
//多余的用户操作票扣分
if (remain_exam_operation_ticket.Count <= 0)
{
total = total - remain_user_operation_ticket.Count;
if (total <= 0)
{
return 0;
}
}
return ComputeTicketScore(ref total, list_TicketId_HasScore, remain_user_operation_ticket, remain_exam_operation_ticket);
}
return total;
}
/// <summary>
/// 获取步骤得分
/// </summary>
/// <param name="list_proc"></param>
/// <returns></returns>
public int get_ticket_proc_scrore(List<DataService.Model.pow_user_operation_proc_ticket> list_proc)
{
int total = 5;
foreach (var item in list_proc)
{
//未做步骤直接扣1分
if (item.State == 0)
{
total = total - 1;
if (total <= 0)
{
return 0;
}
}
//已做步骤按真实情况扣分或不扣分
else
{
total = total - item.Score;
if (total <= 0)
{
return 0;
}
}
}
return total;
}
public List<DataService.Other.fault_tree> ReadTree()
{
var tree_list = new List<DataService.Other.fault_tree>();
string fault_tree_file = DataBase.path + "/Json/FaultTree.json";
//读取json文件
using (StreamReader file = File.OpenText(fault_tree_file))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
tree_list = JsonConvert.DeserializeObject<List<DataService.Other.fault_tree>>(JToken.ReadFrom(reader).ToString());
}
}
return tree_list;
}
private string Write(APICode code, object data)
{
return GetJsonWithCode(code, data);
}
/// <summary>
/// 获取带状态码的JSON字符串
/// </summary>
/// <param name="code"></param>
/// <param name="dataObj"></param>
/// <returns></returns>
private string GetJsonWithCode(APICode code, object dataObj)
{
return Newtonsoft.Json.JsonConvert.SerializeObject(new { code = (int)code, state = code.ToString(), data = dataObj });
}
private string GetResult(bool _state, object _data, string _message)
{
var iso = new IsoDateTimeConverter();
iso.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
return JsonConvert.SerializeObject(new Result(_state, _data, _message), iso);
}
protected string GetResult(bool _state, string _message)
{
return JsonConvert.SerializeObject(new Result(_state, _message));
}
}
public class Result
{
public bool state = false;
public string message = "";
public object data = null;
public Result(bool _state, object _data, string _message)
{
this.state = _state;
this.data = _data;
this.message = _message;
}
public Result(bool _state, object _data)
{
this.state = _state;
this.data = _data;
}
public Result(bool _state, string _message)
{
this.state = _state;
this.message = _message;
}
}
/// <summary>
/// 接口状态码
/// </summary>
public enum APICode
{
/// <summary>
/// 成功
/// </summary>
Success,
/// <summary>
/// 失败
/// </summary>
Fail
}
}