修改处方取药循环开抽屉逻辑
This commit is contained in:
parent
776a1ddce2
commit
eb8aa8db83
|
@ -308,7 +308,7 @@ namespace DM_Weight.ViewModels
|
||||||
{
|
{
|
||||||
byte[] resultOpen = await _portUtil.OpenStorage();
|
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)
|
if (rOpen[4] != 0)
|
||||||
{
|
{
|
||||||
logger.Info($"储物箱使能成功");
|
logger.Info($"储物箱使能成功");
|
||||||
|
@ -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