修改处方取药循环开抽屉逻辑
This commit is contained in:
		
							parent
							
								
									776a1ddce2
								
							
						
					
					
						commit
						eb8aa8db83
					
				| 
						 | 
					@ -329,7 +329,6 @@ namespace DM_Weight.ViewModels
 | 
				
			||||||
                                        Message = "储物箱使能失败"
 | 
					                                        Message = "储物箱使能失败"
 | 
				
			||||||
                                    });
 | 
					                                    });
 | 
				
			||||||
                                    logger.Info($"储物箱使能失败");
 | 
					                                    logger.Info($"储物箱使能失败");
 | 
				
			||||||
                                    _portUtil.ResetData();
 | 
					 | 
				
			||||||
                                    stop();
 | 
					                                    stop();
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -367,15 +366,6 @@ namespace DM_Weight.ViewModels
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                        // 锁是打开状态现在关闭了,说明操作完成了,告诉前台锁已关闭
 | 
					                                        // 锁是打开状态现在关闭了,说明操作完成了,告诉前台锁已关闭
 | 
				
			||||||
                                        _portUtil.statue = 2;
 | 
					                                        _portUtil.statue = 2;
 | 
				
			||||||
 | 
					 | 
				
			||||||
                                        string _WindowName = "OrderTakeDialog";
 | 
					 | 
				
			||||||
                                        // 重新初始化数据
 | 
					 | 
				
			||||||
                                        //ResetData();
 | 
					 | 
				
			||||||
                                        _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
 | 
					 | 
				
			||||||
                                        {
 | 
					 | 
				
			||||||
                                            EventType = util.EventType.DRAWERCLOSE,
 | 
					 | 
				
			||||||
                                            WindowName = _WindowName,
 | 
					 | 
				
			||||||
                                        });
 | 
					 | 
				
			||||||
                                        logger.Info($"储物箱关闭");
 | 
					                                        logger.Info($"储物箱关闭");
 | 
				
			||||||
                                        if (options._data == (enumerable.Count() - 1))
 | 
					                                        if (options._data == (enumerable.Count() - 1))
 | 
				
			||||||
                                        {
 | 
					                                        {
 | 
				
			||||||
| 
						 | 
					@ -394,113 +384,173 @@ namespace DM_Weight.ViewModels
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                        // 外置抽屉
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
                        if (channelStocks[0].DrawerState == 0)
 | 
					 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            // 判断是否为单支抽屉
 | 
					                            if (channelStocks[0].DrawerType == 3)
 | 
				
			||||||
                            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<SnackbarEvent>().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].BoardType == 2)
 | 
					                                if (channelStocks[0].BoardType == 2)
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
                                    byte[] quantity = await _portUtil.CheckQuantityByDrawer();
 | 
					                                    if (channelStocks[0].DrawerState == 0)
 | 
				
			||||||
                                    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)
 | 
					                                        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
 | 
					                            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<SnackbarEvent>().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;
 | 
					                                    byte[] buffer = await _portUtil.CheckDrawerStatus();
 | 
				
			||||||
                                    enumerator.MoveNext();
 | 
					
 | 
				
			||||||
                                    next();
 | 
					                                    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)
 | 
					                catch (Exception e)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue