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; } } }