265 lines
9.6 KiB
C#
265 lines
9.6 KiB
C#
using DM_Weight.Models;
|
|
using DM_Weight.msg;
|
|
using DM_Weight.Port;
|
|
using DM_Weight.util;
|
|
using log4net;
|
|
using log4net.Repository.Hierarchy;
|
|
using Prism.Commands;
|
|
using Prism.Events;
|
|
using Prism.Mvvm;
|
|
using Prism.Regions;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Threading;
|
|
|
|
namespace DM_Weight.ViewModels
|
|
{
|
|
public class OpenBoxWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
|
|
{
|
|
private readonly ILog logger = LogManager.GetLogger(typeof(CheckOrderNewWindowViewModel));
|
|
private int _drawerType = -1;
|
|
|
|
public int DrawerType
|
|
{
|
|
get => _drawerType;
|
|
set => SetProperty(ref _drawerType, value);
|
|
}
|
|
|
|
private int status = 0;
|
|
public int Status { get => status; set => SetProperty(ref status, value); }
|
|
|
|
|
|
//开名下药箱按钮的显示状态
|
|
private bool _selfEnable = true;
|
|
public bool SelfEnable { get => _selfEnable; set => SetProperty(ref _selfEnable, value); }
|
|
|
|
//名下药箱按钮显示内容
|
|
private string _selfContent;
|
|
public string SelfContent { get => _selfContent; set => SetProperty(ref _selfContent, value); }
|
|
|
|
|
|
|
|
|
|
//开公共药箱按钮的显示状态
|
|
private bool _publicEnable = true;
|
|
public bool PublicEnable { get => _publicEnable; set => SetProperty(ref _publicEnable, value); }
|
|
|
|
//公共药箱按钮显示内容
|
|
private string _publicContent;
|
|
public string PublicContent { get => _publicContent; set => SetProperty(ref _publicContent, value); }
|
|
|
|
//公共药箱状态
|
|
private int _publicStatus = 0;
|
|
public int PublicStatus { get => _publicStatus; set => SetProperty(ref _publicStatus, value); }
|
|
//名下药箱状态
|
|
private int _selfStatus = 0;
|
|
public int SelfStatus { get => _publicStatus; set => SetProperty(ref _publicStatus, value); }
|
|
|
|
|
|
//抽屉号列表
|
|
public static List<ChannelList> iList = new List<ChannelList>();
|
|
//第几个抽屉号
|
|
//public static int iNumber = 1;
|
|
private PortUtil _portUtil;
|
|
IEventAggregator _eventAggregator;
|
|
public OpenBoxWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator)
|
|
{
|
|
_portUtil = portUtil;
|
|
_eventAggregator = eventAggregator;
|
|
}
|
|
public DelegateCommand<string> OpenBoxDelegate
|
|
{
|
|
get => new DelegateCommand<string>((DrawerType) =>
|
|
{
|
|
this.DrawerType = Convert.ToInt32(DrawerType);
|
|
switch (this.DrawerType)
|
|
{
|
|
case 0:
|
|
PublicEnable = false;
|
|
PublicStatus = 1;
|
|
break;
|
|
case 1:
|
|
SelfEnable = false;
|
|
SelfStatus = 1;
|
|
break;
|
|
}
|
|
SearchBox();
|
|
}
|
|
);
|
|
}
|
|
private void SearchBox()
|
|
{
|
|
iList = SqlSugarHelper.Db.Queryable<ChannelList>().Where(cl => cl.MachineId == "DM5" && cl.DrawerType == this.DrawerType)
|
|
.WhereIF(this.DrawerType == 0, cl => cl.BelongUser == HomeWindowViewModel.Operator.UserBarcode).ToList();
|
|
// .Select(cl => cl.DrawerNo).ToList();
|
|
if (iList.Count > 0)
|
|
{
|
|
//_portUtil.SpeakAsync("正在打开药箱");
|
|
//_portUtil.DrawerNo = iList[iNumber];
|
|
//iNumber++;
|
|
//_portUtil.OpenBox();
|
|
|
|
for (int i = 0; i < iList.Count; i++)
|
|
{
|
|
ChannelList channelList = iList[i];
|
|
//记录开药箱日志
|
|
SqlSugarHelper.Db.Insertable(new MachineRecord()
|
|
{
|
|
MachineId = "DM5",
|
|
DrawerNo = channelList.DrawerNo,
|
|
Operator = HomeWindowViewModel.Operator?.Id,
|
|
OperationTime = DateTime.Now,
|
|
Type = 55,
|
|
InvoiceId = $"打开{iList[i]}号药箱",
|
|
}).ExecuteCommand();
|
|
//记录药箱打开时间
|
|
channelList.EffDate = DateTime.Now.ToString("yyyy-MM-dd");
|
|
channelList.DrawerState = 0;
|
|
SqlSugarHelper.Db.Updateable(channelList).UpdateColumns(it => new { it.EffDate, it.DrawerState }).ExecuteCommand();
|
|
|
|
_portUtil.SpeakAsync($"正在打开{channelList.DrawerNo}号药箱");
|
|
logger.Info($"正在打开{channelList.DrawerNo}号药箱");
|
|
ModbusHelper.GetInstance().OpenBoxDoor(channelList.DrawerNo - 1);
|
|
Thread.Sleep(1000);
|
|
}
|
|
|
|
PublicStatus = 0;
|
|
SelfStatus = 0;
|
|
PublicEnable = true;
|
|
SelfEnable = true;
|
|
DrawerType = -1;
|
|
}
|
|
}
|
|
void DoMyPrismEvent(DeviceMsg msg)
|
|
{
|
|
switch (msg.EventType)
|
|
{
|
|
// 药箱打开
|
|
case EventType.DRAWEROPEN:
|
|
//记录开药箱日志
|
|
SqlSugarHelper.Db.Insertable(new MachineRecord()
|
|
{
|
|
MachineId = "DM5",
|
|
//DrawerNo = _portUtil.DrawerNo,
|
|
Operator = HomeWindowViewModel.Operator?.Id,
|
|
OperationTime = DateTime.Now,
|
|
Type = 55,
|
|
InvoiceId = "药箱打开",
|
|
}).ExecuteCommand();
|
|
|
|
//if (iNumber < iList.Count)
|
|
//{
|
|
//_portUtil.DrawerNo = iList[iNumber];
|
|
//iNumber++;
|
|
if (PublicStatus == 1)
|
|
{
|
|
PublicStatus = 2;
|
|
}
|
|
else
|
|
{
|
|
SelfStatus = 2;
|
|
}
|
|
//_portUtil.OpenBox();
|
|
//}
|
|
//else
|
|
//{
|
|
//iNumber = 0;
|
|
//_portUtil.GetBoxStatus();
|
|
//}
|
|
break;
|
|
// 药箱关闭
|
|
case EventType.DRAWERCLOSE:
|
|
//记录药箱操作日志
|
|
SqlSugarHelper.Db.Insertable(new MachineRecord()
|
|
{
|
|
MachineId = "DM5",
|
|
//DrawerNo = _portUtil.DrawerNo,
|
|
Operator = HomeWindowViewModel.Operator?.Id,
|
|
OperationTime = DateTime.Now,
|
|
Type = 55,
|
|
InvoiceId = "药箱关闭",
|
|
}).ExecuteCommand();
|
|
|
|
if (PublicStatus == 2)
|
|
{
|
|
PublicStatus = 3;
|
|
}
|
|
else
|
|
{
|
|
SelfStatus = 3;
|
|
}
|
|
PublicEnable = true;
|
|
SelfEnable = true;
|
|
DrawerType = -1;
|
|
//_portUtil.Operate = false;
|
|
break;
|
|
// 打开失败
|
|
case EventType.OPENERROR:
|
|
AlertMsg alertMsg = new AlertMsg
|
|
{
|
|
Message = msg.Message,
|
|
Type = MsgType.ERROR
|
|
};
|
|
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
|
|
|
|
PublicEnable = true;
|
|
SelfEnable = true;
|
|
DrawerType = -1;
|
|
PublicStatus = 0;
|
|
SelfStatus = 0;
|
|
|
|
//记录药箱操作日志
|
|
SqlSugarHelper.Db.Insertable(new MachineRecord()
|
|
{
|
|
MachineId = "DM5",
|
|
//DrawerNo = _portUtil.DrawerNo,
|
|
Operator = HomeWindowViewModel.Operator?.Id,
|
|
OperationTime = DateTime.Now,
|
|
Type = 55,
|
|
InvoiceId = "药箱打开失败",
|
|
}).ExecuteCommand();
|
|
//_portUtil.Operate = false;
|
|
break;
|
|
}
|
|
}
|
|
public bool KeepAlive => false;
|
|
|
|
public bool IsNavigationTarget(NavigationContext navigationContext)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public void OnNavigatedFrom(NavigationContext navigationContext)
|
|
{
|
|
// 取消消息订阅
|
|
//_eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
|
|
CheckDrawerState();
|
|
}
|
|
|
|
public void OnNavigatedTo(NavigationContext navigationContext)
|
|
{
|
|
//_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
|
|
}
|
|
//查询名下药箱与公共药箱状态
|
|
private void CheckDrawerState()
|
|
{
|
|
PublicContent = "开公共药箱";
|
|
int listSelfState = SqlSugarHelper.Db.Queryable<ChannelList>().Where(cl => cl.MachineId == "DM5")
|
|
.Where(cl => cl.BelongUser == HomeWindowViewModel.Operator.UserBarcode).Select(cl => cl.DrawerState).First();
|
|
if (listSelfState > 0)
|
|
{
|
|
SelfContent = "还名下药箱";
|
|
}
|
|
else
|
|
{
|
|
SelfContent = "取名下药箱";
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|