using AUCMA.STORE.Business; using AUCMA.STORE.Business.Implements; using AUCMA.STORE.Business.Interface; using AUCMA.STORE.Common; using AUCMA.STORE.Entity.DAO; using AUCMA.STORE.Entity.DTO; using AUCMA.STORE.Entity.Enums; using AUCMA.STORE.NetWork; using AUCMA.STORE.SqlSugar; using AUCMA.STORE.SqlSugar.serviceImpl; using AUCMA.STORE.WebAPI.Controllers; using AutoMapper; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace AUCMA.STORE { public partial class InStoreForm : Form { public delegate void MyInvoke(BaseMaterialDTO baseMaterialDTO); public delegate void PlcInvok(PLCAddressTypeDTO[] pLCAddressTypeDTO); public delegate void PilerAlarmInvok(PLCAlarmInfoDTO[] pLCAlarmInfoDTOs, string pilerName); public delegate void BarCodeIncok(string BarCode); private static IInStoreBusiness inStoreBusiness = new InStoreBusinessImpl(); private static IOutStoreBusiness outStoreBusiness = new OutStoreBusinessImpl(); private static IPlcBusinessService plcBusiness = new PlcBusinessService(); private static TaskHandleBusiness taskHandleBusiness = TaskHandleBusiness.GetInstance(); private static BaseLocationInfo inStoreLocationInfo = new BaseLocationInfo(); private static IBaseServices realStoreMaterialInfo = new BaseServices(); private static string boxCode = ""; private static int taskCount = 0; private static List webApiList = new List(); public static List inStoreTaskList = new List(); public static List outStoreTaskList = new List(); public static bool stop1_Flag = false; public static bool stop2_Flag = false; private static IBaseTaskQueueBusiness baseTaskQueueBusiness = new BaseTaskQueueBusiness(); #region Add by CaesarBao 19点30分 public delegate void SignalReadInvoke(int status,int type); public bool iFlag = false; public static string m_StoreCode = ConfigHelper.GetConfig("storeCode"); private string PosionCode = ""; #endregion //1.声明自适应类实例 AutoSizeFormClass asc = new AutoSizeFormClass(); public InStoreForm() { InitializeComponent(); //string ss = "012345678"; //int iii = Convert.ToInt32(ss.Substring(ss.Length-7, 7)); if (!HslControls.Authorization.SetAuthorizationCode("ce5ade06-6f14-4b0d-b9c2-0d625664dc3f")) { return; } //hslMoveText3.Text = DateTime.Now.ToString("HH:mm:ss") + " 箱体码:" + "B920348920384902839" + "未匹配到当前所需物料!"; //this.SizeChanged += new Resize(this).Form1_Resize; //窗口自适应代码 LoadPosionCode(); NetWorkServer.init(); plcBusiness.LoadDeviceInfo(); NetWorkServer.BaseMaterialInfoRefreshEvent += MaterialRefreshInfo; plcBusiness.RecvIdentifyRGVDataEvent += RecvIdentifyRGVDataEvent; plcBusiness.RecvIdentifyPilerDataEvent += RecvIdentifyPilerDataEvent; plcBusiness.RecvIdentifyPilerAlarmEvent += PilerAlarmEvent; plcBusiness.RecvIdentifyBarCodeEvent += RecvIdentifyBarCodeEvent; plcBusiness.SignalReadRefreshEvent += SignalReadInfo; taskHandleBusiness.TaskInfoRefreshEvent += RefreshTaskInfostate; } /// /// 加载工位编号 /// private void LoadPosionCode() { //北线 if (m_StoreCode == "A") { PosionCode = "1014"; } else { PosionCode = "1015"; } } private void initTaskQueue() { Console.WriteLine("启动初始化队列任务"); List info = baseTaskQueueBusiness.GetTaskQueueList().Result; info.ForEach(x => { if (x.storeCode == ConfigHelper.GetConfig("storeCode")) { LogHelper.record("初始化队列任务" + x.storeCode); TaskDTO task = new TaskDTO(); //task.locationIndex = x.uuid; task.taskCode = x.pilerTaskCode; task.materialType = x.materialCode; task.materialCode = x.materialCode; task.recordTime = x.recordTime; task.plcCode = x.plcCode; task.boxCode = x.boxCode; task.storeCode = x.storeCode; task.taskStatus = x.taskStatus; task.taskType = x.pilerTaskType; task.locationArea = x.locationArea; task.operationType = x.operationType; task.pilerClaimGoodsRows = x.pilerClaimGoodsRows; task.pilerClaimGoodsLine = x.pilerClaimGoodsLine; task.pilerClaimGoodsTier = x.pilerClaimGoodsTier; task.pilerUnloadRows = x.pilerUnloadRows; task.pilerUnloadLine = x.pilerUnloadLine; task.pilerUnloadTier = x.pilerUnloadTier; if (x.pilerTaskType == TaskType.InStore) { task.locationCode = x.pilerUnloadRows + "-" + x.pilerUnloadLine + "-" + x.pilerUnloadTier; inStoreTaskList.Add(task); } else { task.locationCode = x.pilerClaimGoodsRows + "-" + x.pilerClaimGoodsLine + "-" + x.pilerClaimGoodsTier; outStoreTaskList.Add(task); } Fresh_TaskInfo_dgv(task); } }); } /// /// 入库接口数据 /// /// private void MaterialRefreshInfo(BaseMaterialDTO baseMaterialDTO) { if (baseMaterialDTO == null) return; MyInvoke mi = new MyInvoke(InStore); this.Invoke(mi, baseMaterialDTO); } /// /// 入库操作 /// /// private async void InStore(BaseMaterialDTO baseMaterialDTO) { try { if (baseMaterialDTO != null) { Console.WriteLine("物料信息:" + JsonChange.ModeToJson(baseMaterialDTO)); LogHelper.record(string.Format("收到手持上传的物料信息:类型编码:{0};类型名称:{1};位置:{2}", baseMaterialDTO.materialCode, baseMaterialDTO.materialName, baseMaterialDTO.InStoreArea)); //webApiBaseMaterialInfo = baseMaterialDTO; //保存物料信息 int savaMaterialInfo = await inStoreBusiness.SaveMaterialInfo(baseMaterialDTO); //修改手动入库所需实时表数据,如果有数据更新,没有添加 Expression> exp = s1 => true; exp = exp.And(s1 => s1.storeCode == ConfigHelper.GetConfig("storeCode") && s1.locationArea == baseMaterialDTO.InStoreArea); List realStoreAreaMaterialTypeInfos = await realStoreMaterialInfo.Query(exp); if (realStoreAreaMaterialTypeInfos.Count() > 0) { RealStoreAreaMaterialTypeInfo realStoreAreaMaterial = realStoreAreaMaterialTypeInfos.FirstOrDefault(); realStoreAreaMaterial.detialMaterialCode = baseMaterialDTO.materialCode.Length == 0 ? baseMaterialDTO.materialType : baseMaterialDTO.materialCode; realStoreAreaMaterial.detialMaterialName = baseMaterialDTO.materialName; realStoreAreaMaterial.recordTime = DateTime.Now; await realStoreMaterialInfo.Update(realStoreAreaMaterial); } else { await realStoreMaterialInfo.Add(new RealStoreAreaMaterialTypeInfo(ConfigHelper.GetConfig("storeCode"), baseMaterialDTO.InStoreArea, baseMaterialDTO.materialCode.Length == 0 ? baseMaterialDTO.materialType : baseMaterialDTO.materialCode, baseMaterialDTO.materialName, DateTime.Now)); } var webApiCount = webApiList.Where(x => x.InStoreArea == baseMaterialDTO.InStoreArea).ToList(); if (webApiCount.Count() > 0) { LogHelper.record("获取到相同条码:" + webApiCount); for (int i = 0; i < webApiCount.Count(); i++) { LogHelper.record("清除相同条码:" + webApiCount[i].materialCode); webApiList.Remove(webApiCount[i]); } } webApiList.Add(baseMaterialDTO); LogHelper.record("手持条码数量:" + webApiList.Count()+";内容:"+JsonChange.ModeToJson(webApiList)); } }catch(Exception ex) { LogHelper.Error("接口处理方法异常", ex); } } /// /// 报警委托实现 /// /// /// private void PilerAlarmEvent(Object[] pLCAlarmInfoDTOs, string pilerName) { try { if (pLCAlarmInfoDTOs.Length == 0) return; if (pilerName == null) return; PilerAlarmInvok mi = new PilerAlarmInvok(PilerAlarmSingal); this.Invoke(mi, pLCAlarmInfoDTOs, pilerName); }catch(Exception ex) { Console.WriteLine(ex); } } /// /// 报警处理 /// /// /// private void PilerAlarmSingal(PLCAlarmInfoDTO[] pLCAlarmInfoDTOs, string pilerName) { try { ReFresh_PilerWarnInfo_dgv(pLCAlarmInfoDTOs, pilerName); } catch (Exception ex) { Console.WriteLine(ex.Message); } } /// /// RGV入库信号处理 /// /// private void RecvIdentifyRGVDataEvent(Object[] pLCAddressTypeDTO) { if (pLCAddressTypeDTO.Length == 0) return; PlcInvok plcInvok = new PlcInvok(RecvIdentifyRGVData); this.Invoke(plcInvok, pLCAddressTypeDTO); } /// /// 收到箱体码 /// /// private void RecvIdentifyBarCodeEvent(string BarCode) { if (BackColor == null) return; BarCodeIncok barCodeIncok = new BarCodeIncok(RecvIdentifyBarCode); this.Invoke(barCodeIncok, BarCode); } /// /// 堆垛机状态信号处理 /// /// private void RecvIdentifyPilerDataEvent(Object[] pLCAddressTypeDTO) { if (pLCAddressTypeDTO.Length == 0) return; PlcInvok plcInvok = new PlcInvok(RecvIdentifyPilerData); this.Invoke(plcInvok, pLCAddressTypeDTO); } /// /// RGV入库信号处理 /// /// private async void RecvIdentifyRGVData(PLCAddressTypeDTO[] pLcAddressTypeDTO) { try { //自动模式运行 //if (!iFlag) //{ //List materialInfo = webApiList.Where(x => x.InStoreArea == (LocationArea)pLcAddressTypeDTO[Convert.ToInt32(x.InStoreArea) - 1].Area).ToList(); for (int i = 0; i < pLcAddressTypeDTO.Length; i++) { if (pLcAddressTypeDTO[i].PLCValue == "1") { LogHelper.record("PLC入库信号:" + pLcAddressTypeDTO[i].PLCName + ";数据:" + pLcAddressTypeDTO[i].PLCValue+";区域:"+ pLcAddressTypeDTO[i].Area); List materialInfo = webApiList.Where(x => x.InStoreArea == (LocationArea)pLcAddressTypeDTO[i].Area).ToList(); if (materialInfo.Count() == 0 && materialInfo == null) { LogHelper.record("没有对应入库信号的条码信息,请手动入库!!!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); return; } BaseMaterialDTO baseMaterialInfo = materialInfo.FirstOrDefault(); LogHelper.record("该入库信号对应物料条码信息:" + JsonChange.ModeToJson(baseMaterialInfo)); TaskDTO inStoreTask = await ReceiveInStoreSignal(baseMaterialInfo); if (inStoreTask.taskCode == null) { LogHelper.record("入库任务创建异常--" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); return; } /*Mapper.Initialize(cret => cret.CreateMap()); PlcDirectiveDTO plcDirectiveDTO = Mapper.Map(inStoreTask); plcDirectiveDTO.plcCode = (ushort)Convert.ToInt16(inStoreTask.pilerCode); int key = Convert.ToInt32(DateTime.Now.ToString("MMddHHmmss"));*/ if (baseTaskQueueBusiness.WriteTaskQueue(inStoreTask).Result > 0) { LogHelper.record("入库任务写入成功:" + JsonChange.ModeToJson(inStoreTask)); //创建待入库记录 int createPrepareInStoreResult = await inStoreBusiness.CreatePrepareInStore(inStoreTask); inStoreTask.taskStatus = Entity.Enums.TaskStatus.Await; ReFresh_TaskInfo_dgv(inStoreTask); inStoreTaskList.Add(inStoreTask); } } } //} //else //{ // LogHelper.record("收到入库信号,入库方式为手动入库!!!!"); //} }catch(Exception ex) { LogHelper.Error("入库信号处理方法RecvIdentifyRGVData异常", ex); } } /// /// 收到箱体码 /// /// private async void RecvIdentifyBarCode(string BarCode) { try { LogHelper.record("收到箱体码:" + BarCode ); if (BarCode == null || BarCode == "0") return; //if (iFlag == true) // return; //将背板码插入MES箱体码记录表 if (!outStoreBusiness.SaveBarCode(BarCode, PosionCode)) { LogHelper.record( "箱体码:" +BarCode + "记录IMOS_UP_PROD_EXEC2失败!"); } BaseMaterialInfo baseMaterial = await outStoreBusiness.GetMaterialInfo(BarCode); if(baseMaterial.materialCode == null) { label19.Text = ""; label19.Text = DateTime.Now.ToString("HH:mm:ss") + " 箱体码:" + BarCode + ",未在MES系统查询到BOM!"; hslMoveText3.Text = DateTime.Now.ToString("HH:mm:ss") + " 箱体码:"+ BarCode + ",未在MES系统查询到BOM!"; LogHelper.record("收到箱体码:" + BarCode + ",未在MES系统查询到该条码的BOM信息!!!!"); return; } //判断物料所在库位 List baseLocationInfos = await outStoreBusiness.EstimateMaterialLocation(baseMaterial); if (baseLocationInfos == null || baseLocationInfos.Count() == 0) { label19.Text = ""; label19.Text = DateTime.Now.ToString("HH:mm:ss") + " 箱体码:" + BarCode + ",物料编码:" + baseMaterial.materialCode + ",未匹配到物料!"; hslMoveText3.Text = DateTime.Now.ToString("HH:mm:ss") + " 箱体码:" + BarCode + ",物料编码:" + baseMaterial.materialCode + ",未匹配到物料!"; LogHelper.record("收到箱体码:" + BarCode + "未匹配到当前所需物料!!!!"); return; } BaseLocationInfo outStoreLocationInfo = outStoreBusiness.FiltrateBestlocation(baseLocationInfos); LogHelper.record("筛选出物料所在库位,出库最佳库位为:" + outStoreLocationInfo.locationCode+"不指定该库位,下发时再判断库位"); if (outStoreLocationInfo.locationCode == null) return; TaskDTO outStoreTask = await outStoreBusiness.CreateTask(outStoreLocationInfo, baseMaterial,OperationType.Automatic); if (outStoreTask.taskCode == null) { LogHelper.record("出库任务创建异常!!!"); return; } outStoreTask.boxCode = BarCode; outStoreTaskList.Add(outStoreTask); Fresh_TaskInfo_dgv(outStoreTask); Expression> exp = s1 => true; exp = exp.And(s1 => s1.plcArea == outStoreLocationInfo.locationArea && s1.storeCode == ConfigHelper.GetConfig("storeCode") && s1.deleteFlag == DeleteFlag.No); List basePlcInfos = await new BaseServices().Query(exp); //outStoreTask.plcCode = basePlcInfos.FirstOrDefault().plcCode; if (baseTaskQueueBusiness.WriteTaskQueue(outStoreTask).Result > 0) { //bool occupyLocation = await outStoreBusiness.updateLocationStatus(outStoreTask, LocationStatus.Occupy); LogHelper.record("出库任务写入成功:" + JsonChange.ModeToJson(outStoreTask)); //创建待出库记录 int createPrepareOutStoreResult = await outStoreBusiness.CreatePrepareOutStore(outStoreTask); outStoreTask.taskStatus = Entity.Enums.TaskStatus.Await; ReFresh_TaskInfo_dgv(outStoreTask); } } catch(Exception ex) { LogHelper.Error("RecvIdentifyBarCode方法异常",ex); } } /// /// 堆垛机状态信号处理 /// /// private void RecvIdentifyPilerData(PLCAddressTypeDTO[] pLcAddressTypeDTO) { for (int i = 0; i< pLcAddressTypeDTO.Length;i++) { LogHelper.record("堆垛机:" + pLcAddressTypeDTO[i].PLCName + ";状态:" + pLcAddressTypeDTO[i].PLCValue + ";任务号:" + pLcAddressTypeDTO[i].TaskNo+";任务类型(1-入库;2-出库):"+ pLcAddressTypeDTO[i].TaskType); try { //堆垛机任务完成 if (pLcAddressTypeDTO[i].PLCValue == "2") { LogHelper.record("收到堆垛机状态:完成信号,任务:" + JsonChange.ModeToJson(pLcAddressTypeDTO[i])); //1入库 if (pLcAddressTypeDTO[i].TaskType == 1) { LogHelper.record("收到堆垛机状态:完成,入库任务:" + pLcAddressTypeDTO[i].TaskNo); var inStore = inStoreTaskList.Where(x => x.taskCode == pLcAddressTypeDTO[i].TaskNo).ToList(); LogHelper.record("收到堆垛机状态:完成,入库任务:" + pLcAddressTypeDTO[i].TaskNo + ";执行完成!"); if (pLcAddressTypeDTO[i].TaskNo == "0" || pLcAddressTypeDTO[i].TaskNo == "" || pLcAddressTypeDTO[i].TaskNo.Length < 3) { inStore = inStoreTaskList.Where(x => x.taskStatus == Entity.Enums.TaskStatus.Being).OrderBy(x => x.recordTime).ToList(); } if (inStore.Count() > 0 && inStore != null) { /*for (int j = 0; j < inStore.Count() && inStore[j].taskCode == pLcAddressTypeDTO[i].TaskNo; j++) { if (inStore[j].taskCode == pLcAddressTypeDTO[i].TaskNo) { InStorePilerFinishStatusSignal(inStore[j]); } }*/ InStorePilerFinishStatusSignal(inStore.FirstOrDefault()); } else { LogHelper.record("收到堆垛机状态:完成,入库任务:" + pLcAddressTypeDTO[i].TaskNo + ";获取入库任务信息为空!"); } } //2出库 if (pLcAddressTypeDTO[i].TaskType == 2) { LogHelper.record("收到堆垛机状态:完成,出库任务:" + pLcAddressTypeDTO[i].TaskNo); var outStore = outStoreTaskList.Where(x => x.taskCode == pLcAddressTypeDTO[i].TaskNo).ToList(); LogHelper.record("收到堆垛机状态:完成,出库任务:" + pLcAddressTypeDTO[i].TaskNo + ";执行完成!"); if (pLcAddressTypeDTO[i].TaskNo == "0" || pLcAddressTypeDTO[i].TaskNo == "" || pLcAddressTypeDTO[i].TaskNo.Length < 3) { outStore = outStoreTaskList.Where(x => x.taskStatus == Entity.Enums.TaskStatus.Being).OrderBy(x => x.recordTime).ToList(); } if (outStore.Count() > 0 && outStore != null) { /*for (int j=0;j< outStore.Count();j++) { if (pLcAddressTypeDTO[i].TaskNo == outStore[j].taskCode) { RefreshMessageListBox("收到堆垛机状态:完成,出库任务:" + outStore[j].taskCode + ";执行完成!"); OutStorePilerFinishStatusSignal(outStore[j]); } }*/ OutStorePilerFinishStatusSignal(outStore.FirstOrDefault()); } else { LogHelper.record("收到堆垛机状态:完成,出库任务:" + pLcAddressTypeDTO[i].TaskNo + ";获取出库任务信息为空!"); } } if(pLcAddressTypeDTO[i].TaskType == 0) { if(outStoreTaskList.Any(x=> x.taskCode == pLcAddressTypeDTO[i].TaskNo)) { LogHelper.record("收到堆垛机状态:完成,出库任务:" + pLcAddressTypeDTO[i].TaskNo+"异常完成"); var outStore = outStoreTaskList.Where(x => x.taskCode == pLcAddressTypeDTO[i].TaskNo).ToList(); OutStorePilerFinishStatusSignal(outStore.FirstOrDefault()); }else if(inStoreTaskList.Any(x=>x.taskCode == pLcAddressTypeDTO[i].TaskNo)) { LogHelper.record("收到堆垛机状态:完成,入库任务:" + pLcAddressTypeDTO[i].TaskNo + "异常完成"); var inStore = inStoreTaskList.Where(x => x.taskCode == pLcAddressTypeDTO[i].TaskNo).ToList(); InStorePilerFinishStatusSignal(inStore.FirstOrDefault()); } } } //堆垛机故障 if (pLcAddressTypeDTO[i].PLCValue == "3") { //1入库 if (pLcAddressTypeDTO[i].TaskType == 1) { RefreshMessageListBox("收到堆垛机状态:故障!!!!!,入库任务:" + pLcAddressTypeDTO[i].TaskNo + "!"); ReFresh_TaskInfo_dgv(pLcAddressTypeDTO[i].TaskNo); //InStorePilerWarnStatuSignal(pLcAddressTypeDTO[i].TaskNo); } //2出库 if (pLcAddressTypeDTO[i].TaskType == 2) { RefreshMessageListBox("收到堆垛机状态:故障!!!!!,出库任务:" + pLcAddressTypeDTO[i].TaskNo + "!"); ReFresh_TaskInfo_dgv(pLcAddressTypeDTO[i].TaskNo); //var outStore = outStoreTaskList.Where(x => x.taskCode == pLcAddressTypeDTO[i].TaskNo).ToList(); //if (outStore.Count() > 0 && outStore != null) //{ // for (int j = 0; j < outStore.Count(); j++) // { // if (pLcAddressTypeDTO[i].TaskNo == outStore[j].taskCode) // { // RefreshMessageListBox("收到堆垛机状态:故障!!!!出库任务:" + outStore[j].taskCode + "!"); // OutStorePilerWarnStatuSignal(outStore[j]); // } // } //} } } }catch (Exception ex) { LogHelper.Error($"堆垛机:{pLcAddressTypeDTO[i].PLCName};状态:{pLcAddressTypeDTO[i].PLCValue};任务号:{pLcAddressTypeDTO[i].TaskNo};状态信号处理异常:{ex.Message}", ex); } } } /// /// 创建入库任务 /// /// public async Task ReceiveInStoreSignal(BaseMaterialDTO baseMaterialDTO) { LogHelper.record("系统创建入库任务:"+JsonChange.ModeToJson(baseMaterialDTO)); TaskDTO inStoreTask = new TaskDTO(); try { List locationInfo = await inStoreBusiness.IsOrNotEmptyLocation(baseMaterialDTO); if (locationInfo.Count() > 0) { LogHelper.record("筛选空余库位,剩余:" + locationInfo.Count() + "个空余库位"); //筛选库位 inStoreLocationInfo = inStoreBusiness.FiltrateLocation(locationInfo); if (inStoreLocationInfo != null) { LogHelper.record("最佳入库库位为:" + inStoreLocationInfo.locationCode); //创建入库任务 inStoreTask = await inStoreBusiness.CreateInStoreTask(inStoreLocationInfo, baseMaterialDTO,OperationType.Automatic); if (inStoreTask.taskCode != null) { LogHelper.record("入库任务创建完成,任务号:" + inStoreTask.taskCode + ";物料类别:" + inStoreTask.materialCode + ";库位:" + inStoreTask.locationCode + ";库位区域:" + inStoreTask.locationArea); Fresh_TaskInfo_dgv(inStoreTask); //锁定库位 bool occupyLocation = await inStoreBusiness.updateLocationStatus(LocationStatus.Occupy, inStoreTask); if (occupyLocation) { LogHelper.record("库位锁定成功!"); } } } } else { LogHelper.record("没有空余库位!!!" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } }catch(Exception ex) { LogHelper.Error("创建入库任务方法异常", ex); } return inStoreTask; } /// /// 入库收到堆垛机完成信号 /// /// /// public async void InStorePilerFinishStatusSignal(TaskDTO task) { LogHelper.record("入库收到堆垛机完成信息处理:" + task.taskCode); try { for (int i = 0; i < inStoreTaskList.Count(); i++) { if (inStoreTaskList[i].taskCode == task.taskCode) { task.taskStatus = Entity.Enums.TaskStatus.Achieve; ReFresh_TaskInfo_dgv(task); //更新库位状态 //bool inUseLocation = await inStoreBusiness.updateLocationStatus(LocationStatus.InUse, task); //更新入库任务状态 //bool updateInStoreTask = await inStoreBusiness.UpdateInStoreTaskStatus(task); //更新待入库状态 // bool updatePrePareInstoreStatus = await inStoreBusiness.UpdatePrePareInStoreStatus(task); //创建入库记录 int recordInStore = await inStoreBusiness.SaveInStoreRecord(task); //记录物料与库位绑定记录 await inStoreBusiness.SaveMaterialLocation(task); inStoreTaskList.Remove(inStoreTaskList[i]); } } }catch(Exception ex) { LogHelper.Error("入库收到堆垛机完成信息处理异常"+ ex.ToString()); } } /// /// 出库收到堆垛机完成信号 /// /// /// public async void OutStorePilerFinishStatusSignal(TaskDTO task) { LogHelper.record("出库收到堆垛机完成信息处理:"+task.taskCode+";箱体码:"+task.boxCode); try { for (int i = 0; i < outStoreTaskList.Count(); i++) { if (outStoreTaskList[i].taskCode == task.taskCode) { task.taskStatus = Entity.Enums.TaskStatus.Achieve; ReFresh_TaskInfo_dgv(task); //更新库位状态 //bool inUseLocation = await outStoreBusiness.updateLocationStatus(task, LocationStatus.UnUsed); //更新出库任务状态 //bool updateOutStoreTask = await outStoreBusiness.UpdateOutStoreStatus(task); //更新待出库状态 //bool updatePrePareOutstoreStatus = await outStoreBusiness.UpdatePrePareOutStoreStatus(task); //创建出库记录 int recordOutStore = await outStoreBusiness.SaveOutStoreRecord(task); //清楚物料与库位绑定记录 await outStoreBusiness.DeleteMaterialLocation(task); outStoreTaskList.Remove(outStoreTaskList[i]); } } }catch(Exception ex) { LogHelper.Error("出库收到堆垛机完成信息处理异常"+ ex.ToString()); } } /// /// 入库堆垛机故障处理 /// /// public async void InStorePilerWarnStatuSignal(string taskCode) { for (int i = 0; i < inStoreTaskList.Count(); i++) { if (inStoreTaskList[i].taskCode == taskCode) { inStoreTaskList[i].taskStatus = Entity.Enums.TaskStatus.Warning; ReFresh_TaskInfo_dgv(inStoreTaskList[i]); //更新入库任务状态 await inStoreBusiness.UpdateInStoreTaskStatus(inStoreTaskList[i]); } } } /// /// 出库堆垛机故障处理 /// /// public async void OutStorePilerWarnStatuSignal(TaskDTO task) { task.taskStatus = Entity.Enums.TaskStatus.Warning; ReFresh_TaskInfo_dgv(task); //更新出库任务状态 bool updateInStoreTask = await inStoreBusiness.UpdateInStoreTaskStatus(task); } public void RefreshMessageListBox(string strMessage) { //LogHelper.Info(strMessage); Console.Write(DateTime.Now.ToString("[yyyy-MM-dd HH:mm:ss]") + "-" + strMessage + "\r\n"); } private void SignalReadInfo(int status,int type) { SignalReadInvoke SignalReadInvoke = new SignalReadInvoke(SignalRead_Invoke); this.Invoke(SignalReadInvoke, status,type); } private void SignalRead_Invoke(int status,int type) { //机械手状态 if (type == 0) { switch (status) { case 0: pictureBox6.Image = Image.FromFile("Resources\\Red.png"); break; default: pictureBox6.Image = Image.FromFile("Resources\\Green.png"); break; } } //1#堆垛机状态 else if (type == 1) { switch (status) { case 0: pictureBox3.Image = Image.FromFile("Resources\\Red.png"); break; default: pictureBox3.Image = Image.FromFile("Resources\\Green.png"); break; } } //2#堆垛机状态 else if (type == 2) { switch (status) { case 0: pictureBox2.Image = Image.FromFile("Resources\\Red.png"); break; default: pictureBox2.Image = Image.FromFile("Resources\\Green.png"); break; } } //RGV状态 else if (type == 3) { switch (status) { case 0: pictureBox1.Image = Image.FromFile("Resources\\Red.png"); break; default: pictureBox1.Image = Image.FromFile("Resources\\Green.png"); break; } } //1#门体出库口状态 else if(type == 4) { switch (status) { case 0: pictureBox7.Image = Image.FromFile("Resources\\Red.png"); break; default: pictureBox7.Image = Image.FromFile("Resources\\Green.png"); break; } } //2#门体库出口状态 else if (type == 5) { switch (status) { case 0: pictureBox8.Image = Image.FromFile("Resources\\Red.png"); break; default: pictureBox8.Image = Image.FromFile("Resources\\Green.png"); break; } } //1#门体入库口状态 else if (type == 6) { switch (status) { case 0: pictureBox9.Image = Image.FromFile("Resources\\Red.png"); break; default: pictureBox9.Image = Image.FromFile("Resources\\Green.png"); break; } } //2#门体库入口状态 else if (type == 7) { switch (status) { case 0: pictureBox10.Image = Image.FromFile("Resources\\Red.png"); break; default: pictureBox10.Image = Image.FromFile("Resources\\Green.png"); break; } } //准备就绪 //else if (type == 8) //{ //} //else if (type == 9) //{ //} } private void InStoreForm_Load(object sender, EventArgs e) { this.FormBorderStyle = FormBorderStyle.None; //设置窗体为无边框样式 this.WindowState = FormWindowState.Maximized; //最大化窗体 this.Focus(); asc.controllInitializeSize(this); timer1.Interval = 1000; timer1.Start(); initTaskQueue(); } private void InStoreForm_SizeChanged(object sender, EventArgs e) { asc.controlAutoSize(this); } private void timer1_Tick(object sender, EventArgs e) { this.label5.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); var leftinfo = SearchStoreCountAsync(LocationArea.Location_Left); var rightinfo = SearchStoreCountAsync(LocationArea.Location_Right); label12.Text = leftinfo.Result.ToString(); label13.Text = rightinfo.Result.ToString(); } /// /// 获取堆垛机当前急停状态 /// private void CheckPLCStopState() { try { stop1_Flag = true; string img = AppDomain.CurrentDomain.BaseDirectory + "\\Resources\\恢复.png"; btn_Stop_1.BackgroundImage = Image.FromFile(img); } catch (Exception ex) { } } private void btn_Instore_1_Click(object sender, EventArgs e) { InStore form = new InStore(); form.Text = "1#手动入库"; form.PilerInfo = "1"; form.TaskType = TaskType.InStore; form.inStoreForm = this; form.ShowDialog(this); } private void button10_Click(object sender, EventArgs e) { //TaskDTO taskDTO = new TaskDTO(); //Random random = new Random(); //int x = random.Next(1000000, 9999999); //taskDTO.taskCode = x.ToString(); //taskDTO.taskStatus = Entity.Enums.TaskStatus.Warning; //taskDTO.taskType = TaskType.OutStore; //taskDTO.storeCode = "A"; //taskDTO.materialType = "12315893248"; //taskDTO.locationArea = LocationArea.Location_Left; //taskDTO.locationCode = "1-5-11"; //taskDTO.recordTime = DateTime.Now; //Fresh_TaskInfo_dgv(taskDTO); //outStoreTaskList.Add(taskDTO); //PLCAlarmInfoDTO[] pLCAlarmInfoDTOs = new PLCAlarmInfoDTO[2]; //pLCAlarmInfoDTOs[0] = new PLCAlarmInfoDTO("满叉", "1"); //pLCAlarmInfoDTOs[0].DateTime = DateTime.Now; //pLCAlarmInfoDTOs[1] = new PLCAlarmInfoDTO("取货时货架无货", "2"); //pLCAlarmInfoDTOs[1].DateTime = DateTime.Now; //ReFresh_PilerWarnInfo_dgv(pLCAlarmInfoDTOs, "1#堆垛机"); if (MessageBox.Show("请您确认是否退出(Y/N)", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { try { InStoreForm_FormClosed(null, null); } catch (System.Exception error) { //WinIO卸载失败异常 MessageBox.Show(error.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } else { return; } } private void button8_Click(object sender, EventArgs e) { InStore form = new InStore(); form.Text = "2#手动入库"; form.PilerInfo = "2"; form.TaskType = TaskType.InStore; form.inStoreForm = this; //iFlag = true; form.ShowDialog(this); } private void button7_Click(object sender, EventArgs e) { OutStore form = new OutStore(); //InStore form = new InStore(); form.Text = "2#手动出库"; form.PilerInfo = "2"; form.TaskType = TaskType.OutStore; form.inStoreForm = this; //iFlag = true; form.ShowDialog(this); } private void button2_Click(object sender, EventArgs e) { OutStore form = new OutStore(); //InStore form = new InStore(); form.Text = "1#手动出库"; form.PilerInfo = "1"; form.TaskType = TaskType.OutStore; form.inStoreForm = this; iFlag = true; form.ShowDialog(this); } /// /// 急停按钮改为清除任务按钮 /// /// /// private async void btn_Stop_1_Click(object sender, EventArgs e) { Expression> exp1 = s1 => true; exp1 = exp1.And(s1 => s1.plcArea == LocationArea.Location_Left && s1.storeCode == ConfigHelper.GetConfig("storeCode") && s1.deleteFlag == DeleteFlag.No); ; List basePlcInfos = await new BaseServices().Query(exp1); if (!stop1_Flag) { plcBusiness.WritePilerStop(basePlcInfos.FirstOrDefault().plcCode, "1"); stop1_Flag = true; string img = AppDomain.CurrentDomain.BaseDirectory + "\\Resources\\恢复.png"; btn_Stop_1.BackgroundImage = Image.FromFile(img); } else { plcBusiness.WritePilerStop(basePlcInfos.FirstOrDefault().plcCode, "0"); string img = AppDomain.CurrentDomain.BaseDirectory + "\\Resources\\急停.png"; btn_Stop_1.BackgroundImage = Image.FromFile(img); stop1_Flag = false; } } private async void btn_Stop_2_Click(object sender, EventArgs e) { Expression> exp1 = s1 => true; exp1 = exp1.And(s1 => s1.plcArea == LocationArea.Location_Left && s1.storeCode == ConfigHelper.GetConfig("storeCode") && s1.deleteFlag == DeleteFlag.No); ; List basePlcInfos = await new BaseServices().Query(exp1); if (!stop2_Flag) { //if (m_StoreCode == "A") //{ // plcBusiness.WritePilerStop(1003, "1"); //} //else //{ // plcBusiness.WritePilerStop(1007, "1"); //} plcBusiness.WritePilerStop(basePlcInfos.FirstOrDefault().plcCode, "1"); string img = AppDomain.CurrentDomain.BaseDirectory + "\\Resources\\恢复.png"; btn_Stop_2.BackgroundImage = Image.FromFile(img); stop2_Flag = true; } else { //if (m_StoreCode == "A") //{ // plcBusiness.WritePilerStop(1003, "0"); //} //else //{ // plcBusiness.WritePilerStop(1007, "0"); //} plcBusiness.WritePilerStop(basePlcInfos.FirstOrDefault().plcCode, "0"); string img = AppDomain.CurrentDomain.BaseDirectory + "\\Resources\\急停.png"; btn_Stop_2.BackgroundImage = Image.FromFile(img); stop2_Flag = false; } } private void InStoreForm_Activated(object sender, EventArgs e) { dataGridView1.ColumnHeadersHeight = 30; //设置标题行高 this.dataGridView1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.None; dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//单元格标题栏居中显示 dataGridView1.ClearSelection(); //可消除所有选择的行 dataGridView1.CurrentCell = null; //可消除选择行的行头箭头 dataGridView1.AllowUserToAddRows = false; dataGridView1.EnableHeadersVisualStyles = false; dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None; //dataGridView1.Anchor = (AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Left); dataGridView1.AllowUserToDeleteRows = false; dataGridView1.ReadOnly = true; dataGridView1.RowHeadersVisible = false; //禁止用户改变DataGridView1の所有行的行高 dataGridView1.AllowUserToResizeRows = false; // 禁止用户改变列头的高度 dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //设置单元格行背景色 dataGridView1.RowsDefaultCellStyle.BackColor = Color.FromArgb(3, 27, 61); dataGridView2.ColumnHeadersHeight = 30; //设置标题行高 this.dataGridView2.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.None; dataGridView2.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;//单元格标题栏居中显示 dataGridView2.ClearSelection(); //可消除所有选择的行 dataGridView2.CurrentCell = null; //可消除选择行的行头箭头 dataGridView2.AllowUserToAddRows = false; dataGridView2.EnableHeadersVisualStyles = false; dataGridView2.CellBorderStyle = DataGridViewCellBorderStyle.None; //dataGridView1.Anchor = (AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Left); dataGridView2.AllowUserToDeleteRows = false; dataGridView2.ReadOnly = true; dataGridView2.RowHeadersVisible = false; //禁止用户改变DataGridView1の所有行的行高 dataGridView2.AllowUserToResizeRows = false; // 禁止用户改变列头的高度 dataGridView2.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //设置单元格行背景色 dataGridView2.RowsDefaultCellStyle.BackColor = Color.FromArgb(3, 27, 61); } public void ReFresh_PilerWarnInfo_dgv(PLCAlarmInfoDTO[] pLCAlarmInfoDTOs,string pilername) { dataGridView2.Rows.Clear(); foreach (var warninfo in pLCAlarmInfoDTOs) { int index = this.dataGridView2.Rows.Add(); //添加行的索引 this.dataGridView2.Rows[index].Cells[0].Value = pilername; this.dataGridView2.Rows[index].Cells[1].Value = warninfo.PLCName; this.dataGridView2.Rows[index].Cells[2].Value = warninfo.DateTime.ToString("HH:mm:ss"); //字体颜色 this.dataGridView2.Rows[index].DefaultCellStyle.ForeColor = Color.FromArgb(106, 203, 254); } dataGridView2.CurrentCell = null; } #region DataGridView1 public delegate void TaskInfoInvoke(int TaskNo, TaskType taskType); public void RefreshTaskInfostate(int TaskNo,TaskType taskType,LocationArea locationArea,string locationCode) { if (taskType == TaskType.InStore) { var inStore = inStoreTaskList.Where(x => x.taskCode == TaskNo.ToString()).FirstOrDefault(); ReFresh_TaskInfo_dgv(inStore,1); } else { var outStore = outStoreTaskList.Where(x => x.taskCode == TaskNo.ToString()).FirstOrDefault(); if(outStore != null) { outStore.locationArea = locationArea; outStore.locationCode = locationCode; } ReFresh_TaskInfo_dgv(outStore,1); } } public virtual void ReFresh_TaskInfo_dgv(TaskDTO inStoreTask,int state) { try { LogHelper.Pilerlog($"任务:{inStoreTask.taskCode};修改界面展示"); if(dataGridView1 != null) { if (dataGridView1.Rows.Count > 0) { for (int i = 0; i < dataGridView1.Rows.Count; i++) { if (dataGridView1.Rows[i].Cells[0].FormattedValue.ToString() == inStoreTask.taskCode) { if (inStoreTask.locationArea == LocationArea.Location_Left) { dataGridView1.Rows[i].Cells[3].Value = "1#库"; } else { dataGridView1.Rows[i].Cells[3].Value = "2#库"; } dataGridView1.Rows[i].Cells[4].Value = inStoreTask.locationCode; dataGridView1.Rows[i].Cells[5].Value = "执行中"; dataGridView1.Rows[i].Cells[6].Value = inStoreTask.recordTime.ToString("HH:mm:ss"); } } } } else { LogHelper.Pilerlog($"任务:{inStoreTask.taskCode};修改界面展示失败,任务列表为null"); } }catch(Exception ex) { LogHelper.Error($"ReFresh_TaskInfo_dgv异常:{ex.Message}", ex); } } /// /// 将界面任务状态改为异常;并将库位设置锁库 /// /// public async void ReFresh_TaskInfo_dgv(string taskCode) { if (dataGridView1.Rows.Count > 0) { for (int i = 0; i < dataGridView1.Rows.Count; i++) { if (dataGridView1.Rows[i].Cells[0].FormattedValue.ToString() == taskCode) { //字体颜色 dataGridView1.Rows[i].Cells[5].Value = "异常"; dataGridView1.Rows[i].DefaultCellStyle.ForeColor = Color.Red; //bool iflag = await inStoreBusiness.selectLocationStatus(dataGridView1.Rows[i].Cells[3].Value.ToString(), dataGridView1.Rows[i].Cells[4].Value.ToString()); //if(!iflag) //{ // await inStoreBusiness.updateLocationState(dataGridView1.Rows[i].Cells[3].Value.ToString(), dataGridView1.Rows[i].Cells[4].Value.ToString(),LocationStatus.Occupy); //} } } } } public void ReFresh_TaskInfo_dgv(TaskDTO inStoreTask) { if (dataGridView1.Rows.Count > 0) { for (int i = 0; i < dataGridView1.Rows.Count; i++) { if (dataGridView1.Rows[i].Cells[0].FormattedValue.ToString() == inStoreTask.taskCode) { if (inStoreTask.taskStatus == Entity.Enums.TaskStatus.Warning) { //字体颜色 dataGridView1.Rows[i].Cells[5].Value = "异常"; dataGridView1.Rows[i].DefaultCellStyle.ForeColor = Color.Red; } else if (inStoreTask.taskStatus == Entity.Enums.TaskStatus.Being) { dataGridView1.Rows[i].Cells[5].Value = "执行中"; } else if (inStoreTask.taskStatus == Entity.Enums.TaskStatus.Await) { dataGridView1.Rows[i].Cells[5].Value = "等待"; } else if (inStoreTask.taskStatus == Entity.Enums.TaskStatus.Achieve) { dataGridView1.Rows[i].Cells[5].Value = "完成"; } dataGridView1.Rows[i].Cells[6].Value = inStoreTask.recordTime.ToString("HH:mm:ss"); } } } } public void Fresh_TaskInfo_dgv(TaskDTO inStoreTask) { int index = this.dataGridView1.Rows.Add(); //添加行的索引 this.dataGridView1.Rows[index].Cells[0].Value = inStoreTask.taskCode; string operationType = inStoreTask.operationType.ToString() == "Automatic" ? "自动" : "手动"; if (inStoreTask.taskType == TaskType.InStore) { this.dataGridView1.Rows[index].Cells[1].Value = operationType + "入库"; } else { this.dataGridView1.Rows[index].Cells[1].Value = operationType + "出库"; } this.dataGridView1.Rows[index].Cells[2].Value = inStoreTask.materialType; if (inStoreTask.locationArea == LocationArea.Location_Left) { this.dataGridView1.Rows[index].Cells[3].Value = "1#库"; } else { this.dataGridView1.Rows[index].Cells[3].Value = "2#库"; } this.dataGridView1.Rows[index].Cells[4].Value = inStoreTask.locationCode; if (inStoreTask.taskStatus == Entity.Enums.TaskStatus.Await) { this.dataGridView1.Rows[index].Cells[5].Value = "等待"; } else if (inStoreTask.taskStatus == Entity.Enums.TaskStatus.Being) { this.dataGridView1.Rows[index].Cells[5].Value = "执行中"; } else if (inStoreTask.taskStatus == Entity.Enums.TaskStatus.Warning) { this.dataGridView1.Rows[index].Cells[5].Value = "异常"; dataGridView1.Rows[index].DefaultCellStyle.ForeColor = Color.Red; } else if (inStoreTask.taskStatus == Entity.Enums.TaskStatus.Achieve) { this.dataGridView1.Rows[index].Cells[5].Value = "完成"; } this.dataGridView1.Rows[index].Cells[6].Value = inStoreTask.recordTime.ToString("HH:mm:ss"); //字体颜色 this.dataGridView1.Rows[index].DefaultCellStyle.ForeColor = Color.FromArgb(106, 203, 254); dataGridView1.CurrentCell = null; // 按自编号排序 DataGridViewColumn col = dataGridView1.Columns[6]; // 按降序(即始终每次新添加的数据排最前) ListSortDirection direction = ListSortDirection.Descending; dataGridView1.Sort(col, direction); // 执行指定排序规则 } //单击单元格事件 private async void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { try { int rowindex = e.RowIndex; if (dataGridView1.Rows[rowindex].Cells["Column5"].Value.ToString() != "异常") return; else { if (MessageBox.Show("异常结束此任务(Y/N)", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { string taskNo = dataGridView1.Rows[rowindex].Cells["Column0"].Value.ToString(); string taskType = dataGridView1.Rows[rowindex].Cells["Column1"].Value.ToString(); Console.WriteLine("异常结束此" + taskType + "任务,任务号:" + dataGridView1.Rows[rowindex].Cells["Column1"].Value.ToString()); if (taskType.Contains("出库")) { if (MessageBox.Show("该物料是否已经出库(Y/N)", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { //RefreshMessageListBox("收到堆垛机状态:完成,出库任务:" + outStore[j].taskCode + ";执行完成!"); //OutStorePilerFinishStatusSignal(outStore[j]); bool inUseLocation = await inStoreBusiness.updateLocationState(dataGridView1.Rows[rowindex].Cells["Column3"].Value.ToString(), dataGridView1.Rows[rowindex].Cells["Column4"].Value.ToString(), LocationStatus.UnUsed); dataGridView1.Rows[rowindex].Cells["Column5"].Value = "完成"; } else { dataGridView1.Rows[rowindex].Cells["Column5"].Value = "异常结束"; bool inUseLocation = await inStoreBusiness.updateLocationState(dataGridView1.Rows[rowindex].Cells["Column3"].Value.ToString(), dataGridView1.Rows[rowindex].Cells["Column4"].Value.ToString(), LocationStatus.InUse); //outStoreTaskList.Remove(outStore[j]); } dataGridView1.Refresh(); Console.WriteLine("异常任务处理完成!"); //var outStore = outStoreTaskList.Where(x => x.taskCode == taskNo).ToList(); //if (outStore.Count() > 0 && outStore != null) //{ // for (int j = 0; j < outStore.Count(); j++) // { // if (taskNo == outStore[j].taskCode) // { // if (MessageBox.Show("该物料是否已经出库(Y/N)", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) // { // RefreshMessageListBox("收到堆垛机状态:完成,出库任务:" + outStore[j].taskCode + ";执行完成!"); // OutStorePilerFinishStatusSignal(outStore[j]); // dataGridView1.Rows[rowindex].Cells["Column5"].Value = "完成"; // } // else // { // dataGridView1.Rows[rowindex].Cells["Column5"].Value = "异常结束"; // outStoreTaskList.Remove(outStore[j]); // } // dataGridView1.Refresh(); // Console.WriteLine("异常任务处理完成!"); // } // } // //plcBusiness.WriteRGVStop("0"); //} } if (taskType.Contains("入库")) { if (MessageBox.Show("该物料是否已经入库(Y/N)", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { bool inUseLocation = await inStoreBusiness.updateLocationState(dataGridView1.Rows[rowindex].Cells["Column3"].Value.ToString(), dataGridView1.Rows[rowindex].Cells["Column4"].Value.ToString(), LocationStatus.InUse); //RefreshMessageListBox("收到堆垛机状态:完成,入库任务:" + inStore[j].taskCode + ";执行完成!"); //InStorePilerFinishStatusSignal(inStore[j]); dataGridView1.Rows[rowindex].Cells["Column5"].Value = "完成"; } else { bool inUseLocation = await inStoreBusiness.updateLocationState(dataGridView1.Rows[rowindex].Cells["Column3"].Value.ToString(), dataGridView1.Rows[rowindex].Cells["Column4"].Value.ToString(), LocationStatus.UnUsed); dataGridView1.Rows[rowindex].Cells["Column5"].Value = "异常结束"; //bool inUseLocation = await inStoreBusiness.updateLocationStatus(LocationStatus.UnUsed, inStore[j]); //inStoreTaskList.Remove(inStore[j]); } dataGridView1.Refresh(); Console.WriteLine("异常任务处理完成!"); //var inStore = inStoreTaskList.Where(x => x.taskCode == taskNo).ToList(); //RefreshMessageListBox("收到堆垛机状态:完成,入库任务:" + taskNo + ";执行完成!"); //if (inStore.Count() > 0 && inStore != null) //{ // for (int j = 0; j < inStore.Count(); j++) // { // if (inStore[j].taskCode == taskNo) // { // //InStorePilerFinishStatusSignal(inStore[j]); // if (MessageBox.Show("该物料是否已经入库(Y/N)", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) // { // RefreshMessageListBox("收到堆垛机状态:完成,入库任务:" + inStore[j].taskCode + ";执行完成!"); // InStorePilerFinishStatusSignal(inStore[j]); // dataGridView1.Rows[rowindex].Cells["Column5"].Value = "完成"; // } // else // { // dataGridView1.Rows[rowindex].Cells["Column5"].Value = "异常结束"; // bool inUseLocation = await inStoreBusiness.updateLocationStatus(LocationStatus.UnUsed, inStore[j]); // inStoreTaskList.Remove(inStore[j]); // } // dataGridView1.Refresh(); // Console.WriteLine("异常任务处理完成!"); // } // } //} } } } } catch (Exception ex) { Console.WriteLine(ex.Message); throw; } } private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;//设置为整行被选中 //单元格居中显示 e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; } private void dataGridView1_Paint(object sender, PaintEventArgs e) { //e.Graphics.DrawRectangle(Pens.DarkBlue, new Rectangle(0, 0, this.dataGridView1.Width - 1, this.dataGridView1.Height - 1)); } #endregion #region DataGridView2 private void dataGridView2_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawRectangle(Pens.DarkBlue, new Rectangle(0, 0, this.dataGridView2.Width - 1, this.dataGridView2.Height - 1)); } private void dataGridView2_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { this.dataGridView2.SelectionMode = DataGridViewSelectionMode.FullRowSelect;//设置为整行被选中 //单元格居中显示 e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; } #endregion private void InStoreForm_FormClosed(object sender, FormClosedEventArgs e) { this.Dispose(); System.Environment.Exit(System.Environment.ExitCode); this.Close(); } private void pictureBox4_MouseClick(object sender, MouseEventArgs e) { try { //ToolTip ttpSettings = new ToolTip(); toolTip1.InitialDelay = 200; toolTip1.AutoPopDelay = 10 * 1000; toolTip1.ReshowDelay = 200; toolTip1.ShowAlways = true; //toolTip1.IsBalloon = true; toolTip1.BackColor = Color.FromArgb(3, 27, 61); toolTip1.ForeColor = Color.FromArgb(106, 203, 254); string tipOverwrite = "Enable this to allow overwrite an existing file on skydrive while uploading a duplicated file."; toolTip1.SetToolTip(pictureBox4, tipOverwrite); // ckbOverwrite is a checkbox } catch (Exception ex) { } } private void pictureBox4_Click(object sender, EventArgs e) { Chart chart = new Chart(); chart.Text = "1#库存占比明细"; chart.locationArea = LocationArea.Location_Left; chart.ShowDialog(this); } private void pictureBox5_Click(object sender, EventArgs e) { Chart chart = new Chart(); chart.Text = "2#库存占比明细"; chart.locationArea = LocationArea.Location_Right; chart.ShowDialog(this); } /// /// 库存数量查询 /// /// 库位区域 /// private async Task SearchStoreCountAsync(LocationArea locationArea) { Expression> exp = s1 => true; exp = exp.And(s1 => s1.locationArea == locationArea && s1.locationStatus == LocationStatus.InUse && s1.storeCode == m_StoreCode && s1.deleteFlag == DeleteFlag.No); List baseLocationInfos = await new BaseServices().Query(exp); return baseLocationInfos.Count.ToString() == null ? "0" : baseLocationInfos.Count.ToString() + "/"+"156"; } private async void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) { int rowindex = e.RowIndex; if (dataGridView1.Rows[rowindex].Cells["Column5"].Value.ToString() != "等待") return; if (MessageBox.Show("是否强制结束此任务(Y/N)", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { string taskNo = dataGridView1.Rows[rowindex].Cells["Column0"].Value.ToString(); string taskType = dataGridView1.Rows[rowindex].Cells["Column1"].Value.ToString(); Console.WriteLine("强制结束此" + taskType + "任务,任务号:" + dataGridView1.Rows[rowindex].Cells["Column1"].Value.ToString()); if (taskType.Contains("出库")) { var outStore = outStoreTaskList.Where(x => x.taskCode == taskNo).FirstOrDefault(); if (taskNo == outStore.taskCode) { dataGridView1.Rows[rowindex].Cells["Column5"].Value = "任务删除"; dataGridView1.Rows[rowindex].DefaultCellStyle.ForeColor = Color.Red; outStoreTaskList.Remove(outStore); bool inUseLocation = await inStoreBusiness.updateLocationStatus(LocationStatus.InUse, outStore); baseTaskQueueBusiness.DeleteAssignTask(taskNo); //int key = TaskDictionary.FindKey(int.Parse(taskNo)); //TaskDictionary.removeOutTask(key); dataGridView1.Refresh(); Console.WriteLine("异常任务处理完成!"); } } else { var inStore = inStoreTaskList.Where(x => x.taskCode == taskNo).FirstOrDefault(); if (taskNo == inStore.taskCode) { dataGridView1.Rows[rowindex].Cells["Column5"].Value = "任务删除"; dataGridView1.Rows[rowindex].DefaultCellStyle.ForeColor = Color.Red; outStoreTaskList.Remove(inStore); bool inUseLocation = await inStoreBusiness.updateLocationStatus(LocationStatus.UnUsed, inStore); baseTaskQueueBusiness.DeleteAssignTask(taskNo); //int key = TaskDictionary.FindKey(int.Parse(taskNo)); //TaskDictionary.removeOutTask(key); dataGridView1.Refresh(); Console.WriteLine("异常任务处理完成!"); } } } } private void btn_Unlock_1_Click(object sender, EventArgs e) { UnLockStoreLocationInfo unLockStoreLocationInfo = new UnLockStoreLocationInfo(); unLockStoreLocationInfo.Text = "1#解锁库存"; unLockStoreLocationInfo.PilerInfo = "1"; unLockStoreLocationInfo.TaskType = (TaskType)2; unLockStoreLocationInfo.inStoreForm = this; iFlag = true; unLockStoreLocationInfo.ShowDialog(this); } private void btn_Unlock_2_Click(object sender, EventArgs e) { UnLockStoreLocationInfo unLockStoreLocationInfo = new UnLockStoreLocationInfo(); unLockStoreLocationInfo.Text = "2#解锁库存"; unLockStoreLocationInfo.PilerInfo = "2"; unLockStoreLocationInfo.TaskType = (TaskType)2; unLockStoreLocationInfo.inStoreForm = this; iFlag = true; unLockStoreLocationInfo.ShowDialog(this); } private async void btn_clearTask_Click(object sender, EventArgs e) { Expression> exp = s1 => true; List taskQueues = await new BaseServices().Query(x => x.storeCode == "A" && x.pilerTaskType == TaskType.OutStore && x.taskStatus == Entity.Enums.TaskStatus.Await); if (taskQueues != null) { if (taskQueues.Count > 0) { DialogResult result = MessageBox.Show($"确认删除{taskQueues.Count}条出库任务", "确认对话", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { bool res = await new BaseServices().DeleteByIds(taskQueues.Select(x => x.uuid).ToArray()); MessageBox.Show($"操作已执行,删除{(res ? "成功" : "失败")}", "通知", MessageBoxButtons.OK, MessageBoxIcon.Information); LogHelper.Pilerlog($"手动删除{taskQueues.Count}条出库任务{(res ? "成功" : "失败")}:{JsonChange.ModeToJson(taskQueues)}"); if (res) { inStoreTaskList.Clear(); outStoreTaskList.Clear(); dataGridView1.Rows.Clear(); initTaskQueue(); } } else { MessageBox.Show("操作已取消。", "通知", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { MessageBox.Show("当前没有未执行的等待任务。", "通知", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } } }