diff --git a/DM_Weight/ViewModels/OrderTakeDialogViewModel.cs b/DM_Weight/ViewModels/OrderTakeDialogViewModel.cs index bc8bea2..76cf47f 100644 --- a/DM_Weight/ViewModels/OrderTakeDialogViewModel.cs +++ b/DM_Weight/ViewModels/OrderTakeDialogViewModel.cs @@ -308,7 +308,7 @@ namespace DM_Weight.ViewModels { byte[] resultOpen = await _portUtil.OpenStorage(); - int[] rOpen = resultOpen.Select(it => Convert.ToInt32(it)).ToArray(); + int[] rOpen = resultOpen.Select(it => Convert.ToInt32(it)).ToArray(); if (rOpen[4] != 0) { logger.Info($"储物箱使能成功"); @@ -329,7 +329,6 @@ namespace DM_Weight.ViewModels Message = "储物箱使能失败" }); logger.Info($"储物箱使能失败"); - _portUtil.ResetData(); stop(); } @@ -367,15 +366,6 @@ namespace DM_Weight.ViewModels // 锁是打开状态现在关闭了,说明操作完成了,告诉前台锁已关闭 _portUtil.statue = 2; - - string _WindowName = "OrderTakeDialog"; - // 重新初始化数据 - //ResetData(); - _eventAggregator.GetEvent().Publish(new util.DeviceMsg() - { - EventType = util.EventType.DRAWERCLOSE, - WindowName = _WindowName, - }); logger.Info($"储物箱关闭"); if (options._data == (enumerable.Count() - 1)) { @@ -394,113 +384,173 @@ namespace DM_Weight.ViewModels } } } - - - if (channelStocks[0].DrawerState == 0) + // 外置抽屉 + else { - // 判断是否为单支抽屉 - if (channelStocks[0].BoardType == 2) - { - byte[] quantity = await _portUtil.CheckQuantityByDrawer(); - BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); - logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】"); - - await _portUtil.HasLightOnByCol(); - } - // 药盒 - if (channelStocks[0].BoardType == 3) - { - // 药盒指示灯使能 - await _portUtil.BoxLockLightOn(); - } - if (channelStocks[0].BoardType == 6) - { - // 药盒指示灯使能 - await _portUtil.BoxLockLightOn2(); - } - byte[] buffer = await _portUtil.OpenDrawer(); - int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray(); - - logger.Info($"OpenDrawer{string.Join(",", r)}"); - if (_portUtil.DrawerState(r)) - { - _portUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药"); - channelStocks[0].DrawerState = 1; - next(); - } - else - { - AlertMsg alertMsg = new AlertMsg - { - Message = $"抽屉【{drawerNo}】打开失败,请检测硬件", - Type = MsgType.ERROR, - }; - _eventAggregator.GetEvent().Publish(alertMsg); - - logger.Info($"抽屉打开失败"); - _portUtil.ResetData(); - stop(); - } - } - // 检测状态 - else if (channelStocks[0].DrawerState == 1) - { - // 查询抽屉是否为关闭状态 - byte[] buffer = await _portUtil.CheckDrawerStatus(); - - int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray(); - - logger.Info($"GetDrawerStatus{string.Join(",", r)}"); - // 抽屉没有关闭 - if (_portUtil.DrawerState(r)) + if (channelStocks[0].DrawerType == 3) { if (channelStocks[0].BoardType == 2) { - byte[] quantity = await _portUtil.CheckQuantityByDrawer(); - int[] AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); - logger.Info($"AfterQuantity{string.Join(",", AfterQuantity)}"); - logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】"); - - ChannelStocks.ForEach(cl => + if (channelStocks[0].DrawerState == 0) { - if (cl.DrawerNo == drawerNo) + byte[] buffer = await _portUtil.OpenRecover(); + int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray(); + if ((_portUtil.ColNos[0] > 3 && r[4] == 1) || (_portUtil.ColNos[0] < 4 && r[3] == 1)) { - logger.Info($"单支抽屉【{drawerNo}】,应取药品数量【{cl.Quantity}】,现实取数量【{BeforeQuantity[cl.ColNo - 1] - AfterQuantity[cl.ColNo - 1]}】"); + logger.Info($"回收箱打开成功"); + channelStocks[0].DrawerState = 1; + next(); + } + else + { + logger.Info($"回收箱打开失败"); + stop(); } - }); + } + if(channelStocks[0].DrawerState == 1) + { + // 查询是否关闭状态 + byte[] buffer = await _portUtil.CheckRecoverStatus(); + int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray(); + + logger.Info($"GeRecoverStatus{string.Join(",", r)}"); + + // 回收箱关闭成功 + if ((_portUtil.ColNos[0] > 3 && r[4] == 0) || (_portUtil.ColNos[0] < 4 && r[3] == 0)) + { + logger.Info($"回收箱关闭"); + // 查询数量 + byte[] bytes = await _portUtil.CheckRecoverQuantity(); + + int[] r1 = bytes.Select(it => Convert.ToInt32(it)).ToArray(); + // 返回消息库位关闭,放入空瓶数量 + int[] quantitys = r1.Skip(3).Take(3).ToArray(); + int index = _portUtil.ColNos[0] % 3 > 0 ? _portUtil.ColNos[0] % 3 - 1 : 2; + + // 指定库位放入的药品数量 + int InCount = quantitys[index]; + logger.Info($"回收板数量变化【{string.Join(",", quantitys)}】"); + + enumerator.MoveNext(); + next(); + } + else + { + // 查询是否关闭状态 + await Task.Delay(200); + next(); + } + } } - next(); // continue iteration } else { - ChannelStocks.ForEach(cl => + if (channelStocks[0].DrawerState == 0) { - if (cl.DrawerNo == drawerNo) + // 判断是否为单支抽屉 + if (channelStocks[0].BoardType == 2) { - cl.TakeQuantity = cl.Quantity; + byte[] quantity = await _portUtil.CheckQuantityByDrawer(); + BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); + logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】"); + await _portUtil.HasLightOnByCol(); + } + // 药盒 + if (channelStocks[0].BoardType == 3) + { + // 药盒指示灯使能 + await _portUtil.BoxLockLightOn(); + } + if (channelStocks[0].BoardType == 6) + { + // 药盒指示灯使能 + await _portUtil.BoxLockLightOn2(); + } + byte[] buffer = await _portUtil.OpenDrawer(); + int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray(); + + logger.Info($"OpenDrawer{string.Join(",", r)}"); + if (_portUtil.DrawerState(r)) + { + _portUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药"); + channelStocks[0].DrawerState = 1; + next(); + } + else + { + AlertMsg alertMsg = new AlertMsg + { + Message = $"抽屉【{drawerNo}】打开失败,请检测硬件", + Type = MsgType.ERROR, + }; + _eventAggregator.GetEvent().Publish(alertMsg); + + logger.Info($"抽屉打开失败"); + _portUtil.ResetData(); + stop(); } - }); - channelStocks[0].DrawerState = 2; - if (options._data == (enumerable.Count() - 1)) - { - _portUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认"); - this.Status = 3; - channelStocks[0].DrawerState = 0; - stop(); } - else + // 检测状态 + else if (channelStocks[0].DrawerState == 1) { - options._data += 1; - channelStocks[0].DrawerState = 0; - enumerator.MoveNext(); - next(); + // 查询抽屉是否为关闭状态 + byte[] buffer = await _portUtil.CheckDrawerStatus(); + + int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray(); + + logger.Info($"GetDrawerStatus{string.Join(",", r)}"); + // 抽屉没有关闭 + if (_portUtil.DrawerState(r)) + { + if (channelStocks[0].BoardType == 2) + { + byte[] quantity = await _portUtil.CheckQuantityByDrawer(); + int[] AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray(); + logger.Info($"AfterQuantity{string.Join(",", AfterQuantity)}"); + logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】"); + + ChannelStocks.ForEach(cl => + { + if (cl.DrawerNo == drawerNo) + { + logger.Info($"单支抽屉【{drawerNo}】,应取药品数量【{cl.Quantity}】,现实取数量【{BeforeQuantity[cl.ColNo - 1] - AfterQuantity[cl.ColNo - 1]}】"); + } + + }); + } + next(); // continue iteration + } + else + { + ChannelStocks.ForEach(cl => + { + if (cl.DrawerNo == drawerNo) + { + cl.TakeQuantity = cl.Quantity; + + } + }); + channelStocks[0].DrawerState = 2; + if (options._data == (enumerable.Count() - 1)) + { + _portUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认"); + this.Status = 3; + channelStocks[0].DrawerState = 0; + stop(); + } + else + { + options._data += 1; + channelStocks[0].DrawerState = 0; + enumerator.MoveNext(); + next(); + } + } } } } - - } } catch (Exception e)