状态转换添加 //确认核销、刷新
录像机添加监测日志 channel_stock添加dm_machine_record表id值 drug_info表添加药品类型字段 machinerecord添加已核销数量、核销数量 orderinfo添加machineId 添加SurgicalSchedule实体 添加SurgicalScheduleDetail实体 添加手术核销、还空瓶销毁页面
This commit is contained in:
		
							parent
							
								
									17a6ddd0da
								
							
						
					
					
						commit
						0d2d10deab
					
				| 
						 | 
				
			
			@ -33,7 +33,7 @@
 | 
			
		|||
		<!-- 登录顺序,指定先登录的人的名称有效值,只有在登录模式等于2时才会生效; 发药人:【operator】审核人:【reviewer】 -->
 | 
			
		||||
		<add key="firstLogin" value="operator" />
 | 
			
		||||
		<!-- 按处方还药或者按取药记录还药 1:处方(ReturnDrugWindow2)2:药品(ReturnDrugWindow)-->
 | 
			
		||||
		<add key="returnDrugMode" value="1" />
 | 
			
		||||
		<add key="returnDrugMode" value="2" />
 | 
			
		||||
		<!-- 自动退出时间,单位秒,为0时不自动退出 -->
 | 
			
		||||
		<add key="autoExit" value="0"/>
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +60,7 @@
 | 
			
		|||
		
 | 
			
		||||
		
 | 
			
		||||
		<!--是否有冰箱抽屉0无,1有一个,2两个-->
 | 
			
		||||
		<add key="hasFridge" value="1"/>
 | 
			
		||||
		<add key="hasFridge" value="0"/>
 | 
			
		||||
		<!-- 冰箱的串口号 -->
 | 
			
		||||
		<add key="FridgePortPath" value="COM7" />
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,6 +44,7 @@ namespace DM_Weight
 | 
			
		|||
 | 
			
		||||
        protected override Window CreateShell()
 | 
			
		||||
        {
 | 
			
		||||
            logger.Info("进入APP-CreateShell");
 | 
			
		||||
            //UI线程未捕获异常处理事件
 | 
			
		||||
            this.DispatcherUnhandledException += OnDispatcherUnhandledException;
 | 
			
		||||
            //Task线程内未捕获异常处理事件
 | 
			
		||||
| 
						 | 
				
			
			@ -51,6 +52,7 @@ namespace DM_Weight
 | 
			
		|||
            //多线程异常
 | 
			
		||||
            AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
 | 
			
		||||
 | 
			
		||||
            logger.Info("进入APP-CreateShell-2");
 | 
			
		||||
            return Container.Resolve<MainWindow>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -86,6 +88,8 @@ namespace DM_Weight
 | 
			
		|||
 | 
			
		||||
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            logger.Info("进入APP-RegisterTypes");
 | 
			
		||||
            // 注入日志
 | 
			
		||||
            XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));
 | 
			
		||||
            //containerRegistry.RegisterInstance<ILog>(LogManager.GetLogger(""));
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +99,7 @@ namespace DM_Weight
 | 
			
		|||
            // 指纹机工具
 | 
			
		||||
            containerRegistry.RegisterSingleton<FingerprintUtil>();
 | 
			
		||||
            // 组态屏工具
 | 
			
		||||
            containerRegistry.RegisterSingleton<ScreenUtil>();
 | 
			
		||||
            //containerRegistry.RegisterSingleton<ScreenUtil>();
 | 
			
		||||
            // 录像机
 | 
			
		||||
            containerRegistry.RegisterSingleton<CHKFunction>();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -144,6 +148,14 @@ namespace DM_Weight
 | 
			
		|||
            containerRegistry.RegisterDialog<MultiOrderTakeDialog>();
 | 
			
		||||
            containerRegistry.RegisterForNavigation<MultiOrderTakeDialog,MultiOrderTakeDialogViewModel>();
 | 
			
		||||
 | 
			
		||||
            //手术排程
 | 
			
		||||
            containerRegistry.RegisterForNavigation<SurgeryTakeWindow, SurgeryTakeWindowViewModel>();
 | 
			
		||||
            containerRegistry.RegisterDialog<SurgeryTakeDialog>();
 | 
			
		||||
            containerRegistry.RegisterForNavigation<SurgeryTakeDialog, SurgeryTakeDialogViewModel>();
 | 
			
		||||
            containerRegistry.RegisterDialog<AddSurgeryDialog>();
 | 
			
		||||
            containerRegistry.RegisterForNavigation<AddSurgeryDialog, AddSurgeryDialogViewModel>();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            #endregion
 | 
			
		||||
 | 
			
		||||
            #region 加药
 | 
			
		||||
| 
						 | 
				
			
			@ -189,12 +201,18 @@ namespace DM_Weight
 | 
			
		|||
            containerRegistry.RegisterForNavigation<OrderReturnDialog, OrderReturnDialogViewModel>();
 | 
			
		||||
            // 还空瓶页面
 | 
			
		||||
            containerRegistry.RegisterForNavigation<ReturnEmptyWindow, ReturnEmptyWindowViewModel>();
 | 
			
		||||
 | 
			
		||||
            //空瓶销毁页面
 | 
			
		||||
            containerRegistry.RegisterForNavigation<ReturnEmptyDestoryWindow, ReturnEmptyDestoryWindowViewModel>();
 | 
			
		||||
 | 
			
		||||
            // 归还空瓶模态框
 | 
			
		||||
            containerRegistry.RegisterDialog<ReturnEmptyDialog>();
 | 
			
		||||
            containerRegistry.RegisterForNavigation<ReturnEmptyDialog, ReturnEmptyDialogViewModel>();
 | 
			
		||||
            // 空瓶销毁模态框
 | 
			
		||||
            containerRegistry.RegisterDialog<DestoryEmptyDialog>();
 | 
			
		||||
            containerRegistry.RegisterForNavigation<DestoryEmptyDialog, DestoryEmptyDialogViewModel>();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            #endregion
 | 
			
		||||
 | 
			
		||||
            #region 库存管理
 | 
			
		||||
| 
						 | 
				
			
			@ -245,6 +263,8 @@ namespace DM_Weight
 | 
			
		|||
 | 
			
		||||
            containerRegistry.RegisterForNavigation<ShowMessageDialog, ShowMessageDialogViewModel>();
 | 
			
		||||
 | 
			
		||||
            logger.Info("结束APP-RegisterTypes");
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,6 +73,18 @@ namespace DM_Weight.Converter
 | 
			
		|||
                    return Visibility.Collapsed;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            //确认核销、刷新
 | 
			
		||||
            if (parameter.ToString().Equals("ConfirmVsRefresh"))
 | 
			
		||||
            {
 | 
			
		||||
                if (status == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    return Visibility.Visible;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    return Visibility.Collapsed;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return Visibility.Collapsed;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,142 +32,200 @@ namespace DM_Weight.HIKVISION
 | 
			
		|||
 | 
			
		||||
        public CHKFunction()
 | 
			
		||||
        {
 | 
			
		||||
            logger.Info("CHKFunction");
 | 
			
		||||
            HIKInit();
 | 
			
		||||
            HIKLogin();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool HIKInit()
 | 
			
		||||
        {
 | 
			
		||||
            m_bInitSDK = CHCNetSDK.NET_DVR_Init();
 | 
			
		||||
            if (m_bInitSDK == false)
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                //MessageBox.Show("NET_DVR_Init error!");
 | 
			
		||||
                //return;
 | 
			
		||||
                logger.Info("NET_DVR_Init error!");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                logger.Info("HIKInit");
 | 
			
		||||
 | 
			
		||||
                m_bInitSDK = CHCNetSDK.NET_DVR_Init();
 | 
			
		||||
 | 
			
		||||
                logger.Info($"HIKInit-{m_bInitSDK}");
 | 
			
		||||
                if (m_bInitSDK == false)
 | 
			
		||||
                {
 | 
			
		||||
                    //MessageBox.Show("NET_DVR_Init error!");
 | 
			
		||||
                    //return;
 | 
			
		||||
                    logger.Info("NET_DVR_Init error!");
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    //保存SDK日志 To save the SDK log
 | 
			
		||||
                    CHCNetSDK.NET_DVR_SetLogToFile(3, "C:\\SdkLog\\", true);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                //保存SDK日志 To save the SDK log
 | 
			
		||||
                CHCNetSDK.NET_DVR_SetLogToFile(3, "C:\\SdkLog\\", true);
 | 
			
		||||
                logger.Info($"HIKInit Exception:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            return m_bInitSDK;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int HIKLogin()
 | 
			
		||||
        {
 | 
			
		||||
            string ip = ReadApp.ReadAppSetting("HIKIP");
 | 
			
		||||
            string port = ReadApp.ReadAppSetting("HIKPort");
 | 
			
		||||
            string userName = ReadApp.ReadAppSetting("HIKUser");
 | 
			
		||||
            string password = ReadApp.ReadAppSetting("HIKPassword");
 | 
			
		||||
            if (HKUserId < 0)
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                struLogInfo = new CHCNetSDK.NET_DVR_USER_LOGIN_INFO();
 | 
			
		||||
 | 
			
		||||
                //设备IP地址或者域名
 | 
			
		||||
                byte[] byIP = System.Text.Encoding.Default.GetBytes(ip);
 | 
			
		||||
                struLogInfo.sDeviceAddress = new byte[129];
 | 
			
		||||
                byIP.CopyTo(struLogInfo.sDeviceAddress, 0);
 | 
			
		||||
 | 
			
		||||
                //设备用户名
 | 
			
		||||
                byte[] byUserName = System.Text.Encoding.Default.GetBytes(userName);
 | 
			
		||||
                struLogInfo.sUserName = new byte[64];
 | 
			
		||||
                byUserName.CopyTo(struLogInfo.sUserName, 0);
 | 
			
		||||
 | 
			
		||||
                //设备密码
 | 
			
		||||
                byte[] byPassword = System.Text.Encoding.Default.GetBytes(password);
 | 
			
		||||
                struLogInfo.sPassword = new byte[64];
 | 
			
		||||
                byPassword.CopyTo(struLogInfo.sPassword, 0);
 | 
			
		||||
 | 
			
		||||
                struLogInfo.wPort = ushort.Parse(port);//设备服务端口号
 | 
			
		||||
 | 
			
		||||
                //if (LoginCallBack == null)
 | 
			
		||||
                //{
 | 
			
		||||
                //    LoginCallBack = new CHCNetSDK.LOGINRESULTCALLBACK(cbLoginCallBack);//注册回调函数                    
 | 
			
		||||
                //}
 | 
			
		||||
                //struLogInfo.cbLoginResult = LoginCallBack;
 | 
			
		||||
                struLogInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是 
 | 
			
		||||
 | 
			
		||||
                DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V40();
 | 
			
		||||
 | 
			
		||||
                //登录设备 Login the device
 | 
			
		||||
                HKUserId = CHCNetSDK.NET_DVR_Login_V40(ref struLogInfo, ref DeviceInfo);
 | 
			
		||||
                logger.Info("HIKLogin");
 | 
			
		||||
                string ip = ReadApp.ReadAppSetting("HIKIP");
 | 
			
		||||
                string port = ReadApp.ReadAppSetting("HIKPort");
 | 
			
		||||
                string userName = ReadApp.ReadAppSetting("HIKUser");
 | 
			
		||||
                string password = ReadApp.ReadAppSetting("HIKPassword");
 | 
			
		||||
                if (HKUserId < 0)
 | 
			
		||||
                {
 | 
			
		||||
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
 | 
			
		||||
                    str = "NET_DVR_Login_V40 failed, error code= " + iLastErr; //登录失败,输出错误号
 | 
			
		||||
                    logger.Info(str);
 | 
			
		||||
 | 
			
		||||
                    struLogInfo = new CHCNetSDK.NET_DVR_USER_LOGIN_INFO();
 | 
			
		||||
 | 
			
		||||
                    //设备IP地址或者域名
 | 
			
		||||
                    byte[] byIP = System.Text.Encoding.Default.GetBytes(ip);
 | 
			
		||||
                    struLogInfo.sDeviceAddress = new byte[129];
 | 
			
		||||
                    byIP.CopyTo(struLogInfo.sDeviceAddress, 0);
 | 
			
		||||
 | 
			
		||||
                    //设备用户名
 | 
			
		||||
                    byte[] byUserName = System.Text.Encoding.Default.GetBytes(userName);
 | 
			
		||||
                    struLogInfo.sUserName = new byte[64];
 | 
			
		||||
                    byUserName.CopyTo(struLogInfo.sUserName, 0);
 | 
			
		||||
 | 
			
		||||
                    //设备密码
 | 
			
		||||
                    byte[] byPassword = System.Text.Encoding.Default.GetBytes(password);
 | 
			
		||||
                    struLogInfo.sPassword = new byte[64];
 | 
			
		||||
                    byPassword.CopyTo(struLogInfo.sPassword, 0);
 | 
			
		||||
 | 
			
		||||
                    struLogInfo.wPort = ushort.Parse(port);//设备服务端口号
 | 
			
		||||
 | 
			
		||||
                    //if (LoginCallBack == null)
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    LoginCallBack = new CHCNetSDK.LOGINRESULTCALLBACK(cbLoginCallBack);//注册回调函数                    
 | 
			
		||||
                    //}
 | 
			
		||||
                    //struLogInfo.cbLoginResult = LoginCallBack;
 | 
			
		||||
                    struLogInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是 
 | 
			
		||||
 | 
			
		||||
                    DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V40();
 | 
			
		||||
 | 
			
		||||
                    //登录设备 Login the device
 | 
			
		||||
                    HKUserId = CHCNetSDK.NET_DVR_Login_V40(ref struLogInfo, ref DeviceInfo);
 | 
			
		||||
                    if (HKUserId < 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        iLastErr = CHCNetSDK.NET_DVR_GetLastError();
 | 
			
		||||
                        str = "NET_DVR_Login_V40 failed, error code= " + iLastErr; //登录失败,输出错误号
 | 
			
		||||
                        logger.Info(str);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        //登录成功
 | 
			
		||||
                        //MessageBox.Show("Login Success!");
 | 
			
		||||
                        logger.Info("Login Success!");
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    //登录成功
 | 
			
		||||
                    //MessageBox.Show("Login Success!");
 | 
			
		||||
                    logger.Info("Login Success!");
 | 
			
		||||
                }
 | 
			
		||||
                    //注销登录 Logout the device
 | 
			
		||||
                    if (m_lRealHandle >= 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        //MessageBox.Show("Please stop live view firstly");
 | 
			
		||||
                        logger.Info("Please stop live view firstly");
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (!CHCNetSDK.NET_DVR_Logout(HKUserId))
 | 
			
		||||
                    {
 | 
			
		||||
                        iLastErr = CHCNetSDK.NET_DVR_GetLastError();
 | 
			
		||||
                        str = "NET_DVR_Logout failed, error code= " + iLastErr;
 | 
			
		||||
                        logger.Info(str);
 | 
			
		||||
                    }
 | 
			
		||||
                    HKUserId = -1;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                //注销登录 Logout the device
 | 
			
		||||
                if (m_lRealHandle >= 0)
 | 
			
		||||
                {
 | 
			
		||||
                    //MessageBox.Show("Please stop live view firstly");
 | 
			
		||||
                    logger.Info("Please stop live view firstly");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (!CHCNetSDK.NET_DVR_Logout(HKUserId))
 | 
			
		||||
                {
 | 
			
		||||
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
 | 
			
		||||
                    str = "NET_DVR_Logout failed, error code= " + iLastErr;
 | 
			
		||||
                    logger.Info(str);
 | 
			
		||||
                }
 | 
			
		||||
                HKUserId = -1;
 | 
			
		||||
                logger.Info($"HIKLogin Exception:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            return HKUserId;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void HIKLoginOut()
 | 
			
		||||
        {
 | 
			
		||||
            if (m_lRealHandle >= 0)
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                bool stopRealPlay = CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle);
 | 
			
		||||
                logger.Info($"录像机NET_DVR_StopRealPlay接口返回{stopRealPlay}");
 | 
			
		||||
 | 
			
		||||
                if (m_lRealHandle >= 0)
 | 
			
		||||
                {
 | 
			
		||||
                    bool stopRealPlay = CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle);
 | 
			
		||||
                    logger.Info($"录像机NET_DVR_StopRealPlay接口返回{stopRealPlay}");
 | 
			
		||||
                }
 | 
			
		||||
                if (HKUserId >= 0)
 | 
			
		||||
                {
 | 
			
		||||
                    bool logout = CHCNetSDK.NET_DVR_Logout(HKUserId);
 | 
			
		||||
                    logger.Info($"录像机NET_DVR_Logout接口返回{logout}");
 | 
			
		||||
                }
 | 
			
		||||
                if (m_bInitSDK == true)
 | 
			
		||||
                {
 | 
			
		||||
                    bool cleanUp = CHCNetSDK.NET_DVR_Cleanup();
 | 
			
		||||
                    logger.Info($"录像机NET_DVR_Cleanup接口返回{cleanUp}");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            if (HKUserId >= 0)
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                bool logout = CHCNetSDK.NET_DVR_Logout(HKUserId);
 | 
			
		||||
                logger.Info($"录像机NET_DVR_Logout接口返回{logout}");
 | 
			
		||||
            }
 | 
			
		||||
            if (m_bInitSDK == true)
 | 
			
		||||
            {
 | 
			
		||||
                bool cleanUp = CHCNetSDK.NET_DVR_Cleanup();
 | 
			
		||||
                logger.Info($"录像机NET_DVR_Cleanup接口返回{cleanUp}");
 | 
			
		||||
                logger.Info($"HIKLoginOut Exception{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool HIKStartDVRRecord()
 | 
			
		||||
        {
 | 
			
		||||
            bool isStart = CHCNetSDK.NET_DVR_StartDVRRecord(HKUserId, 0xffff, 0);
 | 
			
		||||
            logger.Info($"录像机NET_DVR_StartDVRRecord接口返回{isStart}");
 | 
			
		||||
            bool isStart = false;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                isStart = CHCNetSDK.NET_DVR_StartDVRRecord(HKUserId, 0xffff, 0);
 | 
			
		||||
                logger.Info($"录像机NET_DVR_StartDVRRecord接口返回{isStart}");
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"HIKStartDVRRecord Exception{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            return isStart;
 | 
			
		||||
        }
 | 
			
		||||
        public bool HIKStopDVRRecord()
 | 
			
		||||
        {
 | 
			
		||||
            bool isStop = CHCNetSDK.NET_DVR_StopDVRRecord(HKUserId, 0xffff);
 | 
			
		||||
            logger.Info($"录像机NET_DVR_StopDVRRecord接口返回{isStop}");
 | 
			
		||||
            bool isStop = false;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                isStop = CHCNetSDK.NET_DVR_StopDVRRecord(HKUserId, 0xffff);
 | 
			
		||||
                logger.Info($"录像机NET_DVR_StopDVRRecord接口返回{isStop}");
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"HIKStopDVRRecord Exception{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            return isStop;
 | 
			
		||||
        }
 | 
			
		||||
        public void HIK_DVR_TIME()
 | 
			
		||||
        {
 | 
			
		||||
            UInt32 dwReturn = 0;
 | 
			
		||||
            Int32 nSize = Marshal.SizeOf(m_struTimeCfg);
 | 
			
		||||
            IntPtr ptrTimeCfg = Marshal.AllocHGlobal(nSize);
 | 
			
		||||
            Marshal.StructureToPtr(m_struTimeCfg, ptrTimeCfg, false);
 | 
			
		||||
            if (CHCNetSDK.NET_DVR_GetDVRConfig(HKUserId, CHCNetSDK.NET_DVR_GET_TIMECFG, -1, ptrTimeCfg, (UInt32)nSize, ref dwReturn))
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                m_struTimeCfg = (CHCNetSDK.NET_DVR_TIME)Marshal.PtrToStructure(ptrTimeCfg, typeof(CHCNetSDK.NET_DVR_TIME));
 | 
			
		||||
                logger.Info($"录像机时间接口{Convert.ToString(m_struTimeCfg.dwYear)}- {Convert.ToString(m_struTimeCfg.dwMonth)}- {Convert.ToString(m_struTimeCfg.dwDay)}- {Convert.ToString(m_struTimeCfg.dwHour)}- {Convert.ToString(m_struTimeCfg.dwMinute)}- {Convert.ToString(m_struTimeCfg.dwSecond)}");
 | 
			
		||||
                UInt32 dwReturn = 0;
 | 
			
		||||
                Int32 nSize = Marshal.SizeOf(m_struTimeCfg);
 | 
			
		||||
                IntPtr ptrTimeCfg = Marshal.AllocHGlobal(nSize);
 | 
			
		||||
                Marshal.StructureToPtr(m_struTimeCfg, ptrTimeCfg, false);
 | 
			
		||||
                if (CHCNetSDK.NET_DVR_GetDVRConfig(HKUserId, CHCNetSDK.NET_DVR_GET_TIMECFG, -1, ptrTimeCfg, (UInt32)nSize, ref dwReturn))
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    m_struTimeCfg = (CHCNetSDK.NET_DVR_TIME)Marshal.PtrToStructure(ptrTimeCfg, typeof(CHCNetSDK.NET_DVR_TIME));
 | 
			
		||||
                    logger.Info($"录像机时间接口{Convert.ToString(m_struTimeCfg.dwYear)}- {Convert.ToString(m_struTimeCfg.dwMonth)}- {Convert.ToString(m_struTimeCfg.dwDay)}- {Convert.ToString(m_struTimeCfg.dwHour)}- {Convert.ToString(m_struTimeCfg.dwMinute)}- {Convert.ToString(m_struTimeCfg.dwSecond)}");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"HIK_DVR_TIME Exception{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -187,5 +187,9 @@ namespace DM_Weight.Models
 | 
			
		|||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public DrugPleaseClaim PleaseClaim { get; set; }
 | 
			
		||||
 | 
			
		||||
        //dm_machine_record表id值
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public int? MachineRecordId { get; set; }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ using System.Linq;
 | 
			
		|||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Controls;
 | 
			
		||||
using Newtonsoft.Json;
 | 
			
		||||
using SqlSugar;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +24,7 @@ namespace DM_Weight.Models
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        /// 主键
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "Applyid")]
 | 
			
		||||
        [SugarColumn(ColumnName = "Applyid",IsPrimaryKey =true)]
 | 
			
		||||
        public int Applyid { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品请领单号
 | 
			
		||||
| 
						 | 
				
			
			@ -114,5 +115,8 @@ namespace DM_Weight.Models
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        [Navigate(NavigateType.ManyToOne, nameof(DrugPleaseClaimId))]
 | 
			
		||||
        public DrugPleaseClaim drugPleaseClaim { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public List<DrugPleaseManuNo> ManuNoList { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,6 +72,13 @@ namespace DM_Weight.Models
 | 
			
		|||
        ///</summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "max_stock")]
 | 
			
		||||
        public int? MaxStock { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品类型
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName ="drug_type")]
 | 
			
		||||
        public string DrugType { get; set; }
 | 
			
		||||
 | 
			
		||||
        //[SugarColumn(IsIgnore=true)]
 | 
			
		||||
        [Navigate(NavigateType.OneToMany, nameof(ChannelStock.DrugId), nameof(DrugId))]//BookA表中的studenId
 | 
			
		||||
        public List<ChannelStock> channelStocks { get; set; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ using System.Collections.Generic;
 | 
			
		|||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Newtonsoft.Json;
 | 
			
		||||
using SqlSugar;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +55,8 @@ namespace DM_Weight.Models
 | 
			
		|||
        /// 批次(多条)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "drug_manu_no")]
 | 
			
		||||
        public string DrugManuNo { get; set; }
 | 
			
		||||
        [JsonProperty("drug_manu_no")]
 | 
			
		||||
        public string _DrugManuNos { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 备注1
 | 
			
		||||
| 
						 | 
				
			
			@ -124,5 +126,9 @@ namespace DM_Weight.Models
 | 
			
		|||
        
 | 
			
		||||
        [Navigate(NavigateType.OneToOne, nameof(DrugId))]
 | 
			
		||||
        public DrugInfo DrugInfo { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //private List<DrugPleaseManuNo> manuNoList = new List<DrugPleaseManuNo>();
 | 
			
		||||
        //public List<DrugPleaseManuNo> ManuNoList { get=>manuNoList; set=>{ DrugManuNo}; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
using SqlSugar;
 | 
			
		||||
using Prism.Mvvm;
 | 
			
		||||
using SqlSugar;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
| 
						 | 
				
			
			@ -9,7 +10,7 @@ using System.Threading.Tasks;
 | 
			
		|||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    [SugarTable("dm_machine_record")]
 | 
			
		||||
    public class MachineRecord
 | 
			
		||||
    public class MachineRecord : BindableBase
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 主键 
 | 
			
		||||
| 
						 | 
				
			
			@ -106,14 +107,16 @@ namespace DM_Weight.Models
 | 
			
		|||
        /// 退药量 
 | 
			
		||||
        /// 默认值: 0
 | 
			
		||||
        ///</summary>
 | 
			
		||||
        private int returnQuantity1;
 | 
			
		||||
        [SugarColumn(ColumnName = "return_quantity1", IsOnlyIgnoreInsert = true)]
 | 
			
		||||
        public int ReturnQuantity1 { get; set; }
 | 
			
		||||
        public int ReturnQuantity1 { get => returnQuantity1; set => SetProperty(ref returnQuantity1, value); }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 退空瓶量 
 | 
			
		||||
        /// 默认值: 0
 | 
			
		||||
        ///</summary>
 | 
			
		||||
        private int returnQuantity2;
 | 
			
		||||
        [SugarColumn(ColumnName = "return_quantity2", IsOnlyIgnoreInsert = true)]
 | 
			
		||||
        public int ReturnQuantity2 { get; set; }
 | 
			
		||||
        public int ReturnQuantity2 { get => returnQuantity2; set => SetProperty(ref returnQuantity2, value); }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 取药记录id 
 | 
			
		||||
        ///</summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -150,5 +153,42 @@ namespace DM_Weight.Models
 | 
			
		|||
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public bool IsSelected { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 已核销数量
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private int hasCheckNum;
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public int HasCheckNum
 | 
			
		||||
        {
 | 
			
		||||
            get => hasCheckNum;
 | 
			
		||||
            set => SetProperty(ref hasCheckNum, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private int checkQuantity;
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 核销数量
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public int CheckQuantity
 | 
			
		||||
        {
 | 
			
		||||
            get => checkQuantity;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                if (value > Quantity - hasCheckNum)
 | 
			
		||||
                {
 | 
			
		||||
                    throw new ArgumentException("核销数量不能大于取药数量");
 | 
			
		||||
                }
 | 
			
		||||
                //退空瓶
 | 
			
		||||
                ReturnQuantity2 = value + hasCheckNum;
 | 
			
		||||
                //退药量
 | 
			
		||||
                ReturnQuantity1 = Quantity - value - hasCheckNum;
 | 
			
		||||
                SetProperty(ref checkQuantity, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Navigate(NavigateType.OneToMany, nameof(SurgicalScheduleDetail.GetRecordId))]
 | 
			
		||||
        public List<SurgicalScheduleDetail> _SurgicalScheduleDetailLst { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -184,6 +184,14 @@ namespace DM_Weight.Models
 | 
			
		|||
        [SugarColumn(ColumnName = "apply_status")]
 | 
			
		||||
        public int ApplyStatus { get;set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  
 | 
			
		||||
        /// 默认值: NULL
 | 
			
		||||
        ///</summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "machine_id")]
 | 
			
		||||
        public string MachineId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  
 | 
			
		||||
        /// 默认值: NULL
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,176 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using SqlSugar;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    [SugarTable("surgical_schedule")]
 | 
			
		||||
    public class SurgicalSchedule
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 主键
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
 | 
			
		||||
        public int Id { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 手术ID
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "operation_id")]
 | 
			
		||||
        public string OperationId { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 患者id
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "patient_id")]
 | 
			
		||||
        public string PatientId { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 患者姓名
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "patient_name")]
 | 
			
		||||
        public string PName { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 住院号
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "hospital_no")]
 | 
			
		||||
        public string HospitalNo { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 床号
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "bed_no")]
 | 
			
		||||
        public string BedNo { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 性别
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "sex")]
 | 
			
		||||
        public string Sex { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 年龄
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "age")]
 | 
			
		||||
        public string Age { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 出生日期
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "birthday")]
 | 
			
		||||
        public DateTime Birthday { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 身份证号
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "id_number")]
 | 
			
		||||
        public string IdNumber { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 住院病区
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "ward_code")]
 | 
			
		||||
        public string WardCode { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 联系电话
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "link_tel")]
 | 
			
		||||
        public string LinkTel { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 联系地址
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "link_addr")]
 | 
			
		||||
        public string LinkAddr { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 入院日期
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "in_date")]
 | 
			
		||||
        public string Indate { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 入院诊断
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "in_diagnosis")]
 | 
			
		||||
        public string Indiagnosis { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 医生姓名
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "doctor_name")]
 | 
			
		||||
        public string DoctorName { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 手术间代码
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "op_room_code")]
 | 
			
		||||
        public string OpRoomCode { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 手术间名称
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "op_room_name")]
 | 
			
		||||
        public string OpRoomName { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 麻醉医生编码
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "ana_doctor_code")]
 | 
			
		||||
        public string AnaDoctorCode { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 麻醉医生姓名
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "ana_doctor_name")]
 | 
			
		||||
        public string AnaDoctorName { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 手术开始时间
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "begin_time")]
 | 
			
		||||
        public DateTime BeginTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 手术计划开始时间
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "schedule_time")]
 | 
			
		||||
        public DateTime ScheduleTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 手术完成时间
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "end_time")]
 | 
			
		||||
        public DateTime EndTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 数据插入时间
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "insert_time")]
 | 
			
		||||
        public DateTime InsertTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 最后一次更新时间
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "update_time")]
 | 
			
		||||
        public DateTime UpdateTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// HIS状态1:新开2:作废
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "his_state")]
 | 
			
		||||
        public int HisState { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///取药状态0未取1已取2已还
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "dm_status")]
 | 
			
		||||
        public int DmStatus { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "anaesthesia")]
 | 
			
		||||
        public string Anaesthesia { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [Navigate(NavigateType.OneToMany, nameof(SurgicalSchedule.OperationId))]
 | 
			
		||||
        public SurgicalScheduleDetail _SurgicalScheduleDetail { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,68 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using SqlSugar;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    [SugarTable("surgical_schedule_detail")]
 | 
			
		||||
    public class SurgicalScheduleDetail
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 主键
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "id",IsPrimaryKey =true)]
 | 
			
		||||
        public  int Id { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 手术id
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "operation_id")]
 | 
			
		||||
        public string OperationId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 取药记录id
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "get_record_id")]
 | 
			
		||||
        public int GetRecordId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 处方数量
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "quantity")]
 | 
			
		||||
        public int Quantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品id
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "drug_id")]
 | 
			
		||||
        public string DrugId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 批次
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "manu_no")]
 | 
			
		||||
        public string ManuNo { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 效期
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "eff_date")]
 | 
			
		||||
        public string EffDate { get;set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 状态
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "status")]
 | 
			
		||||
        public int Status { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 操作人
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "insert_user_id")]
 | 
			
		||||
        public int? InsertUserId { get; set; }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -400,7 +400,7 @@
 | 
			
		|||
	"Parameter":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"machine_id",
 | 
			
		||||
			"Value":"DM1"
 | 
			
		||||
			"Value":"DM3"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -252,7 +252,7 @@
 | 
			
		|||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"machine_id",
 | 
			
		||||
			"Value":"DM1"
 | 
			
		||||
			"Value":"DM3"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -252,7 +252,7 @@
 | 
			
		|||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"machine_id",
 | 
			
		||||
			"Value":"DM1"
 | 
			
		||||
			"Value":"DM3"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -252,7 +252,7 @@
 | 
			
		|||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"machine_id",
 | 
			
		||||
			"Value":"DM1"
 | 
			
		||||
			"Value":"DM3"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -252,7 +252,7 @@
 | 
			
		|||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"machine_id",
 | 
			
		||||
			"Value":"DM1"
 | 
			
		||||
			"Value":"DM3"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -602,7 +602,7 @@
 | 
			
		|||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"machine_id",
 | 
			
		||||
			"Value":"DM1"
 | 
			
		||||
			"Value":"DM3"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -314,7 +314,7 @@
 | 
			
		|||
	"Parameter":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"machine_id",
 | 
			
		||||
			"Value":"DM1"
 | 
			
		||||
			"Value":"DM3"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -101,7 +101,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        }
 | 
			
		||||
        void DoMyPrismEvent(DeviceMsg msg)
 | 
			
		||||
        {
 | 
			
		||||
            if (msg.WindowName == "DrawerAddDrugWindow")
 | 
			
		||||
            if (msg.WindowName == "AddDrugControl")
 | 
			
		||||
            {
 | 
			
		||||
                switch (msg.EventType)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -140,10 +140,6 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (msg.WindowName == "AddDrugControl")
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -188,8 +184,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                Status = 1;
 | 
			
		||||
                _portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
 | 
			
		||||
                _portUtil.SpeakAsync($"正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    //List<ChannelStock> singleChannels = ChannelStocks.FindAll(it => it.BoardType != 1);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,949 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using DM_Weight.select;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using log4net;
 | 
			
		||||
using MaterialDesignThemes.Wpf;
 | 
			
		||||
using Prism.Commands;
 | 
			
		||||
using Prism.Events;
 | 
			
		||||
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;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Media;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class AddSurgeryDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
 | 
			
		||||
    {
 | 
			
		||||
        public string Title => "录入手术";
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
 | 
			
		||||
        private List<MachineRecord> machineRecordList;
 | 
			
		||||
        public List<MachineRecord> MachineRecordList { get => machineRecordList; set => SetProperty(ref machineRecordList, 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 string? _searchValue;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段值
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string? SearchValue
 | 
			
		||||
        {
 | 
			
		||||
            get { return _searchValue; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _searchValue, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static List<OrderTakeSelect> StaticSelects = new()
 | 
			
		||||
        {
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code = "DrugName",
 | 
			
		||||
                Name = "药品名称"
 | 
			
		||||
            },
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code = "PyCode",
 | 
			
		||||
                Name = "拼音码"
 | 
			
		||||
            },
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code = "DrugBarcode",
 | 
			
		||||
                Name = "药品条码"
 | 
			
		||||
            },
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code = "DrugId",
 | 
			
		||||
                Name = "药品编码"
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private List<OrderTakeSelect> _selects = StaticSelects;
 | 
			
		||||
 | 
			
		||||
        public List<OrderTakeSelect> Selects
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selects; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _selects, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private static List<Dictionary<int, string>> keyValuePairs = new List<Dictionary<int, string>>()
 | 
			
		||||
        {
 | 
			
		||||
            new Dictionary<int, string>(){ {0,"男"} },new Dictionary<int, string>(){ { 1, "女" } }
 | 
			
		||||
        };
 | 
			
		||||
        public List<Dictionary<int, string>> SexKeyValue
 | 
			
		||||
        {
 | 
			
		||||
            get { return keyValuePairs; }
 | 
			
		||||
            set { SetProperty(ref keyValuePairs, value); }
 | 
			
		||||
        }
 | 
			
		||||
        private Dictionary<int, string> _selectedSex = keyValuePairs[0];
 | 
			
		||||
        public Dictionary<int, string> SelectedSex
 | 
			
		||||
        {
 | 
			
		||||
            get => _selectedSex;
 | 
			
		||||
            set => SetProperty(ref _selectedSex, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private SurgicalSchedule surgicalSchedule = new SurgicalSchedule();
 | 
			
		||||
        
 | 
			
		||||
        public SurgicalSchedule _SurgicalSchedule
 | 
			
		||||
        {
 | 
			
		||||
            get => surgicalSchedule;
 | 
			
		||||
            set => SetProperty(ref surgicalSchedule, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private int _totalCount = 0;
 | 
			
		||||
        public int TotalCount { get => _totalCount; set => SetProperty(ref _totalCount, value); }
 | 
			
		||||
 | 
			
		||||
        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 = 5;
 | 
			
		||||
        public int PageSize
 | 
			
		||||
        {
 | 
			
		||||
            get => _pageSize;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _pageSize, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private int _status = 0;
 | 
			
		||||
 | 
			
		||||
        public int Status
 | 
			
		||||
        {
 | 
			
		||||
            get => _status; set => SetProperty(ref _status, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        List<ChannelStock> ReturnStockLst;
 | 
			
		||||
 | 
			
		||||
        private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
 | 
			
		||||
        private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
 | 
			
		||||
 | 
			
		||||
        private OrderTakeSelect _selectedItem = StaticSelects[0];
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public OrderTakeSelect SelectedItem
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selectedItem; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _selectedItem, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private MachineRecord selectedRecord;
 | 
			
		||||
        public MachineRecord SelectedRecord { get => selectedRecord; set => SetProperty(ref selectedRecord, value); }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private static readonly DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
 | 
			
		||||
        private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public event Action<IDialogResult> RequestClose;
 | 
			
		||||
 | 
			
		||||
        public bool CanCloseDialog()
 | 
			
		||||
        {
 | 
			
		||||
            return Status == 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogClosed()
 | 
			
		||||
        {
 | 
			
		||||
            // 取消消息订阅
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogOpened(IDialogParameters parameters)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
        private PortUtil _portUtil;
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        IDialogService _dialogService;
 | 
			
		||||
        public AddSurgeryDialogViewModel(PortUtil portUtil, IEventAggregator eventAggregator, IDialogService DialogService)
 | 
			
		||||
        {
 | 
			
		||||
            surgicalSchedule.ScheduleTime= DateTime.Now;
 | 
			
		||||
            _SurgicalSchedule.Indate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
 | 
			
		||||
            _dialogService = DialogService;
 | 
			
		||||
            _portUtil = portUtil;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
        public async void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            int totalCount = 0;
 | 
			
		||||
            MachineRecordList = SqlSugarHelper.Db.Queryable<MachineRecord>()
 | 
			
		||||
                .Includes<DrugInfo>(mr => mr.DrugInfo)
 | 
			
		||||
                .Includes<UserList>(mr => mr.User)
 | 
			
		||||
                .Includes<SurgicalScheduleDetail>(mr => mr._SurgicalScheduleDetailLst)
 | 
			
		||||
                .Where(mr => mr.Type == 2)
 | 
			
		||||
                .Where(mr => mr.Status < 2)
 | 
			
		||||
                .Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                //.WhereIF(QueryDate != null, mr => mr.OperationTime.ToString("yyyy-MM-dd") == QueryDate)
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (mr) => mr.DrugInfo.DrugId.ToString().Contains(SearchValue))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (mr) => mr.DrugInfo.DrugName.Contains(SearchValue))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (mr) => mr.DrugInfo.PyCode.Contains(SearchValue))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (mr) => mr.DrugInfo.DrugBarcode.Contains(SearchValue))
 | 
			
		||||
                .OrderBy(mr => mr.OperationTime)
 | 
			
		||||
               .ToPageList(PageNum, PageSize, ref totalCount);
 | 
			
		||||
 | 
			
		||||
            MachineRecordList.ForEach(mr => mr.HasCheckNum = mr._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity));
 | 
			
		||||
            TotalCount = totalCount;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand BtnCloseCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                // 关闭当前窗口
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 选中行事件
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand RowSelected
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (SelectedRecord != null && selectedRecord.Id != null)
 | 
			
		||||
                {
 | 
			
		||||
                    MachineRecordList = MachineRecordList.Select(x =>
 | 
			
		||||
                    {
 | 
			
		||||
                        if (x.Id == SelectedRecord.Id)
 | 
			
		||||
                        {
 | 
			
		||||
                            x.IsSelected = !x.IsSelected;
 | 
			
		||||
                            if (x.IsSelected)
 | 
			
		||||
                            {
 | 
			
		||||
                                if (SelectedRecord._SurgicalScheduleDetailLst != null && SelectedRecord._SurgicalScheduleDetailLst.Count > 0)
 | 
			
		||||
                                {
 | 
			
		||||
                                    //已经核销数
 | 
			
		||||
                                    int HasCheckNum = SelectedRecord._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity);
 | 
			
		||||
                                    x.CheckQuantity = SelectedRecord.Quantity - HasCheckNum;
 | 
			
		||||
                                    x.ReturnQuantity1 = SelectedRecord.Quantity - HasCheckNum - x.CheckQuantity;
 | 
			
		||||
                                    x.ReturnQuantity2 = HasCheckNum + x.CheckQuantity;
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    x.CheckQuantity = SelectedRecord.Quantity;
 | 
			
		||||
                                    x.ReturnQuantity1 = 0;
 | 
			
		||||
                                    x.ReturnQuantity2 = SelectedRecord.Quantity;
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                x.CheckQuantity = 0;
 | 
			
		||||
                                x.ReturnQuantity1 = 0;
 | 
			
		||||
                                x.ReturnQuantity2 = 0;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        return x;
 | 
			
		||||
                    }).ToList();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 保存并核销
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand AddSurgeryCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (!string.IsNullOrEmpty(_SurgicalSchedule.OperationId))
 | 
			
		||||
                {
 | 
			
		||||
                    //检查是否有该手术号,手术号不能重复
 | 
			
		||||
                   int iCount=  SqlSugarHelper.Db.Queryable<SurgicalSchedule>().Where(ss => ss.OperationId == _SurgicalSchedule.OperationId).Count();
 | 
			
		||||
                    if(iCount>0)
 | 
			
		||||
                    {
 | 
			
		||||
                        SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                        SnackbarMessageQueue.Enqueue("该手术号已添加,请勿重复创建");
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    List<MachineRecord> RecordsLst = MachineRecordList.FindAll(rl => rl.IsSelected && rl.CheckQuantity > 0).ToList();
 | 
			
		||||
                    if (RecordsLst.Count > 0)
 | 
			
		||||
                    {
 | 
			
		||||
 | 
			
		||||
                        //string operationId = Guid.NewGuid().ToString();
 | 
			
		||||
                        var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                        {
 | 
			
		||||
                            SqlSugarHelper.Db.Insertable(new SurgicalSchedule()
 | 
			
		||||
                            {
 | 
			
		||||
                                PName = _SurgicalSchedule.PName,
 | 
			
		||||
                                Sex = SelectedSex.ContainsKey(0) is true ? SelectedSex[0] : SelectedSex[1],
 | 
			
		||||
                                Age = _SurgicalSchedule.Age,
 | 
			
		||||
                                IdNumber = _SurgicalSchedule.IdNumber,
 | 
			
		||||
                                OpRoomCode = _SurgicalSchedule.OpRoomCode,
 | 
			
		||||
                                OpRoomName = _SurgicalSchedule.OpRoomName,
 | 
			
		||||
                                OperationId = _SurgicalSchedule.OperationId,
 | 
			
		||||
                                ScheduleTime = _SurgicalSchedule.ScheduleTime,
 | 
			
		||||
                                InsertTime=DateTime.Now,
 | 
			
		||||
                                Indiagnosis=_SurgicalSchedule.Indiagnosis,
 | 
			
		||||
                                Indate=_SurgicalSchedule.Indate,
 | 
			
		||||
                                DmStatus = 1,
 | 
			
		||||
                            }).ExecuteCommand();
 | 
			
		||||
                            for (int i = 0; i < RecordsLst.Count; i++)
 | 
			
		||||
                            {
 | 
			
		||||
                                SqlSugarHelper.Db.Insertable(new SurgicalScheduleDetail()
 | 
			
		||||
                                {
 | 
			
		||||
                                    OperationId = _SurgicalSchedule.OperationId,
 | 
			
		||||
                                    GetRecordId = RecordsLst[i].Id,
 | 
			
		||||
                                    Quantity = RecordsLst[i].CheckQuantity,
 | 
			
		||||
                                    DrugId = RecordsLst[i].DrugId,
 | 
			
		||||
                                    ManuNo = RecordsLst[i].ManuNo,
 | 
			
		||||
                                    EffDate = RecordsLst[i].EffDate.ToString(),
 | 
			
		||||
                                    InsertUserId = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                                }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                                int hasQuantity = RecordsLst[i]._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity);
 | 
			
		||||
                                int dmStatus = 0;
 | 
			
		||||
                                //已经全部挂上钩,修改dm_machine_record状态为完成
 | 
			
		||||
                                //if (hasQuantity + RecordsLst[i].CheckQuantity == RecordsLst[i].Quantity)
 | 
			
		||||
                                //{
 | 
			
		||||
                                //    dmStatus = 2;
 | 
			
		||||
                                //}
 | 
			
		||||
                                //else
 | 
			
		||||
                                {
 | 
			
		||||
                                    dmStatus = 1;
 | 
			
		||||
                                }
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable(new MachineRecord()
 | 
			
		||||
                                {
 | 
			
		||||
                                    Status = dmStatus,
 | 
			
		||||
                                    Id = RecordsLst[i].Id
 | 
			
		||||
                                }).UpdateColumns(it => new { it.Status }).WhereColumns(it => new { it.Id }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                            }
 | 
			
		||||
                        });
 | 
			
		||||
                        if (f.IsSuccess)
 | 
			
		||||
                        {
 | 
			
		||||
                            AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                            {
 | 
			
		||||
                                Message = "核销完成",
 | 
			
		||||
                                Type = MsgType.SUCCESS,
 | 
			
		||||
                            };
 | 
			
		||||
                            _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                            // 关闭当前窗口
 | 
			
		||||
                            RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                            SnackbarMessageQueue.Enqueue("核销异常,未核销数据");
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        int iRet = SqlSugarHelper.Db.Insertable(new SurgicalSchedule()
 | 
			
		||||
                        {
 | 
			
		||||
                            PName = _SurgicalSchedule.PName,
 | 
			
		||||
                            Sex = SelectedSex.ContainsKey(0) is true ? SelectedSex[0] : SelectedSex[1],
 | 
			
		||||
                            Age = _SurgicalSchedule.Age,
 | 
			
		||||
                            IdNumber = _SurgicalSchedule.IdNumber,
 | 
			
		||||
                            OpRoomCode = _SurgicalSchedule.OpRoomCode,
 | 
			
		||||
                            OpRoomName = _SurgicalSchedule.OpRoomName,
 | 
			
		||||
                            OperationId = _SurgicalSchedule.OperationId,
 | 
			
		||||
                            ScheduleTime= _SurgicalSchedule.ScheduleTime,
 | 
			
		||||
                            Indiagnosis = _SurgicalSchedule.Indiagnosis,
 | 
			
		||||
                            Indate = _SurgicalSchedule.Indate,
 | 
			
		||||
                            InsertTime = DateTime.Now,
 | 
			
		||||
                            DmStatus = 0,
 | 
			
		||||
                            HisState=1
 | 
			
		||||
                        }).ExecuteCommand();
 | 
			
		||||
                        if (iRet > 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                            {
 | 
			
		||||
                                Message = "手术录入成功,未核销药品",
 | 
			
		||||
                                Type = MsgType.SUCCESS,
 | 
			
		||||
                            };
 | 
			
		||||
                            _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                            // 关闭当前窗口
 | 
			
		||||
                            RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
 | 
			
		||||
                            SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                            SnackbarMessageQueue.Enqueue("手术录入失败");
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                    SnackbarMessageQueue.Enqueue("手术号不能为空");
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 全部归还(还药、还空瓶)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand ReturnCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                List<MachineRecord> RecordsLst = MachineRecordList.FindAll(rl => rl.IsSelected && rl.CheckQuantity == 0).ToList();
 | 
			
		||||
                ReturnStockLst = new List<ChannelStock>();
 | 
			
		||||
                if (RecordsLst.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    //待还药的记录
 | 
			
		||||
                    List<MachineRecord> ReturnDrugLst = RecordsLst.Where(rl => rl.ReturnQuantity1 > 0).ToList();
 | 
			
		||||
                    //待还空瓶的记录
 | 
			
		||||
                    List<MachineRecord> ReturnEmptyLst = RecordsLst.Where(rl => rl.ReturnQuantity2 > 0).ToList();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    for (int i = 0; i < ReturnDrugLst.Count; i++)
 | 
			
		||||
                    {
 | 
			
		||||
                        ChannelStock queryData = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                                               .Includes<DrugInfo>(cs => cs.DrugInfo)
 | 
			
		||||
                                               .Where(cs => cs.DrugId == ReturnDrugLst[i].DrugId)
 | 
			
		||||
                                               .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                                               .Where(cs => cs.ManuNo == ReturnDrugLst[i].ManuNo)
 | 
			
		||||
                                               .OrderBy(cs => cs.Quantity).First();
 | 
			
		||||
                        if (queryData != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            queryData.AddQuantity = ReturnDrugLst[i].ReturnQuantity1;
 | 
			
		||||
                            queryData.MachineRecordId = ReturnDrugLst[i].Id;
 | 
			
		||||
                            ReturnStockLst.Add(queryData);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    for (int j = 0; j < ReturnEmptyLst.Count; j++)
 | 
			
		||||
                    {
 | 
			
		||||
                        ChannelStock queryData = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                                              .Includes<DrugInfo>(cs => cs.DrugInfo)
 | 
			
		||||
                                              .Where(cs => cs.DrugId == ReturnEmptyLst[j].DrugId)
 | 
			
		||||
                                              .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                                              //.Where(cs => cs.ManuNo == ReturnEmptyLst[j].ManuNo)
 | 
			
		||||
                                              .Where(cs => cs.DrawerType == 2)
 | 
			
		||||
                                              .OrderBy(cs => cs.Quantity).First();
 | 
			
		||||
                        if (queryData != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            queryData.ReturnQuantity = ReturnEmptyLst[j].ReturnQuantity2;
 | 
			
		||||
                            queryData.MachineRecordId = ReturnEmptyLst[j].Id;
 | 
			
		||||
                            ReturnStockLst.Add(queryData);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (ReturnStockLst != null && ReturnStockLst.Count > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        ReturnStockLst = ReturnStockLst.OrderBy(cls => cls.DrawerNo).ToList();
 | 
			
		||||
                        //还药时AddQuantity有值;还空瓶时ReturnQuantity有值
 | 
			
		||||
                        enumerable = ReturnStockLst.GroupBy(cs => cs.DrawerNo, cs => cs);
 | 
			
		||||
                        enumerator = enumerable.GetEnumerator();
 | 
			
		||||
                        enumerator.MoveNext();
 | 
			
		||||
                        Status = 1;
 | 
			
		||||
                        OpenOneByOne();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
 | 
			
		||||
                        SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                        SnackbarMessageQueue.Enqueue("选中数据未绑定库位,请先进行绑定库位");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                    SnackbarMessageQueue.Enqueue("未选中数据,或选中数据核销数量不为0");
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 刷新
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand QueryCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                RequestData();
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        void DoMyPrismEvent(DeviceMsg msg)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            if (msg.WindowName == "SurgeryTakeWindow")
 | 
			
		||||
            {
 | 
			
		||||
                IGrouping<int, ChannelStock> grouping = enumerator.Current;
 | 
			
		||||
                int DrawerNo = grouping.Key;
 | 
			
		||||
                List<ChannelStock> 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<int, ChannelStock> groupingBefore = enumerator.Current;
 | 
			
		||||
                            int DrawerNoBefore = groupingBefore.Key;
 | 
			
		||||
                            if (enumerator.MoveNext())
 | 
			
		||||
                            {
 | 
			
		||||
                                IGrouping<int, ChannelStock> groupingAfter = enumerator.Current;
 | 
			
		||||
                                int DrawerNoAfter = groupingAfter.Key;
 | 
			
		||||
                                if (DrawerNoBefore < 9 && DrawerNoAfter > 8)
 | 
			
		||||
                                {
 | 
			
		||||
                                    Thread.Sleep(50);
 | 
			
		||||
                                }
 | 
			
		||||
                                OpenOneByOne();
 | 
			
		||||
                            }
 | 
			
		||||
                            // 已经全部取出
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                Status = 3;
 | 
			
		||||
 | 
			
		||||
                                //保存数据
 | 
			
		||||
 | 
			
		||||
                                //TakeFinish();
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        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<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        Status = 0;
 | 
			
		||||
                        break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void OpenOneByOne()
 | 
			
		||||
        {
 | 
			
		||||
            IGrouping<int, ChannelStock> grouping = enumerator.Current;
 | 
			
		||||
            int DrawerNo = grouping.Key;
 | 
			
		||||
            List<ChannelStock> channelStocks = grouping.ToList();
 | 
			
		||||
            channelStocks.ForEach(it => it.process = 1);
 | 
			
		||||
 | 
			
		||||
            string drugName = channelStocks[0].DrugInfo.DrugName;
 | 
			
		||||
 | 
			
		||||
            int drugQuantity = channelStocks.Sum(cs => cs.AddQuantity);
 | 
			
		||||
 | 
			
		||||
            int emptyQuantity = channelStocks.Sum(cs => cs.ReturnQuantity);
 | 
			
		||||
            string speakTxt = $"正在打开{DrawerNo}号抽屉,请将{drugName}的";
 | 
			
		||||
            if (drugQuantity > 0)
 | 
			
		||||
            {
 | 
			
		||||
                speakTxt += $"{drugQuantity}个药放入抽屉!";
 | 
			
		||||
            }
 | 
			
		||||
            if (emptyQuantity > 0)
 | 
			
		||||
            {
 | 
			
		||||
                speakTxt += $"{emptyQuantity}个空瓶放入抽屉!";
 | 
			
		||||
            }
 | 
			
		||||
            _portUtil.SpeakAsync(speakTxt);
 | 
			
		||||
 | 
			
		||||
            //List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
 | 
			
		||||
 | 
			
		||||
            // 发送取药数量
 | 
			
		||||
            //singleChannels.ForEach(it =>
 | 
			
		||||
            //{
 | 
			
		||||
            //    try
 | 
			
		||||
            //    {
 | 
			
		||||
 | 
			
		||||
            //        _portUtil.TakeQuantity(DrawerNo, it.ColNo, it.TakeQuantity, it.Quantity - it.TakeQuantity);
 | 
			
		||||
            //    }
 | 
			
		||||
            //    catch (Exception ex)
 | 
			
		||||
            //    {
 | 
			
		||||
            //        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
            //        {
 | 
			
		||||
            //            Message = $"打开抽屉异常{ex.Message}",
 | 
			
		||||
            //            Type = MsgType.ERROR,
 | 
			
		||||
            //        };
 | 
			
		||||
            //        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
            //    }
 | 
			
		||||
            //});
 | 
			
		||||
 | 
			
		||||
            _portUtil.WindowName = "SurgeryTakeWindow";
 | 
			
		||||
            _portUtil.BoardType = channelStocks.Count > 0 ? channelStocks[0].BoardType : 1;
 | 
			
		||||
            _portUtil.ColNos = channelStocks.Select(it => it.ColNo).ToArray();
 | 
			
		||||
            _portUtil.DrawerNo = DrawerNo;
 | 
			
		||||
            _portUtil.Start();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private bool _isFinishClick = false;
 | 
			
		||||
 | 
			
		||||
        public bool IsFinishClick { get => _isFinishClick; set => SetProperty(ref _isFinishClick, value); }
 | 
			
		||||
        //完成
 | 
			
		||||
        private void TakeFinish()
 | 
			
		||||
        {
 | 
			
		||||
            IsFinishClick = true;
 | 
			
		||||
            bool bRet = false;
 | 
			
		||||
            var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
            {
 | 
			
		||||
                for (int i = 0; i < ReturnStockLst.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    ChannelStock it = ReturnStockLst[i];
 | 
			
		||||
                    int quantity = 0;
 | 
			
		||||
                    if (it.AddQuantity > 0)  //还药
 | 
			
		||||
                    {
 | 
			
		||||
                        quantity = it.AddQuantity;
 | 
			
		||||
                        bRet = ReturnDrug(it);
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        quantity = it.ReturnQuantity;
 | 
			
		||||
                        bRet = ReturnEmpty(it);
 | 
			
		||||
                    }
 | 
			
		||||
                    if (!bRet)
 | 
			
		||||
                    {
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                    // 更新屏显库存
 | 
			
		||||
                    if (it.BoardType == 5)
 | 
			
		||||
                    {
 | 
			
		||||
                        _portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity + quantity);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "操作完成,库存已更新",
 | 
			
		||||
                        Type = MsgType.SUCCESS,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    // 关闭当前窗口
 | 
			
		||||
                    RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
                }
 | 
			
		||||
                return bRet;
 | 
			
		||||
            });
 | 
			
		||||
            if (!f.IsSuccess || !f.Data)
 | 
			
		||||
            {
 | 
			
		||||
                SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                SnackbarMessageQueue.Enqueue("库存更新失败!");
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            Status = 0;
 | 
			
		||||
            IsFinishClick = false;
 | 
			
		||||
            RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 还药
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool ReturnDrug(ChannelStock stock)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                {
 | 
			
		||||
                    string InvoiceId = "RETURN_" + CurrentTimeMillis(); ;
 | 
			
		||||
                    MachineRecord recordInfo = SqlSugarHelper.Db.Queryable<MachineRecord>().Where(rd => rd.Id == stock.MachineRecordId).First();
 | 
			
		||||
                    // 更新数据 库存信息
 | 
			
		||||
                    SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                    {
 | 
			
		||||
                        Quantity = stock.Quantity + stock.AddQuantity,
 | 
			
		||||
                        Id = stock.Id,
 | 
			
		||||
                    }).UpdateColumns(it => new { it.Quantity }).ExecuteCommand();
 | 
			
		||||
                    // 获取更新完库存后的药品库存
 | 
			
		||||
                    List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                        .Where(cs => cs.MachineId.Equals(stock.MachineId))
 | 
			
		||||
                        .Where(cs => cs.DrugId.Equals(stock.DrugId))
 | 
			
		||||
                        .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                        .ToList();
 | 
			
		||||
                    // 更新数据 取药记录 设置还药数量、状态 
 | 
			
		||||
                    SqlSugarHelper.Db.Updateable(new MachineRecord()
 | 
			
		||||
                    {
 | 
			
		||||
                        ReturnQuantity1 = recordInfo.ReturnQuantity1 + stock.AddQuantity,
 | 
			
		||||
                        Id = recordInfo.Id,
 | 
			
		||||
                        Status = (recordInfo.CanReturnQuantity - stock.AddQuantity) == 0 ? 2 : 1,
 | 
			
		||||
                    }).UpdateColumns(it => new { it.ReturnQuantity1, it.Status }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                    // 保存数据 还药记录
 | 
			
		||||
                    SqlSugarHelper.Db.Insertable(new MachineRecord()
 | 
			
		||||
                    {
 | 
			
		||||
                        MachineId = stock.MachineId,
 | 
			
		||||
                        DrawerNo = stock.DrawerNo,
 | 
			
		||||
                        ColNo = stock.ColNo,
 | 
			
		||||
                        DrugId = stock.DrugId,
 | 
			
		||||
                        ManuNo = stock.ManuNo,
 | 
			
		||||
                        EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                        Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                        OperationTime = DateTime.Now,
 | 
			
		||||
                        Quantity = stock.AddQuantity,
 | 
			
		||||
                        Type = 31,
 | 
			
		||||
                        InvoiceId = InvoiceId,
 | 
			
		||||
                        GetId = stock.MachineRecordId
 | 
			
		||||
                        //,StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                    }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                    //保存账册
 | 
			
		||||
                    SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                    {
 | 
			
		||||
                        DrugId = Convert.ToInt32(stock.DrugId),
 | 
			
		||||
                        Type = 1,
 | 
			
		||||
                        Department = ConfigurationManager.AppSettings["department"].ToString(),
 | 
			
		||||
                        InvoiceNo = InvoiceId,
 | 
			
		||||
                        ManuNo = stock.ManuNo,
 | 
			
		||||
                        EffDate = stock.EffDate,
 | 
			
		||||
                        AddQuantity = stock.AddQuantity,
 | 
			
		||||
                        UserId1 = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                        UserId2 = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                        MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                        CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
 | 
			
		||||
                        CreateTime = DateTime.Now
 | 
			
		||||
 | 
			
		||||
                    }).ExecuteCommand();
 | 
			
		||||
                    //修改凌晨生成的日结存数据
 | 
			
		||||
                    AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                    .Where(ab => ab.MachineId.Equals(stock.MachineId))
 | 
			
		||||
                    .Where(ab => ab.Type == 3)
 | 
			
		||||
                    .Where(ab => ab.DrugId == Convert.ToInt32(stock.DrugId))
 | 
			
		||||
                    .Where(ab => ab.ManuNo == stock.ManuNo)
 | 
			
		||||
                    .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                    if (accountBookG2Day != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + stock.AddQuantity;
 | 
			
		||||
                        SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
			
		||||
                        int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                        {
 | 
			
		||||
                            DrugId = Convert.ToInt32(stock.DrugId),
 | 
			
		||||
                            Type = 3,
 | 
			
		||||
                            ManuNo = stock.ManuNo,
 | 
			
		||||
                            EffDate = stock.EffDate,
 | 
			
		||||
                            YQuantity = 0,
 | 
			
		||||
                            ManuStock = stock.ReturnQuantity,
 | 
			
		||||
                            TotalStock = stock.ReturnQuantity,
 | 
			
		||||
                            UserId1 = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                            UserId2 = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                            MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                            CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
 | 
			
		||||
                            InvoiceNo = "日结存"
 | 
			
		||||
                        }).ExecuteCommand();
 | 
			
		||||
                        if (iDayResult <= 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"未写入日结存数据{stock.DrugId}-{stock.ManuNo}-{stock.EffDate}-{stock.AddQuantity}");
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    //修改凌晨生成的总结存数据
 | 
			
		||||
                    AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                    .Where(ab => ab.MachineId.Equals(stock.MachineId))
 | 
			
		||||
                    .Where(ab => ab.Type == 4)
 | 
			
		||||
                    .Where(ab => ab.DrugId == Convert.ToInt32(stock.DrugId))
 | 
			
		||||
                    .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                    if (accountBookG2Total != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + stock.AddQuantity;
 | 
			
		||||
                        SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
			
		||||
                        int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                        {
 | 
			
		||||
                            DrugId = Convert.ToInt32(stock.DrugId),
 | 
			
		||||
                            Type = 4,
 | 
			
		||||
                            YQuantity = 0,
 | 
			
		||||
                            ManuStock = stock.ReturnQuantity,
 | 
			
		||||
                            TotalStock = stock.ReturnQuantity,
 | 
			
		||||
                            UserId1 = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                            UserId2 = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                            MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                            CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
 | 
			
		||||
                            InvoiceNo = "总结存"
 | 
			
		||||
                        }).ExecuteCommand();
 | 
			
		||||
                        if (iTotalResult <= 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"未写入总结存数据{stock.DrugId}-{stock.AddQuantity}");
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
                if (f.IsSuccess)
 | 
			
		||||
                {
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                throw;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 还空瓶
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool ReturnEmpty(ChannelStock stock)
 | 
			
		||||
        {
 | 
			
		||||
            string InvoiceId = "RETURN_" + CurrentTimeMillis();
 | 
			
		||||
            var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                // 更新数据 库存信息
 | 
			
		||||
                SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                {
 | 
			
		||||
                    Quantity = stock.Quantity + stock.ReturnQuantity,
 | 
			
		||||
                    Id = stock.Id,
 | 
			
		||||
                }).UpdateColumns(it => new { it.Quantity }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                // 获取更新完库存后的药品库存
 | 
			
		||||
                List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                    .Where(cs => cs.MachineId.Equals(stock.MachineId))
 | 
			
		||||
                    .Where(cs => cs.DrugId.Equals(stock.DrugId))
 | 
			
		||||
                    .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                    .ToList();
 | 
			
		||||
 | 
			
		||||
                MachineRecord recordInfo = SqlSugarHelper.Db.Queryable<MachineRecord>().Where(rd => rd.Id == stock.MachineRecordId).First();
 | 
			
		||||
 | 
			
		||||
                // 更新数据 取药记录 设置还药数量、状态
 | 
			
		||||
                SqlSugarHelper.Db.Updateable(new MachineRecord()
 | 
			
		||||
                {
 | 
			
		||||
                    ReturnQuantity2 = stock.ReturnQuantity,
 | 
			
		||||
                    Id = recordInfo.Id,
 | 
			
		||||
                    Status = 2,
 | 
			
		||||
                }).UpdateColumns(it => new { it.ReturnQuantity2, it.Status }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                // 保存数据 还药空瓶记录
 | 
			
		||||
                SqlSugarHelper.Db.Insertable(new MachineRecord()
 | 
			
		||||
                {
 | 
			
		||||
                    MachineId = stock.MachineId,
 | 
			
		||||
                    DrawerNo = stock.DrawerNo,
 | 
			
		||||
                    ColNo = stock.ColNo,
 | 
			
		||||
                    DrugId = stock.DrugId,
 | 
			
		||||
                    ManuNo = stock.ManuNo,
 | 
			
		||||
                    EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                    Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                    Reviewer = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                    OperationTime = DateTime.Now,
 | 
			
		||||
                    Quantity = stock.ReturnQuantity, //ReturnQuantity,
 | 
			
		||||
                    Type = 32,
 | 
			
		||||
                    InvoiceId = InvoiceId,
 | 
			
		||||
                    GetId = stock.MachineRecordId
 | 
			
		||||
                    //,StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                return true;
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            if (!f.IsSuccess || !f.Data)
 | 
			
		||||
            {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public long CurrentTimeMillis()
 | 
			
		||||
        {
 | 
			
		||||
            return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 取消
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand CancleTake
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                _portUtil.ResetData();
 | 
			
		||||
                Status = 0;
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        // 完成按钮
 | 
			
		||||
        public DelegateCommand TakeFinishCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(TakeFinish);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void DoDialogResult(IDialogResult dialogResult)
 | 
			
		||||
        {
 | 
			
		||||
            // 委托   被动执行     被子窗口执行
 | 
			
		||||
            // dialogResult  第一方面可以拿到任意参数   第二方面   可判断关闭状态
 | 
			
		||||
            //if(dialogResult.Result == ButtonResult.OK)
 | 
			
		||||
            //{
 | 
			
		||||
            // 关闭当前窗口
 | 
			
		||||
            //RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
            //}
 | 
			
		||||
            //MessageBox.Show("返回值:" + dialogResult.Result.ToString());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -256,7 +256,18 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            int DrawerNo = grouping.Key;
 | 
			
		||||
            List<ChannelStock> channelStocks = grouping.ToList();
 | 
			
		||||
            channelStocks.ForEach(it => it.process = 1);
 | 
			
		||||
            _portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            IEnumerable<string> strDrugName = channelStocks.Select(cs => cs.DrugInfo.DrugName);
 | 
			
		||||
            string strNames = string.Empty;
 | 
			
		||||
            foreach (string name in strDrugName)
 | 
			
		||||
            {
 | 
			
		||||
                strNames += name;
 | 
			
		||||
            }
 | 
			
		||||
            int sumQuantity = channelStocks.Sum(cs => cs.AddQuantity);
 | 
			
		||||
            
 | 
			
		||||
            _portUtil.SpeakAsync($"正在打开{DrawerNo}号抽屉,请加药{strNames},数量共计{sumQuantity}");
 | 
			
		||||
            List<ChannelStock> singleChannels = new List<ChannelStock>();
 | 
			
		||||
            for (int i = 0; i < channelStocks.Count; i++)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -330,7 +341,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            {
 | 
			
		||||
                if (SelectDrugPleaseClaim.GetQuantity == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    if (SelectDrugPleaseClaim.DrugManuNo is null)
 | 
			
		||||
                    if (SelectDrugPleaseClaim._DrugManuNos is null)
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
| 
						 | 
				
			
			@ -341,13 +352,12 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    //请领单里只有一种药
 | 
			
		||||
                    List<DrugPleaseManuNo> drugManuInfoList = JsonConvert.DeserializeObject<List<DrugPleaseManuNo>>(SelectDrugPleaseClaim.DrugManuNo);
 | 
			
		||||
                    List<DrugPleaseManuNo> drugManuInfoList = JsonConvert.DeserializeObject<List<DrugPleaseManuNo>>(SelectDrugPleaseClaim._DrugManuNos);
 | 
			
		||||
                    drugManuInfoList.ForEach(dm => dm.DrugId = SelectDrugPleaseClaim.DrugId);
 | 
			
		||||
                    for (int i = 0; i < drugManuInfoList.Count; i++)
 | 
			
		||||
                    {
 | 
			
		||||
                        DrugPleaseManuNo drugPleaseManuNo = drugManuInfoList[i];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                        ChannelStock q = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                        .Includes<DrugInfo>(cs => cs.DrugInfo)
 | 
			
		||||
                        .WhereIF(!string.IsNullOrEmpty(drugPleaseManuNo.EffDate), cs => cs.EffDate.Equals(drugPleaseManuNo.EffDate))
 | 
			
		||||
| 
						 | 
				
			
			@ -383,7 +393,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                    {
 | 
			
		||||
                        foreach (DrugPleaseClaim item in pleaseClaimList)
 | 
			
		||||
                        {
 | 
			
		||||
                            List<DrugPleaseManuNo> drugManuInfoList = JsonConvert.DeserializeObject<List<DrugPleaseManuNo>>(item.DrugManuNo);
 | 
			
		||||
                            List<DrugPleaseManuNo> drugManuInfoList = JsonConvert.DeserializeObject<List<DrugPleaseManuNo>>(item._DrugManuNos);
 | 
			
		||||
                            drugManuInfoList.ForEach(dm => dm.DrugId = item.DrugId);
 | 
			
		||||
                            for (int i = 0; i < drugManuInfoList.Count; i++)
 | 
			
		||||
                            {
 | 
			
		||||
| 
						 | 
				
			
			@ -453,7 +463,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
 | 
			
		||||
            if (OrderDate != null)
 | 
			
		||||
            {
 | 
			
		||||
                sb.Append(" and i.do_date = @CreateTime ");
 | 
			
		||||
                sb.Append(" and DATE_FORMAT(i.do_date,'%Y-%m-%d') = @CreateTime ");
 | 
			
		||||
            }
 | 
			
		||||
            if (!String.IsNullOrEmpty(SearchValue))
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.select;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using Newtonsoft.Json;
 | 
			
		||||
using Prism.Commands;
 | 
			
		||||
using Prism.Mvvm;
 | 
			
		||||
using Prism.Regions;
 | 
			
		||||
| 
						 | 
				
			
			@ -150,11 +151,27 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                           .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (cd) => cd.drugInfo.PyCode.Contains(SearchValue))
 | 
			
		||||
                           .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (cd) => cd.drugInfo.DrugBarcode.Contains(SearchValue))
 | 
			
		||||
                           .WhereIF((_DrugPleaseState!=null&& _DrugPleaseState.StateValue>=0),(cd,dp)=>dp.State==_DrugPleaseState.StateValue)
 | 
			
		||||
                           .GroupBy(cd=>cd.Applyid)
 | 
			
		||||
                           .GroupBy(cd=>cd.DrugPleaseClaimId)
 | 
			
		||||
                           .GroupBy(cd => cd.DrugId)
 | 
			
		||||
                           .OrderByDescending(cd => cd.Createdate)
 | 
			
		||||
                           .OrderByDescending(cd => cd.DrugId)
 | 
			
		||||
                           .ToList();
 | 
			
		||||
            if (CollectDrugLst != null && CollectDrugLst.Count > 0)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                for (int i = 0; i < CollectDrugLst.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    CollectDrugLst[i].ManuNoList = new List<DrugPleaseManuNo>();
 | 
			
		||||
                    DrugPleaseClaim drugManuNoStr = SqlSugarHelper.Db.Queryable<DrugPleaseClaim>().Where(dp => dp.PleaseNo == CollectDrugLst[i].DrugPleaseClaimId && dp.DrugId == CollectDrugLst[i].DrugId).First();
 | 
			
		||||
 | 
			
		||||
                    CollectDrugLst[i].Quantity = drugManuNoStr.GetQuantity;
 | 
			
		||||
                    if (!string.IsNullOrEmpty(drugManuNoStr._DrugManuNos))
 | 
			
		||||
                    {
 | 
			
		||||
                        CollectDrugLst[i].ManuNoList = JsonConvert.DeserializeObject<List<DrugPleaseManuNo>>(drugManuNoStr._DrugManuNos);
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 刷新
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -175,7 +175,8 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                    SqlSugarHelper.Db.Updateable(new OrderInfo()
 | 
			
		||||
                    {
 | 
			
		||||
                        ApplyStatus = 1,
 | 
			
		||||
                        OrderNo = collectDrug.OrderNo
 | 
			
		||||
                        OrderNo = collectDrug.OrderNo,
 | 
			
		||||
                        MachineId= ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                    }).UpdateColumns(it => new { it.ApplyStatus }).Where(it => it.OrderNo == collectDrug.OrderNo).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                    //保存处方、请领申请中间表
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -162,6 +162,39 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        void RequestData_for_SurgicalShedule()
 | 
			
		||||
        {
 | 
			
		||||
            int totalCount = 0;
 | 
			
		||||
            List<CollectDrug> queryData = SqlSugarHelper.Db.Queryable<SurgicalSchedule>()
 | 
			
		||||
         .InnerJoin<SurgicalScheduleDetail>((oi, od) => oi.OperationId == od.OperationId)
 | 
			
		||||
         .InnerJoin<DrugInfo>((oi, od, di) => od.DrugId == di.DrugId.ToString())
 | 
			
		||||
         .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (oi, od, di) => di.DrugId.ToString() == SearchValue)
 | 
			
		||||
         .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (oi, od, di) => di.DrugName.Contains(SearchValue))
 | 
			
		||||
         .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (oi, od, di) => di.PyCode.Contains(SearchValue))
 | 
			
		||||
         .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (oi, od, di) => di.DrugBarcode.Contains(SearchValue))
 | 
			
		||||
         .Where(oi => oi.DmStatus == 1)
 | 
			
		||||
         .Where(oi => oi.HisState == 1)
 | 
			
		||||
         .GroupBy(oi => oi.ScheduleTime)
 | 
			
		||||
         .Select((oi, od, di) => new CollectDrug
 | 
			
		||||
         {
 | 
			
		||||
             PatientId = oi.PatientId,
 | 
			
		||||
             PName = oi.PName,
 | 
			
		||||
             Sex = oi.Sex,
 | 
			
		||||
             Age = oi.Age,
 | 
			
		||||
             IdNumber = oi.IdNumber,
 | 
			
		||||
             OrderNo = oi.OperationId,
 | 
			
		||||
             //DeptName = oi.DeptName,
 | 
			
		||||
             DrugName = di.DrugName,
 | 
			
		||||
             Quantity = od.Quantity,
 | 
			
		||||
             DrugSpec = di.DrugSpec,
 | 
			
		||||
             Manufactory = di.Manufactory,
 | 
			
		||||
             DrugId = di.DrugId.ToString(),
 | 
			
		||||
         }).ToList();
 | 
			
		||||
            CollectDrugs = queryData;
 | 
			
		||||
            TotalCount = totalCount;
 | 
			
		||||
            PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            int totalCount = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -126,12 +126,26 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                Status = 1;
 | 
			
		||||
                _portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    List<ChannelStock> singleChannels = ChannelStocks.FindAll(it => it.BoardType != 1);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    IEnumerable<string> strDrugName = ChannelStocks.Select(cs => cs.DrugInfo.DrugName);
 | 
			
		||||
                    string strNames = string.Empty;
 | 
			
		||||
                    foreach (string name in strDrugName)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (!strNames.Contains(name))
 | 
			
		||||
                        {
 | 
			
		||||
                            strNames += name + ";   ;";
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    int sumQuantity = ChannelStocks.Sum(cs => cs.AddQuantity);
 | 
			
		||||
                    _portUtil.SpeakAsync($"正在打开 {DrawerNo} 号抽屉,请加药 {strNames} ,数量共计{sumQuantity}");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    _portUtil.WindowName = "DrawerAddDrugWindow";
 | 
			
		||||
                    _portUtil.Operate = true;
 | 
			
		||||
                    _portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -136,8 +136,19 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                if (Status == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    Status = 1;
 | 
			
		||||
                    _portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
                    //_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
 | 
			
		||||
                    IEnumerable<string> strDrugName = ChannelStocks.Select(cs => cs.DrugInfo.DrugName);
 | 
			
		||||
                    string strNames = string.Empty;
 | 
			
		||||
                    foreach (string name in strDrugName)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (!strNames.Contains(name))
 | 
			
		||||
                        {
 | 
			
		||||
                            strNames += name + ";";
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    int sumQuantity = ChannelStocks.Sum(cs => cs.TakeQuantity);
 | 
			
		||||
                    _portUtil.SpeakAsync($"正在打开 {DrawerNo} 号抽屉,请取药 {strNames} ,数量共计 {sumQuantity}");
 | 
			
		||||
 | 
			
		||||
                    List<ChannelStock> singleChannels = ChannelStocks.FindAll(it => it.BoardType != 1);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -360,12 +371,12 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            if (ConfigurationManager.AppSettings["MultiBatch"].ToString().Equals("1"))
 | 
			
		||||
            {
 | 
			
		||||
                count = SqlSugarHelper.Db.Queryable<ChannelList>().Where(cs => cs.DrawerType != 3)
 | 
			
		||||
                .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrawerNo).Select(cs => SqlFunc.AggregateCount(cs.DrawerNo)).Count();
 | 
			
		||||
                .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")).GroupBy(cs => cs.DrawerNo).Select(cs => SqlFunc.AggregateCount(cs.DrawerNo)).Count();
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                count = SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType != 3)
 | 
			
		||||
                .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrawerNo).Select(cs => SqlFunc.AggregateCount(cs.DrawerNo)).Count();
 | 
			
		||||
                .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")).GroupBy(cs => cs.DrawerNo).Select(cs => SqlFunc.AggregateCount(cs.DrawerNo)).Count();
 | 
			
		||||
            }
 | 
			
		||||
            Is8Drawer = count < 9;
 | 
			
		||||
            Is16Drawer = count >= 16;
 | 
			
		||||
| 
						 | 
				
			
			@ -386,7 +397,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                .Includes(cs => cs.DrugInfo)
 | 
			
		||||
                .Where(cs => cs.DrawerNo == DrawerNo)
 | 
			
		||||
                .Where(cs => cs.DrugId != null)
 | 
			
		||||
                .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
 | 
			
		||||
                .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                .Where(cs => cs.Quantity > 0)
 | 
			
		||||
                .OrderBy(cs => cs.ColNo)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -132,7 +132,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            UserList.PassWord = MD5.GetMD5Hash(NewPass);
 | 
			
		||||
                            UserList.MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1";
 | 
			
		||||
                            UserList.MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM3";
 | 
			
		||||
                            // 插入
 | 
			
		||||
                            SqlSugarHelper.Db.Insertable<UserList>(UserList).InsertColumns(u => new { u.Id, u.Nickname, u.UserName, u.PassWord, u.UserBarcode, u.RoleId, u.MachineId }).ExecuteCommand();
 | 
			
		||||
                        }
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +154,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
 | 
			
		||||
        void GetAllRole()
 | 
			
		||||
        {
 | 
			
		||||
            Roles = SqlSugarHelper.Db.Queryable<RoleDm>().Where(r => r.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM1")).OrderBy(r => r.Id).ToList();
 | 
			
		||||
            Roles = SqlSugarHelper.Db.Queryable<RoleDm>().Where(r => r.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM3")).OrderBy(r => r.Id).ToList();
 | 
			
		||||
            RaisePropertyChanged("Roles");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -189,7 +189,18 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            int DrawerNo = grouping.Key;
 | 
			
		||||
            List<ChannelStock> channelStocks = grouping.ToList();
 | 
			
		||||
            channelStocks.ForEach(it => it.process = 1);
 | 
			
		||||
            _portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
 | 
			
		||||
            IEnumerable<string> strDrugName = channelStocks.Select(cs => cs.DrugInfo.DrugName);
 | 
			
		||||
            string strNames = string.Empty;
 | 
			
		||||
            foreach (string name in strDrugName)
 | 
			
		||||
            {
 | 
			
		||||
                if (!strNames.Contains(name))
 | 
			
		||||
                {
 | 
			
		||||
                    strNames += name + "  ;  ";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            int sumQuantity = channelStocks.Sum(cs => cs.AddQuantity);
 | 
			
		||||
            _portUtil.SpeakAsync($"正在打开 {DrawerNo} 号抽屉,请加药 {strNames} ,数量共计 {sumQuantity}个");
 | 
			
		||||
 | 
			
		||||
            List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -266,7 +266,17 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            int DrawerNo = grouping.Key;
 | 
			
		||||
            List<ChannelStock> channelStocks = grouping.ToList();
 | 
			
		||||
            channelStocks.ForEach(it => it.process = 1);
 | 
			
		||||
            _portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
            IEnumerable<string> strDrugName = channelStocks.Select(cs => cs.DrugInfo.DrugName);
 | 
			
		||||
            string strNames = string.Empty;
 | 
			
		||||
            foreach (string name in strDrugName)
 | 
			
		||||
            {
 | 
			
		||||
                if (!strNames.Contains(name))
 | 
			
		||||
                {
 | 
			
		||||
                    strNames += name + "  ;  ";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            int sumQuantity = channelStocks.Sum(cs => cs.TakeQuantity);
 | 
			
		||||
            _portUtil.SpeakAsync($"正在打开 {DrawerNo} 号抽屉,请取药 {strNames} ,数量共计 {sumQuantity}"); 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,8 @@ using DM_Weight.Finger;
 | 
			
		|||
using DM_Weight.Views;
 | 
			
		||||
using Unity;
 | 
			
		||||
using DM_Weight.HIKVISION;
 | 
			
		||||
using log4net.Repository.Hierarchy;
 | 
			
		||||
using log4net;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +32,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
 | 
			
		||||
        //private PortUtil _portUtil;
 | 
			
		||||
 | 
			
		||||
        private ScreenUtil _screenUtil;
 | 
			
		||||
        //private ScreenUtil _screenUtil;
 | 
			
		||||
 | 
			
		||||
        public SolidColorBrush Background
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -64,16 +66,17 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        IRegionManager _regionManager;
 | 
			
		||||
        IUnityContainer _container;
 | 
			
		||||
        private CHKFunction _cHKFunction;
 | 
			
		||||
        public MainWindowViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil, ScreenUtil screenUtil, CHKFunction cHKFunction)
 | 
			
		||||
        private readonly ILog logger = LogManager.GetLogger(typeof(PortUtil));
 | 
			
		||||
        public MainWindowViewModel(IRegionManager regionManager, IUnityContainer container, IEventAggregator eventAggregator, FingerprintUtil fingerprintUtil, CHKFunction cHKFunction)
 | 
			
		||||
        {
 | 
			
		||||
            //_portUtil = portUtil;
 | 
			
		||||
            this.eventAggregator = eventAggregator;
 | 
			
		||||
            this.eventAggregator.GetEvent<SnackbarEvent>().Subscribe(doMyPrismEvent2);
 | 
			
		||||
            _screenUtil = screenUtil;
 | 
			
		||||
            _fingerprintUtil = fingerprintUtil;
 | 
			
		||||
            _regionManager = regionManager;
 | 
			
		||||
            _container = container;
 | 
			
		||||
            _cHKFunction = cHKFunction;
 | 
			
		||||
 | 
			
		||||
            System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +84,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                _regionManager.RequestNavigate("MainRegion", "LoginWindow");
 | 
			
		||||
 | 
			
		||||
            }));
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void doMyPrismEvent2(AlertMsg msg)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -311,7 +311,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            //}
 | 
			
		||||
            List<OrderInfo> queryData = SqlSugarHelper.Db.Queryable<OrderInfo>()
 | 
			
		||||
                .InnerJoin<OrderDetail>((oi, od) => oi.OrderNo == od.OrderNo)
 | 
			
		||||
                .InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrugId), (oi, od, t) => od.DrugId == t.DrugId)
 | 
			
		||||
                .InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")).GroupBy(cs => cs.DrugId), (oi, od, t) => od.DrugId == t.DrugId)
 | 
			
		||||
                .WhereIF(OrderDate != null, oi => oi.OrderDate.ToString("yyyy-MM-dd") == OrderDate)
 | 
			
		||||
                .WhereIF(!(OrderDepartment.DeptName.Equals("全部")), oi => oi.DeptName == OrderDepartment.DeptName)
 | 
			
		||||
                //.WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PatientId"), oi => oi.PatientId == SearchValue)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -261,11 +261,24 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            int DrawerNo = grouping.Key;
 | 
			
		||||
            List<ChannelStock> channelStocks = grouping.ToList();
 | 
			
		||||
            channelStocks.ForEach(it => it.process = 1);
 | 
			
		||||
            _portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
            //_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            IEnumerable<string> strDrugName = singleChannels.Select(cs => cs.DrugInfo.DrugName);
 | 
			
		||||
            string strNames = string.Empty;
 | 
			
		||||
            foreach (string name in strDrugName)
 | 
			
		||||
            {
 | 
			
		||||
                if (!strNames.Contains(name))
 | 
			
		||||
                {
 | 
			
		||||
                    strNames += name;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            int sumQuantity = singleChannels.Sum(cs => cs.ReturnQuantity);
 | 
			
		||||
            _portUtil.SpeakAsync($"正在打开{DrawerNo}号抽屉,请加药{strNames},数量共计{sumQuantity}个");
 | 
			
		||||
 | 
			
		||||
            // 发送还药数量
 | 
			
		||||
            singleChannels.ForEach(it =>
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -169,7 +169,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        {
 | 
			
		||||
            orderDetails = SqlSugarHelper.Db.Queryable<OrderDetail>()
 | 
			
		||||
                .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"] ?? "DM3")).GroupBy(cs => cs.DrugId), (od, t) => od.DrugId == t.DrugId)
 | 
			
		||||
                .Where(od => od.OrderNo == OrderInfo.OrderNo)
 | 
			
		||||
                .ToList();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -183,7 +183,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                    .Includes<DrugInfo>(cs => cs.DrugInfo)
 | 
			
		||||
                    .Where(cs => cs.Quantity > 0)
 | 
			
		||||
                    .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                    .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
 | 
			
		||||
                    .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                    .WhereIF(!string.IsNullOrEmpty(orderDetail.SetEffDate), cs => cs.EffDate.Equals(orderDetail.SetEffDate))
 | 
			
		||||
                    .WhereIF(!string.IsNullOrEmpty(orderDetail.SetManuNo), cs => cs.ManuNo.Equals(orderDetail.SetManuNo))
 | 
			
		||||
                    .Where(cs => cs.DrugId == orderDetail.DrugId)
 | 
			
		||||
| 
						 | 
				
			
			@ -263,7 +263,19 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            int DrawerNo = grouping.Key;
 | 
			
		||||
            List<ChannelStock> channelStocks = grouping.ToList();
 | 
			
		||||
            channelStocks.ForEach(it => it.process = 1);
 | 
			
		||||
            _portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            IEnumerable<string> strDrugName = channelStocks.Select(cs => cs.DrugInfo.DrugName);
 | 
			
		||||
            string strNames = string.Empty;
 | 
			
		||||
            foreach (string name in strDrugName)
 | 
			
		||||
            {
 | 
			
		||||
                if (!strNames.Contains(name))
 | 
			
		||||
                {
 | 
			
		||||
                    strNames += name+";";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            int sumQuantity = channelStocks.Sum(cs => cs.TakeQuantity);
 | 
			
		||||
            _portUtil.SpeakAsync($"正在打开 {DrawerNo} 号抽屉,请取药 {strNames} ,数量共计 {sumQuantity}");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -195,7 +195,10 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                {
 | 
			
		||||
                    Status = 1;
 | 
			
		||||
 | 
			
		||||
                    _portUtil.SpeakAsync("正在打开" + ChannelStock.DrawerNo + "号抽屉");
 | 
			
		||||
                    //_portUtil.SpeakAsync("正在打开" + ChannelStock.DrawerNo + "号抽屉");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    _portUtil.SpeakAsync($"正在打开 {ChannelStock.DrawerNo} 号抽屉,请加药 {MachineRecord.DrugInfo.DrugName} ,数量共计 {ReturnQuantity}个");
 | 
			
		||||
 | 
			
		||||
                    _portUtil.WindowName = WindowName;
 | 
			
		||||
                    _portUtil.BoardType = ChannelStock.BoardType;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -216,7 +216,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            int totalCount = 0;
 | 
			
		||||
            List<OrderInfo> queryData = SqlSugarHelper.Db.Queryable<OrderInfo>()
 | 
			
		||||
                .InnerJoin<OrderDetail>((oi, od) => oi.OrderNo == od.OrderNo)
 | 
			
		||||
                .InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrugId), (oi, od, t) => od.DrugId == t.DrugId)
 | 
			
		||||
                .InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3")).GroupBy(cs => cs.DrugId), (oi, od, t) => od.DrugId == t.DrugId)
 | 
			
		||||
                .WhereIF(OrderDate != null, oi => oi.OrderDate.ToString("yyyy-MM-dd") == OrderDate)
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("OrderNo"), oi => oi.OrderNo == SearchValue)
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PatientId"), oi => oi.PatientId == SearchValue)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -184,7 +184,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                .Includes<UserList>(mr => mr.User)
 | 
			
		||||
                .Where(mr => mr.Type == 2)
 | 
			
		||||
                .Where(mr => mr.Status < 2)
 | 
			
		||||
                .Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
 | 
			
		||||
                .Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                //.WhereIF(QueryDate != null, mr => mr.OperationTime.ToString("yyyy-MM-dd") == QueryDate)
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (mr) => mr.DrugInfo.DrugId.ToString().Contains(SearchValue))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (mr) => mr.DrugInfo.DrugName.Contains(SearchValue))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,310 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Report;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using Prism.Commands;
 | 
			
		||||
using Prism.Events;
 | 
			
		||||
using Prism.Mvvm;
 | 
			
		||||
using Prism.Regions;
 | 
			
		||||
using Prism.Services.Dialogs;
 | 
			
		||||
using SqlSugar;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class ReturnEmptyDestoryWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
 | 
			
		||||
    {
 | 
			
		||||
        private List<ChannelStock>? _channelStocks;
 | 
			
		||||
 | 
			
		||||
        public List<ChannelStock>? Channels
 | 
			
		||||
        {
 | 
			
		||||
            get { return _channelStocks; }
 | 
			
		||||
            set { SetProperty(ref _channelStocks, value); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private ChannelStock _channelStock;
 | 
			
		||||
 | 
			
		||||
        public ChannelStock Channel
 | 
			
		||||
        {
 | 
			
		||||
            get { return _channelStock; }
 | 
			
		||||
            set { SetProperty(ref _channelStock, value); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private DateTime? _startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
 | 
			
		||||
 | 
			
		||||
        public DateTime? StartDate
 | 
			
		||||
        {
 | 
			
		||||
            get => _startDate;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                if (value != null)
 | 
			
		||||
                {
 | 
			
		||||
                    SetProperty(ref _startDate, new DateTime(value?.Year ?? 0, value?.Month ?? 0, value?.Day ?? 0));
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    SetProperty(ref _startDate, value);
 | 
			
		||||
                }
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private DateTime? _endDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
 | 
			
		||||
 | 
			
		||||
        public DateTime? EndDate
 | 
			
		||||
        {
 | 
			
		||||
            get => _endDate;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                if (value != null)
 | 
			
		||||
                {
 | 
			
		||||
                    TimeSpan ershisi = new TimeSpan(23, 59, 59);
 | 
			
		||||
                    SetProperty(ref _endDate, new DateTime(value?.Year ?? 0, value?.Month ?? 0, value?.Day ?? 0, 23, 59, 59));
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    SetProperty(ref _endDate, value);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        IDialogService _dialogService;
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        public ReturnEmptyDestoryWindowViewModel(IDialogService dialogService, IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            _dialogService = dialogService;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand RowSelected
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                if (Channel != null && Channel.DrugId == null)
 | 
			
		||||
                {
 | 
			
		||||
                    DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                    dialogParameters.Add("DrawerNo", Channel.DrawerNo);
 | 
			
		||||
                    DialogServiceExtensions.ShowDialogHost(_dialogService, "BindingChannelDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
			
		||||
                }
 | 
			
		||||
                else if (Channel != null && Channel.CanReturnQuantity > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    Channels = Channels.Select(x =>
 | 
			
		||||
                    {
 | 
			
		||||
                        if (x.Id == Channel.Id)
 | 
			
		||||
                        {
 | 
			
		||||
                            x.IsSelected = !x.IsSelected;
 | 
			
		||||
                        }
 | 
			
		||||
                        return x;
 | 
			
		||||
                    }).ToList();
 | 
			
		||||
                    //DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                    //dialogParameters.Add("channel", Channel);
 | 
			
		||||
                    //DialogServiceExtensions.ShowDialogHost(_dialogService, "ReturnEmptyDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private List<ChannelStock> csList = new List<ChannelStock>();
 | 
			
		||||
 | 
			
		||||
        //销毁
 | 
			
		||||
        public DelegateCommand DestoryCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (Channels != null && Channels.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    csList = Channels.FindAll(it => it.IsSelected && it.Quantity > 0).ToList();
 | 
			
		||||
                    if (csList != null && csList.Count > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        //RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
                        //DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                        //List<string> msg = new List<string>();
 | 
			
		||||
                        //msg.Add("确认");
 | 
			
		||||
                        //msg.Add("确认要销毁吗?");
 | 
			
		||||
                        //dialogParameters.Add("msgInfo", msg);
 | 
			
		||||
                        //DialogServiceExtensions.ShowDialogHost(_dialogService, "ConfirmMessageDialog", dialogParameters, DestoryDialogResult, "RootDialog");
 | 
			
		||||
                        var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                        {
 | 
			
		||||
                            for (int i = 0; i < csList.Count; i++)
 | 
			
		||||
                            {
 | 
			
		||||
                                ChannelStock channelStock = csList[i];
 | 
			
		||||
                                channelStock.Quantity = 0;
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable(channelStock).ExecuteCommand();
 | 
			
		||||
                                MachineRecord machines = SqlSugarHelper.Db.Queryable<MachineRecord>()
 | 
			
		||||
                                 //.InnerJoin<ChannelStock>((mr, cs) => mr.DrugId == cs.DrugId)
 | 
			
		||||
                                 //.Where(mr => mr.DrugId.Contains(csList.Select(it => it.DrugId).ToList()) && mr.Type = 32)
 | 
			
		||||
                                 .Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                                 .Where(mr => mr.DrugId == channelStock.DrugId)
 | 
			
		||||
                                 .Where(mr => mr.Type == 32)
 | 
			
		||||
                                 .First();
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable(machines).ReSetValue(mr =>
 | 
			
		||||
                                {
 | 
			
		||||
                                    mr.IsDestroy = 1;
 | 
			
		||||
                                    mr.TakeUser = HomeWindowViewModel.Operator?.Id.ToString();
 | 
			
		||||
                                    mr.DestoryReviewerUser = HomeWindowViewModel.Reviewer?.Id.ToString();
 | 
			
		||||
                                }).ExecuteCommand();
 | 
			
		||||
                            }
 | 
			
		||||
                            return true;
 | 
			
		||||
                        });
 | 
			
		||||
 | 
			
		||||
                         
 | 
			
		||||
                        if (f.Data)
 | 
			
		||||
                        {
 | 
			
		||||
 | 
			
		||||
                            RequestData();
 | 
			
		||||
                            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);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "未勾选要销毁的数据或勾选的数据库存为0",
 | 
			
		||||
                            Type = MsgType.ERROR,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "没有要操作销毁的数据",
 | 
			
		||||
                        Type = MsgType.ERROR,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //空瓶销毁(根据还的空瓶)
 | 
			
		||||
        public DelegateCommand DestoryEmptyCommand { get => new DelegateCommand(DestoryEmptyAction); }
 | 
			
		||||
        private void DestoryEmptyAction()
 | 
			
		||||
        {
 | 
			
		||||
            //List<ChannelStock> records = Channels.FindAll(it => it.IsSelected).ToList();
 | 
			
		||||
            //if (records.Count > 0)
 | 
			
		||||
            if (Channel != null && Channel.DrugId != null && Channel.Quantity > 0)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                dialogParameters.Add("channel", Channel);
 | 
			
		||||
                DialogServiceExtensions.ShowDialogHost(_dialogService, "DestoryEmptyDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = "请选择有库存的数据",
 | 
			
		||||
                    Type = MsgType.ERROR,
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void DoDialogResult(IDialogResult dialogResult)
 | 
			
		||||
        {
 | 
			
		||||
            // 委托   被动执行     被子窗口执行
 | 
			
		||||
            // dialogResult  第一方面可以拿到任意参数   第二方面   可判断关闭状态
 | 
			
		||||
            RequestData();
 | 
			
		||||
            //MessageBox.Show("返回值:" + dialogResult.Result.ToString());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //导出回收销毁记录
 | 
			
		||||
        public DelegateCommand DownloadRecordCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() => {
 | 
			
		||||
 | 
			
		||||
                GridReportUtil.PrintEmptyDestoryReport(StartDate, EndDate);
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand Query
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                RequestData();
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //这个方法用于拦截请求,continuationCallback(true)就是不拦截,continuationCallback(false)拦截本次操作
 | 
			
		||||
        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
 | 
			
		||||
        {
 | 
			
		||||
            continuationCallback(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //接收导航传过来的参数
 | 
			
		||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            //查询表格数据
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            Channels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                .LeftJoin<DrugInfo>((cs, di) => cs.DrugId == di.DrugId.ToString())
 | 
			
		||||
                .Where((cs) => cs.DrawerType != 1).Where(cs => cs.MachineId == ConfigurationManager.AppSettings["machineId"])
 | 
			
		||||
                .Where(cs=>cs.Quantity>0)
 | 
			
		||||
                .Select((cs, di) => new ChannelStock
 | 
			
		||||
                {
 | 
			
		||||
                    CanReturnQuantity = SqlFunc.Subqueryable<MachineRecord>().Where(mr => mr.DrugId == cs.DrugId && mr.MachineId == ConfigurationManager.AppSettings["machineId"]).Where(mr => mr.Type == 2).Where(mr => mr.Status != 2).Select(mr => SqlFunc.IsNull(SqlFunc.AggregateSumNoNull(mr.Quantity - mr.ReturnQuantity1 - mr.ReturnQuantity2), 0)),
 | 
			
		||||
                    DrugInfo = new DrugInfo
 | 
			
		||||
                    {
 | 
			
		||||
                        DrugId = di.DrugId,
 | 
			
		||||
                        DrugName = di.DrugName,
 | 
			
		||||
                        DrugSpec = di.DrugSpec,
 | 
			
		||||
                        Manufactory = di.Manufactory,
 | 
			
		||||
                        PackUnit = di.PackUnit,
 | 
			
		||||
                    },
 | 
			
		||||
                    Quantity = cs.Quantity
 | 
			
		||||
                }, true)
 | 
			
		||||
                .OrderBy(cs => cs.DrawerNo)
 | 
			
		||||
                .OrderBy(cs => cs.ColNo)
 | 
			
		||||
                .ToList()
 | 
			
		||||
                ;
 | 
			
		||||
            _ = Channels.Count;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //每次导航的时候,该实列用不用重新创建,true是不重新创建,false是重新创建
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //这个方法用于拦截请求
 | 
			
		||||
        public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -206,6 +206,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                //quyaoChild.Add(mulityOrder);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            quyaoChild.Add(quyao1);
 | 
			
		||||
            quyaoChild.Add(quyao2);
 | 
			
		||||
            quyaoChild.Add(quyao3);
 | 
			
		||||
| 
						 | 
				
			
			@ -278,10 +279,10 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            jiayaoChild.Add(jiayao1);
 | 
			
		||||
            jiayaoChild.Add(jiayao2);
 | 
			
		||||
            jiayaoChild.Add(jiayao3);
 | 
			
		||||
            jiayaoChild.Add(jiayao4);
 | 
			
		||||
            jiayaoChild.Add(jiayao6);
 | 
			
		||||
            jiayaoChild.Add(jiayao7);
 | 
			
		||||
            jiayaoChild.Add(jiayao8);
 | 
			
		||||
            jiayaoChild.Add(jiayao4);
 | 
			
		||||
            jiayao.Children = jiayaoChild;
 | 
			
		||||
            defaultAll.Add(jiayao);
 | 
			
		||||
            #endregion
 | 
			
		||||
| 
						 | 
				
			
			@ -305,11 +306,17 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                PremissionName = "归还药品",
 | 
			
		||||
                PremissionPath = "ReturnDrugWindow2",
 | 
			
		||||
            };
 | 
			
		||||
            //PremissionDm huanyao2 = new PremissionDm
 | 
			
		||||
            //{
 | 
			
		||||
            //    Id = 32,
 | 
			
		||||
            //    PremissionName = "归还空瓶",
 | 
			
		||||
            //    PremissionPath = "ReturnEmptyWindow",
 | 
			
		||||
            //}; 
 | 
			
		||||
            PremissionDm huanyao2 = new PremissionDm
 | 
			
		||||
            {
 | 
			
		||||
                Id = 32,
 | 
			
		||||
                PremissionName = "归还空瓶",
 | 
			
		||||
                PremissionPath = "ReturnEmptyWindow",
 | 
			
		||||
                PremissionName = "空瓶销毁",
 | 
			
		||||
                PremissionPath = "ReturnEmptyDestoryWindow",
 | 
			
		||||
            };
 | 
			
		||||
            PremissionDm huanyao3 = new PremissionDm
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -317,8 +324,15 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                PremissionName = "归还记录",
 | 
			
		||||
                PremissionPath = "ReturnRecordWindow",
 | 
			
		||||
            };
 | 
			
		||||
            PremissionDm surgery = new PremissionDm
 | 
			
		||||
            {
 | 
			
		||||
                Id = 17,
 | 
			
		||||
                PremissionName = "手术核销",
 | 
			
		||||
                PremissionPath = "SurgeryTakeWindow"
 | 
			
		||||
            };
 | 
			
		||||
            huanyaoChild.Add(Convert.ToInt32(ConfigurationManager.AppSettings["returnDrugMode"]) == 1 ? huanyao11 : huanyao1);
 | 
			
		||||
            huanyaoChild.Add(huanyao2);
 | 
			
		||||
            huanyaoChild.Add(surgery);
 | 
			
		||||
            huanyaoChild.Add(huanyao3);
 | 
			
		||||
            huanyao.Children = huanyaoChild;
 | 
			
		||||
            defaultAll.Add(huanyao);
 | 
			
		||||
| 
						 | 
				
			
			@ -369,10 +383,10 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            };
 | 
			
		||||
            kuguanChild.Add(kuguan1);
 | 
			
		||||
            kuguanChild.Add(kuguan2);
 | 
			
		||||
            kuguanChild.Add(kuguan3);
 | 
			
		||||
            kuguanChild.Add(kuguan4);
 | 
			
		||||
            kuguanChild.Add(kuguan5);
 | 
			
		||||
            kuguanChild.Add(kuguan6);
 | 
			
		||||
            kuguanChild.Add(kuguan3);
 | 
			
		||||
            kuguanChild.Add(kuguan5);
 | 
			
		||||
            kuguan.Children = kuguanChild;
 | 
			
		||||
            defaultAll.Add(kuguan);
 | 
			
		||||
            #endregion
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -183,8 +183,19 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            int DrawerNo = grouping.Key;
 | 
			
		||||
            List<ChannelStock> channelStocks = grouping.ToList();
 | 
			
		||||
            channelStocks.ForEach(it => it.process = 1);
 | 
			
		||||
            _portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
            //_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
 | 
			
		||||
            IEnumerable<string> strDrugName = channelStocks.Select(cs => cs.DrugInfo.DrugName);
 | 
			
		||||
            string strNames = string.Empty;
 | 
			
		||||
            foreach (string name in strDrugName)
 | 
			
		||||
            {
 | 
			
		||||
                if (!strNames.Contains(name))
 | 
			
		||||
                {
 | 
			
		||||
                    strNames += name;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            int sumQuantity = channelStocks.Sum(cs => cs.AddQuantity);
 | 
			
		||||
            _portUtil.SpeakAsync($"正在打开 {DrawerNo} 号抽屉,请加药 {strNames} ,数量共计 {sumQuantity}");
 | 
			
		||||
 | 
			
		||||
            List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
 | 
			
		||||
            _portUtil.WindowName = WindowName;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -179,7 +179,18 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            int DrawerNo = grouping.Key;
 | 
			
		||||
            List<ChannelStock> channelStocks = grouping.ToList();
 | 
			
		||||
            channelStocks.ForEach(it => it.process = 1);
 | 
			
		||||
            _portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
            IEnumerable<string> strDrugName = channelStocks.Select(cs => cs.DrugInfo.DrugName);
 | 
			
		||||
            string strNames = string.Empty;
 | 
			
		||||
            foreach (string name in strDrugName)
 | 
			
		||||
            {
 | 
			
		||||
                if (!strNames.Contains(name))
 | 
			
		||||
                {
 | 
			
		||||
                    strNames += name+"  ;  ";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            int sumQuantity = channelStocks.Sum(cs => cs.TakeQuantity);
 | 
			
		||||
            _portUtil.SpeakAsync($"正在打开 {DrawerNo} 号抽屉,请取药 {strNames} ,数量共计 {sumQuantity}");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -159,7 +159,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                .Where(cs => cs.DrugId != null)
 | 
			
		||||
                .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                .Where(cs => cs.Quantity > 0)
 | 
			
		||||
                .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
 | 
			
		||||
                .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (cs) => cs.DrugId.Contains(SearchValue))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (cs) => cs.DrugInfo.DrugName.Contains(SearchValue))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (cs) => cs.DrugInfo.PyCode.Contains(SearchValue))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -183,7 +183,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            //    .Includes<DrugInfo>(cs => cs.DrugInfo)
 | 
			
		||||
            //    .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
            //    .Where(cs =>cs.DrugId != null)
 | 
			
		||||
            //    .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
 | 
			
		||||
            //    .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
 | 
			
		||||
            //    .WhereIF(!String.IsNullOrEmpty(SearchValue),cs => cs.DrugInfo.DrugName == SearchValue)
 | 
			
		||||
            //    .OrderBy(cs => cs.DrugId)
 | 
			
		||||
| 
						 | 
				
			
			@ -198,9 +198,9 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            ChannelStocks.Clear();
 | 
			
		||||
 | 
			
		||||
            List<DrugInfo> q = SqlSugarHelper.Db.Queryable<DrugInfo>()
 | 
			
		||||
                .Includes<ChannelStock>(di => di.channelStocks.Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.DrugId != null).OrderBy(cs => cs.DrawerNo).OrderBy(cs => cs.ColNo).ToList())
 | 
			
		||||
                .Includes<ChannelStock>(di => di.channelStocks.Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3") && cs.DrugId != null).OrderBy(cs => cs.DrawerNo).OrderBy(cs => cs.ColNo).ToList())
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue), di => di.DrugName == SearchValue)
 | 
			
		||||
              .Where(di => di.channelStocks.Any(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.DrugId != null))
 | 
			
		||||
              .Where(di => di.channelStocks.Any(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3") && cs.DrugId != null))
 | 
			
		||||
              .OrderBy(cs => cs.DrugId)
 | 
			
		||||
              .ToList();
 | 
			
		||||
            Drugs = q;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,859 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using DM_Weight.select;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using log4net;
 | 
			
		||||
using MaterialDesignThemes.Wpf;
 | 
			
		||||
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;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Channels;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Media;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class SurgeryTakeDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
 | 
			
		||||
        private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel));
 | 
			
		||||
        public string Title => "手术核销";
 | 
			
		||||
 | 
			
		||||
        private SurgicalSchedule _surgicalSchedule;
 | 
			
		||||
        public SurgicalSchedule _SurgicalSchedule { get => _surgicalSchedule; set => SetProperty(ref _surgicalSchedule, value); }
 | 
			
		||||
 | 
			
		||||
        private List<MachineRecord> machineRecordList;
 | 
			
		||||
        public List<MachineRecord> MachineRecordList { get => machineRecordList; set => SetProperty(ref machineRecordList, value); }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private string? _searchValue;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段值
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string? SearchValue
 | 
			
		||||
        {
 | 
			
		||||
            get { return _searchValue; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _searchValue, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static List<OrderTakeSelect> StaticSelects = new()
 | 
			
		||||
        {
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code = "DrugName",
 | 
			
		||||
                Name = "药品名称"
 | 
			
		||||
            },
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code = "PyCode",
 | 
			
		||||
                Name = "拼音码"
 | 
			
		||||
            },
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code = "DrugBarcode",
 | 
			
		||||
                Name = "药品条码"
 | 
			
		||||
            },
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code = "DrugId",
 | 
			
		||||
                Name = "药品编码"
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private List<OrderTakeSelect> _selects = StaticSelects;
 | 
			
		||||
 | 
			
		||||
        public List<OrderTakeSelect> Selects
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selects; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _selects, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private int _totalCount = 0;
 | 
			
		||||
        public int TotalCount { get => _totalCount; set => SetProperty(ref _totalCount, value); }
 | 
			
		||||
 | 
			
		||||
        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 = 9;
 | 
			
		||||
        public int PageSize
 | 
			
		||||
        {
 | 
			
		||||
            get => _pageSize;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _pageSize, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private int _status = 0;
 | 
			
		||||
 | 
			
		||||
        public int Status
 | 
			
		||||
        {
 | 
			
		||||
            get => _status; set => SetProperty(ref _status, 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);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        List<ChannelStock> ReturnStockLst;
 | 
			
		||||
 | 
			
		||||
        private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
 | 
			
		||||
        private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
 | 
			
		||||
 | 
			
		||||
        private OrderTakeSelect _selectedItem = StaticSelects[0];
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public OrderTakeSelect SelectedItem
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selectedItem; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _selectedItem, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private MachineRecord selectedRecord;
 | 
			
		||||
        public MachineRecord SelectedRecord { get => selectedRecord; set => SetProperty(ref selectedRecord, value); }
 | 
			
		||||
 | 
			
		||||
        private PortUtil _portUtil;
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        IDialogService _dialogService;
 | 
			
		||||
        public SurgeryTakeDialogViewModel(PortUtil portUtil, IEventAggregator eventAggregator, IDialogService DialogService)
 | 
			
		||||
        {
 | 
			
		||||
            _dialogService = DialogService;
 | 
			
		||||
            _portUtil = portUtil;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
 | 
			
		||||
        public event Action<IDialogResult> RequestClose;
 | 
			
		||||
 | 
			
		||||
        public bool CanCloseDialog()
 | 
			
		||||
        {
 | 
			
		||||
            return Status == 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogClosed()
 | 
			
		||||
        {
 | 
			
		||||
            // 取消消息订阅
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogOpened(IDialogParameters parameters)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
			
		||||
            SurgicalSchedule ss = parameters.GetValue<SurgicalSchedule>("SurgeryInfo");
 | 
			
		||||
            _SurgicalSchedule = ss;
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
        public async void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            int totalCount = 0;
 | 
			
		||||
            MachineRecordList = SqlSugarHelper.Db.Queryable<MachineRecord>()
 | 
			
		||||
                .Includes<DrugInfo>(mr => mr.DrugInfo)
 | 
			
		||||
                .Includes<UserList>(mr => mr.User)
 | 
			
		||||
                .Includes<SurgicalScheduleDetail>(mr => mr._SurgicalScheduleDetailLst)
 | 
			
		||||
                .Where(mr => mr.Type == 2)
 | 
			
		||||
                .Where(mr => mr.Status < 2)
 | 
			
		||||
                .Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                //.WhereIF(QueryDate != null, mr => mr.OperationTime.ToString("yyyy-MM-dd") == QueryDate)
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (mr) => mr.DrugInfo.DrugId.ToString().Contains(SearchValue))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (mr) => mr.DrugInfo.DrugName.Contains(SearchValue))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (mr) => mr.DrugInfo.PyCode.Contains(SearchValue))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (mr) => mr.DrugInfo.DrugBarcode.Contains(SearchValue))
 | 
			
		||||
                .OrderBy(mr => mr.OperationTime)
 | 
			
		||||
               .ToPageList(PageNum, PageSize, ref totalCount);
 | 
			
		||||
 | 
			
		||||
            MachineRecordList.ForEach(mr => mr.HasCheckNum = mr._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity));
 | 
			
		||||
            TotalCount = totalCount;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand BtnCloseCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                // 关闭当前窗口
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 选中行事件
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand RowSelected
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (SelectedRecord != null && selectedRecord.Id != null)
 | 
			
		||||
                {
 | 
			
		||||
                    MachineRecordList = MachineRecordList.Select(x =>
 | 
			
		||||
                    {
 | 
			
		||||
                        if (x.Id == SelectedRecord.Id)
 | 
			
		||||
                        {
 | 
			
		||||
                            x.IsSelected = !x.IsSelected;
 | 
			
		||||
                            if (x.IsSelected)
 | 
			
		||||
                            {
 | 
			
		||||
                                if (SelectedRecord._SurgicalScheduleDetailLst != null && SelectedRecord._SurgicalScheduleDetailLst.Count > 0)
 | 
			
		||||
                                {
 | 
			
		||||
                                    //已经核销数
 | 
			
		||||
                                    int HasCheckNum = SelectedRecord._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity);
 | 
			
		||||
                                    x.CheckQuantity = SelectedRecord.Quantity - HasCheckNum;
 | 
			
		||||
                                    x.ReturnQuantity1 = SelectedRecord.Quantity - HasCheckNum - x.CheckQuantity;
 | 
			
		||||
                                    x.ReturnQuantity2 = HasCheckNum + x.CheckQuantity;
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    x.CheckQuantity = SelectedRecord.Quantity;
 | 
			
		||||
                                    x.ReturnQuantity1 = 0;
 | 
			
		||||
                                    x.ReturnQuantity2 = SelectedRecord.Quantity;
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                x.CheckQuantity = 0;
 | 
			
		||||
                                x.ReturnQuantity1 = 0;
 | 
			
		||||
                                x.ReturnQuantity2 = 0;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        return x;
 | 
			
		||||
                    }).ToList();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 确认核销
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand AddSurgeryCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                List<MachineRecord> RecordsLst = MachineRecordList.FindAll(rl => rl.IsSelected && rl.CheckQuantity > 0).ToList();
 | 
			
		||||
                if (_SurgicalSchedule != null && RecordsLst.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    string operationId = _SurgicalSchedule.OperationId;
 | 
			
		||||
                    var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                    {
 | 
			
		||||
                        SqlSugarHelper.Db.Updateable(new SurgicalSchedule()
 | 
			
		||||
                        {
 | 
			
		||||
                            DmStatus = 1,
 | 
			
		||||
                            Id = _SurgicalSchedule.Id
 | 
			
		||||
                        }).UpdateColumns(it => new { it.DmStatus }).WhereColumns(it => new { it.Id }).ExecuteCommand();
 | 
			
		||||
                        for (int i = 0; i < RecordsLst.Count; i++)
 | 
			
		||||
                        {
 | 
			
		||||
                            SqlSugarHelper.Db.Insertable(new SurgicalScheduleDetail()
 | 
			
		||||
                            {
 | 
			
		||||
                                OperationId = operationId,
 | 
			
		||||
                                GetRecordId = RecordsLst[i].Id,
 | 
			
		||||
                                Quantity = RecordsLst[i].CheckQuantity,
 | 
			
		||||
                                DrugId = RecordsLst[i].DrugId,
 | 
			
		||||
                                ManuNo = RecordsLst[i].ManuNo,
 | 
			
		||||
                                EffDate = RecordsLst[i].EffDate.ToString(),
 | 
			
		||||
                                InsertUserId = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                            }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                            int hasQuantity = RecordsLst[i]._SurgicalScheduleDetailLst.Sum(sd => sd.Quantity);
 | 
			
		||||
                            int dmStatus = 0;
 | 
			
		||||
                            //已经全部挂上钩,修改dm_machine_record状态为完成
 | 
			
		||||
                            //if (hasQuantity + RecordsLst[i].CheckQuantity == RecordsLst[i].Quantity)
 | 
			
		||||
                            //{
 | 
			
		||||
                            //    dmStatus = 2;
 | 
			
		||||
                            //}
 | 
			
		||||
                            //else
 | 
			
		||||
                            {
 | 
			
		||||
                                dmStatus = 1;
 | 
			
		||||
                            }
 | 
			
		||||
                            SqlSugarHelper.Db.Updateable(new MachineRecord()
 | 
			
		||||
                            {
 | 
			
		||||
                                Status = dmStatus,
 | 
			
		||||
                                Id = RecordsLst[i].Id
 | 
			
		||||
                            }).UpdateColumns(it => new { it.Status }).WhereColumns(it => new { it.Id }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
                    });
 | 
			
		||||
                    if (f.IsSuccess)
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "核销完成",
 | 
			
		||||
                            Type = MsgType.SUCCESS,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        RequestData();
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        logger.Info($"核销异常");
 | 
			
		||||
 | 
			
		||||
                        SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                        SnackbarMessageQueue.Enqueue("核销异常!");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                    SnackbarMessageQueue.Enqueue("未选中数据,或选中数据核销数量为0");
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 全部归还(还药、还空瓶)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand ReturnCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                List<MachineRecord> RecordsLst = MachineRecordList.FindAll(rl => rl.IsSelected && rl.CheckQuantity == 0).ToList();
 | 
			
		||||
                ReturnStockLst = new List<ChannelStock>();
 | 
			
		||||
                if (RecordsLst.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    //待还药的记录
 | 
			
		||||
                    List<MachineRecord> ReturnDrugLst = RecordsLst.Where(rl => rl.ReturnQuantity1 > 0).ToList();
 | 
			
		||||
                    //待还空瓶的记录
 | 
			
		||||
                    List<MachineRecord> ReturnEmptyLst = RecordsLst.Where(rl => rl.ReturnQuantity2 > 0).ToList();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    for (int i = 0; i < ReturnDrugLst.Count; i++)
 | 
			
		||||
                    {
 | 
			
		||||
                        ChannelStock queryData = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                                               .Includes<DrugInfo>(cs => cs.DrugInfo)
 | 
			
		||||
                                               .Where(cs => cs.DrugId == ReturnDrugLst[i].DrugId)
 | 
			
		||||
                                               .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                                               .Where(cs => cs.ManuNo == ReturnDrugLst[i].ManuNo)
 | 
			
		||||
                                               .OrderBy(cs => cs.Quantity).First();
 | 
			
		||||
                        if (queryData != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            queryData.AddQuantity = ReturnDrugLst[i].ReturnQuantity1;
 | 
			
		||||
                            queryData.MachineRecordId = ReturnDrugLst[i].Id;
 | 
			
		||||
                            ReturnStockLst.Add(queryData);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    for (int j = 0; j < ReturnEmptyLst.Count; j++)
 | 
			
		||||
                    {
 | 
			
		||||
                        ChannelStock queryData = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                                              .Includes<DrugInfo>(cs => cs.DrugInfo)
 | 
			
		||||
                                              .Where(cs => cs.DrugId == ReturnEmptyLst[j].DrugId)
 | 
			
		||||
                                              .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                                              //.Where(cs => cs.ManuNo == ReturnEmptyLst[j].ManuNo)
 | 
			
		||||
                                              .Where(cs => cs.DrawerType == 2)
 | 
			
		||||
                                              .OrderBy(cs => cs.Quantity).First();
 | 
			
		||||
                        if (queryData != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            queryData.ReturnQuantity = ReturnEmptyLst[j].ReturnQuantity2;
 | 
			
		||||
                            queryData.MachineRecordId = ReturnEmptyLst[j].Id;
 | 
			
		||||
                            ReturnStockLst.Add(queryData);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (ReturnStockLst != null && ReturnStockLst.Count > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        ReturnStockLst = ReturnStockLst.OrderBy(cls => cls.DrawerNo).ToList();
 | 
			
		||||
                        //还药时AddQuantity有值;还空瓶时ReturnQuantity有值
 | 
			
		||||
                        enumerable = ReturnStockLst.GroupBy(cs => cs.DrawerNo, cs => cs);
 | 
			
		||||
                        enumerator = enumerable.GetEnumerator();
 | 
			
		||||
                        enumerator.MoveNext();
 | 
			
		||||
                        Status = 1;
 | 
			
		||||
                        OpenOneByOne();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
 | 
			
		||||
                        SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                        SnackbarMessageQueue.Enqueue("选中数据未绑定库位,请先进行绑定库位");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                    SnackbarMessageQueue.Enqueue("未选中数据,或选中数据核销数量不为0");
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 刷新
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand QueryCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                RequestData();
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        void DoMyPrismEvent(DeviceMsg msg)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            if (msg.WindowName == "SurgeryTakeWindow")
 | 
			
		||||
            {
 | 
			
		||||
                IGrouping<int, ChannelStock> grouping = enumerator.Current;
 | 
			
		||||
                int DrawerNo = grouping.Key;
 | 
			
		||||
                List<ChannelStock> 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<int, ChannelStock> groupingBefore = enumerator.Current;
 | 
			
		||||
                            int DrawerNoBefore = groupingBefore.Key;
 | 
			
		||||
                            if (enumerator.MoveNext())
 | 
			
		||||
                            {
 | 
			
		||||
                                IGrouping<int, ChannelStock> groupingAfter = enumerator.Current;
 | 
			
		||||
                                int DrawerNoAfter = groupingAfter.Key;
 | 
			
		||||
                                if (DrawerNoBefore < 9 && DrawerNoAfter > 8)
 | 
			
		||||
                                {
 | 
			
		||||
                                    Thread.Sleep(50);
 | 
			
		||||
                                }
 | 
			
		||||
                                OpenOneByOne();
 | 
			
		||||
                            }
 | 
			
		||||
                            // 已经全部取出
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                Status = 3;
 | 
			
		||||
 | 
			
		||||
                                //保存数据
 | 
			
		||||
 | 
			
		||||
                                //TakeFinish();
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        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<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        Status = 0;
 | 
			
		||||
                        break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void OpenOneByOne()
 | 
			
		||||
        {
 | 
			
		||||
            IGrouping<int, ChannelStock> grouping = enumerator.Current;
 | 
			
		||||
            int DrawerNo = grouping.Key;
 | 
			
		||||
            List<ChannelStock> channelStocks = grouping.ToList();
 | 
			
		||||
            channelStocks.ForEach(it => it.process = 1);
 | 
			
		||||
 | 
			
		||||
            IEnumerable<string> strDrugName = channelStocks.Select(cs => cs.DrugInfo.DrugName);
 | 
			
		||||
            string strNames = string.Empty;
 | 
			
		||||
            foreach (string name in strDrugName)
 | 
			
		||||
            {
 | 
			
		||||
                strNames += name;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
             
 | 
			
		||||
 | 
			
		||||
            int drugQuantity = channelStocks.Sum(cs => cs.AddQuantity);
 | 
			
		||||
 | 
			
		||||
            int emptyQuantity = channelStocks.Sum(cs => cs.ReturnQuantity);
 | 
			
		||||
            string speakTxt = $"正在打开{DrawerNo}号抽屉,请将{strNames}的";
 | 
			
		||||
            if (drugQuantity > 0)
 | 
			
		||||
            {
 | 
			
		||||
                speakTxt += $"共计{drugQuantity}个药放入抽屉!";
 | 
			
		||||
            }
 | 
			
		||||
            if (emptyQuantity > 0)
 | 
			
		||||
            {
 | 
			
		||||
                speakTxt += $"共计{emptyQuantity}个空瓶放入抽屉!";
 | 
			
		||||
            }
 | 
			
		||||
            _portUtil.SpeakAsync(speakTxt);
 | 
			
		||||
 | 
			
		||||
            //List<ChannelStock> singleChannels = channelStocks.FindAll(it => it.BoardType != 1);
 | 
			
		||||
 | 
			
		||||
            // 发送取药数量
 | 
			
		||||
            //singleChannels.ForEach(it =>
 | 
			
		||||
            //{
 | 
			
		||||
            //    try
 | 
			
		||||
            //    {
 | 
			
		||||
 | 
			
		||||
            //        _portUtil.TakeQuantity(DrawerNo, it.ColNo, it.TakeQuantity, it.Quantity - it.TakeQuantity);
 | 
			
		||||
            //    }
 | 
			
		||||
            //    catch (Exception ex)
 | 
			
		||||
            //    {
 | 
			
		||||
            //        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
            //        {
 | 
			
		||||
            //            Message = $"打开抽屉异常{ex.Message}",
 | 
			
		||||
            //            Type = MsgType.ERROR,
 | 
			
		||||
            //        };
 | 
			
		||||
            //        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
            //    }
 | 
			
		||||
            //});
 | 
			
		||||
 | 
			
		||||
            _portUtil.WindowName = "SurgeryTakeWindow";
 | 
			
		||||
            _portUtil.BoardType = channelStocks.Count > 0 ? channelStocks[0].BoardType : 1;
 | 
			
		||||
            _portUtil.ColNos = channelStocks.Select(it => it.ColNo).ToArray();
 | 
			
		||||
            _portUtil.DrawerNo = DrawerNo;
 | 
			
		||||
            _portUtil.Start();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private bool _isFinishClick = false;
 | 
			
		||||
 | 
			
		||||
        public bool IsFinishClick { get => _isFinishClick; set => SetProperty(ref _isFinishClick, value); }
 | 
			
		||||
        //完成
 | 
			
		||||
        private void TakeFinish()
 | 
			
		||||
        {
 | 
			
		||||
            IsFinishClick = true;
 | 
			
		||||
            bool bRet = false;
 | 
			
		||||
            var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
            {
 | 
			
		||||
                for (int i = 0; i < ReturnStockLst.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    ChannelStock it = ReturnStockLst[i];
 | 
			
		||||
                    int quantity = 0;
 | 
			
		||||
                    if (it.AddQuantity > 0)  //还药
 | 
			
		||||
                    {
 | 
			
		||||
                        quantity = it.AddQuantity;
 | 
			
		||||
                        bRet = ReturnDrug(it);
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        quantity = it.ReturnQuantity;
 | 
			
		||||
                        bRet = ReturnEmpty(it);
 | 
			
		||||
                    }
 | 
			
		||||
                    if (!bRet)
 | 
			
		||||
                    {
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                    // 更新屏显库存
 | 
			
		||||
                    if (it.BoardType == 5)
 | 
			
		||||
                    {
 | 
			
		||||
                        _portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity + quantity);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676"));
 | 
			
		||||
                    SnackbarMessageQueue.Enqueue("操作完成,库存已更新!");
 | 
			
		||||
                }
 | 
			
		||||
                return bRet;
 | 
			
		||||
            });
 | 
			
		||||
            if (!f.IsSuccess || !f.Data)
 | 
			
		||||
            {
 | 
			
		||||
                SnackbarBackground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                SnackbarMessageQueue.Enqueue("库存更新失败!");
 | 
			
		||||
            }
 | 
			
		||||
            Status = 0;
 | 
			
		||||
            IsFinishClick = false;
 | 
			
		||||
            RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 还药
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool ReturnDrug(ChannelStock stock)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                {
 | 
			
		||||
                    string InvoiceId = "RETURN_" + CurrentTimeMillis(); 
 | 
			
		||||
                    MachineRecord recordInfo = SqlSugarHelper.Db.Queryable<MachineRecord>().Where(rd => rd.Id == stock.MachineRecordId).First();
 | 
			
		||||
                    // 更新数据 库存信息
 | 
			
		||||
                    SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                    {
 | 
			
		||||
                        Quantity = stock.Quantity + stock.AddQuantity,
 | 
			
		||||
                        Id = stock.Id,
 | 
			
		||||
                    }).UpdateColumns(it => new { it.Quantity }).ExecuteCommand();
 | 
			
		||||
                    // 获取更新完库存后的药品库存
 | 
			
		||||
                    List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                        .Where(cs => cs.MachineId.Equals(stock.MachineId))
 | 
			
		||||
                        .Where(cs => cs.DrugId.Equals(stock.DrugId))
 | 
			
		||||
                        .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                        .ToList();
 | 
			
		||||
                    // 更新数据 取药记录 设置还药数量、状态 
 | 
			
		||||
                    SqlSugarHelper.Db.Updateable(new MachineRecord()
 | 
			
		||||
                    {
 | 
			
		||||
                        ReturnQuantity1 = recordInfo.ReturnQuantity1 + stock.AddQuantity,
 | 
			
		||||
                        Id = recordInfo.Id,
 | 
			
		||||
                        Status = (recordInfo.CanReturnQuantity - stock.AddQuantity) == 0 ? 2 : 1,
 | 
			
		||||
                    }).UpdateColumns(it => new { it.ReturnQuantity1, it.Status }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                    // 保存数据 还药记录
 | 
			
		||||
                    SqlSugarHelper.Db.Insertable(new MachineRecord()
 | 
			
		||||
                    {
 | 
			
		||||
                        MachineId = stock.MachineId,
 | 
			
		||||
                        DrawerNo = stock.DrawerNo,
 | 
			
		||||
                        ColNo = stock.ColNo,
 | 
			
		||||
                        DrugId = stock.DrugId,
 | 
			
		||||
                        ManuNo = stock.ManuNo,
 | 
			
		||||
                        EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                        Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                        OperationTime = DateTime.Now,
 | 
			
		||||
                        Quantity = stock.AddQuantity,
 | 
			
		||||
                        Type = 31,
 | 
			
		||||
                        InvoiceId = InvoiceId,
 | 
			
		||||
                        GetId = stock.MachineRecordId
 | 
			
		||||
                        //,StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                    }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                    //保存账册
 | 
			
		||||
                    SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                    {
 | 
			
		||||
                        DrugId = Convert.ToInt32(stock.DrugId),
 | 
			
		||||
                        Type = 1,
 | 
			
		||||
                        Department = ConfigurationManager.AppSettings["department"].ToString(),
 | 
			
		||||
                        InvoiceNo = InvoiceId,
 | 
			
		||||
                        ManuNo = stock.ManuNo,
 | 
			
		||||
                        EffDate = stock.EffDate,
 | 
			
		||||
                        AddQuantity = stock.AddQuantity,
 | 
			
		||||
                        UserId1 = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                        UserId2 = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                        MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                        CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
 | 
			
		||||
                        CreateTime = DateTime.Now
 | 
			
		||||
 | 
			
		||||
                    }).ExecuteCommand();
 | 
			
		||||
                    //修改凌晨生成的日结存数据
 | 
			
		||||
                    AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                    .Where(ab => ab.MachineId.Equals(stock.MachineId))
 | 
			
		||||
                    .Where(ab => ab.Type == 3)
 | 
			
		||||
                    .Where(ab => ab.DrugId == Convert.ToInt32(stock.DrugId))
 | 
			
		||||
                    .Where(ab => ab.ManuNo == stock.ManuNo)
 | 
			
		||||
                    .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                    if (accountBookG2Day != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + stock.AddQuantity;
 | 
			
		||||
                        SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
			
		||||
                        int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                        {
 | 
			
		||||
                            DrugId = Convert.ToInt32(stock.DrugId),
 | 
			
		||||
                            Type = 3,
 | 
			
		||||
                            ManuNo = stock.ManuNo,
 | 
			
		||||
                            EffDate = stock.EffDate,
 | 
			
		||||
                            YQuantity = 0,
 | 
			
		||||
                            ManuStock = stock.ReturnQuantity,
 | 
			
		||||
                            TotalStock = stock.ReturnQuantity,
 | 
			
		||||
                            UserId1 = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                            UserId2 = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                            MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                            CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
 | 
			
		||||
                            InvoiceNo = "日结存"
 | 
			
		||||
                        }).ExecuteCommand();
 | 
			
		||||
                        if (iDayResult <= 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"未写入日结存数据{stock.DrugId}-{stock.ManuNo}-{stock.EffDate}-{stock.AddQuantity}");
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    //修改凌晨生成的总结存数据
 | 
			
		||||
                    AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                    .Where(ab => ab.MachineId.Equals(stock.MachineId))
 | 
			
		||||
                    .Where(ab => ab.Type == 4)
 | 
			
		||||
                    .Where(ab => ab.DrugId == Convert.ToInt32(stock.DrugId))
 | 
			
		||||
                    .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                    if (accountBookG2Total != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + stock.AddQuantity;
 | 
			
		||||
                        SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
			
		||||
                        int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                        {
 | 
			
		||||
                            DrugId = Convert.ToInt32(stock.DrugId),
 | 
			
		||||
                            Type = 4,
 | 
			
		||||
                            YQuantity = 0,
 | 
			
		||||
                            ManuStock = stock.ReturnQuantity,
 | 
			
		||||
                            TotalStock = stock.ReturnQuantity,
 | 
			
		||||
                            UserId1 = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                            UserId2 = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                            MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                            CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
 | 
			
		||||
                            InvoiceNo = "总结存"
 | 
			
		||||
                        }).ExecuteCommand();
 | 
			
		||||
                        if (iTotalResult <= 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"未写入总结存数据{stock.DrugId}-{stock.AddQuantity}");
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
                if (f.IsSuccess)
 | 
			
		||||
                {
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                throw;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 还空瓶
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool ReturnEmpty(ChannelStock stock)
 | 
			
		||||
        {
 | 
			
		||||
            string InvoiceId = "RETURN_" + CurrentTimeMillis();
 | 
			
		||||
            var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                // 更新数据 库存信息
 | 
			
		||||
                SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                {
 | 
			
		||||
                    Quantity = stock.Quantity + stock.ReturnQuantity,
 | 
			
		||||
                    Id = stock.Id,
 | 
			
		||||
                }).UpdateColumns(it => new { it.Quantity }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                // 获取更新完库存后的药品库存
 | 
			
		||||
                List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                    .Where(cs => cs.MachineId.Equals(stock.MachineId))
 | 
			
		||||
                    .Where(cs => cs.DrugId.Equals(stock.DrugId))
 | 
			
		||||
                    .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                    .ToList();
 | 
			
		||||
 | 
			
		||||
                MachineRecord recordInfo = SqlSugarHelper.Db.Queryable<MachineRecord>().Where(rd => rd.Id == stock.MachineRecordId).First();
 | 
			
		||||
 | 
			
		||||
                // 更新数据 取药记录 设置还药数量、状态
 | 
			
		||||
                SqlSugarHelper.Db.Updateable(new MachineRecord()
 | 
			
		||||
                {
 | 
			
		||||
                    ReturnQuantity2 = stock.ReturnQuantity,
 | 
			
		||||
                    Id = recordInfo.Id,
 | 
			
		||||
                    Status = 2,
 | 
			
		||||
                }).UpdateColumns(it => new { it.ReturnQuantity2, it.Status }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                // 保存数据 还药空瓶记录
 | 
			
		||||
                SqlSugarHelper.Db.Insertable(new MachineRecord()
 | 
			
		||||
                {
 | 
			
		||||
                    MachineId = stock.MachineId,
 | 
			
		||||
                    DrawerNo = stock.DrawerNo,
 | 
			
		||||
                    ColNo = stock.ColNo,
 | 
			
		||||
                    DrugId = stock.DrugId,
 | 
			
		||||
                    ManuNo = stock.ManuNo,
 | 
			
		||||
                    EffDate = !String.IsNullOrEmpty(stock.EffDate) ? DateTime.ParseExact(stock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                    Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                    Reviewer = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                    OperationTime = DateTime.Now,
 | 
			
		||||
                    Quantity = stock.ReturnQuantity, //ReturnQuantity,
 | 
			
		||||
                    Type = 32,
 | 
			
		||||
                    InvoiceId = InvoiceId,
 | 
			
		||||
                    GetId = stock.MachineRecordId
 | 
			
		||||
                    //,StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                return true;
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            if (!f.IsSuccess || !f.Data)
 | 
			
		||||
            {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public long CurrentTimeMillis()
 | 
			
		||||
        {
 | 
			
		||||
            return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 取消
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand CancleTake
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                _portUtil.ResetData();
 | 
			
		||||
                Status = 0;
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        // 完成按钮
 | 
			
		||||
        public DelegateCommand TakeFinishCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(TakeFinish);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,230 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.select;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using Prism.Commands;
 | 
			
		||||
using Prism.Events;
 | 
			
		||||
using Prism.Mvvm;
 | 
			
		||||
using Prism.Regions;
 | 
			
		||||
using Prism.Services.Dialogs;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class SurgeryTakeWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
 | 
			
		||||
    {
 | 
			
		||||
        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);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        IDialogService _dialogService;
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
 | 
			
		||||
        private DelegateCommand _rowSelected;
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand RowSelected => _rowSelected ??= new DelegateCommand(OpenOrderDialog);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public SurgeryTakeWindowViewModel(IDialogService DialogService, IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            _dialogService = DialogService;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static List<OrderTakeSelect> StaticOrderTakeSelects = new()
 | 
			
		||||
        {
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code = "OrderNo",
 | 
			
		||||
                Name = "手术号"
 | 
			
		||||
            }
 | 
			
		||||
        }; 
 | 
			
		||||
        private SurgicalSchedule? _selectedSurgicalSchedule;
 | 
			
		||||
 | 
			
		||||
        public SurgicalSchedule? SelectedSurgicalSchedule
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selectedSurgicalSchedule; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _selectedSurgicalSchedule, value);
 | 
			
		||||
 | 
			
		||||
                //OpenOrderDialog();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private string _scheduleTime = DateTime.Now.ToString("yyyy-MM-dd");
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件  手术计划开始时间
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string ScheduleTime
 | 
			
		||||
        {
 | 
			
		||||
            get { return _scheduleTime; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                if (!String.IsNullOrEmpty(value))
 | 
			
		||||
                {
 | 
			
		||||
                    SetProperty(ref _scheduleTime, DateTime.Parse(value).ToString("yyyy-MM-dd"));
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    SetProperty(ref _scheduleTime, value);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private string? _searchValue;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段值
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string? SearchValue
 | 
			
		||||
        {
 | 
			
		||||
            get { return _searchValue; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _searchValue, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private List<SurgicalSchedule> _surgicalSchedule = new();
 | 
			
		||||
 | 
			
		||||
        public List<SurgicalSchedule> _SurgicalSchedule { get { return _surgicalSchedule; } set { SetProperty(ref _surgicalSchedule, value); } }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
 | 
			
		||||
        public async void OpenOrderDialog()
 | 
			
		||||
        {
 | 
			
		||||
            if (SelectedSurgicalSchedule != null && SelectedSurgicalSchedule.DmStatus == 0 && SelectedSurgicalSchedule.HisState == 1)
 | 
			
		||||
            {
 | 
			
		||||
                // 此处延时1毫秒,等待页面渲染
 | 
			
		||||
                await Task.Delay(TimeSpan.FromMilliseconds(1));
 | 
			
		||||
                DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                dialogParameters.Add("SurgeryInfo", SelectedSurgicalSchedule);
 | 
			
		||||
                DialogServiceExtensions.ShowDialogHost(_dialogService, "SurgeryTakeDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void DoDialogResult(IDialogResult dialogResult)
 | 
			
		||||
        {
 | 
			
		||||
            // 委托   被动执行     被子窗口执行
 | 
			
		||||
            // dialogResult  第一方面可以拿到任意参数   第二方面   可判断关闭状态
 | 
			
		||||
            //if(dialogResult.Result == ButtonResult.OK)
 | 
			
		||||
            //{
 | 
			
		||||
            SelectedSurgicalSchedule = null;
 | 
			
		||||
            RequestData();
 | 
			
		||||
            //}
 | 
			
		||||
            //MessageBox.Show("返回值:" + dialogResult.Result.ToString());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //这个方法用于拦截请求,continuationCallback(true)就是不拦截,continuationCallback(false)拦截本次操作
 | 
			
		||||
        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
 | 
			
		||||
        {
 | 
			
		||||
            continuationCallback(true);
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 录入手术
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand AddSurgeryCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() => {
 | 
			
		||||
                DialogServiceExtensions.ShowDialogHost(_dialogService, "AddSurgeryDialog", null, DoDialogResult, "RootDialog");
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand QueryCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                RequestData();
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            _SurgicalSchedule.Clear();
 | 
			
		||||
            int totalCount = 0;
 | 
			
		||||
            List<SurgicalSchedule> queryData = SqlSugarHelper.Db.Queryable<SurgicalSchedule>()
 | 
			
		||||
                .WhereIF(ScheduleTime != null, ss => ss.ScheduleTime.ToString("yyyy-MM-dd") == ScheduleTime)
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue), ss => ss.OperationId == SearchValue) 
 | 
			
		||||
                .Where(ss => ss.DmStatus == 0)
 | 
			
		||||
                .Where(ss => ss.HisState == 1) 
 | 
			
		||||
                .GroupBy(ss => ss.OperationId)
 | 
			
		||||
                .ToPageList(PageNum, PageSize, ref totalCount);
 | 
			
		||||
            _SurgicalSchedule = queryData;
 | 
			
		||||
            TotalCount = totalCount;
 | 
			
		||||
            PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
 | 
			
		||||
        } 
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            // 取消消息订阅
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
 | 
			
		||||
        }
 | 
			
		||||
        void DoMyPrismEvent(DeviceMsg msg)
 | 
			
		||||
        {
 | 
			
		||||
            if (msg.EventType == EventType.CODESCAN)
 | 
			
		||||
            {
 | 
			
		||||
                SearchValue = msg.Code;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -175,7 +175,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            int totalcount = 0;
 | 
			
		||||
            UserList = SqlSugarHelper.Db.Queryable<UserList>()
 | 
			
		||||
                .Includes<RoleDm>(ul => ul.Role)
 | 
			
		||||
                .Where(ul => ul.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
 | 
			
		||||
                .Where(ul => ul.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) , (di) => di.Nickname.Contains(SearchValue))
 | 
			
		||||
                .ToPageList(PageNum, PageSize, ref totalcount)
 | 
			
		||||
                //.ToList()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -190,9 +190,9 @@
 | 
			
		|||
                    </Style>
 | 
			
		||||
                </DataGrid.Resources>
 | 
			
		||||
                <!--GroupStyle to group data-->
 | 
			
		||||
                <DataGrid.GroupStyle>
 | 
			
		||||
                <!--<DataGrid.GroupStyle>
 | 
			
		||||
                    <GroupStyle>
 | 
			
		||||
                        <!--Group DataItems into DataGroup-->
 | 
			
		||||
                        --><!--Group DataItems into DataGroup--><!--
 | 
			
		||||
                        <GroupStyle.ContainerStyle>
 | 
			
		||||
                            <Style TargetType="{x:Type GroupItem}">
 | 
			
		||||
                                <Setter Property="Template">
 | 
			
		||||
| 
						 | 
				
			
			@ -207,7 +207,7 @@
 | 
			
		|||
                                                        <TextBlock FontWeight="Bold" Text="{Binding Path=Name.DrugInfo.Manufactory,StringFormat=厂家:{0},}" />
 | 
			
		||||
                                                        <TextBlock FontWeight="Bold" Text="{Binding Path=Items,Converter={StaticResource GroupSumConverter}}" />
 | 
			
		||||
 | 
			
		||||
                                                        <!--<TextBlock FontWeight="Bold" Text="{Binding Path=Items,Converter={StaticResource GroupSumConverter}}" />-->
 | 
			
		||||
                                                        --><!--<TextBlock FontWeight="Bold" Text="{Binding Path=Items,Converter={StaticResource GroupSumConverter}}" />--><!--
 | 
			
		||||
 | 
			
		||||
                                                    </StackPanel>
 | 
			
		||||
                                                </Expander.Header>
 | 
			
		||||
| 
						 | 
				
			
			@ -220,19 +220,31 @@
 | 
			
		|||
                        </GroupStyle.ContainerStyle>
 | 
			
		||||
 | 
			
		||||
                    </GroupStyle>
 | 
			
		||||
                </DataGrid.GroupStyle>
 | 
			
		||||
                </DataGrid.GroupStyle>-->
 | 
			
		||||
                <DataGrid.Columns>
 | 
			
		||||
                    <DataGridTextColumn Width="100"
 | 
			
		||||
                    <DataGridTextColumn Width="100" Header="药品" 
 | 
			
		||||
                        IsReadOnly="True"
 | 
			
		||||
                        ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}" Binding="{Binding DrugInfo.DrugName}">                        
 | 
			
		||||
                    </DataGridTextColumn>
 | 
			
		||||
                    <DataGridTextColumn Width="100" Header="规格" 
 | 
			
		||||
                        IsReadOnly="True"
 | 
			
		||||
                        ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}" Binding="{Binding DrugInfo.DrugSpec}">                        
 | 
			
		||||
                    </DataGridTextColumn>
 | 
			
		||||
                    <DataGridTextColumn Width="180" Header="厂家" 
 | 
			
		||||
                        IsReadOnly="True"
 | 
			
		||||
                        ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}" Binding="{Binding DrugInfo.Manufactory}">                        
 | 
			
		||||
                    </DataGridTextColumn>
 | 
			
		||||
                    <DataGridTextColumn Width="60"
 | 
			
		||||
                        Binding="{Binding Location}"
 | 
			
		||||
                        Header="库位"
 | 
			
		||||
                        IsReadOnly="True"
 | 
			
		||||
                        ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}"/>
 | 
			
		||||
                    <DataGridTextColumn  Width="147"
 | 
			
		||||
                    <DataGridTextColumn  Width="80"
 | 
			
		||||
                        Binding="{Binding ManuNo}"
 | 
			
		||||
                        Header="批次"
 | 
			
		||||
                        IsReadOnly="True"
 | 
			
		||||
                        ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}"/>
 | 
			
		||||
                    <DataGridTextColumn  Width="147"
 | 
			
		||||
                    <DataGridTextColumn  Width="100"
 | 
			
		||||
                        Binding="{Binding EffDate}"
 | 
			
		||||
                        Header="效期"
 | 
			
		||||
                        IsReadOnly="True"
 | 
			
		||||
| 
						 | 
				
			
			@ -242,7 +254,7 @@
 | 
			
		|||
                        Header="库存"
 | 
			
		||||
                        IsReadOnly="True"
 | 
			
		||||
                        ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}"/>
 | 
			
		||||
                    <DataGridTemplateColumn Width="100"
 | 
			
		||||
                    <DataGridTemplateColumn Width="80"
 | 
			
		||||
                        Header="添加数量">
 | 
			
		||||
                        <DataGridTemplateColumn.CellTemplate>
 | 
			
		||||
                            <DataTemplate>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -145,11 +145,11 @@
 | 
			
		|||
                </GroupStyle>
 | 
			
		||||
            </DataGrid.GroupStyle>
 | 
			
		||||
            <DataGrid.Columns>
 | 
			
		||||
                <DataGridTextColumn Width="180"
 | 
			
		||||
                <!--<DataGridTextColumn Width="180"
 | 
			
		||||
                        Binding="{Binding OrderNo}"
 | 
			
		||||
                        Header="处方号"
 | 
			
		||||
                        IsReadOnly="True"
 | 
			
		||||
                        ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}"/>
 | 
			
		||||
                        ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}"/>-->
 | 
			
		||||
                <DataGridTextColumn Width="180"
 | 
			
		||||
                        Binding="{Binding drugInfo.DrugName}"
 | 
			
		||||
                        Header="药品名称"
 | 
			
		||||
| 
						 | 
				
			
			@ -165,11 +165,12 @@
 | 
			
		|||
                        Header="厂家"
 | 
			
		||||
                        IsReadOnly="True"
 | 
			
		||||
                        ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}"/>
 | 
			
		||||
                <DataGridTextColumn Width="80"
 | 
			
		||||
                <DataGridTextColumn Width="80"  Header="请领数"
 | 
			
		||||
                                    Binding="{Binding Quantity}" 
 | 
			
		||||
                                    Header="数量"
 | 
			
		||||
                                    IsReadOnly="True"
 | 
			
		||||
                                    ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}"/>
 | 
			
		||||
                                    ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}">
 | 
			
		||||
                </DataGridTextColumn>
 | 
			
		||||
                
 | 
			
		||||
                <!--<DataGridTextColumn Width="100"
 | 
			
		||||
                        Binding="{Binding CurrentMachineId}"
 | 
			
		||||
                        Header="当前所在"
 | 
			
		||||
| 
						 | 
				
			
			@ -181,6 +182,31 @@
 | 
			
		|||
                        IsReadOnly="True"
 | 
			
		||||
                        ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}"/>-->
 | 
			
		||||
 | 
			
		||||
                <DataGridTemplateColumn Header="批次" IsReadOnly="True">
 | 
			
		||||
                    <DataGridTemplateColumn.CellTemplate>
 | 
			
		||||
                        <DataTemplate>
 | 
			
		||||
                            <ListBox ItemsSource="{Binding ManuNoList}" DisplayMemberPath="ManuNo" materialDesign:ListBoxItemAssist.ShowSelection="False"></ListBox>
 | 
			
		||||
                        </DataTemplate>
 | 
			
		||||
                    </DataGridTemplateColumn.CellTemplate>
 | 
			
		||||
                </DataGridTemplateColumn>
 | 
			
		||||
 | 
			
		||||
                <DataGridTemplateColumn Header="效期" IsReadOnly="True">
 | 
			
		||||
                    <DataGridTemplateColumn.CellTemplate>
 | 
			
		||||
                        <DataTemplate>
 | 
			
		||||
                            <ListBox ItemsSource="{Binding ManuNoList}" DisplayMemberPath="EffDate" materialDesign:ListBoxItemAssist.ShowSelection="False"></ListBox>
 | 
			
		||||
                        </DataTemplate>
 | 
			
		||||
                    </DataGridTemplateColumn.CellTemplate>
 | 
			
		||||
                </DataGridTemplateColumn>
 | 
			
		||||
 | 
			
		||||
                <DataGridTemplateColumn Header="入库数" IsReadOnly="True">
 | 
			
		||||
                    <DataGridTemplateColumn.CellTemplate>
 | 
			
		||||
                        <DataTemplate>
 | 
			
		||||
                            <ListBox ItemsSource="{Binding ManuNoList}" DisplayMemberPath="Quantity" materialDesign:ListBoxItemAssist.ShowSelection="False"></ListBox>
 | 
			
		||||
                        </DataTemplate>
 | 
			
		||||
                    </DataGridTemplateColumn.CellTemplate>
 | 
			
		||||
                </DataGridTemplateColumn>
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
            </DataGrid.Columns>
 | 
			
		||||
        </DataGrid>
 | 
			
		||||
        <!--<Grid.RowDefinitions>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -117,9 +117,9 @@
 | 
			
		|||
                    <GridViewColumn  Width="200"
 | 
			
		||||
                        DisplayMemberBinding="{Binding OrderNo}"
 | 
			
		||||
                        Header="处方号"/>
 | 
			
		||||
                    <GridViewColumn Width="240"
 | 
			
		||||
                    <!--<GridViewColumn Width="240"
 | 
			
		||||
                        DisplayMemberBinding="{Binding DeptName}"
 | 
			
		||||
                        Header="科室"/>
 | 
			
		||||
                        Header="科室"/>-->
 | 
			
		||||
                    <GridViewColumn Width="240"
 | 
			
		||||
                        DisplayMemberBinding="{Binding DrugName}"
 | 
			
		||||
                        Header="药品名称"/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,329 @@
 | 
			
		|||
<UserControl x:Class="DM_Weight.Views.Dialog.AddSurgeryDialog"
 | 
			
		||||
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 | 
			
		||||
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 | 
			
		||||
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 | 
			
		||||
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 | 
			
		||||
             xmlns:local="clr-namespace:DM_Weight.Views.Dialog"
 | 
			
		||||
              xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" 
 | 
			
		||||
             xmlns:pagination="clr-namespace:DM_Weight.Components.pagination"
 | 
			
		||||
              xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
 | 
			
		||||
              xmlns:prism="http://prismlibrary.com/"
 | 
			
		||||
             xmlns:convert="clr-namespace:DM_Weight.Converter"
 | 
			
		||||
             mc:Ignorable="d"  
 | 
			
		||||
             MinWidth="880"
 | 
			
		||||
             MinHeight="479"
 | 
			
		||||
             Width="900"
 | 
			
		||||
             Height="650">
 | 
			
		||||
    <UserControl.Resources>
 | 
			
		||||
        <convert:StatusConverter x:Key="StatusConverter" />
 | 
			
		||||
        <Style x:Key="st" TargetType="GridViewColumnHeader">
 | 
			
		||||
            <Style.Setters>
 | 
			
		||||
                <Setter Property="Height">
 | 
			
		||||
                    <Setter.Value>55</Setter.Value>
 | 
			
		||||
                </Setter>
 | 
			
		||||
                <Setter Property="Background">
 | 
			
		||||
                    <Setter.Value>#31ccec</Setter.Value>
 | 
			
		||||
                </Setter>
 | 
			
		||||
                <Setter Property="Foreground">
 | 
			
		||||
                    <Setter.Value>white</Setter.Value>
 | 
			
		||||
                </Setter>
 | 
			
		||||
            </Style.Setters>
 | 
			
		||||
        </Style>
 | 
			
		||||
    </UserControl.Resources>
 | 
			
		||||
    <Grid>
 | 
			
		||||
        <Grid.RowDefinitions>
 | 
			
		||||
            <RowDefinition Height="Auto" />
 | 
			
		||||
            <RowDefinition Height="Auto" />
 | 
			
		||||
            <RowDefinition Height="Auto" />
 | 
			
		||||
            <RowDefinition Height="Auto" />
 | 
			
		||||
        </Grid.RowDefinitions>
 | 
			
		||||
        <Grid Background="#03a9f4" Grid.Row="0">
 | 
			
		||||
            <TextBlock VerticalAlignment="Center" Foreground="{DynamicResource PrimaryHueDarkForegroundBrush}" Margin="16 4 16 4" Style="{StaticResource MaterialDesignHeadline5TextBlock}" Text="录入手术" />
 | 
			
		||||
            <Button
 | 
			
		||||
                        Style="{StaticResource MaterialDesignIconForegroundButton}"
 | 
			
		||||
                        Foreground="{DynamicResource PrimaryHueDarkForegroundBrush}"
 | 
			
		||||
                        HorizontalAlignment="Right"
 | 
			
		||||
                        Command="{Binding BtnCloseCommand}"
 | 
			
		||||
                        ToolTip="关闭"
 | 
			
		||||
                    >
 | 
			
		||||
                <materialDesign:PackIcon Kind="Close" Width="34" Height="34" />
 | 
			
		||||
            </Button>
 | 
			
		||||
        </Grid>
 | 
			
		||||
        <materialDesign:Card Grid.Row="1">
 | 
			
		||||
            <Grid Margin="0 6 0 6" VerticalAlignment="Center" HorizontalAlignment="Left">
 | 
			
		||||
                <Grid.RowDefinitions>
 | 
			
		||||
                    <RowDefinition Height="Auto"/>
 | 
			
		||||
                    <RowDefinition Height="Auto"/>
 | 
			
		||||
                </Grid.RowDefinitions>
 | 
			
		||||
                <Grid.ColumnDefinitions>
 | 
			
		||||
                    <ColumnDefinition  Width="150"/>
 | 
			
		||||
                    <ColumnDefinition  Width="130"/>
 | 
			
		||||
                    <ColumnDefinition  Width="130"/>
 | 
			
		||||
                    <ColumnDefinition  Width="130"/>
 | 
			
		||||
                    <ColumnDefinition  Width="350"/>
 | 
			
		||||
                </Grid.ColumnDefinitions>
 | 
			
		||||
                <TextBox
 | 
			
		||||
                    Grid.Row="0"
 | 
			
		||||
                    Grid.Column="0"  
 | 
			
		||||
                    materialDesign:HintAssist.Hint="姓名"
 | 
			
		||||
                    Text="{Binding _SurgicalSchedule.PName}"
 | 
			
		||||
                    Margin="6"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedTextBox}"/>
 | 
			
		||||
                <ComboBox
 | 
			
		||||
                Grid.Column="1"
 | 
			
		||||
                Margin="6 0 0 0"
 | 
			
		||||
                Style="{StaticResource MaterialDesignOutlinedComboBox}"
 | 
			
		||||
                SelectedItem="{Binding SelectedSex}"
 | 
			
		||||
                DisplayMemberPath="Value"
 | 
			
		||||
                ItemsSource="{Binding SexKeyValue}"
 | 
			
		||||
                />
 | 
			
		||||
                <TextBox
 | 
			
		||||
                    Grid.Row="0"
 | 
			
		||||
                    Grid.Column="2"
 | 
			
		||||
                    materialDesign:HintAssist.Hint="年龄"
 | 
			
		||||
                    Text="{Binding _SurgicalSchedule.Age}"
 | 
			
		||||
                    Margin="6"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedTextBox}"/>
 | 
			
		||||
                <TextBox
 | 
			
		||||
                    Grid.Row="0"
 | 
			
		||||
                    Grid.Column="3"
 | 
			
		||||
                    materialDesign:HintAssist.Hint="身份证号"
 | 
			
		||||
                    Text="{Binding _SurgicalSchedule.IdNumber}"
 | 
			
		||||
                    Margin="6"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedTextBox}"/>
 | 
			
		||||
                <TextBox
 | 
			
		||||
                    Grid.Row="0"
 | 
			
		||||
                    Grid.Column="4"
 | 
			
		||||
                    materialDesign:HintAssist.Hint="入院诊断"
 | 
			
		||||
                    Text="{Binding _SurgicalSchedule.Indiagnosis}"
 | 
			
		||||
                    Margin="6"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedTextBox}"/>
 | 
			
		||||
                <TextBox
 | 
			
		||||
                    Grid.Row="1"
 | 
			
		||||
                    Grid.Column="0"
 | 
			
		||||
                    materialDesign:HintAssist.Hint="手术号"
 | 
			
		||||
                    Text="{Binding _SurgicalSchedule.OperationId}"
 | 
			
		||||
                    Margin="6"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedTextBox}"/>
 | 
			
		||||
                <TextBox
 | 
			
		||||
                    Grid.Row="1"
 | 
			
		||||
                    Grid.Column="1"
 | 
			
		||||
                    materialDesign:HintAssist.Hint="手术间代码"
 | 
			
		||||
                    Text="{Binding _SurgicalSchedule.OpRoomCode}"
 | 
			
		||||
                    Margin="6"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedTextBox}"/>
 | 
			
		||||
                <TextBox
 | 
			
		||||
                    Grid.Row="1"
 | 
			
		||||
                    Grid.Column="2" 
 | 
			
		||||
                    Text="{Binding _SurgicalSchedule.OpRoomName}"
 | 
			
		||||
                    materialDesign:HintAssist.Hint="手术间名称"
 | 
			
		||||
                    Margin="6"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedTextBox}"/>
 | 
			
		||||
                <DatePicker
 | 
			
		||||
                    Grid.Row="1"
 | 
			
		||||
                    Grid.Column="3" 
 | 
			
		||||
                    SelectedDate="{Binding _SurgicalSchedule.ScheduleTime, StringFormat=yyyy-MM-dd, TargetNullValue='',UpdateSourceTrigger=PropertyChanged}"
 | 
			
		||||
                    SelectedDateFormat="Short"
 | 
			
		||||
                    Margin="6 0 0 0"
 | 
			
		||||
                    materialDesign:HintAssist.Hint="手术日期"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedDatePicker}" />
 | 
			
		||||
                <DatePicker Width="200" HorizontalAlignment="Left"
 | 
			
		||||
                    Grid.Row="1"
 | 
			
		||||
                    Grid.Column="4" 
 | 
			
		||||
                    SelectedDate="{Binding _SurgicalSchedule.Indate, StringFormat=yyyy-MM-dd, TargetNullValue='',UpdateSourceTrigger=PropertyChanged}"
 | 
			
		||||
                    SelectedDateFormat="Short"
 | 
			
		||||
                    Margin="6 0 0 0"
 | 
			
		||||
                    materialDesign:HintAssist.Hint="入院日期"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedDatePicker}" />
 | 
			
		||||
            </Grid>
 | 
			
		||||
        </materialDesign:Card>
 | 
			
		||||
        <Grid  Grid.Row="2">
 | 
			
		||||
            <Grid.RowDefinitions>
 | 
			
		||||
                <RowDefinition Height="Auto" />
 | 
			
		||||
                <RowDefinition />
 | 
			
		||||
                <RowDefinition Height="Auto"/>
 | 
			
		||||
            </Grid.RowDefinitions>
 | 
			
		||||
            <Grid Margin="0 6 0 6" Grid.Row="0">
 | 
			
		||||
                <Grid.ColumnDefinitions>
 | 
			
		||||
                    <ColumnDefinition Width="110" />
 | 
			
		||||
                    <ColumnDefinition Width="180" />
 | 
			
		||||
                    <ColumnDefinition />
 | 
			
		||||
                </Grid.ColumnDefinitions>
 | 
			
		||||
                <ComboBox
 | 
			
		||||
                Grid.Column="0"
 | 
			
		||||
                Margin="6 0 0 0"
 | 
			
		||||
                Style="{StaticResource MaterialDesignOutlinedComboBox}"
 | 
			
		||||
                SelectedItem="{Binding SelectedItem}"
 | 
			
		||||
                DisplayMemberPath="Name"
 | 
			
		||||
                ItemsSource="{Binding Selects}"
 | 
			
		||||
                />
 | 
			
		||||
                <TextBox
 | 
			
		||||
                Grid.Column="1"
 | 
			
		||||
                Text="{Binding SearchValue}"
 | 
			
		||||
                materialDesign:HintAssist.Hint="{Binding SelectedItem.Name}"
 | 
			
		||||
                Margin="6 0 0 0"
 | 
			
		||||
                Style="{StaticResource MaterialDesignOutlinedTextBox}"/>
 | 
			
		||||
 | 
			
		||||
                <StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Right">
 | 
			
		||||
                    <Button
 | 
			
		||||
                       Visibility="{Binding Status,Converter={StaticResource StatusConverter}, ConverterParameter=ConfirmVsRefresh}"
 | 
			
		||||
                        HorizontalAlignment="Right"
 | 
			
		||||
                        Margin="0 0 3 0"
 | 
			
		||||
                        VerticalAlignment="Center"
 | 
			
		||||
                        Style="{StaticResource MaterialDesignOutlinedLightButton}"
 | 
			
		||||
                        Command="{Binding AddSurgeryCommand}"
 | 
			
		||||
                        Content="保存并核销" />
 | 
			
		||||
                    <Button
 | 
			
		||||
                        Visibility="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnVisible}"
 | 
			
		||||
                        materialDesign:ButtonProgressAssist.IsIndicatorVisible="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnLoading}"
 | 
			
		||||
                        materialDesign:ButtonProgressAssist.IsIndeterminate="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnLoading}"
 | 
			
		||||
                        HorizontalAlignment="Right"
 | 
			
		||||
                        Margin="0 0 3 0"
 | 
			
		||||
                        VerticalAlignment="Center"
 | 
			
		||||
                        Style="{StaticResource MaterialDesignOutlinedLightButton}"
 | 
			
		||||
                        Command="{Binding ReturnCommand}"
 | 
			
		||||
                        Content="全部归还" />
 | 
			
		||||
                    <Button
 | 
			
		||||
                            Margin="2"
 | 
			
		||||
                            Visibility="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=CompleteBtn}"
 | 
			
		||||
                            Style="{StaticResource MaterialDesignRaisedAccentButton}"
 | 
			
		||||
                            Content="完成"
 | 
			
		||||
                            Command="{Binding TakeFinishCommand}"/>
 | 
			
		||||
                    <Button
 | 
			
		||||
                            Margin="2"
 | 
			
		||||
                            Visibility="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=CancelBtn}"
 | 
			
		||||
                            Style="{StaticResource MaterialDesignRaisedButton}"
 | 
			
		||||
                            Background="Orange"
 | 
			
		||||
                            BorderBrush="Orange"
 | 
			
		||||
                            Content="取消"
 | 
			
		||||
                            Command="{Binding CancleTake}" Cursor="Hand" />
 | 
			
		||||
 | 
			
		||||
                    <Button
 | 
			
		||||
                        Visibility="{Binding Status,Converter={StaticResource StatusConverter}, ConverterParameter=ConfirmVsRefresh}"
 | 
			
		||||
                        HorizontalAlignment="Right"
 | 
			
		||||
                        Margin="0 0 6 0"
 | 
			
		||||
                        VerticalAlignment="Center"
 | 
			
		||||
                        Command="{Binding QueryCommand}"
 | 
			
		||||
                        Style="{StaticResource MaterialDesignOutlinedLightButton}"
 | 
			
		||||
                        ToolTip="刷新" Cursor="Hand">
 | 
			
		||||
                        <materialDesign:PackIcon Kind="Refresh" />
 | 
			
		||||
                    </Button>
 | 
			
		||||
                </StackPanel>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            </Grid>
 | 
			
		||||
            <ListView
 | 
			
		||||
            Grid.Row="1"
 | 
			
		||||
            ItemsSource="{Binding MachineRecordList}"
 | 
			
		||||
            SelectedItem="{Binding SelectedRecord}"
 | 
			
		||||
            materialDesign:ListViewAssist.HeaderRowBackground="#31ccec"
 | 
			
		||||
            materialDesign:DataGridAssist.ColumnHeaderPadding="10"
 | 
			
		||||
            materialDesign:ListViewAssist.ListViewItemPadding="13">
 | 
			
		||||
                <ListView.Resources>
 | 
			
		||||
                    <Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource {x:Type GridViewColumnHeader}}">
 | 
			
		||||
                        <Setter Property="Foreground" Value="White" />
 | 
			
		||||
                    </Style>
 | 
			
		||||
                </ListView.Resources>
 | 
			
		||||
                <i:Interaction.Triggers>
 | 
			
		||||
                    <i:EventTrigger EventName="SelectionChanged">
 | 
			
		||||
                        <i:InvokeCommandAction Command="{Binding RowSelected}" />
 | 
			
		||||
                    </i:EventTrigger>
 | 
			
		||||
                </i:Interaction.Triggers>
 | 
			
		||||
                <ListView.View>
 | 
			
		||||
                    <GridView ColumnHeaderContainerStyle="{StaticResource st}">
 | 
			
		||||
                        <GridViewColumn Header="选择" Width="40">
 | 
			
		||||
                            <GridViewColumn.CellTemplate>
 | 
			
		||||
                                <DataTemplate>
 | 
			
		||||
                                    <CheckBox IsChecked="{Binding IsSelected}"/>
 | 
			
		||||
                                </DataTemplate>
 | 
			
		||||
                            </GridViewColumn.CellTemplate>
 | 
			
		||||
                        </GridViewColumn>
 | 
			
		||||
                        <GridViewColumn Width="110"
 | 
			
		||||
                        Header="操作时间"
 | 
			
		||||
                        DisplayMemberBinding="{Binding OperationTime, StringFormat='yyyy-MM-dd HH:mm:ss'}"/>
 | 
			
		||||
                        <GridViewColumn Width="80"
 | 
			
		||||
                        Header="操作人"
 | 
			
		||||
                        DisplayMemberBinding="{Binding User.Nickname}" />
 | 
			
		||||
                        <GridViewColumn Width="130"
 | 
			
		||||
                        DisplayMemberBinding="{Binding DrugInfo.DrugName}"
 | 
			
		||||
                        Header="药品名称"/>
 | 
			
		||||
                        <GridViewColumn Width="80"
 | 
			
		||||
                        DisplayMemberBinding="{Binding DrugInfo.DrugSpec}"
 | 
			
		||||
                        Header="规格"/>
 | 
			
		||||
                        <GridViewColumn Width="80"
 | 
			
		||||
                        DisplayMemberBinding="{Binding ManuNo}"
 | 
			
		||||
                        Header="批次"/>
 | 
			
		||||
                        <GridViewColumn Width="80"
 | 
			
		||||
                        DisplayMemberBinding="{Binding EffDate, StringFormat=yyyy-MM-dd}"
 | 
			
		||||
                        Header="效期"/>
 | 
			
		||||
                        <GridViewColumn Width="40">
 | 
			
		||||
                            <GridViewColumn.Header>
 | 
			
		||||
                                <TextBlock Text="取药数量" TextWrapping="Wrap"/>
 | 
			
		||||
                            </GridViewColumn.Header>
 | 
			
		||||
                            <GridViewColumn.CellTemplate>
 | 
			
		||||
                                <DataTemplate>
 | 
			
		||||
                                    <TextBlock Text="{Binding Quantity}" TextWrapping="Wrap"/>
 | 
			
		||||
                                </DataTemplate>
 | 
			
		||||
                            </GridViewColumn.CellTemplate>
 | 
			
		||||
                        </GridViewColumn>
 | 
			
		||||
                        <GridViewColumn Width="40">
 | 
			
		||||
                            <GridViewColumn.Header>
 | 
			
		||||
                                <TextBlock Text="已核销数量" TextWrapping="Wrap"/>
 | 
			
		||||
                            </GridViewColumn.Header>
 | 
			
		||||
                            <GridViewColumn.CellTemplate>
 | 
			
		||||
                                <DataTemplate>
 | 
			
		||||
                                    <TextBlock Text="{Binding HasCheckNum}" TextWrapping="Wrap"/>
 | 
			
		||||
                                </DataTemplate>
 | 
			
		||||
                            </GridViewColumn.CellTemplate>
 | 
			
		||||
                        </GridViewColumn>
 | 
			
		||||
                        <GridViewColumn Header="核销数量" Width="80">
 | 
			
		||||
                            <GridViewColumn.CellTemplate>
 | 
			
		||||
                                <DataTemplate>
 | 
			
		||||
                                    <TextBox Style="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" Width="50">
 | 
			
		||||
                                        <TextBox.Text>
 | 
			
		||||
                                            <Binding Path="CheckQuantity" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
 | 
			
		||||
                                                <Binding.ValidationRules>
 | 
			
		||||
                                                    <ExceptionValidationRule />
 | 
			
		||||
                                                </Binding.ValidationRules>
 | 
			
		||||
                                            </Binding>
 | 
			
		||||
                                        </TextBox.Text>
 | 
			
		||||
                                    </TextBox>
 | 
			
		||||
                                </DataTemplate>
 | 
			
		||||
                            </GridViewColumn.CellTemplate>
 | 
			
		||||
                        </GridViewColumn>
 | 
			
		||||
                        <GridViewColumn Width="40">
 | 
			
		||||
                            <GridViewColumn.Header>
 | 
			
		||||
                                <TextBlock Text="还药数量" TextWrapping="Wrap"/>
 | 
			
		||||
                            </GridViewColumn.Header>
 | 
			
		||||
                            <GridViewColumn.CellTemplate>
 | 
			
		||||
                                <DataTemplate>
 | 
			
		||||
                                    <TextBlock Text="{Binding ReturnQuantity1}"/>
 | 
			
		||||
                                </DataTemplate>
 | 
			
		||||
                            </GridViewColumn.CellTemplate>
 | 
			
		||||
                        </GridViewColumn>
 | 
			
		||||
                        <GridViewColumn Width="40">
 | 
			
		||||
                            <GridViewColumn.Header>
 | 
			
		||||
                                <TextBlock Text="还空瓶数量" TextWrapping="Wrap"/>
 | 
			
		||||
                            </GridViewColumn.Header>
 | 
			
		||||
                            <GridViewColumn.CellTemplate>
 | 
			
		||||
                                <DataTemplate>
 | 
			
		||||
                                    <TextBlock Text="{Binding ReturnQuantity2}"/>
 | 
			
		||||
                                </DataTemplate>
 | 
			
		||||
                            </GridViewColumn.CellTemplate>
 | 
			
		||||
                        </GridViewColumn>
 | 
			
		||||
                    </GridView>
 | 
			
		||||
                </ListView.View>
 | 
			
		||||
            </ListView>
 | 
			
		||||
 | 
			
		||||
            <pagination:Pagination Grid.Row="2"
 | 
			
		||||
                                   CurrentPage="{Binding PageNum}"
 | 
			
		||||
                                   PageSize="{Binding PageSize}"
 | 
			
		||||
                                   TotalPages="{Binding TotalCount}"
 | 
			
		||||
                                   InfoTextIsEnabel="True"
 | 
			
		||||
                                />
 | 
			
		||||
            <materialDesign:Snackbar
 | 
			
		||||
                Background="{Binding SnackbarBackground}"
 | 
			
		||||
                MessageQueue="{Binding SnackbarMessageQueue}"/>
 | 
			
		||||
        </Grid>
 | 
			
		||||
    </Grid>
 | 
			
		||||
</UserControl>
 | 
			
		||||
| 
						 | 
				
			
			@ -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.Dialog
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// AddSurgeryDialog.xaml 的交互逻辑
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public partial class AddSurgeryDialog : UserControl
 | 
			
		||||
    {
 | 
			
		||||
        public AddSurgeryDialog()
 | 
			
		||||
        {
 | 
			
		||||
            InitializeComponent();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,242 @@
 | 
			
		|||
<UserControl x:Class="DM_Weight.Views.Dialog.SurgeryTakeDialog"
 | 
			
		||||
             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" 
 | 
			
		||||
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 | 
			
		||||
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 | 
			
		||||
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 | 
			
		||||
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 | 
			
		||||
             xmlns:local="clr-namespace:DM_Weight.Views.Dialog"
 | 
			
		||||
             xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
 | 
			
		||||
             xmlns:pagination="clr-namespace:DM_Weight.Components.pagination"
 | 
			
		||||
             xmlns:prism="http://prismlibrary.com/"
 | 
			
		||||
             xmlns:convert="clr-namespace:DM_Weight.Converter"
 | 
			
		||||
             mc:Ignorable="d" 
 | 
			
		||||
             MinWidth="880"
 | 
			
		||||
             MinHeight="479"
 | 
			
		||||
             Width="900"
 | 
			
		||||
             Height="650"
 | 
			
		||||
             >
 | 
			
		||||
    <UserControl.Resources>
 | 
			
		||||
        <convert:StatusConverter x:Key="StatusConverter" />
 | 
			
		||||
        <Style x:Key="st" TargetType="GridViewColumnHeader">
 | 
			
		||||
            <Style.Setters>
 | 
			
		||||
                <Setter Property="Height">
 | 
			
		||||
                    <Setter.Value>55</Setter.Value>
 | 
			
		||||
                </Setter>
 | 
			
		||||
                <Setter Property="Background">
 | 
			
		||||
                    <Setter.Value>#31ccec</Setter.Value>
 | 
			
		||||
                </Setter>
 | 
			
		||||
                <Setter Property="Foreground">
 | 
			
		||||
                    <Setter.Value>white</Setter.Value>
 | 
			
		||||
                </Setter>
 | 
			
		||||
            </Style.Setters>
 | 
			
		||||
        </Style>
 | 
			
		||||
    </UserControl.Resources>
 | 
			
		||||
    <Grid>
 | 
			
		||||
        <Grid.RowDefinitions>
 | 
			
		||||
            <RowDefinition Height="Auto" />
 | 
			
		||||
            <RowDefinition Height="Auto" />
 | 
			
		||||
            <RowDefinition Height="Auto" />
 | 
			
		||||
        </Grid.RowDefinitions>
 | 
			
		||||
        <Grid Background="#03a9f4" Grid.Row="0">
 | 
			
		||||
            <TextBlock VerticalAlignment="Center" Foreground="{DynamicResource PrimaryHueDarkForegroundBrush}" Margin="16 4 16 4" Style="{StaticResource MaterialDesignHeadline5TextBlock}" Text="手术核销" />
 | 
			
		||||
            <Button
 | 
			
		||||
                        Style="{StaticResource MaterialDesignIconForegroundButton}"
 | 
			
		||||
                        Foreground="{DynamicResource PrimaryHueDarkForegroundBrush}"
 | 
			
		||||
                        HorizontalAlignment="Right"
 | 
			
		||||
                        Command="{Binding BtnCloseCommand}"
 | 
			
		||||
                        ToolTip="关闭"
 | 
			
		||||
                    >
 | 
			
		||||
                <materialDesign:PackIcon Kind="Close" Width="34" Height="34" />
 | 
			
		||||
            </Button>
 | 
			
		||||
        </Grid>
 | 
			
		||||
        <Grid  Grid.Row="1">
 | 
			
		||||
            <Grid.RowDefinitions>
 | 
			
		||||
                <RowDefinition Height="Auto" />
 | 
			
		||||
                <RowDefinition />
 | 
			
		||||
                <RowDefinition Height="Auto"/>
 | 
			
		||||
            </Grid.RowDefinitions>
 | 
			
		||||
            <Grid Margin="0 6 0 6" Grid.Row="0">
 | 
			
		||||
                <Grid.ColumnDefinitions>
 | 
			
		||||
                    <ColumnDefinition Width="110" />
 | 
			
		||||
                    <ColumnDefinition Width="180" />
 | 
			
		||||
                    <ColumnDefinition />
 | 
			
		||||
                </Grid.ColumnDefinitions>
 | 
			
		||||
                <ComboBox
 | 
			
		||||
                Grid.Column="0"
 | 
			
		||||
                Margin="6 0 0 0"
 | 
			
		||||
                Style="{StaticResource MaterialDesignOutlinedComboBox}"
 | 
			
		||||
                SelectedItem="{Binding SelectedItem}"
 | 
			
		||||
                DisplayMemberPath="Name"
 | 
			
		||||
                ItemsSource="{Binding Selects}"
 | 
			
		||||
                />
 | 
			
		||||
                <TextBox
 | 
			
		||||
                Grid.Column="1"
 | 
			
		||||
                Text="{Binding SearchValue}"
 | 
			
		||||
                materialDesign:HintAssist.Hint="{Binding SelectedItem.Name}"
 | 
			
		||||
                Margin="6 0 0 0"
 | 
			
		||||
                Style="{StaticResource MaterialDesignOutlinedTextBox}"/>
 | 
			
		||||
 | 
			
		||||
                <StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Right">
 | 
			
		||||
                    <Button
 | 
			
		||||
                       Visibility="{Binding Status,Converter={StaticResource StatusConverter}, ConverterParameter=ConfirmVsRefresh}"
 | 
			
		||||
                        HorizontalAlignment="Right"
 | 
			
		||||
                        Margin="0 0 3 0"
 | 
			
		||||
                        VerticalAlignment="Center"
 | 
			
		||||
                        Style="{StaticResource MaterialDesignOutlinedLightButton}"
 | 
			
		||||
                        Command="{Binding AddSurgeryCommand}"
 | 
			
		||||
                        Content="确认核销" />
 | 
			
		||||
                    <Button
 | 
			
		||||
                        Visibility="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnVisible}"
 | 
			
		||||
                        materialDesign:ButtonProgressAssist.IsIndicatorVisible="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnLoading}"
 | 
			
		||||
                        materialDesign:ButtonProgressAssist.IsIndeterminate="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=opearBtnLoading}"
 | 
			
		||||
                        HorizontalAlignment="Right"
 | 
			
		||||
                        Margin="0 0 3 0"
 | 
			
		||||
                        VerticalAlignment="Center"
 | 
			
		||||
                        Style="{StaticResource MaterialDesignOutlinedLightButton}"
 | 
			
		||||
                        Command="{Binding ReturnCommand}"
 | 
			
		||||
                        Content="全部归还" />
 | 
			
		||||
                    <Button
 | 
			
		||||
                            Margin="2"
 | 
			
		||||
                            Visibility="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=CompleteBtn}"
 | 
			
		||||
                            Style="{StaticResource MaterialDesignRaisedAccentButton}"
 | 
			
		||||
                            Content="完成"
 | 
			
		||||
                            Command="{Binding TakeFinishCommand}"/>
 | 
			
		||||
                    <Button
 | 
			
		||||
                            Margin="2"
 | 
			
		||||
                            Visibility="{Binding Status, Converter={StaticResource StatusConverter}, ConverterParameter=CancelBtn}"
 | 
			
		||||
                            Style="{StaticResource MaterialDesignRaisedButton}"
 | 
			
		||||
                            Background="Orange"
 | 
			
		||||
                            BorderBrush="Orange"
 | 
			
		||||
                            Content="取消"
 | 
			
		||||
                            Command="{Binding CancleTake}" Cursor="Hand" />
 | 
			
		||||
 | 
			
		||||
                    <Button
 | 
			
		||||
                        Visibility="{Binding Status,Converter={StaticResource StatusConverter}, ConverterParameter=ConfirmVsRefresh}"
 | 
			
		||||
                        HorizontalAlignment="Right"
 | 
			
		||||
                        Margin="0 0 6 0"
 | 
			
		||||
                        VerticalAlignment="Center"
 | 
			
		||||
                        Command="{Binding QueryCommand}"
 | 
			
		||||
                        Style="{StaticResource MaterialDesignOutlinedLightButton}"
 | 
			
		||||
                        ToolTip="刷新" Cursor="Hand">
 | 
			
		||||
                        <materialDesign:PackIcon Kind="Refresh" />
 | 
			
		||||
                    </Button>
 | 
			
		||||
                </StackPanel>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            </Grid>
 | 
			
		||||
            <ListView
 | 
			
		||||
            Grid.Row="1"
 | 
			
		||||
            ItemsSource="{Binding MachineRecordList}"
 | 
			
		||||
            SelectedItem="{Binding SelectedRecord}"
 | 
			
		||||
            materialDesign:ListViewAssist.HeaderRowBackground="#31ccec"
 | 
			
		||||
            materialDesign:DataGridAssist.ColumnHeaderPadding="10"
 | 
			
		||||
            materialDesign:ListViewAssist.ListViewItemPadding="13">
 | 
			
		||||
                <ListView.Resources>
 | 
			
		||||
                    <Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource {x:Type GridViewColumnHeader}}">
 | 
			
		||||
                        <Setter Property="Foreground" Value="White" />
 | 
			
		||||
                    </Style>
 | 
			
		||||
                </ListView.Resources>
 | 
			
		||||
                <i:Interaction.Triggers>
 | 
			
		||||
                    <i:EventTrigger EventName="SelectionChanged">
 | 
			
		||||
                        <i:InvokeCommandAction Command="{Binding RowSelected}" />
 | 
			
		||||
                    </i:EventTrigger>
 | 
			
		||||
                </i:Interaction.Triggers>
 | 
			
		||||
                <ListView.View>
 | 
			
		||||
                    <GridView ColumnHeaderContainerStyle="{StaticResource st}">
 | 
			
		||||
                        <GridViewColumn Header="选择" Width="40">
 | 
			
		||||
                            <GridViewColumn.CellTemplate>
 | 
			
		||||
                                <DataTemplate>
 | 
			
		||||
                                    <CheckBox IsChecked="{Binding IsSelected}"/>
 | 
			
		||||
                                </DataTemplate>
 | 
			
		||||
                            </GridViewColumn.CellTemplate>
 | 
			
		||||
                        </GridViewColumn>
 | 
			
		||||
                        <GridViewColumn Width="110"
 | 
			
		||||
                        Header="操作时间"
 | 
			
		||||
                        DisplayMemberBinding="{Binding OperationTime, StringFormat='yyyy-MM-dd HH:mm:ss'}"/>
 | 
			
		||||
                        <GridViewColumn Width="80"
 | 
			
		||||
                        Header="操作人"
 | 
			
		||||
                        DisplayMemberBinding="{Binding User.Nickname}" />
 | 
			
		||||
                        <GridViewColumn Width="130"
 | 
			
		||||
                        DisplayMemberBinding="{Binding DrugInfo.DrugName}"
 | 
			
		||||
                        Header="药品名称"/>
 | 
			
		||||
                        <GridViewColumn Width="80"
 | 
			
		||||
                        DisplayMemberBinding="{Binding DrugInfo.DrugSpec}"
 | 
			
		||||
                        Header="规格"/>
 | 
			
		||||
                        <GridViewColumn Width="80"
 | 
			
		||||
                        DisplayMemberBinding="{Binding ManuNo}"
 | 
			
		||||
                        Header="批次"/>
 | 
			
		||||
                        <GridViewColumn Width="80"
 | 
			
		||||
                        DisplayMemberBinding="{Binding EffDate, StringFormat=yyyy-MM-dd}"
 | 
			
		||||
                        Header="效期"/>
 | 
			
		||||
                        <GridViewColumn Width="40">
 | 
			
		||||
                            <GridViewColumn.Header>
 | 
			
		||||
                                <TextBlock Text="取药数量" TextWrapping="Wrap"/>
 | 
			
		||||
                            </GridViewColumn.Header>
 | 
			
		||||
                            <GridViewColumn.CellTemplate>
 | 
			
		||||
                                <DataTemplate>
 | 
			
		||||
                                    <TextBlock Text="{Binding Quantity}" TextWrapping="Wrap"/>
 | 
			
		||||
                                </DataTemplate>
 | 
			
		||||
                            </GridViewColumn.CellTemplate>
 | 
			
		||||
                        </GridViewColumn>
 | 
			
		||||
                        <GridViewColumn Width="40">
 | 
			
		||||
                            <GridViewColumn.Header>
 | 
			
		||||
                                <TextBlock Text="已核销数量" TextWrapping="Wrap"/>
 | 
			
		||||
                            </GridViewColumn.Header>
 | 
			
		||||
                            <GridViewColumn.CellTemplate>
 | 
			
		||||
                                <DataTemplate>
 | 
			
		||||
                                    <TextBlock Text="{Binding HasCheckNum}" TextWrapping="Wrap"/>
 | 
			
		||||
                                </DataTemplate>
 | 
			
		||||
                            </GridViewColumn.CellTemplate>
 | 
			
		||||
                        </GridViewColumn>
 | 
			
		||||
                        <GridViewColumn Header="核销数量" Width="80">
 | 
			
		||||
                            <GridViewColumn.CellTemplate>
 | 
			
		||||
                                <DataTemplate>
 | 
			
		||||
                                    <TextBox Style="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" Width="50">
 | 
			
		||||
                                        <TextBox.Text>
 | 
			
		||||
                                            <Binding Path="CheckQuantity" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
 | 
			
		||||
                                                <Binding.ValidationRules>
 | 
			
		||||
                                                    <ExceptionValidationRule />
 | 
			
		||||
                                                </Binding.ValidationRules>
 | 
			
		||||
                                            </Binding>
 | 
			
		||||
                                        </TextBox.Text>
 | 
			
		||||
                                    </TextBox>
 | 
			
		||||
                                </DataTemplate>
 | 
			
		||||
                            </GridViewColumn.CellTemplate>
 | 
			
		||||
                        </GridViewColumn>
 | 
			
		||||
                        <GridViewColumn Width="40">
 | 
			
		||||
                            <GridViewColumn.Header>
 | 
			
		||||
                                <TextBlock Text="还药数量" TextWrapping="Wrap"/>
 | 
			
		||||
                            </GridViewColumn.Header>
 | 
			
		||||
                            <GridViewColumn.CellTemplate>
 | 
			
		||||
                                <DataTemplate>
 | 
			
		||||
                                    <TextBlock Text="{Binding ReturnQuantity1}"/>
 | 
			
		||||
                                </DataTemplate>
 | 
			
		||||
                            </GridViewColumn.CellTemplate>
 | 
			
		||||
                        </GridViewColumn>
 | 
			
		||||
                        <GridViewColumn Width="40">
 | 
			
		||||
                            <GridViewColumn.Header>
 | 
			
		||||
                                <TextBlock Text="还空瓶数量" TextWrapping="Wrap"/>
 | 
			
		||||
                            </GridViewColumn.Header>
 | 
			
		||||
                            <GridViewColumn.CellTemplate>
 | 
			
		||||
                                <DataTemplate>
 | 
			
		||||
                                    <TextBlock Text="{Binding ReturnQuantity2}"/>
 | 
			
		||||
                                </DataTemplate>
 | 
			
		||||
                            </GridViewColumn.CellTemplate>
 | 
			
		||||
                        </GridViewColumn>
 | 
			
		||||
                    </GridView>
 | 
			
		||||
                </ListView.View>
 | 
			
		||||
            </ListView>
 | 
			
		||||
 | 
			
		||||
            <pagination:Pagination Grid.Row="2"
 | 
			
		||||
                                   CurrentPage="{Binding PageNum}"
 | 
			
		||||
                                   PageSize="{Binding PageSize}"
 | 
			
		||||
                                   TotalPages="{Binding TotalCount}"
 | 
			
		||||
                                   InfoTextIsEnabel="True"
 | 
			
		||||
                                />
 | 
			
		||||
 | 
			
		||||
            <materialDesign:Snackbar
 | 
			
		||||
                Background="{Binding SnackbarBackground}"
 | 
			
		||||
                MessageQueue="{Binding SnackbarMessageQueue}"/>
 | 
			
		||||
        </Grid>
 | 
			
		||||
    </Grid>
 | 
			
		||||
</UserControl>
 | 
			
		||||
| 
						 | 
				
			
			@ -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.Dialog
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// SurgeryTakeDialog.xaml 的交互逻辑
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public partial class SurgeryTakeDialog : UserControl
 | 
			
		||||
    {
 | 
			
		||||
        public SurgeryTakeDialog()
 | 
			
		||||
        {
 | 
			
		||||
            InitializeComponent();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -52,7 +52,13 @@
 | 
			
		|||
                materialDesign:HintAssist.Hint="结束时间"
 | 
			
		||||
                Style="{StaticResource MaterialDesignOutlinedDatePicker}"
 | 
			
		||||
            />
 | 
			
		||||
 | 
			
		||||
            <!--<ComboBox
 | 
			
		||||
                    Margin="12 0 0 0"
 | 
			
		||||
                    Grid.Column="2"
 | 
			
		||||
                    ItemsSource="{Binding DrugTypeList}"
 | 
			
		||||
                    SelectedItem="{Binding _DrugType}"
 | 
			
		||||
                    materialDesign:HintAssist.Hint="药品类型"
 | 
			
		||||
                    IsEditable="True" DisplayMemberPath="TypeName"  Visibility="Collapsed"/>-->
 | 
			
		||||
            <StackPanel Grid.Column="3" Orientation="Horizontal" HorizontalAlignment="Right">
 | 
			
		||||
                <!--<Button
 | 
			
		||||
                    Margin="0 0 3 0"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,9 @@ using Unity;
 | 
			
		|||
using Unity.Lifetime;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using log4net.Repository.Hierarchy;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using log4net;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Views
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -28,6 +31,7 @@ namespace DM_Weight.Views
 | 
			
		|||
    {
 | 
			
		||||
        //IRegionManager _regionManager;
 | 
			
		||||
        //IUnityContainer _container;
 | 
			
		||||
        private readonly ILog logger = LogManager.GetLogger(typeof(PortUtil));
 | 
			
		||||
        public MainWindow()
 | 
			
		||||
        {
 | 
			
		||||
            InitializeComponent();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,110 @@
 | 
			
		|||
<UserControl x:Class="DM_Weight.Views.ReturnEmptyDestoryWindow"
 | 
			
		||||
              xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" 
 | 
			
		||||
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 | 
			
		||||
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 | 
			
		||||
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 | 
			
		||||
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 | 
			
		||||
             xmlns:local="clr-namespace:DM_Weight.Views"
 | 
			
		||||
             xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
 | 
			
		||||
             xmlns:prism="http://prismlibrary.com/" >
 | 
			
		||||
    <UserControl.Resources>
 | 
			
		||||
        <Style x:Key="st" TargetType="GridViewColumnHeader">
 | 
			
		||||
            <Style.Setters>
 | 
			
		||||
                <Setter Property="Height">
 | 
			
		||||
                    <Setter.Value>55</Setter.Value>
 | 
			
		||||
                </Setter>
 | 
			
		||||
                <Setter Property="Background">
 | 
			
		||||
                    <Setter.Value>#31ccec</Setter.Value>
 | 
			
		||||
                </Setter>
 | 
			
		||||
                <Setter Property="Foreground">
 | 
			
		||||
                    <Setter.Value>white</Setter.Value>
 | 
			
		||||
                </Setter>
 | 
			
		||||
            </Style.Setters>
 | 
			
		||||
        </Style>
 | 
			
		||||
    </UserControl.Resources>
 | 
			
		||||
    <Grid>
 | 
			
		||||
        <Grid.RowDefinitions>
 | 
			
		||||
            <RowDefinition Height="Auto" />
 | 
			
		||||
            <RowDefinition />
 | 
			
		||||
        </Grid.RowDefinitions>
 | 
			
		||||
        <Grid Margin="0 6 0 6" Grid.Row="0">
 | 
			
		||||
            <Grid.ColumnDefinitions>
 | 
			
		||||
                <ColumnDefinition Width="1.5*" />
 | 
			
		||||
                <ColumnDefinition Width="1.5*" />
 | 
			
		||||
                <ColumnDefinition Width="2*" />
 | 
			
		||||
                <ColumnDefinition Width="5*"/>
 | 
			
		||||
            </Grid.ColumnDefinitions>
 | 
			
		||||
            <DatePicker
 | 
			
		||||
                Grid.Column="0"
 | 
			
		||||
                SelectedDate="{Binding StartDate, TargetNullValue=''}"
 | 
			
		||||
                Margin="6 0 0 0"
 | 
			
		||||
                materialDesign:HintAssist.Hint="开始时间"
 | 
			
		||||
                Style="{StaticResource MaterialDesignOutlinedDatePicker}"
 | 
			
		||||
            />
 | 
			
		||||
            <DatePicker
 | 
			
		||||
                Grid.Column="1"
 | 
			
		||||
                SelectedDate="{Binding EndDate}"
 | 
			
		||||
                Margin="6 0 0 0"
 | 
			
		||||
                materialDesign:HintAssist.Hint="结束时间"
 | 
			
		||||
                Style="{StaticResource MaterialDesignOutlinedDatePicker}"
 | 
			
		||||
            />
 | 
			
		||||
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"  Grid.Column="3">
 | 
			
		||||
                <Button
 | 
			
		||||
                    Margin="0 0 3 0"
 | 
			
		||||
                    VerticalAlignment="Center"
 | 
			
		||||
                    Command="{Binding DestoryEmptyCommand}"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedLightButton}"
 | 
			
		||||
                    Content="销毁" />
 | 
			
		||||
                <Button
 | 
			
		||||
                    Margin="0 0 3 0"
 | 
			
		||||
                    VerticalAlignment="Center"
 | 
			
		||||
                    Command="{Binding DownloadRecordCommand}"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedLightButton}"
 | 
			
		||||
                    Content="导出回收销毁记录" />
 | 
			
		||||
                <Button
 | 
			
		||||
                    Margin="0 0 6 0"
 | 
			
		||||
                    VerticalAlignment="Center"
 | 
			
		||||
                    Command="{Binding Query}"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedLightButton}"
 | 
			
		||||
                    ToolTip="刷新"
 | 
			
		||||
                >
 | 
			
		||||
                    <materialDesign:PackIcon
 | 
			
		||||
                    Kind="Refresh" />
 | 
			
		||||
                </Button>
 | 
			
		||||
            </StackPanel>
 | 
			
		||||
        </Grid>
 | 
			
		||||
        <ListView
 | 
			
		||||
            Grid.Row="1"
 | 
			
		||||
            ItemsSource="{Binding Channels}"
 | 
			
		||||
            SelectedItem="{Binding Channel}"
 | 
			
		||||
            materialDesign:ListViewAssist.HeaderRowBackground="#31ccec"
 | 
			
		||||
            materialDesign:DataGridAssist.ColumnHeaderPadding="10"
 | 
			
		||||
            materialDesign:ListViewAssist.ListViewItemPadding="13">
 | 
			
		||||
            <ListView.Resources>
 | 
			
		||||
                <Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource {x:Type GridViewColumnHeader}}">
 | 
			
		||||
                    <Setter Property="Foreground" Value="White" />
 | 
			
		||||
                </Style>
 | 
			
		||||
            </ListView.Resources>
 | 
			
		||||
            <ListView.View>
 | 
			
		||||
                <GridView ColumnHeaderContainerStyle="{StaticResource st}">
 | 
			
		||||
                    <GridViewColumn Width="140"
 | 
			
		||||
                        Header="库位"
 | 
			
		||||
                        DisplayMemberBinding="{Binding Location}"/>
 | 
			
		||||
                    <GridViewColumn  Width="200"
 | 
			
		||||
                        Header="药品名称"
 | 
			
		||||
                        DisplayMemberBinding="{Binding DrugInfo.DrugName}" />
 | 
			
		||||
                    <GridViewColumn  Width="200"
 | 
			
		||||
                        DisplayMemberBinding="{Binding DrugInfo.DrugSpec}"
 | 
			
		||||
                        Header="规格"/>
 | 
			
		||||
                    <GridViewColumn  Width="200"
 | 
			
		||||
                        DisplayMemberBinding="{Binding DrugInfo.Manufactory}"
 | 
			
		||||
                        Header="厂家"/>
 | 
			
		||||
                    <GridViewColumn  Width="150"
 | 
			
		||||
                        DisplayMemberBinding="{Binding Quantity}"
 | 
			
		||||
                        Header="库存"/>
 | 
			
		||||
                </GridView>
 | 
			
		||||
            </ListView.View>
 | 
			
		||||
        </ListView>
 | 
			
		||||
 | 
			
		||||
    </Grid>
 | 
			
		||||
</UserControl>
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// ReturnEmptyDestoryWindow.xaml 的交互逻辑
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public partial class ReturnEmptyDestoryWindow : UserControl
 | 
			
		||||
    {
 | 
			
		||||
        public ReturnEmptyDestoryWindow()
 | 
			
		||||
        {
 | 
			
		||||
            InitializeComponent();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,134 @@
 | 
			
		|||
<UserControl x:Class="DM_Weight.Views.SurgeryTakeWindow"
 | 
			
		||||
             xmlns:pagination="clr-namespace:DM_Weight.Components.pagination"
 | 
			
		||||
             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" 
 | 
			
		||||
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 | 
			
		||||
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 | 
			
		||||
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
 | 
			
		||||
              xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
 | 
			
		||||
             xmlns:prism="http://prismlibrary.com/"
 | 
			
		||||
             xmlns:convert="clr-namespace:DM_Weight.Converter"
 | 
			
		||||
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 | 
			
		||||
             xmlns:local="clr-namespace:DM_Weight.Views"
 | 
			
		||||
             mc:Ignorable="d" >
 | 
			
		||||
    <UserControl.Resources>
 | 
			
		||||
        <convert:OrderStatusConverter x:Key="OrderStatusConverter" />
 | 
			
		||||
        <Style x:Key="st" TargetType="GridViewColumnHeader">
 | 
			
		||||
            <Style.Setters>
 | 
			
		||||
                <Setter Property="Height">
 | 
			
		||||
                    <Setter.Value>55</Setter.Value>
 | 
			
		||||
                </Setter>
 | 
			
		||||
                <Setter Property="Background">
 | 
			
		||||
                    <Setter.Value>#31ccec</Setter.Value>
 | 
			
		||||
                </Setter>
 | 
			
		||||
                <Setter Property="Foreground">
 | 
			
		||||
                    <Setter.Value>white</Setter.Value>
 | 
			
		||||
                </Setter>
 | 
			
		||||
            </Style.Setters>
 | 
			
		||||
        </Style>
 | 
			
		||||
    </UserControl.Resources>
 | 
			
		||||
    <Grid>
 | 
			
		||||
        <Grid.RowDefinitions>
 | 
			
		||||
            <RowDefinition Height="Auto" />
 | 
			
		||||
            <RowDefinition />
 | 
			
		||||
            <RowDefinition Height="Auto" />
 | 
			
		||||
        </Grid.RowDefinitions>
 | 
			
		||||
        <Grid Margin="0 6 0 6" Grid.Row="0">
 | 
			
		||||
            <Grid.ColumnDefinitions>
 | 
			
		||||
                <!--<ColumnDefinition Width="1.5*" />-->
 | 
			
		||||
                <ColumnDefinition Width="2*" />
 | 
			
		||||
                <ColumnDefinition Width="2*" />
 | 
			
		||||
                <ColumnDefinition Width="6*"/>
 | 
			
		||||
            </Grid.ColumnDefinitions>
 | 
			
		||||
 | 
			
		||||
            <TextBox
 | 
			
		||||
                Grid.Column="0"
 | 
			
		||||
                Text="{Binding SearchValue, UpdateSourceTrigger=PropertyChanged}"
 | 
			
		||||
                materialDesign:HintAssist.Hint="手术号"
 | 
			
		||||
                materialDesign:HintAssist.IsFloating="True"
 | 
			
		||||
                Margin="6 0 0 0"
 | 
			
		||||
                Style="{StaticResource MaterialDesignOutlinedTextBox}"/>
 | 
			
		||||
            <DatePicker
 | 
			
		||||
                Grid.Column="1"
 | 
			
		||||
                SelectedDate="{Binding ScheduleTime, StringFormat=yyyy-MM-dd, TargetNullValue='',UpdateSourceTrigger=PropertyChanged}"
 | 
			
		||||
                SelectedDateFormat="Short"
 | 
			
		||||
                Margin="6 0 0 0"
 | 
			
		||||
                materialDesign:HintAssist.Hint="手术日期"
 | 
			
		||||
                Style="{StaticResource MaterialDesignOutlinedDatePicker}" />
 | 
			
		||||
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Column="2">
 | 
			
		||||
                <Button
 | 
			
		||||
                    HorizontalAlignment="Right"
 | 
			
		||||
                    Margin="0 0 3 0"
 | 
			
		||||
                    VerticalAlignment="Center"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedLightButton}"
 | 
			
		||||
                    Command="{Binding AddSurgeryCommand}"
 | 
			
		||||
                    Content="录入手术" />
 | 
			
		||||
                <Button
 | 
			
		||||
                    HorizontalAlignment="Right"
 | 
			
		||||
                    Margin="0 0 6 0"
 | 
			
		||||
                    VerticalAlignment="Center"
 | 
			
		||||
                    Command="{Binding QueryCommand}"
 | 
			
		||||
                    Style="{StaticResource MaterialDesignOutlinedLightButton}"
 | 
			
		||||
                    ToolTip="刷新" Cursor="Hand">
 | 
			
		||||
                    <materialDesign:PackIcon
 | 
			
		||||
                    Kind="Refresh" />
 | 
			
		||||
                </Button>
 | 
			
		||||
            </StackPanel>
 | 
			
		||||
        </Grid>
 | 
			
		||||
        <ListView
 | 
			
		||||
            Grid.Row="1"  Grid.ColumnSpan="3"
 | 
			
		||||
            ItemsSource="{Binding _SurgicalSchedule}"
 | 
			
		||||
            SelectedItem="{Binding SelectedSurgicalSchedule}"
 | 
			
		||||
            materialDesign:ListViewAssist.HeaderRowBackground="#31ccec"> 
 | 
			
		||||
            <i:Interaction.Triggers>
 | 
			
		||||
                <i:EventTrigger EventName="SelectionChanged">
 | 
			
		||||
                    <i:InvokeCommandAction Command="{Binding RowSelected}" />
 | 
			
		||||
                </i:EventTrigger>
 | 
			
		||||
            </i:Interaction.Triggers>
 | 
			
		||||
            <ListView.ItemContainerStyle>
 | 
			
		||||
                <Style TargetType="ListViewItem" BasedOn="{StaticResource MaterialDesignGridViewItem}">
 | 
			
		||||
                    <Setter Property="ListView.Height" Value="50"/>
 | 
			
		||||
                </Style>
 | 
			
		||||
            </ListView.ItemContainerStyle>
 | 
			
		||||
            <ListView.View>
 | 
			
		||||
                <GridView ColumnHeaderContainerStyle="{StaticResource st}" >
 | 
			
		||||
                    <GridViewColumn Width="80"
 | 
			
		||||
                        Header="患者ID"
 | 
			
		||||
                        DisplayMemberBinding="{Binding PatientId}"/>
 | 
			
		||||
                    <GridViewColumn Width="100"
 | 
			
		||||
                        Header="姓名"
 | 
			
		||||
                        DisplayMemberBinding="{Binding PName}" />
 | 
			
		||||
                    <GridViewColumn Width="80"
 | 
			
		||||
                        DisplayMemberBinding="{Binding Sex}"
 | 
			
		||||
                        Header="性别"/>
 | 
			
		||||
                    <GridViewColumn  Width="80"
 | 
			
		||||
                        DisplayMemberBinding="{Binding Age}"
 | 
			
		||||
                        Header="年龄"/>
 | 
			
		||||
                    <GridViewColumn Width="153"
 | 
			
		||||
                        DisplayMemberBinding="{Binding IdNumber}"
 | 
			
		||||
                        Header="身份证"/>
 | 
			
		||||
                    <GridViewColumn Width="80"
 | 
			
		||||
                        DisplayMemberBinding="{Binding OperationId}"
 | 
			
		||||
                        Header="手术号"/>
 | 
			
		||||
                    <GridViewColumn Width="153"
 | 
			
		||||
                        DisplayMemberBinding="{Binding OpRoomCode}"
 | 
			
		||||
                        Header="手术间代码"/>
 | 
			
		||||
                    <GridViewColumn Width="153"
 | 
			
		||||
                        DisplayMemberBinding="{Binding OpRoomName}"
 | 
			
		||||
                        Header="手术间名称"/>
 | 
			
		||||
                    <GridViewColumn Width="153"
 | 
			
		||||
                        DisplayMemberBinding="{Binding ScheduleTime, StringFormat='yyyy-MM-dd HH:mm:ss'}"
 | 
			
		||||
                        Header="手术时间"/>
 | 
			
		||||
                    <GridViewColumn  Width="80"
 | 
			
		||||
                        DisplayMemberBinding="{Binding DmStatus, Converter={StaticResource OrderStatusConverter}}"
 | 
			
		||||
                        Header="状态"/>
 | 
			
		||||
                </GridView>
 | 
			
		||||
            </ListView.View>
 | 
			
		||||
        </ListView>
 | 
			
		||||
        <pagination:Pagination Grid.Row="2" Grid.ColumnSpan="3"
 | 
			
		||||
                                   CurrentPage="{Binding PageNum}"
 | 
			
		||||
                                   PageSize="{Binding PageSize}"
 | 
			
		||||
                                   TotalPages="{Binding TotalCount}"
 | 
			
		||||
                                   InfoTextIsEnabel="True"
 | 
			
		||||
                                />
 | 
			
		||||
    </Grid>
 | 
			
		||||
</UserControl>
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// SurgeryTakeWindow.xaml 的交互逻辑
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public partial class SurgeryTakeWindow : UserControl
 | 
			
		||||
    {
 | 
			
		||||
        public SurgeryTakeWindow()
 | 
			
		||||
        {
 | 
			
		||||
            InitializeComponent();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue