using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
using WIDESEA.Common;
using WIDESEA.Core.Utilities;
using WIDESEA.Entity.DomainModels;
using WIDESEA.Services.Repositories;
using WIDESEA.Services.Services.ToMes;
using WIDESEA_Common.LogEnum;
using WIDESEA_Services;
namespace WIDESEA.Services.Services.ToMeasureDevice
{
public class ToMeasureDeviceService
{
///
/// 测量设备调用该接口,获取测量需要的数据
///
///
public static Dictionary GetGoodsInformation()
{
Dictionary resultDic = new Dictionary();
//string state = "成功";
try
{
Dictionary dataDic = new Dictionary();
Dt_taskinfo taskinfo = Dt_taskinfoRepository.Instance.FindFirst(x => x.task_state == TaskState.TaskState_Measureing.ToString());
//Dt_taskinfo taskinfo = Dt_taskinfoRepository.Instance.FindFirst(x => x.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString());
if (taskinfo != null)
{
VV_ContainerInfo containerInfo = VV_ContainerInfoRepository.Instance.FindFirst(x => x.containerhead_barcode == taskinfo.task_barcode);
if (containerInfo != null)
{
dataDic.Add("operator", containerInfo.containerdtl_operator);
dataDic.Add("identifierNo", containerInfo.containerdtl_goodsCode);
dataDic.Add("inboundUnit", containerInfo.containerdtl_inboundUnit);
dataDic.Add("inboundDate", containerInfo.containerhead_createtime);
string standard = containerInfo.containerdtl_standard.Contains("0") ? "新品" : "检修";
dataDic.Add("standard", standard);
// dataDic.Add("standard", "新品");
dataDic.Add("carType", containerInfo.containerdtl_carType);
//dataDic.Add("carType", "CRH2A");
dataDic.Add("type", containerInfo.containerdtl_type);
//dataDic.Add("type", "F-80781112TAROL130/240-B-TVP");
dataDic.Add("barcode", containerInfo.containerhead_barcode);
dataDic.Add("madeUnit", containerInfo.containerdtl_madeUnit);
dataDic.Add("madeDate", containerInfo.containerdtl_madeDate);
dataDic.Add("number", containerInfo.containerdtl_number);
resultDic.Add("status", true);
resultDic.Add("message", "Success");
resultDic.Add("data", dataDic);
LogRecord.WriteLog((int)LogEnum.MeasureResult, $"===发送===>发送给测量设备的信息数据:{JsonConvert.SerializeObject(dataDic)}");
}
else
throw new Exception("没有找到测量信息");
}
else
throw new Exception("当前没有正在进行的测量任务");
}
catch (Exception ex)
{
resultDic.Add("status", false);
resultDic.Add("message", ex.Message);
resultDic.Add("data", null);
//state = "失败";
LogRecord.WriteLog((int)LogEnum.MeasureResult, $"===发送===>发送给测量设备的信息数据失败:{JsonConvert.SerializeObject(resultDic)}");
}
//CommonFunction.AddInterfaceLogAction(null, resultDic, state, "GetGoodsInformation");
return resultDic;
}
///
/// 测量设备对轴承测量完毕后,调用该接口向WMS上报测量结果
///
///
public static Dictionary PostGoodsData(Dictionary data)
{
Dictionary resultDic = new Dictionary();
//string state = "成功";
try
{
LogRecord.WriteLog((int)LogEnum.MeasureResult, $"===接收===>接收到测量设备的测量结果:{JsonConvert.SerializeObject(data)}");
//获取轴承识别号,找到对应的测量记录,将测量数据填充
string identitfierId = data["ID"].ToString();
//
Dt_container_size_info container_Size_Info = Dt_container_size_infoRepository.Instance.FindFirst(x => x.csize_barcode == identitfierId);
//Dt_container_size_info container_Size_Info = Dt_container_size_infoRepository.Instance.FindFirst(x => true);
if (container_Size_Info != null)
{
container_Size_Info.csize_in_1 = data["BearingInnerDiameter11"].ToString();
container_Size_Info.csize_in_2 = data["BearingInnerDiameter12"].ToString();
container_Size_Info.csize_in_3 = data["BearingInnerDiameter13"].ToString();
container_Size_Info.csize_in_4 = data["BearingInnerDiameter14"].ToString() + "_" + data["BearingInnerDiameter1Avg"].ToString();
container_Size_Info.csize_in_5 = data["BearingInnerDiameter21"].ToString();
container_Size_Info.csize_in_6 = data["BearingInnerDiameter22"].ToString();
container_Size_Info.csize_in_7 = data["BearingInnerDiameter23"].ToString();
container_Size_Info.csize_in_8 = data["BearingInnerDiameter24"].ToString() + "_" + data["BearingInnerDiameter2Avg"].ToString();
container_Size_Info.csize_in_9 = data["BearingInnerDiameter31"].ToString();
container_Size_Info.csize_in_10 = data["BearingInnerDiameter32"].ToString();
container_Size_Info.csize_in_11 = data["BearingInnerDiameter33"].ToString();
container_Size_Info.csize_in_12 = data["BearingInnerDiameter34"].ToString() + "_" + data["BearingInnerDiameter3Avg"].ToString();
container_Size_Info.csize_in_13 = data["BearingInnerDiameter41"].ToString();
container_Size_Info.csize_in_14 = data["BearingInnerDiameter42"].ToString();
container_Size_Info.csize_in_15 = data["BearingInnerDiameter43"].ToString();
container_Size_Info.csize_in_16 = data["BearingInnerDiameter44"].ToString() + "_" + data["BearingInnerDiameter4Avg"].ToString();
//轴承内径平均值
container_Size_Info.csize_in_value = data["BearingInnerDiameterAvg"].ToString();
//轴承内径合格否
container_Size_Info.csize_in_result = data["BearingInnerDiameterQualified"].ToString();
container_Size_Info.csize_out_1 = data["BearingOuterDiameter11"].ToString();
container_Size_Info.csize_out_2 = data["BearingOuterDiameter12"].ToString();
container_Size_Info.csize_out_3 = data["BearingOuterDiameter13"].ToString();
container_Size_Info.csize_out_4 = data["BearingOuterDiameter14"].ToString() + "_" + data["BearingOuterDiameter1Avg"].ToString();
container_Size_Info.csize_out_5 = data["BearingOuterDiameter21"].ToString();
container_Size_Info.csize_out_6 = data["BearingOuterDiameter22"].ToString();
container_Size_Info.csize_out_7 = data["BearingOuterDiameter23"].ToString();
container_Size_Info.csize_out_8 = data["BearingOuterDiameter24"].ToString() + "_" + data["BearingOuterDiameter2Avg"].ToString();
container_Size_Info.csize_out_9 = data["BearingOuterDiameter31"].ToString();
container_Size_Info.csize_out_10 = data["BearingOuterDiameter32"].ToString();
container_Size_Info.csize_out_11 = data["BearingOuterDiameter33"].ToString();
container_Size_Info.csize_out_12 = data["BearingOuterDiameter34"].ToString() + "_" + data["BearingOuterDiameter3Avg"].ToString();
container_Size_Info.csize_out_13 = data["BearingOuterDiameter41"].ToString();
container_Size_Info.csize_out_14 = data["BearingOuterDiameter42"].ToString();
container_Size_Info.csize_out_15 = data["BearingOuterDiameter43"].ToString();
container_Size_Info.csize_out_16 = data["BearingOuterDiameter44"].ToString() + "_" + data["BearingOuterDiameter4Avg"].ToString();
//轴承外径平均值
container_Size_Info.csize_out_value = data["BearingOuterDiameterAvg"].ToString();
//轴承外径合格否
container_Size_Info.csize_out_result = data["BearingOuterDiameterQualified"].ToString();
container_Size_Info.csize_three_1 = data["BearingOilGearDiameter1"].ToString();
container_Size_Info.csize_three_2 = data["BearingOilGearDiameter2"].ToString();
//挡油内径平均值
container_Size_Info.csize_three_3 = data["BearingOilGearDiameterAvg"].ToString();
//挡油内径合格否
container_Size_Info.csize_three_result = data["BearingOilGearDiameterQualified"].ToString();
container_Size_Info.csize_four_1 = data["BearingTailgateDiameter1"].ToString();
container_Size_Info.csize_four_2 = data["BearingTailgateDiameter2"].ToString();
//后挡内径平均值
container_Size_Info.csize_four_3 = data["BearingTailgateDiameterAvg"].ToString();
//后挡内径合格否
container_Size_Info.csize_four_result = data["BearingTailgateDiameterQualified"].ToString();
Dt_container_size_infoRepository.Instance.Update(container_Size_Info, true);
Guid id = Guid.Parse(container_Size_Info.csize_container_detail_id);
Dt_container_detail detail = Dt_container_detailRepository.Instance.FindFirst(r => r.containerdtl_id == id);
if (null != detail)
{
detail.containerdtl_text1 = "已测量";
detail.containerdtl_text2 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
data.Add("weight", detail.containerdtl_goodsWeight);
string uploadStatus = "未上传";
string result = "合格";
if ("不合格".Equals(container_Size_Info.csize_in_result) || "不合格".Equals(container_Size_Info.csize_out_result)
|| "不合格".Equals(container_Size_Info.csize_three_result) || "不合格".Equals(container_Size_Info.csize_four_result))
result = "不合格";
else
{
string resultString = string.Empty;
try
{
EndpointAddress address = new EndpointAddress(ToMesService.POSTURL);
ErpWebService.Service_EQPSoapClient client = new ErpWebService.Service_EQPSoapClient(new BasicHttpBinding(), address);
Task res = client.ReportToSCEAsync(detail.containerdtl_number, JsonConvert.SerializeObject(data));
resultString = res.Result.Body.ReportToSCEResult;
uploadStatus = "已上传";
}
catch
{
}
finally
{
LogRecord.WriteLog((int)LogEnum.Mes, $"测量上传MES参数:{JsonConvert.SerializeObject(data)},结果:{resultString}");
}
}
detail.containerdtl_text3 = result;
Dt_container_detailRepository.Instance.Update(detail, x => new { x.containerdtl_text1, x.containerdtl_text2, x.containerdtl_text3 }, true);
Dt_container_head head = Dt_container_headRepository.Instance.FindFirst(r => r.containerhead_id == Guid.Parse(detail.containerdtl_headid));
Dt_taskinfo task = Dt_taskinfoRepository.Instance.FindFirst(r => r.task_barcode == head.containerhead_barcode);
if (null == task)
task = new Dt_taskinfo() { task_creator = "手动上传." };
dt_measureRecord record = new dt_measureRecord()
{
measure_barcode = head.containerhead_barcode,
measure_createTime = DateTime.Now,
measure_fcbAVG = string.IsNullOrEmpty(container_Size_Info.csize_four_3) ? 0 : decimal.Parse(container_Size_Info.csize_four_3),
measure_fcbAVG_result = container_Size_Info.csize_four_result,
measure_id = Guid.NewGuid(),
measure_locationId = task.task_fromlocationid,
measure_madeUnit = detail.containerdtl_madeUnit,
measure_materielId = detail.containerdtl_materielid,
measure_materielNumber = detail.containerdtl_goodsCode,
measure_materielType = detail.containerdtl_type,
measure_standa = detail.containerdtl_standard,
measure_userName = task.task_creator,
measure_weight = string.IsNullOrEmpty(detail.containerdtl_goodsWeight) ? 0 : decimal.Parse(detail.containerdtl_goodsWeight),
measure_ydAVG = string.IsNullOrEmpty(container_Size_Info.csize_three_3) ? 0 : decimal.Parse(container_Size_Info.csize_three_3),
measure_ydAVG_result = container_Size_Info.csize_three_result,
measure_zjAVG = string.IsNullOrEmpty(container_Size_Info.csize_in_value) ? 0 : decimal.Parse(container_Size_Info.csize_in_value),
measure_zjAVG_result = container_Size_Info.csize_in_result,
measure_result = result,
measure_wjAVG = string.IsNullOrEmpty(container_Size_Info.csize_out_value) ? 0 : decimal.Parse(container_Size_Info.csize_out_value),
measure_wj_result = container_Size_Info.csize_out_result,
};
if (result.Equals("合格"))
{
record.measure_uploadData = JsonConvert.SerializeObject(data);
record.measure_uploadResult = uploadStatus;
record.measure_uploadTime = DateTime.Now;
record.measure_uploadUser = "system";
}
dt_measureRecordRepository.Instance.Add(record, true);
}
resultDic.Add("status", "1");
resultDic.Add("message", "Success");
resultDic.Add("data", null);
}
else
{
resultDic.Add("status", "-1");
resultDic.Add("message", $"没有找到对应ID的轴承记录:【{identitfierId}】");
resultDic.Add("data", null);
//state = "失败";
}
}
catch (Exception ex)
{
resultDic.Add("status", "-1");
resultDic.Add("message", ex.Message);
resultDic.Add("data", null);
// state = "失败";
}
//CommonFunction.AddInterfaceLogAction(data, resultDic, state, "PostGoodsData");
return resultDic;
}
///
/// 测量设备调用此接口上报设备状态,同时作为心跳检测接口确保与WMS的连接
///
///
///
public static Dictionary PostDeviceStatus(Dictionary data)
{
Dictionary resultDic = new Dictionary();
try
{
//设备编号
string EquipmentNumber = data["EquipmentNumber"].ToString();
//设备状态
//0=正常进行
//1=设备异常报警
//2=测量数据异常报警
//3=暂停
//4=停止
string EquipmentStatus = data["EquipmentStatus"].ToString();
//设备状态具体信息、报警状态详细信息
string StatusInformation = data["StatusInformation"].ToString();
//上报时间
string OperationTime = data["OperationTime"].ToString();
string heartStatus = "onLine";
LogRecord.WriteLog((int)LogEnum.MeasureHeart, $"接收到测量设备的状态上报数据:{JsonConvert.SerializeObject(data)}");
Dt_general_info general_Info = Dt_general_infoRepository.Instance.FindFirst(x => true);
general_Info.general_measure_device_status = EquipmentStatus;
general_Info.general_measure_device_heart = heartStatus;
Dt_general_infoRepository.Instance.Update(general_Info, true);
resultDic.Add("status", "1");
resultDic.Add("message", "Success");
resultDic.Add("data", null);
}
catch (Exception ex)
{
resultDic.Add("status", "-1");
resultDic.Add("message", ex.Message);
resultDic.Add("data", null);
}
//CommonFunction.AddInterfaceLogAction(data, resultDic, state, "PostDeviceStatus");
return resultDic;
}
}
}