Compare commits
	
		
			83 Commits
		
	
	
		
			master
			...
			XiangXiang
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							
							
								
								 | 
						716f0a1967 | 
							 | 
					|
| 
							
							
								
								 | 
						24a3002084 | 
							 | 
					|
| 
							
							
								
								 | 
						f885bc52f1 | 
							 | 
					|
| 
							
							
								
								 | 
						1158f8ef23 | 
							 | 
					|
| 
							
							
								
								 | 
						e12f4ccbcd | 
							 | 
					|
| 
							
							
								
								 | 
						33cbdb530e | 
							 | 
					|
| 
							
							
								
								 | 
						ed6c98aa3b | 
							 | 
					|
| 
							
							
								
								 | 
						3fdbb790ba | 
							 | 
					|
| 
							
							
								
								 | 
						9dfb1a4363 | 
							 | 
					|
| 
							
							
								
								 | 
						fb23c500fc | 
							 | 
					|
| 
							
							
								
								 | 
						f4de7f9529 | 
							 | 
					|
| 
							
							
								
								 | 
						9c3da430ce | 
							 | 
					|
| 
							
							
								
								 | 
						8aaee587fa | 
							 | 
					|
| 
							
							
								
								 | 
						30c807ecd5 | 
							 | 
					|
| 
							
							
								
								 | 
						5708dc0675 | 
							 | 
					|
| 
							
							
								
								 | 
						34c6cbb69c | 
							 | 
					|
| 
							
							
								
								 | 
						29723e1054 | 
							 | 
					|
| 
							
							
								
								 | 
						83bbf8c453 | 
							 | 
					|
| 
							
							
								
								 | 
						98e770854e | 
							 | 
					|
| 
							
							
								
								 | 
						8478ac3626 | 
							 | 
					|
| 
							
							
								
								 | 
						1059dc01b0 | 
							 | 
					|
| 
							
							
								
								 | 
						c7a3ef80ad | 
							 | 
					|
| 
							
							
								
								 | 
						5793c1ffcf | 
							 | 
					|
| 
							
							
								
								 | 
						2368979203 | 
							 | 
					|
| 
							
							
								
								 | 
						27ee4df946 | 
							 | 
					|
| 
							
							
								
								 | 
						6edd7871dc | 
							 | 
					|
| 
							
							
								
								 | 
						684c522075 | 
							 | 
					|
| 
							
							
								
								 | 
						770e82829c | 
							 | 
					|
| 
							
							
								
								 | 
						991d1c27d3 | 
							 | 
					|
| 
							
							
								
								 | 
						a5994c85a4 | 
							 | 
					|
| 
							
							
								
								 | 
						619794a192 | 
							 | 
					|
| 
							
							
								
								 | 
						e14bb8f767 | 
							 | 
					|
| 
							
							
								
								 | 
						10c3fc4b6e | 
							 | 
					|
| 
							
							
								
								 | 
						9e07f293a0 | 
							 | 
					|
| 
							
							
								
								 | 
						65d425b66c | 
							 | 
					|
| 
							
							
								
								 | 
						df015e2bf8 | 
							 | 
					|
| 
							
							
								
								 | 
						289a26f341 | 
							 | 
					|
| 
							
							
								
								 | 
						f477287bc7 | 
							 | 
					|
| 
							
							
								
								 | 
						c23428f5b8 | 
							 | 
					|
| 
							
							
								
								 | 
						dda2c23a45 | 
							 | 
					|
| 
							
							
								
								 | 
						1547b03914 | 
							 | 
					|
| 
							
							
								
								 | 
						a94eaeed2e | 
							 | 
					|
| 
							
							
								
								 | 
						66c93b7d22 | 
							 | 
					|
| 
							
							
								
								 | 
						748e5667c1 | 
							 | 
					|
| 
							
							
								
								 | 
						a07091ea83 | 
							 | 
					|
| 
							
							
								
								 | 
						0fedeb7f47 | 
							 | 
					|
| 
							
							
								
								 | 
						44e12e8873 | 
							 | 
					|
| 
							
							
								
								 | 
						991e353990 | 
							 | 
					|
| 
							
							
								
								 | 
						fa7f9cc2ea | 
							 | 
					|
| 
							
							
								
								 | 
						7bb4fb8fcc | 
							 | 
					|
| 
							
							
								
								 | 
						367923e19f | 
							 | 
					|
| 
							
							
								
								 | 
						c20686d2c3 | 
							 | 
					|
| 
							
							
								
								 | 
						427b249429 | 
							 | 
					|
| 
							
							
								
								 | 
						61079319ea | 
							 | 
					|
| 
							
							
								
								 | 
						12953fa528 | 
							 | 
					|
| 
							
							
								
								 | 
						386befcade | 
							 | 
					|
| 
							
							
								
								 | 
						44fc240bd4 | 
							 | 
					|
| 
							
							
								
								 | 
						ac3a1f53c4 | 
							 | 
					|
| 
							
							
								
								 | 
						d05787f2c7 | 
							 | 
					|
| 
							
							
								
								 | 
						469b8aebe1 | 
							 | 
					|
| 
							
							
								
								 | 
						0bc3542281 | 
							 | 
					|
| 
							
							
								
								 | 
						5f990b7fa4 | 
							 | 
					|
| 
							
							
								
								 | 
						eed6d5d0e9 | 
							 | 
					|
| 
							
							
								
								 | 
						f1d784a099 | 
							 | 
					|
| 
							
							
								
								 | 
						f9fd4f4dd9 | 
							 | 
					|
| 
							
							
								
								 | 
						0d2d10deab | 
							 | 
					|
| 
							
							
								
								 | 
						17a6ddd0da | 
							 | 
					|
| 
							
							
								
								 | 
						6fd35e569f | 
							 | 
					|
| 
							
							
								
								 | 
						ad5f4d86bb | 
							 | 
					|
| 
							
							
								
								 | 
						702ef1d0ce | 
							 | 
					|
| 
							
							
								
								 | 
						07db386649 | 
							 | 
					|
| 
							
							
								
								 | 
						8fe17f7517 | 
							 | 
					|
| 
							
							
								
								 | 
						3a279d73a0 | 
							 | 
					|
| 
							
							
								
								 | 
						cb09e98cbd | 
							 | 
					|
| 
							
							
								
								 | 
						3a12e3bfee | 
							 | 
					|
| 
							
							
								
								 | 
						1a33934c45 | 
							 | 
					|
| 
							
							
								
								 | 
						33dbcb9b6f | 
							 | 
					|
| 
							
							
								
								 | 
						4654266085 | 
							 | 
					|
| 
							
							
								
								 | 
						e5f3877af5 | 
							 | 
					|
| 
							
							
								
								 | 
						6252aca09a | 
							 | 
					|
| 
							
							
								
								 | 
						9eeae56e0e | 
							 | 
					|
| 
							
							
								
								 | 
						46c767b3d0 | 
							 | 
					|
| 
							
							
								
								 | 
						65cd5f2460 | 
							 | 
					
| 
						 | 
				
			
			@ -361,3 +361,4 @@ MigrationBackup/
 | 
			
		|||
 | 
			
		||||
# Fody - auto-generated XML schema
 | 
			
		||||
FodyWeavers.xsd
 | 
			
		||||
/湘乡冰箱005温控器-Modbus-V2.0.docx
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
<Project Sdk="Microsoft.NET.Sdk">
 | 
			
		||||
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <TargetFramework>net6.0-windows</TargetFramework>
 | 
			
		||||
    <Nullable>enable</Nullable>
 | 
			
		||||
    <UseWPF>true</UseWPF>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.39" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
</Project>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
using Microsoft.Xaml.Behaviors;
 | 
			
		||||
using System.Collections.ObjectModel;
 | 
			
		||||
using System.Windows;
 | 
			
		||||
using System.Windows.Controls;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Commons.ValidatRules
 | 
			
		||||
{
 | 
			
		||||
    public class ValidationErrorMappingBehavior : Behavior<FrameworkElement>
 | 
			
		||||
    {
 | 
			
		||||
        #region Properties
 | 
			
		||||
 | 
			
		||||
        public static readonly DependencyProperty ValidationErrorsProperty =
 | 
			
		||||
            DependencyProperty.Register("ValidationErrors", typeof(ObservableCollection<ValidationError>),
 | 
			
		||||
                typeof(ValidationErrorMappingBehavior), new PropertyMetadata(new ObservableCollection<ValidationError>()));
 | 
			
		||||
 | 
			
		||||
        public ObservableCollection<ValidationError> ValidationErrors
 | 
			
		||||
        {
 | 
			
		||||
            get { return (ObservableCollection<ValidationError>)this.GetValue(ValidationErrorsProperty); }
 | 
			
		||||
            set { this.SetValue(ValidationErrorsProperty, value); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static readonly DependencyProperty HasValidationErrorProperty = DependencyProperty.Register("HasValidationError",
 | 
			
		||||
            typeof(bool), typeof(ValidationErrorMappingBehavior), new PropertyMetadata(false));
 | 
			
		||||
 | 
			
		||||
        public bool HasValidationError
 | 
			
		||||
        {
 | 
			
		||||
            get { return (bool)this.GetValue(HasValidationErrorProperty); }
 | 
			
		||||
            set { this.SetValue(HasValidationErrorProperty, value); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Constructors
 | 
			
		||||
 | 
			
		||||
        public ValidationErrorMappingBehavior()
 | 
			
		||||
            : base()
 | 
			
		||||
        { }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Events & Event Methods
 | 
			
		||||
 | 
			
		||||
        private void Validation_Error(object sender, ValidationErrorEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            if (e.Action == ValidationErrorEventAction.Added)
 | 
			
		||||
            {
 | 
			
		||||
                this.ValidationErrors.Add(e.Error);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                this.ValidationErrors.Remove(e.Error);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this.HasValidationError = this.ValidationErrors.Count > 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Support Methods
 | 
			
		||||
 | 
			
		||||
        protected override void OnAttached()
 | 
			
		||||
        {
 | 
			
		||||
            base.OnAttached();
 | 
			
		||||
            Validation.AddErrorHandler(this.AssociatedObject, Validation_Error);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void OnDetaching()
 | 
			
		||||
        {
 | 
			
		||||
            base.OnDetaching();
 | 
			
		||||
            Validation.RemoveErrorHandler(this.AssociatedObject, Validation_Error);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -5,16 +5,42 @@ VisualStudioVersion = 17.3.32922.545
 | 
			
		|||
MinimumVisualStudioVersion = 10.0.40219.1
 | 
			
		||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DM_Weight", "DM_Weight\DM_Weight.csproj", "{439FA76B-F874-40DB-BAF2-E3647CD55B10}"
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DM_Weight.Commons", "DM_Weight.Commons\DM_Weight.Commons.csproj", "{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}"
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
			
		||||
		Debug|Any CPU = Debug|Any CPU
 | 
			
		||||
		Debug|x64 = Debug|x64
 | 
			
		||||
		Debug|x86 = Debug|x86
 | 
			
		||||
		Release|Any CPU = Release|Any CPU
 | 
			
		||||
		Release|x64 = Release|x64
 | 
			
		||||
		Release|x86 = Release|x86
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Debug|Any CPU.Build.0 = Debug|Any CPU
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|Any CPU.ActiveCfg = Release|Any CPU
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|Any CPU.Build.0 = Release|Any CPU
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Debug|x64.ActiveCfg = Debug|x64
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Debug|x64.Build.0 = Debug|x64
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Debug|x86.ActiveCfg = Debug|x86
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Debug|x86.Build.0 = Debug|x86
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|Any CPU.ActiveCfg = Debug|Any CPU
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|Any CPU.Build.0 = Debug|Any CPU
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|x64.ActiveCfg = Release|x64
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|x64.Build.0 = Release|x64
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|x86.ActiveCfg = Debug|x86
 | 
			
		||||
		{439FA76B-F874-40DB-BAF2-E3647CD55B10}.Release|x86.Build.0 = Debug|x86
 | 
			
		||||
		{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 | 
			
		||||
		{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
 | 
			
		||||
		{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Debug|x64.ActiveCfg = Debug|Any CPU
 | 
			
		||||
		{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Debug|x64.Build.0 = Debug|Any CPU
 | 
			
		||||
		{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Debug|x86.ActiveCfg = Debug|Any CPU
 | 
			
		||||
		{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Debug|x86.Build.0 = Debug|Any CPU
 | 
			
		||||
		{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
 | 
			
		||||
		{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Release|Any CPU.Build.0 = Release|Any CPU
 | 
			
		||||
		{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Release|x64.ActiveCfg = Release|Any CPU
 | 
			
		||||
		{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Release|x64.Build.0 = Release|Any CPU
 | 
			
		||||
		{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Release|x86.ActiveCfg = Release|Any CPU
 | 
			
		||||
		{7F9FA18B-5C28-476E-97D4-B5504B8DEB9B}.Release|x86.Build.0 = Release|Any CPU
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
  <connectionStrings>
 | 
			
		||||
	<!-- 数据库连接字符串 -->
 | 
			
		||||
	<!--<add name="database" connectionString="server=127.0.0.1;database=wpf_dm_program;userid=root;password=qq1223" />-->
 | 
			
		||||
	<add name="database" connectionString="server=127.0.0.1;port=3306;database=hkcdb;userid=root;password=root" />
 | 
			
		||||
	<add name="database" connectionString="server=192.168.50.252;port=3306;database=xiangxiang;userid=root;password=qq1223" />
 | 
			
		||||
  </connectionStrings>
 | 
			
		||||
	<!--<runtime>
 | 
			
		||||
		--><!--配置之后,Appdomain.CurrentDomain.UnhandledException 事件的 IsTerminating 就变成了 false 啦!也就是说,程序并不会因为这次的异常而崩溃退出。--><!--
 | 
			
		||||
| 
						 | 
				
			
			@ -12,19 +12,37 @@
 | 
			
		|||
	<appSettings>
 | 
			
		||||
		
 | 
			
		||||
		<!-- 设备id -->
 | 
			
		||||
		<add key="machineId" value="DM1" />
 | 
			
		||||
		<add key="machineId" value="DM3" />
 | 
			
		||||
		<!--交接柜设备id-->
 | 
			
		||||
		<add key="jj_machineId" value="DM5" />
 | 
			
		||||
		<!--请领药库-->
 | 
			
		||||
		<add key="colloctedId" value="住院,DM2,门诊,DM22" />
 | 
			
		||||
		<!-- 供应单位 -->
 | 
			
		||||
		<add key="supplierDept" value="药库" />
 | 
			
		||||
		<!-- 领用部门 -->
 | 
			
		||||
		<add key="receiveDept" value="麻精药房" />
 | 
			
		||||
		<!--部门-->
 | 
			
		||||
		<add key="department" value="急诊药房"/>
 | 
			
		||||
	    
 | 
			
		||||
		<!--登录人 0全部用户可登录;1仅当班人、审核人可登录-->
 | 
			
		||||
		<add key="loginUser" value="0"/>
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		<!--2023/7/13 药房代码 有则写无则空 -->
 | 
			
		||||
		<add key="storage" value="" />
 | 
			
		||||
		<add key="storage" value="159" />
 | 
			
		||||
		<!-- 登录模式 1单人登录2双人登录 -->
 | 
			
		||||
		<add key="loginMode" value="1" />
 | 
			
		||||
		<!-- 登录顺序,指定先登录的人的名称有效值,只有在登录模式等于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"/>
 | 
			
		||||
		
 | 
			
		||||
		<add key="gridConnectionString" value="MYSQL; Database=hkcdb; Password=root; Port=3306; Server=127.0.0.1; User=root;"/>
 | 
			
		||||
		<!-- 无操作退出录像时间,单位秒,为0时不退出录像 -->
 | 
			
		||||
		<add key="stopRecord" value="0"/>
 | 
			
		||||
 | 
			
		||||
		<add key="gridConnectionString" value="MYSQL; Database=xiangtanTest; Password=root; Port=3306; Server=192.168.50.84; User=root;"/>
 | 
			
		||||
		<!-- 查询处方是orderNo还是orderGroupNo -->
 | 
			
		||||
		<add key="OrderNoName" value="orderNo" />
 | 
			
		||||
		<!-- 后门耗材板地址 没有则填写0-->
 | 
			
		||||
| 
						 | 
				
			
			@ -36,11 +54,42 @@
 | 
			
		|||
		<!-- 抽屉串口使用的协议232或者485 -->
 | 
			
		||||
		<add key="DrawerProtocol" value="485" />
 | 
			
		||||
		<!-- 抽屉串口的串口号 -->
 | 
			
		||||
		<add key="DrawerPortPath" value="COM3" />
 | 
			
		||||
		<add key="DrawerPortPath" value="COM1" />
 | 
			
		||||
		<!-- can总线串口的串口号 -->
 | 
			
		||||
		<add key="CanBusPortPath" value="COM3" />
 | 
			
		||||
		<!-- 条码枪串口的串口号 -->
 | 
			
		||||
		<add key="ScanCodePortPath" value="COM8" />
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		<!--是否有冰箱抽屉0无,1有一个,2两个-->
 | 
			
		||||
		<add key="hasFridge" value="1"/>
 | 
			
		||||
		<!-- 冰箱的串口号 -->
 | 
			
		||||
		<add key="FridgePortPath" value="COM31" />
 | 
			
		||||
 | 
			
		||||
		<!--冰箱抽屉温度区间-->
 | 
			
		||||
		<add key="temperatureRange" value="2-8"/>
 | 
			
		||||
		<!--冰箱抽屉温度-->
 | 
			
		||||
		<add key="temperatureValue" value="3.2"/>
 | 
			
		||||
		<!--温度查询定时执行时间-->
 | 
			
		||||
		<add key="Interval" value="60000"/>
 | 
			
		||||
		<!--冰箱状态1关闭;0打开-->
 | 
			
		||||
		<add key="FridgeState" value="0"/>
 | 
			
		||||
		<!--报警状态1关闭;0打开-->
 | 
			
		||||
		<add key="AlarmState" value="1"/>
 | 
			
		||||
		<!--冰箱不在区间超时时间(超过指定的时间仍不在区间则提示)单位分-->
 | 
			
		||||
		<add key="OutRangeTime" value="20"/>
 | 
			
		||||
		<!--冰箱是否异常状态,0正常1异常--><!--
 | 
			
		||||
		<add key="FridgeworkingState" value="0"/>-->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		<!--冰箱2抽屉温度区间-->
 | 
			
		||||
		<add key="temperatureRange2" value="2-8"/>
 | 
			
		||||
		<!--冰箱2状态1关闭;0打开-->
 | 
			
		||||
		<add key="FridgeState2" value="0"/>
 | 
			
		||||
		<!--冰箱2报警状态1关闭;0打开-->
 | 
			
		||||
		<add key="AlarmState2" value="0"/>
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		<!-- 抽屉串口的串口号 --><!--
 | 
			
		||||
		<add key="DrawerPortPath" value="COM11" />
 | 
			
		||||
		--><!-- can总线串口的串口号 --><!--
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +103,7 @@
 | 
			
		|||
		<!-- 指纹机号码 -->
 | 
			
		||||
		<add  key="machineNumber" value="1"/>
 | 
			
		||||
		<!-- 指纹机ip -->
 | 
			
		||||
		<add  key="fingerIp" value="192.168.1.201"/>
 | 
			
		||||
		<add  key="fingerIp" value="192.168.50.201"/>
 | 
			
		||||
		
 | 
			
		||||
		<!-- 多处方取药 0:不启用 1:启用-->
 | 
			
		||||
		<add  key="MultiOrder" value="1"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -71,5 +120,8 @@
 | 
			
		|||
		<!--海康威视密码-->
 | 
			
		||||
		<add key="HIKPassword" value="HKC123456"/>
 | 
			
		||||
 | 
			
		||||
		<!--报表药品9种(写全称,与数据库中完全一致,单引号引起来,逗号分隔)-->
 | 
			
		||||
		<add key="DrugNames" value="'9437_487','1472_262','1564_487','6874_2534','8353_487'"/>
 | 
			
		||||
 | 
			
		||||
	</appSettings>
 | 
			
		||||
</configuration>
 | 
			
		||||
| 
						 | 
				
			
			@ -6,7 +6,7 @@
 | 
			
		|||
             d1p1:Ignorable="d"
 | 
			
		||||
             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
 | 
			
		||||
             xmlns:local="clr-namespace:DM_Weight"
 | 
			
		||||
             xmlns:prism="http://prismlibrary.com/">
 | 
			
		||||
             xmlns:prism="http://prismlibrary.com/" Startup="PrismApplication_Startup">
 | 
			
		||||
    <Application.Resources>
 | 
			
		||||
        <ResourceDictionary>
 | 
			
		||||
            <ResourceDictionary.MergedDictionaries>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,9 @@ using log4net;
 | 
			
		|||
using System.Windows.Interop;
 | 
			
		||||
using System.Windows.Threading;
 | 
			
		||||
using System.Timers;
 | 
			
		||||
using DM_Weight.HIKVISION;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
using log4net.Repository.Hierarchy;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -44,6 +46,7 @@ namespace DM_Weight
 | 
			
		|||
 | 
			
		||||
        protected override Window CreateShell()
 | 
			
		||||
        {
 | 
			
		||||
            logger.Info("进入APP-CreateShell");
 | 
			
		||||
            //UI线程未捕获异常处理事件
 | 
			
		||||
            this.DispatcherUnhandledException += OnDispatcherUnhandledException;
 | 
			
		||||
            //Task线程内未捕获异常处理事件
 | 
			
		||||
| 
						 | 
				
			
			@ -51,6 +54,7 @@ namespace DM_Weight
 | 
			
		|||
            //多线程异常
 | 
			
		||||
            AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
 | 
			
		||||
 | 
			
		||||
            logger.Info("进入APP-CreateShell-2");
 | 
			
		||||
            return Container.Resolve<MainWindow>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -86,6 +90,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,9 +101,9 @@ namespace DM_Weight
 | 
			
		|||
            // 指纹机工具
 | 
			
		||||
            containerRegistry.RegisterSingleton<FingerprintUtil>();
 | 
			
		||||
            // 组态屏工具
 | 
			
		||||
            containerRegistry.RegisterSingleton<ScreenUtil>();
 | 
			
		||||
            //containerRegistry.RegisterSingleton<ScreenUtil>();
 | 
			
		||||
            // 录像机
 | 
			
		||||
            containerRegistry.RegisterSingleton<CHKFunction>();
 | 
			
		||||
            //containerRegistry.RegisterSingleton<CHKFunction>();
 | 
			
		||||
 | 
			
		||||
            containerRegistry.Register<IDialogService, MaterialDialogService>();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -123,6 +129,17 @@ namespace DM_Weight
 | 
			
		|||
            #region 取药
 | 
			
		||||
            // 处方取药页面
 | 
			
		||||
            containerRegistry.RegisterForNavigation<OrderTakeDrugWindow, OrderTakeDrugWindowViewModel>();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            containerRegistry.RegisterForNavigation<OrderTakeDrugNewWindow, OrderTakeDrugNewWindowViewModel>();
 | 
			
		||||
            containerRegistry.RegisterForNavigation<OrderTakeAllDrugDialog, OrderTakeAllDrugDialogViewModel>();
 | 
			
		||||
            containerRegistry.RegisterForNavigation<OrderTakeNewDialog, OrderTakeNewDialogViewModel>();
 | 
			
		||||
            //交接柜补药
 | 
			
		||||
            containerRegistry.RegisterForNavigation<AddToJiaoJieWindow, AddToJiaoJieWindowViewModel>();
 | 
			
		||||
            //交接柜补药页面弹窗
 | 
			
		||||
            containerRegistry.RegisterDialog<AddToJiaoJieDialog>();
 | 
			
		||||
            containerRegistry.RegisterForNavigation<AddToJiaoJieDialog, AddToJiaoJieDialogViewModel>();
 | 
			
		||||
 | 
			
		||||
            // 处方取药模态框
 | 
			
		||||
            containerRegistry.RegisterDialog<OrderTakeDialog>();
 | 
			
		||||
            containerRegistry.RegisterForNavigation<OrderTakeDialog, OrderTakeDialogViewModel>();
 | 
			
		||||
| 
						 | 
				
			
			@ -144,6 +161,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 加药
 | 
			
		||||
| 
						 | 
				
			
			@ -162,6 +187,17 @@ namespace DM_Weight
 | 
			
		|||
            containerRegistry.RegisterForNavigation<SelfAddDialog, SelfAddDialogViewModel>();
 | 
			
		||||
            //多批次抽屉加药
 | 
			
		||||
            containerRegistry.RegisterForNavigation<AddDrugControl, AddDrugControlViewModel>();
 | 
			
		||||
            //药品请领
 | 
			
		||||
            containerRegistry.RegisterForNavigation<CollectDrugWindow, CollectDrugWindowViewModel>();
 | 
			
		||||
            // 药品请领模态框
 | 
			
		||||
            containerRegistry.RegisterDialog<CollectDrugDialog>();
 | 
			
		||||
            containerRegistry.RegisterForNavigation<CollectDrugDialog, CollectDrugDialogViewModel>(); 
 | 
			
		||||
 | 
			
		||||
            //请领列表
 | 
			
		||||
            containerRegistry.RegisterForNavigation<ApplyListWindow, ApplyListWindowViewModel>();
 | 
			
		||||
            //请领入库
 | 
			
		||||
            containerRegistry.RegisterForNavigation<ApplyInStockWindow, ApplyInStockWindowViewModel>();
 | 
			
		||||
 | 
			
		||||
            #endregion
 | 
			
		||||
 | 
			
		||||
            #region 还药
 | 
			
		||||
| 
						 | 
				
			
			@ -178,9 +214,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 库存管理
 | 
			
		||||
| 
						 | 
				
			
			@ -196,6 +241,16 @@ namespace DM_Weight
 | 
			
		|||
            // 药品列表页面
 | 
			
		||||
            containerRegistry.RegisterForNavigation<DrugListWindow, DrugListWindowViewModel>();
 | 
			
		||||
 | 
			
		||||
            //交接班记录
 | 
			
		||||
            containerRegistry.RegisterForNavigation<ChangeShiftsListWindow, ChangeShiftsListWindowViewModel>();
 | 
			
		||||
            //交接班弹窗
 | 
			
		||||
            containerRegistry.RegisterDialog<ChangeShiftsDialog>();
 | 
			
		||||
            containerRegistry.RegisterForNavigation<ChangeShiftsDialog, ChangeShiftsDialogViewModel>();
 | 
			
		||||
 | 
			
		||||
            containerRegistry.RegisterForNavigation<AccountWindow,AccountWindowViewModel>();
 | 
			
		||||
 | 
			
		||||
            //报表信息录入
 | 
			
		||||
            containerRegistry.RegisterForNavigation<AddReportDate, AddReportDateViewModel>();
 | 
			
		||||
            #endregion
 | 
			
		||||
 | 
			
		||||
            #region 系统设置
 | 
			
		||||
| 
						 | 
				
			
			@ -210,6 +265,12 @@ namespace DM_Weight
 | 
			
		|||
            containerRegistry.RegisterForNavigation<SettingWindow, SettingWindowViewModel>();
 | 
			
		||||
            // 调试页面
 | 
			
		||||
            containerRegistry.RegisterForNavigation<DebugWindow, DebugWindowViewModel>();
 | 
			
		||||
            //主设置页面
 | 
			
		||||
            containerRegistry.RegisterForNavigation<SettingMainWindow, SettingMainWindowViewModel>();
 | 
			
		||||
            //两个冰箱抽屉设置页面
 | 
			
		||||
            containerRegistry.RegisterForNavigation<FridgeWindow, FridgeWindowViewModel>();
 | 
			
		||||
            //只有一个冰箱抽屉设置页面
 | 
			
		||||
            containerRegistry.RegisterForNavigation<FridgeOnlyWindow, FridgeOnlyWindowViewModel>();
 | 
			
		||||
 | 
			
		||||
            #endregion
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -218,6 +279,52 @@ namespace DM_Weight
 | 
			
		|||
 | 
			
		||||
            containerRegistry.RegisterForNavigation<ShowMessageDialog, ShowMessageDialogViewModel>();
 | 
			
		||||
 | 
			
		||||
            containerRegistry.RegisterForNavigation<WarnDialog, WarnDialogViewModel>();
 | 
			
		||||
            //报表修改药品
 | 
			
		||||
            containerRegistry.RegisterDialog<ReportDrugNameDialog>();
 | 
			
		||||
            containerRegistry.RegisterForNavigation<ReportDrugNameDialog, ReportDrugNameDialogViewModel>();
 | 
			
		||||
 | 
			
		||||
            logger.Info("结束APP-RegisterTypes");
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void PrismApplication_Startup(object sender, StartupEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            //获取欲启动程序名
 | 
			
		||||
            string processName = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
 | 
			
		||||
            logger.Info($"欲启动程序名:{processName}");
 | 
			
		||||
            //检查程序是否已经启动,已经启动则显示提示退出程序
 | 
			
		||||
            if (System.Diagnostics.Process.GetProcessesByName(processName).Length > 1)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"系统在运行!");
 | 
			
		||||
                //系统在运行
 | 
			
		||||
                RaiseOtherProcess();
 | 
			
		||||
                Application.Current.Shutdown();
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private static void RaiseOtherProcess()
 | 
			
		||||
        {
 | 
			
		||||
            Process proc = Process.GetCurrentProcess();
 | 
			
		||||
            foreach (Process otherProc in Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName))
 | 
			
		||||
            {
 | 
			
		||||
                if (proc.Id != otherProc.Id)
 | 
			
		||||
                {
 | 
			
		||||
                    IntPtr hWnd = otherProc.MainWindowHandle;
 | 
			
		||||
                    if (IsIconic(hWnd))
 | 
			
		||||
                    {
 | 
			
		||||
                        ShowWindowAsync(hWnd, 9);
 | 
			
		||||
                    }
 | 
			
		||||
                    SetForegroundWindow(hWnd);
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        [DllImport("user32.dll")]
 | 
			
		||||
        private static extern bool SetForegroundWindow(IntPtr hWnd);
 | 
			
		||||
        [DllImport("user32.dll")]
 | 
			
		||||
        private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
 | 
			
		||||
        [DllImport("user32.dll")]
 | 
			
		||||
        private static extern bool IsIconic(IntPtr hWnd);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Common
 | 
			
		||||
{
 | 
			
		||||
    public class CRC16MODBUS
 | 
			
		||||
    {
 | 
			
		||||
        /// Name: CRC-16/MODBUS    x16+x15+x2+1
 | 
			
		||||
        /// Poly: 0x8005
 | 
			
		||||
        /// Init: 0xFFFF
 | 
			
		||||
        /// Refin: true
 | 
			
		||||
        /// Refout: true
 | 
			
		||||
        /// Xorout: 0x0000
 | 
			
		||||
        ///******************************添加数据CRC16MODBUS校验位*******************************************
 | 
			
		||||
        public static byte[] CrcModBus(byte[] buffer, int start = 0, int len = 0)
 | 
			
		||||
        {
 | 
			
		||||
            if (buffer == null || buffer.Length == 0) return null;
 | 
			
		||||
            if (start < 0) return null;
 | 
			
		||||
            if (len == 0) len = buffer.Length - start;
 | 
			
		||||
            int length = start + len;
 | 
			
		||||
            if (length > buffer.Length) return null;
 | 
			
		||||
            ushort crc = 0xFFFF;// Initial value
 | 
			
		||||
            for (int i = start; i < length; i++)
 | 
			
		||||
            {
 | 
			
		||||
                crc ^= buffer[i];
 | 
			
		||||
                for (int j = 0; j < 8; j++)
 | 
			
		||||
                {
 | 
			
		||||
                    if ((crc & 1) > 0)
 | 
			
		||||
                        crc = (ushort)((crc >> 1) ^ 0xA001);// 0xA001 = reverse 0x8005
 | 
			
		||||
                    else
 | 
			
		||||
                        crc = (ushort)(crc >> 1);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            byte[] ret = BitConverter.GetBytes(crc);
 | 
			
		||||
            //Array.Reverse(ret);
 | 
			
		||||
            return ret;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Xml;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Common
 | 
			
		||||
{
 | 
			
		||||
    public class CommonClass
 | 
			
		||||
    {
 | 
			
		||||
        //手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题
 | 
			
		||||
        public static string ReadAppSetting(string key)
 | 
			
		||||
        {
 | 
			
		||||
            string xPath = "/configuration/appSettings//add[@key='" + key + "']";
 | 
			
		||||
            XmlDocument doc = new XmlDocument();
 | 
			
		||||
            string exeFileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
 | 
			
		||||
            doc.Load(exeFileName + ".dll.config");
 | 
			
		||||
            XmlNode node = doc.SelectSingleNode(xPath);
 | 
			
		||||
            return node.Attributes["value"].Value;
 | 
			
		||||
        }
 | 
			
		||||
        public static void SaveAppSetting(string key,string value)
 | 
			
		||||
        {
 | 
			
		||||
            Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 | 
			
		||||
            _configuration.AppSettings.Settings[key].Value = value;
 | 
			
		||||
            _configuration.Save();
 | 
			
		||||
            ConfigurationManager.RefreshSection(key);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Common
 | 
			
		||||
{
 | 
			
		||||
    public class PrismManager
 | 
			
		||||
    {
 | 
			
		||||
        ///// <summary>
 | 
			
		||||
        ///// 主页面区域,主要呈现登录页及登录后页面
 | 
			
		||||
        ///// </summary>
 | 
			
		||||
        //public static readonly string MainViewRegionName = "MainContent";
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 设置菜单页面跳转,主要呈现设置下子菜单
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public static readonly string SettingViewRegionName = "SettingViewContent";
 | 
			
		||||
        ///// <summary>
 | 
			
		||||
        ///// 主页面各菜单页
 | 
			
		||||
        ///// </summary>
 | 
			
		||||
        //public static readonly string HomeViewRegionName = "HomeViewContent";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,68 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using System.Globalization;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Controls;
 | 
			
		||||
using System.Windows.Data;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Common
 | 
			
		||||
{
 | 
			
		||||
    //设置冰箱温度规则
 | 
			
		||||
    public class TemperatureRangeRule : ValidationRule
 | 
			
		||||
    {
 | 
			
		||||
        //冰箱温度设置区间为取自配置文件(2~8度)
 | 
			
		||||
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
 | 
			
		||||
        {
 | 
			
		||||
            bool flag = false;
 | 
			
		||||
            string tips = string.Empty;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                string[] rang = value.ToString().Split('-');
 | 
			
		||||
                if (rang.Length >= 2)
 | 
			
		||||
                {
 | 
			
		||||
                    bool bSRange = float.TryParse(rang[0], out float sRange);
 | 
			
		||||
                    bool bERange = float.TryParse(rang[1], out float eRange);
 | 
			
		||||
                    if (bSRange && bERange)
 | 
			
		||||
                    {
 | 
			
		||||
                        string[] sList= sRange.ToString().Split('.');
 | 
			
		||||
                        string[] eList= eRange.ToString().Split(".");
 | 
			
		||||
                        if ((sList.Length > 1 && sList[1].Length > 1) || (eList.Length > 1 && eList[1].Length>1))
 | 
			
		||||
                        {
 | 
			
		||||
                            tips = "小数点后保留1位";
 | 
			
		||||
                            return new ValidationResult(flag, tips);
 | 
			
		||||
                        }
 | 
			
		||||
                        if ((sRange < 2 || eRange > 8||sRange>8||eRange<2))
 | 
			
		||||
                        {
 | 
			
		||||
                            tips = "温度区间设置2-8度,请检查输入";
 | 
			
		||||
                            return new ValidationResult(flag, tips);
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            flag = true;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        tips = "请输入正确的数值";
 | 
			
		||||
                        return new ValidationResult(flag, tips);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    tips = "请输入正确的数值";
 | 
			
		||||
                    return new ValidationResult(flag, tips);
 | 
			
		||||
                }
 | 
			
		||||
                return new ValidationResult(flag, tips);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                tips = $"校验异常{ex.ToString()}";
 | 
			
		||||
                return new ValidationResult(flag, tips);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,91 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Collections.ObjectModel;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using System.Globalization;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Data;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Converter
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 请领列表页面状态转换
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class ApplyListConverter : IValueConverter
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
 | 
			
		||||
        {
 | 
			
		||||
            //用户名
 | 
			
		||||
            if (parameter.ToString().Equals("UserId"))
 | 
			
		||||
            {
 | 
			
		||||
                int val = int.Parse(value.ToString());
 | 
			
		||||
                if (val <= 0)
 | 
			
		||||
                {
 | 
			
		||||
                    return "";
 | 
			
		||||
                }
 | 
			
		||||
                string userName = SqlSugarHelper.Db.Queryable<UserList>().Where(ul => ul.Id == val).Select(ul => new { ul.Nickname }).First().Nickname;
 | 
			
		||||
                return userName;
 | 
			
		||||
            }
 | 
			
		||||
            //请领单状态
 | 
			
		||||
            if (parameter.ToString().Equals("PleaseStatus"))
 | 
			
		||||
            {
 | 
			
		||||
                int val = int.Parse(value.ToString());
 | 
			
		||||
                string retStr = "状态:";
 | 
			
		||||
                switch (val)
 | 
			
		||||
                {
 | 
			
		||||
                    case 0:
 | 
			
		||||
                        return retStr + "已创建";
 | 
			
		||||
                    case 1:
 | 
			
		||||
                        return retStr + "审核通过";
 | 
			
		||||
                    case 2:
 | 
			
		||||
                        return retStr + "已出库";
 | 
			
		||||
                    case 3:
 | 
			
		||||
                        return retStr + "已入库";
 | 
			
		||||
                    default:
 | 
			
		||||
                        return retStr + "状态未知";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            //处方状态
 | 
			
		||||
            if (parameter.ToString().Equals("OrderStatus"))
 | 
			
		||||
            {
 | 
			
		||||
                int val = int.Parse(value.ToString());
 | 
			
		||||
                switch (val)
 | 
			
		||||
                {
 | 
			
		||||
                    case 0:
 | 
			
		||||
                        return "已申请";
 | 
			
		||||
                    case 1:
 | 
			
		||||
                        return "已接收";
 | 
			
		||||
                    case 2:
 | 
			
		||||
                        return "已退回";
 | 
			
		||||
                    default:
 | 
			
		||||
                        return "状态未知";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            //请领药库
 | 
			
		||||
            if (parameter.ToString().Equals("machineId"))
 | 
			
		||||
            {
 | 
			
		||||
                string val = value.ToString();
 | 
			
		||||
                string[] colloctedId = ConfigurationManager.AppSettings["colloctedId"].Split(',');
 | 
			
		||||
                if (Array.IndexOf(colloctedId, val)>0)
 | 
			
		||||
                {
 | 
			
		||||
                    return colloctedId[Array.IndexOf(colloctedId, val) - 1].ToString();
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    return "未知";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return "";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Globalization;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Data;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Converter
 | 
			
		||||
{
 | 
			
		||||
    public class ForeColorConverter : IValueConverter
 | 
			
		||||
    {
 | 
			
		||||
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
 | 
			
		||||
        {
 | 
			
		||||
            if ((bool)value)
 | 
			
		||||
            {
 | 
			
		||||
                return "#3ECFED";
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                return "#808080";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Globalization;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Data;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Converter
 | 
			
		||||
{
 | 
			
		||||
    public class ShiftsStateConverter : IValueConverter
 | 
			
		||||
    {
 | 
			
		||||
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
 | 
			
		||||
        {
 | 
			
		||||
            if (value.ToString().Equals("1"))
 | 
			
		||||
            {
 | 
			
		||||
                return "已交班";
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                return "未交班";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +64,19 @@ namespace DM_Weight.Converter
 | 
			
		|||
            //取消
 | 
			
		||||
            if (parameter.ToString().Equals("CancelBtn"))
 | 
			
		||||
            {
 | 
			
		||||
                if (status > 0)
 | 
			
		||||
                if (status ==3)
 | 
			
		||||
                {
 | 
			
		||||
                    return Visibility.Visible;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    return Visibility.Collapsed;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            //确认核销、刷新
 | 
			
		||||
            if (parameter.ToString().Equals("ConfirmVsRefresh"))
 | 
			
		||||
            {
 | 
			
		||||
                if (status == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    return Visibility.Visible;
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Globalization;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows;
 | 
			
		||||
using System.Windows.Data;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Converter
 | 
			
		||||
{
 | 
			
		||||
    internal class StockStatusConverter : IValueConverter
 | 
			
		||||
    {
 | 
			
		||||
        //是否给交接柜补药已补药的则不可勾选,未补药的可勾选以进行补药:0未补1已补
 | 
			
		||||
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
 | 
			
		||||
        {
 | 
			
		||||
            int status = int.Parse(value.ToString());
 | 
			
		||||
            if (parameter.ToString() == "EnableState")
 | 
			
		||||
            {
 | 
			
		||||
                if (status == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if(parameter.ToString()== "TextState")
 | 
			
		||||
            {
 | 
			
		||||
                if(status == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    return "未取药";
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    return "已取药待入库";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return "";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,127 +0,0 @@
 | 
			
		|||
<Project Sdk="Microsoft.NET.Sdk">
 | 
			
		||||
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <OutputType>WinExe</OutputType>
 | 
			
		||||
    <TargetFramework>net6.0-windows</TargetFramework>
 | 
			
		||||
    <Nullable>enable</Nullable>
 | 
			
		||||
    <UseWPF>true</UseWPF>
 | 
			
		||||
    <PackageIcon></PackageIcon>
 | 
			
		||||
    <Product>毒麻管理程序</Product>
 | 
			
		||||
    <ApplicationIcon>Images\favicon.ico</ApplicationIcon>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
 | 
			
		||||
	<ItemGroup>
 | 
			
		||||
		<None Remove="Images\body-bg.jpg" />
 | 
			
		||||
		<None Remove="Images\box-16.jpg" />
 | 
			
		||||
		<None Remove="Images\box.png" />
 | 
			
		||||
		<None Remove="Images\favicon.ico" />
 | 
			
		||||
		<None Remove="Images\finger-bg-r.png" />
 | 
			
		||||
		<None Remove="Images\logo.png" />
 | 
			
		||||
		<None Remove="Images\TbExit.png" />
 | 
			
		||||
		<None Remove="Images\TbJiay.png" />
 | 
			
		||||
		<None Remove="Images\TbKuc.png" />
 | 
			
		||||
		<None Remove="Images\TbQyao.png" />
 | 
			
		||||
		<None Remove="Images\TbSet.png" />
 | 
			
		||||
		<None Remove="Images\TbTuiy.png" />
 | 
			
		||||
	</ItemGroup>
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <COMReference Include="zkemkeeper">
 | 
			
		||||
      <WrapperTool>tlbimp</WrapperTool>
 | 
			
		||||
      <VersionMinor>0</VersionMinor>
 | 
			
		||||
      <VersionMajor>1</VersionMajor>
 | 
			
		||||
      <Guid>fe9ded34-e159-408e-8490-b720a5e632c7</Guid>
 | 
			
		||||
      <Lcid>0</Lcid>
 | 
			
		||||
      <Isolated>false</Isolated>
 | 
			
		||||
      <EmbedInteropTypes>False</EmbedInteropTypes>
 | 
			
		||||
    </COMReference>
 | 
			
		||||
    <COMReference Include="gregn6Lib">
 | 
			
		||||
      <WrapperTool>tlbimp</WrapperTool>
 | 
			
		||||
      <VersionMinor>0</VersionMinor>
 | 
			
		||||
      <VersionMajor>6</VersionMajor>
 | 
			
		||||
      <Guid>4018f953-1bfe-441e-8a04-dc8ba1ff060e</Guid>
 | 
			
		||||
      <Lcid>0</Lcid>
 | 
			
		||||
      <Isolated>false</Isolated>
 | 
			
		||||
      <EmbedInteropTypes>False</EmbedInteropTypes>
 | 
			
		||||
    </COMReference>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Content Include="Images\favicon.ico" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
	<Resource Include="Images\body-bg.jpg" />
 | 
			
		||||
    <Resource Include="Images\box-16.jpg" />
 | 
			
		||||
    <Resource Include="Images\box.png" />
 | 
			
		||||
    <Resource Include="Images\favicon.ico" />
 | 
			
		||||
    <Resource Include="Images\finger-bg-r.png" />
 | 
			
		||||
    <Resource Include="Images\logo.png" />
 | 
			
		||||
    <Resource Include="Images\TbExit.png" />
 | 
			
		||||
    <Resource Include="Images\TbJiay.png" />
 | 
			
		||||
    <Resource Include="Images\TbKuc.png" />
 | 
			
		||||
    <Resource Include="Images\TbQyao.png" />
 | 
			
		||||
    <Resource Include="Images\TbSet.png" />
 | 
			
		||||
    <Resource Include="Images\TbTuiy.png" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <PackageReference Include="log4net" Version="2.0.15" />
 | 
			
		||||
    <PackageReference Include="MaterialDesignThemes" Version="4.8.0" />
 | 
			
		||||
    <PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.39" />
 | 
			
		||||
    <PackageReference Include="Prism.Unity" Version="8.1.97" />
 | 
			
		||||
    <PackageReference Include="SharpPromise" Version="1.7.0" />
 | 
			
		||||
    <PackageReference Include="SqlSugarCore" Version="5.1.4.67" />
 | 
			
		||||
    <PackageReference Include="SuperSimpleTcp" Version="3.0.10" />
 | 
			
		||||
    <PackageReference Include="System.Drawing.Common" Version="7.0.0" />
 | 
			
		||||
    <PackageReference Include="System.IO.Ports" Version="7.0.0" />
 | 
			
		||||
    <PackageReference Include="System.Management" Version="7.0.1" />
 | 
			
		||||
    <PackageReference Include="System.Reactive" Version="5.0.0" />
 | 
			
		||||
    <PackageReference Include="System.Speech" Version="7.0.0" />
 | 
			
		||||
    <PackageReference Include="System.Text.Encoding.CodePages" Version="7.0.0" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ApplicationDefinition Update="App.xaml">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </ApplicationDefinition>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Update="App.config">
 | 
			
		||||
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="log4net.config">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\account_book_temp.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\machine_log_check.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\machine_log_return.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\machine_log_add.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\machine_log_take.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\stock_template.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Page Update="Views\Dialog\InvoiceTakeDialog.xaml">
 | 
			
		||||
      <XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
 | 
			
		||||
    </Page>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Folder Include="HIKVISION\" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
</Project>
 | 
			
		||||
| 
						 | 
				
			
			@ -8,8 +8,16 @@
 | 
			
		|||
    <PackageIcon></PackageIcon>
 | 
			
		||||
    <Product>毒麻管理程序</Product>
 | 
			
		||||
    <ApplicationIcon>Images\favicon.ico</ApplicationIcon>
 | 
			
		||||
    <Platforms>AnyCPU;x86;x64</Platforms>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Compile Remove="HIKVISION\**" />
 | 
			
		||||
    <EmbeddedResource Remove="HIKVISION\**" />
 | 
			
		||||
    <None Remove="HIKVISION\**" />
 | 
			
		||||
    <Page Remove="HIKVISION\**" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
	<ItemGroup>
 | 
			
		||||
		<None Remove="Images\body-bg.jpg" />
 | 
			
		||||
		<None Remove="Images\box-16.jpg" />
 | 
			
		||||
| 
						 | 
				
			
			@ -94,9 +102,15 @@
 | 
			
		|||
    <None Update="log4net.config">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\Account_Book_New.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\account_book_temp.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\changeShifts_temp.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\machine_log_check.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
| 
						 | 
				
			
			@ -109,9 +123,21 @@
 | 
			
		|||
    <None Update="ReportTemp\machine_log_take.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\orderUse_template.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\ReturnEmptyDistory_template.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\stock_template.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\use_jiaojie.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Update="ReportTemp\use_jiaojie_New.grf">
 | 
			
		||||
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
 | 
			
		||||
    </None>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
| 
						 | 
				
			
			@ -121,7 +147,7 @@
 | 
			
		|||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Folder Include="HIKVISION\" />
 | 
			
		||||
    <ProjectReference Include="..\DM_Weight.Commons\DM_Weight.Commons.csproj" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
 | 
			
		||||
</Project>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,10 +32,10 @@ namespace DM_Weight.Finger
 | 
			
		|||
        {
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
            logger.Info($"进入构造器,开始连接指纹机");
 | 
			
		||||
            Task.Run(() =>
 | 
			
		||||
           {
 | 
			
		||||
           // Task.Run(() =>
 | 
			
		||||
           //{
 | 
			
		||||
               ConnectionMain();
 | 
			
		||||
           });
 | 
			
		||||
           //});
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void ConnectionMain()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ using System.Windows.Controls;
 | 
			
		|||
using System.Windows;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using log4net;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.HIKVISION
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -24,138 +25,209 @@ namespace DM_Weight.HIKVISION
 | 
			
		|||
 | 
			
		||||
        public CHCNetSDK.NET_DVR_USER_LOGIN_INFO struLogInfo;
 | 
			
		||||
        public CHCNetSDK.NET_DVR_DEVICEINFO_V40 DeviceInfo;
 | 
			
		||||
        public CHCNetSDK.NET_DVR_TIME m_struTimeCfg;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private System.ComponentModel.Container components = null;
 | 
			
		||||
 | 
			
		||||
        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()
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                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>
 | 
			
		||||
        /// 清理所有正在使用的资源。
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,152 @@
 | 
			
		|||
using SqlSugar;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    [SugarTable("account_book_g2")]
 | 
			
		||||
    public class AccountBookG2
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 主键
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "id",IsPrimaryKey =true)]
 | 
			
		||||
        public int Id { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品id
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "drug_id")]
 | 
			
		||||
        public string DrugId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 1领入2发出3日结4总结5转结
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "type")]
 | 
			
		||||
        public int Type { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 科室
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "department")]
 | 
			
		||||
        public string Department { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 设备内记录凭证
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "invoice_no")] 
 | 
			
		||||
        public string InvoiceNo { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 处方号或凭证号
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "order_no")]
 | 
			
		||||
        public string OrderNo { 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 = "yesterday_quantity")]
 | 
			
		||||
        public int YQuantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 收入
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "add_quantity")]
 | 
			
		||||
        public int AddQuantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 发出
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "out_quantity")]
 | 
			
		||||
        public int OutQuantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 批次结存
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "manu_stock")]
 | 
			
		||||
        public int ManuStock { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 总结存
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "total_stock")]
 | 
			
		||||
        public int TotalStock { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  发药领药人id
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "user_id1")]
 | 
			
		||||
        public int? UserId1 { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 复核人id
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "user_id2")]
 | 
			
		||||
        public int? UserId2 { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 设备id
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "machine_id")]
 | 
			
		||||
        public string MachineId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 日期
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "create_date")]
 | 
			
		||||
        public string CreateDate { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 插入更新时间(当前时间戳)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "create_time")]
 | 
			
		||||
        public DateTime CreateTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品名称
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public string DrugName { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 规格
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore =true)]
 | 
			
		||||
        public string DrugSpec { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 厂家
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore =true)]
 | 
			
		||||
        public string Manufactory { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 发药人
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore =true)]
 | 
			
		||||
        public string OperatorName { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 复核人
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore =true)]
 | 
			
		||||
        public string ReviewerName { get;set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 账册类型
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class AccountType
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 账册类型名称
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string AccountTypeName { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 账册类型值
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int AccountTypeValue { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +84,7 @@ namespace DM_Weight.Models
 | 
			
		|||
        [SugarColumn(ColumnName = "board_type")]
 | 
			
		||||
        public int BoardType { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  
 | 
			
		||||
        ///  用于标识是否给交接柜补药:0未补1已补
 | 
			
		||||
        /// 默认值: 1
 | 
			
		||||
        ///</summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "state")]
 | 
			
		||||
| 
						 | 
				
			
			@ -196,5 +196,12 @@ namespace DM_Weight.Models
 | 
			
		|||
        private string _drugSpec;
 | 
			
		||||
        [SugarColumn(ColumnName = "drug_manu_no")]
 | 
			
		||||
        public string DrugSpec { get=> _drugSpec;set=>SetProperty(ref _drugSpec, value); }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "yh_no")]
 | 
			
		||||
        public string BelongUser
 | 
			
		||||
        {
 | 
			
		||||
            get; set;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,6 +73,14 @@ namespace DM_Weight.Models
 | 
			
		|||
        [SugarColumn(ColumnName = "quantity")]
 | 
			
		||||
        public int Quantity { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  
 | 
			
		||||
        /// 交接柜中库存基数
 | 
			
		||||
        ///</summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "check_quantity")]
 | 
			
		||||
        public int BaseQuantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  
 | 
			
		||||
        /// 默认值: 1
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +109,7 @@ namespace DM_Weight.Models
 | 
			
		|||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public string Location
 | 
			
		||||
        {
 | 
			
		||||
            get => DrawerNo + "-" + ColNo;
 | 
			
		||||
            get => ColNo==0? DrawerNo + "号交接柜" : DrawerNo + "-" + ColNo;
 | 
			
		||||
        }
 | 
			
		||||
        private int _addQuantity = 0;
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
| 
						 | 
				
			
			@ -184,9 +192,15 @@ namespace DM_Weight.Models
 | 
			
		|||
        private ChannelList? _channelList;
 | 
			
		||||
        [Navigate(NavigateType.ManyToOne, nameof(Chnguid))]
 | 
			
		||||
        public ChannelList ChannelLst { get => _channelList; set => SetProperty(ref _channelList, value); }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public int DrawerState { get; set; } = 0;
 | 
			
		||||
        public DrugPleaseClaim PleaseClaim { get; set; }
 | 
			
		||||
 | 
			
		||||
        //dm_machine_record表id值
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public int? MachineRecordId { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(IsIgnore =true)]
 | 
			
		||||
        public string OrderNos { get; set; }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,122 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Controls;
 | 
			
		||||
using Newtonsoft.Json;
 | 
			
		||||
using SqlSugar;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 处方、请领单中间表
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [SugarTable("order_apply")]
 | 
			
		||||
    public class CollectDrug
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 是否选择
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore =true)]
 | 
			
		||||
        public bool IsSelected { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 主键
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "Applyid")]
 | 
			
		||||
        public int Applyid { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品请领单号
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "Drug_plase_id")]
 | 
			
		||||
        public string DrugPleaseClaimId { get; set; }
 | 
			
		||||
        /// 处方
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "OrderNo")]
 | 
			
		||||
        public string OrderNo { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品ID
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "Drug_Id")]
 | 
			
		||||
        public string DrugId { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 患者ID
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore =true)]
 | 
			
		||||
        public string PatientId { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 姓名
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public string PName { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 性别
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public string Sex { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 年龄
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore = true)] 
 | 
			
		||||
        public string Age { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 身份证号
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore = true)] 
 | 
			
		||||
        public string IdNumber { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 科室
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore = true)] 
 | 
			
		||||
        public string DeptName { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品名称
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore = true)] 
 | 
			
		||||
        public string DrugName { get;set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 规格
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore = true)] 
 | 
			
		||||
        public string DrugSpec { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 厂家
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(IsIgnore = true)] 
 | 
			
		||||
        public string Manufactory { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 数量
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "Quantity")]
 | 
			
		||||
        public int Quantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "Createdate")]
 | 
			
		||||
        public DateTime Createdate { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 状态
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "Status")] 
 | 
			
		||||
        public int Status { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "Machine_id")] 
 | 
			
		||||
        public string MachineId { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "Current_Machine_id")]
 | 
			
		||||
        public string CurrentMachineId { get; set; }
 | 
			
		||||
 | 
			
		||||
        [Navigate(NavigateType.OneToOne, nameof(DrugId))]
 | 
			
		||||
        public DrugInfo drugInfo { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 请领表
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [Navigate(NavigateType.ManyToOne, nameof(DrugPleaseClaimId))]
 | 
			
		||||
        public DrugPleaseClaim drugPleaseClaim { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public List<DrugPleaseManuNo> ManuNoList { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using SqlSugar;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    [SugarTable("destory_detail")]
 | 
			
		||||
    public class DestoryDetail
 | 
			
		||||
    {
 | 
			
		||||
        [SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
 | 
			
		||||
        public int ID { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "operatorid")]
 | 
			
		||||
        public int? Operatorid { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "reviewerid")]
 | 
			
		||||
        public int? Reviewerid { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "recordId")]
 | 
			
		||||
        public int RecordId { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "orderId")]
 | 
			
		||||
        public int OrderId { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "machine_id")]
 | 
			
		||||
        public string MachineId { get; set; }
 | 
			
		||||
            
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Prism.Mvvm;
 | 
			
		||||
using SqlSugar;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 药品基数表
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [SugarTable("drug_base")]
 | 
			
		||||
    public class DrugBase:BindableBase
 | 
			
		||||
    {
 | 
			
		||||
        private int _baseId = 0;
 | 
			
		||||
        [SugarColumn(ColumnName = "baseid", IsPrimaryKey = true)]
 | 
			
		||||
        public int BaseId { get=> _baseId; set { SetProperty(ref _baseId, value); } }
 | 
			
		||||
        private string _drugId;
 | 
			
		||||
        [SugarColumn(ColumnName = "drugid")]
 | 
			
		||||
        public string DrugId { get => _drugId; set { SetProperty(ref _drugId, value); } }
 | 
			
		||||
        private string _machineId = "";
 | 
			
		||||
        [SugarColumn(ColumnName = "machine_id")]
 | 
			
		||||
        public string MachineId { get => _machineId; set { SetProperty(ref _machineId, value); } }
 | 
			
		||||
        private int _baseQuantity = 0;
 | 
			
		||||
        [SugarColumn(ColumnName = "baseQuantity")]
 | 
			
		||||
        public int BaseQuantity { get=>_baseQuantity; set{ SetProperty(ref _baseQuantity, value); } }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using Prism.Mvvm;
 | 
			
		||||
using SqlSugar;
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -8,7 +9,7 @@ namespace DM_Weight.Models
 | 
			
		|||
    /// 
 | 
			
		||||
    ///</summary>
 | 
			
		||||
    [SugarTable("drug_info")]
 | 
			
		||||
    public class DrugInfo
 | 
			
		||||
    public class DrugInfo:BindableBase
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  
 | 
			
		||||
| 
						 | 
				
			
			@ -19,7 +20,7 @@ namespace DM_Weight.Models
 | 
			
		|||
        /// ҩƷID 
 | 
			
		||||
        ///</summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "drug_id", IsPrimaryKey = true)]
 | 
			
		||||
        public long DrugId { get; set; }
 | 
			
		||||
        public string DrugId { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// ƴ 
 | 
			
		||||
        ///</summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -71,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; }
 | 
			
		||||
| 
						 | 
				
			
			@ -81,5 +89,17 @@ namespace DM_Weight.Models
 | 
			
		|||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public int? StockQuantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        private DrugBase _base;
 | 
			
		||||
        [Navigate(NavigateType.OneToOne, nameof(DrugBase.DrugId), nameof(DrugId), whereSql: "machine_id='DM3'")]
 | 
			
		||||
        public DrugBase drugBase
 | 
			
		||||
        {
 | 
			
		||||
            get=> _base;
 | 
			
		||||
            set { SetProperty(ref _base, value); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
        public string drug_name_spec { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,130 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Newtonsoft.Json;
 | 
			
		||||
using SqlSugar;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 请领申请表
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [SugarTable("drug_please_claim")]
 | 
			
		||||
    public class DrugPleaseClaim
 | 
			
		||||
    {
 | 
			
		||||
        [SugarColumn(ColumnName = "id")]
 | 
			
		||||
        public int Id { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "drug_id")]
 | 
			
		||||
        public string DrugId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 请领数量
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "get_quantity")]
 | 
			
		||||
        public int GetQuantity { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 交处方张数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "return_prescription_quantity")]
 | 
			
		||||
        public int ReturnPrQuantity { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 处方用量
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "prescription_quantity")]
 | 
			
		||||
        public int PrescriptionQuantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 空瓶数量
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "empties_quantity")]
 | 
			
		||||
        public int EmptiesQuantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 实发数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "issue_quantity")]
 | 
			
		||||
        public int IssueQuantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 批次(多条)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "drug_manu_no")]
 | 
			
		||||
        [JsonProperty("drug_manu_no")]
 | 
			
		||||
        public string _DrugManuNos { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 备注1
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "notes_nn")]
 | 
			
		||||
        public string NotesNN { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 备注2
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "notes_n")]
 | 
			
		||||
        public string NotesN { get;set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 32:三级向二级请领;23:二级向三级退;
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "type")]
 | 
			
		||||
        public int Type { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 0:创建完成;1:二级已授权;2:一级已查阅;3:已关联His
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "state")]
 | 
			
		||||
        public int State { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 凭证号
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "voucher")]
 | 
			
		||||
        public string Voucher { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 机器id
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "machine_id")]
 | 
			
		||||
        public string MachineId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 创建时间
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "do_date")]
 | 
			
		||||
        public DateTime DoDate { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 申请人
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "apply_user")]
 | 
			
		||||
        public int ApplyUser { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 复核人
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "exp_user")]
 | 
			
		||||
        public int ReviewUser { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "please_no", IsPrimaryKey = true)]
 | 
			
		||||
        public string PleaseNo { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "department")]
 | 
			
		||||
        public string Department { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "totalQuantity")]
 | 
			
		||||
        public int TotalQuantity { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //[Navigate(NavigateType.ManyToMany, nameof(PleaseNo))]
 | 
			
		||||
        //public CollectDrug collectDrug { get; set; }
 | 
			
		||||
        
 | 
			
		||||
        [Navigate(NavigateType.OneToOne, nameof(DrugId))]
 | 
			
		||||
        public DrugInfo DrugInfo { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    public class DrugPleaseManuNo
 | 
			
		||||
    {
 | 
			
		||||
        public string DrugId { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string ManuNo { get; set; }
 | 
			
		||||
 | 
			
		||||
        public string EffDate { get; set; }
 | 
			
		||||
 | 
			
		||||
        public int Quantity { get; set; }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    public class DrugPleaseState
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品请领状态名
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string StateName { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  药品请领状态值
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int StateValue { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    public class DrugType
 | 
			
		||||
    {
 | 
			
		||||
        public int TypeValue { get; set; }
 | 
			
		||||
        public string TypeName { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
using Prism.Mvvm;
 | 
			
		||||
using SqlSugar;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    //交接班表
 | 
			
		||||
    [SugarTable("hkc_changeshifts")]
 | 
			
		||||
    public class HkcChangeShifts : BindableBase
 | 
			
		||||
    {
 | 
			
		||||
        [SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
 | 
			
		||||
        public int Id { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "optDate")]
 | 
			
		||||
        public DateTime? OptDate { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "FromOperator")]
 | 
			
		||||
        public string FromOperator { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "FromRviewer")]
 | 
			
		||||
        public string FromRviewer { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "ToOperator")]
 | 
			
		||||
        public string ToOperator { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "ToReviewer")]
 | 
			
		||||
        public string ToReviewer { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "ToDate")]
 | 
			
		||||
        public DateTime? ToDate { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "State")]
 | 
			
		||||
        public string State { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "optState")]
 | 
			
		||||
        public string OptState { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "machine_id")]
 | 
			
		||||
        public string Machineid { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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>
 | 
			
		||||
        /// 主键 
 | 
			
		||||
| 
						 | 
				
			
			@ -36,11 +37,11 @@ namespace DM_Weight.Models
 | 
			
		|||
        public int Quantity { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "stock_quantity")]
 | 
			
		||||
        public int? StockQuantity { get; set; }
 | 
			
		||||
        //[SugarColumn(ColumnName = "stock_quantity")]
 | 
			
		||||
        //public int? StockQuantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "check_quantity")]
 | 
			
		||||
        public int? CheckQuantity { get; set; }
 | 
			
		||||
        //[SugarColumn(ColumnName = "check_quantity")]
 | 
			
		||||
        //public int? CheckQuantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <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>
 | 
			
		||||
| 
						 | 
				
			
			@ -126,6 +129,19 @@ namespace DM_Weight.Models
 | 
			
		|||
        [SugarColumn(ColumnName = "is_destroy", IsOnlyIgnoreInsert = true)]
 | 
			
		||||
        public int? IsDestroy { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 销毁操作人 
 | 
			
		||||
        /// 默认值: 0
 | 
			
		||||
        ///</summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "take_user", IsOnlyIgnoreInsert = true)]
 | 
			
		||||
        public string TakeUser { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 销毁审核人 
 | 
			
		||||
        /// 默认值: 0
 | 
			
		||||
        ///</summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "fuzeren", IsOnlyIgnoreInsert = true)]
 | 
			
		||||
        public string DestoryReviewerUser { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(IsIgnore = true)]
 | 
			
		||||
| 
						 | 
				
			
			@ -137,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; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -127,5 +127,17 @@ namespace DM_Weight.Models
 | 
			
		|||
        ///</summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "use_dosage")]
 | 
			
		||||
        public string UseDosage { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //[Navigate(NavigateType.ManyToOne, nameof(OrderNo))]
 | 
			
		||||
        //public OrderInfo _OrderInfo { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(IsIgnore =true)]
 | 
			
		||||
        public string DrawerNo { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(IsIgnore =true)]
 | 
			
		||||
        public string ColNo { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -177,6 +177,21 @@ namespace DM_Weight.Models
 | 
			
		|||
        ///</summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "costs")]
 | 
			
		||||
        public decimal? Costs { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品请领状态(0未请领;1已请领)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "apply_status")]
 | 
			
		||||
        public int ApplyStatus { get;set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  
 | 
			
		||||
        /// 默认值: NULL
 | 
			
		||||
        ///</summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "machine_id")]
 | 
			
		||||
        public string MachineId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  
 | 
			
		||||
        /// 默认值: NULL
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,32 +0,0 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    public class OrderTakeVo
 | 
			
		||||
    {
 | 
			
		||||
        public DrugInfo Drug { get; set; }
 | 
			
		||||
 | 
			
		||||
        public OrderDetail OrderDetail { get; set; }
 | 
			
		||||
 | 
			
		||||
        public ChannelStock ChannelStock { get; set; }
 | 
			
		||||
 | 
			
		||||
        public int StockQuantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        public int Quantity { get; set; }
 | 
			
		||||
 | 
			
		||||
        public int GetQuantity { get; set; } = 0;
 | 
			
		||||
 | 
			
		||||
        public int Status { get; set; } = 0;
 | 
			
		||||
 | 
			
		||||
        public int[] BeforeQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 | 
			
		||||
 | 
			
		||||
        public int[] AfterQuantity { get; set; } = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 | 
			
		||||
 | 
			
		||||
        public int AddQuantity { get; set; } = 0;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,119 @@
 | 
			
		|||
using SqlSugar;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    [SugarTable("rejection_report")]
 | 
			
		||||
    public class RejectionReport
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 主键
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
 | 
			
		||||
        public int Id { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 发药时间
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "SendDate")]
 | 
			
		||||
        public DateTime SendDate { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 发药者
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "SendUser")]
 | 
			
		||||
        public string SendUser { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 领药者
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "ReceiveUser")]
 | 
			
		||||
        public string ReceiveUser { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 实发数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "RealNum")]
 | 
			
		||||
        public int RealNum { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 实物数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "InfactNum")]
 | 
			
		||||
        public int InfactNum { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 空安瓿
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "EmptyNum")]
 | 
			
		||||
        public int EmptyNum { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 还药时间
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "ReturnTime")]
 | 
			
		||||
        public string ReturnTime { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 还药者
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "ReturnUser")]
 | 
			
		||||
        public string ReturnUser { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 接收者
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "ReturnReceiveUser")]
 | 
			
		||||
        public string ReturnReceiveUser { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 补充者
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "AddUser")]
 | 
			
		||||
        public string AddUser { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 核对者
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "AddCheckUser")]
 | 
			
		||||
        public string AddCheckUser { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 操作时间
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "OperationTime")]
 | 
			
		||||
        public DateTime OperationTime { get; set; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "DrugId")]
 | 
			
		||||
        public string DrugId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品名称
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "DrugName")]
 | 
			
		||||
        public string DrugName { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品规格
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "DrugSpec")]
 | 
			
		||||
        public string DrugSpec { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 总基数
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "BaseNum")]
 | 
			
		||||
        public string BaseNum { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药箱号
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "DrawerNo")]
 | 
			
		||||
        public int DrawerNo { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 日消耗总计--安瓿
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "useBottle")]
 | 
			
		||||
        public int UseBottle { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 日消耗总计--处方
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "useOrderNo")]
 | 
			
		||||
        public int UseOrderNo { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 日消耗总计--补充
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "useAdd")]
 | 
			
		||||
        public int UseAdd { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -36,5 +36,11 @@ namespace DM_Weight.Models
 | 
			
		|||
        ///</summary>
 | 
			
		||||
         [SugarColumn(ColumnName="machine_id"    )]
 | 
			
		||||
         public string MachineId { get; set; }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 抽屉权限
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "drawer")]
 | 
			
		||||
        public string drawer { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
using SqlSugar;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    [SugarTable("SettingPage")]
 | 
			
		||||
    public class SettingPage
 | 
			
		||||
    {
 | 
			
		||||
        [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
 | 
			
		||||
        public string Id { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 页面名称
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "Name")]
 | 
			
		||||
        public string Name { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 页面连接
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "Url")]
 | 
			
		||||
        public string Url { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///可用标志
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "Flag")]
 | 
			
		||||
        public string Flag { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// view名称
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "ViewName")]
 | 
			
		||||
        public string ViewName { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 图标名称
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "IconName")]
 | 
			
		||||
        public string Icon { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 层级
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "Level")]
 | 
			
		||||
        public int Level { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 父级id
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "Parentid")]
 | 
			
		||||
        public int Parentid { get; set; }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 0可用1不可用
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        [SugarColumn(ColumnName = "State")]
 | 
			
		||||
        public int State { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,55 @@
 | 
			
		|||
using SqlSugar;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Models
 | 
			
		||||
{
 | 
			
		||||
    [SugarTable("hkc_shiftsreport")]
 | 
			
		||||
    public class ShiftsReport
 | 
			
		||||
    {
 | 
			
		||||
        [SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
 | 
			
		||||
        public int Id { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "drug_name")]
 | 
			
		||||
        public string DrugName { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "drug_spec")]
 | 
			
		||||
        public string DrugSpec { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "beforeNum")]
 | 
			
		||||
        public int? BeforeNum { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "getNum")]
 | 
			
		||||
        public int? GetNum { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "useNum")]
 | 
			
		||||
        public int? UseNum { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "manu_no")]
 | 
			
		||||
        public string ManuNo { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "surplus")]
 | 
			
		||||
        public int? Surplus { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "opt_Date")]
 | 
			
		||||
        public DateTime OptDate { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "FromOperator")]
 | 
			
		||||
        public string FromOperator { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "FromReviewer")]
 | 
			
		||||
        public string FromReviewer { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "ToOperator")]
 | 
			
		||||
        public string ToOperator { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "ToReviewer")]
 | 
			
		||||
        public string ToReviewer { get; set; }
 | 
			
		||||
 | 
			
		||||
        [SugarColumn(ColumnName = "machineId")]
 | 
			
		||||
        public string MachineId { get; set; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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; }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -8,7 +8,7 @@ namespace DM_Weight.Models
 | 
			
		|||
    /// 
 | 
			
		||||
    ///</summary>
 | 
			
		||||
    [SugarTable("user_list")]
 | 
			
		||||
    public class UserList
 | 
			
		||||
    public class UserList:ICloneable
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  
 | 
			
		||||
| 
						 | 
				
			
			@ -69,6 +69,11 @@ namespace DM_Weight.Models
 | 
			
		|||
         [SugarColumn(ColumnName="sign"    )]
 | 
			
		||||
         public byte[] Sign { get; set; }
 | 
			
		||||
 | 
			
		||||
        public object Clone()
 | 
			
		||||
        {
 | 
			
		||||
            return this.MemberwiseClone();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            return "userList = [UserName:" + Nickname + ", UserId:" + UserName + "]";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,6 +23,13 @@ using Unity;
 | 
			
		|||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Views;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
//using PreviewDemo;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
using DM_Weight.Common;
 | 
			
		||||
using System.Net;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using Newtonsoft.Json.Linq;
 | 
			
		||||
using OracleInternal.SqlAndPlsqlParser.RuleProcessors;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Port
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -37,6 +44,9 @@ namespace DM_Weight.Port
 | 
			
		|||
        // 条码枪串口
 | 
			
		||||
        public SerialPort scanCodeSerial;
 | 
			
		||||
 | 
			
		||||
        // 冰箱串口
 | 
			
		||||
        public SerialPort fridgeSerial;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // 抽屉串口协议232 | 485
 | 
			
		||||
        private int _drawerProtocol = Convert.ToInt32(ConfigurationManager.AppSettings["DrawerProtocol"]);
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +68,7 @@ namespace DM_Weight.Port
 | 
			
		|||
        // 取药操作的窗口名【处方取药、抽屉取药、自选取药、调拨出库】
 | 
			
		||||
        private string[] TakeNames = new string[] { "DrawerTakeDrugWindow", "OrderTakeDrugWindow", "SelfTakeDrugWindow", "InvoiceTakeDrugWindow" };
 | 
			
		||||
        // 加药操作的窗口名【自选加药、抽屉加药、还药】
 | 
			
		||||
        private string[] AddNames = new string[] { "SelfAddWindow", "ReturnDrugWindow", "ReturnDrug1Window", "DrawerAddDrugWindow" };
 | 
			
		||||
        private string[] AddNames = new string[] { "SelfAddWindow", "ReturnDrugWindow", "ReturnDrug1Window", "DrawerAddDrugWindow", "AddDrugControl" };
 | 
			
		||||
        // 盘点操作的窗口名【盘点】
 | 
			
		||||
        private string[] CheckNames = new string[] { "CheckStockWindow" };
 | 
			
		||||
        // 归还空瓶操作的窗口名【盘点】
 | 
			
		||||
| 
						 | 
				
			
			@ -71,14 +81,16 @@ namespace DM_Weight.Port
 | 
			
		|||
        private int[] AfterQuantity { get; set; } = new int[] { };
 | 
			
		||||
 | 
			
		||||
        // 整体流程状态
 | 
			
		||||
        public int statue { get; set; } = 0;
 | 
			
		||||
        private int statue { get; set; } = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // 是否正在操作中
 | 
			
		||||
        public bool Operate { get; set; }
 | 
			
		||||
 | 
			
		||||
        public DateTime dateTime { get; set; } = DateTime.Now;
 | 
			
		||||
        //冰箱是否正在操作中
 | 
			
		||||
        public bool FridgeOperate { get; set; }
 | 
			
		||||
 | 
			
		||||
        public DateTime dateTime { get; set; } = DateTime.Now;
 | 
			
		||||
 | 
			
		||||
        public async void ResetData()
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -117,12 +129,115 @@ namespace DM_Weight.Port
 | 
			
		|||
            DrawerNo = 0;
 | 
			
		||||
            ColNos = new int[] { };
 | 
			
		||||
        }
 | 
			
		||||
        #region  开抽屉
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 打开抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="ColNo"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task OpenAllDrawer()
 | 
			
		||||
        {
 | 
			
		||||
            byte[] buffer = await OpenDrawer();
 | 
			
		||||
            int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
 | 
			
		||||
 | 
			
		||||
            logger.Info($"OpenDrawer{string.Join(",", r)}");
 | 
			
		||||
            if (DrawerState(r))
 | 
			
		||||
            {
 | 
			
		||||
                statue = 1;
 | 
			
		||||
                // 返回消息  抽屉已经打开
 | 
			
		||||
                _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
 | 
			
		||||
                {
 | 
			
		||||
                    EventType = util.EventType.DRAWEROPEN,
 | 
			
		||||
                    WindowName = WindowName,
 | 
			
		||||
                });
 | 
			
		||||
                logger.Info($"抽屉【{DrawerNo}】打开成功");
 | 
			
		||||
                // 查询抽屉状态
 | 
			
		||||
                await Task.Delay(200);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                string _WindowName = WindowName;
 | 
			
		||||
                // 重新初始化数据
 | 
			
		||||
                ResetData();
 | 
			
		||||
                // 返回消息  抽屉打开失败
 | 
			
		||||
                _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
 | 
			
		||||
                {
 | 
			
		||||
                    EventType = util.EventType.OPENERROR,
 | 
			
		||||
                    WindowName = WindowName,
 | 
			
		||||
                    Message = $"抽屉【{DrawerNo}】打开失败"
 | 
			
		||||
                });
 | 
			
		||||
                logger.Info($"抽屉【{DrawerNo}】打开失败");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询抽屉状态
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="text"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task GetAllDrawerLockState()
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                if (Operate)
 | 
			
		||||
                {
 | 
			
		||||
                    // 查询抽屉状态
 | 
			
		||||
                    byte[] buffer = await CheckDrawerStatus();
 | 
			
		||||
 | 
			
		||||
                    int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
 | 
			
		||||
 | 
			
		||||
                    logger.Info($"GetAllDrawerLockState{string.Join(",", r)}");
 | 
			
		||||
                    int[] subArray = new int[8];
 | 
			
		||||
                    for (int i = 0; i < 8; i++)
 | 
			
		||||
                    {
 | 
			
		||||
                        subArray[i] = r[2 + i];
 | 
			
		||||
                    }
 | 
			
		||||
                    bool state = subArray.All(r => r > 0);
 | 
			
		||||
                    if (state)
 | 
			
		||||
                    {
 | 
			
		||||
                        //抽屉全部关闭
 | 
			
		||||
 | 
			
		||||
                        string _WindowName = WindowName;
 | 
			
		||||
                        // 重新初始化数据
 | 
			
		||||
                        ResetData();
 | 
			
		||||
                        // 返回消息  抽屉已经关闭
 | 
			
		||||
                        _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
 | 
			
		||||
                        {
 | 
			
		||||
                            EventType = util.EventType.DRAWERCLOSE,
 | 
			
		||||
                            WindowName = _WindowName,
 | 
			
		||||
                        });
 | 
			
		||||
                        logger.Info($"抽屉【{DrawerNo}】已关闭");
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        // 继续监听抽屉状态
 | 
			
		||||
                        await Task.Delay(200);
 | 
			
		||||
                        GetAllDrawerLockState();
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
 | 
			
		||||
                {
 | 
			
		||||
                    EventType = util.EventType.OPENERROR,
 | 
			
		||||
                    WindowName = WindowName,
 | 
			
		||||
                    Message = $"GetDrawerStatus异常:{ex.Message}"
 | 
			
		||||
                });
 | 
			
		||||
                logger.Info($"GetDrawerStatus异常:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
        public async void Start()
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            logger.Info($"进行抽屉操作抽屉号【{DrawerNo}】类型【{BoardType}】库位【{string.Join(",", ColNos)}】窗口【{WindowName}】");
 | 
			
		||||
            Operate = true;
 | 
			
		||||
 | 
			
		||||
            //开始录像
 | 
			
		||||
            //_chkFunction.HIKStartDVRRecord();
 | 
			
		||||
            //logger.Info($"时间:{DateTime.Now}");
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                // 储物箱直接开
 | 
			
		||||
| 
						 | 
				
			
			@ -301,7 +416,7 @@ namespace DM_Weight.Port
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        int i = 15;
 | 
			
		||||
        public async void GetDrawerStatus()
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
| 
						 | 
				
			
			@ -402,12 +517,19 @@ namespace DM_Weight.Port
 | 
			
		|||
                            logger.Info($"单支板数量变化【{string.Join(",", Quantitys)}】");
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
                        i--;
 | 
			
		||||
                        if (i == 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            SpeakAsync("请关闭抽屉");
 | 
			
		||||
                            i = 15;
 | 
			
		||||
                        }
 | 
			
		||||
                        // 继续监听抽屉状态
 | 
			
		||||
                        await Task.Delay(200);
 | 
			
		||||
                        GetDrawerStatus();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        i = 15;
 | 
			
		||||
                        statue = 2;
 | 
			
		||||
                        if (BoardType == 2)
 | 
			
		||||
                        {
 | 
			
		||||
| 
						 | 
				
			
			@ -574,7 +696,7 @@ namespace DM_Weight.Port
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
        private readonly IEventAggregator _eventAggregator;
 | 
			
		||||
 | 
			
		||||
        //private CHKFunction _chkFunction;
 | 
			
		||||
        public PortUtil(IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
| 
						 | 
				
			
			@ -612,6 +734,18 @@ namespace DM_Weight.Port
 | 
			
		|||
            {
 | 
			
		||||
                logger.Error("条码枪串口打开错误" + e.Message);
 | 
			
		||||
            }
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                string FridgePortPath = ConfigurationManager.AppSettings["FridgePortPath"];
 | 
			
		||||
                logger.Info($"打开冰箱串口【{FridgePortPath}】");
 | 
			
		||||
                fridgeSerial = new SerialPort(FridgePortPath, 9600, Parity.None, 8);
 | 
			
		||||
                fridgeSerial.Open();
 | 
			
		||||
                logger.Info($"冰箱串口打开结果【{fridgeSerial.IsOpen}】");
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Error("冰箱串口打开错误" + e.Message);
 | 
			
		||||
            }
 | 
			
		||||
            if (_canBusExsit)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
| 
						 | 
				
			
			@ -628,7 +762,7 @@ namespace DM_Weight.Port
 | 
			
		|||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //_chkFunction = chkFunction;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -637,23 +771,23 @@ namespace DM_Weight.Port
 | 
			
		|||
            byte[] buffer = new byte[length];
 | 
			
		||||
            // try
 | 
			
		||||
            // {
 | 
			
		||||
                int _length = 0;
 | 
			
		||||
                DateTime start = DateTime.Now;
 | 
			
		||||
                DateTime end = DateTime.Now;
 | 
			
		||||
                while (_length != length && end.Subtract(start).TotalMilliseconds < timeout)
 | 
			
		||||
                {
 | 
			
		||||
                    _length = serialPort.BytesToRead;
 | 
			
		||||
                    end = DateTime.Now;
 | 
			
		||||
                }
 | 
			
		||||
                if (_length != length)
 | 
			
		||||
                {
 | 
			
		||||
                    throw new TimeoutException($"串口【{serialPort.PortName}】交互超时");
 | 
			
		||||
                }
 | 
			
		||||
                serialPort.Read(buffer, 0, length);
 | 
			
		||||
            int _length = 0;
 | 
			
		||||
            DateTime start = DateTime.Now;
 | 
			
		||||
            DateTime end = DateTime.Now;
 | 
			
		||||
            while (_length != length && end.Subtract(start).TotalMilliseconds < timeout)
 | 
			
		||||
            {
 | 
			
		||||
                _length = serialPort.BytesToRead;
 | 
			
		||||
                end = DateTime.Now;
 | 
			
		||||
            }
 | 
			
		||||
            if (_length != length)
 | 
			
		||||
            {
 | 
			
		||||
                throw new TimeoutException($"串口【{serialPort.PortName}】交互超时");
 | 
			
		||||
            }
 | 
			
		||||
            serialPort.Read(buffer, 0, length);
 | 
			
		||||
            // }
 | 
			
		||||
            // catch (Exception ex)
 | 
			
		||||
            // {
 | 
			
		||||
                // logger.Error($"GetBufferByPort:{ex.Message}");
 | 
			
		||||
            // logger.Error($"GetBufferByPort:{ex.Message}");
 | 
			
		||||
            // }
 | 
			
		||||
            return buffer;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -696,7 +830,7 @@ namespace DM_Weight.Port
 | 
			
		|||
            return await GetBufferByPort(drawerSerial, 11);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool DrawerState(int[] r)
 | 
			
		||||
        private bool DrawerState(int[] r)
 | 
			
		||||
        {
 | 
			
		||||
            int index = DrawerNo > 8 ? DrawerNo - 7 : DrawerNo + 1;
 | 
			
		||||
            return r[index] == 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -769,7 +903,7 @@ namespace DM_Weight.Port
 | 
			
		|||
            canBusSerial.Write(buffer, 0, 8);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int[] CheckStorageStatus(int[] data)
 | 
			
		||||
        private int[] CheckStorageStatus(int[] data)
 | 
			
		||||
        {
 | 
			
		||||
            int a = data[0];
 | 
			
		||||
            int b = data[1];
 | 
			
		||||
| 
						 | 
				
			
			@ -938,6 +1072,37 @@ namespace DM_Weight.Port
 | 
			
		|||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region  药盒操作
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 打开药盒
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="ColNo"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task OpenBox(int ColNo)
 | 
			
		||||
        {
 | 
			
		||||
            var vlock = 321;
 | 
			
		||||
            decimal decolNO = (decimal)ColNo;
 | 
			
		||||
            var channel = Convert.ToInt32((DrawerNo * 10 + Math.Ceiling(decolNO % 3)).ToString(), 16);
 | 
			
		||||
            byte[] buffer = new byte[] { 0xaa, (byte)channel, 5, (byte)vlock, 0x00, 0x00, 0x00, 0xee };
 | 
			
		||||
            canBusSerial.Write(buffer, 0, 8);
 | 
			
		||||
            await Task.Delay(TimeSpan.FromMilliseconds(20));
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询药盒状态
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="text"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task<byte[]> GetBoxLockState(int ColNo)
 | 
			
		||||
        {
 | 
			
		||||
            decimal deColNo = (decimal)ColNo;
 | 
			
		||||
            var channel = Convert.ToInt32((DrawerNo * 10 + Math.Ceiling(deColNo / 3)).ToString(), 16);
 | 
			
		||||
            byte[] buffer = new byte[] { 0xaa, (byte)channel, 2, 0, 0, 0, 0, 0xee };
 | 
			
		||||
            canBusSerial.Write(buffer, 0, 8);
 | 
			
		||||
            return await GetBufferByPort(canBusSerial, 8);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        private string trim(string text)
 | 
			
		||||
        {
 | 
			
		||||
            //此处使用了转义字符如:\',\",\\,分别表示单引号,双引号,反斜杠
 | 
			
		||||
| 
						 | 
				
			
			@ -1025,7 +1190,7 @@ namespace DM_Weight.Port
 | 
			
		|||
            {
 | 
			
		||||
 | 
			
		||||
                canBusSerial.DiscardInBuffer();
 | 
			
		||||
                int channel = Convert.ToInt32((drawerNo * 10 + colNo).ToString(),16);
 | 
			
		||||
                int channel = Convert.ToInt32((drawerNo * 10 + colNo).ToString(), 16);
 | 
			
		||||
                byte[] buffer = new byte[] { 0xaa, (byte)channel, 6, 0, 0, 0, 0, 0xee };
 | 
			
		||||
                buffer[3] = (byte)(quantity >> 8);
 | 
			
		||||
                buffer[4] = (byte)(quantity & 0xff);
 | 
			
		||||
| 
						 | 
				
			
			@ -1070,6 +1235,18 @@ namespace DM_Weight.Port
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region 标签显示屏
 | 
			
		||||
        //清屏
 | 
			
		||||
        public void ClearContentMethod(int drawerNo, int colNo)
 | 
			
		||||
        {
 | 
			
		||||
            decimal deColNo = colNo;
 | 
			
		||||
            var channel = drawerNo * 10 + Math.Ceiling(deColNo / 3);
 | 
			
		||||
            var colNo2 = 321;
 | 
			
		||||
            byte[] buffer = new byte[] { 0xaa };
 | 
			
		||||
            canBusSerial.Write(buffer, 0, 8);
 | 
			
		||||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region 回收箱操作
 | 
			
		||||
| 
						 | 
				
			
			@ -1289,9 +1466,567 @@ namespace DM_Weight.Port
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 冰箱使能
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task FridegOpen(int iIndex)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                fridgeSerial.DiscardInBuffer();
 | 
			
		||||
                byte bAddress;
 | 
			
		||||
                if (iIndex == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x01;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x02;
 | 
			
		||||
                }
 | 
			
		||||
                byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD4, 0x00, 0x01, 0x0C, 0xF2 };
 | 
			
		||||
                //byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD4, 0x00, 0x01 };
 | 
			
		||||
                ////获取数组CRC校验码
 | 
			
		||||
                //byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
 | 
			
		||||
                ////Array.Reverse(byteDate);
 | 
			
		||||
                //int dataLength = buffer.Length;
 | 
			
		||||
                //Array.Resize(ref buffer, dataLength + byteDate.Length);
 | 
			
		||||
                //for (int i = 0; i < byteDate.Length; i++)
 | 
			
		||||
                //{
 | 
			
		||||
                //    buffer[dataLength + i] = byteDate[i];
 | 
			
		||||
                //}
 | 
			
		||||
                logger.Info($"冰箱使能【{Convert.ToHexString(buffer)}】");
 | 
			
		||||
                fridgeSerial.Write(buffer, 0, 8);
 | 
			
		||||
                await Task.Delay(80);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"冰箱使能发生异常:ex:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            FridgeOperate = false;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 冰箱失能
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task FridgeOff(int iIndex)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                fridgeSerial.DiscardInBuffer();
 | 
			
		||||
                byte bAddress;
 | 
			
		||||
                if (iIndex == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x01;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x02;
 | 
			
		||||
                }
 | 
			
		||||
                byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD4, 0x00, 0x00, 0xCD, 0x32 };
 | 
			
		||||
                //byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD4, 0x00, 0x01 };
 | 
			
		||||
                ////获取数组CRC校验码
 | 
			
		||||
                //byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
 | 
			
		||||
                ////Array.Reverse(byteDate);
 | 
			
		||||
                //int dataLength = buffer.Length;
 | 
			
		||||
                //Array.Resize(ref buffer, dataLength + byteDate.Length);
 | 
			
		||||
                //for (int i = 0; i < byteDate.Length; i++)
 | 
			
		||||
                //{
 | 
			
		||||
                //    buffer[dataLength + i] = byteDate[i];
 | 
			
		||||
                //}
 | 
			
		||||
                logger.Info($"冰箱失能【{Convert.ToHexString(buffer)}】");
 | 
			
		||||
                fridgeSerial.Write(buffer, 0, 8);
 | 
			
		||||
                await Task.Delay(80);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"冰箱失能发生异常:ex:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            FridgeOperate = false;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 冰箱报警使能
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task FridgeAlarmOn(int iIndex)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                fridgeSerial.DiscardInBuffer();
 | 
			
		||||
                byte bAddress;
 | 
			
		||||
                if (iIndex == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x01;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x02;
 | 
			
		||||
                }
 | 
			
		||||
                byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD5, 0x00, 0x01, 0x5D, 0x32 };
 | 
			
		||||
                //byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD5, 0x00, 0x01 };
 | 
			
		||||
                ////获取数组CRC校验码
 | 
			
		||||
                //byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
 | 
			
		||||
                ////Array.Reverse(byteDate);
 | 
			
		||||
                //int dataLength = buffer.Length;
 | 
			
		||||
                //Array.Resize(ref buffer, dataLength + byteDate.Length);
 | 
			
		||||
                //for (int i = 0; i < byteDate.Length; i++)
 | 
			
		||||
                //{
 | 
			
		||||
                //    buffer[dataLength + i] = byteDate[i];
 | 
			
		||||
                //}
 | 
			
		||||
                logger.Info($"冰箱报警使能【{Convert.ToHexString(buffer)}】");
 | 
			
		||||
                fridgeSerial.Write(buffer, 0, 8);
 | 
			
		||||
                await Task.Delay(80);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"冰箱报警使能发生异常:ex:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            FridgeOperate = false;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 冰箱报警失能
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task FridgeAlarmOff(int iIndex)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                fridgeSerial.DiscardInBuffer();
 | 
			
		||||
                byte bAddress;
 | 
			
		||||
                if (iIndex == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x01;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x02;
 | 
			
		||||
                }
 | 
			
		||||
                byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xD5, 0x00, 0x00, 0x9C, 0xF2 };
 | 
			
		||||
                //byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xD5, 0x00, 0x00 };
 | 
			
		||||
                ////获取数组CRC校验码
 | 
			
		||||
                //byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
 | 
			
		||||
                ////Array.Reverse(byteDate);
 | 
			
		||||
                //int dataLength = buffer.Length;
 | 
			
		||||
                //Array.Resize(ref buffer, dataLength + byteDate.Length);
 | 
			
		||||
                //for (int i = 0; i < byteDate.Length; i++)
 | 
			
		||||
                //{
 | 
			
		||||
                //    buffer[dataLength + i] = byteDate[i];
 | 
			
		||||
                //}
 | 
			
		||||
                logger.Info($"冰箱报警失能【{Convert.ToHexString(buffer)}】");
 | 
			
		||||
                fridgeSerial.Write(buffer, 0, 8);
 | 
			
		||||
                await Task.Delay(80);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"冰箱报警失能发生异常:ex:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            FridgeOperate = false;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 冰箱温度设定最小
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task FridgeMinSetting(float min, int iIndex)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                int iMix = Convert.ToInt32(min * 10);
 | 
			
		||||
                fridgeSerial.DiscardInBuffer();
 | 
			
		||||
                //byte[] bufferMin = new byte[] { 0x01, 0x06, 0x10, 0xC9, 0x00, 0x15, 0x9C, 0xFB };
 | 
			
		||||
                byte bAddress;
 | 
			
		||||
                if (iIndex == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x01;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x02;
 | 
			
		||||
                }
 | 
			
		||||
                byte[] bufferMin = new byte[] { bAddress, 0x06, 0x10, 0xC9, 0x00, (byte)(iMix & 0xff) };
 | 
			
		||||
                //获取数组CRC校验码
 | 
			
		||||
                byte[] byteDate = CRC16MODBUS.CrcModBus(bufferMin);
 | 
			
		||||
                //Array.Reverse(byteDate);
 | 
			
		||||
                int dataLength = bufferMin.Length;
 | 
			
		||||
                Array.Resize(ref bufferMin, dataLength + byteDate.Length);
 | 
			
		||||
                for (int i = 0; i < byteDate.Length; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    bufferMin[dataLength + i] = byteDate[i];
 | 
			
		||||
                }
 | 
			
		||||
                logger.Info($"冰箱温度设定Min:【{Convert.ToHexString(bufferMin)}】");
 | 
			
		||||
                fridgeSerial.Write(bufferMin, 0, 8);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"获取冰箱温度发生异常:ex:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 冰箱温度设定最大
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task FridgeMaxSetting(float max, int iIndex)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                int iMax = Convert.ToInt32(max * 10);
 | 
			
		||||
                fridgeSerial.DiscardInBuffer();
 | 
			
		||||
                //byte[] bufferMin = new byte[] { 0x01, 0x06, 0x10, 0xC9, 0x00, 0x15, 0x9C, 0xFB };
 | 
			
		||||
                byte bAddress;
 | 
			
		||||
                if (iIndex == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x01;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x02;
 | 
			
		||||
                }
 | 
			
		||||
                byte[] bufferMax = new byte[] { bAddress, 0x06, 0x10, 0xC8, 0x00, (byte)(iMax & 0xff) };
 | 
			
		||||
                //获取数组CRC校验码
 | 
			
		||||
                byte[] byteDate = CRC16MODBUS.CrcModBus(bufferMax);
 | 
			
		||||
                //Array.Reverse(byteDate);
 | 
			
		||||
                int dataLength = bufferMax.Length;
 | 
			
		||||
                Array.Resize(ref bufferMax, dataLength + byteDate.Length);
 | 
			
		||||
                for (int i = 0; i < byteDate.Length; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    bufferMax[dataLength + i] = byteDate[i];
 | 
			
		||||
                }
 | 
			
		||||
                logger.Info($"冰箱温度设定Max:【{Convert.ToHexString(bufferMax)}】");
 | 
			
		||||
                fridgeSerial.Write(bufferMax, 0, 8);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"获取冰箱温度发生异常:ex:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 获取冰箱温度
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task<float> GetFridgeTemperature(int iIndex)
 | 
			
		||||
        {
 | 
			
		||||
            float temperature = 0.0f;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                fridgeSerial.DiscardInBuffer();
 | 
			
		||||
                byte bAddress;
 | 
			
		||||
                if (iIndex == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x01;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x02;
 | 
			
		||||
                }
 | 
			
		||||
                byte[] buffer = new byte[] { bAddress, 0x03, 0x10, 0x02, 0x00, 0x01, 0x21, 0x0A };
 | 
			
		||||
                //byte[] buffer = new byte[] { 0x01, 0x03, 0x10, 0x02, 0x00, 0x01 };
 | 
			
		||||
 | 
			
		||||
                ////获取数组CRC校验码
 | 
			
		||||
                //byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
 | 
			
		||||
                ////Array.Reverse(byteDate);
 | 
			
		||||
                //int dataLength = buffer.Length;
 | 
			
		||||
                //Array.Resize(ref buffer, dataLength + byteDate.Length);
 | 
			
		||||
                //for (int i = 0; i < byteDate.Length; i++)
 | 
			
		||||
                //{
 | 
			
		||||
                //    buffer[dataLength + i] = byteDate[i];
 | 
			
		||||
                //}
 | 
			
		||||
 | 
			
		||||
                logger.Info($"获取冰箱温度【{Convert.ToHexString(buffer)}】");
 | 
			
		||||
                fridgeSerial.Write(buffer, 0, 8);
 | 
			
		||||
 | 
			
		||||
                byte[] retByte = await GetBufferByPort(fridgeSerial, 7);
 | 
			
		||||
 | 
			
		||||
                logger.Info($"获取冰箱温度返回【{Convert.ToHexString(retByte)}】");
 | 
			
		||||
 | 
			
		||||
                if (retByte != null && retByte.Length >= 7)
 | 
			
		||||
                {
 | 
			
		||||
                    var hight = retByte[3];
 | 
			
		||||
                    var low = retByte[4];
 | 
			
		||||
                    int iHight = Convert.ToInt32(hight << 8);
 | 
			
		||||
                    int iLow = Convert.ToInt32(retByte[4]);
 | 
			
		||||
                    temperature = Convert.ToSingle(iHight + iLow) / 10;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                logger.Info($"获取冰箱温度发生异常:ex:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            return temperature;
 | 
			
		||||
        }
 | 
			
		||||
        //读制冷片温度
 | 
			
		||||
        public async Task<float> GetFridgeTemperature2()
 | 
			
		||||
        {
 | 
			
		||||
            float temperature = 0.0f;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                fridgeSerial.DiscardInBuffer();
 | 
			
		||||
                byte bAddress;
 | 
			
		||||
                byte[] buffer = new byte[] { 0x01, 0x03, 0x10, 0x0C, 0x00, 0x01, 0x40, 0xC9 };
 | 
			
		||||
                //byte[] buffer = new byte[] { 0x01, 0x03, 0x10, 0x02, 0x00, 0x01 };
 | 
			
		||||
                ////获取数组CRC校验码
 | 
			
		||||
                //byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
 | 
			
		||||
                ////Array.Reverse(byteDate);
 | 
			
		||||
                //int dataLength = buffer.Length;
 | 
			
		||||
                //Array.Resize(ref buffer, dataLength + byteDate.Length);
 | 
			
		||||
                //for (int i = 0; i < byteDate.Length; i++)
 | 
			
		||||
                //{
 | 
			
		||||
                //    buffer[dataLength + i] = byteDate[i];
 | 
			
		||||
                //}
 | 
			
		||||
                logger.Info($"获制冷片温度【{Convert.ToHexString(buffer)}】");
 | 
			
		||||
                fridgeSerial.Write(buffer, 0, 8);
 | 
			
		||||
                byte[] retByte = await GetBufferByPort(fridgeSerial, 7);
 | 
			
		||||
                logger.Info($"获取制冷片温度返回【{Convert.ToHexString(retByte)}】");
 | 
			
		||||
                if (retByte != null && retByte.Length >= 7)
 | 
			
		||||
                {
 | 
			
		||||
                    var hight = retByte[3];
 | 
			
		||||
                    var low = retByte[4];
 | 
			
		||||
                    int iHight = Convert.ToInt32(hight << 8);
 | 
			
		||||
                    int iLow = Convert.ToInt32(retByte[4]);
 | 
			
		||||
                    temperature = Convert.ToSingle(iHight + iLow) / 10;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"获取制冷片温度发生异常:ex:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            return temperature;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 设置冰箱温度
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task<float> SetFridgeTemperature(float temperature, int iIndex)
 | 
			
		||||
        {
 | 
			
		||||
            int tpt = (int)temperature * 10;
 | 
			
		||||
            byte Temperature = (byte)(tpt & 0xff);
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                //if (!FridgeOperate)
 | 
			
		||||
                {
 | 
			
		||||
                    fridgeSerial.DiscardInBuffer();
 | 
			
		||||
                    byte bAddress;
 | 
			
		||||
                    if (iIndex == 1)
 | 
			
		||||
                    {
 | 
			
		||||
                        bAddress = 0x01;
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        bAddress = 0x02;
 | 
			
		||||
                    }
 | 
			
		||||
                    //byte[] buffer = new byte[] { 0x01, 0x03, 0x10, 0x02, 0x00, 0x01, 0x21,0x0A };
 | 
			
		||||
                    byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0x02, 0x00, (byte)Temperature };
 | 
			
		||||
 | 
			
		||||
                    //获取数组CRC校验码
 | 
			
		||||
                    byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
 | 
			
		||||
                    //Array.Reverse(byteDate);
 | 
			
		||||
                    int dataLength = buffer.Length;
 | 
			
		||||
                    Array.Resize(ref buffer, dataLength + byteDate.Length);
 | 
			
		||||
                    for (int i = 0; i < byteDate.Length; i++)
 | 
			
		||||
                    {
 | 
			
		||||
                        buffer[dataLength + i] = byteDate[i];
 | 
			
		||||
                    }
 | 
			
		||||
                    logger.Info($"设置冰箱温度【{Convert.ToHexString(buffer)}】");
 | 
			
		||||
                    fridgeSerial.Write(buffer, 0, 8);
 | 
			
		||||
 | 
			
		||||
                    await GetBufferByPort(fridgeSerial, 8);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                logger.Info($"获取冰箱温度发生异常:ex:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            return temperature;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 冰箱延迟报警
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task FridgeDelayWarm(int iIndex)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                //if (!FridgeOperate)
 | 
			
		||||
                {
 | 
			
		||||
                    fridgeSerial.DiscardInBuffer();
 | 
			
		||||
                    byte bAddress;
 | 
			
		||||
                    if (iIndex == 1)
 | 
			
		||||
                    {
 | 
			
		||||
                        bAddress = 0x01;
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        bAddress = 0x02;
 | 
			
		||||
                    }
 | 
			
		||||
                    byte[] buffer = new byte[] { bAddress, 0x06, 0x10, 0xCD, 0x00, 0x01, 0xDD, 0x35 };
 | 
			
		||||
                    //byte[] buffer = new byte[] { 0x01, 0x06, 0x10, 0xCD, 0x00, 0x01 };
 | 
			
		||||
                    ////获取数组CRC校验码
 | 
			
		||||
                    //byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
 | 
			
		||||
                    ////Array.Reverse(byteDate);
 | 
			
		||||
                    //int dataLength = buffer.Length;
 | 
			
		||||
                    //Array.Resize(ref buffer, dataLength + byteDate.Length);
 | 
			
		||||
                    //for (int i = 0; i < byteDate.Length; i++)
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    buffer[dataLength + i] = byteDate[i];
 | 
			
		||||
                    //}
 | 
			
		||||
                    logger.Info($"冰箱延迟报警【{Convert.ToHexString(buffer)}】");
 | 
			
		||||
                    fridgeSerial.Write(buffer, 0, 8);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                logger.Info($"获取冰箱温度发生异常:ex:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            //FridgeOperate = false;
 | 
			
		||||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        #region 新冰箱抽屉获取温度
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询冰箱继电器状态
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="iIndex"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task<int> GetFridgeState(int iIndex)
 | 
			
		||||
        {
 | 
			
		||||
            int frodgeState = 0;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                fridgeSerial.DiscardInBuffer();
 | 
			
		||||
                byte bAddress;
 | 
			
		||||
                if( iIndex == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x01;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x02;
 | 
			
		||||
                }
 | 
			
		||||
                byte[] buffer = new byte[] { bAddress, 0x03, 0x00, 0x00, 0x00, 0x01 };
 | 
			
		||||
                //获取数组CRC校验码
 | 
			
		||||
                byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
 | 
			
		||||
                int dataLength = buffer.Length;
 | 
			
		||||
                Array.Resize(ref buffer, dataLength + byteDate.Length);
 | 
			
		||||
                for (int i = 0; i < byteDate.Length; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    buffer[dataLength + i] = byteDate[i];
 | 
			
		||||
                }
 | 
			
		||||
                logger.Info($"获取冰箱继电器状态【{Convert.ToHexString(buffer)}】");
 | 
			
		||||
                fridgeSerial.Write(buffer, 0, 8);
 | 
			
		||||
                byte[] retByte = await GetBufferByPort(fridgeSerial, 7);
 | 
			
		||||
                logger.Info($"获取冰箱继电器状态返回【{Convert.ToHexString(retByte)}】");
 | 
			
		||||
                if (retByte != null && retByte.Length >= 7)
 | 
			
		||||
                {
 | 
			
		||||
                    frodgeState = Convert.ToInt32(retByte[4]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"检测冰箱继电器状态发生异常:ex:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            return frodgeState;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 获取冰箱温度
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task<float> GetFridgeTemperatureForNew(int iIndex)
 | 
			
		||||
        {
 | 
			
		||||
            float temperature = 0.0f;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                fridgeSerial.DiscardInBuffer();
 | 
			
		||||
                byte bAddress;
 | 
			
		||||
                if (iIndex == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x01;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x02;
 | 
			
		||||
                }
 | 
			
		||||
                byte[] buffer = new byte[] { bAddress, 0x03, 0x00, 0x03, 0x00, 0x01 };
 | 
			
		||||
 | 
			
		||||
                //获取数组CRC校验码
 | 
			
		||||
                byte[] byteDate = CRC16MODBUS.CrcModBus(buffer);
 | 
			
		||||
                //Array.Reverse(byteDate);
 | 
			
		||||
                int dataLength = buffer.Length;
 | 
			
		||||
                Array.Resize(ref buffer, dataLength + byteDate.Length);
 | 
			
		||||
                for (int i = 0; i < byteDate.Length; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    buffer[dataLength + i] = byteDate[i];
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                logger.Info($"获取冰箱温度【{Convert.ToHexString(buffer)}】");
 | 
			
		||||
                fridgeSerial.Write(buffer, 0, 8);
 | 
			
		||||
 | 
			
		||||
                byte[] retByte = await GetBufferByPort(fridgeSerial, 7);
 | 
			
		||||
 | 
			
		||||
                logger.Info($"获取冰箱温度返回【{Convert.ToHexString(retByte)}】");
 | 
			
		||||
 | 
			
		||||
                if (retByte != null && retByte.Length >= 7)
 | 
			
		||||
                {
 | 
			
		||||
                    var hight = retByte[3];
 | 
			
		||||
                    var low = retByte[4];
 | 
			
		||||
                    int iHight = Convert.ToInt32(hight << 8);
 | 
			
		||||
                    int iLow = Convert.ToInt32(retByte[4]);
 | 
			
		||||
                    temperature = Convert.ToSingle(iHight + iLow) / 10;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                logger.Info($"获取冰箱温度发生异常:ex:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
            return temperature;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 冰箱温度设定最低温与最高温
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public async Task SetFridgeLowHeightForNew(float min,float max, int iIndex)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                int iMix = Convert.ToInt32(min * 10);
 | 
			
		||||
                int iMax = Convert.ToInt32(max * 10);
 | 
			
		||||
                fridgeSerial.DiscardInBuffer();
 | 
			
		||||
                //byte[] bufferMin = new byte[] { 0x01, 0x06, 0x10, 0xC9, 0x00, 0x15, 0x9C, 0xFB };
 | 
			
		||||
                byte bAddress;
 | 
			
		||||
                if (iIndex == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x01;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    bAddress = 0x02;
 | 
			
		||||
                }
 | 
			
		||||
                byte[] bufferMin = new byte[] { bAddress, 0x10, 0x00, 0x06, 0x00,0x02,0x04, (byte)(iMix >>8), (byte)(iMix & 0xff), (byte)(iMax >>8), (byte)(iMax & 0xff) };
 | 
			
		||||
                //获取数组CRC校验码
 | 
			
		||||
                byte[] byteDate = CRC16MODBUS.CrcModBus(bufferMin);
 | 
			
		||||
                //Array.Reverse(byteDate);
 | 
			
		||||
                int dataLength = bufferMin.Length;
 | 
			
		||||
                Array.Resize(ref bufferMin, dataLength + byteDate.Length);
 | 
			
		||||
                for (int i = 0; i < byteDate.Length; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    bufferMin[dataLength + i] = byteDate[i];
 | 
			
		||||
                }
 | 
			
		||||
                logger.Info($"冰箱温度设定Min:【{Convert.ToHexString(bufferMin)}】");
 | 
			
		||||
                fridgeSerial.Write(bufferMin, 0, 13);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"获取冰箱温度发生异常:ex:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,7 @@ using System.Threading.Tasks;
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.Report
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +18,7 @@ namespace DM_Weight.Report
 | 
			
		|||
 | 
			
		||||
        // 定义Grid++Report报表主对象
 | 
			
		||||
        public static GridppReport Report = new GridppReport();
 | 
			
		||||
        public static string gridConnectionString =  ConfigurationManager.AppSettings["gridConnectionString"];
 | 
			
		||||
        public static string gridConnectionString = ConfigurationManager.AppSettings["gridConnectionString"];
 | 
			
		||||
        /**
 | 
			
		||||
         * 打印预览
 | 
			
		||||
         * tempname: 模板文件名称
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +44,7 @@ namespace DM_Weight.Report
 | 
			
		|||
            //{
 | 
			
		||||
            //    Report.ParameterByName("machine_id").Value = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
 | 
			
		||||
            //});
 | 
			
		||||
            string machine_id=(ConfigurationManager.AppSettings["machineId"] ?? "DM1"); 
 | 
			
		||||
            string machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
 | 
			
		||||
            string SQL = $@"SELECT cl.`row_no` AS drawerNo,cl.`col_no` AS colNo,cl.`quantity` AS quantity,cl.`manu_no` AS manuNo,cl.`eff_date` AS effDate,
 | 
			
		||||
                          di.`drug_name` AS drugName,di.`drug_spec` AS drugSpec,di.`pack_unit` AS packUnit,di.`manufactory` AS manuFactory,di.`max_stock` AS baseQuantity,
 | 
			
		||||
                          cl.`drug_id` AS drugId FROM channel_stock cl INNER JOIN drug_info di ON di.`drug_id` = cl.`drug_id` WHERE cl.`machine_id` =  '{machine_id}' AND cl.`drawer_type` = 1 ORDER BY cl.`drug_id`";
 | 
			
		||||
| 
						 | 
				
			
			@ -57,9 +58,9 @@ namespace DM_Weight.Report
 | 
			
		|||
        {
 | 
			
		||||
            DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1");
 | 
			
		||||
            DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1);
 | 
			
		||||
            string p_machine_id= (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
 | 
			
		||||
            string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
 | 
			
		||||
            // 定义Grid++Report报表主对象
 | 
			
		||||
             GridppReport Report = new GridppReport();
 | 
			
		||||
            GridppReport Report = new GridppReport();
 | 
			
		||||
            // 加载模板文件
 | 
			
		||||
            Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "account_book_temp.grf");
 | 
			
		||||
            string SQL = string.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -82,7 +83,66 @@ namespace DM_Weight.Report
 | 
			
		|||
            Report.DetailGrid.Recordset.QuerySQL = SQL;
 | 
			
		||||
            Report.PrintPreview(true);
 | 
			
		||||
        }
 | 
			
		||||
        public static void PrintReportAccountBook(DateTime? startDate, DateTime? endDate, int type, string drug_id)
 | 
			
		||||
        {
 | 
			
		||||
            // 定义Grid++Report报表主对象
 | 
			
		||||
            GridppReport Report = new GridppReport();
 | 
			
		||||
            // 加载模板文件
 | 
			
		||||
            Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "account_book_temp.grf");
 | 
			
		||||
            Report.DetailGrid.Recordset.ConnectionString = gridConnectionString;
 | 
			
		||||
            DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1");
 | 
			
		||||
            DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1);
 | 
			
		||||
            string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM3");
 | 
			
		||||
            //string jj_machine_id = (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5");
 | 
			
		||||
            string SQL = $@" SELECT ac.create_date as operationTime, ac.TYPE,
 | 
			
		||||
	                     if(ac.type in(1,2),0,ac.yesterday_quantity) as YQuantity,if(ac.type in(3,4),0,ac.add_quantity) as inQuantity,if(ac.type in(3,4),0,ac.out_quantity) as outQuantity,
 | 
			
		||||
	                     if(ac.type in(1,2),0,ac.manu_stock) as ManuStock,ac.total_stock AS stockQuantity, -- if(ac.type in(1,2),0,ac.total_stock) as TotalStock,
 | 
			
		||||
	                     ac.invoice_no as invoiceId, ac.manu_no as manuNo,ac.eff_date as effDate,di.drug_id,di.drug_name as DrugName,di.drug_spec as DrugSpec,di.manufactory as manufactory,di.pack_unit AS packUnit,di.dosage,u1.user_name as operatorName,u2.user_name as reviewerName
 | 
			
		||||
	                     FROM account_book_g2 ac left join drug_info di on ac.drug_id=di.drug_id left join user_list u1 on ac.user_id1=u1.id left join user_list u2 on ac.user_id2=u2.id
 | 
			
		||||
 		                    WHERE ac.machine_id ='{p_machine_id}' and create_time>'{p_startDate}' AND create_time<'{p_endDate}' ";
 | 
			
		||||
            if (!string.IsNullOrEmpty(drug_id))
 | 
			
		||||
            {
 | 
			
		||||
                SQL += " AND ac.drug_id='" + drug_id + "' ";
 | 
			
		||||
            }
 | 
			
		||||
            if (type > 0)
 | 
			
		||||
            {
 | 
			
		||||
                if (type == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    SQL += " WHERE AddQuantity>0 ";
 | 
			
		||||
                }
 | 
			
		||||
                if (type == 2)
 | 
			
		||||
                {
 | 
			
		||||
                    SQL += " WHERE OutQuantity>0 ";
 | 
			
		||||
                }
 | 
			
		||||
                if (type == 3)
 | 
			
		||||
                {
 | 
			
		||||
                    SQL += " WHERE type=3 ";
 | 
			
		||||
                }
 | 
			
		||||
                if (type == 4)
 | 
			
		||||
                {
 | 
			
		||||
                    SQL += " WHERE type=4  ";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            SQL += " ORDER BY di.drug_id,ac.create_date desc";
 | 
			
		||||
 | 
			
		||||
            Report.DetailGrid.Recordset.QuerySQL = SQL;
 | 
			
		||||
            Report.PrintPreview(true);
 | 
			
		||||
            //string filePath = AppDomain.CurrentDomain.BaseDirectory + "ReportTemp//" + "account_book_temp.pdf";
 | 
			
		||||
            //if (File.Exists(filePath))
 | 
			
		||||
            //{
 | 
			
		||||
            //    try
 | 
			
		||||
            //    {
 | 
			
		||||
 | 
			
		||||
            //        File.Delete(filePath);
 | 
			
		||||
            //    }
 | 
			
		||||
            //    catch (Exception ex)
 | 
			
		||||
            //    {
 | 
			
		||||
            //        FindAndKillProcess();
 | 
			
		||||
 | 
			
		||||
            //    }
 | 
			
		||||
            //}
 | 
			
		||||
            //Report.ExportDirect(GRExportType.gretPDF, filePath, false, true);
 | 
			
		||||
        }
 | 
			
		||||
        public static void PrintReportMechineRecord(int type, DateTime? startDate, DateTime? endDate)
 | 
			
		||||
        {
 | 
			
		||||
            // 定义Grid++Report报表主对象
 | 
			
		||||
| 
						 | 
				
			
			@ -148,7 +208,7 @@ namespace DM_Weight.Report
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            Report.DetailGrid.Recordset.ConnectionString = gridConnectionString;
 | 
			
		||||
            Report.DetailGrid.Recordset.QuerySQL= SQL;
 | 
			
		||||
            Report.DetailGrid.Recordset.QuerySQL = SQL;
 | 
			
		||||
 | 
			
		||||
            Report.PrintPreview(true);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -171,5 +231,208 @@ namespace DM_Weight.Report
 | 
			
		|||
            Report.ParameterByName("type").AsInteger = 1;
 | 
			
		||||
            Report.PrintPreview(true);
 | 
			
		||||
        }
 | 
			
		||||
        //交接班记录报表
 | 
			
		||||
        public static void PrintChangeShiftsReport(DateTime? startDate, DateTime? endDate)
 | 
			
		||||
        {
 | 
			
		||||
            DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1");
 | 
			
		||||
            DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1);
 | 
			
		||||
            string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
 | 
			
		||||
            // 定义Grid++Report报表主对象
 | 
			
		||||
            GridppReport Report = new GridppReport();
 | 
			
		||||
            // 加载模板文件
 | 
			
		||||
            Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "changeShifts_temp.grf");
 | 
			
		||||
            string SQL = string.Empty;
 | 
			
		||||
            Report.DetailGrid.Recordset.ConnectionString = gridConnectionString;
 | 
			
		||||
            Report.Initialize += new _IGridppReportEvents_InitializeEventHandler(() =>
 | 
			
		||||
            {
 | 
			
		||||
                Report.ParameterByName("machine_id").Value = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
 | 
			
		||||
                Report.ParameterByName("startDate").Value = startDate ?? Convert.ToDateTime("2010-1-1");
 | 
			
		||||
                Report.ParameterByName("endDate").Value = endDate ?? DateTime.Now.AddDays(1);
 | 
			
		||||
            });
 | 
			
		||||
            SQL = $@"SELECT opt_date,drug_name,drug_spec,beforenum,getnum,usenum,manu_no,surplus,CONCAT(fromoperator,' ',fromreviewer) as fromoperator,
 | 
			
		||||
                    CONCAT(tooperator,' ',toreviewer) as tooperator
 | 
			
		||||
                    from `hkc_shiftsreport` WHERE `machineid` = '{p_machine_id}' AND `opt_date` > '{p_startDate}'
 | 
			
		||||
                        AND opt_date < '{p_endDate}'  ORDER BY opt_date";
 | 
			
		||||
            Report.DetailGrid.Recordset.QuerySQL = SQL;
 | 
			
		||||
            //Report.PrintPreview(true);
 | 
			
		||||
            string filePath = AppDomain.CurrentDomain.BaseDirectory + "ReportTemp//" + "changeShifts_temp.pdf";
 | 
			
		||||
            if (File.Exists(filePath))
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    File.Delete(filePath);
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
                    FindAndKillProcess();
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            Report.ExportDirect(GRExportType.gretPDF, filePath, false, true);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        public static bool FindAndKillProcess()
 | 
			
		||||
        {
 | 
			
		||||
            foreach (Process clsProcess in Process.GetProcesses())
 | 
			
		||||
            {
 | 
			
		||||
                if (clsProcess.ProcessName.Contains("wps") || clsProcess.ProcessName.Contains("msedge"))
 | 
			
		||||
                {
 | 
			
		||||
                    clsProcess.Kill();
 | 
			
		||||
                    //return true;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            //process not found, return false
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 空安瓿回收销毁报表
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="startDate"></param>
 | 
			
		||||
        /// <param name="endDate"></param>
 | 
			
		||||
        public static void PrintEmptyDestoryReport(DateTime? startDate, DateTime? endDate)
 | 
			
		||||
        {
 | 
			
		||||
            // 定义Grid++Report报表主对象
 | 
			
		||||
            GridppReport Report = new GridppReport();
 | 
			
		||||
            DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1");
 | 
			
		||||
            DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1);
 | 
			
		||||
            string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
 | 
			
		||||
            string SQL = string.Empty;
 | 
			
		||||
            Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "ReturnEmptyDistory_template.grf");
 | 
			
		||||
 | 
			
		||||
            SQL = $@"
 | 
			
		||||
                    SELECT di.drug_id, di.drug_name as drugName,di.dosage,di.drug_spec as drugSpec,di.big_unit,oi.Order_Date, CONCAT(oi.p_name,'/',oi.dept_name) as userDeptName,
 | 
			
		||||
                    od.Quantity,mr.Manu_No,ul.user_name as retuenUser,u2.user_name as returnReviewer,u3.User_name as distoryUser,u4.User_name as distoryRevierer,(od.Quantity-mr.return_quantity2) as needReturnEmptyCount
 | 
			
		||||
                    from order_info oi inner join order_detail od on oi.order_no=od.order_no 
 | 
			
		||||
                    inner join (SELECT id as mrId,manu_no,invoice_id,id,operator,reviewer, sum(return_quantity2) as return_quantity2  FROM dm_machine_record where type=2  and machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}'  GROUP BY invoice_id) mr on oi.order_no=mr.invoice_id 
 | 
			
		||||
                    INNER JOIN drug_info di on od.drug_id=di.drug_id
 | 
			
		||||
                    LEFT JOIN (SELECT manu_no,invoice_id,id,operator,reviewer,get_id  from dm_machine_record where type=32  and machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') re on re.get_id=mr.id 
 | 
			
		||||
                    LEFT JOIN (SELECT recordId,operatorid,reviewerid,machine_id FROM destory_detail WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') ddl on re.id=ddl.recordId 
 | 
			
		||||
                    -- LEFT JOIN (SELECT User_name,machine_id,id FROM user_list  WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') ul0 on mr.operator=ul0.id
 | 
			
		||||
                    -- LEFT JOIN (SELECT User_name,machine_id,id FROM user_list  WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') ul00 on re.reviewer=ul00.id 
 | 
			
		||||
                    LEFT JOIN (SELECT User_name,machine_id,id FROM user_list  WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') ul on re.operator=ul.id 
 | 
			
		||||
                    LEFT JOIN (SELECT User_name,machine_id,id FROM user_list  WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') u2 on re.reviewer=u2.id 
 | 
			
		||||
                    LEFT JOIN (SELECT User_name,machine_id,id FROM user_list  WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') u3 on ddl.operatorid=u3.id 
 | 
			
		||||
                    LEFT JOIN  (SELECT User_name,machine_id,id FROM user_list  WHERE machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') u4 on ddl.reviewerid=u4.id 
 | 
			
		||||
                    WHERE
 | 
			
		||||
                    oi.Pharmacy='{ConfigurationManager.AppSettings["storage"] ?? ""}' and oi.Order_Date>'{startDate}' and oi.Order_Date<'{endDate}' GROUP BY Order_Date";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            Report.DetailGrid.Recordset.ConnectionString = gridConnectionString;
 | 
			
		||||
            Report.DetailGrid.Recordset.QuerySQL = SQL;
 | 
			
		||||
 | 
			
		||||
            Report.PrintPreview(true);
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 发药登记表
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="startDate"></param>
 | 
			
		||||
        /// <param name="endDate"></param>
 | 
			
		||||
        public static void OrderUseReport(DateTime? startDate, DateTime? endDate, string drug_id)
 | 
			
		||||
        {
 | 
			
		||||
            // 定义Grid++Report报表主对象
 | 
			
		||||
            GridppReport Report = new GridppReport();
 | 
			
		||||
            DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1");
 | 
			
		||||
            DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1);
 | 
			
		||||
            string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
 | 
			
		||||
            string SQL = string.Empty;
 | 
			
		||||
            Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "orderUse_template.grf");
 | 
			
		||||
 | 
			
		||||
            SQL = $@"
 | 
			
		||||
                    SELECT oi.p_name,oi.age,oi.sex,oi.id_number,oi.patientno,oi.disease,od.drug_id,oi.doctor_name,oi.order_no,oi.order_date,
 | 
			
		||||
	                    dmr.id,dmr.`drawer_no` AS drawerNo,dmr.`col_no` AS colNo,dmr.`type` AS `type`,dmr.`quantity` AS quantity,
 | 
			
		||||
                      dmr.`manu_no` AS manuNo,dmr.`eff_date` AS effDate,dmr.`operation_time` AS operationTime,
 | 
			
		||||
                      di.`drug_name` AS drugName,di.`drug_spec` AS drugSpec,di.`pack_unit` AS packUnit,
 | 
			
		||||
                      di.`manufactory` AS manuFactory,di.`max_stock` AS baseQuantity,dmr.`drug_id` AS drugId,
 | 
			
		||||
                      ul.`user_name` AS nickname,U2.`user_name` AS reviewNickname FROM dm_machine_record dmr 
 | 
			
		||||
					  
 | 
			
		||||
					  INNER JOIN ORDER_INFO oi on dmr.invoice_id=oi.order_no
 | 
			
		||||
					  INNER JOIN order_detail od on oi.order_no=od.order_no and oi.order_id=od.order_id
 | 
			
		||||
					  
 | 
			
		||||
					  LEFT JOIN drug_info di ON di.`drug_id` = dmr.`drug_id`
 | 
			
		||||
                      LEFT JOIN (select id,user_name from user_list where machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') ul ON ul.`id` = dmr.`Operator` 
 | 
			
		||||
                     LEFT JOIN (select id,user_name from user_list where machine_id='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}') U2 ON U2.ID=dmr.reviewer
 | 
			
		||||
                     WHERE  dmr.`type` = 2  and oi.Pharmacy='{ConfigurationManager.AppSettings["storage"] ?? ""}'
 | 
			
		||||
                     AND dmr.`machine_id` ='{ConfigurationManager.AppSettings["machineId"] ?? "DM3"}'   AND oi.`order_date` > '{startDate}'
 | 
			
		||||
                     AND oi.`order_date` < '{endDate}'";
 | 
			
		||||
 | 
			
		||||
            if (!string.IsNullOrEmpty(drug_id))
 | 
			
		||||
            {
 | 
			
		||||
                SQL += " AND ac.drug_id='" + drug_id + "' ";
 | 
			
		||||
            }
 | 
			
		||||
            Report.DetailGrid.Recordset.ConnectionString = gridConnectionString;
 | 
			
		||||
            Report.DetailGrid.Recordset.QuerySQL = SQL;
 | 
			
		||||
 | 
			
		||||
            Report.PrintPreview(true);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        public static void RejectionReport(DateTime? startDate, DateTime? endDate)
 | 
			
		||||
        {
 | 
			
		||||
            // 定义Grid++Report报表主对象
 | 
			
		||||
            GridppReport Report = new GridppReport();
 | 
			
		||||
            string p_startDate = startDate==null? DateTime.Now.ToString("yyyy-MM-dd"): ((DateTime)startDate).ToString("yyyy-MM-dd") ;
 | 
			
		||||
            string p_endDate = endDate == null ? DateTime.Now.AddDays(1).ToString("yyyy-MM-dd") : ((DateTime)endDate).ToString("yyyy-MM-dd");
 | 
			
		||||
            string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM3");
 | 
			
		||||
            string SQL = string.Empty;
 | 
			
		||||
 | 
			
		||||
            Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "use_jiaojie_New.grf");
 | 
			
		||||
            SQL = $@" 
 | 
			
		||||
                    SELECT  ID,DATE_FORMAT(Senddate,'%Y/%m/%d') as SenddateMonthDay,YEAR(Senddate) as DMYear,MONTH(Senddate) DMMonth,DAY(Senddate) DMDay, 0 as TotalBaseNum,
 | 
			
		||||
                    DATE_FORMAT(Senddate,'%Y/%m/%d %H:%i:%s') as Senddate,SendUser as SendUser,receiveuser as ReceiveUser,realnum as SendNum,infactnum as InfactNum,emptynum as EmptyNum,
 | 
			
		||||
                    returnTime as ReturnDate,returnuser as ReturnUser,returnreceiveuser as ReturnReceiveUser, 
 | 
			
		||||
                    IF(adduser is null,'',adduser) as AddUser,IF(addcheckuser is null,'',addcheckuser) as AddCheckUser,DATE_FORMAT(operationtime,'%Y/%m/%d %H:%i:%s') as OperationTime,drugid as drugId,drugname as drugName,drugspec,basenum as TotalNum,drawerno
 | 
			
		||||
                            
 | 
			
		||||
                    from rejection_report ";// -- where DATE_FORMAT(operationtime,'%Y-%m-%d')= '2024-09-19'
 | 
			
		||||
                   //-- GROUP BY Senddate,drugId order by Senddate,drugId";
 | 
			
		||||
            SQL += $" where DATE_FORMAT(Senddate,'%Y-%m-%d')>= '{p_startDate}' and DATE_FORMAT(Senddate,'%Y-%m-%d')<= '{p_endDate}'";
 | 
			
		||||
            SQL += " GROUP BY Senddate,returnTime,drugId order by Senddate,returnTime,drugId";
 | 
			
		||||
             
 | 
			
		||||
            Dictionary<string, List<Dictionary<string, object>>> records = new Dictionary<string, List<Dictionary<string, object>>>();
 | 
			
		||||
            List<Dictionary<string, object>> tableList=SqlSugarHelper.Db.SqlQueryable<dynamic>(SQL).ToDictionaryList();
 | 
			
		||||
            records.Add("Table", tableList);
 | 
			
		||||
            string str=JsonConvert.SerializeObject(records);
 | 
			
		||||
            Report.LoadDataFromXML(str);
 | 
			
		||||
 | 
			
		||||
            Report.PrintPreview(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void AccountNewReport()
 | 
			
		||||
        {
 | 
			
		||||
            // 定义Grid++Report报表主对象
 | 
			
		||||
            GridppReport Report = new GridppReport();
 | 
			
		||||
            string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM1");
 | 
			
		||||
            string SQL = string.Empty;
 | 
			
		||||
 | 
			
		||||
            Report.LoadFromFile(new FileInfo(AppDomain.CurrentDomain.BaseDirectory) + "ReportTemp//" + "Account_Book_New.grf"); 
 | 
			
		||||
 | 
			
		||||
            //SQL = $@"
 | 
			
		||||
            //        SELECT IF(mr.TYPE=1,'入库',IF(mr.TYPE=2,'出库',''))  as operationtype,
 | 
			
		||||
            //        IF(mr.TYPE=1,'麻醉科小药箱交接与使用记录本','住院药房发药清单') as VOUCHER,
 | 
			
		||||
            //        IF(mr.TYPE=1,'麻醉科','住院药房') as department,
 | 
			
		||||
            //        di.Drug_type as Drug_type,
 | 
			
		||||
            //        di.Manufactory AS FACTURE,di.Drug_Name,di.Drug_Spec,db.baseQuantity AS drug_base,mr.drug_id,0 INQUANTITY,0 OUTQUANTITY,0 STOCKQUANTITY,mr.manu_no AS MANUNO, mr.EFF_DATE,
 | 
			
		||||
 | 
			
		||||
            //        'admin' AS SENDUSER,'admin' AS SENDCHECKUSER,'admin' AS RECEIVEUSER,'admin' AS RECEIVECHECKUSER
 | 
			
		||||
            //         from dm_machine_record mr inner join drug_info di on mr.drug_id=di.drug_id LEFT JOIN drug_base db on di.drug_id=db.drugid 
 | 
			
		||||
            //         INNER join user_list ul on mr.operator=ul.id
 | 
			
		||||
            //         WHERE mr.machine_id='DM3' and type in(1,2)  ORDER BY  mr.TYPE ,voucher desc,department desc,Drug_type desc,di.Manufactory";
 | 
			
		||||
 | 
			
		||||
            SQL = $@"SELECT YEAR(create_date) AS DMYear, IF(ab.type=1,'入库','出库') as operationtype,if(ab.type=1,'住院药房发药清单','麻醉科小药箱交接与使用记录本') as VOUCHER,IF(ab.TYPE=1,'住院药房','麻醉科') as department,ab.Manu_No AS MANUNO,ab.eff_date AS EFF_DATE,
 | 
			
		||||
                    di.Drug_type as Drug_type,di.Manufactory AS FACTURE,di.Drug_Name,di.Drug_Spec,db.baseQuantity AS drug_base,ab.drug_id,if(ab.Type=1,sum(ab.add_quantity),0) as INQUANTITY,if(ab.type=2,sum(ab.out_quantity),0) as OUTQUANTITY,
 | 
			
		||||
                    (SELECT manu_stock from account_book_g2 as  stb where stb.drug_id=ab.drug_id and stb.manu_no=ab.manu_no and stb.eff_date=ab.eff_date and stb.type=3  and stb.create_date=ab.create_date ORDER BY create_time desc LIMIT 1) as STOCKQUANTITY,
 | 
			
		||||
                    IF(ab.type=1,CONCAT(u1.user_name,u2.user_name),'') as SENDUSER,IF(ab.type=2,CONCAT(u1.user_name,u2.user_name),'') as RECEIVEUSER
 | 
			
		||||
                    from account_book_g2 ab inner join drug_info di on ab.drug_id=di.drug_id left join drug_base db on  di.drug_id=db.drugid 
 | 
			
		||||
                    LEFT JOIN user_list u1 on ab.user_id1=u1.id LEFT JOIN user_list u2 on ab.user_id2=u2.id 
 | 
			
		||||
                    where type in(1,2) and ab.machine_id='DM3' and di.dosage='注射剂'   GROUP BY ab.drug_id,ab.Manu_No,ab.eff_date 
 | 
			
		||||
                    ORDER BY  ab.TYPE desc ,voucher desc,department desc,Drug_type desc,di.Manufactory";
 | 
			
		||||
 | 
			
		||||
            Dictionary<string, List<Dictionary<string, object>>> records = new Dictionary<string, List<Dictionary<string, object>>>();
 | 
			
		||||
            List<Dictionary<string, object>> tableList = SqlSugarHelper.Db.SqlQueryable<dynamic>(SQL).ToDictionaryList();
 | 
			
		||||
            records.Add("Table", tableList);
 | 
			
		||||
            string str = JsonConvert.SerializeObject(records);
 | 
			
		||||
            Report.LoadDataFromXML(str);
 | 
			
		||||
 | 
			
		||||
            Report.PrintPreview(true);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,389 @@
 | 
			
		|||
{
 | 
			
		||||
	"Version":"6.8.1.1",
 | 
			
		||||
	"Font":{
 | 
			
		||||
		"Name":"宋体",
 | 
			
		||||
		"Size":105000,
 | 
			
		||||
		"Weight":400,
 | 
			
		||||
		"Charset":134
 | 
			
		||||
	},
 | 
			
		||||
	"Printer":{
 | 
			
		||||
		"Oriention":"Landscape"
 | 
			
		||||
	},
 | 
			
		||||
	"DetailGrid":{
 | 
			
		||||
		"Recordset":{
 | 
			
		||||
			"Field":[
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"操作类型",
 | 
			
		||||
					"DBFieldName":"operationtype"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"药品类型",
 | 
			
		||||
					"DBFieldName":"Drug_type"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"生产厂家",
 | 
			
		||||
					"DBFieldName":"FACTURE"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"药品id",
 | 
			
		||||
					"DBFieldName":"DRUG_ID"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"品名",
 | 
			
		||||
					"DBFieldName":"DRUG_NAME"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"规格",
 | 
			
		||||
					"DBFieldName":"Drug_Spec"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"基数",
 | 
			
		||||
					"DBFieldName":"drug_base"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"入库数量",
 | 
			
		||||
					"DBFieldName":"INQUANTITY"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"出库数量",
 | 
			
		||||
					"DBFieldName":"OUTQUANTITY"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"结余数量",
 | 
			
		||||
					"DBFieldName":"STOCKQUANTITY"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"批号",
 | 
			
		||||
					"DBFieldName":"MANUNO"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"有效期",
 | 
			
		||||
					"DBFieldName":"EFF_DATE"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"发药/核对者1",
 | 
			
		||||
					"DBFieldName":"SENDUSER"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"领药/核对者2",
 | 
			
		||||
					"DBFieldName":"RECEIVEUSER"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"部门",
 | 
			
		||||
					"DBFieldName":"department"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"凭证号",
 | 
			
		||||
					"DBFieldName":"VOUCHER"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"年份",
 | 
			
		||||
					"DBFieldName":"DMYear"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"Column":[
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column1"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column2"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column3"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column4"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column5"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column6"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column7",
 | 
			
		||||
				"Width":3.04271
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column8"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column9"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column10"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column11"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column12"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column13"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column14"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column15"
 | 
			
		||||
			}
 | 
			
		||||
		],
 | 
			
		||||
		"ColumnContent":{
 | 
			
		||||
			"Height":1.79917,
 | 
			
		||||
			"ColumnContentCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column1",
 | 
			
		||||
					"TextAlign":"TopLeft",
 | 
			
		||||
					"ShrinkFontToFit":true,
 | 
			
		||||
					"DataField":"操作类型"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column2",
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"TopLeft",
 | 
			
		||||
					"DataField":"凭证号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column3",
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"TopLeft",
 | 
			
		||||
					"DataField":"部门"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column4",
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"ShrinkFontToFit":true,
 | 
			
		||||
					"DataField":"药品类型"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column5",
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"DataField":"生产厂家"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column6",
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"DataField":"品名"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column7",
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"DataField":"规格"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column8",
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"DataField":"基数"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column9",
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"DataField":"入库数量"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column10",
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"DataField":"出库数量"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column11",
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"DataField":"结余数量"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column12",
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"DataField":"批号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column13",
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"DataField":"有效期"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column14",
 | 
			
		||||
					"EndEllipsis":true,
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"DataField":"发药/核对者1"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column15",
 | 
			
		||||
					"EndEllipsis":true,
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"DataField":"领药/核对者2"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"ColumnTitle":{
 | 
			
		||||
			"Height":1.79917,
 | 
			
		||||
			"ColumnTitleCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":true,
 | 
			
		||||
					"Name":"Column16",
 | 
			
		||||
					"ColumnTitleCell":[
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column1",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"入(出)\r\n库日期"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column2",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"入(出)\r\n库凭证号"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column3",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"入(出)\r\n部门"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column4",
 | 
			
		||||
							"TextAlign":"BottomCenter"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column5",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"生产厂家"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column6",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"品名"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column7",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"规格"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column8",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"基数"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column9",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"入库数量"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column10",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"出库数量"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column11",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"结余数量"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column12",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"批号"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column13",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"有效期"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column14",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"发药/\r\n核对者1"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":false,
 | 
			
		||||
							"Column":"Column15",
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"领药/\r\n核对者2"
 | 
			
		||||
						}
 | 
			
		||||
					],
 | 
			
		||||
					"Text":"使用部门:麻醉科    品名:见下表   规格:见下表   剂型:注射剂   单位:支   生产厂家:见下表"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"Group":[
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Group1",
 | 
			
		||||
				"ByFields":"操作类型",
 | 
			
		||||
				"GroupHeader":{
 | 
			
		||||
					"OccupyColumn":true,
 | 
			
		||||
					"OccupiedColumns":"Column1;Column2;Column3;Column14;Column15"
 | 
			
		||||
				},
 | 
			
		||||
				"GroupFooter":{
 | 
			
		||||
					"Visible":false,
 | 
			
		||||
					"Height":0,
 | 
			
		||||
					"PrintGridBorder":false
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Group2",
 | 
			
		||||
				"ByFields":"药品类型",
 | 
			
		||||
				"GroupHeader":{
 | 
			
		||||
					"OccupyColumn":true,
 | 
			
		||||
					"OccupiedColumns":"Column4"
 | 
			
		||||
				},
 | 
			
		||||
				"GroupFooter":{
 | 
			
		||||
					"Visible":false,
 | 
			
		||||
					"Height":0,
 | 
			
		||||
					"PrintGridBorder":false
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Group3",
 | 
			
		||||
				"ByFields":"生产厂家",
 | 
			
		||||
				"GroupHeader":{
 | 
			
		||||
					"OccupyColumn":true,
 | 
			
		||||
					"OccupiedColumns":"Column5",
 | 
			
		||||
					"VAlign":"Middle"
 | 
			
		||||
				},
 | 
			
		||||
				"GroupFooter":{
 | 
			
		||||
					"Height":0
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		]
 | 
			
		||||
	},
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"ReportHeader1",
 | 
			
		||||
			"Height":2,
 | 
			
		||||
			"Control":[
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"MemoBox",
 | 
			
		||||
					"Name":"MemoBox1",
 | 
			
		||||
					"Dock":"Fill",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":262500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"湘乡市人民医院麻醉科麻醉、精神药品专用账册([#年份#])年"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		}
 | 
			
		||||
	]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,432 @@
 | 
			
		|||
{
 | 
			
		||||
	"Version":"6.3.0.1",
 | 
			
		||||
	"Font":{
 | 
			
		||||
		"Name":"宋体",
 | 
			
		||||
		"Size":105000,
 | 
			
		||||
		"Weight":400,
 | 
			
		||||
		"Charset":134
 | 
			
		||||
	},
 | 
			
		||||
	"Printer":{
 | 
			
		||||
		"Oriention":"Landscape"
 | 
			
		||||
	},
 | 
			
		||||
	"DetailGrid":{
 | 
			
		||||
		"CenterView":true,
 | 
			
		||||
		"PrintAdaptMethod":"ResizeToFit",
 | 
			
		||||
		"AppendBlankRow":true,
 | 
			
		||||
		"Recordset":{
 | 
			
		||||
			"QuerySQL":"SELECT \r\n  cl.`row_no` AS drawerNo,\r\n  cl.`col_no` AS colNo,\r\n  cl.`quantity` AS quantity,\r\n  cl.`manu_no` AS manuNo,\r\n  cl.`eff_date` AS effDate,\r\n  di.`drug_name` AS drugName,\r\n  di.`drug_spec` AS drugSpec,\r\n  di.`pack_unit` AS packUnit,\r\n  di.`manufactory` AS manuFactory,\r\n  di.`max_stock` AS baseQuantity,\r\n  cl.`drug_id` AS drugId\r\nFROM\r\n  channel_stock cl\r\nINNER JOIN drug_info di ON di.`drug_id` = cl.`drug_id`\r\nWHERE cl.`machine_id` =  :machine_id\r\n AND cl.`drawer_type` = 1\r\n ORDER BY cl.`drug_id`",
 | 
			
		||||
			"Field":[
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"Order_Date"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"userDeptName",
 | 
			
		||||
					"Format":"0"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"drugName"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"Quantity",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"Manu_No"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"retuenUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"returnReviewer",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"distoryUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"distoryRevierer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"drugSpec"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"dosage"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"big_unit"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"drug_id"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"needReturnEmptyCount"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"Column":[
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"日期",
 | 
			
		||||
				"Width":3.175
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"科室/患者",
 | 
			
		||||
				"Width":5.3975
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Dept_Name",
 | 
			
		||||
				"Width":1.61396
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"批号",
 | 
			
		||||
				"Width":2.98979
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"空安瓿回收人",
 | 
			
		||||
				"Width":2.98979
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"空安瓿交回人",
 | 
			
		||||
				"Width":2.99
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"数量",
 | 
			
		||||
				"Width":2
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"空安瓿销毁执行人",
 | 
			
		||||
				"Width":2.98979
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"空安瓿销毁审核人",
 | 
			
		||||
				"Width":2.99
 | 
			
		||||
			}
 | 
			
		||||
		],
 | 
			
		||||
		"ColumnContent":{
 | 
			
		||||
			"Height":0.79375,
 | 
			
		||||
			"ColumnContentCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"日期",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"Order_Date"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"科室/患者",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"userDeptName"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Dept_Name",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"Quantity"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"批号",
 | 
			
		||||
					"DataField":"Manu_No"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"空安瓿回收人",
 | 
			
		||||
					"DataField":"retuenUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"空安瓿交回人",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"returnReviewer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"数量",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"distoryUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"空安瓿销毁执行人",
 | 
			
		||||
					"DataField":"distoryRevierer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"空安瓿销毁审核人",
 | 
			
		||||
					"DataField":"needReturnEmptyCount"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"ColumnTitle":{
 | 
			
		||||
			"Height":1.7,
 | 
			
		||||
			"RepeatStyle":"OnGroupHeaderPage",
 | 
			
		||||
			"ColumnTitleCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"日期",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":142500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"日期"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"科室/患者",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":142500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"科室/患者"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"Dept_Name",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":142500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"数量"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"批号",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":142500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"批号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"空安瓿回收人",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":142500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"空安瓿\r\n回收人"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"空安瓿交回人",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":142500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"空安瓿\r\n交回人"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"数量",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":142500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"空安瓿\r\n销毁\r\n执行人"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"空安瓿销毁执行人",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":142500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"空安瓿\r\n销毁\r\n审核人"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"空安瓿销毁审核人",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":142500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"待回收\r\n空安瓿\r\n数量"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"Group":[
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Group1",
 | 
			
		||||
				"ByFields":"drug_id",
 | 
			
		||||
				"GroupHeader":{
 | 
			
		||||
					"PrintGridBorder":false,
 | 
			
		||||
					"RepeatOnPage":true,
 | 
			
		||||
					"Control":[
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox16",
 | 
			
		||||
							"Top":0.0529167,
 | 
			
		||||
							"Width":1.19063,
 | 
			
		||||
							"Height":0.978958,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"Text":"品名:"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"FieldBox",
 | 
			
		||||
							"Name":"FieldBox7",
 | 
			
		||||
							"Left":1.16417,
 | 
			
		||||
							"Top":0.0529167,
 | 
			
		||||
							"Width":5.63563,
 | 
			
		||||
							"Height":0.978958,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"DataField":"drugName"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox17",
 | 
			
		||||
							"Left":6.93208,
 | 
			
		||||
							"Top":0.0529167,
 | 
			
		||||
							"Width":1.11125,
 | 
			
		||||
							"Height":0.978958,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"Text":"剂型:"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"FieldBox",
 | 
			
		||||
							"Name":"FieldBox8",
 | 
			
		||||
							"Left":8.01688,
 | 
			
		||||
							"Top":0.0529167,
 | 
			
		||||
							"Width":3.175,
 | 
			
		||||
							"Height":0.978958,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"DataField":"dosage"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox18",
 | 
			
		||||
							"Left":11.5888,
 | 
			
		||||
							"Top":0.0529167,
 | 
			
		||||
							"Width":1.21708,
 | 
			
		||||
							"Height":0.978958,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"Text":"规格:"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"FieldBox",
 | 
			
		||||
							"Name":"FieldBox10",
 | 
			
		||||
							"Left":16.5365,
 | 
			
		||||
							"Top":0.0529167,
 | 
			
		||||
							"Width":2.83104,
 | 
			
		||||
							"Height":0.978958,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"DataField":"drugSpec"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox20",
 | 
			
		||||
							"Left":19.7379,
 | 
			
		||||
							"Top":0.0529167,
 | 
			
		||||
							"Width":2.01083,
 | 
			
		||||
							"Height":0.978958,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"Text":"单位:"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"FieldBox",
 | 
			
		||||
							"Name":"FieldBox11",
 | 
			
		||||
							"Left":21.7223,
 | 
			
		||||
							"Top":0.05,
 | 
			
		||||
							"Width":5.92667,
 | 
			
		||||
							"Height":0.978958,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"DataField":"big_unit"
 | 
			
		||||
						}
 | 
			
		||||
					],
 | 
			
		||||
					"NewPageColumn":"Before"
 | 
			
		||||
				},
 | 
			
		||||
				"GroupFooter":{
 | 
			
		||||
					"Height":0.635
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		]
 | 
			
		||||
	},
 | 
			
		||||
	"Parameter":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"machine_id",
 | 
			
		||||
			"Value":"DM3"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"ReportHeader1",
 | 
			
		||||
			"Height":2.40771,
 | 
			
		||||
			"Control":[
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"StaticBox",
 | 
			
		||||
					"Name":"StaticBox1",
 | 
			
		||||
					"Center":"Horizontal",
 | 
			
		||||
					"Left":8.99583,
 | 
			
		||||
					"Top":0.608542,
 | 
			
		||||
					"Width":9.18104,
 | 
			
		||||
					"Height":1.21708,
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":217500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"回收销毁记录"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"RepeatOnPage":true
 | 
			
		||||
		}
 | 
			
		||||
	]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
{
 | 
			
		||||
	"Version":"6.3.0.1",
 | 
			
		||||
	"Version":"6.8.1.1",
 | 
			
		||||
	"Font":{
 | 
			
		||||
		"Name":"宋体",
 | 
			
		||||
		"Size":105000,
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +75,7 @@
 | 
			
		|||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"单位",
 | 
			
		||||
					"DBFieldName":"packUnit"
 | 
			
		||||
					"DBFieldName":"bigUnit"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"剂型",
 | 
			
		||||
| 
						 | 
				
			
			@ -100,10 +100,20 @@
 | 
			
		|||
					"Type":"Binary"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"drugId"
 | 
			
		||||
					"Name":"drugId",
 | 
			
		||||
					"DBFieldName":"drug_Id"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"Field1"
 | 
			
		||||
					"Name":"凭证号",
 | 
			
		||||
					"DBFieldName":"invoiceId"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"供应单位",
 | 
			
		||||
					"DBFieldName":"supplierDept"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"领用部门",
 | 
			
		||||
					"DBFieldName":"receiveDept"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
| 
						 | 
				
			
			@ -113,7 +123,7 @@
 | 
			
		|||
				"Width":1.77271
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"操作类型",
 | 
			
		||||
				"Name":"凭证号",
 | 
			
		||||
				"Width":2.19604
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			@ -158,20 +168,14 @@
 | 
			
		|||
			"ColumnContentCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"日期",
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"ShrinkFontToFit":true,
 | 
			
		||||
					"DataField":"日期"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"操作类型",
 | 
			
		||||
					"FreeCell":true,
 | 
			
		||||
					"Control":[
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox10",
 | 
			
		||||
							"Dock":"Fill",
 | 
			
		||||
							"TextAlign":"MiddleCenter"
 | 
			
		||||
						}
 | 
			
		||||
					]
 | 
			
		||||
					"Column":"凭证号",
 | 
			
		||||
					"DataField":"凭证号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"批号",
 | 
			
		||||
| 
						 | 
				
			
			@ -229,11 +233,11 @@
 | 
			
		|||
					"FreeCell":true,
 | 
			
		||||
					"Control":[
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox6",
 | 
			
		||||
							"Type":"FieldBox",
 | 
			
		||||
							"Name":"FieldBox14",
 | 
			
		||||
							"Dock":"Fill",
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"药库"
 | 
			
		||||
							"DataField":"供应单位"
 | 
			
		||||
						}
 | 
			
		||||
					]
 | 
			
		||||
				},
 | 
			
		||||
| 
						 | 
				
			
			@ -242,11 +246,11 @@
 | 
			
		|||
					"FreeCell":true,
 | 
			
		||||
					"Control":[
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox7",
 | 
			
		||||
							"Type":"FieldBox",
 | 
			
		||||
							"Name":"FieldBox15",
 | 
			
		||||
							"Dock":"Fill",
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"门诊药房"
 | 
			
		||||
							"DataField":"领用部门"
 | 
			
		||||
						}
 | 
			
		||||
					]
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -270,7 +274,7 @@
 | 
			
		|||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"操作类型",
 | 
			
		||||
					"Column":"凭证号",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":105000,
 | 
			
		||||
| 
						 | 
				
			
			@ -395,6 +399,7 @@
 | 
			
		|||
				"Name":"Group1",
 | 
			
		||||
				"ByFields":"drugId",
 | 
			
		||||
				"GroupHeader":{
 | 
			
		||||
					"NewPage":"Before",
 | 
			
		||||
					"PrintGridBorder":false,
 | 
			
		||||
					"RepeatOnPage":true,
 | 
			
		||||
					"Control":[
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,345 @@
 | 
			
		|||
{
 | 
			
		||||
	"Version":"6.3.0.1",
 | 
			
		||||
	"Font":{
 | 
			
		||||
		"Name":"宋体",
 | 
			
		||||
		"Size":105000,
 | 
			
		||||
		"Weight":400,
 | 
			
		||||
		"Charset":134
 | 
			
		||||
	},
 | 
			
		||||
	"Printer":{
 | 
			
		||||
		"Oriention":"Landscape",
 | 
			
		||||
		"LeftMargin":1,
 | 
			
		||||
		"TopMargin":1.4287,
 | 
			
		||||
		"RightMargin":1,
 | 
			
		||||
		"BottomMargin":1.8
 | 
			
		||||
	},
 | 
			
		||||
	"DetailGrid":{
 | 
			
		||||
		"CenterView":true,
 | 
			
		||||
		"Recordset":{
 | 
			
		||||
			"Field":[
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"日期",
 | 
			
		||||
					"Type":"DateTime",
 | 
			
		||||
					"Format":"yyyy/MM/dd",
 | 
			
		||||
					"DBFieldName":"opt_date"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"品名",
 | 
			
		||||
					"DBFieldName":"drug_name"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"规格",
 | 
			
		||||
					"DBFieldName":"drug_spec"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"上班结存数",
 | 
			
		||||
					"Type":"Integer",
 | 
			
		||||
					"DBFieldName":"beforenum"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"领用数",
 | 
			
		||||
					"Type":"Integer",
 | 
			
		||||
					"DBFieldName":"getnum"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"消耗数",
 | 
			
		||||
					"Type":"Integer",
 | 
			
		||||
					"DBFieldName":"usenum"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"批号",
 | 
			
		||||
					"DBFieldName":"manu_no"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"余",
 | 
			
		||||
					"Type":"Integer",
 | 
			
		||||
					"DBFieldName":"surplus"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"交班人",
 | 
			
		||||
					"DBFieldName":"fromoperator"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"接班人",
 | 
			
		||||
					"DBFieldName":"tooperator"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"Column":[
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"日期",
 | 
			
		||||
				"Width":2.56646
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"品名",
 | 
			
		||||
				"Width":4.60375
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"规格",
 | 
			
		||||
				"Width":2.59292
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"上班结存数",
 | 
			
		||||
				"Width":1.4
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"领用数",
 | 
			
		||||
				"Width":1.4
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"消耗数",
 | 
			
		||||
				"Width":1.4
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"批号",
 | 
			
		||||
				"Width":1.98438
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"余",
 | 
			
		||||
				"Width":0.608542
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"交班人",
 | 
			
		||||
				"Width":2.80458
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"接班人",
 | 
			
		||||
				"Width":2.35479
 | 
			
		||||
			}
 | 
			
		||||
		],
 | 
			
		||||
		"ColumnContent":{
 | 
			
		||||
			"Height":0.85,
 | 
			
		||||
			"ColumnContentCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"日期",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"日期"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"品名",
 | 
			
		||||
					"DataField":"品名"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"规格",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"规格"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"上班结存数",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"上班结存数"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"领用数",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"领用数"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"消耗数",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"消耗数"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"批号",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"批号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"余",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"余"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"交班人",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"交班人"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"接班人",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"接班人"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"ColumnTitle":{
 | 
			
		||||
			"Height":1.00542,
 | 
			
		||||
			"RepeatStyle":"OnPage",
 | 
			
		||||
			"ColumnTitleCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"日期",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":105000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"日期"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"品名",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":105000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"品名"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"规格",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":105000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"规格"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"上班结存数",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":105000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"上班\r\n结存数"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"领用数",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":105000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"领用数"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"消耗数",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":105000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"WordWrap":true,
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"消耗数"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"批号",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":105000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"批号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"余",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":105000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"余"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"交班人",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":105000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"交班人"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"接班人",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":105000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"接班人"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"Group":[
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Group1",
 | 
			
		||||
				"ByFields":"日期",
 | 
			
		||||
				"GroupHeader":{
 | 
			
		||||
					"Height":0,
 | 
			
		||||
					"PrintGridBorder":false,
 | 
			
		||||
					"NewPageColumn":"Before"
 | 
			
		||||
				},
 | 
			
		||||
				"GroupFooter":{
 | 
			
		||||
					"Visible":false,
 | 
			
		||||
					"PrintGridBorder":false
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		]
 | 
			
		||||
	},
 | 
			
		||||
	"Parameter":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"machine_id"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"startDate",
 | 
			
		||||
			"DataType":"DateTime"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"endDate",
 | 
			
		||||
			"DataType":"DateTime"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"ReportHeader1",
 | 
			
		||||
			"Height":1.79917,
 | 
			
		||||
			"Control":[
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"MemoBox",
 | 
			
		||||
					"Name":"MemoBox1",
 | 
			
		||||
					"Dock":"Fill",
 | 
			
		||||
					"Center":"Both",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":262500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"交接班记录"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"RepeatOnPage":true
 | 
			
		||||
		}
 | 
			
		||||
	]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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":[
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,633 @@
 | 
			
		|||
{
 | 
			
		||||
	"Version":"6.3.0.1",
 | 
			
		||||
	"Font":{
 | 
			
		||||
		"Name":"宋体",
 | 
			
		||||
		"Size":105000,
 | 
			
		||||
		"Weight":400,
 | 
			
		||||
		"Charset":134
 | 
			
		||||
	},
 | 
			
		||||
	"Printer":{
 | 
			
		||||
		"Oriention":"Landscape",
 | 
			
		||||
		"TopMargin":0.3175,
 | 
			
		||||
		"RightMargin":0.8996,
 | 
			
		||||
		"BottomMargin":0.3969
 | 
			
		||||
	},
 | 
			
		||||
	"DetailGrid":{
 | 
			
		||||
		"CenterView":true,
 | 
			
		||||
		"AppendBlankRow":true,
 | 
			
		||||
		"Recordset":{
 | 
			
		||||
			"QuerySQL":"SELECT \r\n  dmr.`drawer_no` AS drawerNo,\r\n  dmr.`col_no` AS colNo,\r\n  dmr.`type` AS `type`,\r\n  dmr.`quantity` AS quantity,\r\n  dmr.`manu_no` AS manuNo,\r\n  dmr.`eff_date` AS effDate,\r\n  dmr.`operation_time` AS operationTime,\r\n  di.`drug_name` AS drugName,\r\n  di.`drug_spec` AS drugSpec,\r\n  di.`pack_unit` AS packUnit,\r\n  di.`manufactory` AS manuFactory,\r\n  di.`max_stock` AS baseQuantity,\r\n  dmr.`drug_id` AS drugId,\r\n  ul.`user_name` AS nickname\r\nFROM\r\n  dm_machine_record dmr\r\nLEFT JOIN drug_info di ON di.`drug_id` = dmr.`drug_id`\r\nLEFT JOIN user_list ul ON ul.`id` = dmr.`Operator`\r\nWHERE dmr.`type` = 2 \r\n AND dmr.`machine_id` = :machine_id\r\n AND dmr.`operation_time` > :startDate\r\n AND dmr.`operation_time` < :endDate",
 | 
			
		||||
			"Field":[
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"患者姓名",
 | 
			
		||||
					"DBFieldName":"p_name"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"性别",
 | 
			
		||||
					"DBFieldName":"sex"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"年龄",
 | 
			
		||||
					"Type":"Integer",
 | 
			
		||||
					"DBFieldName":"age"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"身份证号",
 | 
			
		||||
					"DBFieldName":"id_number"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"病历号",
 | 
			
		||||
					"DBFieldName":"patientno"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"疾病名称",
 | 
			
		||||
					"Format":"yyyy/MM/dd",
 | 
			
		||||
					"DBFieldName":"disease"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"药品ID",
 | 
			
		||||
					"DBFieldName":"drugId"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"数量",
 | 
			
		||||
					"Type":"Integer",
 | 
			
		||||
					"DBFieldName":"quantity"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"处方医生",
 | 
			
		||||
					"DBFieldName":"doctor_name"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"处方编号",
 | 
			
		||||
					"DBFieldName":"order_no"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"处方日期",
 | 
			
		||||
					"DBFieldName":"order_date"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"发药人",
 | 
			
		||||
					"DBFieldName":"nickname"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"复核人",
 | 
			
		||||
					"DBFieldName":"reviewNickname"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"批号",
 | 
			
		||||
					"DBFieldName":"manuNo"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"麻醉卡号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"代办人姓名"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"代办人身份证号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"编号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"药品名称",
 | 
			
		||||
					"DBFieldName":"drugName"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"规格",
 | 
			
		||||
					"DBFieldName":"drugSpec"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"单位",
 | 
			
		||||
					"DBFieldName":"packUnit"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"Column":[
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"患者姓名",
 | 
			
		||||
				"Width":2.38125
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"性别",
 | 
			
		||||
				"Width":1.00542
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"年龄",
 | 
			
		||||
				"Width":0.978958
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"身份证号",
 | 
			
		||||
				"Width":5.00063
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"病历号",
 | 
			
		||||
				"Width":2.77813
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"疾病名称",
 | 
			
		||||
				"Width":3.01625
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"药品ID",
 | 
			
		||||
				"Width":2.59292
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"数量",
 | 
			
		||||
				"Width":1.69333
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"处方医生",
 | 
			
		||||
				"Width":2.32833
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"处方编号",
 | 
			
		||||
				"Width":2.80458
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"发药人",
 | 
			
		||||
				"Width":3.20146
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"复核人",
 | 
			
		||||
				"Width":1.69333
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"批号",
 | 
			
		||||
				"Width":1.69333
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"麻醉卡号",
 | 
			
		||||
				"Width":3.59833
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"代办人姓名",
 | 
			
		||||
				"Width":1.69333
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"代办人身份证号",
 | 
			
		||||
				"Width":1.69333
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column10",
 | 
			
		||||
				"Width":2.14313
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column11",
 | 
			
		||||
				"Width":1.69333
 | 
			
		||||
			}
 | 
			
		||||
		],
 | 
			
		||||
		"ColumnContent":{
 | 
			
		||||
			"Height":1.00542,
 | 
			
		||||
			"ColumnContentCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"患者姓名",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"患者姓名"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"性别",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"性别"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"年龄",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"年龄"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"身份证号",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"身份证号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"病历号",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"病历号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"疾病名称",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"疾病名称"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"药品ID",
 | 
			
		||||
					"DataField":"药品ID"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"数量",
 | 
			
		||||
					"DataField":"数量"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"处方医生",
 | 
			
		||||
					"DataField":"处方医生"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"处方编号",
 | 
			
		||||
					"DataField":"处方编号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"发药人",
 | 
			
		||||
					"DataField":"处方日期"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"复核人",
 | 
			
		||||
					"DataField":"发药人"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"批号",
 | 
			
		||||
					"DataField":"复核人"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"麻醉卡号",
 | 
			
		||||
					"DataField":"批号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"代办人姓名",
 | 
			
		||||
					"DataField":"麻醉卡号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"代办人身份证号",
 | 
			
		||||
					"DataField":"代办人姓名"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column10",
 | 
			
		||||
					"DataField":"代办人身份证号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column11"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"ColumnTitle":{
 | 
			
		||||
			"Height":1.40229,
 | 
			
		||||
			"RepeatStyle":"OnGroupHeaderPage",
 | 
			
		||||
			"ColumnTitleCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"患者姓名",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"患者\r\n姓名"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"性别",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"性\r\n别"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"年龄",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"年\r\n龄"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"身份证号",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"身份证号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"病历号",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"病历号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"疾病名称",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"疾病名称"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"药品ID",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"药品ID"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"数量",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"数\r\n量"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"处方医生",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"处方\r\n医生"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"处方编号",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"处方编号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"发药人",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"处方日期"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"复核人",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"发药人"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"批号",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"复核人"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"麻醉卡号",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"批号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"代办人姓名",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"麻醉卡号"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"代办人身份证号",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"代办人\r\n姓名"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"Column10",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"代办人\r\n身份证"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"Column11",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":120000,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"编号"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"Group":[
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Group1",
 | 
			
		||||
				"ByFields":"药品ID",
 | 
			
		||||
				"GroupHeader":{
 | 
			
		||||
					"PrintGridBorder":false,
 | 
			
		||||
					"RepeatOnPage":true,
 | 
			
		||||
					"Control":[
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox16",
 | 
			
		||||
							"Top":0.0529167,
 | 
			
		||||
							"Width":1.19063,
 | 
			
		||||
							"Height":0.978958,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"Text":"药品名称:"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"FieldBox",
 | 
			
		||||
							"Name":"FieldBox7",
 | 
			
		||||
							"Left":1.16417,
 | 
			
		||||
							"Top":0.0529167,
 | 
			
		||||
							"Width":5.63563,
 | 
			
		||||
							"Height":0.978958,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"DataField":"药品名称"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox17",
 | 
			
		||||
							"Left":6.93208,
 | 
			
		||||
							"Top":0.0529167,
 | 
			
		||||
							"Width":1.11125,
 | 
			
		||||
							"Height":0.978958,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"Text":"规格:"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"FieldBox",
 | 
			
		||||
							"Name":"FieldBox8",
 | 
			
		||||
							"Left":8.01688,
 | 
			
		||||
							"Top":0.0529167,
 | 
			
		||||
							"Width":3.175,
 | 
			
		||||
							"Height":0.978958,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"DataField":"规格"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox15",
 | 
			
		||||
							"Left":11.59,
 | 
			
		||||
							"Top":0.05,
 | 
			
		||||
							"Width":2.01083,
 | 
			
		||||
							"Height":0.79375,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"Text":"单位:"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"FieldBox",
 | 
			
		||||
							"Name":"FieldBox9",
 | 
			
		||||
							"Left":12.78,
 | 
			
		||||
							"Top":0.05,
 | 
			
		||||
							"Width":1.88,
 | 
			
		||||
							"Height":0.98,
 | 
			
		||||
							"Font":{
 | 
			
		||||
								"Name":"宋体",
 | 
			
		||||
								"Size":105000,
 | 
			
		||||
								"Bold":true,
 | 
			
		||||
								"Charset":134
 | 
			
		||||
							},
 | 
			
		||||
							"DataField":"单位"
 | 
			
		||||
						}
 | 
			
		||||
					],
 | 
			
		||||
					"NewPageColumn":"Before"
 | 
			
		||||
				},
 | 
			
		||||
				"GroupFooter":{
 | 
			
		||||
					"Height":0.635
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		]
 | 
			
		||||
	},
 | 
			
		||||
	"Parameter":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"startDate",
 | 
			
		||||
			"DataType":"DateTime",
 | 
			
		||||
			"Format":"yyyy-MM-dd hh:mm:ss",
 | 
			
		||||
			"Value":"2023/1/1"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"endDate",
 | 
			
		||||
			"DataType":"DateTime",
 | 
			
		||||
			"Format":"yyyy-MM-dd hh:mm:ss",
 | 
			
		||||
			"Value":"2023/4/28 23:59:59"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"machine_id",
 | 
			
		||||
			"Value":"DM3"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"ReportHeader1",
 | 
			
		||||
			"Height":1.79917,
 | 
			
		||||
			"Control":[
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"MemoBox",
 | 
			
		||||
					"Name":"MemoBox2",
 | 
			
		||||
					"Left":7.59354,
 | 
			
		||||
					"Top":0.211667,
 | 
			
		||||
					"Width":5.60917,
 | 
			
		||||
					"Height":1.19063,
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":217500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"发药登记表"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"RepeatOnPage":true
 | 
			
		||||
		}
 | 
			
		||||
	]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -314,7 +314,7 @@
 | 
			
		|||
	"Parameter":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"machine_id",
 | 
			
		||||
			"Value":"DM1"
 | 
			
		||||
			"Value":"DM3"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,572 @@
 | 
			
		|||
{
 | 
			
		||||
	"Version":"6.8.1.1",
 | 
			
		||||
	"Font":{
 | 
			
		||||
		"Name":"宋体",
 | 
			
		||||
		"Size":105000,
 | 
			
		||||
		"Weight":400,
 | 
			
		||||
		"Charset":134
 | 
			
		||||
	},
 | 
			
		||||
	"Printer":{
 | 
			
		||||
		"Oriention":"Landscape",
 | 
			
		||||
		"LeftMargin":1,
 | 
			
		||||
		"TopMargin":1.42875,
 | 
			
		||||
		"RightMargin":1,
 | 
			
		||||
		"BottomMargin":1.8
 | 
			
		||||
	},
 | 
			
		||||
	"DetailGrid":{
 | 
			
		||||
		"CenterView":true,
 | 
			
		||||
		"IsCrossTab":true,
 | 
			
		||||
		"FixCols":2,
 | 
			
		||||
		"AppendBlankRow":true,
 | 
			
		||||
		"Recordset":{
 | 
			
		||||
			"Field":[
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"DMYear",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"DMMonth",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"DMDay",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"TotalNum"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"Senddate",
 | 
			
		||||
					"Type":"DateTime",
 | 
			
		||||
					"Format":"HH:mm"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"SendUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"ReceiveUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"SendNum",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"InfactNum",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"EmptyNum",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"ReturnDate",
 | 
			
		||||
					"Format":"HH:mm"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"ReturnUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"ReturnReceiveUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"AddUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"AddCheckUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"drugId"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"drugName"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"drugSpec"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"drawerno",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"Column":[
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column4"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column6"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column31"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column14"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column19"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column20"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column36"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column23"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column24"
 | 
			
		||||
			}
 | 
			
		||||
		],
 | 
			
		||||
		"ColumnContent":{
 | 
			
		||||
			"Height":2.19604,
 | 
			
		||||
			"ColumnContentCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column4",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"Senddate"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column6",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"SendUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column31",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"ReceiveUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column14",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"SendNum"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column19",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"InfactNum"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column20",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"EmptyNum"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column36",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"ReturnDate"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column23",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"ReturnUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column24",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"ReturnReceiveUser"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"ColumnTitle":{
 | 
			
		||||
			"Height":4.10104,
 | 
			
		||||
			"RepeatStyle":"OnGroupHeaderPage",
 | 
			
		||||
			"ColumnTitleCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":true,
 | 
			
		||||
					"Name":"Column3",
 | 
			
		||||
					"ColumnTitleCell":[
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":true,
 | 
			
		||||
							"Name":"Column12",
 | 
			
		||||
							"ColumnTitleCell":[
 | 
			
		||||
								{
 | 
			
		||||
									"GroupTitle":true,
 | 
			
		||||
									"Name":"Column25",
 | 
			
		||||
									"ColumnTitleCell":[
 | 
			
		||||
										{
 | 
			
		||||
											"GroupTitle":true,
 | 
			
		||||
											"Name":"Column26",
 | 
			
		||||
											"ColumnTitleCell":[
 | 
			
		||||
												{
 | 
			
		||||
													"GroupTitle":false,
 | 
			
		||||
													"Column":"Column4",
 | 
			
		||||
													"TextAlign":"BottomCenter",
 | 
			
		||||
													"Text":"发药\r\n时间"
 | 
			
		||||
												},
 | 
			
		||||
												{
 | 
			
		||||
													"GroupTitle":false,
 | 
			
		||||
													"Column":"Column6",
 | 
			
		||||
													"TextAlign":"BottomCenter",
 | 
			
		||||
													"Text":"发药者"
 | 
			
		||||
												}
 | 
			
		||||
											],
 | 
			
		||||
											"TextAlign":"MiddleRight",
 | 
			
		||||
											"Text":"交接状态",
 | 
			
		||||
											"BorderCustom":true,
 | 
			
		||||
											"Border":{
 | 
			
		||||
												"Styles":"[DrawBottom]"
 | 
			
		||||
											}
 | 
			
		||||
										}
 | 
			
		||||
									]
 | 
			
		||||
								}
 | 
			
		||||
							],
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"药品信息",
 | 
			
		||||
							"BorderCustom":true,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight]"
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					],
 | 
			
		||||
					"BorderCustom":true,
 | 
			
		||||
					"Border":{
 | 
			
		||||
						"Styles":"[DrawRight]"
 | 
			
		||||
					}
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":true,
 | 
			
		||||
					"Name":"品名",
 | 
			
		||||
					"ColumnTitleCell":[
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":true,
 | 
			
		||||
							"Name":"规格",
 | 
			
		||||
							"ColumnTitleCell":[
 | 
			
		||||
								{
 | 
			
		||||
									"GroupTitle":true,
 | 
			
		||||
									"Name":"总基数",
 | 
			
		||||
									"ColumnTitleCell":[
 | 
			
		||||
										{
 | 
			
		||||
											"GroupTitle":true,
 | 
			
		||||
											"Name":"Column30",
 | 
			
		||||
											"ColumnTitleCell":[
 | 
			
		||||
												{
 | 
			
		||||
													"GroupTitle":false,
 | 
			
		||||
													"Column":"Column31",
 | 
			
		||||
													"TextAlign":"BottomCenter",
 | 
			
		||||
													"Text":"领药者"
 | 
			
		||||
												}
 | 
			
		||||
											]
 | 
			
		||||
										}
 | 
			
		||||
									],
 | 
			
		||||
									"TextAlign":"MiddleCenter",
 | 
			
		||||
									"Text":"总基数"
 | 
			
		||||
								}
 | 
			
		||||
							],
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"规格"
 | 
			
		||||
						}
 | 
			
		||||
					],
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"品名"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":true,
 | 
			
		||||
					"Name":"drugname",
 | 
			
		||||
					"ColumnTitleCell":[
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":true,
 | 
			
		||||
							"Name":"drugspec",
 | 
			
		||||
							"ColumnTitleCell":[
 | 
			
		||||
								{
 | 
			
		||||
									"GroupTitle":true,
 | 
			
		||||
									"Name":"totalnum",
 | 
			
		||||
									"ColumnTitleCell":[
 | 
			
		||||
										{
 | 
			
		||||
											"GroupTitle":true,
 | 
			
		||||
											"Name":"发药",
 | 
			
		||||
											"ColumnTitleCell":[
 | 
			
		||||
												{
 | 
			
		||||
													"GroupTitle":false,
 | 
			
		||||
													"Column":"Column14",
 | 
			
		||||
													"TextAlign":"BottomCenter",
 | 
			
		||||
													"Text":"实\r\n发\r\n数"
 | 
			
		||||
												}
 | 
			
		||||
											],
 | 
			
		||||
											"TextAlign":"MiddleCenter",
 | 
			
		||||
											"Text":"发药"
 | 
			
		||||
										},
 | 
			
		||||
										{
 | 
			
		||||
											"GroupTitle":true,
 | 
			
		||||
											"Name":"还药",
 | 
			
		||||
											"ColumnTitleCell":[
 | 
			
		||||
												{
 | 
			
		||||
													"GroupTitle":false,
 | 
			
		||||
													"Column":"Column19",
 | 
			
		||||
													"TextAlign":"BottomCenter",
 | 
			
		||||
													"Text":"实\r\n物\r\n数"
 | 
			
		||||
												},
 | 
			
		||||
												{
 | 
			
		||||
													"GroupTitle":false,
 | 
			
		||||
													"Column":"Column20",
 | 
			
		||||
													"TextAlign":"BottomCenter",
 | 
			
		||||
													"Text":"空\r\n安\r\n瓿"
 | 
			
		||||
												}
 | 
			
		||||
											],
 | 
			
		||||
											"TextAlign":"MiddleCenter",
 | 
			
		||||
											"Text":"还药"
 | 
			
		||||
										}
 | 
			
		||||
									],
 | 
			
		||||
									"TextAlign":"MiddleCenter",
 | 
			
		||||
									"Text":"[#TotalNum#]"
 | 
			
		||||
								}
 | 
			
		||||
							],
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"[#drugSpec#]"
 | 
			
		||||
						}
 | 
			
		||||
					],
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"[#drugName#]"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"Column36",
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"Text":"还药\r\n时间"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"Column23",
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"Text":"还药者"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"Column24",
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"Text":"接收者"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"Group":[
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Group1",
 | 
			
		||||
				"GroupHeader":{
 | 
			
		||||
					"Height":0.79375,
 | 
			
		||||
					"PrintGridBorder":false,
 | 
			
		||||
					"Control":[
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"MemoBox",
 | 
			
		||||
							"Name":"MemoBox7",
 | 
			
		||||
							"AlignColumnSide":"Right",
 | 
			
		||||
							"Left":19.394,
 | 
			
		||||
							"Top":0.211667,
 | 
			
		||||
							"Width":7.59354,
 | 
			
		||||
							"Height":0.396875,
 | 
			
		||||
							"TextAlign":"MiddleRight",
 | 
			
		||||
							"Text":"[#DMMonth#]月[#DMDay#]日"
 | 
			
		||||
						}
 | 
			
		||||
					]
 | 
			
		||||
				},
 | 
			
		||||
				"GroupFooter":{
 | 
			
		||||
					"Height":2,
 | 
			
		||||
					"Control":[
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox4",
 | 
			
		||||
							"AlignColumn":"Column31",
 | 
			
		||||
							"AlignColumnEx":"Column4",
 | 
			
		||||
							"Width":8.96938,
 | 
			
		||||
							"Height":2,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"日消耗总计(支)"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox5",
 | 
			
		||||
							"AlignColumn":"Column14",
 | 
			
		||||
							"Left":8.96938,
 | 
			
		||||
							"Width":2.98979,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"安瓿"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"MemoBox",
 | 
			
		||||
							"Name":"MemoBox2",
 | 
			
		||||
							"AlignColumn":"Column14",
 | 
			
		||||
							"Left":8.96938,
 | 
			
		||||
							"Top":1.00542,
 | 
			
		||||
							"Width":2.9898,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"[#Sum(EmptyNum)#]"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox6",
 | 
			
		||||
							"AlignColumn":"Column19",
 | 
			
		||||
							"Left":11.9592,
 | 
			
		||||
							"Width":2.99,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"处方"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"MemoBox",
 | 
			
		||||
							"Name":"MemoBox8",
 | 
			
		||||
							"AlignColumn":"Column19",
 | 
			
		||||
							"Left":11.9592,
 | 
			
		||||
							"Top":1.00542,
 | 
			
		||||
							"Width":2.98979,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"[#Sum(SendNum-InfactNum)#]"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox7",
 | 
			
		||||
							"AlignColumn":"Column20",
 | 
			
		||||
							"Left":14.949,
 | 
			
		||||
							"Width":2.98979,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"补充"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"MemoBox",
 | 
			
		||||
							"Name":"MemoBox9",
 | 
			
		||||
							"AlignColumn":"Column20",
 | 
			
		||||
							"Left":14.949,
 | 
			
		||||
							"Top":1.00542,
 | 
			
		||||
							"Width":2.98979,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"[#Sum(SendNum-InfactNum)#]"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox8",
 | 
			
		||||
							"AlignColumnSide":"Right",
 | 
			
		||||
							"AlignColumn":"Column36",
 | 
			
		||||
							"Left":17.9123,
 | 
			
		||||
							"Width":3,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawBottom]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"BottomRight",
 | 
			
		||||
							"Text":"补充者"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"MemoBox",
 | 
			
		||||
							"Name":"MemoBox10",
 | 
			
		||||
							"AlignColumnSide":"Right",
 | 
			
		||||
							"AlignColumn":"Column36",
 | 
			
		||||
							"Left":17.9123,
 | 
			
		||||
							"Top":1.00542,
 | 
			
		||||
							"Width":3,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"TextAlign":"MiddleRight",
 | 
			
		||||
							"Text":"[#AddUser#]"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox9",
 | 
			
		||||
							"AlignColumn":"Column24",
 | 
			
		||||
							"Left":23.8919,
 | 
			
		||||
							"Width":3.01625,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawLeft|DrawRight|DrawBottom]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"核对者"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"MemoBox",
 | 
			
		||||
							"Name":"MemoBox11",
 | 
			
		||||
							"AlignColumn":"Column24",
 | 
			
		||||
							"Left":23.8919,
 | 
			
		||||
							"Top":1.00542,
 | 
			
		||||
							"Width":3.02,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawLeft|DrawRight]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"[#AddCheckUser#]"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox10",
 | 
			
		||||
							"AlignColumnSide":"Left",
 | 
			
		||||
							"AlignColumn":"Column23",
 | 
			
		||||
							"Left":20.9285,
 | 
			
		||||
							"Width":3,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawBottom]"
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					]
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		],
 | 
			
		||||
		"CrossTab":{
 | 
			
		||||
			"PercentFormat":"0.##%",
 | 
			
		||||
			"HCrossFields":"drugId;ReturnDate;ReturnUser;ReturnReceiveUser;AddUser;AddCheckUser",
 | 
			
		||||
			"VCrossFields":"Senddate;drawerno",
 | 
			
		||||
			"ListCols":3,
 | 
			
		||||
			"TotalCols":3
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	"Parameter":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"machine_id"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"startDate",
 | 
			
		||||
			"DataType":"DateTime"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"endDate",
 | 
			
		||||
			"DataType":"DateTime"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"ReportHeader1",
 | 
			
		||||
			"Height":1.79917,
 | 
			
		||||
			"Control":[
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"MemoBox",
 | 
			
		||||
					"Name":"MemoBox1",
 | 
			
		||||
					"Dock":"Fill",
 | 
			
		||||
					"Center":"Both",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":217500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"ShrinkFontToFit":true,
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"麻醉科小药箱麻醉、精神药品(注射剂)使用与交接记录([#DMYear#])年"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"RepeatOnPage":true
 | 
			
		||||
		}
 | 
			
		||||
	]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,805 @@
 | 
			
		|||
{
 | 
			
		||||
	"Version":"6.8.1.1",
 | 
			
		||||
	"Font":{
 | 
			
		||||
		"Name":"宋体",
 | 
			
		||||
		"Size":105000,
 | 
			
		||||
		"Weight":400,
 | 
			
		||||
		"Charset":134
 | 
			
		||||
	},
 | 
			
		||||
	"Printer":{
 | 
			
		||||
		"Oriention":"Landscape",
 | 
			
		||||
		"LeftMargin":1,
 | 
			
		||||
		"TopMargin":1.42875,
 | 
			
		||||
		"RightMargin":1,
 | 
			
		||||
		"BottomMargin":1.8
 | 
			
		||||
	},
 | 
			
		||||
	"DetailGrid":{
 | 
			
		||||
		"CenterView":true,
 | 
			
		||||
		"IsCrossTab":true,
 | 
			
		||||
		"FixCols":2,
 | 
			
		||||
		"AppendBlankRow":true,
 | 
			
		||||
		"AppendBlankRowAtLast":true,
 | 
			
		||||
		"Recordset":{
 | 
			
		||||
			"Field":[
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"DMYear",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"DMMonth",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"DMDay",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"TotalNum"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"Senddate",
 | 
			
		||||
					"Type":"DateTime",
 | 
			
		||||
					"Format":"HH:mm"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"SendUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"ReceiveUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"SendNum",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"InfactNum",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"EmptyNum",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"ReturnDate",
 | 
			
		||||
					"Format":"HH:mm"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"ReturnUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"ReturnReceiveUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"AddUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"AddCheckUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"drugId"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"drugName"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"drugSpec"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"drawerno",
 | 
			
		||||
					"Type":"Integer"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"安瓿",
 | 
			
		||||
					"Type":"Integer",
 | 
			
		||||
					"DBFieldName":"usebottle"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"处方",
 | 
			
		||||
					"Type":"Integer",
 | 
			
		||||
					"DBFieldName":"useorderno"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"补充",
 | 
			
		||||
					"Type":"Integer",
 | 
			
		||||
					"DBFieldName":"useadd"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"补充者",
 | 
			
		||||
					"DBFieldName":"AddUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"核对者",
 | 
			
		||||
					"DBFieldName":"AddCheckUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"SenddateMonthDay"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Name":"ID",
 | 
			
		||||
					"DBFieldName":" ID"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"Column":[
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column4"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column6"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column31"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column14"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column19",
 | 
			
		||||
				"Width":3.01625
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column20"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column36"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column23"
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Column24"
 | 
			
		||||
			}
 | 
			
		||||
		],
 | 
			
		||||
		"ColumnContent":{
 | 
			
		||||
			"Height":2.19604,
 | 
			
		||||
			"ColumnContentCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column4",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"Senddate"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column6",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"SendUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column31",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"ReceiveUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column14",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"SendNum"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column19",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"InfactNum"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column20",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"EmptyNum"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column36",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"ReturnDate"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column23",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"ReturnUser"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Column":"Column24",
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"DataField":"ReturnReceiveUser"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"ColumnTitle":{
 | 
			
		||||
			"Height":4.10104,
 | 
			
		||||
			"RepeatStyle":"OnGroupHeaderPage",
 | 
			
		||||
			"ColumnTitleCell":[
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":true,
 | 
			
		||||
					"Name":"Column3",
 | 
			
		||||
					"ColumnTitleCell":[
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":true,
 | 
			
		||||
							"Name":"Column12",
 | 
			
		||||
							"ColumnTitleCell":[
 | 
			
		||||
								{
 | 
			
		||||
									"GroupTitle":true,
 | 
			
		||||
									"Name":"Column25",
 | 
			
		||||
									"ColumnTitleCell":[
 | 
			
		||||
										{
 | 
			
		||||
											"GroupTitle":true,
 | 
			
		||||
											"Name":"Column26",
 | 
			
		||||
											"ColumnTitleCell":[
 | 
			
		||||
												{
 | 
			
		||||
													"GroupTitle":false,
 | 
			
		||||
													"Column":"Column4",
 | 
			
		||||
													"TextAlign":"BottomCenter",
 | 
			
		||||
													"Text":"发药\r\n时间"
 | 
			
		||||
												},
 | 
			
		||||
												{
 | 
			
		||||
													"GroupTitle":false,
 | 
			
		||||
													"Column":"Column6",
 | 
			
		||||
													"TextAlign":"BottomCenter",
 | 
			
		||||
													"Text":"发药者"
 | 
			
		||||
												}
 | 
			
		||||
											],
 | 
			
		||||
											"TextAlign":"MiddleRight",
 | 
			
		||||
											"Text":"交接状态",
 | 
			
		||||
											"BorderCustom":true,
 | 
			
		||||
											"Border":{
 | 
			
		||||
												"Styles":"[DrawBottom]"
 | 
			
		||||
											}
 | 
			
		||||
										}
 | 
			
		||||
									]
 | 
			
		||||
								}
 | 
			
		||||
							],
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"药品信息",
 | 
			
		||||
							"BorderCustom":true,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight]"
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					],
 | 
			
		||||
					"BorderCustom":true,
 | 
			
		||||
					"Border":{
 | 
			
		||||
						"Styles":"[DrawRight]"
 | 
			
		||||
					}
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":true,
 | 
			
		||||
					"Name":"品名",
 | 
			
		||||
					"ColumnTitleCell":[
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":true,
 | 
			
		||||
							"Name":"规格",
 | 
			
		||||
							"ColumnTitleCell":[
 | 
			
		||||
								{
 | 
			
		||||
									"GroupTitle":true,
 | 
			
		||||
									"Name":"总基数",
 | 
			
		||||
									"ColumnTitleCell":[
 | 
			
		||||
										{
 | 
			
		||||
											"GroupTitle":true,
 | 
			
		||||
											"Name":"Column30",
 | 
			
		||||
											"ColumnTitleCell":[
 | 
			
		||||
												{
 | 
			
		||||
													"GroupTitle":false,
 | 
			
		||||
													"Column":"Column31",
 | 
			
		||||
													"TextAlign":"BottomCenter",
 | 
			
		||||
													"Text":"领药者"
 | 
			
		||||
												}
 | 
			
		||||
											]
 | 
			
		||||
										}
 | 
			
		||||
									],
 | 
			
		||||
									"TextAlign":"MiddleCenter",
 | 
			
		||||
									"Text":"总基数"
 | 
			
		||||
								}
 | 
			
		||||
							],
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"规格"
 | 
			
		||||
						}
 | 
			
		||||
					],
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"品名"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":true,
 | 
			
		||||
					"Name":"drugname",
 | 
			
		||||
					"ColumnTitleCell":[
 | 
			
		||||
						{
 | 
			
		||||
							"GroupTitle":true,
 | 
			
		||||
							"Name":"drugspec",
 | 
			
		||||
							"ColumnTitleCell":[
 | 
			
		||||
								{
 | 
			
		||||
									"GroupTitle":true,
 | 
			
		||||
									"Name":"totalnum",
 | 
			
		||||
									"ColumnTitleCell":[
 | 
			
		||||
										{
 | 
			
		||||
											"GroupTitle":true,
 | 
			
		||||
											"Name":"发药",
 | 
			
		||||
											"ColumnTitleCell":[
 | 
			
		||||
												{
 | 
			
		||||
													"GroupTitle":false,
 | 
			
		||||
													"Column":"Column14",
 | 
			
		||||
													"TextAlign":"BottomCenter",
 | 
			
		||||
													"Text":"实\r\n发\r\n数"
 | 
			
		||||
												}
 | 
			
		||||
											],
 | 
			
		||||
											"TextAlign":"MiddleCenter",
 | 
			
		||||
											"Text":"发药"
 | 
			
		||||
										},
 | 
			
		||||
										{
 | 
			
		||||
											"GroupTitle":true,
 | 
			
		||||
											"Name":"还药",
 | 
			
		||||
											"ColumnTitleCell":[
 | 
			
		||||
												{
 | 
			
		||||
													"GroupTitle":false,
 | 
			
		||||
													"Column":"Column19",
 | 
			
		||||
													"TextAlign":"BottomCenter",
 | 
			
		||||
													"Text":"实\r\n物\r\n数"
 | 
			
		||||
												},
 | 
			
		||||
												{
 | 
			
		||||
													"GroupTitle":false,
 | 
			
		||||
													"Column":"Column20",
 | 
			
		||||
													"TextAlign":"BottomCenter",
 | 
			
		||||
													"Text":"空\r\n安\r\n瓿"
 | 
			
		||||
												}
 | 
			
		||||
											],
 | 
			
		||||
											"TextAlign":"MiddleCenter",
 | 
			
		||||
											"Text":"还药"
 | 
			
		||||
										}
 | 
			
		||||
									],
 | 
			
		||||
									"TextAlign":"MiddleCenter",
 | 
			
		||||
									"Text":"[#TotalNum#]"
 | 
			
		||||
								}
 | 
			
		||||
							],
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"[#drugSpec#]"
 | 
			
		||||
						}
 | 
			
		||||
					],
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"[#drugName#]"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"Column36",
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"Text":"还药\r\n时间"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"Column23",
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"Text":"还药者"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"GroupTitle":false,
 | 
			
		||||
					"Column":"Column24",
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"Text":"接收者"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		"Group":[
 | 
			
		||||
			{
 | 
			
		||||
				"Name":"Group1",
 | 
			
		||||
				"ByFields":"SenddateMonthDay",
 | 
			
		||||
				"GroupHeader":{
 | 
			
		||||
					"Height":0.79375,
 | 
			
		||||
					"PrintGridBorder":false,
 | 
			
		||||
					"Control":[
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"MemoBox",
 | 
			
		||||
							"Name":"MemoBox17",
 | 
			
		||||
							"AlignColumnSide":"Right",
 | 
			
		||||
							"Left":19.3675,
 | 
			
		||||
							"Top":0.211667,
 | 
			
		||||
							"Width":7.59354,
 | 
			
		||||
							"Height":0.396875,
 | 
			
		||||
							"TextAlign":"MiddleRight",
 | 
			
		||||
							"Text":"[#DMMonth#]月[#DMDay#]日"
 | 
			
		||||
						}
 | 
			
		||||
					]
 | 
			
		||||
				},
 | 
			
		||||
				"GroupFooter":{
 | 
			
		||||
					"Height":2,
 | 
			
		||||
					"RepeatOnPage":true,
 | 
			
		||||
					"Control":[
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox4",
 | 
			
		||||
							"AlignColumn":"Column31",
 | 
			
		||||
							"AlignColumnEx":"Column4",
 | 
			
		||||
							"Width":8.96938,
 | 
			
		||||
							"Height":2,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"日消耗总计(支)"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox5",
 | 
			
		||||
							"AlignColumn":"Column14",
 | 
			
		||||
							"Left":8.96938,
 | 
			
		||||
							"Width":2.98979,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"安瓿"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox6",
 | 
			
		||||
							"AlignColumn":"Column19",
 | 
			
		||||
							"Left":11.9592,
 | 
			
		||||
							"Width":3.01625,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"处方"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox7",
 | 
			
		||||
							"AlignColumn":"Column20",
 | 
			
		||||
							"Left":14.9754,
 | 
			
		||||
							"Width":2.98979,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"补充"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox9",
 | 
			
		||||
							"Anchor":"[Left|Top|Right]",
 | 
			
		||||
							"ShiftMode":"Never",
 | 
			
		||||
							"AlignColumn":"Column24",
 | 
			
		||||
							"Left":23.9448,
 | 
			
		||||
							"Width":2.98979,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"BottomCenter",
 | 
			
		||||
							"Text":"核对者"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"FieldBox",
 | 
			
		||||
							"Name":"FieldBox5",
 | 
			
		||||
							"ShiftMode":"Never",
 | 
			
		||||
							"AlignColumn":"Column24",
 | 
			
		||||
							"Left":23.9448,
 | 
			
		||||
							"Top":1.00542,
 | 
			
		||||
							"Width":2.98979,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"DataField":"核对者"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"MemoBox",
 | 
			
		||||
							"Name":"MemoBox18",
 | 
			
		||||
							"AlignColumn":"Column14",
 | 
			
		||||
							"Left":8.96938,
 | 
			
		||||
							"Top":1.00542,
 | 
			
		||||
							"Width":2.99,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"[#Sum(EmptyNum)#]"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"MemoBox",
 | 
			
		||||
							"Name":"MemoBox19",
 | 
			
		||||
							"AlignColumn":"Column19",
 | 
			
		||||
							"Left":11.9592,
 | 
			
		||||
							"Top":1.00542,
 | 
			
		||||
							"Width":3.01625,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"[#Sum(EmptyNum)#]"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"MemoBox",
 | 
			
		||||
							"Name":"MemoBox20",
 | 
			
		||||
							"AlignColumn":"Column20",
 | 
			
		||||
							"Left":14.9754,
 | 
			
		||||
							"Top":1.00542,
 | 
			
		||||
							"Width":2.98979,
 | 
			
		||||
							"Height":1,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"MiddleCenter",
 | 
			
		||||
							"Text":"[#Sum(EmptyNum)#]"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox17",
 | 
			
		||||
							"Anchor":"[]",
 | 
			
		||||
							"ShiftMode":"Never",
 | 
			
		||||
							"AlignColumn":"Column36",
 | 
			
		||||
							"AlignColumnEx":"Column23",
 | 
			
		||||
							"Left":17.9652,
 | 
			
		||||
							"Width":5.95313,
 | 
			
		||||
							"Height":1.00542,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawBottom]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"BottomRight",
 | 
			
		||||
							"Text":"补充者"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"FieldBox",
 | 
			
		||||
							"Name":"FieldBox6",
 | 
			
		||||
							"ShiftMode":"Never",
 | 
			
		||||
							"AlignColumn":"Column36",
 | 
			
		||||
							"AlignColumnEx":"Column23",
 | 
			
		||||
							"Left":17.9652,
 | 
			
		||||
							"Top":1.00542,
 | 
			
		||||
							"Width":5.95313,
 | 
			
		||||
							"Height":1.01,
 | 
			
		||||
							"TextAlign":"MiddleRight",
 | 
			
		||||
							"DataField":"补充者"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"MemoBox",
 | 
			
		||||
							"Name":"MemoBox21",
 | 
			
		||||
							"AlignColumn":"Column23",
 | 
			
		||||
							"Left":20.955,
 | 
			
		||||
							"Width":2.98979,
 | 
			
		||||
							"Height":1.01,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"MiddleCenter"
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"Type":"StaticBox",
 | 
			
		||||
							"Name":"StaticBox18",
 | 
			
		||||
							"AlignColumn":"Column23",
 | 
			
		||||
							"Left":20.955,
 | 
			
		||||
							"Top":1.00542,
 | 
			
		||||
							"Width":2.98979,
 | 
			
		||||
							"Height":1.01,
 | 
			
		||||
							"Border":{
 | 
			
		||||
								"Styles":"[DrawRight]"
 | 
			
		||||
							},
 | 
			
		||||
							"TextAlign":"MiddleCenter"
 | 
			
		||||
						}
 | 
			
		||||
					],
 | 
			
		||||
					"AppendBlankRowExclude":true
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		],
 | 
			
		||||
		"CrossTab":{
 | 
			
		||||
			"PercentFormat":"0.##%",
 | 
			
		||||
			"HCrossFields":"drugId",
 | 
			
		||||
			"VCrossFields":"Senddate;ReturnDate",
 | 
			
		||||
			"ListCols":3,
 | 
			
		||||
			"TotalCols":3,
 | 
			
		||||
			"TotalExcludeColumns":"Column36;Column23;Column24"
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	"Parameter":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"machine_id"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"startDate",
 | 
			
		||||
			"DataType":"DateTime"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"endDate",
 | 
			
		||||
			"DataType":"DateTime"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportHeader":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"ReportHeader1",
 | 
			
		||||
			"Height":1.79917,
 | 
			
		||||
			"Control":[
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"MemoBox",
 | 
			
		||||
					"Name":"MemoBox1",
 | 
			
		||||
					"Dock":"Fill",
 | 
			
		||||
					"Center":"Both",
 | 
			
		||||
					"Font":{
 | 
			
		||||
						"Name":"宋体",
 | 
			
		||||
						"Size":217500,
 | 
			
		||||
						"Bold":true,
 | 
			
		||||
						"Charset":134
 | 
			
		||||
					},
 | 
			
		||||
					"ShrinkFontToFit":true,
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"麻醉科小药箱麻醉、精神药品(注射剂)使用与交接记录([#DMYear#])年"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"RepeatOnPage":true
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"ReportHeader2",
 | 
			
		||||
			"Height":0,
 | 
			
		||||
			"Control":[
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"MemoBox",
 | 
			
		||||
					"Name":"MemoBox7",
 | 
			
		||||
					"AlignColumnSide":"Right",
 | 
			
		||||
					"Left":19.394,
 | 
			
		||||
					"Top":0.211667,
 | 
			
		||||
					"Width":7.59354,
 | 
			
		||||
					"Height":0.396875,
 | 
			
		||||
					"TextAlign":"MiddleRight",
 | 
			
		||||
					"Text":"[#DMMonth#]月[#DMDay#]日"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"ReportFooter":[
 | 
			
		||||
		{
 | 
			
		||||
			"Name":"ReportFooter1",
 | 
			
		||||
			"Visible":false,
 | 
			
		||||
			"KeepTogether":false,
 | 
			
		||||
			"Height":0,
 | 
			
		||||
			"Control":[
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"StaticBox",
 | 
			
		||||
					"Name":"StaticBox11",
 | 
			
		||||
					"AlignColumn":"Column31",
 | 
			
		||||
					"AlignColumnEx":"Column4",
 | 
			
		||||
					"Width":8.99583,
 | 
			
		||||
					"Height":2,
 | 
			
		||||
					"Border":{
 | 
			
		||||
						"Styles":"[DrawLeft|DrawRight|DrawBottom]"
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"日消耗总计(支)"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"StaticBox",
 | 
			
		||||
					"Name":"StaticBox12",
 | 
			
		||||
					"AlignColumn":"Column24",
 | 
			
		||||
					"Left":23.9448,
 | 
			
		||||
					"Width":3.01625,
 | 
			
		||||
					"Height":1,
 | 
			
		||||
					"Border":{
 | 
			
		||||
						"Styles":"[DrawLeft|DrawRight|DrawBottom]"
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"Text":"核对者"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"StaticBox",
 | 
			
		||||
					"Name":"StaticBox13",
 | 
			
		||||
					"AlignColumn":"Column14",
 | 
			
		||||
					"Left":8.99583,
 | 
			
		||||
					"Width":2.98979,
 | 
			
		||||
					"Height":1,
 | 
			
		||||
					"Border":{
 | 
			
		||||
						"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"Text":"安瓿"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"MemoBox",
 | 
			
		||||
					"Name":"MemoBox12",
 | 
			
		||||
					"AlignColumn":"Column14",
 | 
			
		||||
					"Left":8.99583,
 | 
			
		||||
					"Top":1.00542,
 | 
			
		||||
					"Width":2.9898,
 | 
			
		||||
					"Height":1,
 | 
			
		||||
					"Border":{
 | 
			
		||||
						"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"[#安瓿#]"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"StaticBox",
 | 
			
		||||
					"Name":"StaticBox14",
 | 
			
		||||
					"AlignColumn":"Column19",
 | 
			
		||||
					"Left":11.9856,
 | 
			
		||||
					"Width":3.01625,
 | 
			
		||||
					"Height":1,
 | 
			
		||||
					"Border":{
 | 
			
		||||
						"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"Text":"处方"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"MemoBox",
 | 
			
		||||
					"Name":"MemoBox13",
 | 
			
		||||
					"AlignColumn":"Column19",
 | 
			
		||||
					"Left":11.9856,
 | 
			
		||||
					"Top":1.00542,
 | 
			
		||||
					"Width":3.01625,
 | 
			
		||||
					"Height":1,
 | 
			
		||||
					"Border":{
 | 
			
		||||
						"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"[#处方#]"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"StaticBox",
 | 
			
		||||
					"Name":"StaticBox15",
 | 
			
		||||
					"AlignColumn":"Column20",
 | 
			
		||||
					"Left":15.0019,
 | 
			
		||||
					"Width":2.98979,
 | 
			
		||||
					"Height":1,
 | 
			
		||||
					"Border":{
 | 
			
		||||
						"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"Text":"补充"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"MemoBox",
 | 
			
		||||
					"Name":"MemoBox14",
 | 
			
		||||
					"AlignColumn":"Column20",
 | 
			
		||||
					"Left":15.0019,
 | 
			
		||||
					"Top":1.00542,
 | 
			
		||||
					"Width":2.98979,
 | 
			
		||||
					"Height":1,
 | 
			
		||||
					"Border":{
 | 
			
		||||
						"Styles":"[DrawRight|DrawBottom]"
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"[#补充#]"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"StaticBox",
 | 
			
		||||
					"Name":"StaticBox16",
 | 
			
		||||
					"AlignColumn":"Column36",
 | 
			
		||||
					"AlignColumnEx":"Column23",
 | 
			
		||||
					"Left":17.9917,
 | 
			
		||||
					"Width":5.95313,
 | 
			
		||||
					"Height":1,
 | 
			
		||||
					"Border":{
 | 
			
		||||
						"Styles":"[DrawBottom]"
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"BottomCenter",
 | 
			
		||||
					"Text":"补充者"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"MemoBox",
 | 
			
		||||
					"Name":"MemoBox15",
 | 
			
		||||
					"AlignColumn":"Column36",
 | 
			
		||||
					"AlignColumnEx":"Column23",
 | 
			
		||||
					"Left":17.9917,
 | 
			
		||||
					"Top":1.00542,
 | 
			
		||||
					"Width":5.95313,
 | 
			
		||||
					"Height":1,
 | 
			
		||||
					"Border":{
 | 
			
		||||
						"Styles":"[DrawBottom]"
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"[#补充者#]"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"Type":"MemoBox",
 | 
			
		||||
					"Name":"MemoBox16",
 | 
			
		||||
					"AlignColumn":"Column24",
 | 
			
		||||
					"Left":23.9448,
 | 
			
		||||
					"Top":1.00542,
 | 
			
		||||
					"Width":3.02,
 | 
			
		||||
					"Height":1,
 | 
			
		||||
					"Border":{
 | 
			
		||||
						"Styles":"[DrawLeft|DrawRight|DrawBottom]"
 | 
			
		||||
					},
 | 
			
		||||
					"TextAlign":"MiddleCenter",
 | 
			
		||||
					"Text":"[#核对者#]"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"CenterWithDetailGrid":false
 | 
			
		||||
		}
 | 
			
		||||
	]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,380 @@
 | 
			
		|||
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 System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Media;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class AccountWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
 | 
			
		||||
    {
 | 
			
		||||
        public static AccountWindowViewModel vm;
 | 
			
		||||
        //private int _pageNum = 1;
 | 
			
		||||
        //public int PageNum
 | 
			
		||||
        //{
 | 
			
		||||
        //    get => _pageNum;
 | 
			
		||||
        //    set
 | 
			
		||||
        //    {
 | 
			
		||||
        //        SetProperty(ref _pageNum, value);
 | 
			
		||||
        //        RequestData();
 | 
			
		||||
        //    }
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //private int _pageCount = 1;
 | 
			
		||||
        //public int PageCount
 | 
			
		||||
        //{
 | 
			
		||||
        //    get => _pageCount;
 | 
			
		||||
        //    set
 | 
			
		||||
        //    {
 | 
			
		||||
        //        SetProperty(ref _pageCount, value);
 | 
			
		||||
        //    }
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //private int _pageSize = 8;
 | 
			
		||||
        //public int PageSize
 | 
			
		||||
        //{
 | 
			
		||||
        //    get => _pageSize;
 | 
			
		||||
        //    set
 | 
			
		||||
        //    {
 | 
			
		||||
        //        SetProperty(ref _pageSize, value);
 | 
			
		||||
        //    }
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //private int _totalCount = 0;
 | 
			
		||||
        //public int TotalCount
 | 
			
		||||
        //{
 | 
			
		||||
        //    get => _totalCount;
 | 
			
		||||
        //    set
 | 
			
		||||
        //    {
 | 
			
		||||
        //        SetProperty(ref _totalCount, value);
 | 
			
		||||
        //    }
 | 
			
		||||
        //}
 | 
			
		||||
        private DateTime? _startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
 | 
			
		||||
 | 
			
		||||
        private DateTime? nowDate = 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();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private static readonly DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 账册
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private List<AccountBookG2> _accountList = new();
 | 
			
		||||
 | 
			
		||||
        public List<AccountBookG2> AccountList
 | 
			
		||||
        {
 | 
			
		||||
            get => _accountList;
 | 
			
		||||
            set => SetProperty(ref _accountList, value);
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private List<DrugInfo>? _drugInfos;
 | 
			
		||||
 | 
			
		||||
        public List<DrugInfo>? DrugInfos
 | 
			
		||||
        {
 | 
			
		||||
            get => _drugInfos;
 | 
			
		||||
            set => SetProperty(ref _drugInfos, value);
 | 
			
		||||
        }
 | 
			
		||||
        private DrugInfo? _drugInfo;
 | 
			
		||||
 | 
			
		||||
        public DrugInfo? DrugInfo
 | 
			
		||||
        {
 | 
			
		||||
            get => _drugInfo;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _drugInfo, value);
 | 
			
		||||
                //if (_drugInfo != null)
 | 
			
		||||
                //{
 | 
			
		||||
                //DrugManuNos = _drugInfo.DrugManuNos.OrderByDescending(dm => dm.ManuNo).ToList();
 | 
			
		||||
                //}
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 账册类型1入2出3总结存
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private List<AccountType> _accountTypeList = new List<AccountType>() {
 | 
			
		||||
                new AccountType
 | 
			
		||||
                {
 | 
			
		||||
                    AccountTypeName="借入",
 | 
			
		||||
                    AccountTypeValue=1
 | 
			
		||||
                },
 | 
			
		||||
                new AccountType
 | 
			
		||||
                {
 | 
			
		||||
                    AccountTypeName="发出",
 | 
			
		||||
                    AccountTypeValue=2
 | 
			
		||||
                },
 | 
			
		||||
                new AccountType
 | 
			
		||||
                {
 | 
			
		||||
                    AccountTypeName="日结存",
 | 
			
		||||
                    AccountTypeValue=3
 | 
			
		||||
                },
 | 
			
		||||
                new AccountType
 | 
			
		||||
                {
 | 
			
		||||
                    AccountTypeName="总结存",
 | 
			
		||||
                    AccountTypeValue=4
 | 
			
		||||
                }
 | 
			
		||||
        };
 | 
			
		||||
        public List<AccountType>? AccountTypeList
 | 
			
		||||
        {
 | 
			
		||||
            get => _accountTypeList;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _accountTypeList, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private AccountType? _accountType;
 | 
			
		||||
        public AccountType AccountType
 | 
			
		||||
        {
 | 
			
		||||
            get => _accountType;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _accountType, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 药品类型
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private List<DrugType> _drugTypeList = new List<DrugType>()
 | 
			
		||||
        {
 | 
			
		||||
            new DrugType{ TypeValue=1,TypeName="精一"},
 | 
			
		||||
            new DrugType{TypeValue=2,TypeName="精二"}
 | 
			
		||||
        };
 | 
			
		||||
        public List<DrugType>? DrugTypeList
 | 
			
		||||
        {
 | 
			
		||||
            get => _drugTypeList;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _drugTypeList, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private DrugType? _drugType;
 | 
			
		||||
        public DrugType? _DrugType
 | 
			
		||||
        {
 | 
			
		||||
            get => _drugType; set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _drugType, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //MachineRecordService _machineRecordService;
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        ////private SqlSugarScope SqlSugarHelper.Db;
 | 
			
		||||
        public AccountWindowViewModel( IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            //_machineRecordService = machineRecord;
 | 
			
		||||
            ////this.SqlSugarHelper.Db = sqlSugarScope;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
            vm = this;
 | 
			
		||||
        }
 | 
			
		||||
        void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            int totalCount = 0;
 | 
			
		||||
            AccountList = ReportAccountBook(StartDate, EndDate, AccountType == null ? 0 : AccountType.AccountTypeValue, _DrugType == null ? 0 : _DrugType.TypeValue, DrugInfo == null ? "" : DrugInfo.DrugId.ToString() ?? "");
 | 
			
		||||
            //for (int i = 0; i < accountList.Count; i++)
 | 
			
		||||
            //{
 | 
			
		||||
            //    if (accountList[i].DrugInfo is null)
 | 
			
		||||
            //    {
 | 
			
		||||
            //        DrugInfo drug= new DrugInfo();
 | 
			
		||||
            //        drug.DrugId = accountList[i].DrugId;
 | 
			
		||||
            //        drug.DrugName = accountList[i].DrugName;
 | 
			
		||||
            //        drug.DrugSpec = accountList[i].DrugSpec;
 | 
			
		||||
            //        drug.Dosage= accountList[i].Dosage;
 | 
			
		||||
            //        drug.PackUnit= accountList[i].PackUnit;
 | 
			
		||||
            //        drug.Manufactory= accountList[i].Manufactory;
 | 
			
		||||
            //        accountList[i].DrugInfo= drug;
 | 
			
		||||
            //    }
 | 
			
		||||
            //}
 | 
			
		||||
            //ICollectionView vw = CollectionViewSource.GetDefaultView(accountList);
 | 
			
		||||
            //vw.GroupDescriptions.Add(new PropertyGroupDescription("DrugInfo"));
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        private void GetAllDrugInfos()
 | 
			
		||||
        {
 | 
			
		||||
            var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
            DrugInfos = list;
 | 
			
		||||
            DrugInfo = list[0];
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
        public long CurrentTimeMillis()
 | 
			
		||||
        {
 | 
			
		||||
            return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 导出发药登记表
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand DownloadOrderUser
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() => {
 | 
			
		||||
                GridReportUtil.OrderUseReport(StartDate, EndDate,  DrugInfo == null ? "" : DrugInfo.DrugId.ToString() ?? "");
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 导出账册
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand DownloadAccountBook
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                GridReportUtil.PrintReportAccountBook(StartDate, EndDate, AccountType == null ? 0 : AccountType.AccountTypeValue, DrugInfo == null ? "" : DrugInfo.DrugId.ToString() ?? "");
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 刷新
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand Query
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                RequestData();
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => true;
 | 
			
		||||
 | 
			
		||||
        public void UpdateComboBoxItems(string text)
 | 
			
		||||
        {
 | 
			
		||||
            string str = @"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,
 | 
			
		||||
                        d.manufactory,d.max_stock FROM `drug_info` d";
 | 
			
		||||
            if (string.IsNullOrEmpty(text))
 | 
			
		||||
            {
 | 
			
		||||
                DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (DrugInfos != null)
 | 
			
		||||
            {
 | 
			
		||||
                DrugInfos.Clear();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).Where(di => di.DrugName.Contains(text) || di.PyCode.Contains(text) || di.DrugId.Contains(text)).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            //药品信息
 | 
			
		||||
            GetAllDrugInfos();
 | 
			
		||||
            //查询表格数据
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private List<AccountBookG2> ReportAccountBook(DateTime? startDate, DateTime? endDate, int type,int drugType, string drug_id = "")
 | 
			
		||||
        {
 | 
			
		||||
            DateTime? p_startDate = startDate ?? Convert.ToDateTime("2010-1-1");
 | 
			
		||||
            DateTime? p_endDate = endDate ?? DateTime.Now.AddDays(1);
 | 
			
		||||
            string p_machine_id = (ConfigurationManager.AppSettings["machineId"] ?? "DM3");
 | 
			
		||||
            //string jj_machine_id = (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5");
 | 
			
		||||
            string SQL = $@" SELECT ac.create_date as CreateDate, ac.TYPE,
 | 
			
		||||
	                     if(ac.type in(1,2),0,ac.yesterday_quantity) as YQuantity,if(ac.type in(3,4),0,ac.add_quantity) as AddQuantity,if(ac.type in(3,4),0,ac.out_quantity) as OutQuantity,
 | 
			
		||||
	                     if(ac.type in(1,2),0,ac.manu_stock) as ManuStock,ac.total_stock, -- if(ac.type in(1,2),0,ac.total_stock) as TotalStock,
 | 
			
		||||
	                     ac.invoice_no as InvoiceNo, ac.manu_no as ManuNo,ac.eff_date as EffDate,di.drug_id,di.drug_name as DrugName,di.drug_spec as DrugSpec,di.manufactory as Manufactory,di.pack_unit,di.dosage,u1.user_name as OperatorName,u2.user_name as ReviewerName
 | 
			
		||||
	                     FROM account_book_g2 ac left join drug_info di on ac.drug_id=di.drug_id left join user_list u1 on ac.user_id1=u1.id left join user_list u2 on ac.user_id2=u2.id
 | 
			
		||||
 		                    WHERE ac.machine_id ='{p_machine_id}' and create_time>'{p_startDate}' AND create_time<'{p_endDate}' ";
 | 
			
		||||
            //if (!string.IsNullOrEmpty(drug_id))
 | 
			
		||||
            //{
 | 
			
		||||
            //    SQL += " AND ac.drug_id='" + drug_id + "' ";
 | 
			
		||||
            //}
 | 
			
		||||
            if (type > 0)
 | 
			
		||||
            {
 | 
			
		||||
                if (type == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    SQL += "  AND ac.add_quantity>0 ";
 | 
			
		||||
                }
 | 
			
		||||
                if (type == 2)
 | 
			
		||||
                {
 | 
			
		||||
                    SQL += " AND ac.out_quantity>0 ";
 | 
			
		||||
                }
 | 
			
		||||
                if (type == 3)
 | 
			
		||||
                {
 | 
			
		||||
                    SQL += " AND type=3 ";
 | 
			
		||||
                }
 | 
			
		||||
                if (type == 4)
 | 
			
		||||
                {
 | 
			
		||||
                    SQL += " AND type=4  ";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (drugType > 0)
 | 
			
		||||
            {
 | 
			
		||||
                SQL += $" AND di.Drug_type={drugType}";
 | 
			
		||||
            }
 | 
			
		||||
            SQL += " ORDER BY ac.create_date desc,ac.drug_id";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            //ChannelStocks = q.Select(it => { it.CheckQuantity = it.Quantity; return it; }).ToList();
 | 
			
		||||
 | 
			
		||||
            List<AccountBookG2> accountList = SqlSugarHelper.Db.SqlQueryable<AccountBookG2>(SQL)
 | 
			
		||||
                                                                         //.AddParameters(new
 | 
			
		||||
                                                                         //{
 | 
			
		||||
                                                                         //    machineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1"
 | 
			
		||||
                                                                         //})
 | 
			
		||||
                                                                       //.Select(it => new { o = new AccountModel(), i = new DrugInfo() })
 | 
			
		||||
                                                                       //.Select(it=>new AccountModel())
 | 
			
		||||
                                                                       //.Select("*") //让上面一行不生成sql
 | 
			
		||||
                                                                       .ToList();
 | 
			
		||||
 | 
			
		||||
            //List<AccountModel> accountList=new List<AccountModel>();
 | 
			
		||||
            return accountList;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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,14 +184,13 @@ 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);
 | 
			
		||||
                    List<ChannelList> singleChannels = ChannelLsts.FindAll(it => it.BoardType != 1);
 | 
			
		||||
 | 
			
		||||
                    _portUtil.WindowName = "DrawerAddDrugWindow";
 | 
			
		||||
                    _portUtil.WindowName = "AddDrugControl";
 | 
			
		||||
                    _portUtil.Operate = true;
 | 
			
		||||
                    _portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
 | 
			
		||||
                    _portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray();
 | 
			
		||||
| 
						 | 
				
			
			@ -300,8 +295,8 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                                    OperationTime = DateTime.Now,
 | 
			
		||||
                                    Quantity = it.AddQuantity,
 | 
			
		||||
                                    Type = 1,
 | 
			
		||||
                                    InvoiceId = InvoiceId,
 | 
			
		||||
                                    StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                                    InvoiceId = InvoiceId
 | 
			
		||||
                                    //,StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                                }).ExecuteCommand();
 | 
			
		||||
                            }
 | 
			
		||||
                            return true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,611 @@
 | 
			
		|||
using DM_Weight.Common;
 | 
			
		||||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using DM_Weight.Report;
 | 
			
		||||
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;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Collections.ObjectModel;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class AddReportDateViewModel : 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);
 | 
			
		||||
        //    }
 | 
			
		||||
 | 
			
		||||
        //查询9种药品 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        IDialogService _dialogService;
 | 
			
		||||
        private ObservableCollection<RejectionReport> _rejectionReportList = new ObservableCollection<RejectionReport>();//= staticRejectionReportList;
 | 
			
		||||
        public ObservableCollection<RejectionReport> RejectionReportList
 | 
			
		||||
        {
 | 
			
		||||
            get => _rejectionReportList;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _rejectionReportList, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //public static AddReportDateViewModel vm;
 | 
			
		||||
        //操作人(第一个人)
 | 
			
		||||
        private List<UserList> _sendUserList = new List<UserList>();
 | 
			
		||||
        public List<UserList> SendUserList
 | 
			
		||||
        {
 | 
			
		||||
            get => _sendUserList;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _sendUserList, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private UserList _sendUser = new UserList();
 | 
			
		||||
        public UserList SendUser
 | 
			
		||||
        {
 | 
			
		||||
            get => _sendUser;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _sendUser, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //复核人(第二个人)
 | 
			
		||||
        private List<UserList> _sendUserCheckList = new List<UserList>();
 | 
			
		||||
        public List<UserList> SendUserCheckList
 | 
			
		||||
        {
 | 
			
		||||
            get => _sendUserCheckList;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _sendUserCheckList, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private UserList _sendUserCheck = new UserList();
 | 
			
		||||
        public UserList SendUserCheck
 | 
			
		||||
        {
 | 
			
		||||
            get => _sendUserCheck;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _sendUserCheck, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //还药人 
 | 
			
		||||
        private List<UserList> _returnUserList = new List<UserList>();
 | 
			
		||||
        public List<UserList> ReturnUserList
 | 
			
		||||
        {
 | 
			
		||||
            get => _returnUserList;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _returnUserList, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private UserList _returnUser = new UserList();
 | 
			
		||||
        public UserList ReturnUser
 | 
			
		||||
        {
 | 
			
		||||
            get => _returnUser;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _returnUser, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //还药(第二个人)接收者
 | 
			
		||||
        private List<UserList> _returnUserCheckList = new List<UserList>();
 | 
			
		||||
        public List<UserList> ReturnUserCheckList
 | 
			
		||||
        {
 | 
			
		||||
            get => _returnUserCheckList;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _returnUserCheckList, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private UserList _returnUserCheck = new UserList();
 | 
			
		||||
        public UserList ReturnUserCheck
 | 
			
		||||
        {
 | 
			
		||||
            get => _returnUserCheck;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _returnUserCheck, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //补充者 
 | 
			
		||||
        private List<UserList> _addUserList = new List<UserList>();
 | 
			
		||||
        public List<UserList> AddUserList
 | 
			
		||||
        {
 | 
			
		||||
            get => _addUserList;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _addUserList, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private UserList _addUser = new UserList();
 | 
			
		||||
        public UserList AddUser
 | 
			
		||||
        {
 | 
			
		||||
            get => _addUser;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _addUser, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //补充者(第二个人)核对者
 | 
			
		||||
        private List<UserList> _addUserCheckList = new List<UserList>();
 | 
			
		||||
        public List<UserList> AddUserCheckList
 | 
			
		||||
        {
 | 
			
		||||
            get => _addUserCheckList;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _addUserCheckList, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private UserList _addUserCheck = new UserList();
 | 
			
		||||
        public UserList AddUserCheck
 | 
			
		||||
        {
 | 
			
		||||
            get => _addUserCheck;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _addUserCheck, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //private RejectionReport _Report = new RejectionReport() { SendDate = DateTime.Now, ReturnTime = DateTime.Now.ToString(), };
 | 
			
		||||
        //public RejectionReport RejReport
 | 
			
		||||
        //{
 | 
			
		||||
        //    get => _Report;
 | 
			
		||||
        //    set
 | 
			
		||||
        //    {
 | 
			
		||||
        //        SetProperty(ref _Report, value);
 | 
			
		||||
        //    }
 | 
			
		||||
        //}
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        public AddReportDateViewModel(IEventAggregator eventAggregator, IDialogService DialogService)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
            _dialogService = DialogService;
 | 
			
		||||
            //vm = this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //private List<DrugInfo> _drugInfos;
 | 
			
		||||
        //public List<DrugInfo> DrugInfos
 | 
			
		||||
        //{
 | 
			
		||||
        //    get { return _drugInfos; }
 | 
			
		||||
        //    set { SetProperty(ref _drugInfos, value); }
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //private DrugInfo _selectedDrug = new();
 | 
			
		||||
        //public DrugInfo SelectedDrug
 | 
			
		||||
        //{
 | 
			
		||||
        //    get
 | 
			
		||||
        //    {
 | 
			
		||||
        //        return _selectedDrug;
 | 
			
		||||
        //    }
 | 
			
		||||
        //    set
 | 
			
		||||
        //    {
 | 
			
		||||
 | 
			
		||||
        //        if (value != null)
 | 
			
		||||
        //        {
 | 
			
		||||
        //            SetProperty(ref _selectedDrug, value);
 | 
			
		||||
        //            GetManuNos();
 | 
			
		||||
        //        }
 | 
			
		||||
        //        else
 | 
			
		||||
        //        {
 | 
			
		||||
        //            SetProperty(ref _selectedDrug, new());
 | 
			
		||||
        //            Manunos = null;
 | 
			
		||||
        //            SelectedDrug.drugBase = new();
 | 
			
		||||
        //        }
 | 
			
		||||
 | 
			
		||||
        //    }
 | 
			
		||||
        //}
 | 
			
		||||
        //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 OrderTakeSelect _selectedItem = StaticSelects[0];
 | 
			
		||||
        ///// <summary>
 | 
			
		||||
        ///// 查询条件 查询字段
 | 
			
		||||
        ///// </summary>
 | 
			
		||||
        //public OrderTakeSelect SelectedItem
 | 
			
		||||
        //{
 | 
			
		||||
        //    get { return _selectedItem; }
 | 
			
		||||
        //    set
 | 
			
		||||
        //    {
 | 
			
		||||
        //        SetProperty(ref _selectedItem, value);
 | 
			
		||||
        //        RequestData();
 | 
			
		||||
        //    }
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //private string? _searchValue;
 | 
			
		||||
 | 
			
		||||
        ///// <summary>
 | 
			
		||||
        ///// 查询条件 查询字段值
 | 
			
		||||
        ///// </summary>
 | 
			
		||||
        //public string? SearchValue
 | 
			
		||||
        //{
 | 
			
		||||
        //    get { return _searchValue; }
 | 
			
		||||
        //    set
 | 
			
		||||
        //    {
 | 
			
		||||
        //        SetProperty(ref _searchValue, value);
 | 
			
		||||
        //        RequestData();
 | 
			
		||||
        //    }
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private List<DrugManuNo> _manunos;
 | 
			
		||||
        public List<DrugManuNo> Manunos
 | 
			
		||||
        {
 | 
			
		||||
            get { return _manunos; }
 | 
			
		||||
            set { SetProperty(ref _manunos, value); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private DrugManuNo _selectedManuno = new DrugManuNo();
 | 
			
		||||
        public DrugManuNo SelectedManuno
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selectedManuno; }
 | 
			
		||||
            set { SetProperty(ref _selectedManuno, value ?? new()); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
 | 
			
		||||
        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);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //发药时间
 | 
			
		||||
        private DateTime _sendDate = DateTime.Now;
 | 
			
		||||
 | 
			
		||||
        public DateTime SendDate
 | 
			
		||||
        {
 | 
			
		||||
            get => _sendDate;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _sendDate, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //还药时间
 | 
			
		||||
        private string _returnTime = string.Empty;
 | 
			
		||||
        public string ReturnTime
 | 
			
		||||
        {
 | 
			
		||||
            get => _returnTime;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _returnTime, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        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);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //修改药品
 | 
			
		||||
        public DelegateCommand EditDrugName
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(async () =>
 | 
			
		||||
            {
 | 
			
		||||
                // 此处延时1毫秒,等待页面渲染
 | 
			
		||||
                await Task.Delay(TimeSpan.FromMilliseconds(1));
 | 
			
		||||
                DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                //dialogParameters.Add("orderInfo", SelectedOrder);
 | 
			
		||||
                DialogServiceExtensions.ShowDialogHost(_dialogService, "ReportDrugNameDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        private void DoDialogResult(IDialogResult dialogResult)
 | 
			
		||||
        {
 | 
			
		||||
            // 委托   被动执行     被子窗口执行
 | 
			
		||||
            // dialogResult  第一方面可以拿到任意参数   第二方面   可判断关闭状态
 | 
			
		||||
            //if(dialogResult.Result == ButtonResult.OK)
 | 
			
		||||
            //{
 | 
			
		||||
 | 
			
		||||
            GetAllDrugInfos();
 | 
			
		||||
            //}
 | 
			
		||||
            //MessageBox.Show("返回值:" + dialogResult.Result.ToString());
 | 
			
		||||
        }
 | 
			
		||||
        public DelegateCommand Download
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                GridReportUtil.RejectionReport(StartDate, EndDate);
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        public DelegateCommand AddReportDateCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                    {
 | 
			
		||||
                        if (RejectionReportList != null && RejectionReportList.Count > 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            int iRet = 0;
 | 
			
		||||
                            for (int i = 0; i < RejectionReportList.Count; i++)
 | 
			
		||||
                            {
 | 
			
		||||
                                RejectionReport report = RejectionReportList[i];
 | 
			
		||||
                                iRet = SqlSugarHelper.Db.Insertable(new RejectionReport()
 | 
			
		||||
                                {
 | 
			
		||||
                                    SendDate = SendDate,
 | 
			
		||||
                                    SendUser = SendUser.Nickname,
 | 
			
		||||
                                    ReceiveUser = SendUserCheck.Nickname,//Jiaojie_ChannelStocks
 | 
			
		||||
                                    RealNum = report.RealNum,   //实发、实物、空安瓿三个值一样,要求写一个即可避免他们重复输入
 | 
			
		||||
                                    ReturnTime = ReturnTime,
 | 
			
		||||
                                    ReturnUser = ReturnUser.UserName,
 | 
			
		||||
                                    ReturnReceiveUser = ReturnUserCheck.Nickname,//Jiaojie_ChannelStocks
 | 
			
		||||
                                    InfactNum = report.RealNum,
 | 
			
		||||
                                    EmptyNum = report.RealNum,
 | 
			
		||||
                                    AddUser = AddUser.UserName,
 | 
			
		||||
                                    AddCheckUser = AddUserCheck.Nickname,//Jiaojie_ChannelStocks
 | 
			
		||||
                                    UseBottle = report.UseBottle,
 | 
			
		||||
                                    UseOrderNo = report.UseOrderNo,
 | 
			
		||||
                                    UseAdd = report.UseAdd,
 | 
			
		||||
                                    DrugId = report.DrugId,
 | 
			
		||||
                                    DrugName = report.DrugName,
 | 
			
		||||
                                    DrugSpec = report.DrugSpec,
 | 
			
		||||
                                    BaseNum = report.BaseNum + "支",
 | 
			
		||||
                                    OperationTime = DateTime.Now
 | 
			
		||||
                                }).ExecuteCommand();
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                            {
 | 
			
		||||
                                Message = "请输入数据",
 | 
			
		||||
                                Type = MsgType.ERROR
 | 
			
		||||
                            };
 | 
			
		||||
                            _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                            return false;
 | 
			
		||||
                        }
 | 
			
		||||
                        return true;
 | 
			
		||||
                    });
 | 
			
		||||
                    if (f.Data)
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "保存成功",
 | 
			
		||||
                            Type = MsgType.INFO
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
                    if (!f.IsSuccess)
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "日消耗保存失败,数据异常",
 | 
			
		||||
                            Type = MsgType.ERROR
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "日消耗保存失败,抛出异常",
 | 
			
		||||
                        Type = MsgType.ERROR
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        //这个方法用于拦截请求,continuationCallback(true)就是不拦截,continuationCallback(false)拦截本次操作
 | 
			
		||||
        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
 | 
			
		||||
        {
 | 
			
		||||
            continuationCallback(true);
 | 
			
		||||
        }
 | 
			
		||||
        //public void UpdateComboBoxItems(string text)
 | 
			
		||||
        //{
 | 
			
		||||
        //    string str = @"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,
 | 
			
		||||
        //                d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
 | 
			
		||||
        //    if (string.IsNullOrEmpty(text))
 | 
			
		||||
        //    {
 | 
			
		||||
        //        DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
        //        return;
 | 
			
		||||
        //    }
 | 
			
		||||
        //    if (DrugInfos != null)
 | 
			
		||||
        //    {
 | 
			
		||||
        //        DrugInfos.Clear();
 | 
			
		||||
        //    }
 | 
			
		||||
        //    DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).Where(di => di.DrugName.Contains(text) || di.PyCode.Contains(text)).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //接收导航传过来的参数
 | 
			
		||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            //查询表格数据
 | 
			
		||||
            //RequestData();
 | 
			
		||||
            //获取用户数据
 | 
			
		||||
            GetUsers();
 | 
			
		||||
            GetAllDrugInfos();
 | 
			
		||||
        }
 | 
			
		||||
        private void GetAllDrugInfos()
 | 
			
		||||
        {
 | 
			
		||||
            //var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
            //DrugInfos = list;
 | 
			
		||||
            string str = "SELECT d.drug_id,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec,db.baseQuantity as PyCode FROM `drug_info` d left join drug_base db on d.drug_id=db.drugid and db.machine_id='DM3'";
 | 
			
		||||
            if (ConfigurationManager.AppSettings["DrugNames"] != null)
 | 
			
		||||
            {
 | 
			
		||||
                str += " where d.drug_id in (" + CommonClass.ReadAppSetting("DrugNames") + ")";
 | 
			
		||||
            }
 | 
			
		||||
            List<DrugInfo> DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
            if (DrugInfos != null && DrugInfos.Count > 0)
 | 
			
		||||
            {
 | 
			
		||||
                RejectionReportList.Clear();
 | 
			
		||||
                for (int i = 0; i < DrugInfos.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    RejectionReport report = new RejectionReport();
 | 
			
		||||
                    report.DrugId = DrugInfos[i].DrugId;
 | 
			
		||||
                    report.DrugName = DrugInfos[i].DrugName;
 | 
			
		||||
                    report.DrugSpec = DrugInfos[i].DrugSpec;
 | 
			
		||||
                    report.InfactNum = 0;
 | 
			
		||||
                    report.RealNum = 0;
 | 
			
		||||
                    report.BaseNum = DrugInfos[i].PyCode;
 | 
			
		||||
                    RejectionReportList.Add(report);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //void GetManuNos()
 | 
			
		||||
        //{
 | 
			
		||||
        //    Manunos = SqlSugarHelper.Db.Queryable<DrugManuNo>()
 | 
			
		||||
        //        .WhereIF(SelectedDrug != null, (di) => di.DrugId.Equals(SelectedDrug.DrugId))
 | 
			
		||||
        //        .Select(di => di)
 | 
			
		||||
        //        .ToList();
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //void RequestData()
 | 
			
		||||
        //{
 | 
			
		||||
        //    int totalCount = 0;
 | 
			
		||||
        //    DrugInfos = SqlSugarHelper.Db.Queryable<DrugInfo>()
 | 
			
		||||
        //        .Includes(di => di.drugBase)
 | 
			
		||||
        //        .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (di) => di.DrugId.ToString().Contains(SearchValue))
 | 
			
		||||
        //        .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (di) => di.DrugName.Contains(SearchValue))
 | 
			
		||||
        //        .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (di) => di.PyCode.Contains(SearchValue))
 | 
			
		||||
        //        .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (di) => di.DrugBarcode.Contains(SearchValue))
 | 
			
		||||
        //        //.Select(di => di)
 | 
			
		||||
        //        .ToPageList(PageNum, PageSize, ref totalCount);
 | 
			
		||||
        //    foreach (DrugInfo di in DrugInfos)
 | 
			
		||||
        //    {
 | 
			
		||||
 | 
			
		||||
        //        if (di.drugBase == null)
 | 
			
		||||
        //        {
 | 
			
		||||
        //            di.drugBase = new DrugBase();
 | 
			
		||||
        //        }
 | 
			
		||||
        //    }
 | 
			
		||||
 | 
			
		||||
        //    TotalCount = totalCount;
 | 
			
		||||
        //    PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        void GetUsers()
 | 
			
		||||
        {
 | 
			
		||||
            //获取用户数据
 | 
			
		||||
            SendUserList = SqlSugarHelper.Db.Queryable<UserList>()
 | 
			
		||||
                .Where(u => u.MachineId.Equals(ConfigurationManager.AppSettings["machineId"]))
 | 
			
		||||
                .ToList();
 | 
			
		||||
            //获取用户数据
 | 
			
		||||
            SendUserCheckList = SendUserList.Select(item => (UserList)item.Clone()).ToList();
 | 
			
		||||
 | 
			
		||||
            ReturnUserList = SendUserList.Select(item => (UserList)item.Clone()).ToList();
 | 
			
		||||
 | 
			
		||||
            ReturnUserCheckList = SendUserList.Select(item => (UserList)item.Clone()).ToList();
 | 
			
		||||
 | 
			
		||||
            AddUserList = SendUserList.Select(item => (UserList)item.Clone()).ToList();
 | 
			
		||||
 | 
			
		||||
            AddUserCheckList = SendUserList.Select(item => (UserList)item.Clone()).ToList();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //每次导航的时候,该实列用不用重新创建,true是不重新创建,false是重新创建
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //这个方法用于拦截请求
 | 
			
		||||
        public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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 = 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 == 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 = 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 == 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 = 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());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,572 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using log4net;
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class AddToJiaoJieDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private List<ChannelStock> _channelStocks = new List<ChannelStock>();
 | 
			
		||||
 | 
			
		||||
        public List<ChannelStock> ChannelStocks
 | 
			
		||||
        {
 | 
			
		||||
            get => _channelStocks;
 | 
			
		||||
            set => SetProperty(ref _channelStocks, value);
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 交接柜的库位信息
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private List<ChannelStock> _jiaojie_channelStocks;
 | 
			
		||||
 | 
			
		||||
        public List<ChannelStock> Jiaojie_ChannelStocks
 | 
			
		||||
        {
 | 
			
		||||
            get => _jiaojie_channelStocks;
 | 
			
		||||
            set => SetProperty(ref _jiaojie_channelStocks, value);
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 交接柜的库位信息
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private ChannelStock _jiaojei_cs;
 | 
			
		||||
 | 
			
		||||
        public ChannelStock Jiaojie_cs
 | 
			
		||||
        {
 | 
			
		||||
            get => _jiaojei_cs;
 | 
			
		||||
            set => SetProperty(ref _jiaojei_cs, value);
 | 
			
		||||
        }
 | 
			
		||||
        private static readonly DateTime Jan1st1970 = new DateTime
 | 
			
		||||
   (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
 | 
			
		||||
 | 
			
		||||
        private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
 | 
			
		||||
        private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public string Title => "交接柜补药";
 | 
			
		||||
 | 
			
		||||
        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);
 | 
			
		||||
            Jiaojie_ChannelStocks = parameters.GetValue<List<ChannelStock>>("ChannelStocks");
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < Jiaojie_ChannelStocks.Count; i++)
 | 
			
		||||
            {
 | 
			
		||||
                ChannelStock copy = TransExpV2<ChannelStock, ChannelStock>.Trans(Jiaojie_ChannelStocks[i]);
 | 
			
		||||
                ChannelStocks.Add(copy);
 | 
			
		||||
            }
 | 
			
		||||
            ChannelStocks = Jiaojie_ChannelStocks.GroupBy(cs => cs.DrugId).Select(g => new
 | 
			
		||||
            {
 | 
			
		||||
                DrugId = g.Key,
 | 
			
		||||
                AddQuantity = g.Sum(s => s.AddQuantity)
 | 
			
		||||
            }).Select(cs => new ChannelStock() { DrugId = cs.DrugId, AddQuantity = cs.AddQuantity }).ToList();
 | 
			
		||||
            RequestData();
 | 
			
		||||
            drawerAuthority = HomeWindowViewModel.Operator.Role.drawer;
 | 
			
		||||
            if (!string.IsNullOrEmpty(drawerAuthority))
 | 
			
		||||
            {
 | 
			
		||||
                drawerAuthorityList = drawerAuthority.Split(',');
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        string drawerAuthority = string.Empty;
 | 
			
		||||
        string[] drawerAuthorityList;
 | 
			
		||||
        private PortUtil _portUtil;
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        IDialogService _dialogService;
 | 
			
		||||
        public AddToJiaoJieDialogViewModel(PortUtil portUtil, IEventAggregator eventAggregator, IDialogService DialogService)
 | 
			
		||||
        {
 | 
			
		||||
            _dialogService = DialogService;
 | 
			
		||||
            _portUtil = portUtil;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
        void DoMyPrismEvent(DeviceMsg msg)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            if (msg.WindowName == "OrderTakeDrugWindow")
 | 
			
		||||
            {
 | 
			
		||||
                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);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        //是冰箱抽屉则开冰箱抽屉时发送延迟报警指令
 | 
			
		||||
                        CheckIsFridgeOpen();
 | 
			
		||||
                        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;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        //是冰箱抽屉则开冰箱抽屉时发送延迟报警指令
 | 
			
		||||
                        CheckIsFridgeClose();
 | 
			
		||||
                        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 int _status = 0;
 | 
			
		||||
 | 
			
		||||
        public int Status
 | 
			
		||||
        {
 | 
			
		||||
            get => _status; set => SetProperty(ref _status, value);
 | 
			
		||||
        }
 | 
			
		||||
        public async void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            List<ChannelStock> channelStocks = new List<ChannelStock>();
 | 
			
		||||
            List<string> msg = new List<string>();
 | 
			
		||||
            for (int i = 0; i < ChannelStocks.Count; i++)
 | 
			
		||||
            {
 | 
			
		||||
                List<ChannelStock> HasQChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                    .Includes<DrugInfo>(cs => cs.DrugInfo)
 | 
			
		||||
                    .Where(cs => cs.Quantity > 0)
 | 
			
		||||
                    .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                    .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                    .Where(cs => cs.DrugId == ChannelStocks[i].DrugId)
 | 
			
		||||
                    .OrderBy(cs => cs.EffDate)
 | 
			
		||||
                    .OrderBy(cs => cs.DrawerNo)
 | 
			
		||||
                    .ToList();
 | 
			
		||||
                if (HasQChannels == null || HasQChannels.Count <= 0)
 | 
			
		||||
                {
 | 
			
		||||
                    msg.Add($"有药品未绑定,请先绑定");
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                int total = HasQChannels.Sum(it => it.Quantity);
 | 
			
		||||
                int TakeQ = ChannelStocks[i].AddQuantity;
 | 
			
		||||
                // 说明数量足够
 | 
			
		||||
                if (total >= TakeQ)
 | 
			
		||||
                {
 | 
			
		||||
                    for (int j = 0; TakeQ > 0; j++)
 | 
			
		||||
                    {
 | 
			
		||||
                        ChannelStock stock = HasQChannels[j];
 | 
			
		||||
                        if (TakeQ > stock.Quantity)
 | 
			
		||||
                        {
 | 
			
		||||
                            stock.TakeQuantity = stock.Quantity;
 | 
			
		||||
                            channelStocks.Add(stock);
 | 
			
		||||
                            TakeQ -= stock.Quantity;
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            stock.TakeQuantity = TakeQ;
 | 
			
		||||
                            channelStocks.Add(stock);
 | 
			
		||||
                            TakeQ = 0;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    msg.Add($"药品【{HasQChannels[0].DrugInfo.DrugName}】库存不足,应取【{TakeQ}】库存【{total}】");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            if (msg.Count > 0)
 | 
			
		||||
            {
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
                //MessageBox.Show(string.Join("\n", msg));
 | 
			
		||||
                DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                dialogParameters.Add("msgInfo", msg);
 | 
			
		||||
                DialogServiceExtensions.ShowDialogHost(_dialogService, "ShowMessageDialog", dialogParameters, "RootDialog");
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                channelStocks.Sort((a, b) =>
 | 
			
		||||
                {
 | 
			
		||||
                    if ((a.DrawerNo - b.DrawerNo) == 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        return a.ColNo - b.ColNo;
 | 
			
		||||
                    }
 | 
			
		||||
                    return a.DrawerNo - b.DrawerNo;
 | 
			
		||||
                });
 | 
			
		||||
                ChannelStocks = channelStocks;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public DelegateCommand OpenDrawer
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(async () =>
 | 
			
		||||
            {
 | 
			
		||||
                if (Status == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    //if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开,其他6层管理员才能开
 | 
			
		||||
                    //    bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
 | 
			
		||||
                    //    if (bDrawer)
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    //        {
 | 
			
		||||
                    //            Message = "当前用户没有打开抽屉的权限!",
 | 
			
		||||
                    //            Type = MsgType.ERROR,
 | 
			
		||||
                    //        };
 | 
			
		||||
                    //        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    //        return;
 | 
			
		||||
                    //    }
 | 
			
		||||
 | 
			
		||||
                    //}
 | 
			
		||||
                    enumerable = ChannelStocks.GroupBy(cs => cs.DrawerNo, cs => cs);
 | 
			
		||||
                    enumerator = enumerable.GetEnumerator();
 | 
			
		||||
                    enumerator.MoveNext();
 | 
			
		||||
                    Status = 1;
 | 
			
		||||
                    OpenOneByOne();
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void OpenOneByOne()
 | 
			
		||||
        {
 | 
			
		||||
            IGrouping<int, ChannelStock> grouping = enumerator.Current;
 | 
			
		||||
            int DrawerNo = grouping.Key;
 | 
			
		||||
            bool hasAuthority=Array.Exists(drawerAuthorityList, element => element == DrawerNo.ToString());
 | 
			
		||||
            if(!hasAuthority)
 | 
			
		||||
            {
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = $"当前用户没有打开{DrawerNo}号抽屉的权限!",
 | 
			
		||||
                    Type = MsgType.ERROR,
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            List<ChannelStock> channelStocks = grouping.ToList();
 | 
			
		||||
            channelStocks.ForEach(it => it.process = 1);
 | 
			
		||||
            _portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            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 = "OrderTakeDrugWindow";
 | 
			
		||||
            _portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
 | 
			
		||||
            _portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray();
 | 
			
		||||
            _portUtil.DrawerNo = DrawerNo;
 | 
			
		||||
            _portUtil.Start();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private bool _isFinishClick = false;
 | 
			
		||||
        // 完成按钮
 | 
			
		||||
        public DelegateCommand TakeFinish
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (!_isFinishClick)
 | 
			
		||||
                {
 | 
			
		||||
                    _isFinishClick = true;
 | 
			
		||||
                    List<ChannelStock> record = ChannelStocks.FindAll(it => it.TakeQuantity > 0).ToList();
 | 
			
		||||
                    if (record.Count > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        string InvoiceId = "AddJiaoJie_" + CurrentTimeMillis();
 | 
			
		||||
                        var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                        {
 | 
			
		||||
                            for (int i = 0; i < record.Count; i++)
 | 
			
		||||
                            {
 | 
			
		||||
                                ChannelStock it = record[i];
 | 
			
		||||
                                // 更新数据 库存信息
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                                {
 | 
			
		||||
                                    Quantity = it.Quantity - it.TakeQuantity,
 | 
			
		||||
                                    ManuNo = it.ManuNo,
 | 
			
		||||
                                    EffDate = it.EffDate,
 | 
			
		||||
                                    Id = it.Id,
 | 
			
		||||
                                }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                                //更新 交接柜 库存信息
 | 
			
		||||
                                //List<ChannelStock> jiaojie = Jiaojie_ChannelStocks.Where(cs => cs.DrugId == it.DrugId).ToList();
 | 
			
		||||
                                //if (jiaojie != null && jiaojie.Count > 0)
 | 
			
		||||
                                //{
 | 
			
		||||
                                //    for (int j = 0; j < jiaojie.Count; j++)
 | 
			
		||||
                                //    {
 | 
			
		||||
                                //        // 更新数据 交接柜 库存信息
 | 
			
		||||
                                //        ChannelStock jiaojie_it = jiaojie[j];
 | 
			
		||||
                                //        SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                                //        {
 | 
			
		||||
                                //            Quantity = jiaojie_it.BaseQuantity,
 | 
			
		||||
                                //            //ManuNo = it.ManuNo,
 | 
			
		||||
                                //            //EffDate = it.EffDate,
 | 
			
		||||
                                //            Id = jiaojie_it.Id,
 | 
			
		||||
                                //        }).UpdateColumns(jiaojie_it => new { jiaojie_it.Quantity }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                                //        //更新交接柜状态为 已取药未入库
 | 
			
		||||
                                //        SqlSugarHelper.Db.Updateable(new ChannelList()
 | 
			
		||||
                                //        {
 | 
			
		||||
                                //            State=1,
 | 
			
		||||
                                //            Id=jiaojie_it.ChannelLst.Id
 | 
			
		||||
                                //        }).UpdateColumns(it => it.State).ExecuteCommand();
 | 
			
		||||
                                //    }
 | 
			
		||||
                                //}
 | 
			
		||||
 | 
			
		||||
                                // 保存数据 出库记录
 | 
			
		||||
                                SqlSugarHelper.Db.Insertable(new MachineRecord()
 | 
			
		||||
                                {
 | 
			
		||||
                                    MachineId = it.MachineId,
 | 
			
		||||
                                    DrawerNo = it.DrawerNo,
 | 
			
		||||
                                    ColNo = it.ColNo,
 | 
			
		||||
                                    DrugId = it.DrugId,
 | 
			
		||||
                                    ManuNo = it.ManuNo,
 | 
			
		||||
                                    EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                                    Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                                    Reviewer = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                                    OperationTime = DateTime.Now,
 | 
			
		||||
                                    Quantity = it.TakeQuantity,
 | 
			
		||||
                                    Type = 2,
 | 
			
		||||
                                    Status = 2,//给交接柜补药不用还空瓶,等真正用了以后再还空瓶,所以先把状态置为2
 | 
			
		||||
                                    InvoiceId = InvoiceId
 | 
			
		||||
                                }).ExecuteCommand();
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            //保存注射剂报表信息
 | 
			
		||||
                            for (int j = 0; j < Jiaojie_ChannelStocks.Count; j++)
 | 
			
		||||
                            {
 | 
			
		||||
                                ChannelStock jStock = Jiaojie_ChannelStocks[j];
 | 
			
		||||
                                if (jStock.DrugInfo.Dosage == "注射剂")
 | 
			
		||||
                                {
 | 
			
		||||
                                    int totalBaseNum = SqlSugarHelper.Db.Queryable<DrugBase>().
 | 
			
		||||
                                                        Where(db => db.DrugId == jStock.DrugId && db.MachineId == (ConfigurationManager.AppSettings["machineId"] ?? "DM3")).Select(db => db.BaseQuantity).First();
 | 
			
		||||
 | 
			
		||||
                                    string belognUser = SqlSugarHelper.Db.Queryable<ChannelList>().
 | 
			
		||||
                                                        Where(cl => cl.DrawerNo == jStock.DrawerNo && cl.MachineId == jStock.MachineId).Select(cl => cl.BelongUser).First();
 | 
			
		||||
                                    DrugInfo di = SqlSugarHelper.Db.Queryable<DrugInfo>().Where(di => di.DrugId == jStock.DrugId).First();
 | 
			
		||||
                                    SqlSugarHelper.Db.Insertable(new RejectionReport()
 | 
			
		||||
                                    {
 | 
			
		||||
                                        SendDate = DateTime.Parse(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm")),
 | 
			
		||||
                                        SendUser = HomeWindowViewModel.Operator?.Nickname,
 | 
			
		||||
                                        ReceiveUser = belognUser,//Jiaojie_ChannelStocks
 | 
			
		||||
                                        DrugId = jStock.DrugId,
 | 
			
		||||
                                        DrugName = di.DrugName,
 | 
			
		||||
                                        DrugSpec = di.DrugSpec,
 | 
			
		||||
                                        BaseNum = totalBaseNum + "支",//总基数
 | 
			
		||||
                                        DrawerNo = jStock.DrawerNo
 | 
			
		||||
                                    }).ExecuteCommand();
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            //更新交接柜状态为 已取药未入库(等在交接柜入库后再更新交接柜库存)
 | 
			
		||||
                            List<ChannelStock> jiaojie = Jiaojie_ChannelStocks.GroupBy(cs => cs.DrawerNo).Select(cs => cs.FirstOrDefault()).ToList();
 | 
			
		||||
                            if (jiaojie != null && jiaojie.Count > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                for (int j = 0; j < jiaojie.Count; j++)
 | 
			
		||||
                                {
 | 
			
		||||
                                    ChannelStock jiaojie_it = jiaojie[j];
 | 
			
		||||
                                    //更新交接柜状态为 已取药未入库
 | 
			
		||||
                                    SqlSugarHelper.Db.Updateable(new ChannelList()
 | 
			
		||||
                                    {
 | 
			
		||||
                                        State = 1,
 | 
			
		||||
                                        Id = jiaojie_it.ChannelLst.Id
 | 
			
		||||
                                    }).UpdateColumns(it => it.State).ExecuteCommand();
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            return true;
 | 
			
		||||
                        });
 | 
			
		||||
                        if (f.Data)
 | 
			
		||||
                        {
 | 
			
		||||
                            // 更新屏显库存
 | 
			
		||||
                            List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType != 5);
 | 
			
		||||
                            if (singleChannels.Count > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                singleChannels.ForEach(it =>
 | 
			
		||||
                                {
 | 
			
		||||
                                    _portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity - it.TakeQuantity);
 | 
			
		||||
                                });
 | 
			
		||||
                            }
 | 
			
		||||
                            AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                            {
 | 
			
		||||
                                Message = "抽屉取药完成,库存已更新",
 | 
			
		||||
                                Type = MsgType.SUCCESS,
 | 
			
		||||
                            };
 | 
			
		||||
                            _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        }
 | 
			
		||||
                        if (!f.IsSuccess)
 | 
			
		||||
                        {
 | 
			
		||||
                            AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                            {
 | 
			
		||||
                                Message = "抽屉取药完成,库存更新失败!",
 | 
			
		||||
                                Type = MsgType.ERROR,
 | 
			
		||||
                            };
 | 
			
		||||
                            _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        }
 | 
			
		||||
                        Status = 0;
 | 
			
		||||
                        _isFinishClick = false;
 | 
			
		||||
                        //RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
                        RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        _isFinishClick = false;
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "没有填写取药数量",
 | 
			
		||||
                            Type = MsgType.ERROR
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public long CurrentTimeMillis()
 | 
			
		||||
        {
 | 
			
		||||
            return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 取消按钮
 | 
			
		||||
        public DelegateCommand CancleTake
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                _portUtil.ResetData();
 | 
			
		||||
                Status = 0;
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        //检查是否是冰箱抽屉(冰箱抽屉打开时需要发送冰箱延迟报警的指令)
 | 
			
		||||
        public async Task CheckIsFridgeOpen()
 | 
			
		||||
        {
 | 
			
		||||
            //if (ChannelStocks != null && ChannelStocks.Count > 0)
 | 
			
		||||
            //{
 | 
			
		||||
            //    if (_portUtil.BoardType == (Int32)BoardTypeEnum.fridge)
 | 
			
		||||
            //    {
 | 
			
		||||
            //        _portUtil.FridgeOperate = true;
 | 
			
		||||
            //        //发送冰箱延迟报警的指令
 | 
			
		||||
            //        await _portUtil.FridgeDelayWarm();
 | 
			
		||||
            //        _portUtil.FridgeOperate = false;
 | 
			
		||||
            //    }
 | 
			
		||||
            //}
 | 
			
		||||
        }
 | 
			
		||||
        //检查是否是冰箱抽屉(冰箱抽屉关闭时需要查询冰箱温度如温度不在范围则发送冰箱延迟报警的指令)
 | 
			
		||||
        public async Task CheckIsFridgeClose()
 | 
			
		||||
        {
 | 
			
		||||
            //if (ChannelStocks != null && ChannelStocks.Count > 0)
 | 
			
		||||
            //{
 | 
			
		||||
            //    if (_portUtil.BoardType == (Int32)BoardTypeEnum.fridge)
 | 
			
		||||
            //    {
 | 
			
		||||
            //        string[] iTempertureRange = ConfigurationManager.AppSettings["temperatureRange"].Split('-');
 | 
			
		||||
            //        //发送查询冰箱温度的指令
 | 
			
		||||
            //        float temperature = await _portUtil.GetFridgeTemperature();
 | 
			
		||||
            //        if (temperature > Convert.ToSingle(iTempertureRange[0]) && temperature < Convert.ToSingle(iTempertureRange[1]))
 | 
			
		||||
            //        {
 | 
			
		||||
            //            _portUtil.FridgeOperate = true;
 | 
			
		||||
            //            //发送冰箱延迟报警的指令
 | 
			
		||||
            //            await _portUtil.FridgeDelayWarm();
 | 
			
		||||
            //            _portUtil.FridgeOperate = false;
 | 
			
		||||
            //        }
 | 
			
		||||
            //    }
 | 
			
		||||
            //}
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand BtnCloseCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (Status != 0)
 | 
			
		||||
                {
 | 
			
		||||
                    _portUtil.ResetData();
 | 
			
		||||
                    Status = 0;
 | 
			
		||||
                }
 | 
			
		||||
                //DialogParameters parameters = new DialogParameters();
 | 
			
		||||
                //parameters.Add("",);
 | 
			
		||||
                // 关闭当前窗口
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,495 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using DM_Weight.Report;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using log4net;
 | 
			
		||||
using log4net.Repository.Hierarchy;
 | 
			
		||||
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.ComponentModel;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Data;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class AddToJiaoJieWindowViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ILog logger = LogManager.GetLogger(typeof(AddToJiaoJieWindowViewModel)); 
 | 
			
		||||
        private static readonly DateTime Jan1st1970 = new DateTime
 | 
			
		||||
   (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
 | 
			
		||||
        public long CurrentTimeMillis()
 | 
			
		||||
        {
 | 
			
		||||
            return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
 | 
			
		||||
        }
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            // 取消消息订阅
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
 | 
			
		||||
 | 
			
		||||
            _eventAggregator.GetEvent<IsSelectedEvent>().Unsubscribe(SetIsSelected);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private List<ChannelStock> channelStocks;
 | 
			
		||||
        public List<ChannelStock> ChannelStocks
 | 
			
		||||
        {
 | 
			
		||||
            get => channelStocks;
 | 
			
		||||
            set => SetProperty(ref channelStocks, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
			
		||||
 | 
			
		||||
            _eventAggregator.GetEvent<IsSelectedEvent>().Subscribe(SetIsSelected);
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
        private PortUtil _portUtil;
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        IDialogService _dialogService;
 | 
			
		||||
        public AddToJiaoJieWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator, IDialogService DialogService)
 | 
			
		||||
        {
 | 
			
		||||
            _portUtil = portUtil;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
            _dialogService = DialogService;
 | 
			
		||||
        }
 | 
			
		||||
        private void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            ChannelStocks = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                .Includes<ChannelList>(cs => cs.ChannelLst)
 | 
			
		||||
                .Includes<DrugInfo>(cs => cs.DrugInfo)
 | 
			
		||||
                .Where(cs => cs.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5") && cs.BaseQuantity > cs.Quantity)
 | 
			
		||||
                .OrderBy(cs => cs.Chnguid)
 | 
			
		||||
                .OrderBy(cs => cs.DrawerNo)
 | 
			
		||||
                .ToList();
 | 
			
		||||
            ChannelStocks.ForEach(cs => cs.AddQuantity = cs.BaseQuantity - cs.Quantity);
 | 
			
		||||
        }
 | 
			
		||||
        private int _status = 0;
 | 
			
		||||
 | 
			
		||||
        public int Status { get => _status; set => SetProperty(ref _status, value); }
 | 
			
		||||
 | 
			
		||||
        private bool _isEnable = true;
 | 
			
		||||
        public bool IsEnable { get => _isEnable; set => SetProperty(ref _isEnable, value); }
 | 
			
		||||
 | 
			
		||||
        private List<int> iDrawerNoLst
 | 
			
		||||
        { get; set; }
 | 
			
		||||
        private int CurrentNum { get; set; }
 | 
			
		||||
 | 
			
		||||
        //刷新
 | 
			
		||||
        public DelegateCommand QueryCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() => RequestData());
 | 
			
		||||
        }
 | 
			
		||||
        //一键补药
 | 
			
		||||
        public DelegateCommand OpenDragCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    Status = 1;
 | 
			
		||||
                    IsEnable = false;
 | 
			
		||||
 | 
			
		||||
                   var varDrawerNO = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                                  .Where(cs => cs.MachineId == (ConfigurationManager.AppSettings["machineId"] ??"DM3"))
 | 
			
		||||
                                  .GroupBy(cs=>cs.DrawerNo).Select(DrawerNo=>DrawerNo).ToList();
 | 
			
		||||
 | 
			
		||||
                    iDrawerNoLst= varDrawerNO.Select(item => item.DrawerNo).ToList();
 | 
			
		||||
                    CurrentNum = 0;
 | 
			
		||||
                    _portUtil.SpeakAsync($"正在打开 {iDrawerNoLst[CurrentNum]} 号抽屉");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    _portUtil.WindowName = "AddToJiaoJieWindow";
 | 
			
		||||
                    _portUtil.Operate = true;
 | 
			
		||||
                    //_portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
 | 
			
		||||
                    //_portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray();
 | 
			
		||||
                    _portUtil.DrawerNo = iDrawerNoLst[CurrentNum];
 | 
			
		||||
                    _portUtil.OpenAllDrawer();
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = $"补药异常{ex.Message}",
 | 
			
		||||
                        Type = MsgType.ERROR,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    logger.Info($"AddToJiaoJieWindowViewModel异常:{ex.Message}");
 | 
			
		||||
                    _portUtil.Operate = false;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        void DoMyPrismEvent(DeviceMsg msg)
 | 
			
		||||
        {
 | 
			
		||||
            if (msg.WindowName == "AddToJiaoJieWindow")
 | 
			
		||||
            {
 | 
			
		||||
                switch (msg.EventType)
 | 
			
		||||
                {
 | 
			
		||||
                    // 抽屉打开
 | 
			
		||||
                    case EventType.DRAWEROPEN:
 | 
			
		||||
                        if (Status == 1)
 | 
			
		||||
                        {
 | 
			
		||||
                            Status = 2;
 | 
			
		||||
                        }
 | 
			
		||||
                        CurrentNum+=1;
 | 
			
		||||
                        if (CurrentNum< iDrawerNoLst.Count)
 | 
			
		||||
                        {
 | 
			
		||||
                            _portUtil.WindowName = "AddToJiaoJieWindow";
 | 
			
		||||
                            _portUtil.Operate = true;
 | 
			
		||||
                            _portUtil.DrawerNo = iDrawerNoLst[CurrentNum];
 | 
			
		||||
                            _portUtil.OpenAllDrawer();
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            _portUtil.GetAllDrawerLockState();
 | 
			
		||||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
                    // 抽屉关闭
 | 
			
		||||
                    case EventType.DRAWERCLOSE:
 | 
			
		||||
                        if (Status == 2)
 | 
			
		||||
                        {
 | 
			
		||||
                            Status = 3;
 | 
			
		||||
                        }
 | 
			
		||||
                        _portUtil.Operate = false;
 | 
			
		||||
                        IsEnable=true;
 | 
			
		||||
                        CurrentNum = 0;
 | 
			
		||||
 | 
			
		||||
                        break;
 | 
			
		||||
                    // 数量变化
 | 
			
		||||
                    case EventType.UPDATEQUANTITY:
 | 
			
		||||
                        if (Status == 2)
 | 
			
		||||
                        {
 | 
			
		||||
                            ChannelStocks.ForEach(it => it.AddQuantity = msg.Quantitys[it.ColNo - 1]);
 | 
			
		||||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
                    // 打开失败
 | 
			
		||||
                    case EventType.OPENERROR:
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = msg.Message,
 | 
			
		||||
                            Type = MsgType.ERROR,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        Status = 0;
 | 
			
		||||
                        _portUtil.Operate = false;
 | 
			
		||||
                        IsEnable = false;
 | 
			
		||||
                        CurrentNum = 0;
 | 
			
		||||
                        break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        //完成按钮
 | 
			
		||||
        public DelegateCommand AddFinish
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if(ChannelStocks.FindAll(cs=>cs.ChannelLst.IsSelected).Count<=0)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "请选择药箱",
 | 
			
		||||
                        Type = MsgType.SUCCESS,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                List<ChannelStock> jiaojieStocks = new List<ChannelStock>();
 | 
			
		||||
                List<ChannelStock> cs = ChannelStocks.FindAll(cs => cs.ChannelLst.IsSelected).ToList();
 | 
			
		||||
                for (int i = 0; i < cs.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    ChannelStock copy = TransExpV2<ChannelStock, ChannelStock>.Trans(cs[i]);
 | 
			
		||||
                    jiaojieStocks.Add(copy);
 | 
			
		||||
                }
 | 
			
		||||
                csList = jiaojieStocks.FindAll(cs => cs.ChannelLst.IsSelected).GroupBy(cs => cs.DrugId).Select(g => new
 | 
			
		||||
                {
 | 
			
		||||
                    DrugId = g.Key,
 | 
			
		||||
                    AddQuantity = g.Sum(s => s.AddQuantity)
 | 
			
		||||
                }).Select(cs => new ChannelStock() { DrugId = cs.DrugId, AddQuantity = cs.AddQuantity }).ToList();
 | 
			
		||||
 | 
			
		||||
                List<ChannelStock> channelStocks = new List<ChannelStock>();
 | 
			
		||||
                List<string> msg = new List<string>();
 | 
			
		||||
                for (int i = 0; i < csList.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    List<ChannelStock> HasQChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                        .Includes<DrugInfo>(cs => cs.DrugInfo)
 | 
			
		||||
                        .Where(cs => cs.Quantity > 0)
 | 
			
		||||
                        .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                        .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                        .Where(cs => cs.DrugId == csList[i].DrugId)
 | 
			
		||||
                        .OrderBy(cs => cs.EffDate)
 | 
			
		||||
                        .OrderBy(cs => cs.DrawerNo)
 | 
			
		||||
                        .ToList();
 | 
			
		||||
                    int total = HasQChannels.Sum(it => it.Quantity);
 | 
			
		||||
                    int TakeQ = csList[i].AddQuantity;
 | 
			
		||||
                    // 说明数量足够
 | 
			
		||||
                    if (total >= TakeQ)
 | 
			
		||||
                    {
 | 
			
		||||
                        for (int j = 0; TakeQ > 0; j++)
 | 
			
		||||
                        {
 | 
			
		||||
                            ChannelStock stock = HasQChannels[j];
 | 
			
		||||
                            if (TakeQ > stock.Quantity)
 | 
			
		||||
                            {
 | 
			
		||||
                                stock.TakeQuantity = stock.Quantity;
 | 
			
		||||
                                channelStocks.Add(stock);
 | 
			
		||||
                                TakeQ -= stock.Quantity;
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                stock.TakeQuantity = TakeQ;
 | 
			
		||||
                                channelStocks.Add(stock);
 | 
			
		||||
                                TakeQ = 0;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        msg.Add($"药品【{ChannelStocks[i].DrugInfo.DrugName}】库存不足,应取【{TakeQ}】库存【{total}】");
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                if (msg.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                    dialogParameters.Add("msgInfo", msg);
 | 
			
		||||
                    DialogServiceExtensions.ShowDialogHost(_dialogService, "ShowMessageDialog", dialogParameters, "RootDialog");
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    channelStocks.Sort((a, b) =>
 | 
			
		||||
                    {
 | 
			
		||||
                        if ((a.DrawerNo - b.DrawerNo) == 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            return a.ColNo - b.ColNo;
 | 
			
		||||
                        }
 | 
			
		||||
                        return a.DrawerNo - b.DrawerNo;
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
                List<ChannelStock> record = channelStocks.FindAll(it => it.TakeQuantity > 0).ToList();
 | 
			
		||||
                if (record.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    string InvoiceId = "AddJiaoJie_" + CurrentTimeMillis();
 | 
			
		||||
                    var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                    {
 | 
			
		||||
                        for (int i = 0; i < record.Count; i++)
 | 
			
		||||
                        {
 | 
			
		||||
                            ChannelStock it = record[i];
 | 
			
		||||
                            // 更新数据 库存信息
 | 
			
		||||
                            SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                            {
 | 
			
		||||
                                Quantity = it.Quantity - it.TakeQuantity,
 | 
			
		||||
                                ManuNo = it.ManuNo,
 | 
			
		||||
                                EffDate = it.EffDate,
 | 
			
		||||
                                Id = it.Id,
 | 
			
		||||
                            }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                            //更新 交接柜 库存信息
 | 
			
		||||
                            List<ChannelStock> jiaojie = jiaojieStocks.Where(cs => cs.DrugId == it.DrugId).ToList();
 | 
			
		||||
                            if (jiaojie != null && jiaojie.Count > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                for (int j = 0; j < jiaojie.Count; j++)
 | 
			
		||||
                                {
 | 
			
		||||
                                    // 更新数据 交接柜 库存信息
 | 
			
		||||
                                    ChannelStock jiaojie_it = jiaojie[j];
 | 
			
		||||
                                    SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                                    {
 | 
			
		||||
                                        Quantity = jiaojie_it.BaseQuantity,
 | 
			
		||||
                                        //ManuNo = it.ManuNo,
 | 
			
		||||
                                        //EffDate = it.EffDate,
 | 
			
		||||
                                        Id = jiaojie_it.Id,
 | 
			
		||||
                                    }).UpdateColumns(jiaojie_it => new { jiaojie_it.Quantity }).ExecuteCommand();
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                            // 保存数据 出库记录
 | 
			
		||||
                            SqlSugarHelper.Db.Insertable(new MachineRecord()
 | 
			
		||||
                            {
 | 
			
		||||
                                MachineId = it.MachineId,
 | 
			
		||||
                                DrawerNo = it.DrawerNo,
 | 
			
		||||
                                ColNo = it.ColNo,
 | 
			
		||||
                                DrugId = it.DrugId,
 | 
			
		||||
                                ManuNo = it.ManuNo,
 | 
			
		||||
                                EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                                Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                                Reviewer = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                                OperationTime = DateTime.Now,
 | 
			
		||||
                                Quantity = it.TakeQuantity,
 | 
			
		||||
                                Type = 2,
 | 
			
		||||
                                InvoiceId = InvoiceId
 | 
			
		||||
                            }).ExecuteCommand();
 | 
			
		||||
                        }
 | 
			
		||||
                        return true;
 | 
			
		||||
                    });
 | 
			
		||||
                    if (f.Data)
 | 
			
		||||
                    {
 | 
			
		||||
                        // 更新屏显库存
 | 
			
		||||
                        List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType != 5);
 | 
			
		||||
                        if (singleChannels.Count > 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            singleChannels.ForEach(it =>
 | 
			
		||||
                            {
 | 
			
		||||
                                _portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity - it.TakeQuantity);
 | 
			
		||||
                            });
 | 
			
		||||
                        }
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "补药完成,库存已更新",
 | 
			
		||||
                            Type = MsgType.SUCCESS,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        RequestData();
 | 
			
		||||
                    }
 | 
			
		||||
                    if (!f.IsSuccess)
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "补药操作失败,库存更新失败!",
 | 
			
		||||
                            Type = MsgType.ERROR,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "补药数量有误",
 | 
			
		||||
                        Type = MsgType.ERROR
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //取消
 | 
			
		||||
        public DelegateCommand CancleAdd
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                _portUtil.ResetData();
 | 
			
		||||
                 Status = 0;
 | 
			
		||||
                IsEnable = true;
 | 
			
		||||
                CurrentNum = 0;
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //public DelegateCommand RejectReport_Download
 | 
			
		||||
        //{
 | 
			
		||||
        //    get => new DelegateCommand(() => {
 | 
			
		||||
        //        GridReportUtil.RejectionReport("");
 | 
			
		||||
        //    });
 | 
			
		||||
        //}
 | 
			
		||||
        public DelegateCommand Account_Download
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                GridReportUtil.AccountNewReport();
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private List<ChannelStock> csList = new List<ChannelStock>();
 | 
			
		||||
        //取药 弹出出药列表
 | 
			
		||||
        public DelegateCommand TakeDrugCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(async () =>
 | 
			
		||||
            {
 | 
			
		||||
                //选中channelStock.channel_list的isSelected则选中channelStock的isSelected
 | 
			
		||||
                //var o= ChannelStocks.FindAll(cs => cs.ChannelLst.IsSelected).ToList();
 | 
			
		||||
 | 
			
		||||
                //csList = ChannelStocks.FindAll(cs => cs.ChannelLst.IsSelected).GroupBy(cs => cs.DrugId).Select(g => new {
 | 
			
		||||
                //    DrugId = g.Key, AddQuantity = g.Sum(s => s.AddQuantity)
 | 
			
		||||
                //}).Select(cs=>new ChannelStock() { DrugId=cs.DrugId,AddQuantity=cs.AddQuantity }).ToList();
 | 
			
		||||
 | 
			
		||||
                csList= ChannelStocks.FindAll(cs => cs.ChannelLst.IsSelected).ToList();
 | 
			
		||||
 | 
			
		||||
                if (csList != null && csList.Count>0)
 | 
			
		||||
                {
 | 
			
		||||
                    // 此处延时1毫秒,等待页面渲染
 | 
			
		||||
                    await Task.Delay(TimeSpan.FromMilliseconds(1));
 | 
			
		||||
                    DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                    dialogParameters.Add("ChannelStocks", csList);
 | 
			
		||||
                    DialogServiceExtensions.ShowDialogHost(_dialogService, "AddToJiaoJieDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = $"未选择药品,请先勾选要药箱号",
 | 
			
		||||
                        Type = MsgType.ERROR,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    _portUtil.Operate = false;
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        private void DoDialogResult(IDialogResult dialogResult)
 | 
			
		||||
        {
 | 
			
		||||
            // 委托   被动执行     被子窗口执行
 | 
			
		||||
            // dialogResult  第一方面可以拿到任意参数   第二方面   可判断关闭状态
 | 
			
		||||
            //if(dialogResult.Result == ButtonResult.OK)
 | 
			
		||||
            //{
 | 
			
		||||
            RequestData();
 | 
			
		||||
            //}
 | 
			
		||||
            //MessageBox.Show("返回值:" + dialogResult.Result.ToString());
 | 
			
		||||
        }
 | 
			
		||||
        //设置选中药箱的复选框状态
 | 
			
		||||
        private void SetIsSelected(ChannelStock channelStock)
 | 
			
		||||
        {
 | 
			
		||||
            if (channelStock != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (channelStock.ChannelLst.State == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    channelStock.ChannelLst.IsSelected = !channelStock.ChannelLst.IsSelected;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                if (channelStock != null && ChannelStocks != null)
 | 
			
		||||
                {
 | 
			
		||||
                    ChannelStocks = ChannelStocks.Select(x =>
 | 
			
		||||
                    {
 | 
			
		||||
                        for (int i = 0; i < ChannelStocks.Count; i++)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (ChannelStocks[i].DrawerNo == channelStock.DrawerNo)
 | 
			
		||||
                            {
 | 
			
		||||
                                ChannelStocks[i].ChannelLst = channelStock.ChannelLst;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        return x;
 | 
			
		||||
                    }).ToList();
 | 
			
		||||
                }
 | 
			
		||||
                ICollectionView vw = CollectionViewSource.GetDefaultView(ChannelStocks);
 | 
			
		||||
                vw.GroupDescriptions.Add(new PropertyGroupDescription("ChannelLst"));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,837 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using DM_Weight.select;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using log4net;
 | 
			
		||||
using Newtonsoft.Json;
 | 
			
		||||
using Prism.Commands;
 | 
			
		||||
using Prism.Events;
 | 
			
		||||
using Prism.Mvvm;
 | 
			
		||||
using Prism.Regions;
 | 
			
		||||
using Prism.Services.Dialogs;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.ComponentModel;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Data;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class ApplyInStockWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
 | 
			
		||||
    {
 | 
			
		||||
        private List<DrugPleaseClaim> _drugPleaseClaimList = new();
 | 
			
		||||
 | 
			
		||||
        public List<DrugPleaseClaim> _DrugPleaseClaimList { get { return _drugPleaseClaimList; } set { SetProperty(ref _drugPleaseClaimList, value); } }
 | 
			
		||||
 | 
			
		||||
        private DrugPleaseClaim? selectDrugPleaseClaim;
 | 
			
		||||
 | 
			
		||||
        public DrugPleaseClaim? SelectDrugPleaseClaim
 | 
			
		||||
        {
 | 
			
		||||
            get { return selectDrugPleaseClaim; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref selectDrugPleaseClaim, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public static List<OrderTakeSelect> StaticOrderTakeSelects = new()
 | 
			
		||||
        {
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code = "drugPleaseNo",
 | 
			
		||||
                Name = "请领单号"
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        private List<OrderTakeSelect> _orderTakeSelects = StaticOrderTakeSelects;
 | 
			
		||||
 | 
			
		||||
        public List<OrderTakeSelect> OrderTakeSelects
 | 
			
		||||
        {
 | 
			
		||||
            get { return _orderTakeSelects; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _orderTakeSelects, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private OrderTakeSelect _selectedItem = StaticOrderTakeSelects[0];
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public OrderTakeSelect SelectedItem
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selectedItem; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _selectedItem, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private string _orderDate = DateTime.Now.ToString("yyyy-MM-dd");
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件  处方日期
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string OrderDate
 | 
			
		||||
        {
 | 
			
		||||
            get { return _orderDate; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                if (!String.IsNullOrEmpty(value))
 | 
			
		||||
                {
 | 
			
		||||
                    SetProperty(ref _orderDate, DateTime.Parse(value).ToString("yyyy-MM-dd"));
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    SetProperty(ref _orderDate, value);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private string? _searchValue;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段值
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string? SearchValue
 | 
			
		||||
        {
 | 
			
		||||
            get { return _searchValue; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _searchValue, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private List<ChannelStock> _channelStocks = new();
 | 
			
		||||
 | 
			
		||||
        public List<ChannelStock> ChannelStocks { get { return _channelStocks; } set { SetProperty(ref _channelStocks, value); } }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private List<ChannelStock> _addChannels = new();
 | 
			
		||||
 | 
			
		||||
        public List<ChannelStock> AddChannels { get { return _addChannels; } set { SetProperty(ref _addChannels, value); } }
 | 
			
		||||
        private readonly ILog logger = LogManager.GetLogger(typeof(InvoiceInWindowViewModel));
 | 
			
		||||
        private int _pageNum = 1;
 | 
			
		||||
        public int PageNum
 | 
			
		||||
        {
 | 
			
		||||
            get => _pageNum;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _pageNum, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private int _pageCount = 1;
 | 
			
		||||
        public int PageCount
 | 
			
		||||
        {
 | 
			
		||||
            get => _pageCount;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _pageCount, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private int _pageSize = 8;
 | 
			
		||||
        public int PageSize
 | 
			
		||||
        {
 | 
			
		||||
            get => _pageSize;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _pageSize, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private int _totalCount = 0;
 | 
			
		||||
        public int TotalCount
 | 
			
		||||
        {
 | 
			
		||||
            get => _totalCount;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _totalCount, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private int _status = 0;
 | 
			
		||||
 | 
			
		||||
        public int Status { get => _status; set => SetProperty(ref _status, value); }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        IDialogService _dialogService;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        private PortUtil _portUtil;
 | 
			
		||||
        public ApplyInStockWindowViewModel(PortUtil portUtil, IDialogService DialogService, IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            _dialogService = DialogService;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
            _portUtil = portUtil;
 | 
			
		||||
        }
 | 
			
		||||
        private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
 | 
			
		||||
        private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
 | 
			
		||||
        private string WindowName = "ApplyInStockWindowViewModel";
 | 
			
		||||
        void DoMyPrismEvent(DeviceMsg msg)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            if (msg.WindowName.Equals(WindowName))
 | 
			
		||||
            {
 | 
			
		||||
                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;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        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 async 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 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++)
 | 
			
		||||
            {
 | 
			
		||||
                ChannelStock copy = TransExpV2<ChannelStock, ChannelStock>.Trans(channelStocks[i]);
 | 
			
		||||
                singleChannels.Add(copy);
 | 
			
		||||
            }
 | 
			
		||||
            singleChannels = singleChannels.GroupBy(it => new
 | 
			
		||||
            {
 | 
			
		||||
                it.DrawerNo,
 | 
			
		||||
                it.ColNo
 | 
			
		||||
            }).Select(it =>
 | 
			
		||||
            {
 | 
			
		||||
                var ret = it.First();
 | 
			
		||||
                ret.Quantity = it.Sum(itx => itx.Quantity);
 | 
			
		||||
                ret.AddQuantity = it.Sum(itx => itx.AddQuantity);
 | 
			
		||||
                return ret;
 | 
			
		||||
            }).ToList().FindAll(it => it.BoardType != 1);
 | 
			
		||||
 | 
			
		||||
            _portUtil.WindowName = WindowName;
 | 
			
		||||
            _portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
 | 
			
		||||
            _portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray();
 | 
			
		||||
            //_portUtil.Stocks = singleChannels.Select(it => it.Quantity).ToArray();
 | 
			
		||||
            _portUtil.DrawerNo = DrawerNo;
 | 
			
		||||
 | 
			
		||||
            if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 5)
 | 
			
		||||
            {
 | 
			
		||||
                List<ChannelStock> ChannelLst = new List<ChannelStock>();
 | 
			
		||||
                for (int i = 0; i < channelStocks.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    ChannelStock copy = TransExpV2<ChannelStock, ChannelStock>.Trans(channelStocks[i]);
 | 
			
		||||
                    singleChannels.Add(copy);
 | 
			
		||||
                }
 | 
			
		||||
                ChannelLst = ChannelLst.Where(it => it.BoardType != 1)
 | 
			
		||||
                                                                        .GroupBy(it => it.ColNo)
 | 
			
		||||
                                                                        .Select(it =>
 | 
			
		||||
                                                                        {
 | 
			
		||||
                                                                            var ret = it.First();
 | 
			
		||||
                                                                            ret.Quantity = it.Sum(itx => itx.Quantity);
 | 
			
		||||
                                                                            ret.AddQuantity = it.Sum(itx => itx.AddQuantity);
 | 
			
		||||
                                                                            return ret;
 | 
			
		||||
                                                                        }).ToList();
 | 
			
		||||
                // 发送加药数量
 | 
			
		||||
                singleChannels.ForEach(it =>
 | 
			
		||||
                {
 | 
			
		||||
                    _portUtil.TakeQuantity(DrawerNo, it.ColNo, it.AddQuantity, it.Quantity + it.AddQuantity);
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 6)
 | 
			
		||||
            {
 | 
			
		||||
                for (int i = 0; i < singleChannels.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    ChannelStock it = singleChannels[i];
 | 
			
		||||
                    _portUtil.ClearCount(it.DrawerNo, it.ColNo);
 | 
			
		||||
                    await Task.Delay(50);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            _portUtil.Start();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private DelegateCommand _rowSelected;
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand RowSelected => _rowSelected ??= new DelegateCommand(GetChannelByInvoice);
 | 
			
		||||
        public void GetChannelByInvoice()
 | 
			
		||||
        {
 | 
			
		||||
            ChannelStocks.Clear();
 | 
			
		||||
            //InOutInvoices.Clear();
 | 
			
		||||
            List<ChannelStock> csList = new List<ChannelStock>();
 | 
			
		||||
            if (SelectDrugPleaseClaim != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (SelectDrugPleaseClaim.GetQuantity == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    if (SelectDrugPleaseClaim._DrugManuNos is null)
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "药品没有批次效期信息!",
 | 
			
		||||
                            Type = MsgType.ERROR,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    //请领单里只有一种药
 | 
			
		||||
                    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))
 | 
			
		||||
                        .WhereIF(!string.IsNullOrEmpty(drugPleaseManuNo.ManuNo), cs => cs.ManuNo.Equals(drugPleaseManuNo.ManuNo))
 | 
			
		||||
                        .Where(cs => cs.DrugId == drugPleaseManuNo.DrugId)
 | 
			
		||||
                        .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                        .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                        .OrderBy(cs => cs.DrugId)
 | 
			
		||||
                        .OrderBy(cs => cs.DrawerNo)
 | 
			
		||||
                        .OrderBy(cs => cs.ColNo)
 | 
			
		||||
                        .First();
 | 
			
		||||
                        if (q is null)
 | 
			
		||||
                        {
 | 
			
		||||
                            AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                            {
 | 
			
		||||
                                Message = "药品没有绑定库位信息!",
 | 
			
		||||
                                Type = MsgType.ERROR,
 | 
			
		||||
                            };
 | 
			
		||||
                            _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                            return;
 | 
			
		||||
                        }
 | 
			
		||||
                        q.AddQuantity = drugPleaseManuNo.Quantity;
 | 
			
		||||
 | 
			
		||||
                        csList.Add(q);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    //请领单里有多种药
 | 
			
		||||
                    List<DrugPleaseClaim> pleaseClaimList = SqlSugarHelper.Db.Queryable<DrugPleaseClaim>().Includes<DrugInfo>(dpc => dpc.DrugInfo).Where(dpc => dpc.PleaseNo == SelectDrugPleaseClaim.PleaseNo).ToList();
 | 
			
		||||
                    if (pleaseClaimList != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        foreach (DrugPleaseClaim item in pleaseClaimList)
 | 
			
		||||
                        {
 | 
			
		||||
                            List<DrugPleaseManuNo> drugManuInfoList = JsonConvert.DeserializeObject<List<DrugPleaseManuNo>>(item._DrugManuNos);
 | 
			
		||||
                            drugManuInfoList.ForEach(dm => dm.DrugId = item.DrugId);
 | 
			
		||||
                            for (int i = 0; i < drugManuInfoList.Count; i++)
 | 
			
		||||
                            {
 | 
			
		||||
                                DrugPleaseManuNo drugPleaseManuNo = drugManuInfoList[i];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                                List<ChannelStock>? q = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                                .Includes<DrugInfo>(cs => cs.DrugInfo)
 | 
			
		||||
                                .Where(cs => cs.DrugId != null)
 | 
			
		||||
                                .WhereIF(!string.IsNullOrEmpty(drugPleaseManuNo.EffDate), cs => cs.EffDate.Equals(drugPleaseManuNo.EffDate))
 | 
			
		||||
                                .WhereIF(!string.IsNullOrEmpty(drugPleaseManuNo.ManuNo), cs => cs.ManuNo.Equals(drugPleaseManuNo.ManuNo))
 | 
			
		||||
                                .Where(cs => cs.DrugId == drugPleaseManuNo.DrugId)
 | 
			
		||||
                                .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                                .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                                .OrderBy(cs => cs.DrugId)
 | 
			
		||||
                                .OrderBy(cs => cs.DrawerNo)
 | 
			
		||||
                                .OrderBy(cs => cs.ColNo)
 | 
			
		||||
                                .ToList();
 | 
			
		||||
                                if (q != null)
 | 
			
		||||
                                {
 | 
			
		||||
                                    q[0].AddQuantity = drugPleaseManuNo.Quantity;
 | 
			
		||||
                                    q.ForEach(csq => csq.PleaseClaim = item);
 | 
			
		||||
 | 
			
		||||
                                    csList.AddRange(q);
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            ICollectionView vw = CollectionViewSource.GetDefaultView(csList);
 | 
			
		||||
            vw.GroupDescriptions.Add(new PropertyGroupDescription("PleaseClaim"));
 | 
			
		||||
            ChannelStocks = csList;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
 | 
			
		||||
        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
 | 
			
		||||
        {
 | 
			
		||||
            continuationCallback(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
        public void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            _DrugPleaseClaimList.Clear();
 | 
			
		||||
            int totalCount = 0;
 | 
			
		||||
 | 
			
		||||
            var sb = new StringBuilder();
 | 
			
		||||
            sb.Append("SELECT i.please_no,i.do_date,i.totalQuantity,count(1) as get_quantity,drug_manu_no,machine_id,i.drug_id from drug_please_claim i inner join ");
 | 
			
		||||
            sb.Append(" ( select c.drug_id as drug_id from channel_stock c where c.machine_id = 'DM3' group by c.drug_id ) di  on di.drug_id = i.drug_id WHERE state=@State and type=@Type ");
 | 
			
		||||
 | 
			
		||||
            if (OrderDate != null)
 | 
			
		||||
            {
 | 
			
		||||
                sb.Append(" and DATE_FORMAT(i.do_date,'%Y-%m-%d') = @CreateTime ");
 | 
			
		||||
            }
 | 
			
		||||
            if (!String.IsNullOrEmpty(SearchValue))
 | 
			
		||||
            {
 | 
			
		||||
                sb.Append(" and i.please_no = @please_no ");
 | 
			
		||||
            }
 | 
			
		||||
            if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["department"]))
 | 
			
		||||
            {
 | 
			
		||||
                sb.Append(" and i.department = @department ");
 | 
			
		||||
            }
 | 
			
		||||
            sb.Append("  GROUP BY i.please_no");
 | 
			
		||||
            sb.Append(" order by i.do_date ");
 | 
			
		||||
            _DrugPleaseClaimList = SqlSugarHelper.Db.SqlQueryable<dynamic>(sb.ToString())
 | 
			
		||||
                .AddParameters(new
 | 
			
		||||
                {
 | 
			
		||||
                    State = 2,
 | 
			
		||||
                    Type = 32,
 | 
			
		||||
                    CreateTime = OrderDate,
 | 
			
		||||
                    please_no = SearchValue,
 | 
			
		||||
                    department = ConfigurationManager.AppSettings["department"]
 | 
			
		||||
                })
 | 
			
		||||
            .Select(it => new DrugPleaseClaim())
 | 
			
		||||
                .Select("*")
 | 
			
		||||
                .ToPageList(PageNum, PageSize, ref totalCount);
 | 
			
		||||
 | 
			
		||||
            TotalCount = totalCount;
 | 
			
		||||
            PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
 | 
			
		||||
        }
 | 
			
		||||
        public DelegateCommand OpenInvoiceAdd
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                bool flag = true;
 | 
			
		||||
 | 
			
		||||
                AddChannels = ChannelStocks.FindAll(it => it.AddQuantity != 0);
 | 
			
		||||
 | 
			
		||||
                enumerable = AddChannels.GroupBy(cs => cs.DrawerNo, cs => cs);
 | 
			
		||||
                enumerator = enumerable.GetEnumerator();
 | 
			
		||||
                OpenDrawer(AddChannels);
 | 
			
		||||
            }, () => SelectDrugPleaseClaim != null).ObservesProperty(() => SelectDrugPleaseClaim);
 | 
			
		||||
        }
 | 
			
		||||
        private void OpenDrawer(List<ChannelStock> AddChannels)
 | 
			
		||||
        {
 | 
			
		||||
            if (Status == 0)
 | 
			
		||||
            {
 | 
			
		||||
                //if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
 | 
			
		||||
                //{
 | 
			
		||||
                //    //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开,其他6层管理员才能开
 | 
			
		||||
                //    bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
 | 
			
		||||
                //    if (bDrawer)
 | 
			
		||||
                //    {
 | 
			
		||||
                //        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                //        {
 | 
			
		||||
                //            Message = "当前用户没有打开抽屉的权限!",
 | 
			
		||||
                //            Type = MsgType.ERROR,
 | 
			
		||||
                //        };
 | 
			
		||||
                //        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                //        return;
 | 
			
		||||
                //    }
 | 
			
		||||
 | 
			
		||||
                //}
 | 
			
		||||
                if (AddChannels == null || AddChannels.Count <= 0)
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "请输入入库数量",
 | 
			
		||||
                        Type = MsgType.ERROR,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                int totalNum = AddChannels.Sum(add => add.AddQuantity);
 | 
			
		||||
                //if (totalNum != SelectedInvoice.Quantity)
 | 
			
		||||
                //{
 | 
			
		||||
                //    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                //    {
 | 
			
		||||
                //        Message = "各批次添加数量要与调拨单药品总数一致!",
 | 
			
		||||
                //        Type = MsgType.ERROR,
 | 
			
		||||
                //    };
 | 
			
		||||
                //    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                //    return;
 | 
			
		||||
                //}
 | 
			
		||||
                enumerator.MoveNext();
 | 
			
		||||
                Status = 1;
 | 
			
		||||
                OpenOneByOne();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public DelegateCommand QueryCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                RequestData();
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        private bool _isFinishClick = false;
 | 
			
		||||
        public DelegateCommand TakeFinish { get => new DelegateCommand(TakeFinishAction); }
 | 
			
		||||
 | 
			
		||||
        private void TakeFinishAction()
 | 
			
		||||
        {
 | 
			
		||||
            if (!_isFinishClick)
 | 
			
		||||
            {
 | 
			
		||||
                _isFinishClick = true;
 | 
			
		||||
                List<ChannelStock> record = ChannelStocks.ToList();
 | 
			
		||||
                string InvoiceId = SelectDrugPleaseClaim.PleaseNo;
 | 
			
		||||
                var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                {
 | 
			
		||||
                    SqlSugarHelper.Db.Updateable(new DrugPleaseClaim()
 | 
			
		||||
                    {
 | 
			
		||||
                        State = 3,
 | 
			
		||||
                        PleaseNo = SelectDrugPleaseClaim.PleaseNo
 | 
			
		||||
                    }).UpdateColumns(it => new { it.State }).WhereColumns(it => new { it.PleaseNo }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                    for (int i = 0; i < record.Count; i++)
 | 
			
		||||
                    {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                        ChannelStock it = record[i];
 | 
			
		||||
                        if (it.BoardType == 6 && it.PosNo == 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            _portUtil.SetNumCount(it.DrawerNo, it.ColNo, it.AddQuantity);
 | 
			
		||||
                        }
 | 
			
		||||
                        if (it.Id != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            // 更新数据 库存信息
 | 
			
		||||
                            SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                            {
 | 
			
		||||
                                Quantity = it.Quantity + it.AddQuantity,
 | 
			
		||||
                                ManuNo = it.ManuNo,
 | 
			
		||||
                                EffDate = it.EffDate,
 | 
			
		||||
                                Id = it.Id,
 | 
			
		||||
                            }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
 | 
			
		||||
                        }
 | 
			
		||||
                        //else
 | 
			
		||||
                        //{
 | 
			
		||||
                        //    //如果批号重复则不让添加
 | 
			
		||||
                        //    List<ChannelStock> csCount = SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerNo == it.DrawerNo && cs.ColNo == it.ColNo && cs.ManuNo == it.ManuNo && cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.Quantity > 0).ToList();
 | 
			
		||||
                        //    if (csCount.Count > 0)
 | 
			
		||||
                        //    {
 | 
			
		||||
                        //        //repeatList.Add(it.ManuNo);
 | 
			
		||||
                        //        //stockRepeats.Add(it);
 | 
			
		||||
                        //        continue;
 | 
			
		||||
                        //    }
 | 
			
		||||
                        //    //查询现有库位中是否有库存为0的记录,如果有直接update
 | 
			
		||||
                        //    ChannelStock recordHistory = SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerNo == it.DrawerNo && cs.ColNo == it.ColNo && cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1") && cs.Quantity <= 0).First();
 | 
			
		||||
                        //    if (recordHistory != null && recordHistory.Id != null)
 | 
			
		||||
                        //    {
 | 
			
		||||
                        //        SqlSugarHelper.Db.Updateable<ChannelStock>().SetColumns(item => new ChannelStock()
 | 
			
		||||
                        //        {
 | 
			
		||||
                        //            Quantity = it.AddQuantity,
 | 
			
		||||
                        //            ManuNo = it.ManuNo,
 | 
			
		||||
                        //            EffDate = it.EffDate
 | 
			
		||||
                        //        }).Where(item => item.Id == recordHistory.Id).ExecuteCommand();
 | 
			
		||||
                        //    }
 | 
			
		||||
                        //    else
 | 
			
		||||
                        //    {
 | 
			
		||||
                        //        // 更新数据 库存信息
 | 
			
		||||
                        //        SqlSugarHelper.Db.Insertable(new ChannelStock()
 | 
			
		||||
                        //        {
 | 
			
		||||
                        //            Quantity = it.AddQuantity,
 | 
			
		||||
                        //            Chnguid = it.Chnguid,
 | 
			
		||||
                        //            ManuNo = it.ManuNo,
 | 
			
		||||
                        //            EffDate = it.EffDate,
 | 
			
		||||
                        //            DrawerNo = it.DrawerNo,
 | 
			
		||||
                        //            ColNo = it.ColNo,
 | 
			
		||||
                        //            DrugId = it.DrugId,
 | 
			
		||||
                        //            DrawerType = it.DrawerType,
 | 
			
		||||
                        //            BoardType = it.BoardType,
 | 
			
		||||
                        //            Id = Guid.NewGuid().ToString(),
 | 
			
		||||
                        //            MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1"
 | 
			
		||||
                        //        }).ExecuteCommand();
 | 
			
		||||
                        //    }
 | 
			
		||||
                        //}
 | 
			
		||||
                        // 获取更新完库存后的药品库存
 | 
			
		||||
                        List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                            .Where(cs => cs.MachineId.Equals(it.MachineId))
 | 
			
		||||
                            .Where(cs => cs.DrugId.Equals(it.DrugId))
 | 
			
		||||
                            .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                            .ToList();
 | 
			
		||||
 | 
			
		||||
                        // 保存数据 出/入库记录
 | 
			
		||||
                        SqlSugarHelper.Db.Insertable(new MachineRecord()
 | 
			
		||||
                        {
 | 
			
		||||
                            MachineId = it.MachineId,
 | 
			
		||||
                            DrawerNo = it.DrawerNo,
 | 
			
		||||
                            ColNo = it.ColNo,
 | 
			
		||||
                            DrugId = it.DrugId,
 | 
			
		||||
                            ManuNo = it.ManuNo,
 | 
			
		||||
                            EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                            Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                            Reviewer = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                            OperationTime = DateTime.Now,
 | 
			
		||||
                            Quantity = it.AddQuantity,
 | 
			
		||||
                            Type = 1,
 | 
			
		||||
                            InvoiceId = InvoiceId,
 | 
			
		||||
                            //StockQuantity = nowChannels.Sum(it => it.Quantity),
 | 
			
		||||
                            //ManunoQuantity = nowChannels.FindAll(it2 => it2.ManuNo == it.ManuNo).Sum(it => it.Quantity),
 | 
			
		||||
                            //SupplierDept = SelectedInvoice.PharmacyName1 ?? ConfigurationManager.AppSettings["supplierDept"].ToString(),
 | 
			
		||||
                            //ReceiveDept = SelectedInvoice.PharmacyName2 ?? ConfigurationManager.AppSettings["receiveDept"].ToString()
 | 
			
		||||
                        }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                        int iIndex = Array.IndexOf(ConfigurationManager.AppSettings["colloctedId"].Split(','), SelectDrugPleaseClaim.MachineId.ToString());
 | 
			
		||||
                        string dept = ConfigurationManager.AppSettings["colloctedId"].Split(',')[iIndex - 1].ToString();
 | 
			
		||||
 | 
			
		||||
                        //保存账册
 | 
			
		||||
                        int iInsertResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                        {
 | 
			
		||||
 | 
			
		||||
                            DrugId = it.DrugId,
 | 
			
		||||
                            Type = 1,
 | 
			
		||||
                            Department = dept,
 | 
			
		||||
                            OrderNo = SelectDrugPleaseClaim.PleaseNo,
 | 
			
		||||
                            ManuNo = it.ManuNo,
 | 
			
		||||
                            EffDate = it.EffDate,
 | 
			
		||||
                            AddQuantity = it.AddQuantity,
 | 
			
		||||
                            UserId1 = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                            UserId2 = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                            MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                            CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
 | 
			
		||||
                            //CreateTime = DateTime.Now,
 | 
			
		||||
                            InvoiceNo = SelectDrugPleaseClaim.PleaseNo
 | 
			
		||||
 | 
			
		||||
                        }).ExecuteCommand();
 | 
			
		||||
                        //修改凌晨生成的日结存与总结存数据
 | 
			
		||||
                        AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                        .Where(ab => ab.MachineId.Equals(it.MachineId))
 | 
			
		||||
                        .Where(ab => ab.Type == 3)
 | 
			
		||||
                        .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
                        .Where(ab => ab.ManuNo == it.ManuNo)
 | 
			
		||||
                        .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
 | 
			
		||||
                        if (accountBookG2Day != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + it.AddQuantity;
 | 
			
		||||
                            SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
			
		||||
                            int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2() {
 | 
			
		||||
                                DrugId = it.DrugId,
 | 
			
		||||
                                Type=3,
 | 
			
		||||
                                ManuNo=it.ManuNo,
 | 
			
		||||
                                EffDate=it.EffDate,
 | 
			
		||||
                                YQuantity=0,
 | 
			
		||||
                                ManuStock= it.AddQuantity,
 | 
			
		||||
                                TotalStock= it.AddQuantity,
 | 
			
		||||
                                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($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        //修改凌晨生成的日结存与总结存数据
 | 
			
		||||
                        AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                        .Where(ab => ab.MachineId.Equals(it.MachineId))
 | 
			
		||||
                        .Where(ab => ab.Type == 4)
 | 
			
		||||
                        .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
                        .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                        if (accountBookG2Total != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + it.AddQuantity;
 | 
			
		||||
                            SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
			
		||||
                            int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                            {
 | 
			
		||||
                                DrugId = it.DrugId,
 | 
			
		||||
                                Type = 4,
 | 
			
		||||
                                YQuantity = 0,
 | 
			
		||||
                                ManuStock = it.AddQuantity,
 | 
			
		||||
                                TotalStock = it.AddQuantity,
 | 
			
		||||
                                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($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    return true;
 | 
			
		||||
                });
 | 
			
		||||
                if (f.Data)
 | 
			
		||||
                {
 | 
			
		||||
                    // 更新屏显库存
 | 
			
		||||
                    //List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType != 1);
 | 
			
		||||
                    List<ChannelStock> singleChannels = record.Where(it => it.BoardType == 5)
 | 
			
		||||
                                                                    .GroupBy(it => new { it.DrawerNo, it.ColNo })
 | 
			
		||||
                                                                    .Select(it =>
 | 
			
		||||
                                                                    {
 | 
			
		||||
                                                                        var ret = it.First();
 | 
			
		||||
                                                                        //ret.Quantity = it.Sum(itx => itx.Quantity);
 | 
			
		||||
                                                                        //ret.AddQuantity = it.Sum(itx => itx.AddQuantity);
 | 
			
		||||
                                                                        return ret;
 | 
			
		||||
                                                                    })
 | 
			
		||||
                                                                    .ToList();
 | 
			
		||||
                    if (singleChannels != null && singleChannels.Count > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        for (int i = 0; i < singleChannels.Count; i++)
 | 
			
		||||
                        {
 | 
			
		||||
                            //if (singleChannels[i].BoardType == 5)
 | 
			
		||||
                            //{
 | 
			
		||||
                            List<ChannelStock> channelStockEffDate = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                                                                .Where(cs => cs.MachineId == singleChannels[i].MachineId)
 | 
			
		||||
                                                                .Where(cs => cs.DrawerNo == singleChannels[i].DrawerNo)
 | 
			
		||||
                                                                .Where(cs => cs.ColNo == singleChannels[i].ColNo)
 | 
			
		||||
                                                                .Where(cs => cs.Quantity > 0)
 | 
			
		||||
                                                                .OrderBy(cs => cs.EffDate).ToList();
 | 
			
		||||
                            int totalQuantity = channelStockEffDate.Sum(it => it.Quantity);
 | 
			
		||||
 | 
			
		||||
                            //将库位多批次的总库存数更新标签
 | 
			
		||||
                            _portUtil.WriteQuantity(channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo, totalQuantity);
 | 
			
		||||
                            Thread.Sleep(200);
 | 
			
		||||
                            _portUtil.WriteChannelInfo(6, channelStockEffDate[0].EffDate == null ? "" : channelStockEffDate[0].EffDate, channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo);
 | 
			
		||||
                            Thread.Sleep(200);
 | 
			
		||||
                            _portUtil.WriteChannelInfo(5, channelStockEffDate[0].ManuNo, channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo);
 | 
			
		||||
                            Thread.Sleep(200);
 | 
			
		||||
                            _portUtil.ShowContent(channelStockEffDate[0].DrawerNo, channelStockEffDate[0].ColNo);
 | 
			
		||||
                            //}
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "操作完成,库存已更新",
 | 
			
		||||
                        Type = MsgType.SUCCESS,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                }
 | 
			
		||||
                if (!f.IsSuccess)
 | 
			
		||||
                {
 | 
			
		||||
                    logger.Info($"调拨入库,库存更新失败!{f.ErrorMessage}");
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "库存更新失败!",
 | 
			
		||||
                        Type = MsgType.ERROR,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                }
 | 
			
		||||
                Status = 0;
 | 
			
		||||
                _isFinishClick = false;
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand CancleTake { get => new DelegateCommand(CancelTakeAction); }
 | 
			
		||||
 | 
			
		||||
        private void CancelTakeAction()
 | 
			
		||||
        {
 | 
			
		||||
            RequestData();
 | 
			
		||||
            Status = 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,202 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.select;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using Newtonsoft.Json;
 | 
			
		||||
using Prism.Commands;
 | 
			
		||||
using Prism.Mvvm;
 | 
			
		||||
using Prism.Regions;
 | 
			
		||||
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 ApplyListWindowViewModel : BindableBase, INavigationAware
 | 
			
		||||
    {
 | 
			
		||||
        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 OrderTakeSelect _selectedItem = StaticSelects[0];
 | 
			
		||||
 | 
			
		||||
        private string? _searchValue;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段值
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string? SearchValue
 | 
			
		||||
        {
 | 
			
		||||
            get { return _searchValue; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _searchValue, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public OrderTakeSelect SelectedItem
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selectedItem; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _selectedItem, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 请领单状态
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private List<DrugPleaseState> _drugPleaseStateList = new List<DrugPleaseState>() {
 | 
			
		||||
                new DrugPleaseState
 | 
			
		||||
                {
 | 
			
		||||
                    StateName="已创建",
 | 
			
		||||
                    StateValue=0
 | 
			
		||||
                },
 | 
			
		||||
                new DrugPleaseState
 | 
			
		||||
                {
 | 
			
		||||
                    StateName="审核通过",
 | 
			
		||||
                    StateValue=1
 | 
			
		||||
                },
 | 
			
		||||
                new DrugPleaseState
 | 
			
		||||
                {
 | 
			
		||||
                    StateName="已出库",
 | 
			
		||||
                    StateValue=2
 | 
			
		||||
                },
 | 
			
		||||
                new DrugPleaseState
 | 
			
		||||
                {
 | 
			
		||||
                    StateName="已入库",
 | 
			
		||||
                    StateValue=3
 | 
			
		||||
                }
 | 
			
		||||
        };
 | 
			
		||||
        public List<DrugPleaseState>? DrugPleaseStateList
 | 
			
		||||
        {
 | 
			
		||||
            get => _drugPleaseStateList;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _drugPleaseStateList, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private DrugPleaseState? _drugPleaseState;
 | 
			
		||||
        public DrugPleaseState _DrugPleaseState
 | 
			
		||||
        {
 | 
			
		||||
            get => _drugPleaseState;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _drugPleaseState, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        } 
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 处方、请领中间表
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private List<CollectDrug> _collectDrugLst;
 | 
			
		||||
        public List<CollectDrug> CollectDrugLst
 | 
			
		||||
        {
 | 
			
		||||
            get => _collectDrugLst; set { SetProperty(ref _collectDrugLst, value); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private CollectDrug _selectCollectDrug;
 | 
			
		||||
        public CollectDrug SelectCollectDrug { get => _selectCollectDrug; set { SetProperty(ref _selectCollectDrug, value); } }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            if (CollectDrugLst != null)
 | 
			
		||||
            {
 | 
			
		||||
                CollectDrugLst.Clear();
 | 
			
		||||
            }
 | 
			
		||||
            CollectDrugLst = SqlSugarHelper.Db.Queryable<CollectDrug>()
 | 
			
		||||
                           .Includes<DrugPleaseClaim>(cd => cd.drugPleaseClaim)
 | 
			
		||||
                           .Includes<DrugInfo>(cd => cd.drugInfo)
 | 
			
		||||
                           .InnerJoin<DrugPleaseClaim>((cd,dp)=>cd.DrugPleaseClaimId==dp.PleaseNo)
 | 
			
		||||
                           .Where(cd => cd.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM3"))
 | 
			
		||||
                           .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (cd) => cd.drugInfo.DrugId.ToString() == SearchValue)
 | 
			
		||||
                           .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (cd) => cd.drugInfo.DrugName.Contains(SearchValue))
 | 
			
		||||
                           .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (cd) => cd.drugInfo.PyCode.Contains(SearchValue))
 | 
			
		||||
                           .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.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>
 | 
			
		||||
        /// 刷新
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand Query
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                RequestData();
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -165,8 +165,11 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
 | 
			
		||||
        private void GetAllDrugInfos()
 | 
			
		||||
        {
 | 
			
		||||
            var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
            DrugInfos = list;
 | 
			
		||||
            //var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
            //DrugInfos = list;
 | 
			
		||||
            string str = "SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
 | 
			
		||||
            DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GetChannelsByDrawerNo()
 | 
			
		||||
| 
						 | 
				
			
			@ -391,7 +394,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        public void UpdateComboBoxItems(string text)
 | 
			
		||||
        {
 | 
			
		||||
            string str = @"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,
 | 
			
		||||
                        d.manufactory,d.max_stock,CONCAT(drug_name,'  ',drug_spec)as drug_name_spec FROM `drug_info` d";
 | 
			
		||||
                        d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
 | 
			
		||||
            if(string.IsNullOrEmpty(text))
 | 
			
		||||
            {
 | 
			
		||||
                DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -184,7 +184,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private int _pageSize = 8;
 | 
			
		||||
        private int _pageSize = 9;
 | 
			
		||||
        public int PageSize
 | 
			
		||||
        {
 | 
			
		||||
            get => _pageSize;
 | 
			
		||||
| 
						 | 
				
			
			@ -208,8 +208,10 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
 | 
			
		||||
        private void GetAllDrugInfos()
 | 
			
		||||
        {
 | 
			
		||||
            var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
            DrugInfos = list;
 | 
			
		||||
            //var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
            //DrugInfos = list;
 | 
			
		||||
            string str = "SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
 | 
			
		||||
            DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
            //DrugInfos_PY = list;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -411,6 +413,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                        item.Drug = null;
 | 
			
		||||
                        item.DrugSpec = null;
 | 
			
		||||
                        SqlSugarHelper.Db.Updateable(item).UpdateColumns(it => new { it.DrugId,it.DrugSpec }).ExecuteCommand();
 | 
			
		||||
                        SqlSugarHelper.Db.Updateable<ChannelStock>().SetColumns(it => new ChannelStock { DrugId = null, ManuNo = null, EffDate = null }).Where(it => it.Chnguid == item.Id).ExecuteCommand();
 | 
			
		||||
                        if (item.BoardType == 5)
 | 
			
		||||
                        {
 | 
			
		||||
                            // 清除显示屏库位信息
 | 
			
		||||
| 
						 | 
				
			
			@ -468,7 +471,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        public void UpdateComboBoxItems(string text)
 | 
			
		||||
        {
 | 
			
		||||
            string str = @"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,
 | 
			
		||||
                        d.manufactory,d.max_stock,CONCAT(drug_name,'  ',drug_spec)as drug_name_spec FROM `drug_info` d";
 | 
			
		||||
                        d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
 | 
			
		||||
            if (string.IsNullOrEmpty(text))
 | 
			
		||||
            {
 | 
			
		||||
                DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,656 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using log4net;
 | 
			
		||||
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.Tasks;
 | 
			
		||||
using System.Xml;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class ChangeShiftsDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
 | 
			
		||||
    {
 | 
			
		||||
        public string Title => "交接班";
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => true;
 | 
			
		||||
        //交班人 发药人
 | 
			
		||||
        public UserList Operator { get; set; }
 | 
			
		||||
        private bool _operatorLogin = false;
 | 
			
		||||
        public bool OperatorLogin
 | 
			
		||||
        {
 | 
			
		||||
            get => _operatorLogin;
 | 
			
		||||
            set { SetProperty(ref _operatorLogin, value); }
 | 
			
		||||
        }
 | 
			
		||||
        //private _brushesOperator = Brushes.Green;
 | 
			
		||||
        //public System.Drawing.Brush BrushesOperator
 | 
			
		||||
        //{
 | 
			
		||||
        //    get=> _brushesOperator;
 | 
			
		||||
        //    set { SetProperty(ref _brushesOperator, value);}
 | 
			
		||||
        //}
 | 
			
		||||
        //交班人 审核人
 | 
			
		||||
        public UserList Reviewer { get; set; }
 | 
			
		||||
        private bool _reviewerLogin = false;
 | 
			
		||||
        public bool ReviewerLogin
 | 
			
		||||
        {
 | 
			
		||||
            get => _reviewerLogin;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _reviewerLogin, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //private System.Drawing.Brush _brushesReviewer=Brushes.Green;
 | 
			
		||||
        //public System.Drawing.Brush BrushesReviewer
 | 
			
		||||
        //{
 | 
			
		||||
        //    get=> _brushesReviewer;
 | 
			
		||||
        //    set
 | 
			
		||||
        //    {
 | 
			
		||||
        //        SetProperty(ref _brushesReviewer, value);
 | 
			
		||||
        //    }
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //接班人 发药人
 | 
			
		||||
        public UserList JieOperator { get; set; }
 | 
			
		||||
        //接班人 审核人
 | 
			
		||||
        public UserList JieReviewer { get; set; }
 | 
			
		||||
 | 
			
		||||
        //当前操作人
 | 
			
		||||
        public UserList CurrentUser { get; set; }
 | 
			
		||||
        //双人登录还是单人登录
 | 
			
		||||
        private int loginMode = Convert.ToInt32(ConfigurationManager.AppSettings["loginMode"]?.ToString() ?? "1");
 | 
			
		||||
        //第一个登录的是发药人还是接班人
 | 
			
		||||
        private string firstLogin = ConfigurationManager.AppSettings["firstLogin"]?.ToString() ?? "operator";
 | 
			
		||||
        //验证按钮可用状态
 | 
			
		||||
        private bool _jiaoBanOk = true;
 | 
			
		||||
        public bool JiaoBanOk
 | 
			
		||||
        {
 | 
			
		||||
            get => _jiaoBanOk;
 | 
			
		||||
            set { SetProperty(ref _jiaoBanOk, value); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
 | 
			
		||||
        public bool SingleLogin
 | 
			
		||||
        {
 | 
			
		||||
            get => ReadAppSetting("loginMode") == "1";
 | 
			
		||||
            //get => loginMode == 1;
 | 
			
		||||
        }
 | 
			
		||||
        public bool MultiLogin
 | 
			
		||||
        {
 | 
			
		||||
            //get => loginMode == 2;
 | 
			
		||||
            get => ReadAppSetting("loginMode") == "2";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //private PortUtil _portUtil;
 | 
			
		||||
        private Boolean _loginBtnEnable = true;
 | 
			
		||||
        public Boolean LoginBtnEnable { get { return _loginBtnEnable; } set { SetProperty(ref _loginBtnEnable, value); } }
 | 
			
		||||
        public string Password { get { return password; } set { SetProperty(ref password, value); } }
 | 
			
		||||
 | 
			
		||||
        public string Username { get { return username; } set { SetProperty(ref username, value); } }
 | 
			
		||||
        private readonly ILog logger = LogManager.GetLogger(typeof(LoginWindowViewModel));
 | 
			
		||||
 | 
			
		||||
        private string username;
 | 
			
		||||
        private string password;
 | 
			
		||||
 | 
			
		||||
        private bool _fingerMsg;
 | 
			
		||||
 | 
			
		||||
        public bool FingerMsg
 | 
			
		||||
        {
 | 
			
		||||
            get => _fingerMsg;
 | 
			
		||||
            set => SetProperty(ref _fingerMsg, value);
 | 
			
		||||
        }
 | 
			
		||||
        public event Action<IDialogResult> RequestClose;
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand BtnCloseCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                // 关闭当前窗口
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        //确认交接
 | 
			
		||||
        public DelegateCommand ShiftsCommand => new DelegateCommand(ShiftsAction);
 | 
			
		||||
        private void ShiftsAction()
 | 
			
		||||
        {
 | 
			
		||||
            if (Operator != null && !OperatorLogin)
 | 
			
		||||
            {
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = "交班发药人需要系统验证!",
 | 
			
		||||
                    Type = MsgType.ERROR,
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (Reviewer != null && !ReviewerLogin)
 | 
			
		||||
            {
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = "交班审核人需要系统验证!",
 | 
			
		||||
                    Type = MsgType.ERROR,
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (JieOperator == null && JieReviewer == null)
 | 
			
		||||
            {
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = "接班发药人或审核需要系统验证!",
 | 
			
		||||
                    Type = MsgType.ERROR,
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            //1验证交班人与接班人是否都已登录验证2写交接信息
 | 
			
		||||
            //if ((Operator != null || Reviewer != null) && (JieOperator != null || JieReviewer != null))
 | 
			
		||||
            //{
 | 
			
		||||
            DateTime dt = DateTime.Now;
 | 
			
		||||
            //保存交接班信息(查询当前值班人的最后一条交接班信息(如有则修改状态,没有则插入一条)并写入一条接班人信息)
 | 
			
		||||
            //var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
            var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
            {
 | 
			
		||||
                List<HkcChangeShifts> listHkcChangeShifts = SqlSugarHelper.Db.Queryable<HkcChangeShifts>()
 | 
			
		||||
                  .Where(cs => cs.State == "0")
 | 
			
		||||
                  .WhereIF(Operator != null && !string.IsNullOrEmpty(Operator.UserName), cs => cs.FromOperator == Operator.UserName)
 | 
			
		||||
                  .WhereIF(Reviewer != null && !string.IsNullOrEmpty(Reviewer.UserName), cs => cs.FromRviewer == Reviewer.UserName)
 | 
			
		||||
                  .OrderByDescending(cs => cs.OptState)
 | 
			
		||||
                  .ToList();
 | 
			
		||||
 | 
			
		||||
                if (listHkcChangeShifts != null && listHkcChangeShifts.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    //存在则修改,不存在则插入一条
 | 
			
		||||
                    SqlSugarHelper.Db.Updateable(new HkcChangeShifts()
 | 
			
		||||
                    {
 | 
			
		||||
                        Id = listHkcChangeShifts[0].Id,
 | 
			
		||||
                        ToOperator = JieOperator == null ? "" : JieOperator.UserName,
 | 
			
		||||
                        ToReviewer = JieReviewer == null ? "" : JieReviewer.UserName,
 | 
			
		||||
                        State = "1",
 | 
			
		||||
                        ToDate = dt
 | 
			
		||||
                    }).UpdateColumns(it => new { it.ToOperator, it.ToReviewer, it.State, it.ToDate }).WhereColumns(it => new { it.Id }).ExecuteCommand();
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    SqlSugarHelper.Db.Insertable(new HkcChangeShifts()
 | 
			
		||||
                    {
 | 
			
		||||
                        FromOperator = Operator == null ? "" : Operator.UserName,
 | 
			
		||||
                        FromRviewer = Reviewer == null ? "" : Reviewer.UserName,
 | 
			
		||||
                        ToOperator = JieOperator == null ? "" : JieOperator.UserName,
 | 
			
		||||
                        ToReviewer = JieReviewer == null ? "" : JieReviewer.UserName,
 | 
			
		||||
                        State = "1",
 | 
			
		||||
                        OptState = "0",
 | 
			
		||||
                        OptDate = dt,
 | 
			
		||||
                        Machineid = ConfigurationManager.AppSettings["machineId"] ?? "DM1"
 | 
			
		||||
                    }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                SqlSugarHelper.Db.Insertable(new HkcChangeShifts()
 | 
			
		||||
                {
 | 
			
		||||
                    FromOperator = JieOperator == null ? "" : JieOperator.UserName,
 | 
			
		||||
                    FromRviewer = JieReviewer == null ? "" : JieReviewer.UserName,
 | 
			
		||||
                    State = "0",
 | 
			
		||||
                    OptState = "0",
 | 
			
		||||
                    OptDate = dt,
 | 
			
		||||
                    //ToDate = dt,
 | 
			
		||||
                    Machineid = ConfigurationManager.AppSettings["machineId"] ?? "DM1"
 | 
			
		||||
                }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                //插入交接班报表数据信息
 | 
			
		||||
                string strSql = @"SELECT drug.drug_name,drug.DRUG_SPEC,c.manu_no,d.useNum,d.getNum,sum(quantity) as surplus,
 | 
			
		||||
                                    (SELECT d2.manu_stock FROM account_book_g2 d2 WHERE d2.drug_id = c.`drug_id`  and d2.manu_no=c.manu_no  AND d2.create_date  < @beforeDate
 | 
			
		||||
                                    ORDER BY d2.create_date DESC,d2.id DESC LIMIT 1) AS beforeNum
 | 
			
		||||
                                    from channel_stock		c LEFT JOIN drug_info drug on c.drug_id=drug.drug_id left JOIN	(SELECT drug_id,manu_no,
 | 
			
		||||
                                    SUM(IF(d1.`type` = 1, d1.quantity, 0)) AS getNum,SUM(IF(d1.`type` = 2, d1.quantity, 0)) AS useNum FROM dm_machine_record d1
 | 
			
		||||
                                    WHERE d1.`type` IN (1, 2) AND d1.`operation_time` >= @startDate and d1.`operation_time` <=@endDate and d1.machine_id=@machineId GROUP BY d1.Drug_ID ,d1.manu_no) d
 | 
			
		||||
                                    on c.drug_id=d.drug_id and c.manu_no=d.manu_no WHERE c.machine_id=@machineId and c.drug_id is not NULL GROUP BY c.Drug_ID ,c.manu_no
 | 
			
		||||
                                    UNION
 | 
			
		||||
                                    SELECT drug.drug_name,drug.DRUG_SPEC,d.manu_no,d.useNum,d.getNum,sum(quantity) as surplus,(SELECT  d2.manu_stock FROM account_book_g2 d2 WHERE d2.drug_id = d.`drug_id`  and d2.manu_no=d.manu_no  AND d2.create_date < @beforeDate
 | 
			
		||||
                                    ORDER BY d2.create_date DESC,d2.id DESC LIMIT 1) AS beforeNum from (SELECT drug_id,manu_no, SUM(IF(d1.`type` = 1, d1.quantity, 0)) AS getNum,SUM(IF(d1.`type` = 2, d1.quantity, 0)) AS useNum FROM dm_machine_record d1 
 | 
			
		||||
                                     WHERE d1.`type` IN (1, 2) AND d1.`operation_time` >= @startDate and d1.`operation_time` <=@endDate and d1.machine_id=@machineId GROUP BY d1.Drug_ID ,d1.manu_no) d	
 | 
			
		||||
                                    LEFT JOIN drug_info drug on d.drug_id=drug.drug_id left JOIN		 channel_stock		c on c.drug_id=d.drug_id and c.manu_no=d.manu_no AND c.machine_id=@machineId GROUP BY d.Drug_ID ,d.manu_no ";
 | 
			
		||||
                List<ShiftsReport> shiftsReports = SqlSugarHelper.Db.SqlQueryable<dynamic>(strSql)
 | 
			
		||||
                 .AddParameters(new
 | 
			
		||||
                 {
 | 
			
		||||
                     machineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1",
 | 
			
		||||
                     beforeDate = listHkcChangeShifts[0].OptDate,
 | 
			
		||||
                     startDate = listHkcChangeShifts[0].OptDate,
 | 
			
		||||
                     endDate = dt
 | 
			
		||||
                 })
 | 
			
		||||
                .Select(it => new ShiftsReport())
 | 
			
		||||
                .ToList();
 | 
			
		||||
                if (shiftsReports != null && shiftsReports.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    for (int i = 0; i < shiftsReports.Count; i++)
 | 
			
		||||
                    {
 | 
			
		||||
 | 
			
		||||
                        SqlSugarHelper.Db.Insertable(new ShiftsReport()
 | 
			
		||||
                        {
 | 
			
		||||
                            OptDate = dt,
 | 
			
		||||
                            DrugName = shiftsReports[i].DrugName,
 | 
			
		||||
                            DrugSpec = shiftsReports[i].DrugSpec,
 | 
			
		||||
                            BeforeNum = shiftsReports[i].BeforeNum ?? 0,
 | 
			
		||||
                            GetNum = shiftsReports[i].GetNum ?? 0,
 | 
			
		||||
                            UseNum = shiftsReports[i].UseNum ?? 0,
 | 
			
		||||
                            ManuNo = shiftsReports[i].ManuNo,
 | 
			
		||||
                            Surplus = shiftsReports[i].Surplus ?? 0,
 | 
			
		||||
                            FromOperator = Operator == null ? "" : Operator.Nickname,
 | 
			
		||||
                            FromReviewer = Reviewer == null ? "" : Reviewer.Nickname,
 | 
			
		||||
                            ToOperator = JieOperator == null ? "" : JieOperator.Nickname,
 | 
			
		||||
                            ToReviewer = JieReviewer == null ? "" : JieReviewer.Nickname,
 | 
			
		||||
                            MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1"
 | 
			
		||||
                        }).ExecuteCommand();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            });
 | 
			
		||||
            if (f.Data)
 | 
			
		||||
            {
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = "交接班操作完成!",
 | 
			
		||||
                    Type = MsgType.SUCCESS,
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                // 关闭当前窗口
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
            }
 | 
			
		||||
            if (!f.IsSuccess)
 | 
			
		||||
            {
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = "交接班操作失败!",
 | 
			
		||||
                    Type = MsgType.ERROR,
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
            }
 | 
			
		||||
            //}
 | 
			
		||||
            //else
 | 
			
		||||
            //{
 | 
			
		||||
            //    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
            //    {
 | 
			
		||||
            //        Message = "交接班需要交班人与接班人全部系统验证!",
 | 
			
		||||
            //        Type = MsgType.ERROR,
 | 
			
		||||
            //    };
 | 
			
		||||
            //    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
            //}
 | 
			
		||||
        }
 | 
			
		||||
        //用户名密码登录
 | 
			
		||||
        public DelegateCommand LoginCommand => new DelegateCommand(LoginAction);
 | 
			
		||||
 | 
			
		||||
        //清空
 | 
			
		||||
        public DelegateCommand ClearCommand => new DelegateCommand(ClearAction);
 | 
			
		||||
        private void ClearAction()
 | 
			
		||||
        {
 | 
			
		||||
            Username = string.Empty;
 | 
			
		||||
            Password = string.Empty;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void LoginAction()
 | 
			
		||||
        {
 | 
			
		||||
            Login();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void Login()
 | 
			
		||||
        {
 | 
			
		||||
            LoginBtnEnable = false;
 | 
			
		||||
            if (!string.IsNullOrEmpty(Username) && !string.IsNullOrEmpty(Password))
 | 
			
		||||
            {
 | 
			
		||||
                UserList userList = SqlSugarHelper.Db.Queryable<UserList>()
 | 
			
		||||
                                    .Includes<RoleDm>(u => u.Role)
 | 
			
		||||
                                   .InnerJoin<RoleDm>((u, r) => u.RoleId == r.Id)
 | 
			
		||||
                                   .First(u => u.UserName == username && ConfigurationManager.AppSettings["machineId"].ToString().Equals(u.MachineId));
 | 
			
		||||
 | 
			
		||||
                if (userList == null)
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "无此用户",
 | 
			
		||||
                        Type = MsgType.ERROR
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    Username = string.Empty;
 | 
			
		||||
                    Password = string.Empty;
 | 
			
		||||
                }
 | 
			
		||||
                else if (userList.Role == null)
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "用户还未设置权限,请联系管理员",
 | 
			
		||||
                        Type = MsgType.ERROR
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    Username = string.Empty;
 | 
			
		||||
                    Password = string.Empty;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    if (userList.PassWord == MD5.GetMD5Hash(Password))
 | 
			
		||||
                    {
 | 
			
		||||
                        Username = string.Empty;
 | 
			
		||||
                        Password = string.Empty;
 | 
			
		||||
                        HkcChangeShifts changeOperator = GetOperator();
 | 
			
		||||
                        if (changeOperator != null)
 | 
			
		||||
                        {
 | 
			
		||||
 | 
			
		||||
                            if (userList.UserName == changeOperator.FromOperator&&!OperatorLogin)
 | 
			
		||||
                            {
 | 
			
		||||
 | 
			
		||||
                                Operator = userList;
 | 
			
		||||
                                RaisePropertyChanged("Operator");
 | 
			
		||||
                                //交班人的发药人登录
 | 
			
		||||
                                OperatorLogin = true;
 | 
			
		||||
                                if (((Reviewer != null && ReviewerLogin) || (Reviewer == null)) && JieOperator != null && JieReviewer != null)
 | 
			
		||||
                                { JiaoBanOk = false; }
 | 
			
		||||
                            }
 | 
			
		||||
                            else if (userList.UserName == changeOperator.FromRviewer&&!ReviewerLogin)
 | 
			
		||||
                            {
 | 
			
		||||
                                //交班人的审核人登录
 | 
			
		||||
                                Reviewer = userList;
 | 
			
		||||
                                RaisePropertyChanged("Reviewer");
 | 
			
		||||
                                ReviewerLogin = true;
 | 
			
		||||
                                if (((Operator != null && OperatorLogin) || (Operator == null)) && JieOperator != null && JieReviewer != null)
 | 
			
		||||
                                { JiaoBanOk = false; }
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                if (keys.ContainsKey("operator"))
 | 
			
		||||
                                {
 | 
			
		||||
                                    //if (userList.UserName == (JieOperator == null ? "" : JieOperator.UserName))
 | 
			
		||||
                                    //{
 | 
			
		||||
                                    //    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                                    //    {
 | 
			
		||||
                                    //        Message = "接班发药人不能与审核人相同",
 | 
			
		||||
                                    //        Type = MsgType.ERROR
 | 
			
		||||
                                    //    };
 | 
			
		||||
                                    //    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                                    //}
 | 
			
		||||
                                    //else
 | 
			
		||||
                                    {
 | 
			
		||||
                                        keys.Add("reviewer", userList);
 | 
			
		||||
                                        JieReviewer = userList;
 | 
			
		||||
                                        RaisePropertyChanged("JieReviewer");
 | 
			
		||||
                                        if (((Operator != null && OperatorLogin) || (Operator == null)) && ((Reviewer != null && ReviewerLogin) || (Reviewer == null)) && JieOperator != null)
 | 
			
		||||
                                        { JiaoBanOk = false; }
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    //if (userList.UserName == (JieReviewer == null ? "" : JieReviewer.UserName))
 | 
			
		||||
                                    //{
 | 
			
		||||
                                    //    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                                    //    {
 | 
			
		||||
                                    //        Message = "接班发药人不能与审核人相同",
 | 
			
		||||
                                    //        Type = MsgType.ERROR
 | 
			
		||||
                                    //    };
 | 
			
		||||
                                    //    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                                    //}
 | 
			
		||||
                                    //else
 | 
			
		||||
                                    {
 | 
			
		||||
                                        keys.Add("operator", userList);
 | 
			
		||||
                                        JieOperator = userList;
 | 
			
		||||
                                        RaisePropertyChanged("JieOperator");
 | 
			
		||||
                                        if (((Operator != null && OperatorLogin) || (Operator == null)) && ((Reviewer != null && ReviewerLogin) || (Reviewer == null)) && JieReviewer != null)
 | 
			
		||||
                                        { JiaoBanOk = false; }
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "密码错误",
 | 
			
		||||
                            Type = MsgType.ERROR
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        Password = string.Empty;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = "请输入账号或密码",
 | 
			
		||||
                    Type = MsgType.ERROR
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
            }
 | 
			
		||||
            LoginBtnEnable = true;
 | 
			
		||||
        }
 | 
			
		||||
        //void SetUser(UserList user)
 | 
			
		||||
        //{
 | 
			
		||||
        //    // 双人登录模式
 | 
			
		||||
        //    {
 | 
			
		||||
        //        // 如果已经录入了发药人,已经有一个用户登录
 | 
			
		||||
        //        if (keys.ContainsKey("operator"))
 | 
			
		||||
        //        {
 | 
			
		||||
        //            if (keys.GetValue<UserList>("operator").Id != user.Id)
 | 
			
		||||
        //            {
 | 
			
		||||
        //                keys.Add("reviewer", user);
 | 
			
		||||
        //                JieReviewer = user;
 | 
			
		||||
        //                RaisePropertyChanged("JieReviewer");
 | 
			
		||||
        //            }
 | 
			
		||||
        //            else
 | 
			
		||||
        //            {
 | 
			
		||||
        //                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
        //                {
 | 
			
		||||
        //                    Message = "该发药人账号已登录,请输入不同账号",
 | 
			
		||||
        //                    Type = MsgType.ERROR
 | 
			
		||||
        //                };
 | 
			
		||||
        //                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
        //            }
 | 
			
		||||
        //        }
 | 
			
		||||
        //        // 如果已经录入了审核人, 已经有一个用户登录
 | 
			
		||||
        //        else if (keys.ContainsKey("reviewer"))
 | 
			
		||||
        //        {
 | 
			
		||||
        //            if (keys.GetValue<UserList>("reviewer").Id != user.Id)
 | 
			
		||||
        //            {
 | 
			
		||||
        //                keys.Add("operator", user);
 | 
			
		||||
        //                JieOperator = user;
 | 
			
		||||
        //                RaisePropertyChanged("JieOperator");
 | 
			
		||||
        //            }
 | 
			
		||||
        //            else
 | 
			
		||||
        //            {
 | 
			
		||||
        //                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
        //                {
 | 
			
		||||
        //                    Message = "该审核人账号已登录,请输入不同账号",
 | 
			
		||||
        //                    Type = MsgType.ERROR
 | 
			
		||||
        //                };
 | 
			
		||||
        //                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
        //            }
 | 
			
		||||
        //        }
 | 
			
		||||
        //        // 第一个用户登录
 | 
			
		||||
        //        else
 | 
			
		||||
        //        {
 | 
			
		||||
        //            if (firstLogin.Equals("operator"))
 | 
			
		||||
        //            {
 | 
			
		||||
        //                keys.Add("operator", user);
 | 
			
		||||
        //                JieOperator = user;
 | 
			
		||||
        //                RaisePropertyChanged("JieOperator");
 | 
			
		||||
        //            }
 | 
			
		||||
        //            else
 | 
			
		||||
        //            {
 | 
			
		||||
        //                keys.Add("reviewer", user);
 | 
			
		||||
        //                JieReviewer = user;
 | 
			
		||||
        //                RaisePropertyChanged("JieReviewer");
 | 
			
		||||
        //            }
 | 
			
		||||
        //        }
 | 
			
		||||
        //    }
 | 
			
		||||
        //}
 | 
			
		||||
        void ChangeShiftsLoginEvent(FingerprintMsg msg)
 | 
			
		||||
        {
 | 
			
		||||
            logger.Info(msg.ToString());
 | 
			
		||||
            if (msg.Message.Equals("CONNECT"))
 | 
			
		||||
            {
 | 
			
		||||
                FingerMsg = !msg.Result;
 | 
			
		||||
            }
 | 
			
		||||
            if (LoginBtnEnable)
 | 
			
		||||
            {
 | 
			
		||||
                if (msg.Message.Equals("LOGIN"))
 | 
			
		||||
                {
 | 
			
		||||
                    UserList userList = SqlSugarHelper.Db.Queryable<UserList>()
 | 
			
		||||
                    .Includes<RoleDm>(u => u.Role)
 | 
			
		||||
                    .First(u => u.Id == msg.Id);
 | 
			
		||||
 | 
			
		||||
                    if (userList == null)
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "无此用户",
 | 
			
		||||
                            Type = MsgType.ERROR
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        //Username = "";
 | 
			
		||||
                        //Password = "";
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (userList.Role == null)
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "用户还未设置权限,请联系管理员",
 | 
			
		||||
                            Type = MsgType.ERROR
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        //Username = "";
 | 
			
		||||
                        //Password = "";
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        HkcChangeShifts changeOperator = GetOperator();
 | 
			
		||||
                        if (changeOperator != null)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (userList.UserName == changeOperator.FromOperator)
 | 
			
		||||
                            {
 | 
			
		||||
                                Operator = userList;
 | 
			
		||||
                                RaisePropertyChanged("Operator");
 | 
			
		||||
                                //交班人的发药人登录
 | 
			
		||||
                                OperatorLogin = true;
 | 
			
		||||
                                if (((Reviewer != null && ReviewerLogin) || (Reviewer == null)) && JieOperator != null && JieReviewer != null)
 | 
			
		||||
                                { JiaoBanOk = false; }
 | 
			
		||||
 | 
			
		||||
                            }
 | 
			
		||||
                            else if (userList.UserName == changeOperator.FromRviewer)
 | 
			
		||||
                            {
 | 
			
		||||
                                //交班人的审核人登录
 | 
			
		||||
                                Reviewer = userList;
 | 
			
		||||
                                RaisePropertyChanged("Reviewer");
 | 
			
		||||
                                ReviewerLogin = true;
 | 
			
		||||
                                if (((Operator != null && OperatorLogin) || (Operator == null)) && JieOperator != null && JieReviewer != null)
 | 
			
		||||
                                { JiaoBanOk = false; }
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                if (keys.ContainsKey("operator"))
 | 
			
		||||
                                {
 | 
			
		||||
                                    //if (userList.UserName == (JieOperator == null ? "" : JieOperator.UserName))
 | 
			
		||||
                                    //{
 | 
			
		||||
                                    //    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                                    //    {
 | 
			
		||||
                                    //        Message = "接班发药人不能与审核人相同",
 | 
			
		||||
                                    //        Type = MsgType.ERROR
 | 
			
		||||
                                    //    };
 | 
			
		||||
                                    //    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                                    //}
 | 
			
		||||
                                    //else
 | 
			
		||||
                                    {
 | 
			
		||||
                                        keys.Add("reviewer", userList);
 | 
			
		||||
                                        JieReviewer = userList;
 | 
			
		||||
                                        RaisePropertyChanged("JieReviewer");
 | 
			
		||||
                                        if (((Operator != null && OperatorLogin) || (Operator == null)) && ((Reviewer != null && ReviewerLogin) || (Reviewer == null)) && JieOperator != null)
 | 
			
		||||
                                        { JiaoBanOk = false; }
 | 
			
		||||
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                        //if (userList.UserName == (JieReviewer == null ? "" : JieReviewer.UserName))
 | 
			
		||||
                                        //{
 | 
			
		||||
                                        //    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                                        //    {
 | 
			
		||||
                                        //        Message = "接班发药人不能与审核人相同",
 | 
			
		||||
                                        //        Type = MsgType.ERROR
 | 
			
		||||
                                        //    };
 | 
			
		||||
                                        //    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                                        //}
 | 
			
		||||
                                        //else
 | 
			
		||||
                                    {
 | 
			
		||||
                                        keys.Add("operator", userList);
 | 
			
		||||
                                        JieOperator = userList;
 | 
			
		||||
                                        RaisePropertyChanged("JieOperator");
 | 
			
		||||
                                        if (((Operator != null && OperatorLogin) || (Operator == null)) && ((Reviewer != null && ReviewerLogin) || (Reviewer == null)) && JieReviewer != null)
 | 
			
		||||
                                        { JiaoBanOk = false; }
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        ////private SqlSugarScope SqlSugarHelper.Db;
 | 
			
		||||
        public ChangeShiftsDialogViewModel(IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
            ////this.SqlSugarHelper.Db = sqlSugarScope;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool CanCloseDialog()
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogClosed()
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator.GetEvent<FingerprintEvent>().Unsubscribe(ChangeShiftsLoginEvent);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogOpened(IDialogParameters parameters)
 | 
			
		||||
        {
 | 
			
		||||
            HkcChangeShifts changeOperator = GetOperator();
 | 
			
		||||
            if (changeOperator != null)
 | 
			
		||||
            {
 | 
			
		||||
                Operator = SqlSugarHelper.Db.Queryable<UserList>().Where(u => u.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).Single(u => u.UserName == changeOperator.FromOperator);
 | 
			
		||||
                Reviewer = SqlSugarHelper.Db.Queryable<UserList>().Where(u => u.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).Single(u => u.UserName == changeOperator.FromRviewer);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            FingerMsg = false;// !_fingerprintUtil.bIsConnected;
 | 
			
		||||
            _eventAggregator.GetEvent<FingerprintEvent>().Subscribe(ChangeShiftsLoginEvent);
 | 
			
		||||
        }
 | 
			
		||||
        //查询值班人信息
 | 
			
		||||
        private HkcChangeShifts GetOperator()
 | 
			
		||||
        {
 | 
			
		||||
            //查询发药人及审核人
 | 
			
		||||
            HkcChangeShifts changeOperator = SqlSugarHelper.Db.Queryable<HkcChangeShifts>().Single(change => change.State == "0");
 | 
			
		||||
            //if (changeOperator != null)
 | 
			
		||||
            //{
 | 
			
		||||
            //    Operator = SqlSugarHelper.Db.Queryable<UserList>().Single(u => u.UserName == changeOperator.FromOperator);
 | 
			
		||||
            //    Reviewer = SqlSugarHelper.Db.Queryable<UserList>().Single(u => u.UserName == changeOperator.ToOperator);
 | 
			
		||||
            //}
 | 
			
		||||
            return changeOperator;
 | 
			
		||||
        }
 | 
			
		||||
        //手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题
 | 
			
		||||
        public string ReadAppSetting(string key)
 | 
			
		||||
        {
 | 
			
		||||
            string xPath = $"/configuration/appSettings//add[@key='{key}']";
 | 
			
		||||
            XmlDocument doc = new XmlDocument();
 | 
			
		||||
            string exeFileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
 | 
			
		||||
            doc.Load(exeFileName + ".dll.config");
 | 
			
		||||
            XmlNode node = doc.SelectSingleNode(xPath);
 | 
			
		||||
            return node.Attributes["value"].Value.ToString();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,190 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using DM_Weight.Report;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using log4net;
 | 
			
		||||
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.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class ChangeShiftsListWindowViewModel : 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);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        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();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private List<HkcChangeShifts>? hkcChangeShifts;
 | 
			
		||||
 | 
			
		||||
        public List<HkcChangeShifts>? HkcChangeShifts
 | 
			
		||||
        {
 | 
			
		||||
            get { return hkcChangeShifts; }
 | 
			
		||||
            set { SetProperty(ref hkcChangeShifts, value); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => true;
 | 
			
		||||
        IDialogService _dialogService;
 | 
			
		||||
 | 
			
		||||
        //交接班
 | 
			
		||||
        public DelegateCommand ShiftsCommand => new DelegateCommand(ShiftsAction);
 | 
			
		||||
        private void ShiftsAction()
 | 
			
		||||
        {
 | 
			
		||||
            DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
            DialogServiceExtensions.ShowDialogHost(_dialogService, "ChangeShiftsDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
			
		||||
        }
 | 
			
		||||
        private void DoDialogResult(IDialogResult dialogResult)
 | 
			
		||||
        {
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
        //导出报表
 | 
			
		||||
        public DelegateCommand Download => new DelegateCommand(DownloadAction);
 | 
			
		||||
        private void DownloadAction()
 | 
			
		||||
        {
 | 
			
		||||
            GridReportUtil.PrintChangeShiftsReport(StartDate, EndDate);
 | 
			
		||||
        }
 | 
			
		||||
        ////private SqlSugarScope SqlSugarHelper.Db;
 | 
			
		||||
        public ChangeShiftsListWindowViewModel(IDialogService dialogService)
 | 
			
		||||
        {
 | 
			
		||||
            _dialogService = dialogService;
 | 
			
		||||
            ////this.SqlSugarHelper.Db = sqlSugarScope;
 | 
			
		||||
        }
 | 
			
		||||
        void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            int totalCount = 0;
 | 
			
		||||
            string machineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1";
 | 
			
		||||
            string sqlStr = @"SELECT c.id,c.OptDate,u.User_Name as fromoperator,u2.User_Name fromrviewer,u3.User_Name as tooperator,u4.User_Name as toreviewer,
 | 
			
		||||
                            c.todate,c.State from hkc_changeshifts c LEFT JOIN user_list u on c.fromoperator=u.user_id 
 | 
			
		||||
                            LEFT JOIN user_list u2 on c.fromrviewer=u2.user_id  LEFT JOIN user_list u3 on c.tooperator=u3.user_id  
 | 
			
		||||
                            left join user_list u4 on c.toreviewer=u4.user_id where c.machine_id=@machineId ";
 | 
			
		||||
            if (StartDate != null)
 | 
			
		||||
            {
 | 
			
		||||
                sqlStr += " and c.optdate>=@starOptDate ";
 | 
			
		||||
            }
 | 
			
		||||
            if (EndDate != null)
 | 
			
		||||
            {
 | 
			
		||||
                sqlStr += " and c.optdate<=@endOptDate ";
 | 
			
		||||
            }
 | 
			
		||||
            sqlStr += " group by c.id";
 | 
			
		||||
            HkcChangeShifts = SqlSugarHelper.Db.SqlQueryable<dynamic>(sqlStr)
 | 
			
		||||
                .AddParameters(new
 | 
			
		||||
                {
 | 
			
		||||
                    machineId = machineId,
 | 
			
		||||
                    starOptDate = StartDate,
 | 
			
		||||
                    endOptDate = EndDate
 | 
			
		||||
                })
 | 
			
		||||
                .Select(it => new HkcChangeShifts())
 | 
			
		||||
                //.Select("*")
 | 
			
		||||
                .ToPageList(PageNum, PageSize, ref totalCount);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            TotalCount = totalCount;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand Query => new DelegateCommand(RequestData);
 | 
			
		||||
 | 
			
		||||
        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
 | 
			
		||||
        {
 | 
			
		||||
            continuationCallback(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            //查询表格数据
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -47,27 +47,24 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                switch (msg.EventType)
 | 
			
		||||
                {
 | 
			
		||||
                    // 抽屉打开
 | 
			
		||||
                    case EventType.DRAWEROPEN:
 | 
			
		||||
                        if (Status == 1)
 | 
			
		||||
                        {
 | 
			
		||||
                            Status = 2;
 | 
			
		||||
                        }
 | 
			
		||||
                    //case EventType.DRAWEROPEN:
 | 
			
		||||
                    //    if (Status == 1)
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        Status = 2;
 | 
			
		||||
                    //    }
 | 
			
		||||
 | 
			
		||||
                        break;
 | 
			
		||||
                    //    break;
 | 
			
		||||
                    // 抽屉关闭
 | 
			
		||||
                    case EventType.DRAWERCLOSE:
 | 
			
		||||
                        if (Status == 2)
 | 
			
		||||
                        {
 | 
			
		||||
                            Status = 3;
 | 
			
		||||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
                    // 数量变化
 | 
			
		||||
                    case EventType.UPDATEQUANTITY:
 | 
			
		||||
                        if (Status == 2)
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"抽屉【{DrawerNo}】库位药品数量【{msg.Quantitys}】");
 | 
			
		||||
                        }
 | 
			
		||||
                        Status = 0;
 | 
			
		||||
                        break;
 | 
			
		||||
                    //// 数量变化
 | 
			
		||||
                    //case EventType.UPDATEQUANTITY:
 | 
			
		||||
                    //    if (Status == 2)
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        logger.Info($"抽屉【{DrawerNo}】库位药品数量【{msg.Quantitys}】");
 | 
			
		||||
                    //    }
 | 
			
		||||
                    //    break;
 | 
			
		||||
                    // 打开失败
 | 
			
		||||
                    case EventType.OPENERROR:
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
| 
						 | 
				
			
			@ -111,6 +108,21 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        {
 | 
			
		||||
            get => new DelegateCommand<string>((DrawerNo) =>
 | 
			
		||||
            {
 | 
			
		||||
                //if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
 | 
			
		||||
                //{
 | 
			
		||||
                //    //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开,其他6层管理员才能开
 | 
			
		||||
                //    if (Convert.ToInt32(DrawerNo) > 3)
 | 
			
		||||
                //    {
 | 
			
		||||
                //        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                //        {
 | 
			
		||||
                //            Message = "当前用户没有打开抽屉的权限!",
 | 
			
		||||
                //            Type = MsgType.ERROR,
 | 
			
		||||
                //        };
 | 
			
		||||
                //        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                //        return;
 | 
			
		||||
                //    }
 | 
			
		||||
 | 
			
		||||
                //}
 | 
			
		||||
                this.DrawerNo = Convert.ToInt32(DrawerNo);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }, (DrawerNo) => Status == 0
 | 
			
		||||
| 
						 | 
				
			
			@ -183,11 +195,11 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                                Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                                Reviewer = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                                OperationTime = DateTime.Now,
 | 
			
		||||
                                Quantity =  it.CheckQuantity - it.Quantity,
 | 
			
		||||
                                Quantity = it.CheckQuantity - it.Quantity,
 | 
			
		||||
                                Type = 4,
 | 
			
		||||
                                InvoiceId = InvoiceId,
 | 
			
		||||
                                StockQuantity = nowChannels.Sum(it => it.Quantity),
 | 
			
		||||
                                CheckQuantity = it.CheckQuantity
 | 
			
		||||
                                InvoiceId = InvoiceId
 | 
			
		||||
                                //,StockQuantity = nowChannels.Sum(it => it.Quantity),
 | 
			
		||||
                                //CheckQuantity = it.CheckQuantity
 | 
			
		||||
                            }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,231 @@
 | 
			
		|||
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.Services.Dialogs;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Reflection.PortableExecutable;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class CollectDrugDialogViewModel : BindableBase, IDialogAware
 | 
			
		||||
    {
 | 
			
		||||
        public string Title => "请领申请确认";
 | 
			
		||||
 | 
			
		||||
        //请领数量
 | 
			
		||||
        private int _quantityCount;
 | 
			
		||||
        public int QuantityCount { get { return _quantityCount; } set { SetProperty(ref _quantityCount, value); } }
 | 
			
		||||
 | 
			
		||||
        //交处方张数
 | 
			
		||||
        private int _orderCount;
 | 
			
		||||
        public int OrderCount { get { return _orderCount; } set { SetProperty(ref _orderCount, value); } }
 | 
			
		||||
 | 
			
		||||
        //空瓶数量
 | 
			
		||||
        //private int _emptyCount;
 | 
			
		||||
        //public int EmptyCount { get { return _emptyCount; } set { SetProperty(ref _emptyCount, value); } }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        static string[] strColloctedId=ConfigurationManager.AppSettings["colloctedId"].Split(',');
 | 
			
		||||
 | 
			
		||||
        public static List<OrderTakeSelect> StaticSelects = new()
 | 
			
		||||
        {
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code = strColloctedId[1] is null?"":strColloctedId[1],
 | 
			
		||||
                Name = strColloctedId[0]is null?"":strColloctedId[0]
 | 
			
		||||
            },
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code =  strColloctedId[1] is null?"":strColloctedId[3],
 | 
			
		||||
                Name = strColloctedId[0]is null?"":strColloctedId[2]
 | 
			
		||||
            } 
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        private List<OrderTakeSelect> _selects = StaticSelects;
 | 
			
		||||
 | 
			
		||||
        public List<OrderTakeSelect> Selects
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selects; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _selects, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private OrderTakeSelect _selectedItem = StaticSelects[0];
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public OrderTakeSelect SelectedItem
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selectedItem; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _selectedItem, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private List<CollectDrug> _beforeGroupcollectDrugList;
 | 
			
		||||
        public List<CollectDrug> BeforeGroupCollectDrugList
 | 
			
		||||
        {
 | 
			
		||||
            get { return _beforeGroupcollectDrugList; }
 | 
			
		||||
            set { SetProperty(ref _beforeGroupcollectDrugList, value); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private List<CollectDrug> _collectDrugList;
 | 
			
		||||
        public List<CollectDrug> CollectDrugList
 | 
			
		||||
        {
 | 
			
		||||
            get { return _collectDrugList; }
 | 
			
		||||
            set { SetProperty(ref _collectDrugList, value); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        public CollectDrugDialogViewModel(IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public event Action<IDialogResult> RequestClose;
 | 
			
		||||
 | 
			
		||||
        public bool CanCloseDialog()
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogClosed()
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogOpened(IDialogParameters parameters)
 | 
			
		||||
        {
 | 
			
		||||
            BeforeGroupCollectDrugList = parameters.GetValue<List<CollectDrug>>("ApplyDrug");
 | 
			
		||||
 | 
			
		||||
            QuantityCount = BeforeGroupCollectDrugList.Sum(ap => ap.Quantity);
 | 
			
		||||
            OrderCount = BeforeGroupCollectDrugList.Count;
 | 
			
		||||
 | 
			
		||||
            CollectDrugList = BeforeGroupCollectDrugList.GroupBy(cd => cd.DrugId).Select(cd => new CollectDrug
 | 
			
		||||
            {
 | 
			
		||||
                DrugName = cd.Aggregate("", (Ccurrent, collectdrug) => collectdrug.DrugName),
 | 
			
		||||
                Quantity = cd.Sum(cd => cd.Quantity),
 | 
			
		||||
                DrugSpec = cd.Max(cd => cd.DrugSpec),
 | 
			
		||||
                Manufactory = cd.Max(cd => cd.Manufactory),
 | 
			
		||||
                DrugId=cd.Max(cd=>cd.DrugId)
 | 
			
		||||
            }).ToList();
 | 
			
		||||
 | 
			
		||||
            //EmptyCount = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        public DelegateCommand CreateApply
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(CreateApplyMethod);
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 生成请领单
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void CreateApplyMethod()
 | 
			
		||||
        {
 | 
			
		||||
            var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
            {
 | 
			
		||||
                string pleaseNo = DateTime.Now.ToString("yyyyMMddHHmmss");
 | 
			
		||||
                if (CollectDrugList != null && CollectDrugList.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    for (int d = 0; d < CollectDrugList.Count; d++)
 | 
			
		||||
                    {
 | 
			
		||||
                        CollectDrug groupDrug= CollectDrugList[d];
 | 
			
		||||
                        //保存请领申请表
 | 
			
		||||
                        SqlSugarHelper.Db.Insertable(new DrugPleaseClaim()
 | 
			
		||||
                        {
 | 
			
		||||
                            GetQuantity = groupDrug.Quantity,// QuantityCount,
 | 
			
		||||
                            ReturnPrQuantity = OrderCount,
 | 
			
		||||
                            Type = 32,
 | 
			
		||||
                            State = 0,
 | 
			
		||||
                            MachineId = SelectedItem.Code,
 | 
			
		||||
                            ApplyUser = HomeWindowViewModel.Operator.Id,
 | 
			
		||||
                            ReviewUser = HomeWindowViewModel.Reviewer == null ? 0 : HomeWindowViewModel.Reviewer.Id,
 | 
			
		||||
                            DoDate = DateTime.Now,
 | 
			
		||||
                            Department = ConfigurationManager.AppSettings["department"].ToString(),
 | 
			
		||||
 | 
			
		||||
                            PleaseNo = pleaseNo,
 | 
			
		||||
                            DrugId = groupDrug.DrugId,
 | 
			
		||||
                            TotalQuantity= QuantityCount
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                        }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                for (int i = 0; i < BeforeGroupCollectDrugList.Count; i++)
 | 
			
		||||
                {
 | 
			
		||||
                    CollectDrug collectDrug = BeforeGroupCollectDrugList[i];
 | 
			
		||||
 | 
			
		||||
                    //修改处方表里的 药品请领状态(0未请领;1已请领)
 | 
			
		||||
                    SqlSugarHelper.Db.Updateable(new OrderInfo()
 | 
			
		||||
                    {
 | 
			
		||||
                        ApplyStatus = 1,
 | 
			
		||||
                        OrderNo = collectDrug.OrderNo,
 | 
			
		||||
                        MachineId= ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                    }).UpdateColumns(it => new { it.ApplyStatus }).Where(it => it.OrderNo == collectDrug.OrderNo).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                    //保存处方、请领申请中间表
 | 
			
		||||
                    SqlSugarHelper.Db.Insertable(new CollectDrug()
 | 
			
		||||
                    {
 | 
			
		||||
                        DrugPleaseClaimId = pleaseNo,
 | 
			
		||||
                        OrderNo = collectDrug.OrderNo,
 | 
			
		||||
                        DrugId = collectDrug.DrugId,
 | 
			
		||||
                        Createdate = DateTime.Now,
 | 
			
		||||
                        Status = 0,
 | 
			
		||||
                        MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                        CurrentMachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                        //ConfigurationManager.AppSettings["colloctedId"].ToString(),
 | 
			
		||||
                        Quantity = collectDrug.Quantity
 | 
			
		||||
                    }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
            if (f.IsSuccess)
 | 
			
		||||
            {
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = "请领单已生成!",
 | 
			
		||||
                    Type = MsgType.SUCCESS,
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = "请领单生成失败!",
 | 
			
		||||
                    Type = MsgType.ERROR,
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
 | 
			
		||||
        }
 | 
			
		||||
        public DelegateCommand BtnCloseCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                //DialogParameters parameters = new DialogParameters();
 | 
			
		||||
                //parameters.Add("",);
 | 
			
		||||
                // 关闭当前窗口
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,324 @@
 | 
			
		|||
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.Configuration;
 | 
			
		||||
using System.Drawing.Printing;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Reactive.Joins;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Channels;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Controls;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class CollectDrugWindowViewModel : BindableBase,INavigationAware,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);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        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 List<CollectDrug> _collectDrugs = new();
 | 
			
		||||
 | 
			
		||||
        public List<CollectDrug> CollectDrugs { get { return _collectDrugs; } set { SetProperty(ref _collectDrugs, value); } }
 | 
			
		||||
 | 
			
		||||
        private CollectDrug _selectCollectDrugs;
 | 
			
		||||
        public CollectDrug selectCollectDrug { get { return _selectCollectDrugs; } set { SetProperty(ref _selectCollectDrugs, value); } }
 | 
			
		||||
 | 
			
		||||
        private OrderTakeSelect _selectedItem = StaticSelects[0];
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public OrderTakeSelect SelectedItem
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selectedItem; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _selectedItem, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        IDialogService _dialogService;
 | 
			
		||||
        public CollectDrugWindowViewModel(IDialogService dialogService, IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            _dialogService = dialogService;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
        //private void BindSelectCollect(CollectDrug collectDrug)
 | 
			
		||||
        //{
 | 
			
		||||
        //    if (SelectCollects == null)
 | 
			
		||||
        //    {
 | 
			
		||||
        //        SelectCollects = new List<CollectDrug>();
 | 
			
		||||
        //    }
 | 
			
		||||
        //    if (SelectCollects.Contains(collectDrug))
 | 
			
		||||
        //    {
 | 
			
		||||
        //        SelectCollects.Remove(collectDrug);
 | 
			
		||||
        //    }
 | 
			
		||||
        //    else
 | 
			
		||||
        //    {
 | 
			
		||||
        //        SelectCollects.Add(collectDrug);
 | 
			
		||||
        //    }
 | 
			
		||||
        //}
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 选中处方的请领药品
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        //private List<CollectDrug> _selectCollects;
 | 
			
		||||
        //public List<CollectDrug> SelectCollects
 | 
			
		||||
        //{
 | 
			
		||||
        //    get { return _selectCollects; }
 | 
			
		||||
        //    set { SetProperty(ref _selectCollects, value); }
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        private string? _searchValue;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段值
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string? SearchValue
 | 
			
		||||
        {
 | 
			
		||||
            get { return _searchValue; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _searchValue, value);
 | 
			
		||||
                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;
 | 
			
		||||
 | 
			
		||||
            List<CollectDrug> queryData = SqlSugarHelper.Db.Queryable<OrderInfo>()
 | 
			
		||||
          .InnerJoin<OrderDetail>((oi, od) => oi.OrderNo == od.OrderNo)
 | 
			
		||||
          .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))
 | 
			
		||||
          .WhereIF(!String.IsNullOrEmpty(ConfigurationManager.AppSettings["storage"]), oi => oi.Pharmacy == ConfigurationManager.AppSettings["storage"])
 | 
			
		||||
          .Where(oi => oi.DmStatus == 1)
 | 
			
		||||
          .Where(oi => oi.HisDispFlag == 0)
 | 
			
		||||
          .Where(oi => oi.CancelFlag == 0) 
 | 
			
		||||
          .Where(oi=>oi.ApplyStatus==0)
 | 
			
		||||
          .Where(oi => oi.Pharmacy.Equals(ConfigurationManager.AppSettings["storage"] ?? ""))
 | 
			
		||||
          .GroupBy(oi => oi.OrderDate)
 | 
			
		||||
          .Select((oi, od, di) => new CollectDrug
 | 
			
		||||
          {
 | 
			
		||||
              PatientId = oi.PatientId,
 | 
			
		||||
              PName = oi.PName,
 | 
			
		||||
              Sex = oi.Sex,
 | 
			
		||||
              Age = oi.Age,
 | 
			
		||||
              IdNumber = oi.IdNumber,
 | 
			
		||||
              OrderNo = oi.OrderNo,
 | 
			
		||||
              DeptName = oi.DeptName,
 | 
			
		||||
              DrugName = di.DrugName,
 | 
			
		||||
              Quantity = od.Quantity,
 | 
			
		||||
              DrugSpec = di.DrugSpec,
 | 
			
		||||
              Manufactory = di.Manufactory,
 | 
			
		||||
              DrugId=di.DrugId.ToString(),
 | 
			
		||||
          }).ToList();
 | 
			
		||||
         // .ToPageList(PageNum, PageSize, ref totalCount);
 | 
			
		||||
            //.ToList();
 | 
			
		||||
            CollectDrugs = queryData;
 | 
			
		||||
            TotalCount = totalCount;
 | 
			
		||||
            PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        public DelegateCommand RowSelected
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (selectCollectDrug != null)
 | 
			
		||||
                {
 | 
			
		||||
                    CollectDrugs = CollectDrugs.Select(x =>
 | 
			
		||||
                    {
 | 
			
		||||
                        if (x.OrderNo == selectCollectDrug.OrderNo)
 | 
			
		||||
                        {
 | 
			
		||||
                            x.IsSelected = !x.IsSelected;
 | 
			
		||||
                        }
 | 
			
		||||
                        return x;
 | 
			
		||||
                    }).ToList();
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        public DelegateCommand Query
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                RequestData();
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 生成请领单
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand CreateApplyOrder
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(OpenCreateApplyDialog);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
 | 
			
		||||
        public async void OpenCreateApplyDialog()
 | 
			
		||||
        {
 | 
			
		||||
            if (CollectDrugs != null)
 | 
			
		||||
            {
 | 
			
		||||
                List<CollectDrug> selectCollect = CollectDrugs.Where(cd => cd.IsSelected).ToList();
 | 
			
		||||
                if (selectCollect.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    // 此处延时1毫秒,等待页面渲染
 | 
			
		||||
                    await Task.Delay(TimeSpan.FromMilliseconds(1));
 | 
			
		||||
                    DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                    dialogParameters.Add("ApplyDrug", selectCollect);
 | 
			
		||||
                    DialogServiceExtensions.ShowDialogHost(_dialogService, "CollectDrugDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "未选择任何数据,请先选择数据信息!",
 | 
			
		||||
                        Type = MsgType.ERROR,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void DoDialogResult(IDialogResult dialogResult)
 | 
			
		||||
        {
 | 
			
		||||
            // 委托   被动执行     被子窗口执行
 | 
			
		||||
            // dialogResult  第一方面可以拿到任意参数   第二方面   可判断关闭状态
 | 
			
		||||
            //if(dialogResult.Result == ButtonResult.OK)
 | 
			
		||||
            //{
 | 
			
		||||
            RequestData();
 | 
			
		||||
            //}
 | 
			
		||||
            //MessageBox.Show("返回值:" + dialogResult.Result.ToString());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
			
		||||
        { 
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,319 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
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.Reflection.PortableExecutable;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Channels;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Windows.Threading;
 | 
			
		||||
using static Unity.Storage.RegistrationSet;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class DestoryEmptyDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
 | 
			
		||||
    {
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
 | 
			
		||||
        public string Title => "空瓶取出";
 | 
			
		||||
 | 
			
		||||
        private List<MachineRecord> _machineRecords = new();
 | 
			
		||||
 | 
			
		||||
        public List<MachineRecord> _MachineRecords
 | 
			
		||||
        {
 | 
			
		||||
            get => _machineRecords;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _machineRecords, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private MachineRecord _machineRecord = new();
 | 
			
		||||
 | 
			
		||||
        public MachineRecord _MachineRecord
 | 
			
		||||
        {
 | 
			
		||||
            get => _machineRecord;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _machineRecord, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private ChannelStock _channelStock;
 | 
			
		||||
 | 
			
		||||
        public ChannelStock _ChannelStock
 | 
			
		||||
        {
 | 
			
		||||
            get => _channelStock;
 | 
			
		||||
            set => SetProperty(ref _channelStock, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
 | 
			
		||||
        private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
 | 
			
		||||
 | 
			
		||||
        private int _status = 0;
 | 
			
		||||
 | 
			
		||||
        public int Status
 | 
			
		||||
        {
 | 
			
		||||
            get => _status; set => SetProperty(ref _status, value);
 | 
			
		||||
        }
 | 
			
		||||
        private PortUtil _portUtil;
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        public DestoryEmptyDialogViewModel(PortUtil portUtil, IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            _portUtil = portUtil;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
        void DoMyPrismEvent(DeviceMsg msg)
 | 
			
		||||
        {
 | 
			
		||||
            if (msg.WindowName == "DrawerTakeDrugWindow")
 | 
			
		||||
            {
 | 
			
		||||
                switch (msg.EventType)
 | 
			
		||||
                {
 | 
			
		||||
                    // 抽屉打开
 | 
			
		||||
                    case EventType.DRAWEROPEN:
 | 
			
		||||
                        if (Status == 1)
 | 
			
		||||
                        {
 | 
			
		||||
                            Status = 2;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        break;
 | 
			
		||||
                    // 抽屉关闭
 | 
			
		||||
                    case EventType.DRAWERCLOSE:
 | 
			
		||||
                        if (Status == 2)
 | 
			
		||||
                        {
 | 
			
		||||
                            Status = 3;
 | 
			
		||||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
                    // 数量变化
 | 
			
		||||
                    case EventType.UPDATEQUANTITY:
 | 
			
		||||
                        if (Status == 2)
 | 
			
		||||
                        {
 | 
			
		||||
                            _ChannelStock.TakeQuantity = msg.Quantitys[_ChannelStock.ColNo - 1];
 | 
			
		||||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
                    // 打开失败
 | 
			
		||||
                    case EventType.OPENERROR:
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = msg.Message,
 | 
			
		||||
                            Type = MsgType.ERROR,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        Status = 0;
 | 
			
		||||
                        break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        public event Action<IDialogResult> RequestClose;
 | 
			
		||||
 | 
			
		||||
        public bool CanCloseDialog()
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogClosed()
 | 
			
		||||
        {
 | 
			
		||||
            // 取消消息订阅
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogOpened(IDialogParameters parameters)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
			
		||||
            ChannelStock _record = parameters.GetValue<ChannelStock>("channel");
 | 
			
		||||
            _ChannelStock = _record;
 | 
			
		||||
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
        public void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            List<MachineRecord> queryData = SqlSugarHelper.Db.Queryable<MachineRecord>()
 | 
			
		||||
                .Includes<UserList>(mr => mr.User)
 | 
			
		||||
                .Where(mr => mr.DrugId == _ChannelStock.DrugId)
 | 
			
		||||
                .Where(mr => mr.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
 | 
			
		||||
                .Where(mr => mr.Type == 32)
 | 
			
		||||
                //.Where(mr => mr.Status != 2)
 | 
			
		||||
                .Where(mr=>mr.IsDestroy==0)
 | 
			
		||||
                .OrderByDescending(mr => mr.OperationTime)
 | 
			
		||||
                .OrderBy(mr => mr.Id)
 | 
			
		||||
                .ToList();
 | 
			
		||||
            _MachineRecords = queryData;
 | 
			
		||||
        }
 | 
			
		||||
        // 取消按钮
 | 
			
		||||
        public DelegateCommand CancleTake
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand BtnCloseCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                //DialogParameters parameters = new DialogParameters();
 | 
			
		||||
                //parameters.Add("",);
 | 
			
		||||
                // 关闭当前窗口
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        public DelegateCommand RowSelected
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (_MachineRecord != null && _MachineRecord.Quantity > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    _MachineRecords = _MachineRecords.Select(x =>
 | 
			
		||||
                    {
 | 
			
		||||
                        if (x.Id == _MachineRecord.Id)
 | 
			
		||||
                        {
 | 
			
		||||
                            x.IsSelected = !x.IsSelected;
 | 
			
		||||
                        }
 | 
			
		||||
                        return x;
 | 
			
		||||
                    }).ToList();
 | 
			
		||||
                    //DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                    //dialogParameters.Add("channel", Channel);
 | 
			
		||||
                    //DialogServiceExtensions.ShowDialogHost(_dialogService, "ReturnEmptyDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 空瓶销毁
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand DestoryEmptyCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (Status == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    //if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开,其他6层管理员才能开
 | 
			
		||||
                    //    if (_ChannelStock.DrawerNo>3)
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    //        {
 | 
			
		||||
                    //            Message = "当前用户没有打开抽屉的权限!",
 | 
			
		||||
                    //            Type = MsgType.ERROR,
 | 
			
		||||
                    //        };
 | 
			
		||||
                    //        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    //        return;
 | 
			
		||||
                    //    }
 | 
			
		||||
 | 
			
		||||
                    //}
 | 
			
		||||
                    Status = 1;
 | 
			
		||||
                    //_portUtil.SpeakAsync("正在打开" + DrawerNo + "号抽屉");
 | 
			
		||||
 | 
			
		||||
                    //IEnumerable<string> strDrugName = _MachineRecords.Select(cs => cs.DrugInfo.DrugName);
 | 
			
		||||
                    //string strNames = string.Empty;
 | 
			
		||||
                    //foreach (string name in strDrugName)
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    if (!strNames.Contains(name))
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        strNames += name + ";";
 | 
			
		||||
                    //    }
 | 
			
		||||
                    //}
 | 
			
		||||
                    int sumQuantity = _MachineRecords.FindAll(it => it.IsSelected).Sum(cs => cs.Quantity);
 | 
			
		||||
                    _portUtil.SpeakAsync($"正在打开 {_ChannelStock.DrawerNo} 号抽屉,请取出空瓶 {_ChannelStock.DrugInfo.DrugName} ,数量共计 {sumQuantity}");
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    _portUtil.WindowName = "DrawerTakeDrugWindow";
 | 
			
		||||
                    _portUtil.BoardType = _ChannelStock.BoardType;
 | 
			
		||||
                    _portUtil.ColNos=new int[] { _ChannelStock.ColNo };
 | 
			
		||||
                    _portUtil.DrawerNo = _ChannelStock.DrawerNo;
 | 
			
		||||
                    Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Normal, () => _portUtil.Start())
 | 
			
		||||
                    ;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand TakeFinish {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                List<MachineRecord> records = _MachineRecords.FindAll(it => it.IsSelected).ToList();
 | 
			
		||||
                if (records != null && records.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                    {
 | 
			
		||||
                        for (int i = 0; i < records.Count; i++)
 | 
			
		||||
                        {
 | 
			
		||||
                            MachineRecord record = records[i];
 | 
			
		||||
 | 
			
		||||
                            //修改库存数量
 | 
			
		||||
                            _ChannelStock.Quantity = _ChannelStock.Quantity - record.Quantity;
 | 
			
		||||
                            SqlSugarHelper.Db.Updateable(_ChannelStock).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                            //修改记录表中状态
 | 
			
		||||
                            SqlSugarHelper.Db.Updateable(record).ReSetValue(mr =>
 | 
			
		||||
                            {
 | 
			
		||||
                                mr.IsDestroy = 1;
 | 
			
		||||
                            }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                            //记录销毁明细 
 | 
			
		||||
                            SqlSugarHelper.Db.Insertable(new DestoryDetail()
 | 
			
		||||
                            {
 | 
			
		||||
                                MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                                Operatorid = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                                Reviewerid = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                                RecordId = record.Id,
 | 
			
		||||
                                //OrderId = ChannelStock.ManuNo,
 | 
			
		||||
 | 
			
		||||
                                //,StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                            }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    });
 | 
			
		||||
                    if (f.Data)
 | 
			
		||||
                    {
 | 
			
		||||
 | 
			
		||||
                        RequestData();
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "取出完成",
 | 
			
		||||
                            Type = MsgType.SUCCESS,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
 | 
			
		||||
                    }
 | 
			
		||||
                    if (!f.IsSuccess)
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "取出失败!",
 | 
			
		||||
                            Type = MsgType.ERROR,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "请选择要取空瓶的数据",
 | 
			
		||||
                        Type = MsgType.ERROR,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -24,7 +24,80 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        private readonly ILog logger = LogManager.GetLogger(typeof(DrawerAddDrugWindowViewModel));
 | 
			
		||||
        private List<int> _drawerNoList = new List<int>();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        #region 抽屉权限
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 1号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer1 = false;
 | 
			
		||||
        public bool Drawer1
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer1; }
 | 
			
		||||
            set { SetProperty(ref _Drawer1, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 2号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer2 = false;
 | 
			
		||||
        public bool Drawer2
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer2; }
 | 
			
		||||
            set { SetProperty(ref _Drawer2, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 3号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer3 = false;
 | 
			
		||||
        public bool Drawer3
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer3; }
 | 
			
		||||
            set { SetProperty(ref _Drawer3, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 4号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer4 = false;
 | 
			
		||||
        public bool Drawer4
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer4; }
 | 
			
		||||
            set { SetProperty(ref _Drawer4, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 5号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer5 = false;
 | 
			
		||||
        public bool Drawer5
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer5; }
 | 
			
		||||
            set { SetProperty(ref _Drawer5, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 6号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer6 = false;
 | 
			
		||||
        public bool Drawer6
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer6; }
 | 
			
		||||
            set { SetProperty(ref _Drawer6, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 7号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer7 = false;
 | 
			
		||||
        public bool Drawer7
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer7; }
 | 
			
		||||
            set { SetProperty(ref _Drawer7, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 8号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer8 = false;
 | 
			
		||||
        public bool Drawer8
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer8; }
 | 
			
		||||
            set { SetProperty(ref _Drawer8, value); }
 | 
			
		||||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
        private List<ChannelStock>? _channelStocks;
 | 
			
		||||
 | 
			
		||||
        public List<ChannelStock>? ChannelStocks
 | 
			
		||||
| 
						 | 
				
			
			@ -65,6 +138,10 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                        {
 | 
			
		||||
                            Status = 3;
 | 
			
		||||
                        }
 | 
			
		||||
                        //保存库存
 | 
			
		||||
                        SaveStock();
 | 
			
		||||
                        RequestData();
 | 
			
		||||
                        Status = 0;
 | 
			
		||||
                        break;
 | 
			
		||||
                    // 数量变化
 | 
			
		||||
                    case EventType.UPDATEQUANTITY:
 | 
			
		||||
| 
						 | 
				
			
			@ -126,12 +203,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;
 | 
			
		||||
| 
						 | 
				
			
			@ -149,112 +240,235 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            }, () => Status == 0).ObservesProperty(() => Status);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private bool _isFinishClick = false;
 | 
			
		||||
 | 
			
		||||
        // 完成按钮
 | 
			
		||||
        public DelegateCommand TakeFinish
 | 
			
		||||
       // private bool _isFinishClick = false;
 | 
			
		||||
        //保存库存
 | 
			
		||||
        private void SaveStock()
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                if (!_isFinishClick)
 | 
			
		||||
                List<ChannelStock> record = ChannelStocks.FindAll(it => it.AddQuantity != 0).ToList();
 | 
			
		||||
                if (record.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    _isFinishClick = true;
 | 
			
		||||
                    List<ChannelStock> record = ChannelStocks.FindAll(it => it.AddQuantity != 0).ToList();
 | 
			
		||||
                    if (record.Count > 0)
 | 
			
		||||
                    string InvoiceId = "DRAWER_" + CurrentTimeMillis();
 | 
			
		||||
                    var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                    {
 | 
			
		||||
                        string InvoiceId = "DRAWER_" + CurrentTimeMillis();
 | 
			
		||||
                        var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
 | 
			
		||||
                        for (int i = 0; i < record.Count; i++)
 | 
			
		||||
                        {
 | 
			
		||||
                            ChannelStock it = record[i];
 | 
			
		||||
                            it.ManuNo = it.drugManuNo.ManuNo;
 | 
			
		||||
                            it.EffDate = it.drugManuNo.EffDate;
 | 
			
		||||
 | 
			
		||||
                            for (int i = 0; i < record.Count; i++)
 | 
			
		||||
 | 
			
		||||
                            // 更新数据 库存信息
 | 
			
		||||
                            SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                            {
 | 
			
		||||
                                ChannelStock it = record[i];
 | 
			
		||||
                                it.ManuNo = it.drugManuNo.ManuNo;
 | 
			
		||||
                                it.EffDate = it.drugManuNo.EffDate;
 | 
			
		||||
                                Quantity = it.Quantity + it.AddQuantity,
 | 
			
		||||
                                ManuNo = it.ManuNo,
 | 
			
		||||
                                EffDate = it.EffDate,
 | 
			
		||||
                                Id = it.Id,
 | 
			
		||||
                            }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
 | 
			
		||||
                            
 | 
			
		||||
 | 
			
		||||
                                // 更新数据 库存信息
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                                {
 | 
			
		||||
                                    Quantity = it.Quantity + it.AddQuantity,
 | 
			
		||||
                                    ManuNo = it.ManuNo,
 | 
			
		||||
                                    EffDate = it.EffDate,
 | 
			
		||||
                                    Id = it.Id,
 | 
			
		||||
                                }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
 | 
			
		||||
                                // 获取更新完库存后的药品库存
 | 
			
		||||
                                List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                                    .Where(cs => cs.MachineId.Equals(it.MachineId))
 | 
			
		||||
                                    .Where(cs => cs.DrugId.Equals(it.DrugId))
 | 
			
		||||
                                    .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                                    .ToList();
 | 
			
		||||
 | 
			
		||||
                                // 保存数据 入库记录
 | 
			
		||||
                                SqlSugarHelper.Db.Insertable(new MachineRecord()
 | 
			
		||||
                                {
 | 
			
		||||
                                    MachineId = it.MachineId,
 | 
			
		||||
                                    DrawerNo = it.DrawerNo,
 | 
			
		||||
                                    ColNo = it.ColNo,
 | 
			
		||||
                                    DrugId = it.DrugId,
 | 
			
		||||
                                    ManuNo = it.ManuNo,
 | 
			
		||||
                                    EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                                    Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                                    Reviewer=HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                                    OperationTime = DateTime.Now,
 | 
			
		||||
                                    Quantity = it.AddQuantity,
 | 
			
		||||
                                    Type = 1,
 | 
			
		||||
                                    InvoiceId = InvoiceId,
 | 
			
		||||
                                    StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                                }).ExecuteCommand();
 | 
			
		||||
                            }
 | 
			
		||||
                            return true;
 | 
			
		||||
                        });
 | 
			
		||||
                        if (f.Data)
 | 
			
		||||
                        {
 | 
			
		||||
                            RequestData();
 | 
			
		||||
                            AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                            {
 | 
			
		||||
                                Message = "抽屉加药完成,库存已更新",
 | 
			
		||||
                                Type = MsgType.SUCCESS,
 | 
			
		||||
                            };
 | 
			
		||||
                            _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                            logger.Info($"库存已更新{it.DrugId},{it.Quantity+it.AddQuantity}");
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                            {
 | 
			
		||||
                                Message = "更新库存失败",
 | 
			
		||||
                                Type = MsgType.SUCCESS,
 | 
			
		||||
                            };
 | 
			
		||||
                            _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        }
 | 
			
		||||
                        Status = 0;
 | 
			
		||||
                        _isFinishClick = false;
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        _isFinishClick = false;
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "没有填写加药数量",
 | 
			
		||||
                            Type = MsgType.ERROR
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 取消按钮
 | 
			
		||||
        public DelegateCommand CancleTake
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                _portUtil.ResetData();
 | 
			
		||||
                Status = 0;
 | 
			
		||||
            });
 | 
			
		||||
                logger.Info($"保存库存异常{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //// 完成按钮
 | 
			
		||||
        //public DelegateCommand TakeFinish
 | 
			
		||||
        //{
 | 
			
		||||
        //    get => new DelegateCommand(() =>
 | 
			
		||||
        //    {
 | 
			
		||||
        //        if (!_isFinishClick)
 | 
			
		||||
        //        {
 | 
			
		||||
        //            _isFinishClick = true;
 | 
			
		||||
        //            List<ChannelStock> record = ChannelStocks.FindAll(it => it.AddQuantity != 0).ToList();
 | 
			
		||||
        //            if (record.Count > 0)
 | 
			
		||||
        //            {
 | 
			
		||||
        //                string InvoiceId = "DRAWER_" + CurrentTimeMillis();
 | 
			
		||||
        //                var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
        //                {
 | 
			
		||||
 | 
			
		||||
        //                    for (int i = 0; i < record.Count; i++)
 | 
			
		||||
        //                    {
 | 
			
		||||
        //                        ChannelStock it = record[i];
 | 
			
		||||
        //                        it.ManuNo = it.drugManuNo.ManuNo;
 | 
			
		||||
        //                        it.EffDate = it.drugManuNo.EffDate;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //                        // 更新数据 库存信息
 | 
			
		||||
        //                        SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            Quantity = it.Quantity + it.AddQuantity,
 | 
			
		||||
        //                            ManuNo = it.ManuNo,
 | 
			
		||||
        //                            EffDate = it.EffDate,
 | 
			
		||||
        //                            Id = it.Id,
 | 
			
		||||
        //                        }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
 | 
			
		||||
        //                        // 获取更新完库存后的药品库存
 | 
			
		||||
        //                        List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
        //                            .Where(cs => cs.MachineId.Equals(it.MachineId))
 | 
			
		||||
        //                            .Where(cs => cs.DrugId.Equals(it.DrugId))
 | 
			
		||||
        //                            .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
        //                            .ToList();
 | 
			
		||||
 | 
			
		||||
        //                        // 保存数据 入库记录
 | 
			
		||||
        //                        SqlSugarHelper.Db.Insertable(new MachineRecord()
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            MachineId = it.MachineId,
 | 
			
		||||
        //                            DrawerNo = it.DrawerNo,
 | 
			
		||||
        //                            ColNo = it.ColNo,
 | 
			
		||||
        //                            DrugId = it.DrugId,
 | 
			
		||||
        //                            ManuNo = it.ManuNo,
 | 
			
		||||
        //                            EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
        //                            Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
        //                            Reviewer = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
        //                            OperationTime = DateTime.Now,
 | 
			
		||||
        //                            Quantity = it.AddQuantity,
 | 
			
		||||
        //                            Type = 1,
 | 
			
		||||
        //                            InvoiceId = InvoiceId
 | 
			
		||||
        //                            //,StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
        //                        }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //                        //保存账册
 | 
			
		||||
        //                        SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            DrugId = it.DrugId,
 | 
			
		||||
        //                            Type = 1,
 | 
			
		||||
        //                            Department = ConfigurationManager.AppSettings["department"].ToString(),
 | 
			
		||||
        //                            InvoiceNo = InvoiceId,
 | 
			
		||||
        //                            ManuNo = it.ManuNo,
 | 
			
		||||
        //                            EffDate = it.EffDate,
 | 
			
		||||
        //                            AddQuantity = it.AddQuantity,
 | 
			
		||||
        //                            UserId1 = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
        //                            UserId2 = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
        //                            MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
        //                            CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
 | 
			
		||||
        //                            CreateTime = DateTime.Now
 | 
			
		||||
 | 
			
		||||
        //                        }).ExecuteCommand();
 | 
			
		||||
        //                        //修改凌晨生成的日结存数据
 | 
			
		||||
        //                        AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
        //                        .Where(ab => ab.MachineId.Equals(it.MachineId))
 | 
			
		||||
        //                        .Where(ab => ab.Type == 3)
 | 
			
		||||
        //                        .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
        //                        .Where(ab => ab.ManuNo == it.ManuNo)
 | 
			
		||||
        //                        .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
        //                        if (accountBookG2Day != null)
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + it.AddQuantity;
 | 
			
		||||
        //                            SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
 | 
			
		||||
        //                        }
 | 
			
		||||
        //                        else
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
			
		||||
        //                            int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
        //                            {
 | 
			
		||||
        //                                DrugId = it.DrugId,
 | 
			
		||||
        //                                Type = 3,
 | 
			
		||||
        //                                ManuNo = it.ManuNo,
 | 
			
		||||
        //                                EffDate = it.EffDate,
 | 
			
		||||
        //                                YQuantity = 0,
 | 
			
		||||
        //                                ManuStock = it.AddQuantity,
 | 
			
		||||
        //                                TotalStock = it.AddQuantity,
 | 
			
		||||
        //                                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($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
 | 
			
		||||
        //                            }
 | 
			
		||||
        //                        }
 | 
			
		||||
        //                        //修改凌晨生成的总结存数据
 | 
			
		||||
        //                        AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
        //                        .Where(ab => ab.MachineId.Equals(it.MachineId))
 | 
			
		||||
        //                        .Where(ab => ab.Type == 4)
 | 
			
		||||
        //                        .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
        //                        .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
        //                        if (accountBookG2Total != null)
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + it.AddQuantity;
 | 
			
		||||
        //                            SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
 | 
			
		||||
        //                        }
 | 
			
		||||
        //                        else
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
			
		||||
        //                            int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
        //                            {
 | 
			
		||||
        //                                DrugId = it.DrugId,
 | 
			
		||||
        //                                Type = 4,
 | 
			
		||||
        //                                YQuantity = 0,
 | 
			
		||||
        //                                ManuStock = it.AddQuantity,
 | 
			
		||||
        //                                TotalStock = it.AddQuantity,
 | 
			
		||||
        //                                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($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
 | 
			
		||||
        //                            }
 | 
			
		||||
        //                        }
 | 
			
		||||
        //                    }
 | 
			
		||||
        //                    return true;
 | 
			
		||||
        //                });
 | 
			
		||||
        //                if (f.Data)
 | 
			
		||||
        //                {
 | 
			
		||||
        //                    RequestData();
 | 
			
		||||
        //                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
        //                    {
 | 
			
		||||
        //                        Message = "抽屉加药完成,库存已更新",
 | 
			
		||||
        //                        Type = MsgType.SUCCESS,
 | 
			
		||||
        //                    };
 | 
			
		||||
        //                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
        //                }
 | 
			
		||||
        //                else
 | 
			
		||||
        //                {
 | 
			
		||||
        //                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
        //                    {
 | 
			
		||||
        //                        Message = "更新库存失败",
 | 
			
		||||
        //                        Type = MsgType.SUCCESS,
 | 
			
		||||
        //                    };
 | 
			
		||||
        //                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
        //                }
 | 
			
		||||
        //                Status = 0;
 | 
			
		||||
        //                _isFinishClick = false;
 | 
			
		||||
        //            }
 | 
			
		||||
        //            else
 | 
			
		||||
        //            {
 | 
			
		||||
        //                _isFinishClick = false;
 | 
			
		||||
        //                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
        //                {
 | 
			
		||||
        //                    Message = "没有填写加药数量",
 | 
			
		||||
        //                    Type = MsgType.ERROR
 | 
			
		||||
        //                };
 | 
			
		||||
        //                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
        //            }
 | 
			
		||||
 | 
			
		||||
        //        }
 | 
			
		||||
 | 
			
		||||
        //    });
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //// 取消按钮
 | 
			
		||||
        //public DelegateCommand CancleTake
 | 
			
		||||
        //{
 | 
			
		||||
        //    get => new DelegateCommand(() =>
 | 
			
		||||
        //    {
 | 
			
		||||
        //        _portUtil.ResetData();
 | 
			
		||||
        //        Status = 0;
 | 
			
		||||
        //    });
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        public long CurrentTimeMillis()
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -312,9 +526,51 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            _eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
			
		||||
            FindDrawerCount();
 | 
			
		||||
            RequestData();
 | 
			
		||||
            GetDrawer();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询当前用户对应角色的抽屉权限
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        void GetDrawer()
 | 
			
		||||
        {
 | 
			
		||||
            string drawerAuthority = HomeWindowViewModel.Operator.Role.drawer;
 | 
			
		||||
            if (!string.IsNullOrEmpty(drawerAuthority))
 | 
			
		||||
            {
 | 
			
		||||
                string[] iList = drawerAuthority.Split(',');
 | 
			
		||||
                foreach (string i in iList)
 | 
			
		||||
                {
 | 
			
		||||
                    switch (i)
 | 
			
		||||
                    {
 | 
			
		||||
                        case "1":
 | 
			
		||||
                            Drawer1 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "2":
 | 
			
		||||
                            Drawer2 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "3":
 | 
			
		||||
                            Drawer3 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "4":
 | 
			
		||||
                            Drawer4 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "5":
 | 
			
		||||
                            Drawer5 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "6":
 | 
			
		||||
                            Drawer6 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "7":
 | 
			
		||||
                            Drawer7 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "8":
 | 
			
		||||
                            Drawer8 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        //每次导航的时候,该实列用不用重新创建,true是不重新创建,false是重新创建
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,80 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
    public class DrawerTakeDrugWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ILog logger = LogManager.GetLogger(typeof(DrawerTakeDrugWindowViewModel));
 | 
			
		||||
 | 
			
		||||
        #region 抽屉权限
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 1号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer1 = false;
 | 
			
		||||
        public bool Drawer1
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer1; }
 | 
			
		||||
            set { SetProperty(ref _Drawer1, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 2号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer2 = false;
 | 
			
		||||
        public bool Drawer2
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer2; }
 | 
			
		||||
            set { SetProperty(ref _Drawer2, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 3号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer3 = false;
 | 
			
		||||
        public bool Drawer3
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer3; }
 | 
			
		||||
            set { SetProperty(ref _Drawer3, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 4号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer4 = false;
 | 
			
		||||
        public bool Drawer4
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer4; }
 | 
			
		||||
            set { SetProperty(ref _Drawer4, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 5号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer5 = false;
 | 
			
		||||
        public bool Drawer5
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer5; }
 | 
			
		||||
            set { SetProperty(ref _Drawer5, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 6号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer6 = false;
 | 
			
		||||
        public bool Drawer6
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer6; }
 | 
			
		||||
            set { SetProperty(ref _Drawer6, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 7号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer7 = false;
 | 
			
		||||
        public bool Drawer7
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer7; }
 | 
			
		||||
            set { SetProperty(ref _Drawer7, value); }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 8号抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _Drawer8 = false;
 | 
			
		||||
        public bool Drawer8
 | 
			
		||||
        {
 | 
			
		||||
            get { return _Drawer8; }
 | 
			
		||||
            set { SetProperty(ref _Drawer8, value); }
 | 
			
		||||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
        private List<ChannelStock> _channelStocks = new List<ChannelStock>();
 | 
			
		||||
 | 
			
		||||
        public List<ChannelStock> ChannelStocks
 | 
			
		||||
| 
						 | 
				
			
			@ -71,6 +144,10 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                        {
 | 
			
		||||
                            Status = 3;
 | 
			
		||||
                        }
 | 
			
		||||
                        //保存库存
 | 
			
		||||
                        SaveStock();
 | 
			
		||||
                        RequestData();
 | 
			
		||||
                        Status = 0;
 | 
			
		||||
                        break;
 | 
			
		||||
                    // 数量变化
 | 
			
		||||
                    case EventType.UPDATEQUANTITY:
 | 
			
		||||
| 
						 | 
				
			
			@ -136,8 +213,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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -152,113 +240,238 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private bool _isFinishClick = false;
 | 
			
		||||
 | 
			
		||||
        // 完成按钮
 | 
			
		||||
        public DelegateCommand TakeFinish
 | 
			
		||||
        //保存库存
 | 
			
		||||
        private void SaveStock()
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                if (!_isFinishClick)
 | 
			
		||||
                List<ChannelStock> record = ChannelStocks.FindAll(it => it.TakeQuantity != 0).ToList();
 | 
			
		||||
                if (record.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    _isFinishClick = true;
 | 
			
		||||
                    List<ChannelStock> record = ChannelStocks.FindAll(it => it.TakeQuantity != 0).ToList();
 | 
			
		||||
                    logger.Info("点击完成按钮,库位数据:" + JsonConvert.SerializeObject(record));
 | 
			
		||||
                    if (record.Count > 0)
 | 
			
		||||
                    string InvoiceId = "DRAWER_" + CurrentTimeMillis();
 | 
			
		||||
                    var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                    {
 | 
			
		||||
                        string InvoiceId = "DRAWER_" + CurrentTimeMillis();
 | 
			
		||||
                        var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
 | 
			
		||||
                        for (int i = 0; i < record.Count; i++)
 | 
			
		||||
                        {
 | 
			
		||||
                            ChannelStock it = record[i];
 | 
			
		||||
                            it.ManuNo = it.ManuNo;
 | 
			
		||||
                            it.EffDate = it.EffDate;
 | 
			
		||||
 | 
			
		||||
                            for (int i = 0; i < record.Count; i++)
 | 
			
		||||
 | 
			
		||||
                            // 更新数据 库存信息
 | 
			
		||||
                            SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                            {
 | 
			
		||||
                                ChannelStock it = record[i];
 | 
			
		||||
                                Quantity = it.Quantity - it.TakeQuantity,
 | 
			
		||||
                                ManuNo = it.ManuNo,
 | 
			
		||||
                                EffDate = it.EffDate,
 | 
			
		||||
                                Id = it.Id,
 | 
			
		||||
                            }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                                // 更新数据 库存信息
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                                {
 | 
			
		||||
                                    Quantity = it.Quantity - it.TakeQuantity,
 | 
			
		||||
                                    ManuNo = it.ManuNo,
 | 
			
		||||
                                    EffDate = it.EffDate,
 | 
			
		||||
                                    Id = it.Id,
 | 
			
		||||
                                }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
 | 
			
		||||
                                // 获取更新完库存后的药品库存
 | 
			
		||||
                                List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                                    .Where(cs => cs.MachineId.Equals(it.MachineId))
 | 
			
		||||
                                    .Where(cs => cs.DrugId.Equals(it.DrugId))
 | 
			
		||||
                                    .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                                    .ToList();
 | 
			
		||||
 | 
			
		||||
                                // 保存数据 出库记录
 | 
			
		||||
                                SqlSugarHelper.Db.Insertable(new MachineRecord()
 | 
			
		||||
                                {
 | 
			
		||||
                                    MachineId = it.MachineId,
 | 
			
		||||
                                    DrawerNo = it.DrawerNo,
 | 
			
		||||
                                    ColNo = it.ColNo,
 | 
			
		||||
                                    DrugId = it.DrugId,
 | 
			
		||||
                                    ManuNo = it.ManuNo,
 | 
			
		||||
                                    EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                                    Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                                    Reviewer = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                                    OperationTime = DateTime.Now,
 | 
			
		||||
                                    Quantity = it.TakeQuantity,
 | 
			
		||||
                                    Type = 2,
 | 
			
		||||
                                    InvoiceId = InvoiceId,
 | 
			
		||||
                                    StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                                }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                                logger.Info($"抽屉取药保存->库位【{it.DrawerNo}-{it.ColNo}】取出药品【{it.DrugInfo.DrugName}】个数【{it.TakeQuantity}】,取药前库存【{it.Quantity}】");
 | 
			
		||||
                            }
 | 
			
		||||
                            return true;
 | 
			
		||||
                        });
 | 
			
		||||
                        if (f.Data)
 | 
			
		||||
                        {
 | 
			
		||||
                            RequestData();
 | 
			
		||||
                            AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                            {
 | 
			
		||||
                                Message = "抽屉取药完成,库存已更新",
 | 
			
		||||
                                Type = MsgType.SUCCESS,
 | 
			
		||||
                            };
 | 
			
		||||
                            _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                            logger.Info($"库存已更新{it.DrugId},{it.Quantity - it.TakeQuantity}");
 | 
			
		||||
                        }
 | 
			
		||||
                        if (!f.IsSuccess)
 | 
			
		||||
                        {
 | 
			
		||||
                            AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                            {
 | 
			
		||||
                                Message = "抽屉取药完成,库存更新失败!",
 | 
			
		||||
                                Type = MsgType.ERROR,
 | 
			
		||||
                            };
 | 
			
		||||
                            _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        }
 | 
			
		||||
                        Status = 0;
 | 
			
		||||
                        _isFinishClick = false;
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        _isFinishClick = false;
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "没有填写取药数量",
 | 
			
		||||
                            Type = MsgType.ERROR
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 取消按钮
 | 
			
		||||
        public DelegateCommand CancleTake
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                _portUtil.ResetData();
 | 
			
		||||
                Status = 0;
 | 
			
		||||
            });
 | 
			
		||||
                logger.Info($"保存库存异常{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //private bool _isFinishClick = false;
 | 
			
		||||
 | 
			
		||||
        //// 完成按钮
 | 
			
		||||
        //public DelegateCommand TakeFinish
 | 
			
		||||
        //{
 | 
			
		||||
        //    get => new DelegateCommand(() =>
 | 
			
		||||
        //    {
 | 
			
		||||
        //        if (!_isFinishClick)
 | 
			
		||||
        //        {
 | 
			
		||||
        //            _isFinishClick = true;
 | 
			
		||||
        //            List<ChannelStock> record = ChannelStocks.FindAll(it => it.TakeQuantity != 0).ToList();
 | 
			
		||||
        //            logger.Info("点击完成按钮,库位数据:" + JsonConvert.SerializeObject(record));
 | 
			
		||||
        //            if (record.Count > 0)
 | 
			
		||||
        //            {
 | 
			
		||||
        //                string InvoiceId = "DRAWER_" + CurrentTimeMillis();
 | 
			
		||||
        //                var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
        //                {
 | 
			
		||||
 | 
			
		||||
        //                    for (int i = 0; i < record.Count; i++)
 | 
			
		||||
        //                    {
 | 
			
		||||
        //                        ChannelStock it = record[i];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //                        // 更新数据 库存信息
 | 
			
		||||
        //                        SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            Quantity = it.Quantity - it.TakeQuantity,
 | 
			
		||||
        //                            ManuNo = it.ManuNo,
 | 
			
		||||
        //                            EffDate = it.EffDate,
 | 
			
		||||
        //                            Id = it.Id,
 | 
			
		||||
        //                        }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
 | 
			
		||||
        //                        // 获取更新完库存后的药品库存
 | 
			
		||||
        //                        List<ChannelStock> nowChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
        //                            .Where(cs => cs.MachineId.Equals(it.MachineId))
 | 
			
		||||
        //                            .Where(cs => cs.DrugId.Equals(it.DrugId))
 | 
			
		||||
        //                            .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
        //                            .ToList();
 | 
			
		||||
 | 
			
		||||
        //                        // 保存数据 出库记录
 | 
			
		||||
        //                        SqlSugarHelper.Db.Insertable(new MachineRecord()
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            MachineId = it.MachineId,
 | 
			
		||||
        //                            DrawerNo = it.DrawerNo,
 | 
			
		||||
        //                            ColNo = it.ColNo,
 | 
			
		||||
        //                            DrugId = it.DrugId,
 | 
			
		||||
        //                            ManuNo = it.ManuNo,
 | 
			
		||||
        //                            EffDate = !String.IsNullOrEmpty(it.EffDate) ? DateTime.ParseExact(it.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
        //                            Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
        //                            Reviewer = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
        //                            OperationTime = DateTime.Now,
 | 
			
		||||
        //                            Quantity = it.TakeQuantity,
 | 
			
		||||
        //                            Type = 2,
 | 
			
		||||
        //                            InvoiceId = InvoiceId
 | 
			
		||||
        //                            //,StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
        //                        }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //                        //保存账册
 | 
			
		||||
        //                        SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            DrugId = it.DrugId,
 | 
			
		||||
        //                            Type = 2,
 | 
			
		||||
        //                            Department = ConfigurationManager.AppSettings["department"].ToString(),
 | 
			
		||||
        //                            InvoiceNo = InvoiceId,
 | 
			
		||||
        //                            ManuNo = it.ManuNo,
 | 
			
		||||
        //                            EffDate = it.EffDate,
 | 
			
		||||
        //                            OutQuantity = it.TakeQuantity,
 | 
			
		||||
        //                            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(it.MachineId))
 | 
			
		||||
        //                        .Where(ab => ab.Type == 3)
 | 
			
		||||
        //                        .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
        //                        .Where(ab => ab.ManuNo == it.ManuNo)
 | 
			
		||||
        //                        .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
        //                        if (accountBookG2Day != null)
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - it.TakeQuantity;
 | 
			
		||||
        //                            SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
 | 
			
		||||
        //                        }
 | 
			
		||||
        //                        else
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
			
		||||
        //                            int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
        //                            {
 | 
			
		||||
        //                                DrugId = it.DrugId,
 | 
			
		||||
        //                                Type = 3,
 | 
			
		||||
        //                                ManuNo = it.ManuNo,
 | 
			
		||||
        //                                EffDate = it.EffDate,
 | 
			
		||||
        //                                YQuantity = 0,
 | 
			
		||||
        //                                ManuStock = it.TakeQuantity,
 | 
			
		||||
        //                                TotalStock = it.TakeQuantity,
 | 
			
		||||
        //                                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($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
 | 
			
		||||
        //                            }
 | 
			
		||||
        //                        }
 | 
			
		||||
        //                        //修改凌晨生成的总结存数据
 | 
			
		||||
        //                        AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
        //                        .Where(ab => ab.MachineId.Equals(it.MachineId))
 | 
			
		||||
        //                        .Where(ab => ab.Type == 4)
 | 
			
		||||
        //                        .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
        //                        .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
        //                        if (accountBookG2Total != null)
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - it.TakeQuantity;
 | 
			
		||||
        //                            SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
 | 
			
		||||
        //                        }
 | 
			
		||||
        //                        else
 | 
			
		||||
        //                        {
 | 
			
		||||
        //                            //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
			
		||||
        //                            int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
        //                            {
 | 
			
		||||
        //                                DrugId = it.DrugId,
 | 
			
		||||
        //                                Type = 4,
 | 
			
		||||
        //                                YQuantity = 0,
 | 
			
		||||
        //                                ManuStock = it.TakeQuantity,
 | 
			
		||||
        //                                TotalStock = it.TakeQuantity,
 | 
			
		||||
        //                                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($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
 | 
			
		||||
        //                            }
 | 
			
		||||
        //                        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //                        logger.Info($"抽屉取药保存->库位【{it.DrawerNo}-{it.ColNo}】取出药品【{it.DrugInfo.DrugName}】个数【{it.TakeQuantity}】,取药前库存【{it.Quantity}】");
 | 
			
		||||
        //                    }
 | 
			
		||||
        //                    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);
 | 
			
		||||
        //                }
 | 
			
		||||
        //                Status = 0;
 | 
			
		||||
        //                _isFinishClick = false;
 | 
			
		||||
        //            }
 | 
			
		||||
        //            else
 | 
			
		||||
        //            {
 | 
			
		||||
        //                _isFinishClick = false;
 | 
			
		||||
        //                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
        //                {
 | 
			
		||||
        //                    Message = "没有填写取药数量",
 | 
			
		||||
        //                    Type = MsgType.ERROR
 | 
			
		||||
        //                };
 | 
			
		||||
        //                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
        //            }
 | 
			
		||||
 | 
			
		||||
        //        }
 | 
			
		||||
 | 
			
		||||
        //    });
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //// 取消按钮
 | 
			
		||||
        //public DelegateCommand CancleTake
 | 
			
		||||
        //{
 | 
			
		||||
        //    get => new DelegateCommand(() =>
 | 
			
		||||
        //    {
 | 
			
		||||
        //        _portUtil.ResetData();
 | 
			
		||||
        //        Status = 0;
 | 
			
		||||
        //    });
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        public long CurrentTimeMillis()
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -273,12 +486,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;
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +512,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)
 | 
			
		||||
| 
						 | 
				
			
			@ -313,8 +526,52 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            _eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
			
		||||
            FindDrawerCount();
 | 
			
		||||
            RequestData();
 | 
			
		||||
            GetDrawer();
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询当前用户对应角色的抽屉权限
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        void GetDrawer()
 | 
			
		||||
        {
 | 
			
		||||
            string drawerAuthority = HomeWindowViewModel.Operator.Role.drawer;
 | 
			
		||||
            if (!string.IsNullOrEmpty(drawerAuthority))
 | 
			
		||||
            {
 | 
			
		||||
                string[] iList = drawerAuthority.Split(',');
 | 
			
		||||
                foreach (string i in iList)
 | 
			
		||||
                {
 | 
			
		||||
                    switch (i)
 | 
			
		||||
                    {
 | 
			
		||||
                        case "1":
 | 
			
		||||
                            Drawer1 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "2":
 | 
			
		||||
                            Drawer2 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "3":
 | 
			
		||||
                            Drawer3 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "4":
 | 
			
		||||
                            Drawer4 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "5":
 | 
			
		||||
                            Drawer5 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "6":
 | 
			
		||||
                            Drawer6 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "7":
 | 
			
		||||
                            Drawer7 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "8":
 | 
			
		||||
                            Drawer8 = true;
 | 
			
		||||
                            break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        /// <param name="navigationContext"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
 | 
			
		||||
        //每次导航的时候,该实列用不用重新创建,true是不重新创建,false是重新创建
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class DrugBaseWindowViewModel
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -12,6 +12,10 @@ using DM_Weight.select;
 | 
			
		|||
using DM_Weight.util;
 | 
			
		||||
using log4net.Repository.Hierarchy;
 | 
			
		||||
using log4net;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using Prism.Events;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using static Unity.Storage.RegistrationSet;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -58,6 +62,13 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        public DrugListWindowViewModel(IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private List<DrugInfo> _drugInfos;
 | 
			
		||||
        public List<DrugInfo> DrugInfos
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -68,7 +79,10 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        private DrugInfo _selectedDrug = new();
 | 
			
		||||
        public DrugInfo SelectedDrug
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selectedDrug; }
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return _selectedDrug;
 | 
			
		||||
            }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +95,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                {
 | 
			
		||||
                    SetProperty(ref _selectedDrug, new());
 | 
			
		||||
                    Manunos = null;
 | 
			
		||||
                    SelectedDrug.drugBase = new();
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -182,51 +197,229 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                try
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    //SelectedDrug.DrugId = 0;
 | 
			
		||||
                    SqlSugarHelper.Db.Insertable(SelectedDrug).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                    //查询最大药品id并+1赋值给新增药品
 | 
			
		||||
                    string maxDrugId = SqlSugarHelper.Db.Queryable<DrugInfo>().Max(it => it.DrugId);
 | 
			
		||||
                    SelectedDrug.DrugId = maxDrugId + 1;
 | 
			
		||||
                    var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                    {
 | 
			
		||||
                        SqlSugarHelper.Db.Insertable(SelectedDrug).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                        SqlSugarHelper.Db.Insertable(new DrugBase()
 | 
			
		||||
                        {
 | 
			
		||||
                            DrugId = SelectedDrug.DrugId.ToString(),
 | 
			
		||||
                            MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1",
 | 
			
		||||
                            BaseQuantity = SelectedDrug.drugBase.BaseQuantity
 | 
			
		||||
                        }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                    });
 | 
			
		||||
                    if (f.IsSuccess)
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "新增成功",
 | 
			
		||||
                            Type = MsgType.ERROR,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "新增失败",
 | 
			
		||||
                            Type = MsgType.INFO,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
                    RequestData();
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
                    ILog logger = LogManager.GetLogger(typeof(DrugListWindowViewModel));
 | 
			
		||||
                    logger.Info($"添加数据异常:{ex.ToString()}");
 | 
			
		||||
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = $"添加数据异常:{ex.ToString()}",
 | 
			
		||||
                        Type = MsgType.ERROR,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
            }, () => SelectedDrug.DrugId ==null).ObservesProperty(() => SelectedDrug);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand EditDrugCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                SqlSugarHelper.Db.Updateable(SelectedDrug).UpdateColumns(d => new { d.DrugName, d.Manufactory, d.PyCode, d.PackUnit, d.MaxStock, d.DrugSpec }).ExecuteCommand();
 | 
			
		||||
                var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                {
 | 
			
		||||
                    SqlSugarHelper.Db.Updateable(SelectedDrug).UpdateColumns(d => new { d.DrugName, d.Manufactory, d.PyCode, d.PackUnit, d.MaxStock, d.DrugSpec }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    if (SelectedDrug.drugBase == null || SelectedDrug.drugBase.BaseId == 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        SqlSugarHelper.Db.Insertable(new DrugBase()
 | 
			
		||||
                        {
 | 
			
		||||
                            DrugId = SelectedDrug.DrugId.ToString(),
 | 
			
		||||
                            MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1",
 | 
			
		||||
                            BaseQuantity = SelectedDrug.drugBase.BaseQuantity
 | 
			
		||||
                        }).ExecuteCommand();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        //查询药品基数是否存在,存在则修改不存在则新增
 | 
			
		||||
                        DrugBase drugBase = SqlSugarHelper.Db.Queryable<DrugBase>()
 | 
			
		||||
                                       .Where(db => db.BaseId == SelectedDrug.drugBase.BaseId).First();
 | 
			
		||||
                        if (drugBase == null)
 | 
			
		||||
                        {
 | 
			
		||||
                            SqlSugarHelper.Db.Insertable(new DrugBase()
 | 
			
		||||
                            {
 | 
			
		||||
                                DrugId = SelectedDrug.DrugId.ToString(),
 | 
			
		||||
                                MachineId = ConfigurationManager.AppSettings["machineId"] ?? "DM1",
 | 
			
		||||
                                BaseQuantity = SelectedDrug.drugBase.BaseQuantity
 | 
			
		||||
                            }).ExecuteCommand();
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            SqlSugarHelper.Db.Updateable(new DrugBase() { BaseQuantity = SelectedDrug.drugBase.BaseQuantity }).UpdateColumns(bs => new { bs.BaseQuantity }).Where(bs => bs.BaseId == SelectedDrug.drugBase.BaseId).ExecuteCommand();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
                if (f.IsSuccess)
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "修改完成",
 | 
			
		||||
                        Type = MsgType.INFO,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "修改失败!",
 | 
			
		||||
                        Type = MsgType.ERROR,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                }
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }, () => SelectedDrug.DrugId > 0).ObservesProperty(() => SelectedDrug);
 | 
			
		||||
            }, () => SelectedDrug.DrugId!=null).ObservesProperty(() => SelectedDrug);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand AddManuCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (!string.IsNullOrEmpty(SelectedManuno.EffDate) && !string.IsNullOrEmpty(SelectedManuno.ManuNo))
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    SelectedManuno.Id = Guid.NewGuid().ToString();
 | 
			
		||||
                    SelectedManuno.DrugId = SelectedDrug.DrugId.ToString();
 | 
			
		||||
                    SelectedManuno.EffDate = DateTime.Parse(SelectedManuno.EffDate).ToString("yyyy-MM-dd");
 | 
			
		||||
                    SqlSugarHelper.Db.Insertable(SelectedManuno).ExecuteCommand();
 | 
			
		||||
                    GetManuNos();
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }, () => SelectedDrug.DrugId > 0).ObservesProperty(() => SelectedDrug);
 | 
			
		||||
                    if (!string.IsNullOrEmpty(SelectedManuno.EffDate) && !string.IsNullOrEmpty(SelectedManuno.ManuNo))
 | 
			
		||||
                    {
 | 
			
		||||
                        string dt = DateTime.Parse(SelectedManuno.EffDate).ToString("yyyy-MM-dd");
 | 
			
		||||
                        int repeatCount = SqlSugarHelper.Db.Queryable<DrugManuNo>().Where(dm => dm.DrugId == SelectedDrug.DrugId.ToString() && dm.EffDate == dt && dm.ManuNo == SelectedManuno.ManuNo).Count();
 | 
			
		||||
                        if (repeatCount > 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                            {
 | 
			
		||||
                                Message = "批次重复,请勿重复添加!",
 | 
			
		||||
                                Type = MsgType.ERROR,
 | 
			
		||||
                            };
 | 
			
		||||
                            _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            SelectedManuno.Id = Guid.NewGuid().ToString();
 | 
			
		||||
                            SelectedManuno.DrugId = SelectedDrug.DrugId.ToString();
 | 
			
		||||
                            SelectedManuno.EffDate = DateTime.Parse(SelectedManuno.EffDate).ToString("yyyy-MM-dd");
 | 
			
		||||
                            int iResult = SqlSugarHelper.Db.Insertable(SelectedManuno).ExecuteCommand();
 | 
			
		||||
                            AlertMsg alertMsg = new AlertMsg();
 | 
			
		||||
                            if (iResult > 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                alertMsg = new AlertMsg
 | 
			
		||||
                                {
 | 
			
		||||
                                    Message = "保存成功!",
 | 
			
		||||
                                    Type = MsgType.SUCCESS,
 | 
			
		||||
                                };
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                alertMsg = new AlertMsg
 | 
			
		||||
                                {
 | 
			
		||||
                                    Message = "保存失败!",
 | 
			
		||||
                                    Type = MsgType.SUCCESS,
 | 
			
		||||
                                };
 | 
			
		||||
                            }
 | 
			
		||||
                            _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        }
 | 
			
		||||
                        //GetManuNos();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "请输入批次及效期!",
 | 
			
		||||
                            Type = MsgType.ERROR,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = $"添加失败{ex.Message}",
 | 
			
		||||
                        Type = MsgType.ERROR,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                }
 | 
			
		||||
            }, () => SelectedDrug.DrugId != null).ObservesProperty(() => SelectedDrug);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand EditManuCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                SelectedManuno.EffDate = DateTime.Parse(SelectedManuno.EffDate).ToString("yyyy-MM-dd");
 | 
			
		||||
                SqlSugarHelper.Db.Updateable(SelectedManuno).UpdateColumns(m => new { m.ManuNo, m.EffDate }).ExecuteCommand();
 | 
			
		||||
                GetManuNos();
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    string dt = DateTime.Parse(SelectedManuno.EffDate).ToString("yyyy-MM-dd");
 | 
			
		||||
                    int repeatCount = SqlSugarHelper.Db.Queryable<DrugManuNo>().Where(dm => dm.DrugId == SelectedDrug.DrugId.ToString() && dm.EffDate == dt && dm.ManuNo == SelectedManuno.ManuNo).Count();
 | 
			
		||||
                    if (repeatCount > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "批次重复,请勿重复添加!",
 | 
			
		||||
                            Type = MsgType.ERROR,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        SelectedManuno.EffDate = DateTime.Parse(SelectedManuno.EffDate).ToString("yyyy-MM-dd");
 | 
			
		||||
                        SqlSugarHelper.Db.Updateable(SelectedManuno).UpdateColumns(m => new { m.ManuNo, m.EffDate }).ExecuteCommand(); 
 | 
			
		||||
                        GetManuNos();
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "修改成功!",
 | 
			
		||||
                            Type = MsgType.SUCCESS,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "修改失败!",
 | 
			
		||||
                        Type = MsgType.ERROR,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                }
 | 
			
		||||
            }, () => !string.IsNullOrEmpty(SelectedManuno.DrugId)).ObservesProperty(() => SelectedManuno);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -257,13 +450,22 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        {
 | 
			
		||||
            int totalCount = 0;
 | 
			
		||||
            DrugInfos = SqlSugarHelper.Db.Queryable<DrugInfo>()
 | 
			
		||||
                .Includes(di => di.drugBase)
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugId"), (di) => di.DrugId.ToString().Contains(SearchValue))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugName"), (di) => di.DrugName.Contains(SearchValue))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("PyCode"), (di) => di.PyCode.Contains(SearchValue))
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(SearchValue) && SelectedItem.Code.Equals("DrugBarcode"), (di) => di.DrugBarcode.Contains(SearchValue))
 | 
			
		||||
                .Select(di => di)
 | 
			
		||||
                .ToPageList(PageNum, PageSize, ref totalCount)
 | 
			
		||||
            ;
 | 
			
		||||
                //.Select(di => di)
 | 
			
		||||
                .ToPageList(PageNum, PageSize, ref totalCount);
 | 
			
		||||
            foreach (DrugInfo di in DrugInfos)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                if (di.drugBase == null)
 | 
			
		||||
                {
 | 
			
		||||
                    di.drugBase = new DrugBase();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            TotalCount = totalCount;
 | 
			
		||||
            PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@ using DM_Weight.Finger;
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using SqlSugar;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -37,6 +38,10 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        public List<RoleDm> Roles { get; set; }
 | 
			
		||||
        //交接柜用户
 | 
			
		||||
        private UserList JiaojieUser;
 | 
			
		||||
        private string UserName;
 | 
			
		||||
        //private RoleDm JiaojieRole;
 | 
			
		||||
 | 
			
		||||
        private string _oldPass;
 | 
			
		||||
        public string OldPass
 | 
			
		||||
| 
						 | 
				
			
			@ -98,11 +103,15 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                    // 修改密码
 | 
			
		||||
                    if (OnlyPassword)
 | 
			
		||||
                    {
 | 
			
		||||
                        JiaojieUser= SqlSugarHelper.Db.Queryable<UserList>().Where(r => r.MachineId == (ConfigurationManager.AppSettings["jj_machineId"]??"DM5")&&r.UserName== UserName).OrderBy(r => r.Id).First();
 | 
			
		||||
                        if (MD5.GetMD5Hash(OldPass).ToLower().Equals(UserList.PassWord.ToLower()))
 | 
			
		||||
                        {
 | 
			
		||||
                            // 旧密码输入正确
 | 
			
		||||
                            UserList.PassWord = MD5.GetMD5Hash(NewPass);
 | 
			
		||||
                            SqlSugarHelper.Db.Updateable<UserList>(UserList).UpdateColumns(u => new { u.PassWord }).ExecuteCommand();
 | 
			
		||||
                            //修改交接柜用户密码
 | 
			
		||||
                            JiaojieUser.PassWord = UserList.PassWord;
 | 
			
		||||
                            SqlSugarHelper.Db.Updateable<UserList>(JiaojieUser).UpdateColumns(u => new { u.PassWord }).ExecuteCommand();
 | 
			
		||||
                            // 关闭当前窗口
 | 
			
		||||
                            RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
 | 
			
		||||
                        }
 | 
			
		||||
| 
						 | 
				
			
			@ -116,25 +125,47 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                    {
 | 
			
		||||
                        if (UserList.Id > 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            JiaojieUser = SqlSugarHelper.Db.Queryable<UserList>().Where(r => r.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5") && r.UserName == UserName).OrderBy(r => r.Id).First();
 | 
			
		||||
                            // 更新
 | 
			
		||||
                            // 没有写密码
 | 
			
		||||
                            if (string.IsNullOrEmpty(NewPass))
 | 
			
		||||
                            {
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable<UserList>(UserList).UpdateColumns(u => new { u.Nickname, u.UserName, u.UserBarcode, u.RoleId }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                                //更新交接柜用户
 | 
			
		||||
                                JiaojieUser.Nickname = UserList.Nickname;
 | 
			
		||||
                                JiaojieUser.UserName= UserList.UserName;
 | 
			
		||||
                                JiaojieUser.UserBarcode= UserList.UserBarcode;
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable<UserList>(JiaojieUser).UpdateColumns(u => new { u.Nickname, u.UserName, u.UserBarcode, u.RoleId }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                            }
 | 
			
		||||
                            // 更改了密码
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                UserList.PassWord = MD5.GetMD5Hash(NewPass);
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable<UserList>(UserList).UpdateColumns(u => new { u.Nickname, u.UserName, u.PassWord, u.UserBarcode, u.RoleId }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                                JiaojieUser.PassWord= UserList.PassWord;
 | 
			
		||||
                                JiaojieUser.Nickname= UserList.Nickname;
 | 
			
		||||
                                JiaojieUser.UserName= UserList.UserName;
 | 
			
		||||
                                JiaojieUser.UserBarcode= UserList.UserBarcode;
 | 
			
		||||
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable<UserList>(JiaojieUser).UpdateColumns(u => new { u.Nickname, u.UserName, u.PassWord, u.UserBarcode, u.RoleId }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        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();
 | 
			
		||||
                            // 插入交接柜用户
 | 
			
		||||
                            int? roleId = SqlSugarHelper.Db.Queryable<RoleDm>().Where(r => r.MachineId == (ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5")).OrderBy(r => r.Id).Select(r=>r.Id).First(); 
 | 
			
		||||
                            JiaojieUser = UserList;
 | 
			
		||||
                            JiaojieUser.MachineId = ConfigurationManager.AppSettings["jj_machineId"] ?? "DM5";
 | 
			
		||||
                            JiaojieUser.RoleId= roleId;
 | 
			
		||||
                            SqlSugarHelper.Db.Insertable<UserList>(JiaojieUser).InsertColumns(u => new { u.Id, u.Nickname, u.UserName, u.PassWord, u.UserBarcode, u.RoleId, u.MachineId }).ExecuteCommand();
 | 
			
		||||
                        }
 | 
			
		||||
                        RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +185,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,12 +220,15 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                OnlyPassword = parameters.GetValue<bool>("EditPass");
 | 
			
		||||
                EditUser = false;
 | 
			
		||||
                Title = "修改密码";
 | 
			
		||||
                UserName=UserList.UserName;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if (parameters.ContainsKey("User"))
 | 
			
		||||
                {
 | 
			
		||||
                    UserList = parameters.GetValue<UserList>("User");
 | 
			
		||||
 | 
			
		||||
                    UserName = UserList.UserName;
 | 
			
		||||
                }
 | 
			
		||||
                if (UserList.Id == null)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,263 @@
 | 
			
		|||
using DM_Weight.Common;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using log4net;
 | 
			
		||||
using log4net.Repository.Hierarchy;
 | 
			
		||||
using Prism.Commands;
 | 
			
		||||
using Prism.Events;
 | 
			
		||||
using Prism.Mvvm;
 | 
			
		||||
using Prism.Regions;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Xml;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class FridgeOnlyWindowViewModel : BindableBase, IRegionMemberLifetime, INavigationAware
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ILog logger = LogManager.GetLogger(typeof(FridgeOnlyWindowViewModel));
 | 
			
		||||
        //温度区间
 | 
			
		||||
        private string _temperatureRange = CommonClass.ReadAppSetting("temperatureRange").ToString();
 | 
			
		||||
        public string TemperatureRange
 | 
			
		||||
        {
 | 
			
		||||
            get => _temperatureRange;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _temperatureRange, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //温度不在范围超时时间
 | 
			
		||||
        private string _outRangeTime = CommonClass.ReadAppSetting("OutRangeTime").ToString();
 | 
			
		||||
        public string OutRangeTime
 | 
			
		||||
        {
 | 
			
		||||
            get => _outRangeTime; set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _outRangeTime, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private float defaultValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue"));
 | 
			
		||||
        //温度值
 | 
			
		||||
        private float _temperatureValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue"));
 | 
			
		||||
        public float TemperatureValue
 | 
			
		||||
        {
 | 
			
		||||
            get => _temperatureValue;
 | 
			
		||||
            set => SetProperty(ref _temperatureValue, value);
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 根据冰箱温度控制保存按钮是否可点击
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _isInvalid;
 | 
			
		||||
        public bool IsInvalid
 | 
			
		||||
        {
 | 
			
		||||
            get => _isInvalid;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _isInvalid, value);
 | 
			
		||||
                BtnIsEnable = !IsInvalid;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 根据冰箱温度控制保存按钮是否可用
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _btnIsEnable = true;
 | 
			
		||||
        public bool BtnIsEnable
 | 
			
		||||
        {
 | 
			
		||||
            get => _btnIsEnable;
 | 
			
		||||
            set => SetProperty(ref _btnIsEnable, value);
 | 
			
		||||
        }
 | 
			
		||||
        //冰箱状态:true关1;false开0
 | 
			
		||||
        private bool _fridgeState;
 | 
			
		||||
        public bool FridgeState
 | 
			
		||||
        {
 | 
			
		||||
            get => _fridgeState;
 | 
			
		||||
            set => SetProperty(ref _fridgeState, value);
 | 
			
		||||
        }
 | 
			
		||||
        //报警状态:true关1;false开0
 | 
			
		||||
        private bool _alarmState;
 | 
			
		||||
        public bool AlarmState
 | 
			
		||||
        {
 | 
			
		||||
            get => _alarmState;
 | 
			
		||||
            set => SetProperty(ref _alarmState, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private float retTemperature = Convert.ToSingle(ConfigurationManager.AppSettings["temperatureValue"]);
 | 
			
		||||
 | 
			
		||||
        private PortUtil _portUtil;
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        public FridgeOnlyWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            _portUtil = portUtil;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 保存按钮
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand SaveCommand { get => new DelegateCommand(SaveAction, () => !IsInvalid); }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
 | 
			
		||||
        private async void SaveAction()
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                _portUtil.FridgeOperate = true;
 | 
			
		||||
 | 
			
		||||
                //设置温度值验证不通过则直接返回不保存
 | 
			
		||||
                //获取冰箱温度
 | 
			
		||||
                //if (_fridgeState != _defaultLoginMode.Equals(1))
 | 
			
		||||
                //{
 | 
			
		||||
                //    ConfigurationManager.RefreshSection("FridgeState");
 | 
			
		||||
                //发送冰箱使能/失能指令
 | 
			
		||||
                //if (FridgeState)
 | 
			
		||||
                //{
 | 
			
		||||
                //    await _portUtil.FridgeOff(1);
 | 
			
		||||
                //    Thread.Sleep(100);
 | 
			
		||||
                //    CommonClass.SaveAppSetting("FridgeState", "1");
 | 
			
		||||
 | 
			
		||||
                //    //Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 | 
			
		||||
                //    //_configuration.AppSettings.Settings["FridgeState"].Value = "1";
 | 
			
		||||
                //    //_configuration.Save();
 | 
			
		||||
                //    //ConfigurationManager.RefreshSection("FridgeState");
 | 
			
		||||
                //}
 | 
			
		||||
                //else
 | 
			
		||||
                //{
 | 
			
		||||
                //    await _portUtil.FridegOpen(1);
 | 
			
		||||
                //    Thread.Sleep(100);
 | 
			
		||||
                //    CommonClass.SaveAppSetting("FridgeState", "0");
 | 
			
		||||
                //    //Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 | 
			
		||||
                //    //_configuration.AppSettings.Settings["FridgeState"].Value = "0";
 | 
			
		||||
                //    //_configuration.Save();
 | 
			
		||||
                //    //ConfigurationManager.RefreshSection("FridgeState");
 | 
			
		||||
                //    //冰箱打开定时获取冰箱温度
 | 
			
		||||
                //    _eventAggregator.GetEvent<FridgeEvent>().Publish();
 | 
			
		||||
                //}
 | 
			
		||||
                ////发送警报使能/失能指令
 | 
			
		||||
                //if (AlarmState)
 | 
			
		||||
                //{
 | 
			
		||||
                //    await _portUtil.FridgeAlarmOff(1);
 | 
			
		||||
                //    Thread.Sleep(100);
 | 
			
		||||
                //    CommonClass.SaveAppSetting("AlarmState", "1");
 | 
			
		||||
                //    //Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 | 
			
		||||
                //    //_configuration.AppSettings.Settings["AlarmState"].Value = "1";
 | 
			
		||||
                //    //_configuration.Save();
 | 
			
		||||
                //    //ConfigurationManager.RefreshSection("AlarmState");
 | 
			
		||||
                //}
 | 
			
		||||
                //else
 | 
			
		||||
                //{
 | 
			
		||||
                //    await _portUtil.FridgeAlarmOn(1);
 | 
			
		||||
                //    Thread.Sleep(100);
 | 
			
		||||
                //    CommonClass.SaveAppSetting("AlarmState", "0");
 | 
			
		||||
 | 
			
		||||
                //    //Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 | 
			
		||||
                //    //_configuration.AppSettings.Settings["AlarmState"].Value = "0";
 | 
			
		||||
                //    //_configuration.Save();
 | 
			
		||||
                //    //ConfigurationManager.RefreshSection("AlarmState");
 | 
			
		||||
                //}
 | 
			
		||||
                //设定冰箱1温度区间
 | 
			
		||||
                //string[] range = ConfigurationManager.AppSettings["temperatureRange"].Split('-');
 | 
			
		||||
                string[] newRange = TemperatureRange.Split('-');
 | 
			
		||||
                if (newRange.Length >= 2)
 | 
			
		||||
                {
 | 
			
		||||
                    bool bMix = float.TryParse(newRange[0], out float Min);
 | 
			
		||||
                    bool bMax = float.TryParse(newRange[1], out float Max);
 | 
			
		||||
 | 
			
		||||
                    //if (bMix && bMax)
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    if (Min != Convert.ToSingle(newRange[0]))
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        //设定冰箱温度最小值
 | 
			
		||||
                    //        await _portUtil.FridgeMinSetting(Convert.ToSingle(newRange[0]),1);
 | 
			
		||||
                    //        Thread.Sleep(100);
 | 
			
		||||
                    //    }
 | 
			
		||||
                    //    if (Max != Convert.ToSingle(newRange[1]))
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        Thread.Sleep(100);
 | 
			
		||||
                    //        //设定冰箱温度最大值
 | 
			
		||||
                    //        await _portUtil.FridgeMaxSetting(Convert.ToSingle(newRange[1]), 1);
 | 
			
		||||
                    //        Thread.Sleep(100);
 | 
			
		||||
                    //    }
 | 
			
		||||
                    //}
 | 
			
		||||
                    await _portUtil.SetFridgeLowHeightForNew(Convert.ToSingle(newRange[0]), Convert.ToSingle(newRange[1]), 1);
 | 
			
		||||
                    CommonClass.SaveAppSetting("TemperatureRange", TemperatureRange);
 | 
			
		||||
                }
 | 
			
		||||
                ////超时时间
 | 
			
		||||
                //if (OutRangeTime != null)
 | 
			
		||||
                //{
 | 
			
		||||
                //    //Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 | 
			
		||||
                //    //_configuration.AppSettings.Settings["OutRangeTime"].Value = OutRangeTime;
 | 
			
		||||
                //    //_configuration.Save();
 | 
			
		||||
                //    //ConfigurationManager.RefreshSection("OutRangeTime");
 | 
			
		||||
                //    CommonClass.SaveAppSetting("OutRangeTime", OutRangeTime);
 | 
			
		||||
                //}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                _portUtil.FridgeOperate = false;
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = $"保存成功",
 | 
			
		||||
                    Type = MsgType.SUCCESS
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = $"保存异常{ex.ToString}",
 | 
			
		||||
                    Type = MsgType.ERROR
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                _portUtil.FridgeOperate = false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题
 | 
			
		||||
        //public int ReadAppSetting(string key)
 | 
			
		||||
        //{
 | 
			
		||||
        //    string xPath = "/configuration/appSettings//add[@key='" + key + "']";
 | 
			
		||||
        //    XmlDocument doc = new XmlDocument();
 | 
			
		||||
        //    string exeFileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
 | 
			
		||||
        //    doc.Load(exeFileName + ".dll.config");
 | 
			
		||||
        //    XmlNode node = doc.SelectSingleNode(xPath);
 | 
			
		||||
        //    logger.Info($"xPath:{xPath} exeFileName:{exeFileName} ReadAppSetting key:{key} value:{node.Attributes["value"].Value}");
 | 
			
		||||
        //    return Convert.ToInt32(node.Attributes["value"].Value);
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            FridgeState =CommonClass.ReadAppSetting("FridgeState").Equals("1");
 | 
			
		||||
 | 
			
		||||
            AlarmState = CommonClass.ReadAppSetting("AlarmState").Equals("1");
 | 
			
		||||
 | 
			
		||||
            GetTemperature();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
        //获取冰箱温度值,如有更改则保存更改
 | 
			
		||||
        private async Task GetTemperature()
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            //float retT = await _portUtil.GetFridgeTemperature();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,345 @@
 | 
			
		|||
using DM_Weight.Common;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using Prism.Commands;
 | 
			
		||||
using Prism.Events;
 | 
			
		||||
using Prism.Mvvm;
 | 
			
		||||
using Prism.Regions;
 | 
			
		||||
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;
 | 
			
		||||
using System.Xml;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class FridgeWindowViewModel : BindableBase, IRegionMemberLifetime, INavigationAware
 | 
			
		||||
    {
 | 
			
		||||
        //温度区间
 | 
			
		||||
        private string _temperatureRange = CommonClass.ReadAppSetting("temperatureRange").ToString();
 | 
			
		||||
        public string TemperatureRange
 | 
			
		||||
        {
 | 
			
		||||
            get => _temperatureRange;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _temperatureRange, value);
 | 
			
		||||
                //更新配置文件中冰箱温度区间
 | 
			
		||||
                CommonClass.SaveAppSetting("temperatureRange", _temperatureRange);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //冰箱2温度区间
 | 
			
		||||
        private string _temperatureRange2 = CommonClass.ReadAppSetting("temperatureRange2").ToString();
 | 
			
		||||
        public string TemperatureRange2
 | 
			
		||||
        {
 | 
			
		||||
            get => _temperatureRange2;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _temperatureRange2, value);
 | 
			
		||||
                //更新配置文件中冰箱温度区间
 | 
			
		||||
                CommonClass.SaveAppSetting("temperatureRange2", _temperatureRange2);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private float defaultValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue"));
 | 
			
		||||
        //温度值
 | 
			
		||||
        private float _temperatureValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue"));
 | 
			
		||||
        public float TemperatureValue
 | 
			
		||||
        {
 | 
			
		||||
            get => _temperatureValue;
 | 
			
		||||
            set => SetProperty(ref _temperatureValue, value);
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 根据冰箱温度控制保存按钮是否可点击
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _isInvalid;
 | 
			
		||||
        public bool IsInvalid
 | 
			
		||||
        {
 | 
			
		||||
            get => _isInvalid;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _isInvalid, value);
 | 
			
		||||
                BtnIsEnable = !IsInvalid;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 根据冰箱温度控制保存按钮是否可用
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _btnIsEnable = true;
 | 
			
		||||
        public bool BtnIsEnable
 | 
			
		||||
        {
 | 
			
		||||
            get => _btnIsEnable;
 | 
			
		||||
            set => SetProperty(ref _btnIsEnable, value);
 | 
			
		||||
        }
 | 
			
		||||
        //冰箱状态:true关;false开
 | 
			
		||||
        private bool _fridgeState;
 | 
			
		||||
        public bool FridgeState
 | 
			
		||||
        {
 | 
			
		||||
            get => _fridgeState;
 | 
			
		||||
            set => SetProperty(ref _fridgeState, value);
 | 
			
		||||
        }
 | 
			
		||||
        //报警状态:true关;false开
 | 
			
		||||
        private bool _alarmState;
 | 
			
		||||
        public bool AlarmState
 | 
			
		||||
        {
 | 
			
		||||
            get => _alarmState;
 | 
			
		||||
            set => SetProperty(ref _alarmState, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //冰箱2状态:true关;false开
 | 
			
		||||
        private bool _fridgeState2;
 | 
			
		||||
        public bool FridgeState2
 | 
			
		||||
        {
 | 
			
		||||
            get => _fridgeState2;
 | 
			
		||||
            set => SetProperty(ref _fridgeState2, value);
 | 
			
		||||
        }
 | 
			
		||||
        //冰箱2报警状态:true关;false开
 | 
			
		||||
        private bool _alarmState2;
 | 
			
		||||
        public bool AlarmState2
 | 
			
		||||
        {
 | 
			
		||||
            get => _alarmState2;
 | 
			
		||||
            set => SetProperty(ref _alarmState2, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private int _defaultLoginMode;//1开0关
 | 
			
		||||
 | 
			
		||||
        private int _defaultAlarmMode;//1开0关
 | 
			
		||||
 | 
			
		||||
        private float retTemperature = Convert.ToSingle(ConfigurationManager.AppSettings["temperatureValue"]);
 | 
			
		||||
 | 
			
		||||
        private PortUtil _portUtil;
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        public FridgeWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            _portUtil = portUtil;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 保存按钮
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand SaveCommand { get => new DelegateCommand(SaveAction, () => !IsInvalid); }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
 | 
			
		||||
        private async void SaveAction()
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                _portUtil.FridgeOperate = true;
 | 
			
		||||
 | 
			
		||||
                //设置温度值验证不通过则直接返回不保存
 | 
			
		||||
                //获取冰箱温度
 | 
			
		||||
                //if (_fridgeState != _defaultLoginMode.Equals(1))
 | 
			
		||||
                //{
 | 
			
		||||
                //    ConfigurationManager.RefreshSection("FridgeState");
 | 
			
		||||
                //发送冰箱使能/失能指令
 | 
			
		||||
                if (_fridgeState)
 | 
			
		||||
                {
 | 
			
		||||
                    await _portUtil.FridgeOff(1);
 | 
			
		||||
                    Thread.Sleep(100);
 | 
			
		||||
                    CommonClass.SaveAppSetting("FridgeState", "0");
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    await _portUtil.FridegOpen(1);
 | 
			
		||||
                    Thread.Sleep(100);
 | 
			
		||||
                    CommonClass.SaveAppSetting("FridgeState", "1");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                //冰箱2  发送冰箱使能/失能指令
 | 
			
		||||
                if (_fridgeState2)
 | 
			
		||||
                {
 | 
			
		||||
                    await _portUtil.FridgeOff(2);
 | 
			
		||||
                    Thread.Sleep(100);
 | 
			
		||||
                    CommonClass.SaveAppSetting("FridgeState2", "0");
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    await _portUtil.FridegOpen(2);
 | 
			
		||||
                    Thread.Sleep(100);
 | 
			
		||||
                    CommonClass.SaveAppSetting("FridgeState2", "1");
 | 
			
		||||
                }
 | 
			
		||||
                //}
 | 
			
		||||
                //温度报警设定
 | 
			
		||||
                //if (AlarmState != _defaultAlarmMode.Equals(1))
 | 
			
		||||
                //{
 | 
			
		||||
                //发送警报使能/失能指令
 | 
			
		||||
                if (_alarmState)
 | 
			
		||||
                {
 | 
			
		||||
                    await _portUtil.FridgeAlarmOff(1);
 | 
			
		||||
                    Thread.Sleep(100);
 | 
			
		||||
                    CommonClass.SaveAppSetting("AlarmState", "0");
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    await _portUtil.FridgeAlarmOn(1);
 | 
			
		||||
                    Thread.Sleep(100);
 | 
			
		||||
                    CommonClass.SaveAppSetting("AlarmState", "1");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                //冰箱2 发送警报使能/失能指令
 | 
			
		||||
                if (_alarmState2)
 | 
			
		||||
                {
 | 
			
		||||
                    await _portUtil.FridgeAlarmOff(2);
 | 
			
		||||
                    Thread.Sleep(100);
 | 
			
		||||
                    CommonClass.SaveAppSetting("AlarmState2", "0");
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    await _portUtil.FridgeAlarmOn(2);
 | 
			
		||||
                    Thread.Sleep(100);
 | 
			
		||||
                    CommonClass.SaveAppSetting("AlarmState2", "1");
 | 
			
		||||
                }
 | 
			
		||||
                //}
 | 
			
		||||
 | 
			
		||||
                //if (retTemperature != TemperatureValue)
 | 
			
		||||
                //{
 | 
			
		||||
                //    //设定冰箱温度
 | 
			
		||||
                //    await _portUtil.SetFridgeTemperature(TemperatureValue);
 | 
			
		||||
 | 
			
		||||
                //    CommonClass.SaveAppSetting("temperatureValue", TemperatureValue.ToString());
 | 
			
		||||
                //}
 | 
			
		||||
                //设定冰箱1温度区间
 | 
			
		||||
                string[] range = ConfigurationManager.AppSettings["temperatureRange"].Split('-');
 | 
			
		||||
                string[] newRange = TemperatureRange.Split('-');
 | 
			
		||||
                if (range.Length >= 2)
 | 
			
		||||
                {
 | 
			
		||||
                    bool bMix = float.TryParse(range[0], out float Min);
 | 
			
		||||
                    bool bMax = float.TryParse(range[1], out float Max);
 | 
			
		||||
 | 
			
		||||
                    if (bMix && bMax)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (Min != Convert.ToSingle(newRange[0]))
 | 
			
		||||
                        {
 | 
			
		||||
                            //设定冰箱温度最小值
 | 
			
		||||
                            await _portUtil.FridgeMinSetting(Convert.ToSingle(newRange[0]),1);
 | 
			
		||||
                            Thread.Sleep(100);
 | 
			
		||||
                        }
 | 
			
		||||
                        if (Max != Convert.ToSingle(newRange[1]))
 | 
			
		||||
                        {
 | 
			
		||||
                            Thread.Sleep(100);
 | 
			
		||||
                            //设定冰箱温度最大值
 | 
			
		||||
                            await _portUtil.FridgeMaxSetting(Convert.ToSingle(newRange[1]), 1);
 | 
			
		||||
                            Thread.Sleep(100);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                //设定冰箱2温度区间
 | 
			
		||||
                string[] range2 = ConfigurationManager.AppSettings["temperatureRange2"].Split('-');
 | 
			
		||||
                string[] newRange2 = TemperatureRange2.Split('-');
 | 
			
		||||
                if (range2.Length >= 2)
 | 
			
		||||
                {
 | 
			
		||||
                    bool bMix = float.TryParse(range2[0], out float Min);
 | 
			
		||||
                    bool bMax = float.TryParse(range2[1], out float Max);
 | 
			
		||||
 | 
			
		||||
                    if (bMix && bMax)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (Min != Convert.ToSingle(newRange2[0]))
 | 
			
		||||
                        {
 | 
			
		||||
                            //设定冰箱温度最小值
 | 
			
		||||
                            await _portUtil.FridgeMinSetting(Convert.ToSingle(newRange2[0]), 2);
 | 
			
		||||
                            Thread.Sleep(100);
 | 
			
		||||
                        }
 | 
			
		||||
                        if (Max != Convert.ToSingle(newRange2[1]))
 | 
			
		||||
                        {
 | 
			
		||||
                            Thread.Sleep(100);
 | 
			
		||||
                            //设定冰箱温度最大值
 | 
			
		||||
                            await _portUtil.FridgeMaxSetting(Convert.ToSingle(newRange2[1]), 2);
 | 
			
		||||
                            Thread.Sleep(100);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                _portUtil.FridgeOperate = false;
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = $"保存成功",
 | 
			
		||||
                    Type = MsgType.SUCCESS
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
 | 
			
		||||
                //_fridgeState = ReadAppSetting("FridgeState").Equals(1);
 | 
			
		||||
                //_defaultLoginMode = ReadAppSetting("FridgeState");
 | 
			
		||||
                //_defaultAlarmMode = ReadAppSetting("AlarmState");
 | 
			
		||||
                //_alarmState = ReadAppSetting("AlarmState").Equals(1);
 | 
			
		||||
                //_temperatureRange = CommonClass.ReadAppSetting("temperatureRange");
 | 
			
		||||
                //_temperatureValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue"));
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = $"保存异常{ex.ToString}",
 | 
			
		||||
                    Type = MsgType.ERROR
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                _portUtil.FridgeOperate = false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public FridgeWindowViewModel()
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题
 | 
			
		||||
        public int ReadAppSetting(string key)
 | 
			
		||||
        {
 | 
			
		||||
            string xPath = "/configuration/appSettings//add[@key='" + key + "']";
 | 
			
		||||
            XmlDocument doc = new XmlDocument();
 | 
			
		||||
            string exeFileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
 | 
			
		||||
            doc.Load(exeFileName + ".dll.config");
 | 
			
		||||
            XmlNode node = doc.SelectSingleNode(xPath);
 | 
			
		||||
            return Convert.ToInt32(node.Attributes["value"].Value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            _fridgeState = ReadAppSetting("FridgeState").Equals(0);
 | 
			
		||||
            _defaultLoginMode = ReadAppSetting("FridgeState");
 | 
			
		||||
            _defaultAlarmMode = ReadAppSetting("AlarmState");
 | 
			
		||||
            _alarmState = ReadAppSetting("AlarmState").Equals(0);
 | 
			
		||||
 | 
			
		||||
            GetTemperature();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        //{
 | 
			
		||||
        //    GetTemperature();
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        //{
 | 
			
		||||
        //    return true;
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
			
		||||
        //{
 | 
			
		||||
        //}
 | 
			
		||||
        //获取冰箱温度值,如有更改则保存更改
 | 
			
		||||
        private async Task GetTemperature()
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            //float retT = await _portUtil.GetFridgeTemperature();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,13 @@
 | 
			
		|||
using log4net;
 | 
			
		||||
using DM_Weight.Common;
 | 
			
		||||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using DM_Weight.Views;
 | 
			
		||||
using log4net;
 | 
			
		||||
using log4net.Repository.Hierarchy;
 | 
			
		||||
using MaterialDesignThemes.Wpf;
 | 
			
		||||
using Newtonsoft.Json.Linq;
 | 
			
		||||
using Prism.Commands;
 | 
			
		||||
using Prism.Events;
 | 
			
		||||
using Prism.Mvvm;
 | 
			
		||||
| 
						 | 
				
			
			@ -10,19 +19,14 @@ using System.Collections.Generic;
 | 
			
		|||
using System.Configuration;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Timers;
 | 
			
		||||
using System.Windows;
 | 
			
		||||
using System.Windows.Controls;
 | 
			
		||||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using DM_Weight.Views;
 | 
			
		||||
using System.Timers;
 | 
			
		||||
using Unity;
 | 
			
		||||
using System.Windows.Media;
 | 
			
		||||
using System.Windows.Threading;
 | 
			
		||||
using Newtonsoft.Json.Linq;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.HIKVISION;
 | 
			
		||||
using Unity;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -34,6 +38,38 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        private UserList? _userList;
 | 
			
		||||
        private UserList? _userList2;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 冰箱温度
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private string _wd = "恒温冷藏抽屉当前温度2.8(非真实数据)";
 | 
			
		||||
        public string WD { get => _wd; set => SetProperty(ref _wd, value); }
 | 
			
		||||
 | 
			
		||||
        private SolidColorBrush _alertColor = Brushes.White;
 | 
			
		||||
        public SolidColorBrush AlertColor
 | 
			
		||||
        {
 | 
			
		||||
            get => _alertColor;
 | 
			
		||||
            set => SetProperty(ref _alertColor, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 是否有冰箱抽屉
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private string hasFridge = ConfigurationManager.AppSettings["hasFridge"].ToString().Equals("1") ? "Visible" : "Collapsed";
 | 
			
		||||
        public string HasFridge { get => hasFridge; set => SetProperty(ref hasFridge, value); }
 | 
			
		||||
 | 
			
		||||
        //温度区间
 | 
			
		||||
        private string TemperatureRange = CommonClass.ReadAppSetting("temperatureRange").ToString();
 | 
			
		||||
        //温度不在区间计时器(超过配置文件中的时间后要报警)
 | 
			
		||||
        public DateTime? FridgeTime { get; set; }
 | 
			
		||||
        //冰箱是否异常状态:0正常,1异常
 | 
			
		||||
        //public string FridgeWorkingState = ConfigurationManager.AppSettings["FridgeworkingState"].ToString();
 | 
			
		||||
        //冰箱开关状态:1开,0关
 | 
			
		||||
        public int FridgeState =0;
 | 
			
		||||
        //冰箱渡不在区间超时时间
 | 
			
		||||
        private string _outRangeTime = ConfigurationManager.AppSettings["OutRangeTime"].ToString();
 | 
			
		||||
        public string OutRangeTime { get => _outRangeTime; set => SetProperty(ref _outRangeTime, value); }
 | 
			
		||||
 | 
			
		||||
        private int loginMode = Convert.ToInt32(ConfigurationManager.AppSettings["loginMode"]?.ToString() ?? "1");
 | 
			
		||||
        public bool MultiLogin
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -51,76 +87,87 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            get { return _selectedChildMenu; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                if (!_portUtil.Operate)
 | 
			
		||||
                {
 | 
			
		||||
                    if (value != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (value.PremissionPath.Equals("TakeRecordWindow"))
 | 
			
		||||
                        {
 | 
			
		||||
                            //定义传参变量
 | 
			
		||||
                            NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
                //if (!_portUtil.Operate)
 | 
			
		||||
                //{
 | 
			
		||||
                //    if (value != null)
 | 
			
		||||
                //    {
 | 
			
		||||
                //        if (value.PremissionPath.Equals("TakeRecordWindow"))
 | 
			
		||||
                //        {
 | 
			
		||||
                //            //定义传参变量
 | 
			
		||||
                //            NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
 | 
			
		||||
                            //添加参数,键值对格式
 | 
			
		||||
                            keys.Add("Type", 2);
 | 
			
		||||
                            _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
 | 
			
		||||
                        }
 | 
			
		||||
                        else if (value.PremissionPath.Equals("AddRecordWindow"))
 | 
			
		||||
                        {
 | 
			
		||||
                            //定义传参变量
 | 
			
		||||
                            NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
                //            //添加参数,键值对格式
 | 
			
		||||
                //            keys.Add("Type", 2);
 | 
			
		||||
                //            _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
 | 
			
		||||
                //        }
 | 
			
		||||
                //        else if (value.PremissionPath.Equals("AddRecordWindow"))
 | 
			
		||||
                //        {
 | 
			
		||||
                //            //定义传参变量
 | 
			
		||||
                //            NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
 | 
			
		||||
                            //添加参数,键值对格式
 | 
			
		||||
                            keys.Add("Type", 1);
 | 
			
		||||
                            _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
 | 
			
		||||
                        }
 | 
			
		||||
                        else if (value.PremissionPath.Equals("ReturnRecordWindow"))
 | 
			
		||||
                        {
 | 
			
		||||
                            //定义传参变量
 | 
			
		||||
                            NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
                //            //添加参数,键值对格式
 | 
			
		||||
                //            keys.Add("Type", 1);
 | 
			
		||||
                //            _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
 | 
			
		||||
                //        }
 | 
			
		||||
                //        else if (value.PremissionPath.Equals("ReturnRecordWindow"))
 | 
			
		||||
                //        {
 | 
			
		||||
                //            //定义传参变量
 | 
			
		||||
                //            NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
 | 
			
		||||
                            //添加参数,键值对格式
 | 
			
		||||
                            keys.Add("Type", 3);
 | 
			
		||||
                            _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
 | 
			
		||||
                        }
 | 
			
		||||
                        else if (value.PremissionPath.Equals("RetrunEmptyRecordWindow"))
 | 
			
		||||
                        {
 | 
			
		||||
                            //定义传参变量
 | 
			
		||||
                            NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
                //            //添加参数,键值对格式
 | 
			
		||||
                //            keys.Add("Type", 3);
 | 
			
		||||
                //            _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
 | 
			
		||||
                //        }
 | 
			
		||||
                //        else if (value.PremissionPath.Equals("RetrunEmptyRecordWindow"))
 | 
			
		||||
                //        {
 | 
			
		||||
                //            //定义传参变量
 | 
			
		||||
                //            NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
 | 
			
		||||
                            //添加参数,键值对格式
 | 
			
		||||
                            keys.Add("Type", 3);
 | 
			
		||||
                            _regionManager.RequestNavigate("ContentRegion", value.PremissionPath, keys);
 | 
			
		||||
                        }
 | 
			
		||||
                        else if (value.PremissionPath.Equals("CheckRecordWindow"))
 | 
			
		||||
                        {
 | 
			
		||||
                            //定义传参变量
 | 
			
		||||
                            NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
                //            //添加参数,键值对格式
 | 
			
		||||
                //            keys.Add("Type", 3);
 | 
			
		||||
                //            _regionManager.RequestNavigate("ContentRegion", value.PremissionPath, keys);
 | 
			
		||||
                //        }
 | 
			
		||||
                //        else if (value.PremissionPath.Equals("CheckRecordWindow"))
 | 
			
		||||
                //        {
 | 
			
		||||
                //            //定义传参变量
 | 
			
		||||
                //            NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
 | 
			
		||||
                            //添加参数,键值对格式
 | 
			
		||||
                            keys.Add("Type", 4);
 | 
			
		||||
                            _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            if (value.PremissionPath.Equals("ReturnDrugWindow") || value.PremissionPath.Equals("ReturnDrugWindow2"))
 | 
			
		||||
                            {
 | 
			
		||||
                                if (ConfigurationManager.AppSettings["returnDrugMode"].ToString().Equals("1"))
 | 
			
		||||
                                {
 | 
			
		||||
                                    _regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow2");
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    _regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow");
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                _regionManager.RequestNavigate("ContentRegion", value.PremissionPath);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    SetProperty(ref _selectedChildMenu, value);
 | 
			
		||||
                }
 | 
			
		||||
                //            //添加参数,键值对格式
 | 
			
		||||
                //            keys.Add("Type", 4);
 | 
			
		||||
                //            _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
 | 
			
		||||
                //        }
 | 
			
		||||
                //        else
 | 
			
		||||
                //        {
 | 
			
		||||
                //            if (value.PremissionPath.Equals("ReturnDrugWindow") || value.PremissionPath.Equals("ReturnDrugWindow2"))
 | 
			
		||||
                //            {
 | 
			
		||||
                //                if (ConfigurationManager.AppSettings["returnDrugMode"].ToString().Equals("1"))
 | 
			
		||||
                //                {
 | 
			
		||||
                //                    _regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow2");
 | 
			
		||||
                //                }
 | 
			
		||||
                //                else
 | 
			
		||||
                //                {
 | 
			
		||||
                //                    _regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow");
 | 
			
		||||
                //                }
 | 
			
		||||
                //            }
 | 
			
		||||
                //            else if (value.PremissionPath.Equals("SettingMainWindow") || value.PremissionPath.Equals("SettingWindow"))
 | 
			
		||||
                //            {
 | 
			
		||||
                //                //if (Convert.ToInt32(ConfigurationManager.AppSettings["hasFridge"])>0)
 | 
			
		||||
                //                //{
 | 
			
		||||
                //                //    _regionManager.RequestNavigate("ContentRegion", "SettingMainWindow");
 | 
			
		||||
                //                //}
 | 
			
		||||
                //                //else
 | 
			
		||||
                //                {
 | 
			
		||||
                //                    _regionManager.RequestNavigate("ContentRegion", "SettingWindow");
 | 
			
		||||
                //                } 
 | 
			
		||||
                //            }
 | 
			
		||||
                //            else
 | 
			
		||||
                //            {
 | 
			
		||||
                //                _regionManager.RequestNavigate("ContentRegion", value.PremissionPath);
 | 
			
		||||
                //            }
 | 
			
		||||
                //        }
 | 
			
		||||
                //    }
 | 
			
		||||
                SetProperty(ref _selectedChildMenu, value);
 | 
			
		||||
                //}
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -146,19 +193,47 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                SetProperty(ref _selectedMenu, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        PremissionDm? PreSelectedMenu;
 | 
			
		||||
        #region 父菜单点击事件
 | 
			
		||||
 | 
			
		||||
        private DelegateCommand<ListBox> _selectionCommon;
 | 
			
		||||
        public DelegateCommand<ListBox> SelectionCommon
 | 
			
		||||
        #endregion
 | 
			
		||||
        private DelegateCommand _selectionCommon;
 | 
			
		||||
        public DelegateCommand SelectionCommon
 | 
			
		||||
        {
 | 
			
		||||
            get => _selectionCommon ?? (_selectionCommon = new DelegateCommand<ListBox>(SelectionMethod));
 | 
			
		||||
            get => _selectionCommon ?? (_selectionCommon = new DelegateCommand(SelectionMethod));
 | 
			
		||||
        }
 | 
			
		||||
        private void SelectionMethod(ListBox viewName)
 | 
			
		||||
        private void SelectionMethod()
 | 
			
		||||
        {
 | 
			
		||||
            SelectedMenu = viewName.SelectedItem as PremissionDm;
 | 
			
		||||
            if (SelectedMenu.PremissionName == "退出")
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                _chkFunction.HIKStopDVRRecord();
 | 
			
		||||
            if (SelectedMenu != null && SelectedMenu.PremissionName != "退出")
 | 
			
		||||
            {
 | 
			
		||||
                PreSelectedMenu = SelectedMenu;
 | 
			
		||||
            }
 | 
			
		||||
            if (_portUtil.Operate)
 | 
			
		||||
            {
 | 
			
		||||
                if (PreSelectedMenu != null)
 | 
			
		||||
                {
 | 
			
		||||
                    SelectedMenu = PreSelectedMenu;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            //SelectedMenu = viewName.SelectedItem as PremissionDm;
 | 
			
		||||
            //if (SelectedMenu.PremissionName == "退出")
 | 
			
		||||
            //{
 | 
			
		||||
 | 
			
		||||
            //    _chkFunction.HIKStopDVRRecord();
 | 
			
		||||
            //    logger.Info($"用户【{Operator?.Nickname}】退出登录");
 | 
			
		||||
            //    Operator = null;
 | 
			
		||||
            //    Reviewer = null;
 | 
			
		||||
            //    _regionManager.RequestNavigate("MainRegion", "LoginWindow");
 | 
			
		||||
            //}
 | 
			
		||||
            //else
 | 
			
		||||
            //{
 | 
			
		||||
            //    //SelectedMenu.Children = SelectedMenu.Children;
 | 
			
		||||
            //    SelectedChildMenu = SelectedMenu.Children[0];
 | 
			
		||||
            //}
 | 
			
		||||
            logger.Info("开始进入父菜单");
 | 
			
		||||
            if (SelectedMenu != null && SelectedMenu.PremissionName == "退出" && !_portUtil.Operate)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"用户【{Operator?.Nickname}】退出登录");
 | 
			
		||||
                Operator = null;
 | 
			
		||||
                Reviewer = null;
 | 
			
		||||
| 
						 | 
				
			
			@ -166,11 +241,111 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                //SelectedMenu.Children = SelectedMenu.Children;
 | 
			
		||||
                SelectedChildMenu = SelectedMenu.Children[0];
 | 
			
		||||
                if (!_portUtil.Operate)
 | 
			
		||||
                {
 | 
			
		||||
                    _regionManager.RequestNavigate("ContentRegion", SelectedMenu.Children[0].PremissionPath);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            logger.Info("结束父菜单");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #region
 | 
			
		||||
        private DelegateCommand _selectionChildCommon;
 | 
			
		||||
        public DelegateCommand SelectionChildCommon
 | 
			
		||||
        {
 | 
			
		||||
            get => _selectionChildCommon ?? (_selectionChildCommon = new DelegateCommand(SelectionChildMethod));
 | 
			
		||||
        }
 | 
			
		||||
        private void SelectionChildMethod()
 | 
			
		||||
        {
 | 
			
		||||
            SelectChildNavigate(SelectedChildMenu);
 | 
			
		||||
        }
 | 
			
		||||
        private void SelectChildNavigate(PremissionDm SelectedChildMenu)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_portUtil.Operate)
 | 
			
		||||
            {
 | 
			
		||||
                if (SelectedChildMenu != null)
 | 
			
		||||
                {
 | 
			
		||||
                    if (SelectedChildMenu.PremissionPath.Equals("TakeRecordWindow"))
 | 
			
		||||
                    {
 | 
			
		||||
                        //定义传参变量
 | 
			
		||||
                        NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
 | 
			
		||||
                        //添加参数,键值对格式
 | 
			
		||||
                        keys.Add("Type", 2);
 | 
			
		||||
                        _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (SelectedChildMenu.PremissionPath.Equals("AddRecordWindow"))
 | 
			
		||||
                    {
 | 
			
		||||
                        //定义传参变量
 | 
			
		||||
                        NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
 | 
			
		||||
                        //添加参数,键值对格式
 | 
			
		||||
                        keys.Add("Type", 1);
 | 
			
		||||
                        _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (SelectedChildMenu.PremissionPath.Equals("ReturnRecordWindow"))
 | 
			
		||||
                    {
 | 
			
		||||
                        //定义传参变量
 | 
			
		||||
                        NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
 | 
			
		||||
                        //添加参数,键值对格式
 | 
			
		||||
                        keys.Add("Type", 3);
 | 
			
		||||
                        _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (SelectedChildMenu.PremissionPath.Equals("RetrunEmptyRecordWindow"))
 | 
			
		||||
                    {
 | 
			
		||||
                        //定义传参变量
 | 
			
		||||
                        NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
 | 
			
		||||
                        //添加参数,键值对格式
 | 
			
		||||
                        keys.Add("Type", 3);
 | 
			
		||||
                        _regionManager.RequestNavigate("ContentRegion", SelectedChildMenu.PremissionPath, keys);
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (SelectedChildMenu.PremissionPath.Equals("CheckRecordWindow"))
 | 
			
		||||
                    {
 | 
			
		||||
                        //定义传参变量
 | 
			
		||||
                        NavigationParameters keys = new NavigationParameters();
 | 
			
		||||
 | 
			
		||||
                        //添加参数,键值对格式
 | 
			
		||||
                        keys.Add("Type", 4);
 | 
			
		||||
                        _regionManager.RequestNavigate("ContentRegion", "MachineRecordWindow", keys);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        if (SelectedChildMenu.PremissionPath.Equals("ReturnDrugWindow") || SelectedChildMenu.PremissionPath.Equals("ReturnDrugWindow2"))
 | 
			
		||||
                        {
 | 
			
		||||
                            if (ConfigurationManager.AppSettings["returnDrugMode"].ToString().Equals("1"))
 | 
			
		||||
                            {
 | 
			
		||||
                                _regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow2");
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                _regionManager.RequestNavigate("ContentRegion", "ReturnDrugWindow");
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        //else if (SelectedChildMenu.PremissionPath.Equals("SettingMainWindow") || SelectedChildMenu.PremissionPath.Equals("SettingWindow"))
 | 
			
		||||
                        //{
 | 
			
		||||
                        //    if (Convert.ToInt32(ConfigurationManager.AppSettings["hasFridge"]) > 0)
 | 
			
		||||
                        //    {
 | 
			
		||||
                        //        _regionManager.RequestNavigate("ContentRegion", "SettingMainWindow");
 | 
			
		||||
                        //    }
 | 
			
		||||
                        //    else
 | 
			
		||||
                        //    {
 | 
			
		||||
                        //        _regionManager.RequestNavigate("ContentRegion", "SettingWindow");
 | 
			
		||||
                        //    }
 | 
			
		||||
                        //}
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            _regionManager.RequestNavigate("ContentRegion", SelectedChildMenu.PremissionPath);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public List<PremissionDm> PremissionDmList { get { return _premissionDmList; } set { SetProperty(ref _premissionDmList, value); } }
 | 
			
		||||
 | 
			
		||||
        public UserList UserList { get { return _userList; } set { SetProperty(ref _userList, value); } }
 | 
			
		||||
| 
						 | 
				
			
			@ -186,16 +361,17 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        public bool Is16Drawer { get => _is16Drawer; set => SetProperty(ref _is16Drawer, value); }
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
        private PortUtil _portUtil;
 | 
			
		||||
        private CHKFunction _chkFunction;
 | 
			
		||||
        //private CHKFunction _chkFunction;
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        public HomeWindowViewModel(IRegionManager iRegionManager, PortUtil portUtil, IDialogService dialogService, IUnityContainer container, IEventAggregator eventAggregator,CHKFunction cHKFunction)
 | 
			
		||||
        bool IsLeave = false;
 | 
			
		||||
        public HomeWindowViewModel(IRegionManager iRegionManager, PortUtil portUtil, IDialogService dialogService, IUnityContainer container, IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            _portUtil = portUtil;
 | 
			
		||||
            _regionManager = iRegionManager;
 | 
			
		||||
            _dialogService = dialogService;
 | 
			
		||||
            _container = container;
 | 
			
		||||
            this._eventAggregator = eventAggregator;
 | 
			
		||||
            _chkFunction= cHKFunction;
 | 
			
		||||
            //_chkFunction = cHKFunction;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand<string> OpenFingerDialog
 | 
			
		||||
| 
						 | 
				
			
			@ -262,6 +438,93 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            }
 | 
			
		||||
            Is16Drawer = count == 16;
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 获取温度信息
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private async void GetWD(object sender, ElapsedEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_portUtil.FridgeOperate)
 | 
			
		||||
            {
 | 
			
		||||
                string retStr = string.Empty;
 | 
			
		||||
                byte[] data = null;
 | 
			
		||||
                float retT = await _portUtil.GetFridgeTemperatureForNew(1);
 | 
			
		||||
                Thread.Sleep(80);
 | 
			
		||||
                WD = $"恒温冷藏抽屉当前温度:{Math.Round((retT), 2)}℃";
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async void GetWD()
 | 
			
		||||
        {
 | 
			
		||||
            //查询冰箱继电器状态
 | 
			
		||||
            FridgeState =await _portUtil.GetFridgeState(1);
 | 
			
		||||
 | 
			
		||||
            if (!_portUtil.FridgeOperate && FridgeState.Equals(1))
 | 
			
		||||
            {
 | 
			
		||||
                string retStr = string.Empty;
 | 
			
		||||
                byte[] data = null;
 | 
			
		||||
                float retT = await _portUtil.GetFridgeTemperatureForNew(1);
 | 
			
		||||
                Thread.Sleep(80);
 | 
			
		||||
                WD = $"恒温冷藏抽屉当前温度:{Math.Round((retT), 2)}℃";
 | 
			
		||||
                logger.Info(WD);
 | 
			
		||||
                //if (Convert.ToInt32(ConfigurationManager.AppSettings["hasFridge"]) > 1)
 | 
			
		||||
                //{
 | 
			
		||||
                //    float retTemp = await _portUtil.GetFridgeTemperature(2);
 | 
			
		||||
                //    Thread.Sleep(80);
 | 
			
		||||
                //    WD += $"{retTemp}℃";
 | 
			
		||||
                //}
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                {
 | 
			
		||||
                    Message = $"正在获取冰箱温度或已关闭冰箱制冷功能!!!",
 | 
			
		||||
                    Type = MsgType.ERROR
 | 
			
		||||
                };
 | 
			
		||||
                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 将收到的返回转换成具体温度数值
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="receiveData"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public string GetResultWD(string receiveData)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                //string newStrWD = receiveData.Substring(10, 4);
 | 
			
		||||
 | 
			
		||||
                //logger.Info($"截取后数据newStrWD:{newStrWD}");
 | 
			
		||||
                int iWD = Convert.ToInt32(receiveData, 16);
 | 
			
		||||
                logger.Info($"截取后数据iWD:{iWD}");
 | 
			
		||||
                float fWD = 0;
 | 
			
		||||
                if (iWD != 0)
 | 
			
		||||
                {
 | 
			
		||||
                    fWD = iWD * 1.0f / 10;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                logger.Info($"截取后数据fWD:{fWD}");
 | 
			
		||||
                string strRet = $"恒温冷藏抽屉当前温度:{fWD}℃;";
 | 
			
		||||
 | 
			
		||||
                return strRet;
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info("GetResultWD异常", new Exception($"{ex.ToString()}"));
 | 
			
		||||
            }
 | 
			
		||||
            return "数据异常";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查看冰箱温度
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DelegateCommand CheckWDCommand { get => new DelegateCommand(CheckAction); }
 | 
			
		||||
        private void CheckAction()
 | 
			
		||||
        {
 | 
			
		||||
            GetWD();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //这个方法用于拦截请求,continuationCallback(true)就是不拦截,continuationCallback(false)拦截本次操作
 | 
			
		||||
        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
 | 
			
		||||
| 
						 | 
				
			
			@ -272,7 +535,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        //接收导航传过来的参数
 | 
			
		||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
	    _portUtil.dateTime = DateTime.Now;
 | 
			
		||||
            _portUtil.dateTime = DateTime.Now; 
 | 
			
		||||
            //取出user
 | 
			
		||||
            UserList = navigationContext.Parameters.GetValue<UserList>("operator");
 | 
			
		||||
            Operator = UserList;
 | 
			
		||||
| 
						 | 
				
			
			@ -305,37 +568,192 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            //.ToTree(pd => pd.Children, pd => pd.ParentId, 0);
 | 
			
		||||
            PremissionDmList = premissions;
 | 
			
		||||
            SelectedMenu = premissions[0];
 | 
			
		||||
            PreSelectedMenu = premissions[0];
 | 
			
		||||
            SelectedChildMenu = premissions[0].Children[0];
 | 
			
		||||
            _regionManager.RequestNavigate("ContentRegion", premissions[0].Children[0].PremissionPath);
 | 
			
		||||
            FindDrawerCount();
 | 
			
		||||
 | 
			
		||||
            int autoExit = Convert.ToInt32(ConfigurationManager.AppSettings["autoExit"] ?? "0");
 | 
			
		||||
            if (autoExit > 0)
 | 
			
		||||
            {
 | 
			
		||||
                Timer timer = new Timer();
 | 
			
		||||
                timer.Interval = 1000;
 | 
			
		||||
                timer.Elapsed += (sender, e) =>
 | 
			
		||||
                logger.Info("启动自动退出检测");
 | 
			
		||||
                //int interval = autoExit * 1000;
 | 
			
		||||
                new PromiseUtil<int>().taskAsyncLoop(10, 0, async (options, next, stop) =>
 | 
			
		||||
                {
 | 
			
		||||
                    // 串口无人操作
 | 
			
		||||
                    if (!_portUtil.Operate)
 | 
			
		||||
                    try
 | 
			
		||||
                    {
 | 
			
		||||
                        // 30秒内无人操作鼠标键盘
 | 
			
		||||
                        if ((DateTime.Now - _portUtil.dateTime).TotalSeconds > autoExit && CheckComputerFreeState.GetLastInputTime() > autoExit)
 | 
			
		||||
                        if (!_portUtil.Operate)
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"设备30秒内无人操作,用户【{Operator?.Nickname}】自动退出登录");
 | 
			
		||||
                            _chkFunction.HIKStopDVRRecord();
 | 
			
		||||
                            Operator = null;
 | 
			
		||||
                            Reviewer = null;
 | 
			
		||||
                            Application.Current.Dispatcher.Invoke(() =>
 | 
			
		||||
                            // 无人操作鼠标键盘
 | 
			
		||||
                            if ((DateTime.Now - _portUtil.dateTime).TotalSeconds > autoExit && CheckComputerFreeState.GetLastInputTime() > autoExit)
 | 
			
		||||
                            {
 | 
			
		||||
                                _regionManager.RequestNavigate("MainRegion", "LoginWindow");
 | 
			
		||||
                                timer.Stop();
 | 
			
		||||
                            });
 | 
			
		||||
                                logger.Info($"设备{autoExit}内无人操作,用户【{Operator?.Nickname}】自动退出登录,_portUtil.Operate:{_portUtil.Operate},totalSecond:{(DateTime.Now - _portUtil.dateTime).TotalSeconds},lastInputTime:{CheckComputerFreeState.GetLastInputTime()},autoExit:{autoExit}");
 | 
			
		||||
 | 
			
		||||
                                Operator = null;
 | 
			
		||||
                                Reviewer = null;
 | 
			
		||||
                                //Application.Current.Dispatcher.Invoke(() =>
 | 
			
		||||
                                //{
 | 
			
		||||
                                stop();
 | 
			
		||||
                                System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
 | 
			
		||||
                                {
 | 
			
		||||
                                    if (DialogHost.IsDialogOpen("RootDialog"))
 | 
			
		||||
                                    {
 | 
			
		||||
                                        DialogHost.Close("RootDialog");
 | 
			
		||||
                                    } 
 | 
			
		||||
                                    _regionManager.RequestNavigate("MainRegion", "LoginWindow");
 | 
			
		||||
                                }));
 | 
			
		||||
                                //});
 | 
			
		||||
                                //timer.Dispose();
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                if (Operator == null)
 | 
			
		||||
                                {
 | 
			
		||||
                                    logger.Info("自动退出检测已停止");
 | 
			
		||||
                                    stop();
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    logger.Info($"停止操作时间{_portUtil.dateTime},自动退出时间{autoExit},运算结果{(DateTime.Now - _portUtil.dateTime).TotalSeconds},用户上次使用系统到现在的时间间隔{CheckComputerFreeState.GetLastInputTime()}");
 | 
			
		||||
                                    next();
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            _portUtil.dateTime = DateTime.Now;
 | 
			
		||||
                            next();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                };
 | 
			
		||||
                timer.Start();
 | 
			
		||||
                    catch (Exception ex)
 | 
			
		||||
                    {
 | 
			
		||||
                        logger.Info($"自动退出异常:{ex.Message}");
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
            _chkFunction.HIKStartDVRRecord();
 | 
			
		||||
            //int autoExit = Convert.ToInt32(ConfigurationManager.AppSettings["autoExit"] ?? "0");
 | 
			
		||||
            //int stopRecord = Convert.ToInt32(ConfigurationManager.AppSettings["stopRecord"] ?? "0");
 | 
			
		||||
            //if (autoExit > 0)
 | 
			
		||||
            //{
 | 
			
		||||
            //    System.Timers.Timer timer = new System.Timers.Timer();
 | 
			
		||||
            //    timer.Interval = 1000;
 | 
			
		||||
            //    timer.Elapsed += (sender, e) =>
 | 
			
		||||
            //    {
 | 
			
		||||
            //        // 串口无人操作
 | 
			
		||||
            //        if (!_portUtil.Operate)
 | 
			
		||||
            //        {
 | 
			
		||||
            //            // 30秒内无人操作鼠标键盘
 | 
			
		||||
            //            if ((DateTime.Now - _portUtil.dateTime).TotalSeconds > autoExit && CheckComputerFreeState.GetLastInputTime() > autoExit)
 | 
			
		||||
            //            {
 | 
			
		||||
            //                logger.Info($"设备30秒内无人操作,用户【{Operator?.Nickname}】自动退出登录,_portUtil.Operate:{_portUtil.Operate},totalSecond:{(DateTime.Now - _portUtil.dateTime).TotalSeconds},lastInputTime:{CheckComputerFreeState.GetLastInputTime()},autoExit:{autoExit}");
 | 
			
		||||
            //                //_chkFunction.HIKStopDVRRecord();
 | 
			
		||||
            //                Operator = null;
 | 
			
		||||
            //                Reviewer = null;
 | 
			
		||||
            //                Application.Current.Dispatcher.Invoke(() =>
 | 
			
		||||
            //                {
 | 
			
		||||
            //                    _regionManager.RequestNavigate("MainRegion", "LoginWindow");
 | 
			
		||||
            //                    timer.Stop();
 | 
			
		||||
            //                });
 | 
			
		||||
            //            }
 | 
			
		||||
            //        }
 | 
			
		||||
            //    };
 | 
			
		||||
            //    timer.Start();
 | 
			
		||||
            //}
 | 
			
		||||
            //#region 温度查询定时
 | 
			
		||||
            //int interval = Convert.ToInt32(ConfigurationManager.AppSettings["Interval"]);
 | 
			
		||||
            //if (interval > 0)
 | 
			
		||||
            //{
 | 
			
		||||
            //    WDTimer = new System.Timers.Timer();
 | 
			
		||||
 | 
			
		||||
            //    WDTimer.Elapsed += new System.Timers.ElapsedEventHandler(GetWD);
 | 
			
		||||
            //    WDTimer.Interval = interval;
 | 
			
		||||
            //    //WDTimer.Start();
 | 
			
		||||
            //    //WDTimer.AutoReset = true;
 | 
			
		||||
            //    //WDTimer.Enabled = true;
 | 
			
		||||
            //}
 | 
			
		||||
            //#endregion
 | 
			
		||||
            //GetWD();
 | 
			
		||||
            //if (stopRecord > 0)
 | 
			
		||||
            //{
 | 
			
		||||
            //    System.Timers.Timer timer = new System.Timers.Timer();
 | 
			
		||||
            //    timer.Interval = 1000;
 | 
			
		||||
            //    timer.Elapsed += (sender, e) =>
 | 
			
		||||
            //    {
 | 
			
		||||
 | 
			
		||||
            //        //指定时间内无人操作鼠标键盘则停止录像
 | 
			
		||||
            //        if (!_portUtil.Operate && CheckComputerFreeState.GetLastInputTime() > stopRecord)
 | 
			
		||||
            //        {
 | 
			
		||||
            //            _chkFunction.HIKStopDVRRecord();
 | 
			
		||||
            //        }
 | 
			
		||||
            //    };
 | 
			
		||||
            //    timer.Start();
 | 
			
		||||
            //}
 | 
			
		||||
            //logger.Info($"当前时间:{DateTime.Now}\r\n获取录像机的时间");
 | 
			
		||||
            ////获取录像机的时间
 | 
			
		||||
            //_chkFunction.HIK_DVR_TIME();
 | 
			
		||||
            //_chkFunction.HIKStartDVRRecord();
 | 
			
		||||
            GetFridgeTemperature();
 | 
			
		||||
 | 
			
		||||
            _eventAggregator.GetEvent<FridgeEvent>().Subscribe(GetFridgeTemperature);
 | 
			
		||||
        }
 | 
			
		||||
        //获取冰箱温度定时
 | 
			
		||||
        private void GetFridgeTemperature()
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            string[] tempRange = TemperatureRange.Split('-');
 | 
			
		||||
            new PromiseUtil<int>().taskAsyncLoop(10000, 0, async (options, next, stop) =>
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                { 
 | 
			
		||||
                    //查询冰箱继电器状态
 | 
			
		||||
                    FridgeState = await _portUtil.GetFridgeState(1);
 | 
			
		||||
                    if (!_portUtil.FridgeOperate && FridgeState.Equals(1))
 | 
			
		||||
                    {
 | 
			
		||||
                        string retStr = string.Empty;
 | 
			
		||||
                        byte[] data = null;
 | 
			
		||||
                        float retT = await _portUtil.GetFridgeTemperatureForNew(1);
 | 
			
		||||
                        Thread.Sleep(80);
 | 
			
		||||
                        WD = $"恒温冷藏抽屉当前温度:{Math.Round((retT), 2)}℃;";
 | 
			
		||||
                        AlertColor = Brushes.White;
 | 
			
		||||
                        logger.Info(WD);
 | 
			
		||||
                        if (tempRange != null && tempRange.Count() >= 2)
 | 
			
		||||
                        {
 | 
			
		||||
                            next();
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            logger.Info($"获取冰箱温度范围有误{TemperatureRange}");
 | 
			
		||||
 | 
			
		||||
                            //if (Convert.ToInt32(ConfigurationManager.AppSettings["hasFridge"]) > 1)
 | 
			
		||||
                            //{
 | 
			
		||||
                            //    float retTemp = await _portUtil.GetFridgeTemperature(2);
 | 
			
		||||
                            //    Thread.Sleep(80);
 | 
			
		||||
                            //    WD += $"{retTemp}℃";
 | 
			
		||||
                            //}
 | 
			
		||||
                            if (IsLeave)
 | 
			
		||||
                            {
 | 
			
		||||
                                FridgeTime = null;
 | 
			
		||||
                                stop();
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                next();
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        WD = $"恒温冷藏抽屉串口关闭或冰箱制冷异常制冷关闭!!!";
 | 
			
		||||
                        AlertColor = Brushes.Red;
 | 
			
		||||
                        FridgeTime = null;
 | 
			
		||||
                        stop();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
                    logger.Info($"获取冰箱异常:{ex.Message}");
 | 
			
		||||
                    next();
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //每次导航的时候,该实列用不用重新创建,true是不重新创建,false是重新创建
 | 
			
		||||
| 
						 | 
				
			
			@ -347,7 +765,10 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        //这个方法用于拦截请求
 | 
			
		||||
        public void OnNavigatedFrom(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            IsLeave = true;
 | 
			
		||||
            navigationContext.NavigationService.Region.RegionManager.Regions.Remove(PrismManager.SettingViewRegionName);
 | 
			
		||||
 | 
			
		||||
            _eventAggregator.GetEvent<FridgeEvent>().Unsubscribe(GetFridgeTemperature);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ 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;
 | 
			
		||||
| 
						 | 
				
			
			@ -174,6 +175,22 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            {
 | 
			
		||||
                if (Status == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    //if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开,其他6层管理员才能开
 | 
			
		||||
                    //    bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
 | 
			
		||||
                    //    if (bDrawer)
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    //        {
 | 
			
		||||
                    //            Message = "当前用户没有打开抽屉的权限!",
 | 
			
		||||
                    //            Type = MsgType.ERROR,
 | 
			
		||||
                    //        };
 | 
			
		||||
                    //        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    //        return;
 | 
			
		||||
                    //    }
 | 
			
		||||
 | 
			
		||||
                    //}
 | 
			
		||||
                    enumerator.MoveNext();
 | 
			
		||||
                    Status = 1;
 | 
			
		||||
                    OpenOneByOne();
 | 
			
		||||
| 
						 | 
				
			
			@ -188,7 +205,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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -275,9 +303,94 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                                OperationTime = DateTime.Now,
 | 
			
		||||
                                Quantity = it.AddQuantity,
 | 
			
		||||
                                Type = 1,
 | 
			
		||||
                                InvoiceId = InvoiceId,
 | 
			
		||||
                                StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                                InvoiceId = InvoiceId
 | 
			
		||||
                                //,StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                            }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                            //保存账册
 | 
			
		||||
                            SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                            {
 | 
			
		||||
                                DrugId = it.DrugId,
 | 
			
		||||
                                Type = 1,
 | 
			
		||||
                                Department = ConfigurationManager.AppSettings["department"].ToString(),
 | 
			
		||||
                                InvoiceNo = InvoiceId,
 | 
			
		||||
                                ManuNo = it.ManuNo,
 | 
			
		||||
                                EffDate = it.EffDate,
 | 
			
		||||
                                AddQuantity = it.AddQuantity,
 | 
			
		||||
                                UserId1 = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                                UserId2 = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                                MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                                CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
 | 
			
		||||
                                CreateTime = DateTime.Now
 | 
			
		||||
 | 
			
		||||
                            }).ExecuteCommand();
 | 
			
		||||
                            //修改凌晨生成的日结存数据
 | 
			
		||||
                            AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                            .Where(ab => ab.MachineId.Equals(it.MachineId))
 | 
			
		||||
                            .Where(ab => ab.Type == 3)
 | 
			
		||||
                            .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
                            .Where(ab => ab.ManuNo == it.ManuNo)
 | 
			
		||||
                            .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                            if (accountBookG2Day != null)
 | 
			
		||||
                            {
 | 
			
		||||
                                accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + it.AddQuantity;
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
			
		||||
                                int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                                {
 | 
			
		||||
                                    DrugId = it.DrugId,
 | 
			
		||||
                                    Type = 3,
 | 
			
		||||
                                    ManuNo = it.ManuNo,
 | 
			
		||||
                                    EffDate = it.EffDate,
 | 
			
		||||
                                    YQuantity = 0,
 | 
			
		||||
                                    ManuStock = it.AddQuantity,
 | 
			
		||||
                                    TotalStock = it.AddQuantity,
 | 
			
		||||
                                    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($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            //修改凌晨生成的总结存数据
 | 
			
		||||
                            AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                            .Where(ab => ab.MachineId.Equals(it.MachineId))
 | 
			
		||||
                            .Where(ab => ab.Type == 4)
 | 
			
		||||
                            .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
                            .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                            if (accountBookG2Total != null)
 | 
			
		||||
                            {
 | 
			
		||||
                                accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + it.AddQuantity;
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
			
		||||
                                int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                                {
 | 
			
		||||
                                    DrugId = it.DrugId,
 | 
			
		||||
                                    Type = 4,
 | 
			
		||||
                                    YQuantity = 0,
 | 
			
		||||
                                    ManuStock = it.AddQuantity,
 | 
			
		||||
                                    TotalStock = it.AddQuantity,
 | 
			
		||||
                                    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($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        return true;
 | 
			
		||||
                    });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -325,8 +325,8 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            var sb = new StringBuilder();
 | 
			
		||||
            sb.Append("select i.invoice_no as InvoiceNo, i.invoice_date as InvoiceDate, COUNT(i.id) as `Count`, SUM(i.quantity) as quantity, p1.pharmacy_name as PharmacyName1, p2.pharmacy_name as PharmacyName2 from in_out_invoice i");
 | 
			
		||||
            sb.Append(" inner join ( select c.drug_id as drug_id from channel_stock c where c.machine_id = '" + (ConfigurationManager.AppSettings["machineId"] ?? "DM1") + "' group by c.drug_id ) di on di.drug_id = i.drug_id");
 | 
			
		||||
            sb.Append(" left join pharmacy_info p1 on p1.pharmacy_id = i.in_pharmacy_id");
 | 
			
		||||
            sb.Append(" left join pharmacy_info p2 on p2.pharmacy_id = i.out_pharmacy_id");
 | 
			
		||||
            sb.Append(" left join pharmacy_info p1 on p1.pharmacy = i.in_pharmacy_id");
 | 
			
		||||
            sb.Append(" left join pharmacy_info p2 on p2.pharmacy = i.out_pharmacy_id");
 | 
			
		||||
            sb.Append(" where i.status=@Status ");
 | 
			
		||||
            sb.Append(" and i.type!=@type ");
 | 
			
		||||
            sb.Append(" and i.cancel_flag=@CancelFlag ");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -211,8 +211,8 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            var sb = new StringBuilder();
 | 
			
		||||
            sb.Append("select i.invoice_no as InvoiceNo, i.invoice_date as InvoiceDate, COUNT(i.id) as `Count`, SUM(i.quantity) as quantity, p1.pharmacy_name as PharmacyName1, p2.pharmacy_name as PharmacyName2 from in_out_invoice i");
 | 
			
		||||
            sb.Append(" inner join ( select c.drug_id as drug_id from channel_stock c where c.machine_id = '" + (ConfigurationManager.AppSettings["machineId"] ?? "DM1") + "' group by c.drug_id ) di on di.drug_id = i.drug_id");
 | 
			
		||||
            sb.Append(" left join pharmacy_info p1 on p1.pharmacy_id = i.in_pharmacy_id");
 | 
			
		||||
            sb.Append(" left join pharmacy_info p2 on p2.pharmacy_id = i.out_pharmacy_id");
 | 
			
		||||
            sb.Append(" left join pharmacy_info p1 on p1.pharmacy = i.in_pharmacy_id");
 | 
			
		||||
            sb.Append(" left join pharmacy_info p2 on p2.pharmacy = i.out_pharmacy_id");
 | 
			
		||||
            sb.Append(" where i.status=@Status ");
 | 
			
		||||
            sb.Append(" and i.type!=@type ");
 | 
			
		||||
            sb.Append(" and i.cancel_flag=@CancelFlag ");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -172,7 +172,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        {
 | 
			
		||||
            invoices = SqlSugarHelper.Db.Queryable<InOutInvoice>()
 | 
			
		||||
                .Includes<DrugInfo>(i => i.DrugInfo)
 | 
			
		||||
                .InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs =>cs.DrugId),(i,t) => i.DrugId == t.DrugId)
 | 
			
		||||
                .InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrugId), (i, t) => i.DrugId == t.DrugId)
 | 
			
		||||
                .Where(i => i.InvoiceNo == Invoice.InvoiceNo)
 | 
			
		||||
                .ToList();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -219,7 +219,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                    msg.Add($"药品【{invoice.DrugInfo.DrugName}】库存不足,应取【{TakeQ}】库存【{total}】");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if(msg.Count > 0)
 | 
			
		||||
            if (msg.Count > 0)
 | 
			
		||||
            {
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
                //MessageBox.Show(string.Join("\n", msg));
 | 
			
		||||
| 
						 | 
				
			
			@ -250,6 +250,22 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            {
 | 
			
		||||
                if (Status == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    //if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开,其他6层管理员才能开
 | 
			
		||||
                    //    bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
 | 
			
		||||
                    //    if (bDrawer)
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    //        {
 | 
			
		||||
                    //            Message = "当前用户没有打开抽屉的权限!",
 | 
			
		||||
                    //            Type = MsgType.ERROR,
 | 
			
		||||
                    //        };
 | 
			
		||||
                    //        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    //        return;
 | 
			
		||||
                    //    }
 | 
			
		||||
 | 
			
		||||
                    //}
 | 
			
		||||
                    enumerable = ChannelStocks.GroupBy(cs => cs.DrawerNo, cs => cs);
 | 
			
		||||
                    enumerator = enumerable.GetEnumerator();
 | 
			
		||||
                    enumerator.MoveNext();
 | 
			
		||||
| 
						 | 
				
			
			@ -266,7 +282,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);
 | 
			
		||||
| 
						 | 
				
			
			@ -337,9 +363,97 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                                    OperationTime = DateTime.Now,
 | 
			
		||||
                                    Quantity = it.TakeQuantity,
 | 
			
		||||
                                    Type = 2,
 | 
			
		||||
                                    InvoiceId = InvoiceId,
 | 
			
		||||
                                    StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                                    InvoiceId = InvoiceId
 | 
			
		||||
                                    //,StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                                }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                                //保存账册
 | 
			
		||||
                                SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                                {
 | 
			
		||||
                                    DrugId = it.DrugId,
 | 
			
		||||
                                    Type = 2,
 | 
			
		||||
                                    Department = ConfigurationManager.AppSettings["department"].ToString(),
 | 
			
		||||
                                    InvoiceNo = InvoiceId,
 | 
			
		||||
                                    ManuNo = it.ManuNo,
 | 
			
		||||
                                    EffDate = it.EffDate,
 | 
			
		||||
                                    OutQuantity = it.TakeQuantity,
 | 
			
		||||
                                    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(it.MachineId))
 | 
			
		||||
                                .Where(ab => ab.Type == 3)
 | 
			
		||||
                                .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
                                .Where(ab => ab.ManuNo == it.ManuNo)
 | 
			
		||||
                                .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                                if (accountBookG2Day != null)
 | 
			
		||||
                                {
 | 
			
		||||
                                    accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - it.TakeQuantity;
 | 
			
		||||
                                    SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
			
		||||
                                    int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                                    {
 | 
			
		||||
                                        DrugId = it.DrugId,
 | 
			
		||||
                                        Type = 3,
 | 
			
		||||
                                        ManuNo = it.ManuNo,
 | 
			
		||||
                                        EffDate = it.EffDate,
 | 
			
		||||
                                        YQuantity = 0,
 | 
			
		||||
                                        ManuStock = it.TakeQuantity,
 | 
			
		||||
                                        TotalStock = it.TakeQuantity,
 | 
			
		||||
                                        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($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                                //修改凌晨生成的总结存数据
 | 
			
		||||
                                AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                                .Where(ab => ab.MachineId.Equals(it.MachineId))
 | 
			
		||||
                                .Where(ab => ab.Type == 4)
 | 
			
		||||
                                .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
                                .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                                if (accountBookG2Total != null)
 | 
			
		||||
                                {
 | 
			
		||||
                                    accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - it.TakeQuantity;
 | 
			
		||||
                                    SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
			
		||||
                                    int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                                    {
 | 
			
		||||
                                        DrugId = it.DrugId,
 | 
			
		||||
                                        Type = 4,
 | 
			
		||||
                                        YQuantity = 0,
 | 
			
		||||
                                        ManuStock = it.TakeQuantity,
 | 
			
		||||
                                        TotalStock = it.TakeQuantity,
 | 
			
		||||
                                        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($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                            }
 | 
			
		||||
                            return true;
 | 
			
		||||
                        });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,7 +24,6 @@ using System.Collections.ObjectModel;
 | 
			
		|||
using Microsoft.Win32;
 | 
			
		||||
using System.Xml;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using DM_Weight.HIKVISION;
 | 
			
		||||
using System.Security.AccessControl;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
| 
						 | 
				
			
			@ -54,10 +53,17 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            //get => loginMode == 2;
 | 
			
		||||
            get => ReadAppSetting("loginMode") == "2";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string LoginUserCheck
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            get => ReadAppSetting("loginUser");
 | 
			
		||||
        }
 | 
			
		||||
        private HkcChangeShifts listHkcChangeShifts=new HkcChangeShifts();
 | 
			
		||||
 | 
			
		||||
        private FingerprintUtil _fingerprintUtil;
 | 
			
		||||
 | 
			
		||||
        private PortUtil _portUtil;
 | 
			
		||||
        private CHKFunction _chkFunction;
 | 
			
		||||
 | 
			
		||||
        public Boolean LoginBtnEnable { get { return _loginBtnEnable; } set { SetProperty(ref _loginBtnEnable, value); } }
 | 
			
		||||
        public string Password { get { return password; } set { SetProperty(ref password, value); } }
 | 
			
		||||
| 
						 | 
				
			
			@ -76,20 +82,24 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            get => _portUtil._canBusExsit && !_portUtil.canBusSerial.IsOpen;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private bool _fingerMsg= CHKFunction.HKUserId>=0;
 | 
			
		||||
        private bool _fingerMsg = false;// CHKFunction.HKUserId>=0;
 | 
			
		||||
 | 
			
		||||
        public bool FingerMsg
 | 
			
		||||
        {
 | 
			
		||||
            get => _fingerMsg;
 | 
			
		||||
            set => SetProperty(ref _fingerMsg, value);
 | 
			
		||||
        }
 | 
			
		||||
        //录像机登录状态
 | 
			
		||||
        private bool _hikMsg;
 | 
			
		||||
        public bool HIKMsg
 | 
			
		||||
        public bool FridgePortMsg
 | 
			
		||||
        {
 | 
			
		||||
            get=>_hikMsg;
 | 
			
		||||
            set=>SetProperty(ref _hikMsg, value);
 | 
			
		||||
            get => !_portUtil.fridgeSerial.IsOpen;
 | 
			
		||||
        }
 | 
			
		||||
        //录像机登录状态
 | 
			
		||||
        //private bool _hikMsg;
 | 
			
		||||
        //public bool HIKMsg
 | 
			
		||||
        //{
 | 
			
		||||
        //    get=>_hikMsg;
 | 
			
		||||
        //    set=>SetProperty(ref _hikMsg, value);
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        //public LoginWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, PortUtil portUtil, FingerprintUtil fingerprintUtil)
 | 
			
		||||
        //{
 | 
			
		||||
| 
						 | 
				
			
			@ -98,11 +108,11 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        //    _regionManager = regionManager;
 | 
			
		||||
        //    _eventAggregator = eventAggregator;
 | 
			
		||||
        //}
 | 
			
		||||
        public LoginWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, PortUtil portUtil, CHKFunction chcFunction)
 | 
			
		||||
        public LoginWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, PortUtil portUtil)
 | 
			
		||||
        {
 | 
			
		||||
            //_fingerprintUtil = fingerprintUtil;
 | 
			
		||||
            _portUtil = portUtil;
 | 
			
		||||
            _chkFunction= chcFunction;
 | 
			
		||||
            //_chkFunction= chcFunction;
 | 
			
		||||
            _regionManager = regionManager;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -180,6 +190,29 @@ _exitCommand ??= new DelegateCommand(Exit);
 | 
			
		|||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        //1仅当班人、审核人可登录
 | 
			
		||||
                        //if (LoginUserCheck.Equals("1"))
 | 
			
		||||
                        //{
 | 
			
		||||
                        //    //检查当前登录人是否是值班人 (审核人与发药人)
 | 
			
		||||
                        //    listHkcChangeShifts = SqlSugarHelper.Db.Queryable<HkcChangeShifts>()
 | 
			
		||||
                        //       .Where(cs => cs.State == "0").First();
 | 
			
		||||
                        //    if (listHkcChangeShifts != null)
 | 
			
		||||
                        //    {
 | 
			
		||||
                        //        if(!listHkcChangeShifts.FromOperator.Equals(userList.UserName) && !listHkcChangeShifts.FromRviewer.Equals(userList.UserName))
 | 
			
		||||
                        //        {
 | 
			
		||||
                        //            AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        //            {
 | 
			
		||||
                        //                Message = "仅值班人可登录,当前登录人非值班人",
 | 
			
		||||
                        //                Type = MsgType.ERROR
 | 
			
		||||
                        //            };
 | 
			
		||||
                        //            _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        //            Username = "";
 | 
			
		||||
                        //            Password = "";
 | 
			
		||||
                        //            return;
 | 
			
		||||
                        //        }
 | 
			
		||||
 | 
			
		||||
                        //    }
 | 
			
		||||
                        //}
 | 
			
		||||
                        if (userList.PassWord == MD5.GetMD5Hash(Password))
 | 
			
		||||
                        {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -214,6 +247,7 @@ _exitCommand ??= new DelegateCommand(Exit);
 | 
			
		|||
 | 
			
		||||
        void SetUser(UserList user)
 | 
			
		||||
        {
 | 
			
		||||
            logger.Info("SetUser");
 | 
			
		||||
            // 单人登录模式
 | 
			
		||||
            if (SingleLogin)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -221,6 +255,7 @@ _exitCommand ??= new DelegateCommand(Exit);
 | 
			
		|||
                keys.Add("operator", user);
 | 
			
		||||
                System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
 | 
			
		||||
                {
 | 
			
		||||
                    logger.Info("跳转Home");
 | 
			
		||||
                    _regionManager.RequestNavigate("MainRegion", "HomeWindow", keys);
 | 
			
		||||
                }));
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -278,6 +313,28 @@ _exitCommand ??= new DelegateCommand(Exit);
 | 
			
		|||
                // 第一个用户登录
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    //1仅当班人、审核人可登录
 | 
			
		||||
                    if (LoginUserCheck.Equals("1"))
 | 
			
		||||
                    {
 | 
			
		||||
                        if(listHkcChangeShifts!=null)
 | 
			
		||||
                        {
 | 
			
		||||
                            if(listHkcChangeShifts.FromOperator.Equals(user.UserName))
 | 
			
		||||
                            {
 | 
			
		||||
                                keys.Add("operator", user);
 | 
			
		||||
                                Operator = user;
 | 
			
		||||
                                RaisePropertyChanged("Operator");
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                keys.Add("reviewer", user);
 | 
			
		||||
                                Reviewer = user;
 | 
			
		||||
                                RaisePropertyChanged("Reviewer");
 | 
			
		||||
                            }
 | 
			
		||||
                            Username = string.Empty;
 | 
			
		||||
                            Password = string.Empty;
 | 
			
		||||
                            return;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (firstLogin.Equals("operator"))
 | 
			
		||||
                    {
 | 
			
		||||
                        keys.Add("operator", user);
 | 
			
		||||
| 
						 | 
				
			
			@ -298,7 +355,6 @@ _exitCommand ??= new DelegateCommand(Exit);
 | 
			
		|||
 | 
			
		||||
        void Exit()
 | 
			
		||||
        {
 | 
			
		||||
            _chkFunction.HIKLoginOut();
 | 
			
		||||
            Process.GetCurrentProcess().Kill();
 | 
			
		||||
            Environment.Exit(0);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -310,6 +366,7 @@ _exitCommand ??= new DelegateCommand(Exit);
 | 
			
		|||
            {
 | 
			
		||||
                FingerMsg = !msg.Result;
 | 
			
		||||
            }
 | 
			
		||||
            logger.Info($"LoginBtnEnable:{LoginBtnEnable}");
 | 
			
		||||
            if (LoginBtnEnable)
 | 
			
		||||
            {
 | 
			
		||||
                if (msg.Message.Equals("LOGIN"))
 | 
			
		||||
| 
						 | 
				
			
			@ -343,6 +400,29 @@ _exitCommand ??= new DelegateCommand(Exit);
 | 
			
		|||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        //1仅当班人、审核人可登录
 | 
			
		||||
                        //if (LoginUserCheck.Equals("1"))
 | 
			
		||||
                        //{
 | 
			
		||||
                            //检查当前登录人是否是值班人 (审核人与发药人)
 | 
			
		||||
                            //listHkcChangeShifts = SqlSugarHelper.Db.Queryable<HkcChangeShifts>()
 | 
			
		||||
                            //   .Where(cs => cs.State == "0").First();
 | 
			
		||||
                            //if (listHkcChangeShifts != null)
 | 
			
		||||
                            //{
 | 
			
		||||
                            //    if (!listHkcChangeShifts.FromOperator.Equals(userList.UserName) && !listHkcChangeShifts.FromRviewer.Equals(userList.UserName))
 | 
			
		||||
                            //    {
 | 
			
		||||
                            //        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                            //        {
 | 
			
		||||
                            //            Message = "仅值班人可登录,当前登录人非值班人",
 | 
			
		||||
                            //            Type = MsgType.ERROR
 | 
			
		||||
                            //        };
 | 
			
		||||
                            //        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                            //        Username = "";
 | 
			
		||||
                            //        Password = "";
 | 
			
		||||
                            //        return;
 | 
			
		||||
                            //    }
 | 
			
		||||
 | 
			
		||||
                            //}
 | 
			
		||||
                        //}
 | 
			
		||||
                        SetUser(userList);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,9 @@ using DM_Weight.util;
 | 
			
		|||
using DM_Weight.Finger;
 | 
			
		||||
using DM_Weight.Views;
 | 
			
		||||
using Unity;
 | 
			
		||||
using DM_Weight.HIKVISION;
 | 
			
		||||
using log4net.Repository.Hierarchy;
 | 
			
		||||
using log4net;
 | 
			
		||||
using System.Windows;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +32,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
 | 
			
		||||
        //private PortUtil _portUtil;
 | 
			
		||||
 | 
			
		||||
        private ScreenUtil _screenUtil;
 | 
			
		||||
        //private ScreenUtil _screenUtil;
 | 
			
		||||
 | 
			
		||||
        public SolidColorBrush Background
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -63,17 +65,16 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        private FingerprintUtil _fingerprintUtil;
 | 
			
		||||
        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)
 | 
			
		||||
        {
 | 
			
		||||
            //_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,23 +82,28 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                _regionManager.RequestNavigate("MainRegion", "LoginWindow");
 | 
			
		||||
 | 
			
		||||
            }));
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void doMyPrismEvent2(AlertMsg msg)
 | 
			
		||||
        {
 | 
			
		||||
            switch (msg.Type)
 | 
			
		||||
            Application.Current.Dispatcher.BeginInvoke(() =>
 | 
			
		||||
            {
 | 
			
		||||
                case MsgType.INFO:
 | 
			
		||||
                    this.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676"));
 | 
			
		||||
                    break;
 | 
			
		||||
                case MsgType.ERROR:
 | 
			
		||||
                    this.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                    break;
 | 
			
		||||
                default:
 | 
			
		||||
                    this.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676"));
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
            SnackbarMessageQueue.Enqueue(msg.Message);
 | 
			
		||||
                switch (msg.Type)
 | 
			
		||||
                {
 | 
			
		||||
                    case MsgType.INFO:
 | 
			
		||||
                        this.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676"));
 | 
			
		||||
                        break;
 | 
			
		||||
                    case MsgType.ERROR:
 | 
			
		||||
                        this.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#b71c1c"));
 | 
			
		||||
                        break;
 | 
			
		||||
                    default:
 | 
			
		||||
                        this.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00e676"));
 | 
			
		||||
                        break;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                SnackbarMessageQueue.Enqueue(msg.Message);
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -399,8 +399,8 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                                        OperationTime = DateTime.Now,
 | 
			
		||||
                                        Quantity = orderTakeQuantity,
 | 
			
		||||
                                        Type = 2,
 | 
			
		||||
                                        InvoiceId = InvoiceId,
 | 
			
		||||
                                        StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                                        InvoiceId = InvoiceId
 | 
			
		||||
                                        //,StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                                    }).ExecuteCommand();
 | 
			
		||||
                                }
 | 
			
		||||
                                //更新处方状态
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -245,6 +245,22 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            {
 | 
			
		||||
                if (Status == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    //if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开,其他6层管理员才能开
 | 
			
		||||
                    //    bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
 | 
			
		||||
                    //    if (bDrawer)
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    //        {
 | 
			
		||||
                    //            Message = "当前用户没有打开抽屉的权限!",
 | 
			
		||||
                    //            Type = MsgType.ERROR,
 | 
			
		||||
                    //        };
 | 
			
		||||
                    //        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    //        return;
 | 
			
		||||
                    //    }
 | 
			
		||||
 | 
			
		||||
                    //}
 | 
			
		||||
                    enumerable = ChannelStocks.GroupBy(cs => cs.DrawerNo, cs => cs);
 | 
			
		||||
                    enumerator = enumerable.GetEnumerator();
 | 
			
		||||
                    enumerator.MoveNext();
 | 
			
		||||
| 
						 | 
				
			
			@ -261,11 +277,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 =>
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -297,7 +326,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                    {
 | 
			
		||||
                        SqlSugarHelper.Db.Updateable(new OrderInfo()
 | 
			
		||||
                        {
 | 
			
		||||
                            DmStatus = 2,
 | 
			
		||||
                            DmStatus = 0,
 | 
			
		||||
                            OrderNo = OrderInfo.OrderNo
 | 
			
		||||
                        }).UpdateColumns(it => new { it.DmStatus }).WhereColumns(it => new { it.OrderNo }).ExecuteCommand();
 | 
			
		||||
                        for (int i = 0; i < record.Count; i++)
 | 
			
		||||
| 
						 | 
				
			
			@ -334,9 +363,94 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                                //Quantity = it.TakeQuantity,
 | 
			
		||||
                                Quantity = it.ReturnQuantity,
 | 
			
		||||
                                Type = 31,
 | 
			
		||||
                                InvoiceId = InvoiceId,
 | 
			
		||||
                                StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                                InvoiceId = InvoiceId
 | 
			
		||||
                                //,StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                            }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                            //保存账册
 | 
			
		||||
                            SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                            {
 | 
			
		||||
                                DrugId = it.DrugId,
 | 
			
		||||
                                Type = 1,
 | 
			
		||||
                                Department = ConfigurationManager.AppSettings["department"].ToString(),
 | 
			
		||||
                                InvoiceNo = InvoiceId,
 | 
			
		||||
                                ManuNo = it.ManuNo,
 | 
			
		||||
                                EffDate = it.EffDate,
 | 
			
		||||
                                AddQuantity = it.ReturnQuantity,
 | 
			
		||||
                                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(it.MachineId))
 | 
			
		||||
                            .Where(ab => ab.Type == 3)
 | 
			
		||||
                            .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
                            .Where(ab => ab.ManuNo == it.ManuNo)
 | 
			
		||||
                            .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                            if (accountBookG2Day != null)
 | 
			
		||||
                            {
 | 
			
		||||
                                accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + it.ReturnQuantity;
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
			
		||||
                                int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                                {
 | 
			
		||||
                                    DrugId = it.DrugId,
 | 
			
		||||
                                    Type = 3,
 | 
			
		||||
                                    ManuNo = it.ManuNo,
 | 
			
		||||
                                    EffDate = it.EffDate,
 | 
			
		||||
                                    YQuantity = 0,
 | 
			
		||||
                                    ManuStock = it.ReturnQuantity,
 | 
			
		||||
                                    TotalStock = it.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($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            //修改凌晨生成的总结存数据
 | 
			
		||||
                            AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                            .Where(ab => ab.MachineId.Equals(it.MachineId))
 | 
			
		||||
                            .Where(ab => ab.Type == 4)
 | 
			
		||||
                            .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
                            .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                            if (accountBookG2Total != null)
 | 
			
		||||
                            {
 | 
			
		||||
                                accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + it.ReturnQuantity;
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
			
		||||
                                int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                                {
 | 
			
		||||
                                    DrugId = it.DrugId,
 | 
			
		||||
                                    Type = 4,
 | 
			
		||||
                                    YQuantity = 0,
 | 
			
		||||
                                    ManuStock = it.ReturnQuantity,
 | 
			
		||||
                                    TotalStock = it.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($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        return true;
 | 
			
		||||
                    });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,636 @@
 | 
			
		|||
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 SqlSugar;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class OrderTakeAllDrugDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel));
 | 
			
		||||
        public string Title => "处方取药";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public event Action<IDialogResult> RequestClose;
 | 
			
		||||
 | 
			
		||||
        private static readonly DateTime Jan1st1970 = new DateTime
 | 
			
		||||
   (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
 | 
			
		||||
 | 
			
		||||
        private PortUtil _portUtil;
 | 
			
		||||
        IEventAggregator _eventAggregator;
 | 
			
		||||
        IDialogService _dialogService;
 | 
			
		||||
        public OrderTakeAllDrugDialogViewModel(PortUtil portUtil, IEventAggregator eventAggregator, IDialogService DialogService)
 | 
			
		||||
        {
 | 
			
		||||
            _dialogService = DialogService;
 | 
			
		||||
            _portUtil = portUtil;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
        void DoMyPrismEvent(DeviceMsg msg)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            if (msg.WindowName == "OrderTakeDrugWindow")
 | 
			
		||||
            {
 | 
			
		||||
                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;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        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 int _status = 0;
 | 
			
		||||
 | 
			
		||||
        public int Status
 | 
			
		||||
        {
 | 
			
		||||
            get => _status; set => SetProperty(ref _status, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private OrderInfo? _orderInfo;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public OrderInfo? OrderInfo
 | 
			
		||||
        {
 | 
			
		||||
            get => _orderInfo;
 | 
			
		||||
            set => SetProperty(ref _orderInfo, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private List<OrderDetail> orderDetails { get; set; }
 | 
			
		||||
 | 
			
		||||
        private List<OrderInfo> orderInfos { get; set; }
 | 
			
		||||
 | 
			
		||||
        private List<ChannelStock> _channelStocks;
 | 
			
		||||
 | 
			
		||||
        public List<ChannelStock> ChannelStocks
 | 
			
		||||
        {
 | 
			
		||||
            get => _channelStocks;
 | 
			
		||||
            set => SetProperty(ref _channelStocks, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
 | 
			
		||||
        private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public bool CanCloseDialog()
 | 
			
		||||
        {
 | 
			
		||||
            return Status == 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogClosed()
 | 
			
		||||
        {
 | 
			
		||||
            // 取消消息订阅
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Unsubscribe(DoMyPrismEvent);
 | 
			
		||||
        }
 | 
			
		||||
        string orderDate;
 | 
			
		||||
        OrderTakeSelect selectedItem;
 | 
			
		||||
        string? searchValue;
 | 
			
		||||
        public void OnDialogOpened(IDialogParameters parameters)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
			
		||||
            orderDate = parameters.GetValue<string>("OrderDate");
 | 
			
		||||
            selectedItem = parameters.GetValue<OrderTakeSelect>("SelectedItem");
 | 
			
		||||
            searchValue = parameters.GetValue<string>("SearchValue");
 | 
			
		||||
            //OrderInfo = o;
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
        public async void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                orderDetails = SqlSugarHelper.Db.Queryable<OrderDetail>()
 | 
			
		||||
                      .InnerJoin<OrderInfo>((od, oi) => oi.DmStatus == 0 && oi.HisDispFlag == 0 && oi.CancelFlag == 0 && od.OrderNo == oi.OrderNo)
 | 
			
		||||
                      .InnerJoin(SqlSugarHelper.Db.Queryable<ChannelStock>().Where(cs => cs.DrawerType == 1).Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1")).GroupBy(cs => cs.DrugId), (od, oi, t) => od.DrugId == t.DrugId)
 | 
			
		||||
                      .WhereIF(orderDate != null, (od, oi) => oi.OrderDate.ToString("yyyy-MM-dd") == orderDate)
 | 
			
		||||
                      .WhereIF(!String.IsNullOrEmpty(searchValue) && selectedItem.Code.Equals("OrderNo"), (od, oi) => oi.OrderNo == searchValue)
 | 
			
		||||
                      .WhereIF(!String.IsNullOrEmpty(searchValue) && selectedItem.Code.Equals("PatientId"), (od, oi) => oi.PatientId == searchValue)
 | 
			
		||||
                      .WhereIF(!String.IsNullOrEmpty(ConfigurationManager.AppSettings["storage"]), (od, oi) => oi.Pharmacy == ConfigurationManager.AppSettings["storage"])
 | 
			
		||||
                      .Includes<DrugInfo>(od => od.DrugInfo)
 | 
			
		||||
                      .ToList();
 | 
			
		||||
                if (orderDetails == null || orderDetails.Count <= 0)
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "没有处方数据",
 | 
			
		||||
                        Type = MsgType.ERROR
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                IEnumerable<IGrouping<string, OrderDetail>> groupOrderDetails = orderDetails.GroupBy(it => it.DrugId);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                List<ChannelStock> channelStocks = new List<ChannelStock>();
 | 
			
		||||
                List<string> msg = new List<string>();
 | 
			
		||||
 | 
			
		||||
                foreach (var orderGroup in groupOrderDetails)
 | 
			
		||||
                {
 | 
			
		||||
                    int quantity = orderGroup.Sum(it => it.Quantity);
 | 
			
		||||
                    foreach (var orderDetail in orderGroup)
 | 
			
		||||
                    {
 | 
			
		||||
                        List<ChannelStock> HasQChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                         .Includes<DrugInfo>(cs => cs.DrugInfo)
 | 
			
		||||
                         .Where(cs => cs.Quantity > 0)
 | 
			
		||||
                         .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                         .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)
 | 
			
		||||
                         .OrderBy(cs => cs.EffDate)
 | 
			
		||||
                         .OrderBy(cs => cs.DrawerNo)
 | 
			
		||||
                         .ToList();
 | 
			
		||||
                        int total = HasQChannels.Sum(it => it.Quantity);
 | 
			
		||||
                        int TakeQ = quantity;
 | 
			
		||||
                        // 说明数量足够
 | 
			
		||||
                        if (total >= TakeQ)
 | 
			
		||||
                        {
 | 
			
		||||
                            for (int j = 0; TakeQ > 0; j++)
 | 
			
		||||
                            {
 | 
			
		||||
                                ChannelStock stock = HasQChannels[j];
 | 
			
		||||
                                if (TakeQ > stock.Quantity)
 | 
			
		||||
                                {
 | 
			
		||||
                                    stock.TakeQuantity = stock.Quantity;
 | 
			
		||||
                                    channelStocks.Add(stock);
 | 
			
		||||
                                    TakeQ -= stock.Quantity;
 | 
			
		||||
                                    orderDetail.DrawerNo += stock.DrawerNo + ",";
 | 
			
		||||
                                    orderDetail.ColNo += stock.ColNo + ",";
 | 
			
		||||
                                    orderDetail.SetManuNo += stock.ManuNo + ",";
 | 
			
		||||
                                    orderDetail.SetEffDate += stock.EffDate + ",";
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    stock.TakeQuantity = TakeQ;
 | 
			
		||||
                                    channelStocks.Add(stock);
 | 
			
		||||
                                    TakeQ = 0;
 | 
			
		||||
                                    orderDetail.DrawerNo += stock.DrawerNo + ",";
 | 
			
		||||
                                    orderDetail.ColNo += stock.ColNo + ",";
 | 
			
		||||
                                    orderDetail.SetManuNo += stock.ManuNo + ",";
 | 
			
		||||
                                    orderDetail.SetEffDate += stock.EffDate + ",";
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            break;
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            msg.Add($"药品【{orderDetail.DrugInfo.DrugName}】库存不足,应取【{TakeQ}】库存【{total}】");
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (msg.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
                    //MessageBox.Show(string.Join("\n", msg));
 | 
			
		||||
                    DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                    dialogParameters.Add("msgInfo", msg);
 | 
			
		||||
                    DialogServiceExtensions.ShowDialogHost(_dialogService, "ShowMessageDialog", dialogParameters, "RootDialog");
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    channelStocks.Sort((a, b) =>
 | 
			
		||||
                    {
 | 
			
		||||
                        if ((a.DrawerNo - b.DrawerNo) == 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            return a.ColNo - b.ColNo;
 | 
			
		||||
                        }
 | 
			
		||||
                        return a.DrawerNo - b.DrawerNo;
 | 
			
		||||
                    });
 | 
			
		||||
                    ChannelStocks = channelStocks;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Info($"处方取药异常:{ex.Message}");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public DelegateCommand OpenDrawer
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(async () =>
 | 
			
		||||
            {
 | 
			
		||||
                if (Status == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    enumerable = ChannelStocks.GroupBy(cs => cs.DrawerNo, cs => cs);
 | 
			
		||||
                    enumerator = enumerable.GetEnumerator();
 | 
			
		||||
                    enumerator.MoveNext();
 | 
			
		||||
                    Status = 1;
 | 
			
		||||
                    OpenOneByOne();
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        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)
 | 
			
		||||
            {
 | 
			
		||||
                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);
 | 
			
		||||
 | 
			
		||||
            // 发送取药数量
 | 
			
		||||
            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 = "OrderTakeDrugWindow";
 | 
			
		||||
            _portUtil.BoardType = singleChannels.Count > 0 ? singleChannels[0].BoardType : 1;
 | 
			
		||||
            _portUtil.ColNos = singleChannels.Select(it => it.ColNo).ToArray();
 | 
			
		||||
            _portUtil.DrawerNo = DrawerNo;
 | 
			
		||||
            _portUtil.Start();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private bool _isFinishClick = false;
 | 
			
		||||
        // 完成按钮
 | 
			
		||||
        public DelegateCommand TakeFinish
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (!_isFinishClick)
 | 
			
		||||
                {
 | 
			
		||||
                    _isFinishClick = true;
 | 
			
		||||
 | 
			
		||||
                    if (orderDetails == null || orderDetails.Count <= 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "没有处方数据",
 | 
			
		||||
                            Type = MsgType.ERROR
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    IEnumerable<IGrouping<string, OrderDetail>> enumerableOrderDetails = orderDetails.GroupBy(it => it.OrderNo);
 | 
			
		||||
                    var f = SqlSugarHelper.Db.UseTran(() =>
 | 
			
		||||
                    {
 | 
			
		||||
                        for (int i = 0; i < ChannelStocks.Count; i++)
 | 
			
		||||
                        {
 | 
			
		||||
                            ChannelStock it = ChannelStocks[i];
 | 
			
		||||
                            // 更新数据 库存信息
 | 
			
		||||
                            SqlSugarHelper.Db.Updateable(new ChannelStock()
 | 
			
		||||
                            {
 | 
			
		||||
                                Quantity = it.Quantity - it.TakeQuantity,
 | 
			
		||||
                                ManuNo = it.ManuNo,
 | 
			
		||||
                                EffDate = it.EffDate,
 | 
			
		||||
                                Id = it.Id,
 | 
			
		||||
                            }).UpdateColumns(it => new { it.Quantity, it.ManuNo, it.EffDate }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        foreach (var orderGroup in enumerableOrderDetails)
 | 
			
		||||
                        {
 | 
			
		||||
                            int iQuantity = 0;
 | 
			
		||||
                            foreach (var orderDetail in orderGroup)
 | 
			
		||||
                            {
 | 
			
		||||
                                OrderInfo orderInfo = SqlSugarHelper.Db.Queryable<OrderInfo>().Where(oi => oi.OrderNo == orderDetail.OrderNo).First();
 | 
			
		||||
                                SqlSugarHelper.Db.Updateable(new OrderInfo()
 | 
			
		||||
                                {
 | 
			
		||||
                                    DmStatus = 1,
 | 
			
		||||
                                    OrderNo = orderDetail.OrderNo
 | 
			
		||||
                                }).UpdateColumns(it => new { it.DmStatus }).WhereColumns(it => new { it.OrderNo }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                                SqlSugarHelper.Db.Insertable(new OrderFinish()
 | 
			
		||||
                                {
 | 
			
		||||
                                    OrderNo = orderDetail.OrderNo,
 | 
			
		||||
                                    PatientId = orderDetail.PatientId,
 | 
			
		||||
                                    Pharmacy = orderInfo.Pharmacy,
 | 
			
		||||
                                    State = 1,
 | 
			
		||||
                                    Operator = HomeWindowViewModel.Operator?.Nickname,
 | 
			
		||||
                                });
 | 
			
		||||
                                //查询药品对应库存表的库位及批次、效期信息
 | 
			
		||||
                                List<ChannelStock> stockList= ChannelStocks.Where(cs => cs.DrugId == orderDetail.DrugId).OrderBy(cs=>cs.EffDate).ToList();
 | 
			
		||||
                                int iOrderDetailQuantity = -1;
 | 
			
		||||
                                string manuNo = string.Empty;
 | 
			
		||||
                                string effDate = string.Empty;
 | 
			
		||||
                                int drawerNo = 0;
 | 
			
		||||
                                int colNo = 0;
 | 
			
		||||
                                if (stockList.Count> 1)
 | 
			
		||||
                                {
 | 
			
		||||
                                    iOrderDetailQuantity = orderDetail.Quantity;
 | 
			
		||||
                                    for (int i = 0; i < stockList.Count; i++)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        if (iOrderDetailQuantity>0&&stockList[i].Quantity- iOrderDetailQuantity > 0)
 | 
			
		||||
                                        {
 | 
			
		||||
                                            stockList[i].Quantity = stockList[i].Quantity - iOrderDetailQuantity;
 | 
			
		||||
                                            break;
 | 
			
		||||
                                        }
 | 
			
		||||
                                        else
 | 
			
		||||
                                        {
 | 
			
		||||
                                            iOrderDetailQuantity = iOrderDetailQuantity - stockList[i].Quantity;
 | 
			
		||||
                                            stockList[i].Quantity = 0;
 | 
			
		||||
                                            if(iOrderDetailQuantity==0)
 | 
			
		||||
                                            {
 | 
			
		||||
                                                manuNo = stockList[i].ManuNo;
 | 
			
		||||
                                                effDate = stockList[i].EffDate;
 | 
			
		||||
                                                drawerNo = stockList[i].DrawerNo;
 | 
			
		||||
                                                colNo= stockList[i].ColNo;
 | 
			
		||||
                                                break;
 | 
			
		||||
                                            }
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                                ChannelStock cs = null;
 | 
			
		||||
                                if (iOrderDetailQuantity==0)
 | 
			
		||||
                                {
 | 
			
		||||
                                    cs = ChannelStocks.Where(cs => cs.DrugId == orderDetail.DrugId && cs.ManuNo == manuNo&&cs.EffDate==effDate&&cs.DrawerNo==drawerNo&&cs.ColNo==colNo).OrderBy(cs => cs.EffDate).FirstOrDefault();
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    cs = ChannelStocks.Where(cs => cs.DrugId == orderDetail.DrugId && cs.Quantity > 0).OrderBy(cs => cs.EffDate).FirstOrDefault();
 | 
			
		||||
                                }
 | 
			
		||||
                               
 | 
			
		||||
                                if (cs != null)
 | 
			
		||||
                                {
 | 
			
		||||
 | 
			
		||||
                                    SqlSugarHelper.Db.Insertable(new MachineRecord()
 | 
			
		||||
                                    {
 | 
			
		||||
                                        MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                                        DrawerNo = cs.DrawerNo,
 | 
			
		||||
                                        ColNo = cs.ColNo,
 | 
			
		||||
                                        DrugId = cs.DrugId,
 | 
			
		||||
                                        ManuNo = cs.ManuNo,
 | 
			
		||||
                                        EffDate = !String.IsNullOrEmpty(cs.EffDate) ? DateTime.ParseExact(cs.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                                        Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                                        Reviewer = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                                        OperationTime = DateTime.Now,
 | 
			
		||||
                                        Quantity = orderDetail.Quantity,
 | 
			
		||||
                                        Type = 2,
 | 
			
		||||
                                        InvoiceId = orderDetail.OrderNo
 | 
			
		||||
                                        //, StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                                    }).ExecuteCommand();
 | 
			
		||||
                                }
 | 
			
		||||
                                //保存账册
 | 
			
		||||
                                int iInsertResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                                {
 | 
			
		||||
                                    DrugId = orderDetail.DrugId,
 | 
			
		||||
                                    Type = 2,
 | 
			
		||||
                                    Department = orderInfo.DeptName,
 | 
			
		||||
                                    OrderNo = orderDetail.OrderNo,
 | 
			
		||||
                                    ManuNo = cs.ManuNo,
 | 
			
		||||
                                    EffDate = cs.EffDate,
 | 
			
		||||
                                    OutQuantity = orderDetail.Quantity,
 | 
			
		||||
                                    UserId1 = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                                    UserId2 = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                                    MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                                    CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
 | 
			
		||||
                                    CreateTime = DateTime.Now,
 | 
			
		||||
                                    InvoiceNo = orderDetail.OrderNo
 | 
			
		||||
 | 
			
		||||
                                }).ExecuteCommand();
 | 
			
		||||
                                //修改凌晨生成的日结存与总结存数据
 | 
			
		||||
                                AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                                .Where(ab => ab.MachineId.Equals(ConfigurationManager.AppSettings["machineId"].ToString()))
 | 
			
		||||
                                .Where(ab => ab.Type == 3)
 | 
			
		||||
                                .Where(ab => ab.DrugId == orderDetail.DrugId)
 | 
			
		||||
                                .Where(ab => ab.ManuNo == cs.ManuNo)
 | 
			
		||||
                                .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                                if (accountBookG2Day != null)
 | 
			
		||||
                                {
 | 
			
		||||
                                    accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - orderDetail.Quantity;
 | 
			
		||||
                                    SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
			
		||||
                                    int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                                    {
 | 
			
		||||
                                        DrugId = orderDetail.DrugId,
 | 
			
		||||
                                        Type = 3,
 | 
			
		||||
                                        ManuNo = cs.ManuNo,
 | 
			
		||||
                                        EffDate = cs.EffDate,
 | 
			
		||||
                                        YQuantity = 0,
 | 
			
		||||
                                        ManuStock = orderDetail.Quantity,
 | 
			
		||||
                                        TotalStock = orderDetail.Quantity,
 | 
			
		||||
                                        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($"未写入日结存数据{orderDetail.DrugId}-{cs.ManuNo}-{cs.EffDate}-{cs.Quantity}");
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                                //修改凌晨生成的日结存与总结存数据
 | 
			
		||||
                                AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                                .Where(ab => ab.MachineId.Equals(ConfigurationManager.AppSettings["machineId"].ToString()))
 | 
			
		||||
                                .Where(ab => ab.Type == 4)
 | 
			
		||||
                                .Where(ab => ab.DrugId == orderDetail.DrugId)
 | 
			
		||||
                                .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                                if (accountBookG2Total != null)
 | 
			
		||||
                                {
 | 
			
		||||
                                    accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - orderDetail.Quantity;
 | 
			
		||||
                                    SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
			
		||||
                                    int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                                    {
 | 
			
		||||
                                        DrugId = orderDetail.DrugId,
 | 
			
		||||
                                        Type = 4,
 | 
			
		||||
                                        YQuantity = 0,
 | 
			
		||||
                                        ManuStock = orderDetail.Quantity,
 | 
			
		||||
                                        TotalStock = orderDetail.Quantity,
 | 
			
		||||
                                        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($"未写入总结存数据{orderDetail.DrugId}-{orderDetail.Quantity}");
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        return true;
 | 
			
		||||
                    });
 | 
			
		||||
                    if (f.Data)
 | 
			
		||||
                    {
 | 
			
		||||
                        // 更新屏显库存
 | 
			
		||||
                        List<ChannelStock> singleChannels = ChannelStocks.FindAll(it => it.BoardType == 5);
 | 
			
		||||
                        if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 5)
 | 
			
		||||
                        {
 | 
			
		||||
                            singleChannels.ForEach(it =>
 | 
			
		||||
                            {
 | 
			
		||||
                                _portUtil.WriteQuantity(it.DrawerNo, it.ColNo, it.Quantity - it.TakeQuantity);
 | 
			
		||||
                            });
 | 
			
		||||
                        }
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "抽屉取药完成,库存已更新",
 | 
			
		||||
                            Type = MsgType.SUCCESS,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
                    if (!f.IsSuccess)
 | 
			
		||||
                    {
 | 
			
		||||
                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                        {
 | 
			
		||||
                            Message = "抽屉取药完成,库存更新失败!",
 | 
			
		||||
                            Type = MsgType.ERROR,
 | 
			
		||||
                        };
 | 
			
		||||
                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    }
 | 
			
		||||
                    Status = 0;
 | 
			
		||||
                    _isFinishClick = false;
 | 
			
		||||
                    //RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
                    RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    _isFinishClick = false;
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "正在操作,请稍后",
 | 
			
		||||
                        Type = MsgType.ERROR
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public long CurrentTimeMillis()
 | 
			
		||||
        {
 | 
			
		||||
            return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 取消按钮
 | 
			
		||||
        public DelegateCommand CancleTake
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                _portUtil.ResetData();
 | 
			
		||||
                Status = 0;
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand BtnCloseCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (Status != 0)
 | 
			
		||||
                {
 | 
			
		||||
                    _portUtil.ResetData();
 | 
			
		||||
                    Status = 0;
 | 
			
		||||
                }
 | 
			
		||||
                //DialogParameters parameters = new DialogParameters();
 | 
			
		||||
                //parameters.Add("",);
 | 
			
		||||
                // 关闭当前窗口
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -21,7 +21,6 @@ using DM_Weight.Port;
 | 
			
		|||
using DM_Weight.select;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Windows.Markup;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -59,8 +58,6 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                {
 | 
			
		||||
                    // 抽屉打开
 | 
			
		||||
                    case EventType.DRAWEROPEN:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                        if (Status == 1)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (channelStocks[0].process == 1)
 | 
			
		||||
| 
						 | 
				
			
			@ -167,12 +164,11 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            OrderInfo = o;
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            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();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -186,7 +182,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)
 | 
			
		||||
| 
						 | 
				
			
			@ -250,6 +246,24 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            {
 | 
			
		||||
                if (Status == 0)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    //if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开,其他6层管理员才能开
 | 
			
		||||
                    //    bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
 | 
			
		||||
                    //    if (bDrawer)
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    //        {
 | 
			
		||||
                    //            Message = "当前用户没有打开抽屉的权限!",
 | 
			
		||||
                    //            Type = MsgType.ERROR,
 | 
			
		||||
                    //        };
 | 
			
		||||
                    //        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    //        return;
 | 
			
		||||
                    //    }
 | 
			
		||||
 | 
			
		||||
                    //}
 | 
			
		||||
 | 
			
		||||
                    enumerable = ChannelStocks.GroupBy(cs => cs.DrawerNo, cs => cs);
 | 
			
		||||
                    enumerator = enumerable.GetEnumerator();
 | 
			
		||||
                    enumerator.MoveNext();
 | 
			
		||||
| 
						 | 
				
			
			@ -259,321 +273,26 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        public DelegateCommand OpenDrawer_New
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(async () =>
 | 
			
		||||
            {
 | 
			
		||||
                OpenDrawerAction();
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        async Task OpenDrawerAction()
 | 
			
		||||
        {
 | 
			
		||||
            this.Status = 1;
 | 
			
		||||
            // 解析需要打开的抽屉列表
 | 
			
		||||
            //List<OrderTakeVo> drawerNos = this.data.GroupBy(it => it.ChannelStock.DrawerNo).Select(it => it.First()).ToList();
 | 
			
		||||
 | 
			
		||||
            // 根据抽屉类型来决定打开前是否需要查询数量
 | 
			
		||||
            var promiseUtil = new PromiseUtil<int>();
 | 
			
		||||
            enumerable = ChannelStocks.GroupBy(cs => cs.DrawerNo, cs => cs);
 | 
			
		||||
            enumerator = enumerable.GetEnumerator();
 | 
			
		||||
 | 
			
		||||
            _portUtil.WindowName = "OrderTakeDrugWindow";
 | 
			
		||||
            _portUtil.BoardType = ChannelStocks.Count > 0 ? ChannelStocks[0].BoardType : 1;
 | 
			
		||||
            _portUtil.ColNos = ChannelStocks.Select(it => it.ColNo).ToArray();
 | 
			
		||||
            enumerator.MoveNext();
 | 
			
		||||
 | 
			
		||||
            await promiseUtil.taskAsyncLoop(500, 0, async (options, next, stop) =>
 | 
			
		||||
            {
 | 
			
		||||
                //var orderTakeVo = drawerNos[options._data];
 | 
			
		||||
                //orderTakeVo.ChannelStock.DrawerNo;
 | 
			
		||||
                IGrouping<int, ChannelStock> groupingStock = enumerator.Current;
 | 
			
		||||
                var drawerNo = groupingStock.Key;
 | 
			
		||||
                _portUtil.DrawerNo = groupingStock.Key;
 | 
			
		||||
                int[] BeforeQuantity = new int[] { };
 | 
			
		||||
                List<ChannelStock> channelStocks = groupingStock.ToList();
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    if (this.Status == 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        stop();
 | 
			
		||||
                    }
 | 
			
		||||
                    // 开启抽屉
 | 
			
		||||
                    else if (this.Status == 1)
 | 
			
		||||
                    {
 | 
			
		||||
                        // 储物箱直接开
 | 
			
		||||
                        if (channelStocks[0].BoardType == 4)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (channelStocks[0].DrawerState == 0)
 | 
			
		||||
                            {
 | 
			
		||||
                                byte[] resultOpen = await _portUtil.OpenStorage();
 | 
			
		||||
 | 
			
		||||
                                int[] rOpen = resultOpen.Select(it => Convert.ToInt32(it)).ToArray();
 | 
			
		||||
                                if (rOpen[4] != 0)
 | 
			
		||||
                                {
 | 
			
		||||
                                    logger.Info($"储物箱使能成功");
 | 
			
		||||
                                    channelStocks[0].DrawerState = 1;
 | 
			
		||||
                                    next();
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    string _WindowName = "OrderTakeDialog";
 | 
			
		||||
                                    // 重新初始化数据
 | 
			
		||||
                                    _portUtil.ResetData();
 | 
			
		||||
                                    // 指令发送错误,未打开
 | 
			
		||||
                                    // 返回消息  抽屉打开失败
 | 
			
		||||
                                    _eventAggregator.GetEvent<PortUtilEvent>().Publish(new util.DeviceMsg()
 | 
			
		||||
                                    {
 | 
			
		||||
                                        EventType = util.EventType.OPENERROR,
 | 
			
		||||
                                        WindowName = "OrderTakeDialog",
 | 
			
		||||
                                        Message = "储物箱使能失败"
 | 
			
		||||
                                    });
 | 
			
		||||
                                    logger.Info($"储物箱使能失败");
 | 
			
		||||
                                    stop();
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                            }
 | 
			
		||||
                            if (channelStocks[0].DrawerState == 1)
 | 
			
		||||
                            {
 | 
			
		||||
                                // 查询锁状态
 | 
			
		||||
                                byte[] resultBackDoor = await _portUtil.BackDoorState();
 | 
			
		||||
 | 
			
		||||
                                int[] rBackDoor = resultBackDoor.Select(it => Convert.ToInt32(it)).ToArray();
 | 
			
		||||
                                int[] lockStates = _portUtil.CheckStorageStatus(rBackDoor.Skip(3).Take(2).ToArray());
 | 
			
		||||
                                int[] lightStates = _portUtil.CheckStorageStatus(rBackDoor.Skip(5).Take(2).ToArray());
 | 
			
		||||
                                // 锁处于关闭状态
 | 
			
		||||
                                if (lockStates[Convert.ToInt32(ConfigurationManager.AppSettings["StorageBoxAddr"]) - 1] == 0)
 | 
			
		||||
                                {
 | 
			
		||||
                                    // 锁还未打开过
 | 
			
		||||
                                    if (_portUtil.statue == 0)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        // 指示灯不闪烁了,说明规定时间内没有开锁,需要给前台提示
 | 
			
		||||
                                        if (lightStates[Convert.ToInt32(ConfigurationManager.AppSettings["StorageBoxAddr"]) - 1] == 0)
 | 
			
		||||
                                        {
 | 
			
		||||
                                            // 打开失败
 | 
			
		||||
                                            logger.Info($"储物箱指示灯不闪烁,使能过期");
 | 
			
		||||
                                            enumerator.MoveNext();
 | 
			
		||||
                                            next();
 | 
			
		||||
                                        }
 | 
			
		||||
                                        else
 | 
			
		||||
                                        {
 | 
			
		||||
                                            channelStocks[0].DrawerState = 1;
 | 
			
		||||
                                            next();
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                    else if (_portUtil.statue == 1)
 | 
			
		||||
                                    {
 | 
			
		||||
 | 
			
		||||
                                        // 锁是打开状态现在关闭了,说明操作完成了,告诉前台锁已关闭
 | 
			
		||||
                                        _portUtil.statue = 2;
 | 
			
		||||
                                        logger.Info($"储物箱关闭");
 | 
			
		||||
                                        if (options._data == (enumerable.Count() - 1))
 | 
			
		||||
                                        {
 | 
			
		||||
                                            _portUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
 | 
			
		||||
                                            this.Status = 3;
 | 
			
		||||
                                            channelStocks[0].DrawerState = 0;
 | 
			
		||||
                                            stop();
 | 
			
		||||
                                        }
 | 
			
		||||
                                        else
 | 
			
		||||
                                        {
 | 
			
		||||
                                            channelStocks[0].DrawerState = 0;
 | 
			
		||||
                                            enumerator.MoveNext();
 | 
			
		||||
                                            next();
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        // 外置抽屉
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            if (channelStocks[0].DrawerType == 3)
 | 
			
		||||
                            {
 | 
			
		||||
                                if (channelStocks[0].BoardType == 2)
 | 
			
		||||
                                {
 | 
			
		||||
                                    if (channelStocks[0].DrawerState == 0)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        byte[] buffer = await _portUtil.OpenRecover();
 | 
			
		||||
                                        int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
 | 
			
		||||
                                        if ((_portUtil.ColNos[0] > 3 && r[4] == 1) || (_portUtil.ColNos[0] < 4 && r[3] == 1))
 | 
			
		||||
                                        {
 | 
			
		||||
                                            logger.Info($"回收箱打开成功");
 | 
			
		||||
                                            channelStocks[0].DrawerState = 1;
 | 
			
		||||
                                            next();
 | 
			
		||||
                                        }
 | 
			
		||||
                                        else
 | 
			
		||||
                                        {
 | 
			
		||||
                                            logger.Info($"回收箱打开失败");
 | 
			
		||||
                                            stop();
 | 
			
		||||
                                        }
 | 
			
		||||
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if(channelStocks[0].DrawerState == 1)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        // 查询是否关闭状态
 | 
			
		||||
                                        byte[] buffer = await _portUtil.CheckRecoverStatus();
 | 
			
		||||
                                        int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
 | 
			
		||||
 | 
			
		||||
                                        logger.Info($"GeRecoverStatus{string.Join(",", r)}");
 | 
			
		||||
 | 
			
		||||
                                        // 回收箱关闭成功
 | 
			
		||||
                                        if ((_portUtil.ColNos[0] > 3 && r[4] == 0) || (_portUtil.ColNos[0] < 4 && r[3] == 0))
 | 
			
		||||
                                        {
 | 
			
		||||
                                            logger.Info($"回收箱关闭");
 | 
			
		||||
                                            // 查询数量
 | 
			
		||||
                                            byte[] bytes = await _portUtil.CheckRecoverQuantity();
 | 
			
		||||
 | 
			
		||||
                                            int[] r1 = bytes.Select(it => Convert.ToInt32(it)).ToArray();
 | 
			
		||||
                                            // 返回消息库位关闭,放入空瓶数量
 | 
			
		||||
                                            int[] quantitys = r1.Skip(3).Take(3).ToArray();
 | 
			
		||||
                                            int index = _portUtil.ColNos[0] % 3 > 0 ? _portUtil.ColNos[0] % 3 - 1 : 2;
 | 
			
		||||
 | 
			
		||||
                                            // 指定库位放入的药品数量
 | 
			
		||||
                                            int InCount = quantitys[index];
 | 
			
		||||
                                            logger.Info($"回收板数量变化【{string.Join(",", quantitys)}】");
 | 
			
		||||
 | 
			
		||||
                                            enumerator.MoveNext();
 | 
			
		||||
                                            next();
 | 
			
		||||
                                        }
 | 
			
		||||
                                        else
 | 
			
		||||
                                        {
 | 
			
		||||
                                            // 查询是否关闭状态
 | 
			
		||||
                                            await Task.Delay(200);
 | 
			
		||||
                                            next();
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                if (channelStocks[0].DrawerState == 0)
 | 
			
		||||
                                {
 | 
			
		||||
                                    // 判断是否为单支抽屉
 | 
			
		||||
                                    if (channelStocks[0].BoardType == 2)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        byte[] quantity = await _portUtil.CheckQuantityByDrawer();
 | 
			
		||||
                                        BeforeQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
			
		||||
                                        logger.Info($"单支抽屉,开抽屉前检测数量【{string.Join(",", BeforeQuantity)}】");
 | 
			
		||||
 | 
			
		||||
                                        await _portUtil.HasLightOnByCol();
 | 
			
		||||
                                    }
 | 
			
		||||
                                    // 药盒
 | 
			
		||||
                                    if (channelStocks[0].BoardType == 3)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        // 药盒指示灯使能
 | 
			
		||||
                                        await _portUtil.BoxLockLightOn();
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if (channelStocks[0].BoardType == 6)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        // 药盒指示灯使能
 | 
			
		||||
                                        await _portUtil.BoxLockLightOn2();
 | 
			
		||||
                                    }
 | 
			
		||||
                                    byte[] buffer = await _portUtil.OpenDrawer();
 | 
			
		||||
                                    int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
 | 
			
		||||
 | 
			
		||||
                                    logger.Info($"OpenDrawer{string.Join(",", r)}");
 | 
			
		||||
                                    if (_portUtil.DrawerState(r))
 | 
			
		||||
                                    {
 | 
			
		||||
                                        _portUtil.SpeakAsync($"{drawerNo}号抽屉已经打开,请,取药");
 | 
			
		||||
                                        channelStocks[0].DrawerState = 1;
 | 
			
		||||
                                        next();
 | 
			
		||||
                                    }
 | 
			
		||||
                                    else
 | 
			
		||||
                                    {
 | 
			
		||||
                                        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                                        {
 | 
			
		||||
                                            Message = $"抽屉【{drawerNo}】打开失败,请检测硬件",
 | 
			
		||||
                                            Type = MsgType.ERROR,
 | 
			
		||||
                                        };
 | 
			
		||||
                                        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
 | 
			
		||||
                                        logger.Info($"抽屉打开失败");
 | 
			
		||||
                                        _portUtil.ResetData();
 | 
			
		||||
                                        stop();
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                                // 检测状态
 | 
			
		||||
                                else if (channelStocks[0].DrawerState == 1)
 | 
			
		||||
                                {
 | 
			
		||||
                                    // 查询抽屉是否为关闭状态
 | 
			
		||||
                                    byte[] buffer = await _portUtil.CheckDrawerStatus();
 | 
			
		||||
 | 
			
		||||
                                    int[] r = buffer.Select(it => Convert.ToInt32(it)).ToArray();
 | 
			
		||||
 | 
			
		||||
                                    logger.Info($"GetDrawerStatus{string.Join(",", r)}");
 | 
			
		||||
                                    // 抽屉没有关闭
 | 
			
		||||
                                    if (_portUtil.DrawerState(r))
 | 
			
		||||
                                    {
 | 
			
		||||
                                        if (channelStocks[0].BoardType == 2)
 | 
			
		||||
                                        {
 | 
			
		||||
                                            byte[] quantity = await _portUtil.CheckQuantityByDrawer();
 | 
			
		||||
                                            int[] AfterQuantity = quantity.Select(it => Convert.ToInt32(it)).ToArray().Skip(3).Take(9).ToArray();
 | 
			
		||||
                                            logger.Info($"AfterQuantity{string.Join(",", AfterQuantity)}");
 | 
			
		||||
                                            logger.Info($"单支抽屉,抽屉未关检测数量【{string.Join(",", AfterQuantity)}】");
 | 
			
		||||
 | 
			
		||||
                                            ChannelStocks.ForEach(cl =>
 | 
			
		||||
                                            {
 | 
			
		||||
                                                if (cl.DrawerNo == drawerNo)
 | 
			
		||||
                                                {
 | 
			
		||||
                                                    logger.Info($"单支抽屉【{drawerNo}】,应取药品数量【{cl.Quantity}】,现实取数量【{BeforeQuantity[cl.ColNo - 1] - AfterQuantity[cl.ColNo - 1]}】");
 | 
			
		||||
                                                }
 | 
			
		||||
 | 
			
		||||
                                            });
 | 
			
		||||
                                        }
 | 
			
		||||
                                        next(); // continue iteration
 | 
			
		||||
                                    }
 | 
			
		||||
                                    else
 | 
			
		||||
                                    {
 | 
			
		||||
                                        ChannelStocks.ForEach(cl =>
 | 
			
		||||
                                        {
 | 
			
		||||
                                            if (cl.DrawerNo == drawerNo)
 | 
			
		||||
                                            {
 | 
			
		||||
                                                cl.TakeQuantity = cl.Quantity;
 | 
			
		||||
 | 
			
		||||
                                            }
 | 
			
		||||
                                        });
 | 
			
		||||
                                        channelStocks[0].DrawerState = 2;
 | 
			
		||||
                                        if (options._data == (enumerable.Count() - 1))
 | 
			
		||||
                                        {
 | 
			
		||||
                                            _portUtil.SpeakAsync($"取药完成,请,点击完成按钮进行确认");
 | 
			
		||||
                                            this.Status = 3;
 | 
			
		||||
                                            channelStocks[0].DrawerState = 0;
 | 
			
		||||
                                            stop();
 | 
			
		||||
                                        }
 | 
			
		||||
                                        else
 | 
			
		||||
                                        {
 | 
			
		||||
                                            options._data += 1;
 | 
			
		||||
                                            channelStocks[0].DrawerState = 0;
 | 
			
		||||
                                            enumerator.MoveNext();
 | 
			
		||||
                                            next();
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    //_portUtil.ResetData();
 | 
			
		||||
                    logger.Info($"处方取药发生错误,{e.Message}"); AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = $"处方取药发生错误{e.Message}",
 | 
			
		||||
                        Type = MsgType.ERROR,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
 | 
			
		||||
                    stop();
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        private void OpenOneByOne()
 | 
			
		||||
        {
 | 
			
		||||
            IGrouping<int, ChannelStock> grouping = enumerator.Current;
 | 
			
		||||
            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);
 | 
			
		||||
| 
						 | 
				
			
			@ -666,16 +385,103 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                                    OperationTime = DateTime.Now,
 | 
			
		||||
                                    Quantity = it.TakeQuantity,
 | 
			
		||||
                                    Type = 2,
 | 
			
		||||
                                    InvoiceId = InvoiceId,
 | 
			
		||||
                                    StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                                    InvoiceId = InvoiceId
 | 
			
		||||
                                    //, StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                                }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                                //保存账册
 | 
			
		||||
                                int iInsertResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                                {
 | 
			
		||||
                                    DrugId = it.DrugId,
 | 
			
		||||
                                    Type = 2,
 | 
			
		||||
                                    Department = OrderInfo.DeptName,
 | 
			
		||||
                                    OrderNo = OrderInfo.OrderNo,
 | 
			
		||||
                                    ManuNo = it.ManuNo,
 | 
			
		||||
                                    EffDate = it.EffDate,
 | 
			
		||||
                                    OutQuantity = it.TakeQuantity,
 | 
			
		||||
                                    UserId1 = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                                    UserId2 = HomeWindowViewModel.Reviewer?.Id,
 | 
			
		||||
                                    MachineId = ConfigurationManager.AppSettings["machineId"].ToString(),
 | 
			
		||||
                                    CreateDate = DateTime.Now.ToString("yyyy-MM-dd"),
 | 
			
		||||
                                    CreateTime = DateTime.Now,
 | 
			
		||||
                                    InvoiceNo = OrderInfo.OrderNo
 | 
			
		||||
 | 
			
		||||
                                }).ExecuteCommand();
 | 
			
		||||
                                //修改凌晨生成的日结存与总结存数据
 | 
			
		||||
                                AccountBookG2 accountBookG2Day = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                                .Where(ab => ab.MachineId.Equals(it.MachineId))
 | 
			
		||||
                                .Where(ab => ab.Type == 3)
 | 
			
		||||
                                .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
                                .Where(ab => ab.ManuNo == it.ManuNo)
 | 
			
		||||
                                .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                                if (accountBookG2Day != null)
 | 
			
		||||
                                {
 | 
			
		||||
                                    accountBookG2Day.ManuStock = accountBookG2Day.ManuStock - it.TakeQuantity;
 | 
			
		||||
                                    SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
			
		||||
                                    int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                                    {
 | 
			
		||||
                                        DrugId = it.DrugId,
 | 
			
		||||
                                        Type = 3,
 | 
			
		||||
                                        ManuNo = it.ManuNo,
 | 
			
		||||
                                        EffDate = it.EffDate,
 | 
			
		||||
                                        YQuantity = 0,
 | 
			
		||||
                                        ManuStock = it.TakeQuantity,
 | 
			
		||||
                                        TotalStock = it.TakeQuantity,
 | 
			
		||||
                                        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($"未写入日结存数据{it.DrugId}-{it.ManuNo}-{it.EffDate}-{it.AddQuantity}");
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                                //修改凌晨生成的日结存与总结存数据
 | 
			
		||||
                                AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                                .Where(ab => ab.MachineId.Equals(it.MachineId))
 | 
			
		||||
                                .Where(ab => ab.Type == 4)
 | 
			
		||||
                                .Where(ab => ab.DrugId == it.DrugId)
 | 
			
		||||
                                .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                                if (accountBookG2Total != null)
 | 
			
		||||
                                {
 | 
			
		||||
                                    accountBookG2Total.TotalStock = accountBookG2Total.TotalStock - it.TakeQuantity;
 | 
			
		||||
                                    SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
                                    //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
			
		||||
                                    int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                                    {
 | 
			
		||||
                                        DrugId = it.DrugId,
 | 
			
		||||
                                        Type = 4,
 | 
			
		||||
                                        YQuantity = 0,
 | 
			
		||||
                                        ManuStock = it.TakeQuantity,
 | 
			
		||||
                                        TotalStock = it.TakeQuantity,
 | 
			
		||||
                                        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($"未写入总结存数据{it.DrugId}-{it.AddQuantity}");
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                            }
 | 
			
		||||
                            return true;
 | 
			
		||||
                        });
 | 
			
		||||
                        if (f.Data)
 | 
			
		||||
                        {
 | 
			
		||||
                            // 更新屏显库存
 | 
			
		||||
                            List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType != 1);
 | 
			
		||||
                            List<ChannelStock> singleChannels = record.FindAll(it => it.BoardType == 5);
 | 
			
		||||
                            if ((singleChannels.Count > 0 ? singleChannels[0].BoardType : 1) == 5)
 | 
			
		||||
                            {
 | 
			
		||||
                                singleChannels.ForEach(it =>
 | 
			
		||||
| 
						 | 
				
			
			@ -730,17 +536,8 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                //Status = 0;
 | 
			
		||||
                //_portUtil.statue = 0;
 | 
			
		||||
                //_portUtil.ResetData();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                if (Status != 0)
 | 
			
		||||
                {
 | 
			
		||||
                    _portUtil.ResetData();
 | 
			
		||||
                    Status = 0;
 | 
			
		||||
                }
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
                _portUtil.ResetData();
 | 
			
		||||
                Status = 0;
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,295 @@
 | 
			
		|||
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.Configuration;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class OrderTakeDrugNewWindowViewModel : 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 OrderTakeDrugNewWindowViewModel(IDialogService DialogService, IEventAggregator eventAggregator)
 | 
			
		||||
        {
 | 
			
		||||
            _dialogService = DialogService;
 | 
			
		||||
            _eventAggregator = eventAggregator;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static List<OrderTakeSelect> StaticOrderTakeSelects = new()
 | 
			
		||||
        {
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code = "OrderNo",
 | 
			
		||||
                Name = "处方号"
 | 
			
		||||
            },
 | 
			
		||||
            new OrderTakeSelect
 | 
			
		||||
            {
 | 
			
		||||
                Code = "PatientId",
 | 
			
		||||
                Name = "患者编号"
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        private List<OrderTakeSelect> _orderTakeSelects = StaticOrderTakeSelects;
 | 
			
		||||
 | 
			
		||||
        public List<OrderTakeSelect> OrderTakeSelects
 | 
			
		||||
        {
 | 
			
		||||
            get { return _orderTakeSelects; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _orderTakeSelects, value);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private OrderTakeSelect _selectedItem = StaticOrderTakeSelects[0];
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public OrderTakeSelect SelectedItem
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selectedItem; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _selectedItem, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private OrderInfo? _selectedOrder;
 | 
			
		||||
 | 
			
		||||
        public OrderInfo? SelectedOrder
 | 
			
		||||
        {
 | 
			
		||||
            get { return _selectedOrder; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _selectedOrder, value);
 | 
			
		||||
 | 
			
		||||
                //OpenOrderDialog();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private string _orderDate = DateTime.Now.ToString("yyyy-MM-dd");
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件  处方日期
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string OrderDate
 | 
			
		||||
        {
 | 
			
		||||
            get { return _orderDate; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                if (!String.IsNullOrEmpty(value))
 | 
			
		||||
                {
 | 
			
		||||
                    SetProperty(ref _orderDate, DateTime.Parse(value).ToString("yyyy-MM-dd"));
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    SetProperty(ref _orderDate, value);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private string? _searchValue;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 查询条件 查询字段值
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string? SearchValue
 | 
			
		||||
        {
 | 
			
		||||
            get { return _searchValue; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _searchValue, value);
 | 
			
		||||
                RequestData();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private List<OrderInfo> _orderInfos = new();
 | 
			
		||||
 | 
			
		||||
        public List<OrderInfo> OrderInfos { get { return _orderInfos; } set { SetProperty(ref _orderInfos, value); } }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
 | 
			
		||||
        public async void OpenOrderDialog()
 | 
			
		||||
        {
 | 
			
		||||
            if (SelectedOrder != null && SelectedOrder.DmStatus == 0 && SelectedOrder.CancelFlag == 0 && SelectedOrder.HisDispFlag == 0)
 | 
			
		||||
            {
 | 
			
		||||
                // 此处延时1毫秒,等待页面渲染
 | 
			
		||||
                await Task.Delay(TimeSpan.FromMilliseconds(1));
 | 
			
		||||
                DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                dialogParameters.Add("orderInfo", SelectedOrder);
 | 
			
		||||
                DialogServiceExtensions.ShowDialogHost(_dialogService, "OrderTakeNewDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private void DoDialogResult(IDialogResult dialogResult)
 | 
			
		||||
        {
 | 
			
		||||
            // 委托   被动执行     被子窗口执行
 | 
			
		||||
            // dialogResult  第一方面可以拿到任意参数   第二方面   可判断关闭状态
 | 
			
		||||
            //if(dialogResult.Result == ButtonResult.OK)
 | 
			
		||||
            //{
 | 
			
		||||
            SelectedOrder = null;
 | 
			
		||||
            RequestData();
 | 
			
		||||
            //}
 | 
			
		||||
            //MessageBox.Show("返回值:" + dialogResult.Result.ToString());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //这个方法用于拦截请求,continuationCallback(true)就是不拦截,continuationCallback(false)拦截本次操作
 | 
			
		||||
        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
 | 
			
		||||
        {
 | 
			
		||||
            continuationCallback(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand QueryCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                RequestData();
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        //取药按钮事件
 | 
			
		||||
        public DelegateCommand TakeDrug
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() => {
 | 
			
		||||
                if(OrderInfos is null|| OrderInfos.Count<=0)
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = "没有处方数据",
 | 
			
		||||
                        Type = MsgType.ERROR
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    return;                
 | 
			
		||||
                }
 | 
			
		||||
                DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                dialogParameters.Add("OrderDate", OrderDate);
 | 
			
		||||
                dialogParameters.Add("SelectedItem", SelectedItem);
 | 
			
		||||
                dialogParameters.Add("SearchValue", SearchValue);
 | 
			
		||||
                DialogServiceExtensions.ShowDialogHost(_dialogService, "OrderTakeAllDrugDialog", dialogParameters, DoDialogResult, "RootDialog");
 | 
			
		||||
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            OrderInfos.Clear();
 | 
			
		||||
            int totalCount = 0;
 | 
			
		||||
            //string SearchValue = null;
 | 
			
		||||
            //if (SearchValue != null)
 | 
			
		||||
            //{
 | 
			
		||||
            //    strSearchValue = SearchValue.Trim().Replace("\r", "");
 | 
			
		||||
            //}
 | 
			
		||||
            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)
 | 
			
		||||
                .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)
 | 
			
		||||
                .WhereIF(!String.IsNullOrEmpty(ConfigurationManager.AppSettings["storage"]), oi => oi.Pharmacy == ConfigurationManager.AppSettings["storage"])
 | 
			
		||||
                .Where(oi => oi.DmStatus == 0)
 | 
			
		||||
                .Where(oi => oi.HisDispFlag == 0)
 | 
			
		||||
                .Where(oi => oi.CancelFlag == 0)
 | 
			
		||||
                .Where(oi => oi.Pharmacy.Equals(ConfigurationManager.AppSettings["storage"] ?? ""))
 | 
			
		||||
                .GroupBy(oi => oi.OrderDate)
 | 
			
		||||
                .Select(oi => oi)
 | 
			
		||||
                .ToPageList(PageNum, PageSize, ref totalCount);
 | 
			
		||||
            //.ToList();
 | 
			
		||||
            OrderInfos = queryData;
 | 
			
		||||
            TotalCount = totalCount;
 | 
			
		||||
            PageCount = (int)Math.Ceiling((double)TotalCount / PageSize);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //接收导航传过来的参数  现在是在此处初始化了表格数据
 | 
			
		||||
        public void OnNavigatedTo(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            _eventAggregator.GetEvent<PortUtilEvent>().Subscribe(DoMyPrismEvent);
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //每次导航的时候,该实列用不用重新创建,true是不重新创建,false是重新创建
 | 
			
		||||
        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;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -232,6 +232,7 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
                .Where(oi => oi.DmStatus == 0)
 | 
			
		||||
                .Where(oi => oi.HisDispFlag == 0)
 | 
			
		||||
                .Where(oi => oi.CancelFlag == 0)
 | 
			
		||||
                .Where(oi=>oi.Pharmacy.Equals(ConfigurationManager.AppSettings["storage"] ?? ""))
 | 
			
		||||
                .GroupBy(oi => oi.OrderDate)
 | 
			
		||||
                .Select(oi => oi)
 | 
			
		||||
                .ToPageList(PageNum, PageSize, ref totalCount);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,185 @@
 | 
			
		|||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.msg;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using log4net;
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class OrderTakeNewDialogViewModel : BindableBase, IDialogAware, IRegionMemberLifetime
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ILog logger = LogManager.GetLogger(typeof(OrderTakeDialogViewModel));
 | 
			
		||||
        public string Title => "处方取药";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public event Action<IDialogResult> RequestClose;
 | 
			
		||||
 | 
			
		||||
        private static readonly DateTime Jan1st1970 = new DateTime
 | 
			
		||||
   (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
 | 
			
		||||
 | 
			
		||||
        IDialogService _dialogService;
 | 
			
		||||
        public OrderTakeNewDialogViewModel(IDialogService DialogService)
 | 
			
		||||
        {
 | 
			
		||||
            _dialogService = DialogService;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private int _status = 0;
 | 
			
		||||
 | 
			
		||||
        public int Status
 | 
			
		||||
        {
 | 
			
		||||
            get => _status; set => SetProperty(ref _status, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private OrderInfo? _orderInfo;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public OrderInfo? OrderInfo
 | 
			
		||||
        {
 | 
			
		||||
            get => _orderInfo;
 | 
			
		||||
            set => SetProperty(ref _orderInfo, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private List<OrderDetail> orderDetails { get; set; }
 | 
			
		||||
 | 
			
		||||
        private List<ChannelStock> _channelStocks;
 | 
			
		||||
 | 
			
		||||
        public List<ChannelStock> ChannelStocks
 | 
			
		||||
        {
 | 
			
		||||
            get => _channelStocks;
 | 
			
		||||
            set => SetProperty(ref _channelStocks, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private IEnumerable<IGrouping<int, ChannelStock>> enumerable;
 | 
			
		||||
        private IEnumerator<IGrouping<int, ChannelStock>> enumerator;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public bool CanCloseDialog()
 | 
			
		||||
        {
 | 
			
		||||
            return Status == 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogClosed()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogOpened(IDialogParameters parameters)
 | 
			
		||||
        {
 | 
			
		||||
            OrderInfo o = parameters.GetValue<OrderInfo>("orderInfo");
 | 
			
		||||
            OrderInfo = o;
 | 
			
		||||
            RequestData();
 | 
			
		||||
        }
 | 
			
		||||
        public async void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            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"] ?? "DM3")).GroupBy(cs => cs.DrugId), (od, t) => od.DrugId == t.DrugId)
 | 
			
		||||
                .Where(od => od.OrderNo == OrderInfo.OrderNo)
 | 
			
		||||
                .ToList();
 | 
			
		||||
 | 
			
		||||
            List<ChannelStock> channelStocks = new List<ChannelStock>();
 | 
			
		||||
            List<string> msg = new List<string>();
 | 
			
		||||
            for (int i = 0; i < orderDetails.Count; i++)
 | 
			
		||||
            {
 | 
			
		||||
                OrderDetail orderDetail = orderDetails[i];
 | 
			
		||||
 | 
			
		||||
                List<ChannelStock> HasQChannels = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                    .Includes<DrugInfo>(cs => cs.DrugInfo)
 | 
			
		||||
                    .Where(cs => cs.Quantity > 0)
 | 
			
		||||
                    .Where(cs => cs.DrawerType == 1)
 | 
			
		||||
                    .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)
 | 
			
		||||
                    .OrderBy(cs => cs.EffDate)
 | 
			
		||||
                    .OrderBy(cs => cs.DrawerNo)
 | 
			
		||||
                    .ToList();
 | 
			
		||||
                int total = HasQChannels.Sum(it => it.Quantity);
 | 
			
		||||
                int TakeQ = orderDetail.Quantity;
 | 
			
		||||
                // 说明数量足够
 | 
			
		||||
                if (total >= TakeQ)
 | 
			
		||||
                {
 | 
			
		||||
                    for (int j = 0; TakeQ > 0; j++)
 | 
			
		||||
                    {
 | 
			
		||||
                        ChannelStock stock = HasQChannels[j];
 | 
			
		||||
                        if (TakeQ > stock.Quantity)
 | 
			
		||||
                        {
 | 
			
		||||
                            stock.TakeQuantity = stock.Quantity;
 | 
			
		||||
                            channelStocks.Add(stock);
 | 
			
		||||
                            TakeQ -= stock.Quantity;
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            stock.TakeQuantity = TakeQ;
 | 
			
		||||
                            channelStocks.Add(stock);
 | 
			
		||||
                            TakeQ = 0;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    msg.Add($"药品【{orderDetail.DrugInfo.DrugName}】库存不足,应取【{TakeQ}】库存【{total}】");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (msg.Count > 0)
 | 
			
		||||
            {
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
                //MessageBox.Show(string.Join("\n", msg));
 | 
			
		||||
                DialogParameters dialogParameters = new DialogParameters();
 | 
			
		||||
                dialogParameters.Add("msgInfo", msg);
 | 
			
		||||
                DialogServiceExtensions.ShowDialogHost(_dialogService, "ShowMessageDialog", dialogParameters, "RootDialog");
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                channelStocks.Sort((a, b) =>
 | 
			
		||||
                {
 | 
			
		||||
                    if ((a.DrawerNo - b.DrawerNo) == 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        return a.ColNo - b.ColNo;
 | 
			
		||||
                    }
 | 
			
		||||
                    return a.DrawerNo - b.DrawerNo;
 | 
			
		||||
                });
 | 
			
		||||
                ChannelStocks = channelStocks;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private bool _isFinishClick = false;
 | 
			
		||||
       
 | 
			
		||||
        public long CurrentTimeMillis()
 | 
			
		||||
        {
 | 
			
		||||
            return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand BtnCloseCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (Status != 0)
 | 
			
		||||
                {
 | 
			
		||||
                    Status = 0;
 | 
			
		||||
                }
 | 
			
		||||
                //DialogParameters parameters = new DialogParameters();
 | 
			
		||||
                //parameters.Add("",);
 | 
			
		||||
                // 关闭当前窗口
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,223 @@
 | 
			
		|||
using DM_Weight.Common;
 | 
			
		||||
using DM_Weight.Models;
 | 
			
		||||
using DM_Weight.Port;
 | 
			
		||||
using DM_Weight.util;
 | 
			
		||||
using Prism.Commands;
 | 
			
		||||
using Prism.Mvvm;
 | 
			
		||||
using Prism.Regions;
 | 
			
		||||
using Prism.Services.Dialogs;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Collections.ObjectModel;
 | 
			
		||||
using System.Configuration;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Unity;
 | 
			
		||||
 | 
			
		||||
namespace DM_Weight.ViewModels
 | 
			
		||||
{
 | 
			
		||||
    public class ReportDrugNameDialogViewModel : BindableBase, IRegionMemberLifetime, IDialogAware
 | 
			
		||||
    {
 | 
			
		||||
        private string? _reportDrugName;
 | 
			
		||||
        public string? ReportDrugName
 | 
			
		||||
        {
 | 
			
		||||
            get => _reportDrugName;
 | 
			
		||||
            set => SetProperty(ref _reportDrugName, value);
 | 
			
		||||
        }
 | 
			
		||||
        private DrugInfo? _leftDrug;
 | 
			
		||||
        public DrugInfo? LeftDrug
 | 
			
		||||
        {
 | 
			
		||||
            get => _leftDrug;
 | 
			
		||||
            set => SetProperty(ref _leftDrug, value);
 | 
			
		||||
        }
 | 
			
		||||
        private ObservableCollection<DrugInfo> _rightDrugNameList = new ObservableCollection<DrugInfo>();
 | 
			
		||||
 | 
			
		||||
        public ObservableCollection<DrugInfo> RightDrugNameList
 | 
			
		||||
        {
 | 
			
		||||
            get => _rightDrugNameList;
 | 
			
		||||
            set => SetProperty(ref _rightDrugNameList, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private DrugInfo? _rightDrugName;
 | 
			
		||||
        public DrugInfo? RightDrugName
 | 
			
		||||
        {
 | 
			
		||||
            get => _rightDrugName;
 | 
			
		||||
            set => SetProperty(ref _rightDrugName, value);
 | 
			
		||||
        }
 | 
			
		||||
        public static ReportDrugNameDialogViewModel vm;
 | 
			
		||||
        public static ObservableCollection<DrugInfo> defaultAll = new ObservableCollection<DrugInfo>();
 | 
			
		||||
        private ObservableCollection<DrugInfo> _allPremissions = defaultAll;
 | 
			
		||||
 | 
			
		||||
        public event Action<IDialogResult> RequestClose;
 | 
			
		||||
 | 
			
		||||
        public ReportDrugNameDialogViewModel()
 | 
			
		||||
        {
 | 
			
		||||
            vm = this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public ObservableCollection<DrugInfo> AllPremissions
 | 
			
		||||
        {
 | 
			
		||||
            get => _allPremissions;
 | 
			
		||||
            set => SetProperty(ref _allPremissions, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool KeepAlive => false;
 | 
			
		||||
        public bool IsNavigationTarget(NavigationContext navigationContext)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void RequestData()
 | 
			
		||||
        {
 | 
			
		||||
            AllPremissions = new ObservableCollection<DrugInfo>();
 | 
			
		||||
            //string str = "SELECT d.drug_id,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d left join drug_base db on d.drug_id=db.drugid and db.machine_id='DM3'";
 | 
			
		||||
            //if (ConfigurationManager.AppSettings["DrugNames"] != null)
 | 
			
		||||
            //{
 | 
			
		||||
            //    str += " where d.drug_id not in (" + CommonClass.ReadAppSetting("DrugNames") + ")";
 | 
			
		||||
            //}
 | 
			
		||||
            //List<DrugInfo> DrugInfos = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
 | 
			
		||||
            //AllPremissions.AddRange(DrugInfos);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            string strRight = "SELECT d.drug_id,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d left join drug_base db on d.drug_id=db.drugid and db.machine_id='DM3'";
 | 
			
		||||
            if (ConfigurationManager.AppSettings["DrugNames"] != null)
 | 
			
		||||
            {
 | 
			
		||||
                strRight += " where d.drug_id in (" + CommonClass.ReadAppSetting("DrugNames")+ ")";
 | 
			
		||||
            }
 | 
			
		||||
            List<DrugInfo> DrugInfosRight = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(strRight).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
            RightDrugNameList.AddRange(DrugInfosRight);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool CanCloseDialog()
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogClosed()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnDialogOpened(IDialogParameters parameters)
 | 
			
		||||
        {
 | 
			
		||||
            //查询报表中的药品名称
 | 
			
		||||
            RequestData();
 | 
			
		||||
            GetAllDrugInfos();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DelegateCommand<DrugInfo> RightSelectedItemChangedCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand<DrugInfo>((DrugInfo _selected) =>
 | 
			
		||||
            {
 | 
			
		||||
                RightDrugName = _selected;
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        public DelegateCommand ToRight => new DelegateCommand(() =>
 | 
			
		||||
        {
 | 
			
		||||
            if (LeftDrug != null)
 | 
			
		||||
            {
 | 
			
		||||
                RightDrugNameList.Insert(0, LeftDrug);
 | 
			
		||||
                AllPremissions.RemoveAt(AllPremissions.ToList().FindIndex(it => it.DrugId == LeftDrug.DrugId));
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        public DelegateCommand ToLeft => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                if (RightDrugName != null)
 | 
			
		||||
                {
 | 
			
		||||
                    AllPremissions.Insert(0, RightDrugName);
 | 
			
		||||
                    RightDrugNameList.RemoveAt(RightDrugNameList.ToList().FindIndex(it => it.DrugId == RightDrugName.DrugId));
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        public DelegateCommand<DrugInfo> LeftSelectedItemChangedCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand<DrugInfo>((DrugInfo _selected) =>
 | 
			
		||||
            {
 | 
			
		||||
                LeftDrug = _selected;
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //保存
 | 
			
		||||
        public DelegateCommand AddRole
 | 
			
		||||
        {
 | 
			
		||||
            get=>new DelegateCommand(()=>
 | 
			
		||||
            {
 | 
			
		||||
                if(RightDrugNameList!=null&& RightDrugNameList.Count>0)
 | 
			
		||||
                {
 | 
			
		||||
                    string strDrugInfo = string.Empty;
 | 
			
		||||
                    for (int i = 0; i < RightDrugNameList.Count; i++)
 | 
			
		||||
                    {
 | 
			
		||||
                        strDrugInfo +="'"+ RightDrugNameList[i].DrugId+"',";
 | 
			
		||||
                    }
 | 
			
		||||
                    if (!string.IsNullOrEmpty(strDrugInfo))
 | 
			
		||||
                    {
 | 
			
		||||
                        strDrugInfo = strDrugInfo.Substring(0, strDrugInfo.Length - 1);
 | 
			
		||||
                        CommonClass.SaveAppSetting("DrugNames", strDrugInfo);
 | 
			
		||||
                        // 关闭当前窗口
 | 
			
		||||
                        RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Title => "";
 | 
			
		||||
        public DelegateCommand BtnCloseCommand
 | 
			
		||||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                //DialogParameters parameters = new DialogParameters();
 | 
			
		||||
                //parameters.Add("",);
 | 
			
		||||
                // 关闭当前窗口
 | 
			
		||||
                RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        private ObservableCollection<DrugInfo>? _drugInfos= defaultAll;
 | 
			
		||||
        public ObservableCollection <DrugInfo>? DrugInfos
 | 
			
		||||
        {
 | 
			
		||||
            get => _drugInfos;
 | 
			
		||||
            set => SetProperty(ref _drugInfos, value);
 | 
			
		||||
        }
 | 
			
		||||
        private DrugInfo? _drugInfo;
 | 
			
		||||
 | 
			
		||||
        public DrugInfo? DrugInfo
 | 
			
		||||
        {
 | 
			
		||||
            get => _drugInfo;
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                SetProperty(ref _drugInfo, value);
 | 
			
		||||
                if (_drugInfo != null)
 | 
			
		||||
                {
 | 
			
		||||
                    AllPremissions.Add(_drugInfo);// = _drugInfo.DrugManuNos.OrderByDescending(dm => dm.ManuNo).ToList();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private void GetAllDrugInfos()
 | 
			
		||||
        {
 | 
			
		||||
            //var list = SqlSugarHelper.Db.Queryable<DrugInfo>().Includes<DrugManuNo>(di => di.DrugManuNos).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
            //DrugInfos = list;
 | 
			
		||||
            string str = "SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
 | 
			
		||||
           var DrugInfoslist = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
            DrugInfos.AddRange(DrugInfoslist);
 | 
			
		||||
            //DrugInfos_PY = list;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public void UpdateComboBoxItems(string text)
 | 
			
		||||
        {
 | 
			
		||||
            string str = @"SELECT d.drug_id,d.py_code,d.drug_barcode,d.drug_name,d.drug_brand_name,d.drug_spec,d.dosage,d.pack_unit,
 | 
			
		||||
                        d.manufactory,d.max_stock,CONCAT(drug_name,' / ',drug_spec,' / ',manufactory) as drug_name_spec FROM `drug_info` d";
 | 
			
		||||
            if (string.IsNullOrEmpty(text))
 | 
			
		||||
            {
 | 
			
		||||
               var DrugInfosLst = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
                DrugInfos.AddRange(DrugInfosLst);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (DrugInfos != null)
 | 
			
		||||
            {
 | 
			
		||||
                DrugInfos.Clear();
 | 
			
		||||
            }
 | 
			
		||||
            var DrugInfosList = SqlSugarHelper.Db.SqlQueryable<DrugInfo>(str).Where(di => di.DrugName.Contains(text) || di.PyCode.Contains(text)).OrderBy(di => di.DrugName).OrderBy(di => di.DrugId).ToList();
 | 
			
		||||
            DrugInfos.AddRange(DrugInfosList);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -148,6 +148,8 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        string drawerAuthority = string.Empty;
 | 
			
		||||
        string[] drawerAuthorityList;
 | 
			
		||||
 | 
			
		||||
        public bool CanCloseDialog()
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -176,12 +178,12 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
            List<ChannelStock> queryData = SqlSugarHelper.Db.Queryable<ChannelStock>()
 | 
			
		||||
                .Where(cs => cs.DrugId == MachineRecord.DrugId)
 | 
			
		||||
                .Where(cs => cs.MachineId.Equals(ConfigurationManager.AppSettings["machineId"] ?? "DM1"))
 | 
			
		||||
                .WhereIF(MachineRecord.ManuNo != null,cs => cs.ManuNo == MachineRecord.ManuNo)
 | 
			
		||||
                .WhereIF(MachineRecord.ManuNo != null, cs => cs.ManuNo == MachineRecord.ManuNo)
 | 
			
		||||
                .OrderBy(cs => cs.DrawerNo)
 | 
			
		||||
                .OrderBy(cs => cs.ColNo)
 | 
			
		||||
                .ToList();
 | 
			
		||||
            ChannelStocks = queryData;
 | 
			
		||||
            if(ChannelStocks.Count > 0)
 | 
			
		||||
            if (ChannelStocks.Count > 0)
 | 
			
		||||
            {
 | 
			
		||||
                ChannelStock = ChannelStocks[0];
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -191,18 +193,51 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
        {
 | 
			
		||||
            get => new DelegateCommand(() =>
 | 
			
		||||
            {
 | 
			
		||||
                //if (HomeWindowViewModel.Operator.Role != null && HomeWindowViewModel.Operator.Role.RoleName != "管理员")
 | 
			
		||||
                //{
 | 
			
		||||
                //    //查看当前用户是否有所在药品抽屉的权限;1-2层所有人能开,其他6层管理员才能开
 | 
			
		||||
                //    bool bDrawer = ChannelStocks.Select(it => it.DrawerNo).Where(n => n > 3).Any();
 | 
			
		||||
                //    if (bDrawer)
 | 
			
		||||
                //    {
 | 
			
		||||
                //        AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                //        {
 | 
			
		||||
                //            Message = "当前用户没有打开抽屉的权限!",
 | 
			
		||||
                //            Type = MsgType.ERROR,
 | 
			
		||||
                //        };
 | 
			
		||||
                //        _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                //        return;
 | 
			
		||||
                //    }
 | 
			
		||||
 | 
			
		||||
                //}
 | 
			
		||||
 | 
			
		||||
                bool hasAuthority = Array.Exists(drawerAuthorityList, element => element == ChannelStock.DrawerNo.ToString());
 | 
			
		||||
                if (!hasAuthority)
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
                        Message = $"当前用户没有打开{ChannelStock.DrawerNo}号抽屉的权限!",
 | 
			
		||||
                        Type = MsgType.ERROR,
 | 
			
		||||
                    };
 | 
			
		||||
                    _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (ChannelStock != null)
 | 
			
		||||
                {
 | 
			
		||||
                    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;
 | 
			
		||||
                    _portUtil.ColNos = new int[] { ChannelStock.ColNo };
 | 
			
		||||
                    _portUtil.DrawerNo = ChannelStock.DrawerNo;
 | 
			
		||||
                    _portUtil.Start();
 | 
			
		||||
                } else
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    AlertMsg alertMsg = new AlertMsg
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -252,21 +287,108 @@ namespace DM_Weight.ViewModels
 | 
			
		|||
 | 
			
		||||
                    // 保存数据 还药记录
 | 
			
		||||
                    SqlSugarHelper.Db.Insertable(new MachineRecord()
 | 
			
		||||
                    {
 | 
			
		||||
                        MachineId = ChannelStock.MachineId,
 | 
			
		||||
                        DrawerNo = ChannelStock.DrawerNo,
 | 
			
		||||
                        ColNo = ChannelStock.ColNo,
 | 
			
		||||
                        DrugId = ChannelStock.DrugId,
 | 
			
		||||
                        ManuNo = ChannelStock.ManuNo,
 | 
			
		||||
                        EffDate = !String.IsNullOrEmpty(ChannelStock.EffDate) ? DateTime.ParseExact(ChannelStock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                        Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                        OperationTime = DateTime.Now,
 | 
			
		||||
                        Quantity = ReturnQuantity,
 | 
			
		||||
                        Type = 31,
 | 
			
		||||
                        InvoiceId = InvoiceId,
 | 
			
		||||
                        GetId = MachineRecord.Id
 | 
			
		||||
                        //,StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                    }).ExecuteCommand();
 | 
			
		||||
 | 
			
		||||
                    //保存账册
 | 
			
		||||
                    SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                    {
 | 
			
		||||
                        DrugId = ChannelStock.DrugId,
 | 
			
		||||
                        Type = 1,
 | 
			
		||||
                        Department = ConfigurationManager.AppSettings["department"].ToString(),
 | 
			
		||||
                        InvoiceNo = InvoiceId,
 | 
			
		||||
                        ManuNo = ChannelStock.ManuNo,
 | 
			
		||||
                        EffDate = ChannelStock.EffDate,
 | 
			
		||||
                        AddQuantity = ReturnQuantity,
 | 
			
		||||
                        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(ChannelStock.MachineId))
 | 
			
		||||
                    .Where(ab => ab.Type == 3)
 | 
			
		||||
                    .Where(ab => ab.DrugId == ChannelStock.DrugId)
 | 
			
		||||
                    .Where(ab => ab.ManuNo == ChannelStock.ManuNo)
 | 
			
		||||
                    .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                    if (accountBookG2Day != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        accountBookG2Day.ManuStock = accountBookG2Day.ManuStock + ChannelStock.ReturnQuantity;
 | 
			
		||||
                        SqlSugarHelper.Db.Updateable(accountBookG2Day).ExecuteCommand();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        //生成日结存时可能没有该库位的绑定信息,需要写入日结存
 | 
			
		||||
                        int iDayResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                        {
 | 
			
		||||
                            MachineId = ChannelStock.MachineId,
 | 
			
		||||
                            DrawerNo = ChannelStock.DrawerNo,
 | 
			
		||||
                            ColNo = ChannelStock.ColNo,
 | 
			
		||||
                            DrugId = ChannelStock.DrugId,
 | 
			
		||||
                            Type = 3,
 | 
			
		||||
                            ManuNo = ChannelStock.ManuNo,
 | 
			
		||||
                            EffDate = !String.IsNullOrEmpty(ChannelStock.EffDate) ? DateTime.ParseExact(ChannelStock.EffDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture) : null,
 | 
			
		||||
                            Operator = HomeWindowViewModel.Operator?.Id,
 | 
			
		||||
                            OperationTime = DateTime.Now,
 | 
			
		||||
                            Quantity = ReturnQuantity,
 | 
			
		||||
                            Type = 31,
 | 
			
		||||
                            InvoiceId = InvoiceId,
 | 
			
		||||
                            GetId = MachineRecord.Id,
 | 
			
		||||
                            StockQuantity = nowChannels.Sum(it => it.Quantity)
 | 
			
		||||
                            EffDate = ChannelStock.EffDate,
 | 
			
		||||
                            YQuantity = 0,
 | 
			
		||||
                            ManuStock = ChannelStock.ReturnQuantity,
 | 
			
		||||
                            TotalStock = ChannelStock.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($"未写入日结存数据{ChannelStock.DrugId}-{ChannelStock.ManuNo}-{ChannelStock.EffDate}-{ChannelStock.AddQuantity}");
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    //修改凌晨生成的总结存数据
 | 
			
		||||
                    AccountBookG2 accountBookG2Total = SqlSugarHelper.Db.Queryable<AccountBookG2>()
 | 
			
		||||
                    .Where(ab => ab.MachineId.Equals(ChannelStock.MachineId))
 | 
			
		||||
                    .Where(ab => ab.Type == 4)
 | 
			
		||||
                    .Where(ab => ab.DrugId == ChannelStock.DrugId)
 | 
			
		||||
                    .Where(ab => ab.CreateDate == DateTime.Now.ToString("yyyy-MM-dd")).First();
 | 
			
		||||
                    if (accountBookG2Total != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        accountBookG2Total.TotalStock = accountBookG2Total.TotalStock + ChannelStock.ReturnQuantity;
 | 
			
		||||
                        SqlSugarHelper.Db.Updateable(accountBookG2Total).ExecuteCommand();
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        //生成总结存时可能没有该库位的绑定信息,需要写入总结存
 | 
			
		||||
                        int iTotalResult = SqlSugarHelper.Db.Insertable(new AccountBookG2()
 | 
			
		||||
                        {
 | 
			
		||||
                            DrugId = ChannelStock.DrugId,
 | 
			
		||||
                            Type = 4,
 | 
			
		||||
                            YQuantity = 0,
 | 
			
		||||
                            ManuStock = ChannelStock.ReturnQuantity,
 | 
			
		||||
                            TotalStock = ChannelStock.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($"未写入总结存数据{ChannelStock.DrugId}-{ChannelStock.AddQuantity}");
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    return true;
 | 
			
		||||
                });
 | 
			
		||||
                if (f.Data)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue