using HslCommunication; using System; using System.Collections.Generic; using System.Text; using WIDESEA_Common; using WIDESEA_Common.LogEnum; using WIDESEA_Core.Utilities; using WIDESEA_Entity.DomainModels; using WIDESEA_Services; using WIDESEA_Services.Repositories; using WIDESEA_WCS.WCSClient; namespace WIDESEA_WCS.Jobs.ConveyorLine { public class WeighingLogic { /// /// 获取重量,不管是空托还是实托,都需要有重量记录 /// /// /// /// public static void DealWithWeighingLogic(Dt_TaskWCSinfoRepository taskWCSinfoRepository, Dt_StationManager station, PLCClient client) { OperateResult weightingResult = (OperateResult)client.ReadValue(CLineInfoDBName.R_Line_Weighting.ToString(), station.sm_stationNo); OperateResult rfidResult = (OperateResult)client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), station.sm_stationNo); OperateResult taskRes = (OperateResult)client.ReadValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), station.sm_stationNo); if (weightingResult.IsSuccess && rfidResult.IsSuccess && taskRes.IsSuccess) { UInt32 rfidValue = rfidResult.Content; //托盘码 int weighting = weightingResult.Content; //1 = 称重中 2= 称重完成 UInt32 taskNum = taskRes.Content; //找到正在进行称重的任务 Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(x => x.wcstask_barcode == rfidValue.ToString() && x.wcstask_taskNumber == taskNum && (x.wcstask_type == TaskType.TaskType_Box_Pallet_Inbound.ToString() || x.wcstask_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString())&& (x.wcstask_state == TaskState.TaskState_ConveyorLineExecuting.ToString() || x.wcstask_state == TaskState.TaskState_Weighing.ToString())); if (wcsInfo != null) { //1 = 表示在称重中 if (weighting == 1) { LogRecord.WriteLog(LogEnum.InBound,$"任务号:【{taskNum}】,托盘号:【{rfidValue}】对应的任务达到【20201】站台,并且处于【称重中...】状态"); //在此更新任务状态、上报WMS任务状态 WebResponseContent content = WMSApi.PostTaskStateToWMS(rfidValue.ToString(), TaskState.TaskState_Weighing.ToString()); if (content.Status) { wcsInfo.wcstask_state = TaskState.TaskState_Weighing.ToString(); wcsInfo.wcstask_dispatcherTime = DateTime.Now; taskWCSinfoRepository.Update(wcsInfo, true); Console.WriteLine($"{DateTime.Now}=>Success=> 上报WMS更新任务状态成功【TaskState_Weighing】,任务号:【{wcsInfo.wcstask_taskNumber}】"); LogRecord.WriteLog(LogEnum.InBound, $"任务号:【{taskNum}】,托盘号:【{rfidValue}】上报WMS更新任务状态成功【TaskState_Weighing】"); } else { Console.WriteLine($"{DateTime.Now}=>Failed=> 上报WMS更新任务状态出错【TaskState_Weighing】,任务号:【{wcsInfo.wcstask_taskNumber}】,原因:{content.Message}"); LogRecord.WriteLog(LogEnum.InBound, $"::Error::=> 任务号:【{taskNum}】,托盘号:【{rfidValue}】上报WMS更新任务状态失败【TaskState_Weighing】,原因:{content.Message}"); } } else if (weighting == 2) { OperateResult weightResult = (OperateResult)client.ReadValue(CLineInfoDBName.R_Line_Weight.ToString(), station.sm_stationNo); if (weightResult.IsSuccess) { UInt32 weightValue = weightResult.Content; LogRecord.WriteLog(LogEnum.InBound, $" 任务号:【{taskNum}】,托盘号:【{rfidValue}】读取到称重值:【{weightValue}】"); //向WMS上报读取到的重量值和对应的RFID值 WebResponseContent content = WMSApi.TellWmsWeightResult(rfidValue.ToString(), weightValue.ToString()); if (content.Status) { Console.WriteLine($"{DateTime.Now}=>上报WMS称重结果完成,托盘号:【{rfidValue}】,重量值:【{weightValue}】"); LogRecord.WriteLog(LogEnum.InBound, $" 任务号:【{taskNum}】,托盘号:【{rfidValue}】上报WMS称重值:【{weightValue}】成功"); //上报重量结果后,在此通知线体继续任务,该为了人工手动 bool goonTask = client.WriteValue(CLineInfoDBName.W_Line_Weight_OK.ToString(), true); if (goonTask) { LogRecord.WriteLog(LogEnum.InBound, $" 任务号:【{taskNum}】,托盘号:【{rfidValue}】上报WMS称重值后,发送继续任务指令给线体"); Console.WriteLine($"{DateTime.Now}=>Success=> 称重完成后继续任务,任务号:【{wcsInfo.wcstask_taskNumber}】"); //称重完成后,在此更新任务状态、上报WMS任务状态 content = WMSApi.PostTaskStateToWMS(rfidValue.ToString(), TaskState.TaskState_ConveyorLineExecuting.ToString()); if (content.Status) { wcsInfo.wcstask_state = TaskState.TaskState_ConveyorLineExecuting.ToString(); wcsInfo.wcstask_dispatcherTime = DateTime.Now; taskWCSinfoRepository.Update(wcsInfo, true); Console.WriteLine($"{DateTime.Now}=>Success=> 上报WMS更新任务状态成功【TaskState_ConveyorLineExecuting】,任务号:【{wcsInfo.wcstask_taskNumber}】"); LogRecord.WriteLog(LogEnum.InBound, $"任务号:【{taskNum}】,托盘号:【{rfidValue}】上报WMS更新任务状态成功【TaskState_ConveyorLineExecuting】,称重后上报"); } else { Console.WriteLine($"{DateTime.Now}=>Failed=> 上报WMS更新任务状态出错【TaskState_ConveyorLineExecuting】,任务号:【{wcsInfo.wcstask_taskNumber}】,原因:{content.Message}"); LogRecord.WriteLog(LogEnum.InBound, $"::Error::=> 任务号:【{taskNum}】,托盘号:【{rfidValue}】上报WMS更新任务状态失败【TaskState_ConveyorLineExecuting】,称重后上报,原因:{content.Message}"); } } else { Console.WriteLine($"{DateTime.Now}=>Failed=> 称重完成后写如继续任务失败,任务号:【{wcsInfo.wcstask_taskNumber}】"); } } else { Console.WriteLine($"::Error::=> 上报WMS称重结果失败,托盘号:【{rfidValue}】,重量值:【{weightValue}】"); LogRecord.WriteLog(LogEnum.InBound, $"::Error::=> 任务号:【{taskNum}】,托盘号:【{rfidValue}】上报WMS称重结果失败,原因:{content.Message}"); } } else { LogRecord.WriteLog(LogEnum.InBound, $"::Error::=> 任务号:【{taskNum}】,托盘号:【{rfidValue}】读取重量值失败"); } } } else { //Console.WriteLine("当前没有需要进行的称重任务"); } } } } }