using Admin.NET.Application; using iWareCC.Common.Helper; using iWareCC.StationService; using iWareCommon.Common.Globle; using iWareCommon.Utils; using iWareModel; using iWareSql.DataAccess; using iWareSql.DBModel; using iWareSql.WmsDBModel; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Remoting.Messaging; using System.ServiceModel.Configuration; using System.Text; using System.Threading; using System.Threading.Tasks; using WZ.Useful.Commons; using XiGang.Core.Model; namespace iWareCC.ThreadService { /// /// BZ30齐套验证 /// public static class DataProcess_ValidateQiTao { public static async void Handler() { var alertMsg = ""; LogType logType = LogType.DataProcess_ValidateQiTao; while (true) { Thread.Sleep(2000);//休眠2秒,将休眠写到前面,是为了下面的continue方法执行后不显示错误信息的提示!!!【EditBy shaocx,2022-05-24】 SystemWarningMsg._lbl_Alert_DataProcess_ValidateQiTao = string.Empty; try { if (SystemValue.isAllowRuning_DataProcess_ValidateQiTao && SystemValue.isStartedModel) { var rgvLocation = StationLocationEnum.BZ30.ToString(); using (WmsDBModel wmsDB = new WmsDBModel()) { var bz30Config = wmsDB.SysConfig.Where(x => x.Code == "wms_bz30_qitao").FirstOrDefault(); if (bz30Config == null) { SystemWarningMsg._lbl_Alert_DataProcess_ValidateQiTao = $"没有配置 wms_bz30_qitao 值"; continue; } var configValue = bz30Config.Value; if (string.IsNullOrEmpty(configValue) || configValue.IndexOf('|') <= -1) { SystemWarningMsg._lbl_Alert_DataProcess_ValidateQiTao = $"配置 wms_bz30_qitao 值{configValue}为空或不正确"; continue; } var configValues = configValue.Split('|'); var packageCode = configValues[0]; var qitaoValue = configValues[1];//齐套 不齐套 var _UnlinePerson = configValues[2]; bool iscomplete = false; if (qitaoValue.Equals("齐套")) { iscomplete = true; } //TODO:推送给PLC 去哪个方向? using (StationServiceClient client = new StationServiceClient()) { var res = client.WriteQiTaoInfo((int)EDevice.Station, rgvLocation, iscomplete); if (!res.result) { SystemWarningMsg._lbl_Alert_DataProcess_ValidateQiTao = $"{rgvLocation.ToString()}-推送给PLC是否齐套失败,ChangeModeAsync 返回:{res.resMsg}"; continue; } else { Log4NetHelper.WriteInfoLog(logType, $"{rgvLocation.ToString()}-推送给PLC是否齐套 成功,ChangeModeAsync,参数: 站点{rgvLocation}"); } } // //更新值 bz30Config.Value = ""; var package = wmsDB.mes_package_gather.Where(x => x.PackageCode == packageCode).FirstOrDefault(); if (package != null) { package.UpiStatus = (int)UpiStatusEnum.已下线; package.AreaCode = (int)AreaCodeEnum.下线区域; } var upiList = wmsDB.mes_batchOrderUPI_new.Where(x => x.PackageCode == packageCode).ToList(); foreach (var item in upiList) { item.UpiStatus = (int)UpiStatusEnum.已下线; item.AreaCode = (int)AreaCodeEnum.下线区域; item.UpdateTime = DateTime.Now; } //删除队列信息 var lineQueue = wmsDB.mes_package_linequeue.Where(x => x.PackageCode == packageCode).FirstOrDefault(); if (lineQueue != null) { wmsDB.mes_package_linequeue.Remove(lineQueue); } //处理表 mes_order_gather var errmsg = ""; var result = HandlerOrderGather(wmsDB, package, qitaoValue, _UnlinePerson, out errmsg); if (result == false) { SystemWarningMsg._lbl_Alert_DataProcess_ValidateQiTao = errmsg; continue; } //新增下线记录 mes_package_unline_record record = new mes_package_unline_record(); record = ClassHelper.RotationMapping(package); record.Id = Yitter.IdGenerator.YitIdHelper.NextId(); record.CreateTime = DateTime.Now; record.UpdateTime = DateTime.Now; record.OpRemark = "下线"; wmsDB.mes_package_unline_record.Add(record); wmsDB.SaveChanges(); } } } catch (Exception ex) { SystemWarningMsg._lbl_Alert_DataProcess_ValidateQiTao += " 出现异常:" + ex.Message + SysGloble.SPLIT_STR; Log4NetHelper.WriteErrorLog(logType, " 出现异常:" + ex.Message, ex); } } } /// /// 处理 表 mes_order_gather /// /// /// /// /// /// /// public static bool HandlerOrderGather(WmsDBModel wmsDB, mes_package_gather package, string qitaoValue, string _UnlinePerson, out string errMsg) { errMsg = ""; //处理表 mes_order_gather var isAddOrder = false; var packageList = wmsDB.mes_package_gather.Where(x => x.Info5 == package.Info5).ToList(); if (packageList == null || packageList?.Count == 0) { errMsg = $"没有找到生产单号{package.Info5}的汇总数据"; return false; } var order = wmsDB.mes_order_gather.Where(x => x.Info5 == package.Info5).FirstOrDefault(); if (order != null) { } else { order = new mes_order_gather() { Id = Yitter.IdGenerator.YitIdHelper.NextId(), Info5 = package.Info5, OrderId = package.OrderId, PlanNo = package.PlanNo, }; isAddOrder = true; } order.PackageNum = packageList.Count(); order.UnLinePackageNum = packageList.Where(x => x.UpiStatus == (int)UpiStatusEnum.已下线).Count(); order.NoUnLinePackageNum = order.PackageNum - order.UnLinePackageNum; order.AllPackageArea = packageList.Sum(x => Convert.ToDecimal(x.Info13)); order.ScanPackageArea = packageList.Where(x => x.UpiStatus == (int)UpiStatusEnum.已下线).Sum(x => Convert.ToDecimal(x.Info13)); order.NoScanPackageArea = order.AllPackageArea - order.ScanPackageArea; order.IsKitting = qitaoValue == "齐套" ? true : false; var order_unLine = false; //查询下一个包是不是属于该订单 var newLineQueue = wmsDB.mes_package_linequeue.OrderBy(x => x.Id).FirstOrDefault(); if (newLineQueue != null && newLineQueue.Info5 != order.Info5) { //表示是 切换 新订单了,该订单要更新为 已下线。 order_unLine = true; } else { //判断该订单是否已下线 if (order.PackageNum == order.UnLinePackageNum) { order_unLine = true; } } //判断该订单是否已下线 if (order_unLine) { order.IsUnline = true; order.UnlineTime = DateTime.Now; order.UnlinePerson = _UnlinePerson; } else { order.IsUnline = false; } if (isAddOrder) { wmsDB.mes_order_gather.Add(order); } return true; } } }