10006_YanCheng_Metrology/Assets/Scripts/Score_6001.cs

403 lines
13 KiB
C#

using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using LitJson;
/// <summary>
/// 场景中用到的全部buffer
/// </summary>
public class BufferTemp_6001
{
public List<string> TestPen3list;
public List<string> InSwitchCloseYDList;
public List<string> InSwitchOpenYDList;
public List<string> currentunInstallJieXian;
public List<string> currentInstallJieXian;
public List<string> installCover;
public List<string> currentInstallTestJieXian;
}
public class Score_6001 : ScoreBase
{
/// <summary>
/// 现场场景中的特殊物体控制
/// </summary>
private new Device_Control_6001 device_Control;
/// <summary>
/// 初始化,有配置用配置的分数,没有使用默认的分数
/// </summary>
public override void Init()
{
base.Init();
List<ScoreSubjectStep> tmps = new List<ScoreSubjectStep>();
tmps.Add(new ScoreSubjectStep(1, 0));//线损异常类型研判_
tmps.Add(new ScoreSubjectStep(2, 0));//异常分析_
tmps.Add(new ScoreSubjectStep(3, 5));//工作预约_
tmps.Add(new ScoreSubjectStep(4, 5));//办理工作票_
tmps.Add(new ScoreSubjectStep(5, 5));//正确着装_
tmps.Add(new ScoreSubjectStep(6, 10));//选取工具_
tmps.Add(new ScoreSubjectStep(7, 5));//与客户沟通_
tmps.Add(new ScoreSubjectStep(8, 0));//班前会_
tmps.Add(new ScoreSubjectStep(9, 3));//采集故障
tmps.Add(new ScoreSubjectStep(10, 4));//采集故障处理
tmps.Add(new ScoreSubjectStep(11, 4));//清理现场_
steps = new Dictionary<int, ScoreSubjectStep>();
tmps.ForEach(a =>
{
steps.Add(a.subProcessId, a);
});
List<D_SubProcess> dsteps = new List<D_SubProcess>();
DataManager.Instance.d_System.subjects.Find(a => a.id == schemeId).processes.ForEach(a =>
{
dsteps.AddRange(a.subProcesses);
});
for (int i = 0; i < steps.Count; i++)
{
steps[i + 1].step = dsteps[i];
}
//清理缓存
TestPen3list.Clear();
InSwitchCloseYDList.Clear();
InSwitchOpenYDList.Clear();
currentunInstallJieXian.Clear();
currentInstallJieXian.Clear();
installCover.Clear();
currentInstallTestJieXian.Clear();
reInstall = false;
FaultManager.Instance.selectedFaultOptions = JsonMapper.ToObject<FaultOptions>("{\r\n \"FaultDevice\": \"采集器\",\r\n \"FaultDeviceShow\": false,\r\n \"FaultTypeShow\": false,\r\n \"FaultSituationL1Show\": false,\r\n \"FaultSituationL2Show\": true,\r\n \"dataFaultType\": [\r\n {\r\n \"name\": \"111\",\r\n \"dataFaultSituationL1\": [\r\n {\r\n \"name\": \"2222\",\r\n \"dataFaultSituationL2\": [\r\n {\r\n \"L2name\": \"数据采集失败\",\r\n \"L2Limitation\": []\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n}");
FaultManager.Instance.originalFaultOptions = JsonManager.Instance.LoadData<FaultOptions>("FaultOptions");
}
public override void SetDeviceControl(Device_Control device_Control)
{
base.SetDeviceControl(device_Control);
this.device_Control = (Device_Control_6001)device_Control;
}
/// <summary>
/// 三步验电顺序
/// </summary>
List<string> TestPen3list = new List<string>();
/// <summary>
/// 开关断电验电
/// </summary>
List<string> InSwitchCloseYDList = new List<string>();
/// <summary>
/// 开关通电验电
/// </summary>
List<string> InSwitchOpenYDList = new List<string>();
/// <summary>
/// 拆除接线顺序
/// </summary>
List<string> unInstallJieXian = new List<string>()
{
"A_in_螺丝up", "A_in_螺丝down", "A_in_线",
"B_in_螺丝up","B_in_螺丝down","B_in_线",
"C_in_螺丝up","C_in_螺丝down","C_in_线",
"A_out_螺丝up","A_out_螺丝down","A_out_线",
"B_out_螺丝up","B_out_螺丝down","B_out_线",
"C_out_螺丝up","C_out_螺丝down","C_out_线",
"零_地_螺丝up","零_地_螺丝down","零_地_线",
"零_out_螺丝up","零_out_螺丝down","零_out_线"
};
/// <summary>
/// 拆除接线螺丝操作
/// </summary>
List<string> currentunInstallJieXian = new List<string>();
/// <summary>
/// 安装接线螺丝顺序
/// </summary>
List<string> installJieXian = new List<string>()
{
"零_out_线","零_out_螺丝up","零_out_螺丝down",
"零_地_线","零_地_螺丝up","零_地_螺丝down",
"C_out_线","C_out_螺丝up","C_out_螺丝down",
"B_out_线","B_out_螺丝up","B_out_螺丝down",
"A_out_线","A_out_螺丝up","A_out_螺丝down",
"C_in_线","C_in_螺丝up","C_in_螺丝down",
"B_in_线","B_in_螺丝up","B_in_螺丝down",
"A_in_线","A_in_螺丝up", "A_in_螺丝down"
};
/// <summary>
/// 安装接线螺丝操作
/// </summary>
List<string> currentInstallJieXian = new List<string>();
/// <summary>
/// 安装流程安装盖子
/// </summary>
List<string> installCover = new List<string>();
/// <summary>
/// 安装流程对接验电螺丝
/// </summary>
List<string> installTestJieXian = new List<string>() { "验电笔+A_in_螺丝", "验电笔+B_in_螺丝", "验电笔+C_in_螺丝" };
/// <summary>
/// 安装流程对接验电操作
/// </summary>
List<string> currentInstallTestJieXian = new List<string>();
/// <summary>
/// 采集器是否重装过
/// </summary>
bool reInstall = false;
public override void CheckScore(string triggerName, object para)
{
base.CheckScore(triggerName, para);
if (triggerName == "电脑")
{
if (para.ToString() == "透抄检查完成")
{
steps[1].SetScore(true);//线损异常类型研判完成
}
}
if (triggerName == "手机")
{
if (para.ToString() == "异常分析完成")
{
steps[2].SetScore(true);//1->2 异常分析完成
}
else if (para.ToString() == "工作预约完成")
{
steps[3].SetScore(true);//2->3 工作预约完成
}
}
else if (triggerName == "低压工作票确认按钮")
{
steps[4].SetScore(true);//3->4 办理工作票完成
}
else if (triggerName == "现场按钮")
{
//检查是否穿戴
float tmp = 0;
tmp += (PacksackBagMgr.Instance.wearDic.ContainsKey("国网安全帽") ? 0.25f : 0);
tmp += (PacksackBagMgr.Instance.wearDic.ContainsKey("工作服") ? 0.25f : 0);
tmp += (PacksackBagMgr.Instance.wearDic.ContainsKey("编织手套") ? 0.25f : 0);
tmp += (PacksackBagMgr.Instance.wearDic.ContainsKey("绝缘靴") ? 0.25f : 0);
steps[5].SetScore(tmp);
//检查背包是否携带
string[] shoudleTools = new string[] { "剥线钳", "绝缘螺丝刀", "验电笔", "国网安全帽", "工作服", "编织手套", "绝缘靴", "工作证", "盒装封印", "采集器" };
float tmp2 = 1;
shoudleTools.ToList().ForEach(a =>
{
tmp2 -= (PacksackBagMgr.Instance.toolAndMaterialDic.ContainsKey(a) ? 0 : 0.1f);
});
steps[6].SetScore(Mathf.Clamp01(tmp2));
}
else if (triggerName == "工作证")
{
//与客户沟通
steps[7].SetScore(true);
}
else if (triggerName == "NPC负责人")
{
//班前会
steps[8].SetScore(true);
}
else if (triggerName == "验电笔+插座" || triggerName == "验电笔+柜门")
{
//记录验电顺序
TestPen3list.Add(triggerName);
}
else if (triggerName == "故障记录按钮")
{
//采集故障,完成验电、选了一个采集异常
steps[9].SetScore(isCheckE() &&
FaultManager.Instance.selectedFaultsInReg.Count == 1 && FaultManager.Instance.selectedFaultsInReg[0].Equals("采集异常"));
}
else if (triggerName == "采集器")
{
if (para.ToString() == "采集器完成重装")
{
reInstall = true;
}
}
else if (triggerName == "联系主站台按钮")
{
if (steps[9].isDone && para.ToString() == "异常分析完成" && reInstall)
{
steps[10].SetScore(true);
}
}
else if (triggerName == "柜门封印触发区域")
{
if (steps[10].isDone)
{
if (!device_Control.sundries.gameObject.activeInHierarchy && device_Control.door_screw.isInstall && !device_Control.door_seal.isCut)
{
steps[11].SetScore(true);//清理现场
}
}
}
}
/// <summary>
/// 检查三步验电
/// </summary>
/// <returns></returns>
private bool isCheckE()
{
int guimen = 0;
if (TestPen3list.Count >= 3)
{
for (int i = 0; i < TestPen3list.Count; i++)
{
if (i == 0)
{
if (TestPen3list[i] != "验电笔+插座")
break;
}
else
{
if (TestPen3list[i] == "验电笔+柜门")
{
guimen = i;
}
else
{
if (guimen != 0)
{
//三步验电完成
Debug.Log("三步验电正确");
return true;
}
}
}
}
}
return false;
}
/// <summary>
/// 开关验电
/// </summary>
/// <returns></returns>
private bool isInSwitchCheckE()
{
if (InSwitchCloseYDList.Contains("验电笔+in开关_螺丝1") && InSwitchCloseYDList.Contains("验电笔+in开关_螺丝2") && InSwitchCloseYDList.Contains("验电笔+in开关_螺丝2"))
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 判断拆接线顺序
/// </summary>
/// <returns></returns>
private bool IsUninstallJieXianCheckE()
{
if (currentunInstallJieXian.Count != unInstallJieXian.Count)
{
return false;
}
//一一比对
for (int i = 0; i < currentunInstallJieXian.Count; i++)
{
if (currentunInstallJieXian[i] != unInstallJieXian[i])
{
//不分上下螺丝
if (currentunInstallJieXian[i].Replace("up", "").Replace("down", "") != unInstallJieXian[i].Replace("up", "").Replace("down", ""))
return false;
}
}
return true;
}
/// <summary>
/// 判断安装接线顺序
/// </summary>
/// <returns></returns>
public bool IsInstallJieXianCheckE()
{
if (!currentInstallJieXian.Contains("电能表拆装螺丝1") || !currentInstallJieXian.Contains("电能表拆装螺丝2"))
return false;
if (currentInstallJieXian.Count < installJieXian.Count + 2)
{
return false;
}
//一一比对
string[] tmps = new string[currentInstallJieXian.Count];
currentInstallJieXian.CopyTo(tmps);
var tmplist = tmps.ToList();
tmplist.Remove("电能表拆装螺丝1");
tmplist.Remove("电能表拆装螺丝2");
for (int i = 0; i < tmplist.Count; i++)
{
//不分上下螺丝
if (tmplist[i].Replace("up", "").Replace("down", "") != installJieXian[i].Replace("up", "").Replace("down", ""))
return false;
}
return true;
}
public bool Check15()
{
//开关关了,盖子拧上了
if (device_Control.inSwitch.isOpen && installCover.Contains("电能表盖子固定螺丝1") && installCover.Contains("电能表盖子固定螺丝2"))
{
//无验电顺序
if (installTestJieXian.TrueForAll(a => currentInstallTestJieXian.Any(b => b.Replace("up", "").Replace("down", "") == a)))
{
return true;
}
}
return false;
}
/// <summary>
/// 保存场景的Buffer信息
/// </summary>
/// <exception cref="System.NotImplementedException"></exception>
public override string SaveSceneBufferList()
{
BufferTemp_6001 tmp = new BufferTemp_6001();
tmp.TestPen3list = TestPen3list;
tmp.InSwitchCloseYDList = InSwitchCloseYDList;
tmp.InSwitchOpenYDList = InSwitchOpenYDList;
tmp.currentunInstallJieXian = currentunInstallJieXian;
tmp.currentInstallJieXian = currentInstallJieXian;
tmp.installCover = installCover;
tmp.currentInstallTestJieXian = currentInstallTestJieXian;
string sceneInfo = JsonConvert.SerializeObject(tmp, Formatting.Indented);
return sceneInfo;
//throw new System.NotImplementedException();
}
/// <summary>
/// 加载场景的Buffer信息
/// </summary>
public override void LoadSceneBufferList(string sceneInfo)
{
BufferTemp_6001 tmp = new BufferTemp_6001();
tmp = JsonMapper.ToObject<BufferTemp_6001>(sceneInfo);
TestPen3list = tmp.TestPen3list;
InSwitchCloseYDList = tmp.InSwitchCloseYDList;
InSwitchOpenYDList = tmp.InSwitchOpenYDList;
currentunInstallJieXian = tmp.currentunInstallJieXian;
currentInstallJieXian = tmp.currentInstallJieXian;
installCover = tmp.installCover;
currentInstallTestJieXian = tmp.currentInstallTestJieXian;
//throw new System.NotImplementedException();
}
}