parent
							
								
									8709bd0e3d
								
							
						
					
					
						commit
						db6eb0c339
					
				| 
						 | 
					@ -3,7 +3,7 @@
 | 
				
			||||||
  <connectionStrings>
 | 
					  <connectionStrings>
 | 
				
			||||||
	<!-- 数据库连接字符串 -->
 | 
						<!-- 数据库连接字符串 -->
 | 
				
			||||||
	<!--<add name="database" connectionString="server=127.0.0.1;database=wpf_dm_program;userid=root;password=qq1223" />-->
 | 
						<!--<add name="database" connectionString="server=127.0.0.1;database=wpf_dm_program;userid=root;password=qq1223" />-->
 | 
				
			||||||
	<add name="database" connectionString="server=127.0.0.1;port=3306;database=sanya_xianchang;userid=root;password=root" />
 | 
						<add name="database" connectionString="server=127.0.0.1;port=3306;database=sanya_xianchang2;userid=root;password=root" />
 | 
				
			||||||
  </connectionStrings>
 | 
					  </connectionStrings>
 | 
				
			||||||
	<!--<runtime>
 | 
						<!--<runtime>
 | 
				
			||||||
		--><!--配置之后,Appdomain.CurrentDomain.UnhandledException 事件的 IsTerminating 就变成了 false 啦!也就是说,程序并不会因为这次的异常而崩溃退出。--><!--
 | 
							--><!--配置之后,Appdomain.CurrentDomain.UnhandledException 事件的 IsTerminating 就变成了 false 啦!也就是说,程序并不会因为这次的异常而崩溃退出。--><!--
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -307,7 +307,7 @@ namespace DM_Weight.ViewModels
 | 
				
			||||||
                                                 .Includes(cl => cl.Drug, di => di.DrugManuNos)
 | 
					                                                 .Includes(cl => cl.Drug, di => di.DrugManuNos)
 | 
				
			||||||
                                                 //.Includes(cl => cl.channelStocks, dr => dr.DrugInfo, d => d.DrugManuNos)
 | 
					                                                 //.Includes(cl => cl.channelStocks, dr => dr.DrugInfo, d => d.DrugManuNos)
 | 
				
			||||||
                                                 .Where(cl => cl.DrugId == invoices[i].DrugId && cl.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
 | 
					                                                 .Where(cl => cl.DrugId == invoices[i].DrugId && cl.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
 | 
				
			||||||
                                                 .Where(cl=>cl.DrawerNo>2)  //调拨只能往周转库调住院药房3~16为周转库
 | 
					                                                 .Where(cl=>cl.DrawerNo>2&&cl.DrawerType==1)  //调拨只能往周转库调住院药房3~16为周转库
 | 
				
			||||||
                                                 .ToList();
 | 
					                                                 .ToList();
 | 
				
			||||||
                    ChannelList channelLst = channelL.Count > 0 ? channelL[0] : null;
 | 
					                    ChannelList channelLst = channelL.Count > 0 ? channelL[0] : null;
 | 
				
			||||||
                    if (channelLst == null || channelLst.Id is null)
 | 
					                    if (channelLst == null || channelLst.Id is null)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,12 +18,13 @@ using System.Linq;
 | 
				
			||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using System.Windows.Threading;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace DM_Weight.ViewModels
 | 
					namespace DM_Weight.ViewModels
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public class MultiOrderTakeDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
 | 
					    public class MultiOrderTakeDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel));
 | 
					        private readonly ILog logger = LogManager.GetLogger(typeof(MultiOrderTakeDialogViewModel));
 | 
				
			||||||
        public string Title => "多处方取药";
 | 
					        public string Title => "多处方取药";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -173,17 +174,22 @@ namespace DM_Weight.ViewModels
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public void OnDialogOpened(IDialogParameters parameters)
 | 
					        public void OnDialogOpened(IDialogParameters parameters)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            logger.Info("进入MultiOrderTakeDialogViewModel_查询数据");
 | 
				
			||||||
            _eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
					            _eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
				
			||||||
            OrderInfo = parameters.GetValue<ObservableCollection<OrderInfo>>("orderInfo");
 | 
					            OrderInfo = parameters.GetValue<ObservableCollection<OrderInfo>>("orderInfo");
 | 
				
			||||||
            MultiOrderNo += string.Join(",   ", OrderInfo.Select(o => o.OrderNo));
 | 
					            MultiOrderNo += string.Join(",   ", OrderInfo.Select(o => o.OrderNo)).Length > 60 ? string.Join(",   ", OrderInfo.Select(o => o.OrderNo)).Substring(0, 60) + "……" : string.Join(",   ", OrderInfo.Select(o => o.OrderNo));
 | 
				
			||||||
            RequestData();
 | 
					            RequestData();
 | 
				
			||||||
 | 
					            logger.Info($"结束MultiOrderTakeDialogViewModel_查询数据,处理处方{MultiOrderNo}");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public async void RequestData()
 | 
					        public async void RequestData()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            orderDetails = SqlSugarHelper.Db.Queryable<OrderDetail>()
 | 
					            orderDetails = SqlSugarHelper.Db.Queryable<OrderDetail>()
 | 
				
			||||||
              //.Includes<DrugInfo>(od => od.DrugInfo)
 | 
					              //.Includes<DrugInfo>(od => od.DrugInfo)
 | 
				
			||||||
              .InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrugId), (od, t) => od.DrugId == t.DrugId)
 | 
					              .InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
				
			||||||
 | 
					              .Where(cs => cs.DrawerType == 1)
 | 
				
			||||||
 | 
					              .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
 | 
				
			||||||
 | 
					              .GroupBy(cs => cs.DrugId), (od, t) => od.DrugId == t.DrugId)
 | 
				
			||||||
              .Where(od => OrderInfo.Select(o => o.OrderNo).Contains(od.OrderNo)).GroupBy(od => od.DrugId)
 | 
					              .Where(od => OrderInfo.Select(o => o.OrderNo).Contains(od.OrderNo)).GroupBy(od => od.DrugId)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              .Select(od => new OrderDetail { DrugId = od.DrugId, SetEffDate = od.SetEffDate, SetManuNo = od.SetManuNo, Quantity = SqlFunc.AggregateSum(od.Quantity) })
 | 
					              .Select(od => new OrderDetail { DrugId = od.DrugId, SetEffDate = od.SetEffDate, SetManuNo = od.SetManuNo, Quantity = SqlFunc.AggregateSum(od.Quantity) })
 | 
				
			||||||
| 
						 | 
					@ -348,7 +354,6 @@ namespace DM_Weight.ViewModels
 | 
				
			||||||
            _portUtil.DrawerNo = DrawerNo;
 | 
					            _portUtil.DrawerNo = DrawerNo;
 | 
				
			||||||
            _portUtil.Start();
 | 
					            _portUtil.Start();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        private bool _isFinishClick = false;
 | 
					        private bool _isFinishClick = false;
 | 
				
			||||||
        // 完成按钮
 | 
					        // 完成按钮
 | 
				
			||||||
        public DelegateCommand TakeFinish
 | 
					        public DelegateCommand TakeFinish
 | 
				
			||||||
| 
						 | 
					@ -361,183 +366,199 @@ namespace DM_Weight.ViewModels
 | 
				
			||||||
                    List<ChannelStock> record = ChannelStocks.FindAll(it => it.TakeQuantity > 0).ToList();
 | 
					                    List<ChannelStock> record = ChannelStocks.FindAll(it => it.TakeQuantity > 0).ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    //根据处方单数量分别更新处方状态、写记录信息
 | 
					                    //根据处方单数量分别更新处方状态、写记录信息
 | 
				
			||||||
                    if (OrderInfo.Count > 0)
 | 
					                    if (OrderInfo != null && OrderInfo.Count > 0)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
 | 
					                        UpdateOrderInfo(OrderInfo, record);
 | 
				
			||||||
                        for (int j = 0; j < OrderInfo.Count; j++)
 | 
					 | 
				
			||||||
                        {
 | 
					 | 
				
			||||||
                            string InvoiceId = OrderInfo[j].OrderNo;
 | 
					 | 
				
			||||||
                            var f = SqlSugarHelper.Db.UseTran(() =>
 | 
					 | 
				
			||||||
                            {
 | 
					 | 
				
			||||||
                                //SqlSugarHelper.Db.Updateable(new OrderInfo()
 | 
					 | 
				
			||||||
                                //{
 | 
					 | 
				
			||||||
                                //    DmStatus = 1,
 | 
					 | 
				
			||||||
                                //    OrderNo = OrderInfo[j].OrderNo
 | 
					 | 
				
			||||||
                                //}).UpdateColumns(it => new { it.DmStatus }).WhereColumns(it => new { it.OrderNo }).ExecuteCommand();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                //SqlSugarHelper.Db.Insertable(new OrderFinish()
 | 
					 | 
				
			||||||
                                //{
 | 
					 | 
				
			||||||
                                //    OrderNo = OrderInfo[j].OrderNo,
 | 
					 | 
				
			||||||
                                //    PatientId = OrderInfo[j].PatientId,
 | 
					 | 
				
			||||||
                                //    Pharmacy = OrderInfo[j].Pharmacy,
 | 
					 | 
				
			||||||
                                //    State = 1,
 | 
					 | 
				
			||||||
                                //    Operator = HomeWindowViewModel.Operator?.Nickname,
 | 
					 | 
				
			||||||
                                //});
 | 
					 | 
				
			||||||
                                for (int i = 0; i < record.Count; i++)
 | 
					 | 
				
			||||||
                                {
 | 
					 | 
				
			||||||
                                    int ordinalNum = SqlSugarHelper.Db.Queryable<MachineRecord>()
 | 
					 | 
				
			||||||
                                              .Where(mr => mr.OperationTime.ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd"))
 | 
					 | 
				
			||||||
                                              .Max(mr => mr.OrdinalNum);
 | 
					 | 
				
			||||||
                                    //处方中该药品明细
 | 
					 | 
				
			||||||
                                    OrderDetail orderDetail = SqlSugarHelper.Db.Queryable<OrderDetail>()
 | 
					 | 
				
			||||||
                                             .Where(od => od.OrderNo == OrderInfo[j].OrderNo && od.DrugId == record[i].DrugId && od.DetailStatus == 0)
 | 
					 | 
				
			||||||
                                                .GroupBy(od => new { od.DrugId, od.OrderId, od.SetManuNo }).Select(od => new OrderDetail
 | 
					 | 
				
			||||||
                                                {
 | 
					 | 
				
			||||||
                                                    OrderId = od.OrderId,
 | 
					 | 
				
			||||||
                                                    DrugId = od.DrugId,
 | 
					 | 
				
			||||||
                                                    Quantity = SqlFunc.AggregateSum(od.Quantity)
 | 
					 | 
				
			||||||
                                                }).First();
 | 
					 | 
				
			||||||
                                    if (orderDetail != null)
 | 
					 | 
				
			||||||
                                    {
 | 
					 | 
				
			||||||
                                        //已取药数量
 | 
					 | 
				
			||||||
                                        int hasTakeQuantity = SqlSugarHelper.Db.Queryable<MachineRecord>()
 | 
					 | 
				
			||||||
                                                 .Where(mr => mr.InvoiceId == InvoiceId && mr.DrugId == record[i].DrugId && mr.GetId == orderDetail.OrderId)
 | 
					 | 
				
			||||||
                                                 .Sum(mr => mr.Quantity);
 | 
					 | 
				
			||||||
                                        //处方中该药品取药数量
 | 
					 | 
				
			||||||
                                        int orderTakeQuantity = orderDetail.Quantity - hasTakeQuantity;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                        //当前药品库存
 | 
					 | 
				
			||||||
                                        int stockQuantity = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
					 | 
				
			||||||
                                                 .Where(cs => cs.MachineId == (record[i].MachineId)
 | 
					 | 
				
			||||||
                                                 && cs.DrugId == record[i].DrugId
 | 
					 | 
				
			||||||
                                                 && cs.ManuNo == record[i].ManuNo && cs.DrawerNo == record[i].DrawerNo
 | 
					 | 
				
			||||||
                                                 && cs.ColNo == record[i].ColNo).Select(cs => cs.Quantity).First();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                        //该处方没有这个药,跳出循环
 | 
					 | 
				
			||||||
                                        if (stockQuantity <= 0)
 | 
					 | 
				
			||||||
                                            continue;
 | 
					 | 
				
			||||||
                                        if (!(stockQuantity == orderTakeQuantity))
 | 
					 | 
				
			||||||
                                        {
 | 
					 | 
				
			||||||
                                            if (stockQuantity > orderTakeQuantity)
 | 
					 | 
				
			||||||
                                            {
 | 
					 | 
				
			||||||
                                                //record[i].TakeQuantity = record[i].TakeQuantity - orderTakeQuantity;
 | 
					 | 
				
			||||||
                                                record[i].TakeQuantity = orderTakeQuantity;
 | 
					 | 
				
			||||||
                                                record[i].Quantity = stockQuantity - orderTakeQuantity;
 | 
					 | 
				
			||||||
                                            }
 | 
					 | 
				
			||||||
                                            else if (stockQuantity < orderTakeQuantity)
 | 
					 | 
				
			||||||
                                            {
 | 
					 | 
				
			||||||
                                                record[i].TakeQuantity = stockQuantity;
 | 
					 | 
				
			||||||
                                                record[i].Quantity = 0;
 | 
					 | 
				
			||||||
                                            }
 | 
					 | 
				
			||||||
                                        }
 | 
					 | 
				
			||||||
                                        else
 | 
					 | 
				
			||||||
                                        {
 | 
					 | 
				
			||||||
                                            record[i].TakeQuantity = orderTakeQuantity;
 | 
					 | 
				
			||||||
                                            record[i].Quantity = stockQuantity - record[i].TakeQuantity;
 | 
					 | 
				
			||||||
                                        }
 | 
					 | 
				
			||||||
                                        ChannelStock it = record[i];
 | 
					 | 
				
			||||||
                                        // 更新数据 库存信息
 | 
					 | 
				
			||||||
                                        SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
					 | 
				
			||||||
                                        {
 | 
					 | 
				
			||||||
                                            Quantity = record[i].Quantity,
 | 
					 | 
				
			||||||
                                            ManuNo = it.ManuNo,
 | 
					 | 
				
			||||||
                                            EffDate = it.EffDate,
 | 
					 | 
				
			||||||
                                            Id = it.Id,
 | 
					 | 
				
			||||||
                                        }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
 | 
					 | 
				
			||||||
                                        // 获取更新完库存后的药品库存
 | 
					 | 
				
			||||||
                                        List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
					 | 
				
			||||||
                                            .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 = record[i].TakeQuantity,
 | 
					 | 
				
			||||||
                                            Type = 2,
 | 
					 | 
				
			||||||
                                            InvoiceId = InvoiceId,
 | 
					 | 
				
			||||||
                                            OrdinalNum = ordinalNum + 1,
 | 
					 | 
				
			||||||
                                            StockQuantity = nowChannels.Sum(it => it.Quantity),
 | 
					 | 
				
			||||||
                                            ManunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity),
 | 
					 | 
				
			||||||
                                            SupplierDept = ConfigurationManager.AppSettings["receiveDept"].ToString(),
 | 
					 | 
				
			||||||
                                            ReceiveDept = OrderInfo[j].DeptName,
 | 
					 | 
				
			||||||
                                            GetId = orderDetail.OrderId
 | 
					 | 
				
			||||||
                                        }).ExecuteCommand();
 | 
					 | 
				
			||||||
                                    }
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                                //更新处方状态
 | 
					 | 
				
			||||||
                                SqlSugarHelper.Db.Updateable(new OrderInfo()
 | 
					 | 
				
			||||||
                                {
 | 
					 | 
				
			||||||
                                    DmStatus = 1,
 | 
					 | 
				
			||||||
                                    OrderNo = OrderInfo[j].OrderNo
 | 
					 | 
				
			||||||
                                }).UpdateColumns(it => new { it.DmStatus }).WhereColumns(it => new { it.OrderNo }).ExecuteCommand();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                //更新处方明细状态为已取药1
 | 
					 | 
				
			||||||
                                List<OrderDetail> orderDetailLst = SqlSugarHelper.Db.Queryable<OrderDetail>().Where(od => od.OrderNo == OrderInfo[j].OrderNo && od.DetailStatus == 0).ToList();
 | 
					 | 
				
			||||||
                                if (orderDetailLst != null && orderDetailLst.Count > 0)
 | 
					 | 
				
			||||||
                                {
 | 
					 | 
				
			||||||
                                    orderDetailLst.ForEach(od => od.DetailStatus = 1);
 | 
					 | 
				
			||||||
                                    SqlSugarHelper.Db.Updateable(orderDetailLst).UpdateColumns(it => new { it.DetailStatus }).ExecuteCommand();
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                return true;
 | 
					 | 
				
			||||||
                            });
 | 
					 | 
				
			||||||
                            if (f.Data)
 | 
					 | 
				
			||||||
                            {
 | 
					 | 
				
			||||||
                logger.Info("f.Data");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                //});
 | 
					 | 
				
			||||||
                                // 更新屏显库存
 | 
					 | 
				
			||||||
                                List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType != 1);
 | 
					 | 
				
			||||||
                                if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 5)
 | 
					 | 
				
			||||||
                                {
 | 
					 | 
				
			||||||
                                    singleChannels.ForEach(it =>
 | 
					 | 
				
			||||||
                                    {
 | 
					 | 
				
			||||||
                                        _portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity - it.TakeQuantity);
 | 
					 | 
				
			||||||
                                        Thread.Sleep(200);
 | 
					 | 
				
			||||||
                                    });
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                                AlertMsg alertMsg = new AlertMsg
 | 
					 | 
				
			||||||
                                {
 | 
					 | 
				
			||||||
                                    Message = "抽屉取药完成,库存已更新",
 | 
					 | 
				
			||||||
                                    Type = MsgType.SUCCESS,
 | 
					 | 
				
			||||||
                                };
 | 
					 | 
				
			||||||
                                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                            if (!f.IsSuccess)
 | 
					 | 
				
			||||||
                            {
 | 
					 | 
				
			||||||
                                AlertMsg alertMsg = new AlertMsg
 | 
					 | 
				
			||||||
                                {
 | 
					 | 
				
			||||||
                                    Message = "抽屉取药完成,库存更新失败!",
 | 
					 | 
				
			||||||
                                    Type = MsgType.ERROR,
 | 
					 | 
				
			||||||
                                };
 | 
					 | 
				
			||||||
                                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        Status = 0;
 | 
					 | 
				
			||||||
                        _isFinishClick = false;
 | 
					 | 
				
			||||||
                        //RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
					 | 
				
			||||||
                        RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        private void UpdateOrderInfo(ObservableCollection<OrderInfo> orderInfo, List<ChannelStock> record)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var f = SqlSugarHelper.Db.UseTran(() =>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                logger.Info("UseTran");
 | 
				
			||||||
 | 
					                for (int j = 0; j < OrderInfo.Count; j++)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    logger.Info($"OrderInfo j-{j}");
 | 
				
			||||||
 | 
					                    string InvoiceId = OrderInfo[j].OrderNo;
 | 
				
			||||||
 | 
					                    for (int i = 0; i < record.Count; i++)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        logger.Info($"record j-{i}");
 | 
				
			||||||
 | 
					                        List<OrderDetail> orderDetails = SqlSugarHelper.Db.Queryable<OrderDetail>()
 | 
				
			||||||
 | 
					                                     .Where(od => od.OrderNo == OrderInfo[j].OrderNo && od.DrugId == record[i].DrugId && od.DetailStatus == 0).ToList();
 | 
				
			||||||
 | 
					                        if (orderDetails == null || orderDetails.Count <= 0)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            logger.Info($"处方{OrderInfo[j].OrderNo}下无药品{record[i].DrugId},或detail_status字段不为 0");
 | 
				
			||||||
 | 
					                            continue;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        logger.Info($"orderDetails");
 | 
				
			||||||
 | 
					                        OrderDetail orderDetail = orderDetails.FirstOrDefault();
 | 
				
			||||||
 | 
					                        orderDetail.Quantity = orderDetails.Sum(it => it.Quantity);
 | 
				
			||||||
 | 
					                        //处方中该药品明细
 | 
				
			||||||
 | 
					                        //OrderDetail orderDetail = SqlSugarHelper.Db.Queryable<OrderDetail>()
 | 
				
			||||||
 | 
					                        //             .Where(od => od.OrderNo == OrderInfo[j].OrderNo && od.DrugId == record[i].DrugId && od.DetailStatus == 0)
 | 
				
			||||||
 | 
					                        //                .GroupBy(od => new { od.DrugId, od.OrderId }).Select(od => new OrderDetail
 | 
				
			||||||
 | 
					                        //                {
 | 
				
			||||||
 | 
					                        //                    OrderId = od.OrderId,
 | 
				
			||||||
 | 
					                        //                    DrugId = od.DrugId,
 | 
				
			||||||
 | 
					                        //                    Quantity = SqlFunc.AggregateSum(od.Quantity)
 | 
				
			||||||
 | 
					                        //                }).First();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        int ordinalNum = SqlSugarHelper.Db.Queryable<MachineRecord>()
 | 
				
			||||||
 | 
					                                      .Where(mr => mr.OperationTime.ToString("yyyy-MM-dd") == DateTime.Now.ToString("yyyy-MM-dd"))
 | 
				
			||||||
 | 
					                                      .Max(mr => mr.OrdinalNum);
 | 
				
			||||||
 | 
					                        logger.Info($"ordinalNum{ordinalNum}");
 | 
				
			||||||
 | 
					                        //已取药数量
 | 
				
			||||||
 | 
					                        int hasTakeQuantity = SqlSugarHelper.Db.Queryable<MachineRecord>()
 | 
				
			||||||
 | 
					                                     .Where(mr => mr.InvoiceId == InvoiceId && mr.DrugId == record[i].DrugId && mr.GetId == orderDetail.OrderId)
 | 
				
			||||||
 | 
					                                     .Sum(mr => mr.Quantity);
 | 
				
			||||||
 | 
					                        //处方中该药品取药数量
 | 
				
			||||||
 | 
					                        int orderTakeQuantity = orderDetail.Quantity - hasTakeQuantity;
 | 
				
			||||||
 | 
					                        logger.Info($"orderTakeQuantity{orderTakeQuantity}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        //当前药品库存
 | 
				
			||||||
 | 
					                        int stockQuantity = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
				
			||||||
 | 
					                                     .Where(cs => cs.MachineId == (record[i].MachineId)
 | 
				
			||||||
 | 
					                                     && cs.DrugId == record[i].DrugId
 | 
				
			||||||
 | 
					                                     && cs.ManuNo == record[i].ManuNo && cs.DrawerNo == record[i].DrawerNo
 | 
				
			||||||
 | 
					                                     && cs.ColNo == record[i].ColNo).Select(cs => cs.Quantity).First();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        logger.Info($"stockQuantity{stockQuantity}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        //该处方没有这个药,跳出循环
 | 
				
			||||||
 | 
					                        if (stockQuantity <= 0 || orderTakeQuantity <= 0)
 | 
				
			||||||
 | 
					                            continue;
 | 
				
			||||||
 | 
					                        if (!(stockQuantity == orderTakeQuantity))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            if (stockQuantity > orderTakeQuantity)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                //record[i].TakeQuantity = record[i].TakeQuantity - orderTakeQuantity;
 | 
				
			||||||
 | 
					                                record[i].TakeQuantity = orderTakeQuantity;
 | 
				
			||||||
 | 
					                                record[i].Quantity = stockQuantity - orderTakeQuantity;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            else if (stockQuantity < orderTakeQuantity)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                record[i].TakeQuantity = stockQuantity;
 | 
				
			||||||
 | 
					                                record[i].Quantity = 0;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            record[i].TakeQuantity = orderTakeQuantity;
 | 
				
			||||||
 | 
					                            record[i].Quantity = stockQuantity - record[i].TakeQuantity;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        logger.Info($"record{stockQuantity}");
 | 
				
			||||||
 | 
					                        ChannelStock it = record[i];
 | 
				
			||||||
 | 
					                        // 更新数据 库存信息
 | 
				
			||||||
 | 
					                        SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            Quantity = record[i].Quantity,
 | 
				
			||||||
 | 
					                            ManuNo = it.ManuNo,
 | 
				
			||||||
 | 
					                            EffDate = it.EffDate,
 | 
				
			||||||
 | 
					                            Id = it.Id,
 | 
				
			||||||
 | 
					                        }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
 | 
				
			||||||
 | 
					                        logger.Info("更新数据 库存信息");
 | 
				
			||||||
 | 
					                        // 获取更新完库存后的药品库存
 | 
				
			||||||
 | 
					                        List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
				
			||||||
 | 
					                                .Where(cs => cs.MachineId.Equals(it.MachineId))
 | 
				
			||||||
 | 
					                                .Where(cs => cs.DrugId.Equals(it.DrugId))
 | 
				
			||||||
 | 
					                                .Where(cs => cs.DrawerType == 1)
 | 
				
			||||||
 | 
					                                .ToList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        logger.Info("查询当前库存");
 | 
				
			||||||
 | 
					                        // 保存数据 出库记录
 | 
				
			||||||
 | 
					                        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 = orderDetail.Quantity,//record[i].TakeQuantity,
 | 
				
			||||||
 | 
					                            Type = 2,
 | 
				
			||||||
 | 
					                            InvoiceId = InvoiceId,
 | 
				
			||||||
 | 
					                            OrdinalNum = ordinalNum + 1,
 | 
				
			||||||
 | 
					                            StockQuantity = nowChannels.Sum(it => it.Quantity),
 | 
				
			||||||
 | 
					                            ManunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity),
 | 
				
			||||||
 | 
					                            SupplierDept = ConfigurationManager.AppSettings["receiveDept"].ToString(),
 | 
				
			||||||
 | 
					                            ReceiveDept = OrderInfo[j].DeptName,
 | 
				
			||||||
 | 
					                            GetId = orderDetail.OrderId
 | 
				
			||||||
 | 
					                        }).ExecuteCommand();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        logger.Info("Insertable MachineRecord");
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    //更新处方状态
 | 
				
			||||||
 | 
					                    SqlSugarHelper.Db.Updateable(new OrderInfo()
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        DmStatus = 1,
 | 
				
			||||||
 | 
					                        OrderNo = OrderInfo[j].OrderNo
 | 
				
			||||||
 | 
					                    }).UpdateColumns(it => new { it.DmStatus }).WhereColumns(it => new { it.OrderNo }).ExecuteCommand();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    logger.Info("更新处方");
 | 
				
			||||||
 | 
					                    //更新处方明细状态为已取药1
 | 
				
			||||||
 | 
					                    List<OrderDetail> orderDetailLst = SqlSugarHelper.Db.Queryable<OrderDetail>().Where(od => od.OrderNo == OrderInfo[j].OrderNo && od.DetailStatus == 0).ToList();
 | 
				
			||||||
 | 
					                    if (orderDetailLst != null && orderDetailLst.Count > 0)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        orderDetailLst.ForEach(od => od.DetailStatus = 1);
 | 
				
			||||||
 | 
					                        SqlSugarHelper.Db.Updateable(orderDetailLst).UpdateColumns(it => new { it.DetailStatus }).ExecuteCommand();
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        logger.Info($"处方{OrderInfo[j].OrderNo}药品明细状态未更新");
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    logger.Info("处方明细状态为已取药1");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return true;
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            if (f.Data)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                logger.Info("f.Data");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //});
 | 
				
			||||||
 | 
					                // 更新屏显库存
 | 
				
			||||||
 | 
					                List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType != 1);
 | 
				
			||||||
 | 
					                if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 5)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    singleChannels.ForEach(it =>
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        _portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity - it.TakeQuantity);
 | 
				
			||||||
 | 
					                        Thread.Sleep(200);
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                AlertMsg alertMsg = new AlertMsg
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Message = "抽屉取药完成,库存已更新",
 | 
				
			||||||
 | 
					                    Type = MsgType.SUCCESS,
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (!f.IsSuccess)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    AlertMsg alertMsg = new AlertMsg
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        Message = "抽屉取药完成,库存更新失败!",
 | 
				
			||||||
 | 
					                        Type = MsgType.ERROR,
 | 
				
			||||||
 | 
					                    };
 | 
				
			||||||
 | 
					                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
				
			||||||
 | 
					                }));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            Status = 0;
 | 
				
			||||||
 | 
					            _isFinishClick = false;
 | 
				
			||||||
 | 
					            //RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
				
			||||||
 | 
					            RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        public long CurrentTimeMillis()
 | 
					        public long CurrentTimeMillis()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
 | 
					            return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,8 @@
 | 
				
			||||||
using DM_Weight.Models;
 | 
					using DM_Weight.Models;
 | 
				
			||||||
using DM_Weight.msg;
 | 
					using DM_Weight.msg;
 | 
				
			||||||
using DM_Weight.util;
 | 
					using DM_Weight.util;
 | 
				
			||||||
 | 
					using log4net;
 | 
				
			||||||
 | 
					using log4net.Repository.Hierarchy;
 | 
				
			||||||
using Prism.Commands;
 | 
					using Prism.Commands;
 | 
				
			||||||
using Prism.Events;
 | 
					using Prism.Events;
 | 
				
			||||||
using Prism.Mvvm;
 | 
					using Prism.Mvvm;
 | 
				
			||||||
| 
						 | 
					@ -299,6 +301,7 @@ namespace DM_Weight.ViewModels
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private readonly ILog logger = LogManager.GetLogger(typeof(MultiOrderTakeDrugWindowViewModel));
 | 
				
			||||||
        public void RequestData()
 | 
					        public void RequestData()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            OrderInfos.Clear();
 | 
					            OrderInfos.Clear();
 | 
				
			||||||
| 
						 | 
					@ -343,12 +346,14 @@ namespace DM_Weight.ViewModels
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            //TotalCount = totalCount;
 | 
					            //TotalCount = totalCount;
 | 
				
			||||||
            //PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
 | 
					            //PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
 | 
				
			||||||
 | 
					            logger.Info("结束MultiOrderTakeDrugWindowViewModel_查询数据");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //接收导航传过来的参数  现在是在此处初始化了表格数据
 | 
					        //接收导航传过来的参数  现在是在此处初始化了表格数据
 | 
				
			||||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
					        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            logger.Info("进入MultiOrderTakeDrugWindowViewModel_查询数据");
 | 
				
			||||||
            //_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
					            //_eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
				
			||||||
            RequestData();
 | 
					            RequestData();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,7 @@
 | 
				
			||||||
            <Grid.RowDefinitions>
 | 
					            <Grid.RowDefinitions>
 | 
				
			||||||
                <RowDefinition Height="Auto" />
 | 
					                <RowDefinition Height="Auto" />
 | 
				
			||||||
                <RowDefinition Height="50" />
 | 
					                <RowDefinition Height="50" />
 | 
				
			||||||
                <RowDefinition Height="Auto" />
 | 
					                <RowDefinition Height="450" />
 | 
				
			||||||
                <RowDefinition Height="Auto" />
 | 
					                <RowDefinition Height="Auto" />
 | 
				
			||||||
            </Grid.RowDefinitions>
 | 
					            </Grid.RowDefinitions>
 | 
				
			||||||
            <Grid Background="#03a9f4" Grid.Row="0">
 | 
					            <Grid Background="#03a9f4" Grid.Row="0">
 | 
				
			||||||
| 
						 | 
					@ -149,7 +149,7 @@
 | 
				
			||||||
                            Content="取药"
 | 
					                            Content="取药"
 | 
				
			||||||
                            Command="{Binding OpenDrawer}">
 | 
					                            Command="{Binding OpenDrawer}">
 | 
				
			||||||
                    </Button>-->
 | 
					                    </Button>-->
 | 
				
			||||||
                    <TextBox  Margin="6"  Width="110"
 | 
					                    <TextBox  Margin="0 2 6 2"  Width="110"
 | 
				
			||||||
                    Style="{StaticResource MaterialDesignOutlinedTextBox}"
 | 
					                    Style="{StaticResource MaterialDesignOutlinedTextBox}"
 | 
				
			||||||
                    VerticalAlignment="Top" Text="{Binding ReceivePerson}"
 | 
					                    VerticalAlignment="Top" Text="{Binding ReceivePerson}"
 | 
				
			||||||
                    materialDesign:HintAssist.Hint="取药人(科室)" />
 | 
					                    materialDesign:HintAssist.Hint="取药人(科室)" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue