using Prism.Commands; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; using DM_Weight.Models; using DM_Weight.select; using DM_Weight.util; using DM_Weight.msg; using Prism.Events; using SqlSugar; using log4net; using System.Drawing.Printing; using DM_Weight.Services; namespace DM_Weight.ViewModels { public class SelfTakeDrugWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime { private int _pageNum = 1; public int PageNum { get => _pageNum; set { SetProperty(ref _pageNum, value); RequestChannelData(); } } private int _pageCount = 1; public int PageCount { get => _pageCount; set { SetProperty(ref _pageCount, value); } } private int _pageSize = 3; public int PageSize { get => _pageSize; set { SetProperty(ref _pageSize, value); } } private int _totalCount = 0; public int TotalCount { get => _totalCount; set { SetProperty(ref _totalCount, value); } } private readonly ILog logger = LogManager.GetLogger(typeof(SelfTakeDrugWindowViewModel)); IDialogService _dialogService; IEventAggregator _eventAggregator; public static List StaticSelects = new() { new OrderTakeSelect { Code = "DrugName", Name = "药品名称" }, new OrderTakeSelect { Code = "PyCode", Name = "拼音码" }, new OrderTakeSelect { Code = "DrugBarcode", Name = "药品条码" }, new OrderTakeSelect { Code = "DrugId", Name = "药品编码" } }; //private SqlSugarScope SqlSugarHelper.Db; private SqlHelperService _mysqlHelper; public SelfTakeDrugWindowViewModel(IDialogService DialogService, IEventAggregator eventAggregator, SqlSugarScope sqlSugarScope,SqlHelperService mysqlHelper) { _dialogService = DialogService; _eventAggregator = eventAggregator; //this.SqlSugarHelper.Db = sqlSugarScope; _mysqlHelper= mysqlHelper; } private List _selects = StaticSelects; public List Selects { get { return _selects; } set { SetProperty(ref _selects, value); } } private OrderTakeSelect _selectedItem = StaticSelects[0]; /// /// 查询条件 查询字段 /// public OrderTakeSelect SelectedItem { get { return _selectedItem; } set { SetProperty(ref _selectedItem, value); RequestChannelData(); } } private string? _searchValue; /// /// 查询条件 查询字段值 /// public string? SearchValue { get { return _searchValue; } set { SetProperty(ref _searchValue, value); RequestChannelData(); } } private List _channelStocks = new(); public List ChannelStocks { get { return _channelStocks; } set { SetProperty(ref _channelStocks, value); } } public DelegateCommand OpenSelfDialog { get => new DelegateCommand(() => { //List takeChannels = ChannelStocks.FindAll(it => it.TakeQuantity > 0).ToList(); List takeChannels = Drugs.Aggregate(new List(), (a, b) => { a.AddRange(b.channelStocks.FindAll(it => it.TakeQuantity > 0).Select(cs => { cs.DrugInfo = b; return cs; }).ToList()); return a; }); if (takeChannels.Count > 0) { takeChannels.Sort((a, b) => { if ((a.DrawerNo - b.DrawerNo) == 0) { return a.ColNo - b.ColNo; } return a.DrawerNo - b.DrawerNo; }); DialogParameters dialogParameters = new DialogParameters(); dialogParameters.Add("ChannelStocks", takeChannels); DialogServiceExtensions.ShowDialogHost(_dialogService, "SelfTakeDialog", dialogParameters, DoDialogResult, "RootDialog"); } else { AlertMsg alertMsg = new AlertMsg { Message = "请填写取药数量", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); } }); } public bool KeepAlive => true; private void DoDialogResult(IDialogResult dialogResult) { // 委托 被动执行 被子窗口执行 // dialogResult 第一方面可以拿到任意参数 第二方面 可判断关闭状态 if (dialogResult.Result == ButtonResult.OK) { RequestChannelData(); } //MessageBox.Show("返回值:" + dialogResult.Result.ToString()); } //这个方法用于拦截请求,continuationCallback(true)就是不拦截,continuationCallback(false)拦截本次操作 public void ConfirmNavigationRequest(NavigationContext navigationContext, Action continuationCallback) { continuationCallback(true); } private List _drugs = new(); public List Drugs { get => _drugs; set => SetProperty(ref _drugs, value); } private DrugInfo? _drug; public DrugInfo? Drug { get => _drug; set => SetProperty(ref _drug, value); } public void RequestChannelData() { int totalCount = 0; //List q = SqlSugarHelper.Db.Queryable() // .Includes(di => di.channelStocks.Where(cs => cs.DrawerType == 1) // .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.DrugId != null&&cs.Quantity>0).OrderBy(cs => cs.DrawerNo).OrderBy(cs => cs.ColNo).ToList()) // .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (cs) => cs.DrugId.Contains(SearchValue)) // .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (cs) => cs.DrugName.Contains(SearchValue)) // .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (cs) => cs.PyCode.Contains(SearchValue)) // .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (cs) => cs.DrugBarcode.Contains(SearchValue)) // .Where(di => di.channelStocks.Any(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.DrugId != null)) // .OrderBy(cs => cs.DrugId) // .ToPageList(PageNum, PageSize, ref totalCount); ////.ToList(); List q = _mysqlHelper.GetSelfTakeInfo(SelectedItem.Code, SearchValue, PageNum, PageSize, ref totalCount); Drugs = q.Where(di => di.channelStocks.Count() > 0).ToList(); TotalCount = totalCount; PageCount = (int)Math.Ceiling((double)TotalCount / PageSize); //logger.Info($"_db.Ado.Connection.GetHashCode():{SqlSugarHelper.Db.Ado.Connection.GetHashCode()};{SqlSugarHelper.Db.Ado.GetHashCode()}"); } //接收导航传过来的参数 现在是在此处初始化了表格数据 public void OnNavigatedTo(NavigationContext navigationContext) { RequestChannelData(); } //每次导航的时候,该实列用不用重新创建,true是不重新创建,false是重新创建 public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } //这个方法用于拦截请求 public void OnNavigatedFrom(NavigationContext navigationContext) { } } }