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
{
///
/// 围栏分值
///
public string enclosure_score = "2";
///
/// 围栏每次扣分值
///
public string EnclosureFaultScore = "1";
///
/// 验电分值
///
public string ElectricityScore = "30";
///
/// 台区选择分值
///
public string SelectAreaScore = "30";
///
/// 巡检爬杆分值
///
public string ClimbrodScore = "30";
///
/// 巡线工器具总分
///
public double LineTotalScore = 3;
///
/// 巡线工器具多选分值
///
public double LineMultipleScore = 0.5;
///
/// 巡线工器具少选分值
///
public double LineMomentScore = 1;
///
/// 缺陷总分
///
public string TotalDefectScore = "65";
///
/// Get 获取当前时间已发布的考试信息接口
///
/// 考生id
/// 考试类型 1、2、3
/// 绝对路径前缀
/// 反序列化返回的值失败,代表请求接口失败
public string GetExam(string url, string UserId, string ExamType, string Path)
{
var now = DateTime.Now;
DataBase.user_operation_ticket_list = new List();
DataBase.user_list = new List();
DataBase.scene_list = new List();
DataBase.platform_area_list = new List();
DataBase.line_list = new List();
DataBase.exam_list = new List();
DataBase.exam_tool_list = new List();
DataBase.exam_fault_list = new List();
DataBase.exam_operation_ticket_list = new List();
DataBase.user_exam_list = new List();
DataBase.user_tool_list = new List();
DataBase.user_operation_proc_ticket_list = new List();
DataBase.user_fault_list = new List();
DataBase.achievement_list = new List();
DataBase.achievement_details_list = new List();
DataBase.user_fault_record_list = new List();
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(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>(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>(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>(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>(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>(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>(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>(JToken.ReadFrom(reader).ToString());
}
}
return Write(APICode.Success, exam_model);
}
///
/// Post 开始考试接口
///
/// 考试id
/// 考生id
/// 反序列化返回的值失败,代表请求接口失败
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();
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();
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();
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; 是否扣分 0:否,1:是
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, "考生考试信息不存在");
}
}
///
/// Post 结束考试接口
///
/// 接口域名
/// 考试id
/// 考生id
/// 反序列化返回的值失败,代表请求接口失败
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();
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, "考生考试信息不存在");
}
}
///
/// 获取提交的数据
///
/// 考试id
/// 用户id
///
public List GetAnswer(string ExamId, string UserId, int lesson_plan_id)
{
var list = new List();
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());
var answer_info = new List();
var answer_info_model1 = new SGAnswerInfo("1", "巡检工器具", 0, 0, 0, "", new List());
var answer_info_model2 = new SGAnswerInfo("2", "排故工器具", 0, 0, 0, "", new List());
var answer_info_model3 = new SGAnswerInfo("3", "停电操作票", 0, 0, 0, "", new List());
var answer_info_model4 = new SGAnswerInfo("4", "送电操作票", 0, 0, 0, "", new List());
var answer_info_model5 = new SGAnswerInfo("5", "停电操作票步骤", 0, 0, 0, "", new List());
var answer_info_model6 = new SGAnswerInfo("6", "送电操作票步骤", 0, 0, 0, "", new List());
var answer_info_model7 = new SGAnswerInfo("7", "围栏", 0, 0, 0, "", new List());
var answer_info_model8 = new SGAnswerInfo("8", "验电", 0, 0, 0, "", new List());
var answer_info_model9 = new SGAnswerInfo("9", "时间分", 0, 0, 0, "", new List());
var answer_info_model10 = new SGAnswerInfo("10", "缺陷查找、缺陷处理、缺陷分类分值", 0, 0, 0, "", new List());
var answer_info_model11 = new SGAnswerInfo("11", "其它扣分项", 0, 0, 0, "", new List());
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();
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();
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() { power_model };
}
else
{
var power_model = new SGStep("停电操作票选择", 5, 0);
answer_info_model3.StepArr = new List() { 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() { power_model };
}
else
{
var power_model = new SGStep("送电操作票选择", 5, 0);
answer_info_model4.StepArr = new List() { power_model };
}
#endregion
#region 停电操作票步骤
var all_power_failure_step_list = new List();
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();
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() { power_model };
}
else
{
var power_model = new SGStep("不放置围栏分值", 2, 0);
answer_info_model7.StepArr = new List() { 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() { power_model };
}
else
{
var power_model = new SGStep("箱门或插座未验电或验电顺序错误", 2, 0);
answer_info_model8.StepArr = new List() { 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() { power_model };
}
else
{
var power_model = new SGStep("时间分", 5, 0);
answer_info_model9.StepArr = new List() { power_model };
}
#endregion
#region 缺陷查找、缺陷处理、缺陷分类分值
var all_fault_list = new List();
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();
//巡检爬杆
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;
}
///
/// 操作票接口
///
/// 开始id
/// 用户id
/// 送电、停电
/// json数组
///
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>(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();
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"; //是否扣分 0:否,1:是
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);
}
///
/// 查询操作票步骤,用以初始化或断点续传操作票步骤
///
/// 开始id
/// 用户id
/// 送电、停电
/// json数组
///
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, "记录不存在");
}
}
///
/// 单步填写操作票步骤接口
///
/// 开始id
/// 用户id
/// 送电、停电
/// json数组
///
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;
//是否扣分 0:否,1:是
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, "操作票步骤信息不存在");
}
}
///
/// 停止操作票所有步骤接口,计算分数累计成绩
///
/// 开始id
/// 用户id
/// 送电、停电
///
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);
}
///
/// Post 巡线、排故工器具接口
///
/// 参数
/// 反序列化返回的值失败,代表请求接口失败
public string AddUserTool(string url, string parameter)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "AddUserTool.txt", "parameter:" + parameter);
var model = JsonConvert.DeserializeObject(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, "请求参数无数据");
}
}
///
/// Post 保存考试故障记录接口
///
/// 参数
/// 反序列化返回的值失败,代表请求接口失败
public string AddUserFaultRecord(string url, string parameter)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "AddUserFaultRecord.txt", "parameter:" + parameter);
var model = JsonConvert.DeserializeObject(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();
var details_list = new List();
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();
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();
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, "请求参数无数据");
}
}
///
/// Post 上传考试选择题数据接口
///
/// 参数
/// 反序列化返回的值失败,代表请求接口失败
public string AddUserChoiceQuestion(string url, string parameter)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "AddUserChoiceQuestion.txt", "parameter:" + parameter);
var model = JsonConvert.DeserializeObject(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();
var details_list = new List();
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();
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();
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();
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, "请求参数无数据");
}
}
///
/// Post 上传故障排故数据接口
///
/// 参数
/// 反序列化返回的值失败,代表请求接口失败
public string AddFaultOperation(string url, string parameter)
{
//System.IO.File.AppendAllText(@"D:\zy\" + "AddFaultOperation.txt", "parameter:" + parameter);
var model = JsonConvert.DeserializeObject(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();
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();
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();
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, "请求参数无数据");
}
}
///
/// Post 结束故障排故处理接口
///
/// 考试id
/// 用户id
/// 反序列化返回的值失败,代表请求接口失败
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();
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();
var select_value_list = new List();
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, "考生考试信息不存在");
}
}
///
/// Post 选择台区上传接口
///
/// 考试id
/// 考生id
/// 选择的台区
/// 反序列化返回的值失败,代表请求接口失败
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, "考生考试信息不存在");
}
}
///
/// Post 更新验电结果接口
///
/// 考试id
/// 考生id
/// 类型 巡线、排故
/// 反序列化返回的值失败,代表请求接口失败
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, "考生考试信息不存在");
}
}
///
/// Post 更新爬杆结果
///
/// 考试id
/// 考生id
/// 反序列化返回的值失败,代表请求接口失败
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, "考生考试信息不存在");
}
}
///
/// Post 更新未分闸状态拉合熔芯扣分接口
///
/// 考试id
/// 考生id
/// 反序列化返回的值失败,代表请求接口失败
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, "考生考试信息不存在");
}
}
///
/// Post 更新考试环节接口
///
/// 考试id
/// 考生id
/// 选择的台区
/// 反序列化返回的值失败,代表请求接口失败
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, "考生考试信息不存在");
}
}
///
/// Post 更新围栏接口
///
/// 考试id
/// 考生id
/// 反序列化返回的值失败,代表请求接口失败
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, "考生考试信息不存在");
}
}
///
/// Post 更新考试时长接口
///
/// 用户id
/// 考试id
/// 剩余考试时长
/// 反序列化返回的值失败,代表请求接口失败
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, "考生考试信息不存在");
}
}
///
/// Post 更新场景设备状态接口
///
/// 用户id
/// 考试id
/// 场景设备状态
/// 反序列化返回的值失败,代表请求接口失败
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, "考生考试信息不存在");
}
}
///
/// Post 获取并更新考生考试时间
///
/// 用户id
/// 考试id
/// 1 读取, 0 更新
/// 反序列化返回的值失败,代表请求接口失败
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);
}
}
///
/// 计算操作票得分
///
/// 总分
/// 保存未扣分项
/// 用户操作票
/// 答案操作票
///
public int ComputeTicketScore(ref int total, List list_TicketId_HasScore, List list_user_operation_ticket, List 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();
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();
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;
}
///
/// 获取步骤得分
///
///
///
public int get_ticket_proc_scrore(List 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 ReadTree()
{
var tree_list = new List();
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>(JToken.ReadFrom(reader).ToString());
}
}
return tree_list;
}
private string Write(APICode code, object data)
{
return GetJsonWithCode(code, data);
}
///
/// 获取带状态码的JSON字符串
///
///
///
///
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;
}
}
///
/// 接口状态码
///
public enum APICode
{
///
/// 成功
///
Success,
///
/// 失败
///
Fail
}
}