From 433d01ab24b100363668befbfa523d93076795fd Mon Sep 17 00:00:00 2001 From: maqiao <625215135@qq.com> Date: Thu, 27 Jun 2024 15:35:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=B7=E9=A2=86=E5=85=A5=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DM_Weight/App.config | 2 +- DM_Weight/App.xaml.cs | 8 +- DM_Weight/Models/ChannelStock.cs | 3 + DM_Weight/Models/DrugPleaseClaim.cs | 6 +- DM_Weight/Models/DrugPleaseManuNo.cs | 25 + .../ViewModels/AccountWindowViewModel.cs | 27 +- .../ViewModels/ApplyInStockWindowViewModel.cs | 748 ++++++++++++++++++ .../ViewModels/ApplyListWindowViewModel.cs | 2 +- .../ViewModels/InvoiceInWindowViewModel.cs | 4 +- .../ViewModels/RoleManagerWindowViewModel.cs | 7 + DM_Weight/Views/ApplyInStockWindow.xaml | 266 +++++++ DM_Weight/Views/ApplyInStockWindow.xaml.cs | 28 + 12 files changed, 1106 insertions(+), 20 deletions(-) create mode 100644 DM_Weight/Models/DrugPleaseManuNo.cs create mode 100644 DM_Weight/ViewModels/ApplyInStockWindowViewModel.cs create mode 100644 DM_Weight/Views/ApplyInStockWindow.xaml create mode 100644 DM_Weight/Views/ApplyInStockWindow.xaml.cs diff --git a/DM_Weight/App.config b/DM_Weight/App.config index 4eae1fd..78cf96a 100644 --- a/DM_Weight/App.config +++ b/DM_Weight/App.config @@ -3,7 +3,7 @@ - + diff --git a/DM_Weight/App.xaml.cs b/DM_Weight/App.xaml.cs index 4338d05..8ba205c 100644 --- a/DM_Weight/App.xaml.cs +++ b/DM_Weight/App.xaml.cs @@ -170,9 +170,11 @@ namespace DM_Weight //请领列表 containerRegistry.RegisterForNavigation(); - // 请领详情模态框 - containerRegistry.RegisterDialog(); - containerRegistry.RegisterForNavigation(); + + + //请领入库 + containerRegistry.RegisterForNavigation(); + #endregion #region 还药 diff --git a/DM_Weight/Models/ChannelStock.cs b/DM_Weight/Models/ChannelStock.cs index 8bcd816..2caa30e 100644 --- a/DM_Weight/Models/ChannelStock.cs +++ b/DM_Weight/Models/ChannelStock.cs @@ -185,5 +185,8 @@ namespace DM_Weight.Models [Navigate(NavigateType.ManyToOne, nameof(Chnguid))] public ChannelList ChannelLst { get => _channelList; set => SetProperty(ref _channelList, value); } + [SugarColumn(IsIgnore = true)] + public DrugPleaseClaim PleaseClaim { get; set; } + } } \ No newline at end of file diff --git a/DM_Weight/Models/DrugPleaseClaim.cs b/DM_Weight/Models/DrugPleaseClaim.cs index e9ef982..2cd550e 100644 --- a/DM_Weight/Models/DrugPleaseClaim.cs +++ b/DM_Weight/Models/DrugPleaseClaim.cs @@ -120,6 +120,10 @@ namespace DM_Weight.Models //[Navigate(NavigateType.ManyToMany, nameof(PleaseNo))] - //public CollectDrug collectDrug { get; set; } + //public CollectDrug collectDrug { get; set; }] + + + [Navigate(NavigateType.OneToOne, nameof(DrugId))] + public DrugInfo DrugInfo { get; set; } } } diff --git a/DM_Weight/Models/DrugPleaseManuNo.cs b/DM_Weight/Models/DrugPleaseManuNo.cs new file mode 100644 index 0000000..16d7a90 --- /dev/null +++ b/DM_Weight/Models/DrugPleaseManuNo.cs @@ -0,0 +1,25 @@ +using Prism.Mvvm; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DM_Weight.Models +{ + /// + /// drug_please_claim表中drug_manu_no字段值对应映射 + /// + public class DrugPleaseManuNo + { + public string DrugId { get; set; } + + public string ManuNo { get; set; } + + public string EffDate { get; set;} + + public int Quantity { get; set; } + + } +} diff --git a/DM_Weight/ViewModels/AccountWindowViewModel.cs b/DM_Weight/ViewModels/AccountWindowViewModel.cs index ffe0ee6..681e076 100644 --- a/DM_Weight/ViewModels/AccountWindowViewModel.cs +++ b/DM_Weight/ViewModels/AccountWindowViewModel.cs @@ -184,7 +184,7 @@ namespace DM_Weight.ViewModels //MachineRecordService _machineRecordService; IEventAggregator _eventAggregator; ////private SqlSugarScope SqlSugarHelper.Db; - public AccountWindowViewModel( IEventAggregator eventAggregator) + public AccountWindowViewModel(IEventAggregator eventAggregator) { //_machineRecordService = machineRecord; ////this.SqlSugarHelper.Db = sqlSugarScope; @@ -219,7 +219,7 @@ namespace DM_Weight.ViewModels DrugInfos = list; DrugInfo = list[0]; } - + public long CurrentTimeMillis() { return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds; @@ -229,8 +229,9 @@ namespace DM_Weight.ViewModels /// public DelegateCommand DownloadOrderUser { - get => new DelegateCommand(() => { - GridReportUtil.OrderUseReport(StartDate, EndDate, DrugInfo == null ? "" : DrugInfo.DrugId.ToString() ?? ""); + get => new DelegateCommand(() => + { + GridReportUtil.OrderUseReport(StartDate, EndDate, DrugInfo == null ? "" : DrugInfo.DrugId.ToString() ?? ""); }); } @@ -308,35 +309,35 @@ namespace DM_Weight.ViewModels { SQL += " AND ac.drug_id='" + drug_id + "' "; } - SQL += " ORDER BY ac.create_date desc,ac.drug_id"; if (type > 0) { if (type == 1) { - SQL += " WHERE AddQuantity>0 "; + SQL += " AND ac.add_quantity>0 "; } if (type == 2) { - SQL += " WHERE OutQuantity>0 "; + SQL += " AND ac.out_quantity>0 "; } if (type == 3) { - SQL += " WHERE type=3 "; + SQL += " AND type=3 "; } if (type == 4) { - SQL += " WHERE type=4 "; + SQL += " AND type=4 "; } + SQL += " ORDER BY ac.create_date desc,ac.drug_id"; } //ChannelStocks = q.Select(it => { it.CheckQuantity = it.Quantity; return it; }).ToList(); List accountList = SqlSugarHelper.Db.SqlQueryable(SQL) - //.AddParameters(new - //{ - // machineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1" - //}) + //.AddParameters(new + //{ + // machineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1" + //}) //.Select(it => new { o = new AccountModel(), i = new DrugInfo() }) //.Select(it=>new AccountModel()) //.Select("*") //让上面一行不生成sql diff --git a/DM_Weight/ViewModels/ApplyInStockWindowViewModel.cs b/DM_Weight/ViewModels/ApplyInStockWindowViewModel.cs new file mode 100644 index 0000000..daa735d --- /dev/null +++ b/DM_Weight/ViewModels/ApplyInStockWindowViewModel.cs @@ -0,0 +1,748 @@ +using DM_Weight.Models; +using DM_Weight.msg; +using DM_Weight.Port; +using DM_Weight.select; +using DM_Weight.util; +using log4net; +using MySqlConnector; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Prism.Commands; +using Prism.Events; +using Prism.Mvvm; +using Prism.Regions; +using Prism.Services.Dialogs; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Configuration; +using System.Drawing.Printing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Data; +using Unity; + +namespace DM_Weight.ViewModels +{ + public class ApplyInStockWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime + { + private List _drugPleaseClaimList = new(); + + public List _DrugPleaseClaimList { get { return _drugPleaseClaimList; } set { SetProperty(ref _drugPleaseClaimList, value); } } + + private DrugPleaseClaim? selectDrugPleaseClaim; + + public DrugPleaseClaim? SelectDrugPleaseClaim + { + get { return selectDrugPleaseClaim; } + set + { + SetProperty(ref selectDrugPleaseClaim, value); + } + } + public static List StaticOrderTakeSelects = new() + { + new OrderTakeSelect + { + Code = "drugPleaseNo", + Name = "请领单号" + } + }; + + private List _orderTakeSelects = StaticOrderTakeSelects; + + public List OrderTakeSelects + { + get { return _orderTakeSelects; } + set + { + SetProperty(ref _orderTakeSelects, value); + } + } + + private OrderTakeSelect _selectedItem = StaticOrderTakeSelects[0]; + /// + /// 查询条件 查询字段 + /// + public OrderTakeSelect SelectedItem + { + get { return _selectedItem; } + set + { + SetProperty(ref _selectedItem, value); + RequestData(); + } + } + private string _orderDate = DateTime.Now.ToString("yyyy-MM-dd"); + /// + /// 查询条件 处方日期 + /// + public string OrderDate + { + get { return _orderDate; } + set + { + if (!String.IsNullOrEmpty(value)) + { + SetProperty(ref _orderDate, DateTime.Parse(value).ToString("yyyy-MM-dd")); + } + else + { + SetProperty(ref _orderDate, value); + } + + RequestData(); + } + } + + private string? _searchValue; + + /// + /// 查询条件 查询字段值 + /// + public string? SearchValue + { + get { return _searchValue; } + set + { + SetProperty(ref _searchValue, value); + RequestData(); + } + } + private List _channelStocks = new(); + + public List ChannelStocks { get { return _channelStocks; } set { SetProperty(ref _channelStocks, value); } } + + + + private List _addChannels = new(); + + public List AddChannels { get { return _addChannels; } set { SetProperty(ref _addChannels, value); } } + private readonly ILog logger = LogManager.GetLogger(typeof(InvoiceInWindowViewModel)); + private int _pageNum = 1; + public int PageNum + { + get => _pageNum; + set + { + SetProperty(ref _pageNum, value); + RequestData(); + } + } + + private int _pageCount = 1; + public int PageCount + { + get => _pageCount; + set + { + SetProperty(ref _pageCount, value); + } + } + + private int _pageSize = 8; + 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 int _status = 0; + + public int Status { get => _status; set => SetProperty(ref _status, value); } + + + IDialogService _dialogService; + + + IEventAggregator _eventAggregator; + private PortUtil _portUtil; + public ApplyInStockWindowViewModel(PortUtil portUtil, IDialogService DialogService, IEventAggregator eventAggregator) + { + _dialogService = DialogService; + _eventAggregator = eventAggregator; + _portUtil = portUtil; + } + private IEnumerable> enumerable; + private IEnumerator> enumerator; + private string WindowName = "ApplyInStockWindowViewModel"; + void DoMyPrismEvent(DeviceMsg msg) + { + + if (msg.WindowName.Equals(WindowName)) + { + IGrouping grouping = enumerator.Current; + int DrawerNo = grouping.Key; + List channelStocks = grouping.ToList(); + + switch (msg.EventType) + { + // 抽屉打开 + case EventType.DRAWEROPEN: + + + if (Status == 1) + { + if (channelStocks[0].process == 1) + { + channelStocks.ForEach(it => it.process = 2); + } + } + + break; + // 抽屉关闭 + case EventType.DRAWERCLOSE: + if (Status == 1) + { + if (channelStocks[0].process == 2) + { + channelStocks.ForEach(it => it.process = 3); + } + IGrouping groupingBefore = enumerator.Current; + int DrawerNoBefore = groupingBefore.Key; + if (enumerator.MoveNext()) + { + IGrouping groupingAfter = enumerator.Current; + int DrawerNoAfter = groupingAfter.Key; + if (DrawerNoBefore < 9 && DrawerNoAfter > 8) + { + Thread.Sleep(50); + } + OpenOneByOne(); + } + // 已经全部取出 + else + { + Status = 3; + } + } + break; + // 数量变化 + case EventType.UPDATEQUANTITY: + if (Status == 1) + { + + logger.Info($"抽屉【{DrawerNo}】库位药品数量【{msg.Quantitys}】"); + } + break; + // 打开失败 + case EventType.OPENERROR: + AlertMsg alertMsg = new AlertMsg + { + Message = msg.Message, + Type = MsgType.ERROR, + }; + _eventAggregator.GetEvent().Publish(alertMsg); + Status = 0; + break; + } + } + + } + private async void OpenOneByOne() + { + IGrouping grouping = enumerator.Current; + int DrawerNo = grouping.Key; + List channelStocks = grouping.ToList(); + channelStocks.ForEach(it => it.process = 1); + _portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉"); + List singleChannels = new List(); + for (int i = 0; i < channelStocks.Count; i++) + { + ChannelStock copy = TransExpV2.Trans(channelStocks[i]); + singleChannels.Add(copy); + } + singleChannels = singleChannels.GroupBy(it => new + { + it.DrawerNo, + it.ColNo + }).Select(it => + { + var ret = it.First(); + ret.Quantity = it.Sum(itx => itx.Quantity); + ret.AddQuantity = it.Sum(itx => itx.AddQuantity); + return ret; + }).ToList().FindAll(it => it.BoardType != 1); + + _portUtil.WindowName = WindowName; + _portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1; + _portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray(); + //_portUtil.Stocks = singleChannels.Select(it => it.Quantity).ToArray(); + _portUtil.DrawerNo = DrawerNo; + + if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 5) + { + List ChannelLst = new List(); + for (int i = 0; i < channelStocks.Count; i++) + { + ChannelStock copy = TransExpV2.Trans(channelStocks[i]); + singleChannels.Add(copy); + } + ChannelLst = ChannelLst.Where(it => it.BoardType != 1) + .GroupBy(it => it.ColNo) + .Select(it => + { + var ret = it.First(); + ret.Quantity = it.Sum(itx => itx.Quantity); + ret.AddQuantity = it.Sum(itx => itx.AddQuantity); + return ret; + }).ToList(); + // 发送加药数量 + singleChannels.ForEach(it => + { + _portUtil.TakeQuantity(DrawerNo, it.ColNo, it.AddQuantity, it.Quantity + it.AddQuantity); + }); + } + + if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 6) + { + for (int i = 0; i < singleChannels.Count; i++) + { + ChannelStock it = singleChannels[i]; + _portUtil.ClearCount(it.DrawerNo, it.ColNo); + await Task.Delay(50); + } + } + + _portUtil.Start(); + } + + private DelegateCommand _rowSelected; + + public DelegateCommand RowSelected => _rowSelected ??= new DelegateCommand(GetChannelByInvoice); + public void GetChannelByInvoice() + { + ChannelStocks.Clear(); + //InOutInvoices.Clear(); + List csList = new List(); + if (SelectDrugPleaseClaim != null) + { + if (SelectDrugPleaseClaim.GetQuantity == 1) + { + //请领单里只有一种药 + List drugManuInfoList = JsonConvert.DeserializeObject>(SelectDrugPleaseClaim.DrugManuNo); + drugManuInfoList.ForEach(dm => dm.DrugId = SelectDrugPleaseClaim.DrugId); + for (int i = 0; i < drugManuInfoList.Count; i++) + { + DrugPleaseManuNo drugPleaseManuNo = drugManuInfoList[i]; + + + ChannelStock q = SqlSugarHelper.Db.Queryable() + .Includes(cs => cs.DrugInfo) + .WhereIF(!string.IsNullOrEmpty(drugPleaseManuNo.EffDate), cs => cs.EffDate.Equals(drugPleaseManuNo.EffDate)) + .WhereIF(!string.IsNullOrEmpty(drugPleaseManuNo.ManuNo), cs => cs.ManuNo.Equals(drugPleaseManuNo.ManuNo)) + .Where(cs => cs.DrugId == drugPleaseManuNo.DrugId) + .Where(cs => cs.DrawerType == 1) + .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")) + .OrderBy(cs => cs.DrugId) + .OrderBy(cs => cs.DrawerNo) + .OrderBy(cs => cs.ColNo) + .First(); + q.AddQuantity = drugPleaseManuNo.Quantity; + + csList.Add(q); + } + + } + else + { + //请领单里有多种药 + List pleaseClaimList = SqlSugarHelper.Db.Queryable().Includes(dpc => dpc.DrugInfo).Where(dpc => dpc.PleaseNo == SelectDrugPleaseClaim.PleaseNo).ToList(); + if (pleaseClaimList != null) + { + foreach (DrugPleaseClaim item in pleaseClaimList) + { + List drugManuInfoList = JsonConvert.DeserializeObject>(item.DrugManuNo); + drugManuInfoList.ForEach(dm => dm.DrugId = item.DrugId); + for (int i = 0; i < drugManuInfoList.Count; i++) + { + DrugPleaseManuNo drugPleaseManuNo = drugManuInfoList[i]; + + + List? q = SqlSugarHelper.Db.Queryable() + .Includes(cs => cs.DrugInfo) + .Where(cs => cs.DrugId != null) + .WhereIF(!string.IsNullOrEmpty(drugPleaseManuNo.EffDate), cs => cs.EffDate.Equals(drugPleaseManuNo.EffDate)) + .WhereIF(!string.IsNullOrEmpty(drugPleaseManuNo.ManuNo), cs => cs.ManuNo.Equals(drugPleaseManuNo.ManuNo)) + .Where(cs => cs.DrugId == drugPleaseManuNo.DrugId) + .Where(cs => cs.DrawerType == 1) + .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")) + .OrderBy(cs => cs.DrugId) + .OrderBy(cs => cs.DrawerNo) + .OrderBy(cs => cs.ColNo) + .ToList(); + if (q != null) + { + q[0].AddQuantity = drugPleaseManuNo.Quantity; + q.ForEach(csq=>csq.PleaseClaim = item); + + csList.AddRange(q); + } + } + } + } + } + } + ICollectionView vw = CollectionViewSource.GetDefaultView(csList); + vw.GroupDescriptions.Add(new PropertyGroupDescription("PleaseClaim")); + ChannelStocks = csList; + + } + + public bool KeepAlive => false; + + public void ConfirmNavigationRequest(NavigationContext navigationContext, Action continuationCallback) + { + continuationCallback(true); + } + + public bool IsNavigationTarget(NavigationContext navigationContext) + { + return true; + } + + public void OnNavigatedFrom(NavigationContext navigationContext) + { + _eventAggregator.GetEvent().Unsubscribe(DoMyPrismEvent); + } + + public void OnNavigatedTo(NavigationContext navigationContext) + { + _eventAggregator.GetEvent().Subscribe(DoMyPrismEvent); + RequestData(); + } + public void RequestData() + { + _DrugPleaseClaimList.Clear(); + int totalCount = 0; + + var sb = new StringBuilder(); + sb.Append("SELECT i.please_no,i.do_date,i.totalQuantity,count(1) as get_quantity,drug_manu_no,machine_id from drug_please_claim i inner join "); + sb.Append(" ( select c.drug_id as drug_id from channel_stock c where c.machine_id = 'DM3' group by c.drug_id ) di on di.drug_id = i.drug_id WHERE state=@State and type=@Type "); + + if (OrderDate != null) + { + sb.Append(" and i.do_date = @CreateTime "); + } + if (!String.IsNullOrEmpty(SearchValue)) + { + sb.Append(" and i.please_no = @please_no "); + } + if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["department"])) + { + sb.Append(" and i.department = @department "); + } + sb.Append(" GROUP BY i.please_no"); + sb.Append(" order by i.do_date "); + _DrugPleaseClaimList = SqlSugarHelper.Db.SqlQueryable(sb.ToString()) + .AddParameters(new + { + State = 2, + Type = 32, + CreateTime = OrderDate, + please_no = SearchValue, + department = ConfigurationManager.AppSettings["department"] + }) + .Select(it => new DrugPleaseClaim()) + .Select("*") + .ToPageList(PageNum, PageSize, ref totalCount); + + TotalCount = totalCount; + PageCount = (int)Math.Ceiling((double)TotalCount / PageSize); + } + public DelegateCommand OpenInvoiceAdd + { + get => new DelegateCommand(() => + { + bool flag = true; + + AddChannels = ChannelStocks.FindAll(it => it.AddQuantity != 0); + + enumerable = AddChannels.GroupBy(cs => cs.DrawerNo, cs => cs); + enumerator = enumerable.GetEnumerator(); + OpenDrawer(AddChannels); + }, () => SelectDrugPleaseClaim != null).ObservesProperty(() => SelectDrugPleaseClaim); + } + private void OpenDrawer(List AddChannels) + { + if (Status == 0) + { + if (AddChannels == null || AddChannels.Count <= 0) + { + AlertMsg alertMsg = new AlertMsg + { + Message = "请输入入库数量", + Type = MsgType.ERROR, + }; + _eventAggregator.GetEvent().Publish(alertMsg); + return; + } + int totalNum = AddChannels.Sum(add => add.AddQuantity); + //if (totalNum != SelectedInvoice.Quantity) + //{ + // AlertMsg alertMsg = new AlertMsg + // { + // Message = "各批次添加数量要与调拨单药品总数一致!", + // Type = MsgType.ERROR, + // }; + // _eventAggregator.GetEvent().Publish(alertMsg); + // return; + //} + enumerator.MoveNext(); + Status = 1; + OpenOneByOne(); + } + } + public DelegateCommand QueryCommand + { + get => new DelegateCommand(() => + { + RequestData(); + }); + } + private bool _isFinishClick = false; + public DelegateCommand TakeFinish { get => new DelegateCommand(TakeFinishAction); } + + private void TakeFinishAction() + { + if (!_isFinishClick) + { + _isFinishClick = true; + List record = ChannelStocks.ToList(); + string InvoiceId = SelectDrugPleaseClaim.PleaseNo; + var f = SqlSugarHelper.Db.UseTran(() => + { + SqlSugarHelper.Db.Updateable(new DrugPleaseClaim() + { + State = 3, + PleaseNo = SelectDrugPleaseClaim.PleaseNo + }).UpdateColumns(it => new { it.State }).WhereColumns(it => new { it.PleaseNo }).ExecuteCommand(); + + for (int i = 0; i < record.Count; i++) + { + + + ChannelStock it = record[i]; + if (it.BoardType == 6 && it.PosNo == 0) + { + _portUtil.SetNumCount(it.DrawerNo, it.ColNo, it.AddQuantity); + } + if (it.Id != null) + { + // 更新数据 库存信息 + SqlSugarHelper.Db.Updateable(new ChannelStock() + { + Quantity = it.Quantity + it.AddQuantity, + ManuNo = it.ManuNo, + EffDate = it.EffDate, + Id = it.Id, + }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand(); + } + //else + //{ + // //如果批号重复则不让添加 + // List csCount = SqlSugarHelper.Db.Queryable().Where(cs => cs.DrawerNo == it.DrawerNo && cs.ColNo == it.ColNo && cs.ManuNo == it.ManuNo && cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.Quantity > 0).ToList(); + // if (csCount.Count > 0) + // { + // //repeatList.Add(it.ManuNo); + // //stockRepeats.Add(it); + // continue; + // } + // //查询现有库位中是否有库存为0的记录,如果有直接update + // ChannelStock recordHistory = SqlSugarHelper.Db.Queryable().Where(cs => cs.DrawerNo == it.DrawerNo && cs.ColNo == it.ColNo && cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.Quantity <= 0).First(); + // if (recordHistory != null && recordHistory.Id != null) + // { + // SqlSugarHelper.Db.Updateable().SetColumns(item => new ChannelStock() + // { + // Quantity = it.AddQuantity, + // ManuNo = it.ManuNo, + // EffDate = it.EffDate + // }).Where(item => item.Id == recordHistory.Id).ExecuteCommand(); + // } + // else + // { + // // 更新数据 库存信息 + // SqlSugarHelper.Db.Insertable(new ChannelStock() + // { + // Quantity = it.AddQuantity, + // Chnguid = it.Chnguid, + // ManuNo = it.ManuNo, + // EffDate = it.EffDate, + // DrawerNo = it.DrawerNo, + // ColNo = it.ColNo, + // DrugId = it.DrugId, + // DrawerType = it.DrawerType, + // BoardType = it.BoardType, + // Id = Guid.NewGuid().ToString(), + // MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1" + // }).ExecuteCommand(); + // } + //} + // 获取更新完库存后的药品库存 + List nowChannels = SqlSugarHelper.Db.Queryable() + .Where(cs => cs.MachineId.Equals(it.MachineId)) + .Where(cs => cs.DrugId.Equals(it.DrugId)) + .Where(cs => cs.DrawerType == 1) + .ToList(); + + // 保存数据 出/入库记录 + SqlSugarHelper.Db.Insertable(new MachineRecord() + { + MachineId = it.MachineId, + DrawerNo = it.DrawerNo, + ColNo = it.ColNo, + DrugId = it.DrugId, + ManuNo = it.ManuNo, + EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null, + Operator = HomeWindowViewModel.Operator?.Id, + Reviewer = HomeWindowViewModel.Reviewer?.Id, + OperationTime = DateTime.Now, + Quantity = it.AddQuantity, + Type = 1, + InvoiceId = InvoiceId, + //StockQuantity = nowChannels.Sum(it => it.Quantity), + //ManunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity), + //SupplierDept = SelectedInvoice.PharmacyName1 ?? ConfigurationManager.AppSettings["supplierDept"].ToString(), + //ReceiveDept = SelectedInvoice.PharmacyName2 ?? ConfigurationManager.AppSettings["receiveDept"].ToString() + }).ExecuteCommand(); + + int iIndex= Array.IndexOf(ConfigurationManager.AppSettings["colloctedId"].Split(','), SelectDrugPleaseClaim.MachineId.ToString()); + string dept = ConfigurationManager.AppSettings["colloctedId"].Split(',')[iIndex-1].ToString(); + + //保存账册 + int iInsertResult = SqlSugarHelper.Db.Insertable(new AccountBookG2() + { + + DrugId = Convert.ToInt32(it.DrugId), + Type = 1, + Department = dept, + OrderNo = SelectDrugPleaseClaim.PleaseNo, + ManuNo = it.ManuNo, + EffDate = it.EffDate, + AddQuantity = it.AddQuantity, + UserId1 = HomeWindowViewModel.Operator?.Id, + UserId2 = HomeWindowViewModel.Reviewer?.Id, + MachineId = ConfigurationManager.AppSettings["machineId"].ToString(), + CreateDate = DateTime.Now.ToString("yyyy-MM-dd"), + CreateTime = DateTime.Now, + InvoiceNo = SelectDrugPleaseClaim.PleaseNo + + }).ExecuteCommand(); + //修改凌晨生成的日结存与总结存数据 + AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable() + .Where(ab => ab.MachineId.Equals(it.MachineId)) + .Where(ab => ab.Type == 3) + .Where(ab => ab.DrugId == Convert.ToInt32(it.DrugId)) + .Where(ab => ab.ManuNo == it.ManuNo) + .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First(); + + accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + it.AddQuantity; + + //修改凌晨生成的日结存与总结存数据 + AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable() + .Where(ab => ab.MachineId.Equals(it.MachineId)) + .Where(ab => ab.Type == 4) + .Where(ab => ab.DrugId == Convert.ToInt32(it.DrugId)) + .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First(); + + accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + it.AddQuantity; + + SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand(); + + SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand(); + } + + return true; + }); + if (f.Data) + { + // 更新屏显库存 + //List singleChannels = record.FindAll(it => it.BoardType != 1); + List singleChannels = record.Where(it => it.BoardType == 5) + .GroupBy(it => new { it.DrawerNo, it.ColNo }) + .Select(it => + { + var ret = it.First(); + //ret.Quantity = it.Sum(itx => itx.Quantity); + //ret.AddQuantity = it.Sum(itx => itx.AddQuantity); + return ret; + }) + .ToList(); + if (singleChannels != null && singleChannels.Count > 0) + { + for (int i = 0; i < singleChannels.Count; i++) + { + //if (singleChannels[i].BoardType == 5) + //{ + List channelStockEffDate = SqlSugarHelper.Db.Queryable() + .Where(cs => cs.MachineId == singleChannels[i].MachineId) + .Where(cs => cs.DrawerNo == singleChannels[i].DrawerNo) + .Where(cs => cs.ColNo == singleChannels[i].ColNo) + .Where(cs => cs.Quantity > 0) + .OrderBy(cs => cs.EffDate).ToList(); + int totalQuantity = channelStockEffDate.Sum(it => it.Quantity); + + //将库位多批次的总库存数更新标签 + _portUtil.WriteQuantity(channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo, totalQuantity); + Thread.Sleep(200); + _portUtil.WriteChannelInfo(6, channelStockEffDate[0].EffDate == null ? "" : channelStockEffDate[0].EffDate, channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo); + Thread.Sleep(200); + _portUtil.WriteChannelInfo(5, channelStockEffDate[0].ManuNo, channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo); + Thread.Sleep(200); + _portUtil.ShowContent(channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo); + //} + } + } + + + + + AlertMsg alertMsg = new AlertMsg + { + Message = "操作完成,库存已更新", + Type = MsgType.SUCCESS, + }; + _eventAggregator.GetEvent().Publish(alertMsg); + } + if (!f.IsSuccess) + { + logger.Info($"调拨入库,库存更新失败!{f.ErrorMessage}"); + AlertMsg alertMsg = new AlertMsg + { + Message = "库存更新失败!", + Type = MsgType.ERROR, + }; + _eventAggregator.GetEvent().Publish(alertMsg); + } + Status = 0; + _isFinishClick = false; + + } + RequestData(); + } + + + public DelegateCommand CancleTake { get => new DelegateCommand(CancelTakeAction); } + + private void CancelTakeAction() + { + RequestData(); + Status = 0; + } + } +} diff --git a/DM_Weight/ViewModels/ApplyListWindowViewModel.cs b/DM_Weight/ViewModels/ApplyListWindowViewModel.cs index 05e4f06..16a0d6d 100644 --- a/DM_Weight/ViewModels/ApplyListWindowViewModel.cs +++ b/DM_Weight/ViewModels/ApplyListWindowViewModel.cs @@ -143,7 +143,7 @@ namespace DM_Weight.ViewModels CollectDrugLst = SqlSugarHelper.Db.Queryable() .Includes(cd => cd.drugPleaseClaim) .Includes(cd => cd.drugInfo) - .Where(cd => cd.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")) + .Where(cd => cd.DeptName.Equals(ConfigurationManager.AppSettings["department"] ?? "")) .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (cd) => cd.drugInfo.DrugId.ToString() == SearchValue) .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (cd) => cd.drugInfo.DrugName.Contains(SearchValue)) .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (cd) => cd.drugInfo.PyCode.Contains(SearchValue)) diff --git a/DM_Weight/ViewModels/InvoiceInWindowViewModel.cs b/DM_Weight/ViewModels/InvoiceInWindowViewModel.cs index 6345ba1..b4c2dc6 100644 --- a/DM_Weight/ViewModels/InvoiceInWindowViewModel.cs +++ b/DM_Weight/ViewModels/InvoiceInWindowViewModel.cs @@ -198,7 +198,9 @@ namespace DM_Weight.ViewModels { var invoices = SqlSugarHelper.Db.Queryable() .Includes(i => i.DrugInfo) - .InnerJoin(SqlSugarHelper.Db.Queryable().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrugId), (i, t) => i.DrugId == t.DrugId) + .InnerJoin(SqlSugarHelper.Db.Queryable().Where(cs => cs.DrawerType == 1) + .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")) + .GroupBy(cs => cs.DrugId), (i, t) => i.DrugId == t.DrugId) .Where(i => i.InvoiceNo == SelectedInvoice.InvoiceNo) .ToList(); foreach (var invoice in invoices) diff --git a/DM_Weight/ViewModels/RoleManagerWindowViewModel.cs b/DM_Weight/ViewModels/RoleManagerWindowViewModel.cs index 1ed829e..06a482e 100644 --- a/DM_Weight/ViewModels/RoleManagerWindowViewModel.cs +++ b/DM_Weight/ViewModels/RoleManagerWindowViewModel.cs @@ -269,12 +269,19 @@ namespace DM_Weight.ViewModels PremissionName = "请领列表", PremissionPath = "ApplyListWindow", }; + PremissionDm jiayao8 = new PremissionDm + { + Id = 28, + PremissionName = "请领入库", + PremissionPath = "ApplyInStockWindow", + }; jiayaoChild.Add(jiayao1); jiayaoChild.Add(jiayao2); jiayaoChild.Add(jiayao3); jiayaoChild.Add(jiayao4); jiayaoChild.Add(jiayao6); jiayaoChild.Add(jiayao7); + jiayaoChild.Add(jiayao8); jiayao.Children = jiayaoChild; defaultAll.Add(jiayao); #endregion diff --git a/DM_Weight/Views/ApplyInStockWindow.xaml b/DM_Weight/Views/ApplyInStockWindow.xaml new file mode 100644 index 0000000..9111056 --- /dev/null +++ b/DM_Weight/Views/ApplyInStockWindow.xaml @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DM_Weight/Views/ApplyInStockWindow.xaml.cs b/DM_Weight/Views/ApplyInStockWindow.xaml.cs new file mode 100644 index 0000000..f577d71 --- /dev/null +++ b/DM_Weight/Views/ApplyInStockWindow.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace DM_Weight.Views +{ + /// + /// ApplyInStockWindow.xaml 的交互逻辑 + /// + public partial class ApplyInStockWindow : UserControl + { + public ApplyInStockWindow() + { + InitializeComponent(); + } + } +}