CompetitionAPI_dotnet/CompetitionAPI/Controllers/unity/AddUserFaultRecordControlle...

837 lines
62 KiB
C#

using Competition.Common.Util;
using CompetitionAPI.api.unity;
using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Authorization;
using CompetitionAPI.Util;
namespace CompetitionAPI.Controllers.unity
{
[Route("unity/[controller]")]
[ApiController]
public class AddUserFaultRecordController : Controller
{
private readonly IWebHostEnvironment _webHostEnvironment;
Competition.Mysql.BLL.pow_user_fault_record user_fault_record_bll = new Competition.Mysql.BLL.pow_user_fault_record();
Competition.Mysql.BLL.pow_user_fault user_fault_bll = new Competition.Mysql.BLL.pow_user_fault();
Competition.Mysql.BLL.pow_user_exam user_exam_bll = new Competition.Mysql.BLL.pow_user_exam();
Competition.Mysql.BLL.pow_achievement achievement_bll = new Competition.Mysql.BLL.pow_achievement();
Competition.Mysql.BLL.pow_achievement_details achievement_details_bll = new Competition.Mysql.BLL.pow_achievement_details();
Competition.Mysql.BLL.pow_config config_bll = new Competition.Mysql.BLL.pow_config();
public AddUserFaultRecordController(IWebHostEnvironment webHostEnvironment)
{
_webHostEnvironment = webHostEnvironment;
}
/// <summary>
/// 保存考试故障记录接口
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
[Authorize]
[HttpPost]
[APIFilter]
public JsonResult Index([FromBody] AddUserFaultRecordRequest req)
{
try
{
if (req != null)
{
var test = JsonConvert.SerializeObject(req);
var config_model = config_bll.GetModelList("").FirstOrDefault();
if (config_model == null)
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "配置信息不存在"));
}
var user_exam_model = user_exam_bll.GetModelList(" ExamId='" + req.ExamId + "' and UserId='" + req.UserId + "' ").FirstOrDefault();
if (user_exam_model != null)
{
if (user_exam_model.Status == "已结束")
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "考生考试已结束"));
}
var achievement_model = achievement_bll.GetModelList(" ExamId='" + req.ExamId + "' and UserId='" + req.UserId + "' ").FirstOrDefault();
if (achievement_model == null)
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "考生成绩数据不存在"));
}
var user_fault_list = user_fault_bll.GetModelList(" ExamId='" + req.ExamId + "' and UserId='" + req.UserId + "' ");
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<Competition.Mysql.Model.pow_user_fault_record>();
var details_list = new List<Competition.Mysql.Model.pow_achievement_details>();
var TotalDefectScore = decimal.Parse(config_model.TotalDefectScore);
decimal total_score = 0;
//组织树
var tree_list = ReadTree();
foreach (var item in req.Data)
{
var new_fault_model = new Competition.Mysql.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 = "";
}
else if (fault_model.FaultDesc == "电缆接头发热")
{
item.Value = item.Value + "发热";
}
if (item.Value.Contains("东侧") || item.Value.Contains("北侧") || item.Value.Contains("西侧"))
{
item.Value = item.Value + "拉线";
}
var root_device_name = "";
var device_name = "";
if (fault_model != null)
{
var first_list = tree_list.Where(a => a.TowerId == item.RootDeviceId).FirstOrDefault();
if (first_list != null)
{
root_device_name = first_list.Tower;
if (first_list.TowerId != item.DeviceId)
{
if (first_list.Data != null)
{
var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == item.DeviceId).FirstOrDefault();
if (two_list != null)
{
device_name = two_list.PowerDistributionBox;
}
else
{
var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == item.DeviceId).FirstOrDefault();
if (three_list != null)
{
device_name = three_list.Line;
}
}
}
}
}
var is_find_score = "0";
var is_classification_score = "0";
if (item.IsCorrect == "1")
{
if (fault_model.ChoiceQuestion != "0")
{
is_find_score = "1";
decimal select_score = 0;
decimal fault_score = 0;
if (fault_model.FaultDesc == "配电箱箱门未加锁" || fault_model.FaultDesc == "柜门与箱体没有链接线" || fault_model.FaultDesc == "配电箱孔洞未封堵")
{
var value_list = new List<string>();
if (fault_model.FaultDesc != "配电箱孔洞未封堵")
{
value_list = fault_model.Position.Split('|').ToList();
}
else
{
value_list = fault_model.MultipleQuestion.Split('|').ToList();
}
foreach (var position_item in value_list)
{
var select_score_model = System.Decimal.Round((decimal.Parse(fault_model.SelectSocre) / total) * TotalDefectScore, 3);
decimal otherQuestionScore = 0;
var firstQuestionScore = Tool.TransFormation(select_score_model, value_list.Count, out otherQuestionScore);
var user_Index = value_list.IndexOf(position_item);
if (user_Index == 0)
{
select_score = firstQuestionScore;
}
else
{
select_score = otherQuestionScore;
}
var item_name = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷查找分值";
var achievement_details_model = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and 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 Competition.Mysql.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;
}
}
var fault_score_model = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * TotalDefectScore, 3);
decimal otherQuestionScore2 = 0;
var firstQuestionScore2 = Tool.TransFormation(fault_score_model, value_list.Count, out otherQuestionScore2);
if (user_Index == 0)
{
fault_score = firstQuestionScore2;
}
else
{
fault_score = otherQuestionScore2;
}
if (item.DefectLevel == fault_model.DefectLevel)
{
var item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷分类分值";
var achievement_details_model2 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and 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 Competition.Mysql.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
{
var item_name2 = root_device_name + "-" + device_name + "-" + fault_model.FaultDesc + "-" + position_item + "-" + "缺陷分类分值";
var achievement_details_model2 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and 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 Competition.Mysql.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
{
var value_list = new List<string>();
if (fault_model.FaultDesc == "配电箱孔洞未封堵"
|| fault_model.FaultDesc == "熔断器下桩头发热"
|| fault_model.FaultDesc == "熔芯不匹配"
|| fault_model.FaultDesc == "熔芯损坏"
|| fault_model.FaultDesc == "电缆头套管相色缺失"
|| fault_model.FaultDesc == "电缆接头发热"
|| fault_model.FaultDesc == "电缆绝缘层老化开裂"
|| fault_model.FaultDesc == "拉线无警示套管"
|| fault_model.FaultDesc == "拉线松动"
|| fault_model.FaultDesc == "拉线断股锈蚀"
|| fault_model.FaultDesc == "拉线UT线夹螺帽不齐全"
|| fault_model.FaultDesc == "接头发热"
|| fault_model.FaultDesc == "线路弧垂不一致")
{
if (!string.IsNullOrEmpty(fault_model.MultipleQuestion))
{
if (fault_model.FaultDesc != "相色标识错误")
{
value_list = fault_model.MultipleQuestion.Split('|').ToList();
}
}
}
if (value_list.Count > 0)
{
var select_score_model = System.Decimal.Round((decimal.Parse(fault_model.SelectSocre) / total) * TotalDefectScore, 3);
decimal otherQuestionScore = 0;
var firstQuestionScore = Tool.TransFormation(select_score_model, value_list.Count, out otherQuestionScore);
var fault_score_model = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * TotalDefectScore, 3);
decimal otherQuestionScore2 = 0;
var firstQuestionScore2 = Tool.TransFormation(fault_score_model, value_list.Count, out otherQuestionScore2);
var user_Index = value_list.IndexOf(item.Value);
if (user_Index == 0)
{
select_score = firstQuestionScore;
fault_score = firstQuestionScore2;
}
else
{
select_score = otherQuestionScore;
fault_score = otherQuestionScore2;
}
}
else
{
select_score = System.Decimal.Round((decimal.Parse(fault_model.SelectSocre) / total) * TotalDefectScore, 3);
fault_score = System.Decimal.Round((decimal.Parse(fault_model.FaultScore) / total) * TotalDefectScore, 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 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and 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 Competition.Mysql.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)
{
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 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and 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 Competition.Mysql.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
{
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 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and 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 Competition.Mysql.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 = req.UserId;
new_fault_model.ExamId = req.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 = req.UserId;
new_fault_model.ExamId = req.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);
}
}
var fault_list = req.Data.Select(a => a.FaultId).ToList();
//本地数据库正确数据里有,用户选择数据里没有,少选
var correct_data = user_fault_list.Where(s => s.ChoiceQuestion != "0" && !fault_list.Contains(s.FaultId)).ToList();
foreach (var item in correct_data)
{
var root_device_name = "";
var device_name = "";
var first_list = tree_list.Where(a => a.TowerId == item.RootDeviceId).FirstOrDefault();
if (first_list != null)
{
root_device_name = first_list.Tower;
if (first_list.TowerId != item.DeviceId)
{
if (first_list.Data != null)
{
var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == item.DeviceId).FirstOrDefault();
if (two_list != null)
{
device_name = two_list.PowerDistributionBox;
}
else
{
var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == item.DeviceId).FirstOrDefault();
if (three_list != null)
{
device_name = three_list.Line;
}
}
}
}
}
decimal select_score = 0;
decimal fault_score = 0;
var value_list = new List<string>();
if (item.FaultDesc == "配电箱箱门未加锁" || item.FaultDesc == "柜门与箱体没有链接线")
{
value_list = item.Position.Split('|').ToList();
}
else
{
if (item.FaultDesc == "配电箱孔洞未封堵"
|| item.FaultDesc == "熔断器下桩头发热"
|| item.FaultDesc == "熔芯不匹配"
|| item.FaultDesc == "熔芯损坏"
|| item.FaultDesc == "电缆头套管相色缺失"
|| item.FaultDesc == "电缆接头发热"
|| item.FaultDesc == "电缆绝缘层老化开裂"
|| item.FaultDesc == "拉线无警示套管"
|| item.FaultDesc == "拉线松动"
|| item.FaultDesc == "拉线断股锈蚀"
|| item.FaultDesc == "拉线UT线夹螺帽不齐全"
|| item.FaultDesc == "接头发热"
|| item.FaultDesc == "线路弧垂不一致")
{
if (!string.IsNullOrEmpty(item.MultipleQuestion))
{
if (item.FaultDesc != "相色标识错误")
{
value_list = item.MultipleQuestion.Split('|').ToList();
}
}
}
}
if (value_list.Count == 0)
{
select_score = System.Decimal.Round((decimal.Parse(item.SelectSocre) / total) * TotalDefectScore, 3);
var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + "缺陷查找分值";
var achievement_details_model = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and 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 Competition.Mysql.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) * TotalDefectScore, 3);
var item_name2 = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + "缺陷分类分值";
var achievement_details_model2 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and 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 Competition.Mysql.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)
{
var select_score_model = System.Decimal.Round((decimal.Parse(item.SelectSocre) / total) * TotalDefectScore, 3);
decimal otherQuestionScore = 0;
var firstQuestionScore = Tool.TransFormation(select_score_model, value_list.Count, out otherQuestionScore);
var fault_score_model = System.Decimal.Round((decimal.Parse(item.FaultScore) / total) * TotalDefectScore, 3);
decimal otherQuestionScore2 = 0;
var firstQuestionScore2 = Tool.TransFormation(fault_score_model, value_list.Count, out otherQuestionScore2);
var user_Index = value_list.IndexOf(position_item);
if (user_Index == 0)
{
select_score = firstQuestionScore;
fault_score = firstQuestionScore2;
}
else
{
select_score = otherQuestionScore;
fault_score = otherQuestionScore2;
}
var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷查找分值";
var achievement_details_model = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and 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 Competition.Mysql.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);
}
}
var item_name2 = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷分类分值";
var achievement_details_model2 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and 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 Competition.Mysql.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);
}
}
}
}
}
//单条数据多选故障少选情况
var moment_data = user_fault_list.Where(s => s.ChoiceQuestion != "0" && (s.FaultDesc == "配电箱箱门未加锁" || s.FaultDesc == "柜门与箱体没有链接线" || s.FaultDesc == "配电箱孔洞未封堵" || s.FaultDesc == "熔断器下桩头发热" || s.FaultDesc == "熔芯不匹配" || s.FaultDesc == "熔芯损坏" || s.FaultDesc == "电缆头套管相色缺失" || s.FaultDesc == "电缆接头发热" || s.FaultDesc == "电缆绝缘层老化开裂" || s.FaultDesc == "拉线无警示套管" || s.FaultDesc == "拉线松动" || s.FaultDesc == "拉线断股锈蚀" || s.FaultDesc == "拉线UT线夹螺帽不齐全" || s.FaultDesc == "接头发热" || s.FaultDesc == "线路弧垂不一致")).ToList();
foreach (var item in moment_data)
{
var select_list = req.Data.Where(a => a.FaultId == item.FaultId).ToList();
if (select_list.Count > 0)
{
var root_device_name = "";
var device_name = "";
var first_list = tree_list.Where(a => a.TowerId == item.RootDeviceId).FirstOrDefault();
if (first_list != null)
{
root_device_name = first_list.Tower;
if (first_list.TowerId != item.DeviceId)
{
if (first_list.Data != null)
{
var two_list = first_list.Data.Where(a => a.PowerDistributionBoxId == item.DeviceId).FirstOrDefault();
if (two_list != null)
{
device_name = two_list.PowerDistributionBox;
}
else
{
var three_list = first_list.Data.SelectMany(a => a.Data).Where(a => a.LineId == item.DeviceId).FirstOrDefault();
if (three_list != null)
{
device_name = three_list.Line;
}
}
}
}
}
decimal select_score = 0;
decimal fault_score = 0;
var value_list = new List<string>();
if (item.FaultDesc == "配电箱箱门未加锁" || item.FaultDesc == "柜门与箱体没有链接线")
{
value_list = item.Position.Split('|').ToList();
}
else
{
if (!string.IsNullOrEmpty(item.MultipleQuestion))
{
if (item.FaultDesc != "相色标识错误")
{
value_list = item.MultipleQuestion.Split('|').ToList();
}
}
}
if (value_list.Count > 0)
{
foreach (var position_item in value_list)
{
var count = details_list.Where(a => a.FaultDesc == root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item).Count();
if (count == 0)
{
var select_score_model = System.Decimal.Round((decimal.Parse(item.SelectSocre) / total) * TotalDefectScore, 3);
decimal otherQuestionScore = 0;
var firstQuestionScore = Tool.TransFormation(select_score_model, value_list.Count, out otherQuestionScore);
var fault_score_model = System.Decimal.Round((decimal.Parse(item.FaultScore) / total) * TotalDefectScore, 3);
decimal otherQuestionScore2 = 0;
var firstQuestionScore2 = Tool.TransFormation(fault_score_model, value_list.Count, out otherQuestionScore2);
var user_Index = value_list.IndexOf(position_item);
if (user_Index == 0)
{
select_score = firstQuestionScore;
fault_score = firstQuestionScore2;
}
else
{
select_score = otherQuestionScore;
fault_score = otherQuestionScore2;
}
var item_name = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷查找分值";
var achievement_details_model = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and 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 Competition.Mysql.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);
}
}
var item_name2 = root_device_name + "-" + device_name + "-" + item.FaultDesc + "-" + position_item + "-" + "缺陷分类分值";
var achievement_details_model2 = achievement_details_bll.GetModelList(" AchievementId='" + achievement_model.AchievementId + "' and 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 Competition.Mysql.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)
//{
// total_score = details_list.Sum(a => a.ItemizedScore).Value;
//}
if (user_fault_record_bll.OperationAddData(record_list, details_list, achievement_model.AchievementId, total_score) > 0)
{
return Json(Tool.GetJsonWithCode(APICode.Success, "成功"));
}
else
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "失败"));
}
}
else
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "考生考试信息不存在"));
}
}
else
{
return Json(Tool.GetJsonWithCode(APICode.Fail, "请求参数无数据"));
}
}
catch (Exception ex)
{
LogHelper.WriteLog(ex.Message + ",行号:" + ex.StackTrace);
return Json(Tool.GetJsonWithCode(APICode.Fail, "发生错误,请联系管理员。"));
}
}
/// <summary>
/// 获取树结构json
/// </summary>
/// <returns></returns>
private List<Competition.Mysql.Other.fault_tree> ReadTree()
{
var tree_list = new List<Competition.Mysql.Other.fault_tree>();
string fault_tree_file = _webHostEnvironment.WebRootPath + "/Json/FaultTree.json";
//读取json文件
using (StreamReader file = System.IO.File.OpenText(fault_tree_file))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
tree_list = JsonConvert.DeserializeObject<List<Competition.Mysql.Other.fault_tree>>(JToken.ReadFrom(reader).ToString());
}
}
return tree_list;
}
}
}