using iWareCC.Common.Helper; using iWareCommon.Common.Globle; using iWareCommon.Utils; using iWareModel; using iWareModel.EnumType.XiGangPublicCommon; using iWareSql; using iWareSql.DataAccess; using iWareSql.DBModel; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using XiGang.Core.Model; using XiGang.Core.Model.PostParamModels.Task; using static WZ.Useful.Commons.NativeMethods; namespace iWareCC { /// /// 自动组盘 任务 /// public static class AutoSalverMaterialBindTask { /// /// 自动组盘任务 /// public static void Handler() { var alertMsg = ""; while (true) { Thread.Sleep(2000);//休眠2秒,将休眠写到前面,是为了下面的continue方法执行后不显示错误信息的提示!!!【EditBy shaocx,2022-05-24】 SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = string.Empty; try { if (SystemValue.isAllowRuning_AutoSalverMaterialBindTask && SystemValue.isStartedModel) { EDevice rgvLocation = EDevice.入库口1019; var stationCode = Convert.ToInt32(rgvLocation).ToString(); V_AllStore store = null; using (DbModel context = new DbModel()) { bool isGD_HasCatogryForRgvStattion = MyExtendHelper.IsGD_HasCatogryForRgvStattion(stationCode); bool isSys_HasCatogryForRgvStattion = MyExtendHelper.IsSys_HasCatogryForRgvStattion(context, stationCode, ref store); bool isExistOtherTaskDoing = PartTaskHandler.IsExistOtherTaskDoing(stationCode); if (isSys_HasCatogryForRgvStattion) { SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = $"{rgvLocation.ToString()}-系统有库存,此次循环结束"; continue; } if (isExistOtherTaskDoing) { SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = $"{rgvLocation.ToString()}-有任务占用该站点,此次循环结束"; continue; } if (!isGD_HasCatogryForRgvStattion) { SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = $"{rgvLocation.ToString()}-光电显示无货,此次循环结束"; continue; } SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = $"{rgvLocation.ToString()}-光电有货"; //需要读取 发动机扫描枪的信息 var _scan_CargoNo = FormCC.rgvView.R_1019_CargoNoScan; if (string.IsNullOrEmpty(_scan_CargoNo)) { SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = $"读取的{rgvLocation.ToString()}位置,发动机码为空,不允许自动组盘"; continue; } _scan_CargoNo = _scan_CargoNo.Trim();//注意:需要回车换行,修复有回车换行符的问题【Editby shaocx,2023-11-27】 //验证该发动机库存已存在,要在WMS中处理 //var isSys_HasCatogryForCargoNo = StoreHandler.IsSys_HasCatogryForCargoNo(context, _scan_CargoNo, ref store); //if (isSys_HasCatogryForCargoNo) //{ // SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = $"读取的{rgvLocation.ToString()}位置,发动机码为{_scan_CargoNo},该发动机库存已存在,在立库库位{store.SrmStationCode},在RGV库位{store.RgvStationCode},不允许自动组盘"; // continue; //} //需要读取 托盘号 var _scan_salverCode = FormCC.rgvView.R_1019_Scan; if (string.IsNullOrEmpty(_scan_salverCode)) { SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = $"读取的{rgvLocation.ToString()}位置,托盘码为空,不允许自动组盘"; continue; } var isSys_HasCatogryForSalverCode = StoreHandler.IsSys_HasCatogryForSalverCode(context, _scan_salverCode, ref store); if (isSys_HasCatogryForSalverCode) { SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = $"读取的{rgvLocation.ToString()}位置,托盘码为{_scan_salverCode},该托盘库存已存在,在立库库位{store.SrmStationCode},在RGV库位{store.RgvStationCode},不允许自动组盘"; continue; } var isExistOtherTaskDoingForSalverCode = PartTaskHandler.IsExistOtherTaskDoingForSalverCode(stationCode); if (isExistOtherTaskDoingForSalverCode) { SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = $"读取的{rgvLocation.ToString()}位置,托盘码为{_scan_salverCode},该托盘已经有未结束的任务被占用,不允许自动组盘"; continue; } //符合条件,即将进行自动组盘 alertMsg = $"读取的{rgvLocation.ToString()}位置,发动机码为{_scan_CargoNo},托盘码为{_scan_salverCode},符合条件,即将进行自动组盘"; SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = alertMsg; Log4NetHelper.WriteInfoLog(LogType.AutoSalverMaterialBindTask, alertMsg); try { //首先调用本体机接收API var btjResult = WmsRequestHelper.test_btjReceive(_scan_CargoNo); MessageModel v_btjResult = JsonConvert.DeserializeObject>(btjResult); if (v_btjResult.success == false) { alertMsg = $"读取的{rgvLocation.ToString()}位置,发动机码为{_scan_CargoNo},托盘码为{_scan_salverCode},本体机接收API 请求失败:WMS返回消息为->{v_btjResult.msg}"; SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = alertMsg; Log4NetHelper.WriteInfoLog(LogType.AutoSalverMaterialBindTask, alertMsg); Log4NetHelper.WriteErrorLog(LogType.AutoSalverMaterialBindTask, alertMsg, null); continue; } else { alertMsg = $"读取的{rgvLocation.ToString()}位置,发动机码为{_scan_CargoNo},托盘码为{_scan_salverCode},本体机接收API 请求成功:WMS返回消息为->{v_btjResult.msg}"; SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = alertMsg; Log4NetHelper.WriteInfoLog(LogType.AutoSalverMaterialBindTask, alertMsg); } //调用API AddMainTaskPostParam param = new AddMainTaskPostParam() { InStoreNo = ((int)rgvLocation).ToString(), CargoNo = _scan_CargoNo, SalverCode = _scan_salverCode, }; MessageModel ret = WmsRequestHelper.SalverMaterialBind(param); if (ret.success) { alertMsg = $"读取的{rgvLocation.ToString()}位置,发动机码为{_scan_CargoNo},托盘码为{_scan_salverCode},自动组盘请求WMSAPI成功!"; SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = alertMsg; Log4NetHelper.WriteInfoLog(LogType.AutoSalverMaterialBindTask, alertMsg); } else { alertMsg = $"读取的{rgvLocation.ToString()}位置,发动机码为{_scan_CargoNo},托盘码为{_scan_salverCode},自动组盘请求WMSAPI失败:WMS返回消息为->{ret.msg}"; SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = alertMsg; Log4NetHelper.WriteInfoLog(LogType.AutoSalverMaterialBindTask, alertMsg); Log4NetHelper.WriteErrorLog(LogType.AutoSalverMaterialBindTask, alertMsg, null); } } catch (Exception ex) { alertMsg = $"读取的{rgvLocation.ToString()}位置,发动机码为{_scan_CargoNo},托盘码为{_scan_salverCode},自动组盘请求WMSAPI失败:出现异常->{ex.Message}"; SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask = alertMsg; Log4NetHelper.WriteInfoLog(LogType.AutoSalverMaterialBindTask, alertMsg); Log4NetHelper.WriteErrorLog(LogType.AutoSalverMaterialBindTask, alertMsg, ex); } } } } catch (Exception ex) { SystemWarningMsg._lbl_alert_AutoSalverMaterialBindTask += "自动组盘 出现异常:" + ex.Message + SysGloble.SPLIT_STR; Log4NetHelper.WriteErrorLog(LogType.AutoSalverMaterialBindTask, "AutoSalverMaterialBindTask 出现异常:" + ex.Message, ex); } } } } }