using DM_Weight.Models; using DM_Weight.msg; using DM_Weight.Port; using DM_Weight.util; using log4net; using log4net.Repository.Hierarchy; using MaterialDesignThemes.Wpf; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using SqlSugar; using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; namespace DM_Weight.ViewModels { public class BindBoxPackageWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime { private readonly ILog logger = LogManager.GetLogger(typeof(BindBoxPackageWindowViewModel)); public static BindBoxPackageWindowViewModel vm; private int _drawerNo = 0; public int DrawerNo { get => _drawerNo; set => SetProperty(ref _drawerNo, value); } private SolidColorBrush _colorBrush; public SolidColorBrush SnackbarBackground { get => _colorBrush; set => SetProperty(ref _colorBrush, value); } private ISnackbarMessageQueue _snackbarMessageQueue = new SnackbarMessageQueue(TimeSpan.FromSeconds(3)); public ISnackbarMessageQueue SnackbarMessageQueue { get => _snackbarMessageQueue; set => SetProperty(ref _snackbarMessageQueue, value); } private List? _channelLists; public List? _ChannelLists { get => _channelLists; set => SetProperty(ref _channelLists, value); } private ChannelList? _channelList; public ChannelList? _ChannelList { get => _channelList; set { if (value != null) { try { DrugInfo = DrugInfos.Where(di => di.DrugId == value.Drug.DrugId).First(); BaseQuantity = value.BaseQuantity.ToString(); } catch (Exception ex) { RequestDrug(); DrugInfo = DrugInfos.Where(di => di.DrugId == value.Drug.DrugId).First(); BaseQuantity = value.BaseQuantity.ToString(); } //DrugManuNo = DrugManuNos.Where(dm => dm.DrugId == value.DrugId && dm.ManuNo == value.ManuNo).First(); } SetProperty(ref _channelList, value); } } //private List? _channels; //public List? Channels //{ // get => _channels; // set => SetProperty(ref _channels, value); //} //private ChannelStock _channelStock; //public ChannelStock Channel //{ // get { return _channelStock; } // set // { // if (value != null) // { // DrugInfo = DrugInfos.Where(di => di.DrugId == value.DrugInfo.DrugId).First(); // BaseQuantity = value.BaseQuantity.ToString(); // //DrugManuNo = DrugManuNos.Where(dm => dm.DrugId == value.DrugId && dm.ManuNo == value.ManuNo).First(); // } // SetProperty(ref _channelStock, value); // } //} //private DrugManuNo? _drugManuNo; //public DrugManuNo? DrugManuNo //{ // get => _drugManuNo; // set => SetProperty(ref _drugManuNo, value); //} //private List? _drugManuNos; //public List? DrugManuNos //{ // get => _drugManuNos; // set => SetProperty(ref _drugManuNos, value); //} private List? _drugInfos; public List? DrugInfos { get => _drugInfos; set => SetProperty(ref _drugInfos, value); } private DrugInfo? _drugInfo; public DrugInfo? DrugInfo { get => _drugInfo; set { SetProperty(ref _drugInfo, value); //if (_drugInfo != null) //{ // DrugManuNos = SqlSugarHelper.Db.Queryable().Where(m => m.DrugId == _drugInfo.DrugId.ToString()).ToList(); // if (DrugManuNos != null) // { // DrugManuNo = DrugManuNos[0]; // } //} //else //{ // DrugManuNo = null; //} } } //药品基数 private string _baseQuantity; public string BaseQuantity { get => _baseQuantity; set { SetProperty(ref _baseQuantity, value); } } private bool _isEnable = true; public bool IsEnable { get => _isEnable; set => SetProperty(ref _isEnable, value); } private int _status = 0; public int Status { get => _status; set { SetProperty(ref _status, value); } } public bool KeepAlive => false; //抽屉号列表 public static List iList = new List(); //第几个抽屉号下标 //public static int iNumber = 0; //private PortUtil _portUtil; IEventAggregator _eventAggregator; public BindBoxPackageWindowViewModel(IEventAggregator eventAggregator) { vm = this; //_portUtil = portUtil; _eventAggregator = eventAggregator; } private void RequestData() { _ChannelLists?.Clear(); BaseQuantity = ""; var list = SqlSugarHelper.Db.Queryable() //.Includes(cl => cl.channelStocks, cs => cs.DrugInfo,di=>di.drugBase) .Includes(cl => cl.channelStocks) .Includes(cl => cl.Drug) .Where(cl => cl.MachineId.Equals("DM5")) .Where(cl => cl.DrawerNo == DrawerNo + 1) .OrderBy(cl => cl.DrugId).ToList(); //if (list != null && list.Count > 0) //{ // Channels = list.GroupBy(cs =>new { cs.DrugId, cs.ManuNo }).Select(cs => // { // var ret = cs.First(); // ret.Quantity = cs.Sum(itx => itx.Quantity); // return ret; // }).ToList(); //} //else //{ // Channels = null; //} if (list != null && list.Count > 0) { _ChannelLists = list; } else { _ChannelLists = null; } } public void OnNavigatedTo(NavigationContext navigationContext) { logger.Info("进入OnNavigatedTo"); RequestDrug(); RequestData(); logger.Info("结束RequestData"); } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { // 取消消息订阅 //_eventAggregator.GetEvent().Unsubscribe(DoMyPrismEvent); } public DelegateCommand UpdateDrawerNo { get => new DelegateCommand((DrawerNo) => { this.DrawerNo = Convert.ToInt32(DrawerNo); RequestData(); } ); } private void RequestDrug() { //var list = SqlSugarHelper.Db.Queryable().Includes(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList(); //DrugInfos = list; string str = "SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d"; DrugInfos = SqlSugarHelper.Db.SqlQueryable(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList(); } public DelegateCommand BindingDrug { get => new DelegateCommand(BindDrugAction); } //绑定 private void BindDrugAction() { if (DrugInfo == null || BaseQuantity == null) { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("请选择药品并输入药品基数"); return; } int baseQuantity; if (!int.TryParse(BaseQuantity, out baseQuantity)) { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("药品基数请输入正确的整数"); return; } if (_ChannelLists != null) { int iNum = _ChannelLists.Where(cs => cs.DrugId == DrugInfo.DrugId.ToString()).Count(); if (iNum > 0) { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("该药品已在手术间绑定,请选择其他药品"); return; } } var f = SqlSugarHelper.Db.UseTran(() => { //string chnguid = SqlSugarHelper.Db.Queryable().Where(cs => cs.MachineId == ConfigurationManager.AppSettings["machineId"].ToString() && cs.DrawerNo == DrawerNo + 1).Select(cs => cs.Id).First(); int colNoCount = SqlSugarHelper.Db.Queryable() .Where(cs => cs.MachineId == ConfigurationManager.AppSettings["machineId"].ToString() && cs.DrawerNo == DrawerNo + 1) .Max(cs => cs.ColNo); //string chnguid = $"DM5_{(DrawerNo + 1)}_{(colNoCount+1)}_{DrugInfo.DrugId}"; string chnguid = $"DM5_{(DrawerNo + 1)}_{DrugInfo.DrugId}"; SqlSugarHelper.Db.Insertable(new ChannelList() { Id = chnguid, DrawerNo = (DrawerNo + 1), ColNo = (colNoCount + 1), DrugId = DrugInfo.DrugId, BaseQuantity = baseQuantity, MachineId = "DM5", DrawerType = 1, State = 0 }).ExecuteCommand(); SqlSugarHelper.Db.Insertable(new ChannelStock() { Chnguid = chnguid, DrawerNo = DrawerNo + 1, DrugId = DrugInfo.DrugId, BaseQuantity = baseQuantity, Id = Guid.NewGuid().ToString(), MachineId = "DM5", AddToJJNum = 0, NeedNum = baseQuantity, State=0 //ManuNo=DrugManuNo.ManuNo }).ExecuteCommand(); // 保存数据 入库记录 SqlSugarHelper.Db.Insertable(new MachineRecord() { MachineId = "DM5", DrawerNo = DrawerNo + 1, DrugId = DrugInfo.DrugId, Operator = HomeWindowViewModel.Operator?.Id, OperationTime = DateTime.Now, Quantity = baseQuantity, Type = 55, InvoiceId = "绑定手术间", }).ExecuteCommand(); return true; }); if (f.Data) { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676")); SnackbarMessageQueue.Enqueue("药品已绑定手术间"); RequestDrug(); RequestData(); } } public void UpdateComboBoxItems(string text) { string str = @"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit, d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d"; if (string.IsNullOrEmpty(text)) { DrugInfos = SqlSugarHelper.Db.SqlQueryable(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList(); return; } if (DrugInfos != null) { DrugInfos.Clear(); } DrugInfos = SqlSugarHelper.Db.SqlQueryable(str).Where(di => di.DrugName.Contains(text) || di.PyCode.Contains(text)).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList(); } //解绑 public DelegateCommand RemoveBinding { get => new DelegateCommand(() => RemoveBindingAction()); } private void RemoveBindingAction() { try { if (_ChannelList == null) { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("所选手术间中无可解绑药品"); return; } if (_ChannelList != null) { if (_channelList.channelStocks.Where(cs => cs.Quantity > 0).Count() > 0) { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("药品还有库存不能操作解绑"); return; } //解绑选定行的单个药品 SqlSugarHelper.Db.Deleteable(_ChannelList.channelStocks).ExecuteCommand(); //解绑ChannelList表中的药品 SqlSugarHelper.Db.Deleteable().Where(cl => cl.Id == _ChannelList.Id).ExecuteCommand(); // 保存数据 入库记录 SqlSugarHelper.Db.Insertable(new MachineRecord() { MachineId = "DM5", DrawerNo = DrawerNo, DrugId = _ChannelList.DrugId, Operator = HomeWindowViewModel.Operator?.Id, OperationTime = DateTime.Now, Quantity = _ChannelList.BaseQuantity, Type = 55, InvoiceId = "解绑手术间单个药品", }).ExecuteCommand(); } else { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("请选择要解绑的药品"); ////解绑药箱下的所有药品 //Channels.ForEach(item => //{ // SqlSugarHelper.Db.Deleteable(item).ExecuteCommand(); // // 保存数据 入库记录 // SqlSugarHelper.Db.Insertable(new MachineRecord() // { // MachineId = "DM5", // DrawerNo = DrawerNo, // DrugId = item.DrugId.ToString(), // Operator = HomeWindowViewModel.Operator?.Id, // OperationTime = DateTime.Now, // Quantity = item.Quantity, // Type = 55, // InvoiceId = "绑定手术间全部药品", // }).ExecuteCommand(); //}); } RequestDrug(); RequestData(); } catch (Exception ex) { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("解绑操作异常"); } } //保存修改的药品基数 public DelegateCommand SaveCommand { get => new DelegateCommand(() => { if (DrugInfo.DrugId != _ChannelList.DrugId) { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("只能修改药品基数,不能更换绑定药品!"); return; } int baseQty = 0; if (int.TryParse(BaseQuantity, out baseQty)) { logger.Info($"修改药品基数{_ChannelList.BaseQuantity}改为{baseQty}"); if (baseQty > _ChannelList.BaseQuantity) { //基数变大,需要补药 //_ChannelList.channelStocks[0].NeedNum = _ChannelList.channelStocks[0].NeedNum + baseQty - _ChannelList.BaseQuantity; } else { //_ChannelList.channelStocks[0].NeedNum = 0; _ChannelList.channelStocks.ForEach(cs => cs.State = 0); SqlSugarHelper.Db.Updateable(_ChannelList.channelStocks).UpdateColumns(cs => new { cs.State }).ExecuteCommand(); } int oldBaseQty = _ChannelList.BaseQuantity; _ChannelList.BaseQuantity = baseQty; //_ChannelList.channelStocks[0].BaseQuantity = baseQty; //int iUpdate = SqlSugarHelper.Db.Updateable(_ChannelList.channelStocks[0]).ExecuteCommand(); _ChannelList.channelStocks.ForEach(cs => cs.BaseQuantity = baseQty); int iBaseUpdate = SqlSugarHelper.Db.Updateable().SetColumns(cs => new ChannelStock(){ BaseQuantity= _ChannelList.channelStocks[0].BaseQuantity }).Where(cs=>cs.Chnguid==_ChannelList.Id).ExecuteCommand(); //if (iBaseUpdate > 0) //{ // iBaseUpdate = SqlSugarHelper.Db.Updateable(_ChannelList.channelStocks[0]).UpdateColumns(cs => new { cs.NeedNum }).ExecuteCommand(); //} //更新ChannelList表中的BaseQuantity int iUpdateChannelList = SqlSugarHelper.Db.Updateable() .SetColumns(it => new ChannelList() { BaseQuantity = baseQty }) .Where(it => it.Id == _ChannelList.Id).ExecuteCommand(); if (iBaseUpdate > 0 && iUpdateChannelList > 0) { //保存操作记录 SqlSugarHelper.Db.Insertable(new MachineRecord() { MachineId = "DM5", DrawerNo = _ChannelList.DrawerNo, DrugId = _ChannelList.DrugId, Operator = HomeWindowViewModel.Operator?.Id, OperationTime = DateTime.Now, Quantity = _ChannelList.channelStocks[0].NeedNum, Type = 55, InvoiceId = $"修改药品基数{oldBaseQty}改为{baseQty},Quantity值为需要加药数量", }).ExecuteCommand(); SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676")); SnackbarMessageQueue.Enqueue("保存修改完成!"); RequestData(); } else { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676")); SnackbarMessageQueue.Enqueue("保存修改失败!"); } } else { SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c")); SnackbarMessageQueue.Enqueue("药品基数只能是正整数,请检查输入!"); return; } }); } //刷新 public DelegateCommand Query { get => new DelegateCommand(RequestData); } } }